Plugins 如何在Dynamics CRM4 C#插件中以1:N关系进行迭代
我们的账户实体与“BookingAccount”(一个自定义实体)有1:N的关系。关系的名称为new\u Account\u new\u BookingAccount。在插件中,如果我尝试迭代集合Plugins 如何在Dynamics CRM4 C#插件中以1:N关系进行迭代,plugins,dynamics-crm,crm,dynamics-crm-4,Plugins,Dynamics Crm,Crm,Dynamics Crm 4,我们的账户实体与“BookingAccount”(一个自定义实体)有1:N的关系。关系的名称为new\u Account\u new\u BookingAccount。在插件中,如果我尝试迭代集合 foreach (new_BookingAccount ba in myAccount.new_Account_newBookingAccount) { ... } 它是空的-即使存在相关的预订帐户 我是应该重新查询BookingAccounts还是可以调用collection属性上的某个“
foreach (new_BookingAccount ba in myAccount.new_Account_newBookingAccount)
{
...
}
它是空的-即使存在相关的预订帐户
我是应该重新查询BookingAccounts还是可以调用collection属性上的某个“填充”方法?如果是这样的话,最好的方法是什么?如果不能迭代,集合属性的意义何在
提前感谢您的帮助。您的代码应该可以工作。若您将使用早期绑定的实体类编写客户机,您将看到这样的集合利用了泛型方法。代码如下所示:
/// <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);
}
...
}
//
///1:N账户\活动\各方
///
[Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute(“帐户\活动\当事人”)]
公共系统.Collections.Generic.IEnumerable帐户\u活动\u参与方
{
得到
{
返回此.GetRelatedEntities(“帐户\活动\各方”,null);
}
...
}
此代码应在所有情况下正常工作。当然,可能存在一些安全问题。您的代码在某些CRM用户凭据下执行,您应该确保该用户有足够的权限浏览这两个实体。但您应该注意的最重要的事情是,如何检索实例
myAccount
。您提到此代码在插件内部使用。但是您没有提到它是什么类型的插件(前阶段、后阶段),在这个插件中处理什么类型的消息,如何检索实体的实例myAccount
。如果直接调用检索方法,则应填充所有属性。但如果myAccount
来自输入参数,则无法保证所有属性的所有实际值都将被设置。这可能是集合为空的原因。啊-需要显式加载集合:
orgContext.LoadProperty(account, "new_BookingAccount_new_ExternalCode");
foreach (new_BookingAccount ba in myAccount.new_Account_new_BookingAccount)
{
...
}
(虽然如果账户是新实体,则无法执行此操作,因此需要事先进行某种检查):
对于简单的收集迭代来说,似乎有很多工作要做太好了,谢谢你的建议。这是一个后期插件,我从后期图像中获取实体。用户设置/更改的任何内容都是可用的(当然,我更改了它,保存了它,然后运行了插件)-仍然是空的!我们还没有在我们的系统上设置安全性,所以不要这么认为。再次感谢你的帮助
if (account.CreatedOn == null)
return;