CRM将电话呼叫活动转移到一个新实体时,会在两个实体上显示该活动

本文关键字:活动 实体 显示 两个 一个 呼叫 电话 转移 新实体 CRM | 更新日期: 2023-09-27 18:19:25

我正试图将一些联系人/帐户上的活动转移到new_private_contact_details实体。除了电话,我都有。下面的代码看起来确实有效,但它最终在活动提要上显示了new_private_contact_details实体和现有Contact实体的电话呼叫。显然,这是一个问题,因为我正试图将这些类型的细节迁移到私有细节,所以让它们仍然显示出来会使这个过程变得空洞。

if (phoneCallsList != null && phoneCallsList.Count > 0)
{
    foreach (PhoneCall pc in phoneCallsList)
    {
        if (pc.StatusCode.Value != 1)
        {
            int oldState = 0; //for the beginning statecode
            int oldStatus = 0; //for the beginning statuscode
            if (pc.StatusCode.Value == 3)
            {
                oldState = 2;
                oldStatus = 3;
            }
            else
            {
                oldState = 1;
                oldStatus = pc.StatusCode.Value;
            }
            //change status to open
            SetStateRequest setStateRequest = new SetStateRequest()
            {
                EntityMoniker = new EntityReference
                {
                    Id = pc.Id,
                    LogicalName = pc.LogicalName
                },
                State = new OptionSetValue(0),
                Status = new OptionSetValue(1)
            };
            try
            {
                crm.Execute(setStateRequest);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: " + ex);
            }
            pc.RegardingObjectId = pcd.ToEntityReference();
            pc.StatusCode.Value = 1;
            try
            {
                service.Update(pc);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: " + ex);
            }
            //return status to closed
            setStateRequest = new SetStateRequest()
            {
                EntityMoniker = new EntityReference
                {
                    Id = pc.Id,
                    LogicalName = pc.LogicalName
                },
                State = new OptionSetValue(oldState),
                Status = new OptionSetValue(oldStatus)
            };
            try
            {
                crm.Execute(setStateRequest);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: " + ex);
            }
        }
        else
        {
            pc.RegardingObjectId = pcd.ToEntityReference();
            try
            {
                service.Update(pc);
            }
            catch (Exception ex)
            {
                throw new Exception("Error: " + ex);
            }
        }
    }
}

我已经处理好了电话何时结束。我正在更新RegardingObjectId,但它不会将其从原始实体中删除,在CRM中从任一实体中删除它,会从两者中删除它。

同样,我似乎只对phonecall实体有这个问题。此代码完全适用于其他代码,即appointmentstaskslettersemails

CRM将电话呼叫活动转移到一个新实体时,会在两个实体上显示该活动

我找到了问题发生的地方。它出现在两个实体上,因为对于PhoneCalls,还有一个PhoneCalls.To字段仍然引用旧的Contact实体。不幸的是,该字段需要一个PartyList,根据我的发现,它无法自定义,因此它必须始终指向ContactLeadOpportunityAccount实体。