在 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 的其他人有所帮助。

查看此处以获得更深入的解释 https://community.dynamics.com/crm/b/conorssnippetdiary/archive/2015/12/03/web-api-preview-unrecognized-39-edm-string-39-literal

我在我的 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);