我正在建立一个查询,它将使用相关查询信息将用户重定向到搜索页面。我的问题是我知道如何通过地址栏获取refinablestring的内部ID的唯一方法,我需要一种能够通过JavaScript获取内部ID的方法。
当我说内部ID时,我的意思是:
名称:Refinablestring00
内部ID:ǂǂ446f63756d656e7460547970652031
生成(解码)的查询:
/sites/example/pages/Search.aspx#Default={"k":"*","r":
[{"n":"RefinableString00","t":
["\"ǂǂ4469736363706c696e652032\""],"o":"and","k":false,"m":null}]}
为了澄清,我希望能够获取内部ID,并且可以访问JSOM /客户端。我有什么选择?
谢谢
答案 0 :(得分:1)
这不是官方的文档,但是我们开始。 让我们看看如何表示精简过滤器:
{
"k": queryText, //search query
"r": [ //<- the list of refiners
{
"n": propertyName, //property value
"t": [token], //encoded property value (see below for a more details)
"o": "and", //(or,and) operators
"k": false,
"m": null
}
],
//another refiners go here..
"l": lcid //language
}
其中token
表示已编码的属性值,可以这样生成:
var strToHex = function (value) {
var hex = unescape(encodeURIComponent(value))
.split('').map(function(v){
return v.charCodeAt(0).toString(16)
}).join('')
return hex;
};
//Usage
var propertyValue = "Jon Doe";
var token = "\"ǂǂ" + strToHex(propertyValue) + "\"";
console.log(token);
示例
下面的示例演示了如何生成搜索URL,其中包括具有属性名称DisplayAuthor
和值Jon Doe
的精简过滤器
function createRefiner(queryText,propertyName, propertyValue,lcid) {
lcid = lcid || 1033;
var strToHex = function (value) {
var hex = unescape(encodeURIComponent(value))
.split('').map(function(v){
return v.charCodeAt(0).toString(16)
}).join('')
return hex;
};
var token = "\"ǂǂ" + strToHex(propertyValue) + "\"";
return {
"k": queryText,
"r": [{ "n": propertyName, "t": [token], "o": "and", "k": false, "m": null }],
"l": lcid
};
}
//Usage
var refiner = createRefiner("*","DisplayAuthor","Jon Doe");
var queryGroupName = "Default";
var refinerFilter = queryGroupName + '=' + encodeURIComponent(JSON.stringify(refiner));
var pageUrl = "/_layouts/15/osssearchresults.aspx" + '#' + refinerFilter;
console.log(pageUrl);