Я могу придумать два способа сделать эти обновления.
Первый способ - это выбрать вид деятельности, в которой указан владелец (т.е. все телефонные звонки), и экспортировать в 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.
Надеюсь, это поможет.