Microsoft Dynamics 365Web API 限制

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

Microsoft Dynamics 365 Web API 的功能与组织服务功能很类似。 对于 Microsoft Dynamics 365(在线或本地),本主题介绍一些限制。

在本主题中

适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中的限制

适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决的限制

Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中解决的限制

Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决的限制

适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中的限制

本部分提供有关 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中限制的信息。

  • 部分自定义操在 Web API 中不可用

  • 某些组织服务消息中的缺失功能和操作

部分自定义操在 Web API 中不可用

如果您定义包括复杂返回值和简单返回值的自定义操作,相应的操作在 Web API 中不可用,但是使用 2011 SOAP 终结点时可用。 复杂返回值是 EntityReferenceEntityEntityCollection。 您可以有简单返回值的任意组合,或一个复杂返回值。详细信息:创建自己的行动

某些组织服务消息中的缺失功能和操作

下表列出了在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 应用后无相应功能或操作的消息。

GrantAccessRequest

ModifyAccessRequest

ReactivateEntityKeyRequest

RemoveMemberListRequest

RemoveItemCampaignRequest

RemoveItemCampaignActivityRequest

对于初始发布中缺失的功能和操作的列表,请将此列表与 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中添加的功能和操作 和 Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中添加的功能和操作 下方的列表相结合。

适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决的限制

本部分提供有关 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中处理的限制的信息。

  • 用户离线时不为 带脱机访问功能的 Microsoft Dynamics 365 for Outlook 启用 Web API

  • 不能查询日期值

  • 当使用实体集合参数以及其他参数调用操作时,必须将集合参数传递为正文中的最后参数

  • 无法创建客户查找属性

  • 无法检索未发布的元数据

添加的新操作

以下操作已添加到 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 的 Web API。

QualifyLead Action

RetrieveByResourcesService Function

RetrieveFilteredForms Function

用户离线时不为 带脱机访问功能的 Microsoft Dynamics 365 for Outlook 启用 Web API

备注

此问题已在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决。

以窗体脚本、功能区命令或 HTML web 资源运行的 JavaScript 代码无法使用 Web API。 当用户离线时,现在在使用的本地服务器上启用。

不能查询日期值

此问题不是真正的限制,只是语法问题。 指定日期作为筛选器值时,请勿使用单引号。

若查询日期属性,如联系人出生日期,以下查询语法无效。

/contacts?$select=fullname,birthdate&$filter=birthdate eq 1990-01-01

下列语法将不会:

/contacts?$select=fullname,birthdate&$filter=birthdate eq '1990-01-01'

当使用实体集合参数以及其他参数调用操作时,必须将集合参数传递为正文中的最后参数

备注

此问题已在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决。

除其他参数以外,以下操作还包含实体集合参数。

AddListMembersList Action

AddPrivilegesRole Action

CompoundUpdateDuplicateDetectionRule Action

DeliverIncomingEmail Action

DeliverPromoteEmail Action

InstantiateTemplate Action

QualifyMemberList Action

ReplacePrivilegesRole Action

SendTemplate Action

SetLocLabels Action

在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 之前,当您使用这些操作时,包括实体集合的参数必须传递为 JSON 中的最后参数,否则系统将会返回错误。 例如,当您使用 QualifyMemberList Action 并用以下方式传递参数值时,将会出现错误。

{
"ListMember": [
  {
   "@odata.type": "Microsoft.Dynamics.CRM.account",
   "accountid": "483F8080-6976-E511-9172-0024E8436263"
  },
  {
   "@odata.type": "Microsoft.Dynamics.CRM.account",
   "accountid": "4D3F8080-6976-E511-9172-0024E8436263"
  }
 ],
"OverrideorRemove": true
}

但以下应成功。

{
 "OverrideorRemove": true,
 "ListMember": [
  {
   "@odata.type": "Microsoft.Dynamics.CRM.account",
   "accountid": "483F8080-6976-E511-9172-0024E8436263"
  },
  {
   "@odata.type": "Microsoft.Dynamics.CRM.account",
   "accountid": "4D3F8080-6976-E511-9172-0024E8436263"
  }
 ]
}

