【问题标题】:How to iterate in 1:N relationship in Dynamics CRM4 C# Plugin如何在 Dynamics CRM4 C# 插件中迭代 1:N 关系
【发布时间】:2012-04-17 03:40:45
【问题描述】:

我们的 Account 实体与自定义实体“BookingAccount”具有 1:N 关系。关系的名称是 new_Account_new_BookingAccount。在插件中,如果我尝试迭代集合

foreach (new_BookingAccount ba in myAccount.new_Account_newBookingAccount)
{
    ...
}

它为空 - 即使存在相关的 BookingAccounts。

我应该重新查询 BookingAccounts 还是可以在集合属性上调用一些“填充”方法?如果是这样,最好的方法是如何做到这一点?如果不能迭代,集合属性还有什么意义。

提前感谢您的帮助。

【问题讨论】:

    标签: plugins dynamics-crm crm dynamics-crm-4


    【解决方案1】:

    您的代码应该可以工作。如果您将使用早期绑定的实体类编写客户端,您将看到此类集合利用通用GetRelatedEntity 方法。代码将如下所示:

            /// <summary>
            /// 1:N account_activity_parties
            /// </summary>
            [Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute("account_activity_parties")]
            public System.Collections.Generic.IEnumerable<MyCrmNamespace.ActivityParty> account_activity_parties
            {
                get
                {
                    return this.GetRelatedEntities<MyCrmNamespace.ActivityParty>("account_activity_parties", null);
                }
                ...
            }
    

    此代码应该在所有情况下都能正常工作。当然,可能存在一些安全问题。您的代码在某些 CRM 用户凭据下执行,您应该确保该用户有足够的权限来浏览这两个实体。
    但最重要的是你应该注意,你如何检索实例myAccount。你提到这段代码是在插件内部使用的。但是你没有提到它是什么样的插件(pre-stage,post-stage),你在这个插件中处理什么样的消息,你是怎么做的检索实体myAccount 的实例。如果直接调用检索方法,则应填充所有属性。但是如果myAccount 来自输入参数,则不能保证将为所有属性设置所有实际值。可能是集合为空的原因。

    【讨论】:

    • 太好了,谢谢您的建议。这是一个后期插件,我从后期图像中获取实体。用户设置/更改的任何内容都是可用的(可以肯定的是,我更改了它,保存了它,然后运行了插件) - 仍然是空的!我们还没有在我们的系统上设置安全性,所以不要认为是那样。再次感谢您的帮助
    【解决方案2】:

    啊 - 需要显式加载集合:

    orgContext.LoadProperty(account, "new_BookingAccount_new_ExternalCode");
    foreach (new_BookingAccount ba in myAccount.new_Account_new_BookingAccount)
    {
        ...
    }
    

    (虽然如果帐户是新实体则无法做到这一点,因此需要事先进行某种检查):

    if (account.CreatedOn == null)
        return;
    

    对于简单的集合迭代来说似乎需要做很多工作

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多