用户和安全角色的关系是N:N,所以要查询用户是否拥有某个安全角色即去查找对应的中间表取值即可,那web api如何来查询N:N关系。
先看下查询的xml,这里的entity name即是实体关系名称
var roleXml = "<fetch no-lock='true' output-format='xml-platform'>\
<entity name='systemuserroles'>\
<attribute name='systemuserid'/>\
<link-entity name='role' from='roleid' to ='roleid'>\
<filter type='and'>\
<condition attribute='name' operator='like' value='%审批%'></condition>\
</filter>\
</link-entity>\
<filter type='and'>\
<condition attribute='systemuserid' operator='eq' value='" + userId + "'></condition>\
</filter></entity></fetch>";
但在发起request时的entityName却是systemuserrolescollection,这个你可以在元数据列表中查询到,元数据地址如下,对应到你自己的系统
https://org.domain.com:446/api/data/v8.2/$metadata
var userRole = execFecthXml('systemuserrolescollection', roleXml);
function execFecthXml(entityName, fetchXml) {
var fetchStr = this.getWebAPIUrl() + entityName + "?fetchXml=" + fetchXml;
var req = CRMSdk.ajax.getXHR();
req.open("GET", encodeURI(fetchStr), false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
req.send();
if (req.status == 200)
return JSON.parse(req.responseText).value;
else
throw new Error(JSON.parse(req.responseText).error.message);
}