1

我正在为 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);
        }
    }

追踪服务打印出我所期望的一切。我是否还需要附加系统用户并以某种方式将实体引用附加到上下文?

任何帮助表示赞赏。

4

2 回答 2

4

您必须使用AssignRequest进行单独的 Web 服务调用来更改记录的所有权。不幸的是,您不能只更改 Owner 属性。

于 2012-07-13T13:28:55.690 回答
0

我想我让自己陷入了这个插件的各种混乱,因为默认情况下更改帐户所有者会自动更改关联的联系人所有者。因此,我试图覆盖它已经在做的事情。

通过使用 AssignRequest 设置帐户所有者而不是子记录,它可以正常工作。克里斯为我指明了正确的方向。

所需要的只是将我的代码的第一行更改为使用 AssignRequest 并且整个 UpdateContacts 方法变得过时。

于 2012-07-16T12:29:20.507 回答