为什么在Dynamics CRM元数据中不存在EntitySet“所有者”?

问题描述

使用odata-client-microsoft-dynamics生成Java代码作为Dynamics CRM OData api的客户端。代码生成的基础是在https://PROJECT.crm6.dynamics.com/api/data/v9.1/$metadata?format=xml上定义的元数据。

在元数据中,我看到大约600个 NavigationPropertyBinding 元素,它们以EntitySet“所有者”为目标,但是此EntitySet没有在元数据中定义(并且没有导入的暗示它在其他地方定义)。在我看来,元数据已损坏,有人可以告诉我在哪里可以找到EntitySet“所有者”定义或解释为什么元数据中缺少它吗?

请注意,我已经确认不同组织的Dynamics CRM元数据(包括v9.1和crm4)中都缺少此EntitySet。

解决方法

没有称为“所有者”的实体,但是它是一个特殊的实体引用(polymorphic lookup),可以是owninguserowningteam。这是因为所有者在Dynamics安全概念上紧密相连-实体记录可以由系统用户或团队(用户集)拥有。

如果您尝试使用Web API获取详细信息,则必须同时扩展属性,并且其中之一将根据所有权具有价值。 Read more

更新

当您查看这些导航属性绑定时,诸如销售线索,客户,业务单位之类的目标都是由复数名称引用的实际实体。其他人是团队和系统用户-它们也是实际的实体,但是在内部由Target = "owners"进行引用,并且平台会根据分配情况来填充其中任一路径。

      <NavigationPropertyBinding Path="originatingleadid" Target="leads" />
      <NavigationPropertyBinding Path="ownerid" Target="owners" />
      <NavigationPropertyBinding Path="owningbusinessunit" Target="businessunits" />
      <NavigationPropertyBinding Path="owningteam" Target="teams" />
      <NavigationPropertyBinding Path="owninguser" Target="systemusers" />
      <NavigationPropertyBinding Path="parentaccountid" Target="accounts" />

和实际属性:

    <NavigationProperty Name="ownerid" Type="mscrm.principal" Nullable="false" Partner="owner_accounts">
      <ReferentialConstraint Property="_ownerid_value" ReferencedProperty="ownerid" />
    </NavigationProperty>

和伙伴:

    <NavigationProperty Name="owner_accounts" Type="Collection(mscrm.account)" Partner="ownerid" />

注意:为了更好地解释,我从元数据中引用了上述节点,但它们可能来自同一实体,也可能不在同一实体中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...