在 OData 查询中过滤 Guid 时出错
Error when filtering on Guid in OData query
我正在尝试过滤我的 OData 查询结果以仅检索与当前记录 ID 相关的 Activity 记录。我正在使用以下代码:
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId eq guid'" + RecordId + "'";
但是,这会产生以下错误:
如何正确筛选 guid?
编辑:
这是我的完整功能:
function retrieveActivities() {
///<summary>
/// Retrieves Activities by passing a filter to the SDK.RestEndpointPaging.RetrieveRecords function
///</summary>
clearRelatedGrid();
var number = parseInt(numberOfActivitiesToRetrieve.options[numberOfActivitiesToRetrieve.selectedIndex].value, 10);
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId/Id eq (guid'" + RecordId + "');
SDK.REST.retrieveMultipleRecords("ActivityPointer", options, retrieveActivitiesCallBack, function (error) { alert(error.message); }, ActivitiesRetrieveComplete);
}
按查找过滤 fieldname/Id eq (guid'<your guid>')
所以这应该有效:
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId/Id eq (guid'" + RecordId + "')";
我在使用新 Web API v8.2 时遇到了同样的问题。我知道这是一年前有人问过的,但对于今天偶然发现这个问题的人来说,这对我来说已经解决了这个问题:
var options = "$select=Subject&$filter=RegardingObjectID eq " + RecordId;
只需将 guid 值(作为字符串)直接与对象 ID 进行比较即可。不要试图告诉 API 它是一个 guid。它现在足够聪明,知道这一点。我希望这对使用 v8.2 的其他人有所帮助。
我在我的 D365 门户中使用这个 OData 查询过滤器。
用于 Guid 过滤
var userId = '{{ user.id }}';
var contactfilteroption = "contactid eq guid'"+userId+"'";
var odataUrI = "https://yourportal.com/_odata/contacts?$filter="+encodeURIComponent(contactfilteroption);
用于字符串过滤
var couponcode = eventdiscountamount.target.value;
var couponcodefilteroption = "stdsscouponcode eq '"+couponcode+"'";
var odataUrI = "https://yourportal.com/_odata/stdssdiscounts?$filter="+encodeURIComponent(couponcodefilteroption);
我正在尝试过滤我的 OData 查询结果以仅检索与当前记录 ID 相关的 Activity 记录。我正在使用以下代码:
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId eq guid'" + RecordId + "'";
但是,这会产生以下错误:
如何正确筛选 guid?
编辑:
这是我的完整功能:
function retrieveActivities() {
///<summary>
/// Retrieves Activities by passing a filter to the SDK.RestEndpointPaging.RetrieveRecords function
///</summary>
clearRelatedGrid();
var number = parseInt(numberOfActivitiesToRetrieve.options[numberOfActivitiesToRetrieve.selectedIndex].value, 10);
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId/Id eq (guid'" + RecordId + "');
SDK.REST.retrieveMultipleRecords("ActivityPointer", options, retrieveActivitiesCallBack, function (error) { alert(error.message); }, ActivitiesRetrieveComplete);
}
按查找过滤 fieldname/Id eq (guid'<your guid>')
所以这应该有效:
var RecordId = parent.Xrm.Page.data.entity.getId();
var options = "$select=Subject&$filter=RegardingObjectId/Id eq (guid'" + RecordId + "')";
我在使用新 Web API v8.2 时遇到了同样的问题。我知道这是一年前有人问过的,但对于今天偶然发现这个问题的人来说,这对我来说已经解决了这个问题:
var options = "$select=Subject&$filter=RegardingObjectID eq " + RecordId;
只需将 guid 值(作为字符串)直接与对象 ID 进行比较即可。不要试图告诉 API 它是一个 guid。它现在足够聪明,知道这一点。我希望这对使用 v8.2 的其他人有所帮助。
我在我的 D365 门户中使用这个 OData 查询过滤器。
用于 Guid 过滤
var userId = '{{ user.id }}';
var contactfilteroption = "contactid eq guid'"+userId+"'";
var odataUrI = "https://yourportal.com/_odata/contacts?$filter="+encodeURIComponent(contactfilteroption);
用于字符串过滤
var couponcode = eventdiscountamount.target.value;
var couponcodefilteroption = "stdsscouponcode eq '"+couponcode+"'";
var odataUrI = "https://yourportal.com/_odata/stdssdiscounts?$filter="+encodeURIComponent(couponcodefilteroption);