我正在为CRM 2011创建一个事件前插件,用于设置帐户所有者并更新具有相同所有者的所有子联系人。插件已正确安装并正确更新主帐户记录,但子联系人所有者不会更改。我已将所有者名称推送到联系人的另一个字段中,以检查我是否有正确的详细信息,并且该字段正在更新。
我确定这与将子联系人附加到正确的上下文有关,但到目前为止,我已经画了一个空白。
//Set new account owner - Works fine
account.OwnerId = new EntityReference(SystemUser.EntityLogicalName, ownerId);
//Pass the same owner into the contacts - Does not get updated
UpdateContacts(account.Id, ownerId, service, tracingService);
系统已成功更新帐户所有者和子记录的描述标签。
public static void UpdateContacts(Guid parentCustomerId, Guid ownerId, IOrganizationService service, ITracingService tracingService)
{
// Create the FilterExpression.
FilterExpression filter = new FilterExpression();
// Set the properties of the filter.
filter.FilterOperator = LogicalOperator.And;
filter.AddCondition(new ConditionExpression("parentcustomerid", ConditionOperator.Equal, parentCustomerId));
// Create the QueryExpression object.
QueryExpression query = new QueryExpression();
// Set the properties of the QueryExpression object.
query.EntityName = Contact.EntityLogicalName;
query.ColumnSet = new ColumnSet(true);
query.Criteria = filter;
// Retrieve the contacts.
EntityCollection results = service.RetrieveMultiple(query);
tracingService.Trace("Results : " + results.Entities.Count);
SystemUser systemUser = (SystemUser)service.Retrieve(SystemUser.EntityLogicalName, ownerId, new ColumnSet(true));
tracingService.Trace("System User : " + systemUser.FullName);
XrmServiceContext xrmServiceContext = new XrmServiceContext(service);
for (int i = 0; i < results.Entities.Count; i++)
{
Contact contact = (Contact)results.Entities[i];
contact.OwnerId = new EntityReference(SystemUser.EntityLogicalName, systemUser.Id);
contact.Description = systemUser.FullName;
xrmServiceContext.Attach(contact);
xrmServiceContext.UpdateObject(contact);
xrmServiceContext.SaveChanges();
tracingService.Trace("Updating : " + contact.FullName);
}
}
跟踪服务打印出我期望的一切。我是否还需要附加系统用户并以某种方式将实体引用附加到上下文?
任何帮助表示感谢。
答案 0 :(得分:4)
您必须使用AssignRequest进行单独的Web服务调用才能更改记录的所有权。不幸的是,您不能只更改所有者属性。
答案 1 :(得分:0)
我认为我正在使用此插件进行各种混乱,因为默认情况下更改帐户所有者会自动更改关联的联系人所有者。因此我试图覆盖它已经在做的事情。
通过使用AssignRequest设置帐户所有者而不是子记录,它可以正常工作。克里斯向我指出了正确的方向。
所需要的只是更改我的代码的第一行以使用AssignRequest,整个UpdateContacts方法变得过时。