22.11.2018, 16:07 | #21 |
Участник
|
Начал импортировал контакты (после импорта акаунтов) и получаю ошибку, что мол нет такого ИД. Не совсем ясно где вообще взялся этот ИД, и с какой сущности. Я найти такого не смог в двух системах
Посмотрел метаданные по контакту, там три ссылки на акаунт, две из которых - кастомные. - accountid - new_distributor - new_hqaccount В целевой системе нет поля accountid на сущности контакт, т.к в онлайне видимо от него избавились. Теоретически проблема может быть в поле parentcustomerid, но в усломнов операторе SSIS стоит проверка Цитата:
!ISNULL(parentcustomeridtype) && parentcustomeridtype == "contact"
Цитата:
Account With Id = e52affc4-aa60-e611-80e9-00155df17501 Does Not Exist (SSIS Integration Toolkit for Microsoft Dynamics 365, v8.0.0.6228 - DtsDebugHost, v13.0.4495.10)
X++: static void findEntity() { var allEntities = GetEntities(connection); foreach (EntityMetadata Entity in allEntities) { try { var entity = connection.Retrieve(Entity.LogicalName, new Guid("e52affc4-aa60-e611-80e9-00155df17501"), new ColumnSet(true)); Console.WriteLine($"Id found for entity {Entity.LogicalName}"); Console.ReadKey(); } catch { } } } public static EntityMetadata[] GetEntities(IOrganizationService organizationService) { Dictionary<string, string> attributesData = new Dictionary<string, string>(); RetrieveAllEntitiesRequest metaDataRequest = new RetrieveAllEntitiesRequest(); RetrieveAllEntitiesResponse metaDataResponse = new RetrieveAllEntitiesResponse(); metaDataRequest.EntityFilters = EntityFilters.Entity; metaDataResponse = (RetrieveAllEntitiesResponse)organizationService.Execute(metaDataRequest); var entities = metaDataResponse.EntityMetadata; return entities; } Последний раз редактировалось Ion; 22.11.2018 в 16:24. |
|
22.11.2018, 16:44 | #22 |
Участник
|
В общем, банально был битый контакт
Пришлось найти запись по атрибуту X++: QueryExpression query = new QueryExpression { EntityName = "contact", ColumnSet = new ColumnSet(true), Criteria = new FilterExpression { Conditions = { new ConditionExpression { AttributeName = "parentcustomerid", Operator = ConditionOperator.Equal, Values = { accountId } } } } }; |
|
26.11.2018, 14:34 | #23 |
Участник
|
Привет,
Как корректно мигрировать сущность 'Lead to Opportunity Sales Process'? В какой-то момент начинает падать data flow task с текстом Цитата:
Participating entity must be part of traversed path. But input participating entity : "opportunity", does not belong to the traversed path:"f99b4d48-7aad-456e-864a-8e7d543f7495" [14]
Сущности лид и оппортюнити уже в системе. |
|
26.11.2018, 16:26 | #24 |
Чайный пьяница
|
Был у меня неприятный опыт миграции таких сущностей. Все свелось к тому, что я удалял все процессы которые создались автоматически и заливал эти сущности через создание. Правда отличие в том, что у меня не было процесса с несколькими сущностями. Думаю, что вы будете первопроходцем. Делитесь опытом, если решите задачу.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
27.11.2018, 18:16 | #25 |
Участник
|
Цитата:
Сообщение от a33ik
Был у меня неприятный опыт миграции таких сущностей. Все свелось к тому, что я удалял все процессы которые создались автоматически и заливал эти сущности через создание. Правда отличие в том, что у меня не было процесса с несколькими сущностями. Думаю, что вы будете первопроходцем. Делитесь опытом, если решите задачу.
|
|
05.12.2018, 18:24 | #26 |
Участник
|
Все привет!
В общем все шло гладко до момента миграции активностей. Суть проблемы: есть 5 пользователей, которые уже не работают, так вот они встречаються в Звонках, Тасках, Апойментах и в других активностях. Если они являються овнерами или создателями, то проблем нет, просто указываем дефолтного пользователя и все, но если эти же юзера встечаються в таких полях как 'from/to' на звонках или Attendees в Апоинтах, то тут уже масса проблем. Что предпочительней в данной ситуации: не мигрировать такие записи, есть вариант как установить дефолтного пользователя или что-то еще. |
|
05.12.2018, 19:15 | #27 |
Чайный пьяница
|
Есть несколько вариантов. Я планирую все расписать в блоге, когда доберусь до этого поста. Во что я делаю сейчас:
1. Собираю список всех пользователей, которые есть в старом CRM, а именно нужны следующие данные: FirstName, Last Name, Email Address. Создаю или файлик или таблицу в базе, которые содержат эти поля. 2. В SSIS делаете вычитку или из файла или из базы, чтобы получить следующие поля - FirstName, LastName, PrimaryEmailAddress, WindowsLiveId. Последние 2 колонки содержат одинаковые данные. Именно эти поля необходимы чтобы создать записи пользователей, но будьте очень внимательны и осторожны - вы не сможете эти записи удалить. 3. Средствами SSIS запускаю создание указанных пользователей - это создаст записи пользователей в онлайне. Пользователи буду неактивны, будут иметь роль SalesManager (или чтото вроде того), не будут занимать лицензию. Таким образом я получал полный список активных и неактивных пользователей и мигрировал данные без проблем.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 05.12.2018 в 19:20. |
|
|
За это сообщение автора поблагодарили: Ion (1). |
05.12.2018, 19:22 | #28 |
Чайный пьяница
|
На самом деле у меня все веселье началось, когда создание активностей начало падать изза ссылок на контакты, компании и лиды, которые были удалены. Что делать в таком случае я тоже распишу в посте. Когда только на все это найти время...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
05.12.2018, 19:36 | #29 |
Участник
|
Цитата:
Сообщение от a33ik
Есть несколько вариантов. Я планирую все расписать в блоге, когда доберусь до этого поста. Во что я делаю сейчас:
1. Собираю список всех пользователей, которые есть в старом CRM, а именно нужны следующие данные: FirstName, Last Name, Email Address. Создаю или файлик или таблицу в базе, которые содержат эти поля. 2. В SSIS делаете вычитку или из файла или из базы, чтобы получить следующие поля - FirstName, LastName, PrimaryEmailAddress, WindowsLiveId. Последние 2 колонки содержат одинаковые данные. Именно эти поля необходимы чтобы создать записи пользователей, но будьте очень внимательны и осторожны - вы не сможете эти записи удалить. 3. Средствами SSIS запускаю создание указанных пользователей - это создаст записи пользователей в онлайне. Пользователи буду неактивны, будут иметь роль SalesManager (или чтото вроде того), не будут занимать лицензию. Таким образом я получал полный список активных и неактивных пользователей и мигрировал данные без проблем. Все пользователи синхронизированы, помимо пяти, наверное их создам. |
|
05.12.2018, 19:38 | #30 |
Участник
|
Так а что делать? Искать по аттрибуту (Контакта, Лида и т.д.) активности и просто очищать ссылки? По крайней мере я так делал
|
|
05.12.2018, 19:40 | #31 |
Чайный пьяница
|
Цитата:
Сообщение от Ion
То есть если банально создать пользователя в онлайн, который уже не работает и дать ему простую роль, то он не будет требовать лицензирования? С онлайном пока не так плотно знаком во всех деталях, тоже думал об этом.
Все пользователи синхронизированы, помимо пяти, наверное их создам.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
06.12.2018, 09:04 | #32 |
Чайный пьяница
|
А тут все зависело от того как с клиентом договориться. Для одного потребовалось воссоздавать записи, для другого договорились создать в активности доп поля и туда затягивал то, что есть по записи.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
09.12.2018, 23:51 | #33 |
Чайный пьяница
|
Пишу сейчас статью про миграцию, потому как материальчик поднакопился и как раз домигрировал еще одного клиента в облако. Подписывайтесь на мой блог, если интересно.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.12.2018, 20:19 | #34 |
Участник
|
Уже подписался.)))
В Kingswaysoft как мне ассоцировать Opportunity and Competitors? Или с помощью C#, не нашел что-то связи |
|
11.12.2018, 20:34 | #35 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.12.2018, 21:12 | #36 |
Участник
|
Цитата:
Сообщение от a33ik
Плохо искали:
Вложение 12160 |
|
11.12.2018, 21:14 | #37 |
Участник
|
Кстати и я столкнулся с удаленными контактами в appointments. Такой солюшен по их воссозданию ок?
X++: Guid entityId = Guid.Parse("93c31bd0-848b-e811-8118-00155df17501"); string entityLogicalName = "contact"; // Retrieve the audit records for entity. RetrieveRecordChangeHistoryRequest changeRequest = new RetrieveRecordChangeHistoryRequest(); changeRequest.Target = new EntityReference(entityLogicalName, entityId); RetrieveRecordChangeHistoryResponse changeResponse = (RetrieveRecordChangeHistoryResponse)connection.Execute(changeRequest); AuditDetailCollection details = changeResponse.AuditDetailCollection; for (int count = 0; count < details.Count; count++) { if (typeof(AttributeAuditDetail).Name == details[count].GetType().Name) { AttributeAuditDetail detail = details[count] as AttributeAuditDetail; if (detail.NewValue == null && detail.OldValue != null) { Entity entity = detail.OldValue; connection.Create(entity); break; } } } |
|
|
За это сообщение автора поблагодарили: a33ik (1). |
11.12.2018, 21:15 | #38 |
Чайный пьяница
|
Зачем? KingswaySoft прекрасно с этим справляется.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.12.2018, 21:17 | #39 |
Чайный пьяница
|
Это сработает только если у вас аудит был включен. Кстати хорошая идея - я об этом и не подумал. Я создавал исходя из того, что есть в ActivityParty записи.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.12.2018, 21:25 | #40 |
Участник
|
Цитата:
Сообщение от a33ik
Плохо искали:
Вложение 12160 |
|
|
|