你如何引用CRMService中的一对多关系?

时间:2012-09-21 23:38:35

标签: dynamics-crm-4

我有一个自定义实体,在Dynamics中定义了一对多关系(引用,非父类)。我正在使用CRMService。我已发布更改并更新了项目中的Web服务引用。

如何在我的代码中访问此关系?您如何使用CRMService代码来引用关系?

我找到了一些多对多的代码并且理解这很难,但是一对多呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

每一对多的关系有两个重要的部分:

  1. 名称 - 这不经常使用,但例如联系人与帐户有关系,代表帐户的主要联系人,其名称为“account_primary_contact”。
  2. 许多实体(外键)上的字段,如果是主要联系人,则为“primarycontactid”。
  3. 关于一对多关系可以做的三件事情(注意,我在这里的示例中使用了后期绑定实体,我将在我的片段中使用主要联系人关系)。

    <强> 1。在两个记录之间创建链接

    基本上,您只需使用要链接的内容的Id填充外键。

    //Create a contact
    Guid contactId = service.Create(new DynamicEntity("contact"));
    
    //Create a lookup which we will use to link the contact and account
    Lookup lookup = new Lookup();
    lookup.Value = contactId;
    lookup.type = "contact";
    
    //Create an account which is linked to the contact record
    DynamicEntity account = new DynamicEntity("account");
    account["name"] = "Test Account";
    account["primarycontactid"] = lookup;
    Guid accountId = service.Create(account);
    

    <强> 2。找出这些关系链接的记录

    因此,这是创建使用LinkEntities:

    的QueryExpression的情况
    LinkEntity link = new LinkEntity();
    link.LinkFromEntityName = "contact";
    link.LinkFromAttributeName = "contactid";
    link.LinkToEntityName = "account";
    link.LinkToAttributeName = "primarycontactid";
    

    或者一个ConditionExpression,它将相关记录过滤到链接到主记录的记录。

    ConditionExpression condition = new ConditionExpression();
    condition.AttributeName = "primarycontactid";
    condition.Operator = ConditionOperator.Equal;
    condition.Values = new string [] { contactId.ToString() };
    

    MSDN上的完整示例。

    第3。打破两个记录之间的链接

    所以这是通过将外键设置为null来实现的。

    DynamicEntity account = new DynamicEntity("account");
    account["primarycontactid"] = null;
    service.Update(account);