【问题标题】:Error when filtering on Guid in OData query在 OData 查询中过滤 Guid 时出错
【发布时间】:2015-10-14 12:11:53
【问题描述】:

我正在尝试过滤我的 OData 查询结果以仅检索与当前记录 ID 相关的活动记录。我正在使用下面的代码:

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);
  }

【问题讨论】:

  • 需要调用的URL,可以通过F12工具抓取
  • 抱歉,我不熟悉如何获取 URL。我已经在 Chrome 上打开了开发者工具。你能引导我到它的位置吗?
  • 嗯,在你看到的错误行中,右边应该有一个链接。单击它,它应该带您到“网络”选项卡的相关行。右键复制网址。编辑:很高兴看到你解决了这个问题。

标签: filter odata dynamics-crm


【解决方案1】:

我在使用新的 Web API v8.2 时遇到了同样的问题。我知道这是在一年前提出的,但对于今天偶然发现这个问题的人来说,这将为我解决问题:

var options = "$select=Subject&$filter=RegardingObjectID eq " + RecordId;

直接将 guid 值(作为字符串)与对象 ID 进行比较。不要试图告诉 API 它是一个向导。它现在足够聪明,知道这一点。我希望这可以帮助其他使用 v8.2 的人。

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

【讨论】:

    【解决方案2】:

    通过查找过滤通过fieldname/Id eq (guid'&lt;your guid&gt;'),所以这应该可以工作:

    var RecordId = parent.Xrm.Page.data.entity.getId();
    var options = "$select=Subject&$filter=RegardingObjectId/Id eq (guid'" + RecordId + "')";
    

    【讨论】:

    • 谢谢,我试过了,但我的浏览器控制台显示:“Uncaught SyntaxError: Unexpected token ILLEGAL”对于那行代码
    • 用您用来查询的完整 ODATA url 修改问题,还有其他问题
    • 完成。请检查我更新的问题。我尝试移除过滤器并再次测试,它工作正常。这就是为什么我断定这是过滤器的问题
    • 我的错误.. 离开了没有结束引号的语句。感谢您的帮助。
    • 嗨@Alex:我试图通过一个属性来过滤,它是 guid::Service?$filter=c8e735a52bd94c40b2d32d572eaa6884_Contract_Contractid eq (guid'f1c6798a-1b31-4312-a663-a3ec47f06f3c') 我得到了错误Unrecognized 'Edm.String' literal 'guid'f1c6798a-1b31-4312-a663-a3ec47f06f3c'' at '57' in 'c8e735a52bd94c40b2d32d572eaa6884_Contract_Contractid eq (guid'f1c6798a-1b31-4312-a663-a3ec47f06f3c')?$filter=c8e735a52bd94c40b2d32d572eaa6884_Contract_Contractid eq (guid'f1c6798a-1b31-4312-a663-a3ec47f06f3c')'. 你能帮我理解我的电话有什么问题吗?谢谢
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多