Как перенести действия (письма, заметки и т. Д.) С одного контакта на другой в Dynamics 365 - PullRequest
1 голос
/ 04 октября 2019

Из-за некоторых плохих практик одного из наших внутренних пользователей. Нам нужно перенести все действия (письма, заметки и т. Д.) С одного контакта на другой контакт. Я пытался добиться этого через пользовательский интерфейс, и я не мог найти способ сделать это.

Возможно ли это? Я ищу любой способ достичь этого, является ли CRMTool, SSIS, UI или любым другим способом. Это могут делать только администраторы, поэтому нам не нужно ничего причудливого, поскольку это может быть сделано 4 раза в год, чтобы очистить некоторые данные.

Большое спасибо :)

Пробовал с помощью пользовательского интерфейса, но нетуспех.

1 Ответ

1 голос
/ 04 октября 2019

Я могу придумать два способа сделать эти обновления.

Первый способ - это выбрать вид деятельности, в которой указан владелец (т.е. все телефонные звонки), и экспортировать в Excel. Это загружает XLSX с некоторыми скрытыми столбцами в начале, где хранятся идентификаторы для записей. Затем вы обновляете столбец владельца новым владельцем (позаботьтесь о копировании точного полного имени), а затем снова импортируете электронную таблицу Excel. Вам нужно будет повторить эти шаги экспорта / импорта для каждого типа деятельности (телефонные звонки, электронная почта и т. Д.). Так что это может быть нецелесообразно, если у вас большой объем даты, из-за необходимости повторения и из-за того, что вы можете экспортировать максимальное количество записей.

Другой способ сделать это - использовать некоторые .NETкод. Конечно, для этого вам нужно будет использовать Visual Studio 2019.

Если это так, то сработает:

using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Tooling.Connector;

namespace ChangeActivitiesOwner
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "AuthType=Office365;Url=<TODO:URL>;Username=<TODO:User>;Password=<TODO:Pass>;";
            string oldUserFullname = ""; // TODO: place here fullname for the user you want to overwrite
            string newUserFullname = ""; // TODO: place here fullname for the user you want to overwrite with

            CrmServiceClient client = new CrmServiceClient(connectionString);
            IOrganizationService service = client.OrganizationWebProxyClient != null ? client.OrganizationWebProxyClient : (IOrganizationService)client.OrganizationServiceProxy;

            QueryByAttribute qbyaOldUser = new QueryByAttribute("systemuser");
            qbyaOldUser.AddAttributeValue("fullname", oldUserFullname);
            Guid olduserid = (Guid)service.RetrieveMultiple(qbyaOldUser)[0].Attributes["systemuserid"];
            QueryByAttribute qbyaNewUser = new QueryByAttribute("systemuser");
            qbyaNewUser.AddAttributeValue("fullname", newUserFullname);
            Guid newuserid = (Guid)service.RetrieveMultiple(qbyaNewUser)[0].Attributes["systemuserid"];

            foreach (string activity in new string[]{ "task", "phonecall", "email", "fax", "appointment", "letter", "campaignresponse", "campaignactivity" }) // TODO: Add other activities as needed!!!
            {
                QueryExpression query = new QueryExpression(activity)
                {
                    ColumnSet = new ColumnSet("activityid", "ownerid")
                };
                query.Criteria.AddCondition(new ConditionExpression("ownerid", ConditionOperator.Equal, olduserid));

                foreach (Entity e in service.RetrieveMultiple(query).Entities)
                {
                    e.Attributes["ownerid"] = new EntityReference("systemuser", newuserid);
                    service.Update(e);
                }
            }
        }
    }
}

Пожалуйста, заполните строки, помеченные как "TODO"с вашей информацией.

Вам нужно будет добавить пакеты Microsoft.CrmSdk.CoreAssemblies, Microsoft.CrmSdk.Deployment, Microsoft.CrmSdk.Workflow, Microsoft.CrmSdk.XrmTooling.CoreAssembly, Microsoft.IdentityModel.DirectoryActive. и Newtonsoft.Json к вашему решению и используйте .NET Framework 4.6.2.

Надеюсь, это поможет.

...