无法创建客户查找属性

备注

此问题已在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决。

Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中不支持使用 Web API 创建客户查找属性。

若要使用 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地)创建包含 Web API 的客户查找属性,请参阅创建客户查找属性

无法检索未发布的元数据

备注

此问题已在 适用于 Microsoft Dynamics 365 的 2016 年 12 月更新(联机) 和 适用于 Microsoft Dynamics 365 的 2016 年 12 月 Service Pack(本地) 中解决。

检索元数据的组织服务消息包括 RetrieveAsIfPublished 参数,该参数提供返回尚未通过发布进行提交的元数据定义的选项。 当您正在构建应用程序时,此功能非常有用,您可使用该功能编辑元数据并需要保存未提交的更改。 在 Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中,有关元数据的所有检索操作仅返回发布的元数据。 “详细信息:使用具有 Dynamics 365 元数据的 Web API”和“发布自定义项”。

Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中解决的限制

Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 包含新增功能和操作,并解决有关 Web API 的以下问题:

  • Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中添加的功能和操作

  • 无法根据单值导航属性的值筛选查询

Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中添加的功能和操作

下表列出了对 Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 添加的功能和操作。

Book Action

Reschedule Action

CalculateRollupField Function

无法根据单值导航属性的值筛选查询

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 1 和 Microsoft Dynamics CRM 2016 Service Pack 1 中部分解决。 如果单值导航属性引用所引用实体的主属性值,现在则可根据该导航属性筛选查询。详细信息:基于单值导航属性筛选记录

如果您将单值导航属性的属性用作查询中的筛选器,将会看到 501 错误。 例如,以下查询尝试返回其相关主要联系人 firstname 属性值为“Renee”的所有客户。

  • 请求

    GET 
    [Organization URI]/api/data/v8.0/accounts?$select=name&$filter=primarycontactid/firstname eq 'Renee' HTTP/1.1
    Accept: application/json
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
  • 响应

    HTTP/1.1 501 Not Implemented
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {  
     "error": {    
      "code": "",
       "message": "The query node (0) is not supported",
       "innererror": {      
       "message": "The query node (0) is not supported",
       "type": "Microsoft.Crm.CrmHttpException",
       "stacktrace": 
                            <stacktrace value removed for brevity>
      }  
     }
    }
    

Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决的限制

Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM Online 2016 更新 0.1 包含新增功能和操作,并解决有关 Web API 的以下问题。

  • Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中添加的功能和操作

  • 查询自引用多对多关系时出错

  • $select on some $expand 表达式可以忽略

  • 单值导航属性若为空值,则可能不会从 $expand 查询中返回。

  • 链接至 activitypointer 的 FetchXML 查询可能不包括链接的字段

  • 扩展的导航属性结果中可能不会返回空值属性

Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中添加的功能和操作

下表列出了对 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 添加的功能和操作。

CheckIncomingEmail Function

FindParentResourceGroup Function

GetQuantityDecimal Function

IncrementKnowledgeArticleViewCount Function

InitializeFrom Function

IsValidStateTransition Function

QueryMultipleSchedules Function

RetrieveAllEntities Function

RetrieveDuplicates Function

RetrieveLocLabels Function

RetrievePrincipalAccess Function

RetrieveRecordWall Function

RetrieveUnpublishedMultiple Function

SearchByBodyKbArticle Function

SearchByKeywordsKbArticle Function

SearchByTitleKbArticle Function

ValidateRecurrenceRule Function

查询自引用多对多关系时出错

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决。

有两个系统实体具有自引用多对多关系:connectionrole EntityType 具有 connectionroleassociation_association,而 campaign EntityType 具有 campaigncampaign_association。 如果您尝试使用这些集合值导航属性的查询,预期出现以下 HTTP Status 400 错误:Reflexive relationship must specify direction using ReflexiveManyToManyRelationship.

