Odata 列出联系人的约会

Odata 列出联系人的约会,odata,dynamics-crm,dynamics-crm-online,Odata,Dynamics Crm,Dynamics Crm Online,我想列出联系人设置为必需参与方的约会。我正在我的组织中运行以下查询 服务端点是这样设置的 https://bazinga/XRMServices/2011/OrganizationData.svc/AppointmentSet? 然后我把它和下面的连接起来 $select= ScheduledStart, ModifiedOn, appointment_activity_parties/PartyId &$top=1000 &$filter= ModifiedO

我想列出联系人设置为必需参与方的约会。我正在我的组织中运行以下查询

服务端点是这样设置的

https://bazinga/XRMServices/2011/OrganizationData.svc/AppointmentSet?
然后我把它和下面的连接起来

$select=
  ScheduledStart,
  ModifiedOn,
  appointment_activity_parties/PartyId
&$top=1000
&$filter=
  ModifiedOn gt DateTime'2014-08-21'
&$expand=appointment_activity_parties
这给了我一些约会的列表,当我调查内容时,我可以清楚地看到一个名为PartId的标签,里面有Id、Name等。信息就在那里。然后我手动检查我感兴趣的联系人的guid,并在过滤器中添加另一个条件来指定它

$select=
  ScheduledStart,
  ModifiedOn,
  appointment_activity_parties/PartyId
&$top=1000
&$filter=
  (ModifiedOn gt DateTime'2014-08-21') 
  and (appointment_activity_parties/PartyId eq guid'...')
&$expand=appointment_activity_parties

然而,愚蠢的组织服务说不存在财产PartyId。当我尝试添加/Id时,它表示在查询时不支持复杂的数据类型。我相信这只是一个小的语法问题,但几个小时之后,我又病又累。我错过了什么

子句
(约会活动方/PartyId eq guid'…')
背后的场景是,您希望在
约会集
中找到约会,其
约会活动方的
PartyId
等于某个guid。但是,如果其
约会活动方的
任何方的
PartyId
等于该GUID,您需要指定是否要返回约会,或者仅当其
约会活动方的
PartyId
所有
PartyId
等于该GUID时,您才想返回约会

任何所有差异在

因此,您可以按如下方式重写查询:

$select=
  ScheduledStart,
  ModifiedOn,
  appointment_activity_parties/PartyId
&$top=1000
&$filter=
  (ModifiedOn gt DateTime'2014-08-21') 
  and (appointment_activity_parties/any(a:a/PartyId eq guid'...'))
&$expand=appointment_activity_parties

您可以根据实际需要选择将
any
修改为
all

首先,您可以尝试获取服务的完整数据结构。第二,就我而言,你的问题似乎很好。也许服务端有漏洞。@QianLi它是在线动态的,所以这可能是微软方面的一些限制,但在这种情况下,你应该在某个地方听说过它。。。我会尝试另一个家伙的暗示,希望他的魔术能达到目的。+1代表魔术的神奇!当谈到oData的版本时,我如何确保目标服务器处理例如V4,如您的示例所示?我担心我让它在我的机器上工作,测试机器,然后,客户会杀了我,因为他们安装了一些垃圾旧垃圾,拒绝升级。@KonradViltersten,关于OData版本的问题。您可以向服务发送一个简单的GET请求并获取响应头。如果有“OData版本:4.0”,则应为OData V4;如果有“DataServiceVersion:3.0;”,则应为OData V3。@KonradViltersten您还可以通过访问服务的$metadata端点来获取服务的版本。V4元数据的“edmx:edmx”元素的“版本”属性值为“4.0”,而V1-3元数据的“edmx:DataServices”元素的“m:DataServiceVersion”属性值为相应的版本号。顺便说一句,OData V3中也支持any()和all()(或者简单地说是lambda运算符)。@YiDing很抱歉不清楚。我的错。我的意思不是说如何调查目标服务器上安装了什么版本的oData,而是网络上的大多数服务器是否安装了最新版本的oData协议。还是应该将其视为一个可能的(注:不是潜在的,而是可能的)问题,以期望并防范它?(无论如何,这可能是一个没有实际意义的问题,因为正如您所提到的,所有和任何服务都已经在V3中可用。)@KonradViltersten就我而言,我认为目前世界上大多数服务都是V3服务。这部分是因为人们编写V1-3服务时主要使用WCF数据服务,但对于V4,他们必须迁移到ASP.NET Web API OData,并且只进行了两个月的RTMed。但根据我对StackOverflow问题的观察,V4问题的百分比每天都在上升。还有一些V4栈即将出现:ODataCpp、ApacheOlingo。因此,我认为V4服务的百分比肯定会上升。