如果您需要使用这些多对多关系查询数据,则可使用相交实体。 对于 campaigncampaign_association 集合值导航属性,campaignitem EntityType 实体为定义关系的特殊相交实体。 对于 connectionroleassociation_associationconnectionroleassociation 是包含用于定义此多对多关系的数据的常见相交实体。 常见相交实体未包括在引用文档中,但在 Web API 中提供。 您可使用此 URL /api/data/v8.0/connectionroleassociations 访问 connectionroleassociation 实体。详细信息:集合值导航属性

$select on some $expand 表达式可以忽略

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决。

当检索两个导航属性时,如果最后一个导航属性不具有 $select 查询选项,则将返回第一个导航属性的所有属性。 例如,如果您构建以下查询:

GET 
[Organization URI]/api/data/v8.0/accounts(0495779B-F67F-E511-80C2-00155DB09B03)$select=name&$expand=contact_customer_accounts($select=lastname),opportunity_customer_accounts

您期望获得客户的 name 属性、使用 contact_customer_accounts 关联的联系人的 lastname 属性以及使用 opportunity_customer_accounts 关联的商机的所有属性。

但是,您将获取联系人的所有属性以及相关商机的所有属性。 最好是始终使用 $select 限制任何检索操作中的属性,所以遵循这一最佳做法可确保您获得最佳性能并且不会检索不需要的数据。

单值导航属性若为空值,则可能不会从 $expand 查询中返回。

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决。

根据 OData 规范,当您扩展单个导航属性且其不包含值时,该属性应包括空集。 当前行为即是该属性将不会包括在 JSON 响应中。 在以下示例中,请求客户 primarycontactid 单值导航属性,但由于没有与该导航属性相关的联系人,所以该值为空。

  • 请求

    GET 
    [Organization URI]/api/data/v8.0/accounts(25DD0B31-ED8B-E511-80D2-00155D2A68D4)?$select=name&$expand=primarycontactid($select=fullname) HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
  • 预期响应

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name,primarycontactid,primarycontactid(fullname))/$entity",
     "@odata.etag": "W/\"504724\"",
     "name": "A. Datum Corporation (sample)",
     "accountid": "25dd0b31-ed8b-e511-80d2-00155d2a68d4",
     "primarycontactid": null
    }
    
  • 实际响应

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name,primarycontactid,primarycontactid(fullname))/$entity",
     "@odata.etag": "W/\"504724\"",
     "name": "A. Datum Corporation (sample)",
     "accountid": "25dd0b31-ed8b-e511-80d2-00155d2a68d4"
    }
    

链接至 activitypointer 的 FetchXML 查询可能不包括链接的字段

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决。

当您使用 FetchXML(包括 activitypointer 作为链接实体)创建查询时,属性值将为空。 例如,如果您使用以下 fetchXML:

<fetch version="1.0"
       output-format="xml-platform"
       mapping="logical"
       distinct="true">
  <entity name="account">
    <attribute name="name" />
    <link-entity name="activitypointer"
                 from="regardingobjectid"
                 to="accountid"
                 link-type="inner">
      <attribute name="subject" />
    </link-entity>
  </entity>
</fetch>

您正在请求相关 activitypointer。 将返回 subject 值。 若实际值存在,它将返回空值。

  • 请求

    GET 
    [Organization URI]/api/data/v8.0/accounts?fetchXml=%3Cfetch%20version=%221.0%22%20output-format=%22xml-platform%22%20mapping=%22logical%22%20distinct=%22true%22%3E%3Centity%20name=%22account%22%3E%3Cattribute%20name=%22name%22%20/%3E%3Clink-entity%20name=%22activitypointer%22%20from=%22regardingobjectid%22%20to=%22accountid%22%20link-type=%22inner%22%3E%3Cattribute%20name=%22subject%22%20/%3E%3C/link-entity%3E%3C/entity%3E%3C/fetch%3E HTTP/1.1
    Accept: application/json
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
  • 预期响应

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name)",
     "value": [
      {
       "name": "A. Datum Corporation (sample)",
       "activitypointer1.subject": "Task Subject Value"
      }
     ]
    }
    
  • 实际响应

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name)",
     "value": [
      {
       "name": "A. Datum Corporation (sample)",
       "activitypointer1.subject": null
      }
     ]
    }
    

详细信息:使用自定义 FetchXML

扩展的导航属性结果中可能不会返回空值属性

备注

此问题已在 Microsoft Dynamics CRM Online 2016 更新 0.1 和 Microsoft Dynamics CRM 2016 更新 0.1 中解决。

当集合值导航属性中的其中一个扩展属性为空时,该扩展的属性将不会包括在结果中。 第一个示例显示当与客户相关的其中一个联系人对扩展 emailaddress1 属性具有空值时的数据。 即使对具有值的联系人也不会返回 emailaddress1 属性。

  • 请求

    GET 
    [Organization URI]/api/data/v8.0/accounts(25DD0B31-ED8B-E511-80D2-00155D2A68D4)?$select=name&$expand=contact_customer_accounts($select=emailaddress1,lastname,firstname) HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
  • 预期响应

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name,contact_customer_accounts,contact_customer_accounts(emailaddress1,lastname,firstname))/$entity",
     "@odata.etag": "W/\"504724\"",
     "name": "A. Datum Corporation (sample)",
     "accountid": "25dd0b31-ed8b-e511-80d2-00155d2a68d4",
     "contact_customer_accounts": [
      {
       "@odata.etag": "W/\"504749\"",
       "emailaddress1": null,
       "lastname": "Valdes (sample)",
       "firstname": "Rene",
       "contactid": "8bdd0b31-ed8b-e511-80d2-00155d2a68d4"
      },
      {
       "@odata.etag": "W/\"503647\"",
       "emailaddress1": someone_l@example.com,
       "lastname": "Burk (sample)",
       "firstname": "Susan",
       "contactid": "91dd0b31-ed8b-e511-80d2-00155d2a68d4"
      }
     ]
    }
    
  • 实际响应

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#accounts(name,contact_customer_accounts,contact_customer_accounts(emailaddress1,lastname,firstname))/$entity",
     "@odata.etag": "W/\"504724\"",
     "name": "A. Datum Corporation (sample)",
     "accountid": "25dd0b31-ed8b-e511-80d2-00155d2a68d4",
     "contact_customer_accounts": [
      {
       "@odata.etag": "W/\"504749\"",
       "lastname": "Valdes (sample)",
       "firstname": "Rene",
       "contactid": "8bdd0b31-ed8b-e511-80d2-00155d2a68d4"
      },
      {
       "@odata.etag": "W/\"503647\"",
       "lastname": "Burk (sample)",
       "firstname": "Susan",
       "contactid": "91dd0b31-ed8b-e511-80d2-00155d2a68d4"
      }
     ]
    }
    

直接使用未扩展的 contact_customer_accounts 集合值导航属性的以下查询返回预期数据。

  • 请求

    GET 
    [Organization URI]/api/data/v8.0/accounts(25DD0B31-ED8B-E511-80D2-00155D2A68D4)/contact_customer_accounts?$select=emailaddress1,lastname,firstname HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
  • 响应

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "
    [Organization URI]/api/data/v8.0/$metadata#contacts(emailaddress1,lastname,firstname)",
     "value": [
      {
       "@odata.etag": "W/\"504749\"",
       "emailaddress1": null,
       "lastname": "Valdes (sample)",
       "firstname": "Rene",
       "contactid": "8bdd0b31-ed8b-e511-80d2-00155d2a68d4"
      },
      {
       "@odata.etag": "W/\"503647\"",
       "emailaddress1": "someone_l@example.com",
       "lastname": "Burk (sample)",
       "firstname": "Susan",
       "contactid": "91dd0b31-ed8b-e511-80d2-00155d2a68d4"
      }
     ]
    }
    

另请参阅

使用 Microsoft Dynamics 365 Web API
使用 Web API 对 Microsoft Dynamics 365 进行身份验证
Web API 类型和操作
使用 Web API 执行操作

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权