Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Импорт участников маркетингового списка из Excel
Запись от Артем Enot Грунин размещена 11.01.2012 в 18:05
Обновил(-а) Артем Enot Грунин 11.01.2012 в 22:21
Обновил(-а) Артем Enot Грунин 11.01.2012 в 22:21
Теги development, excel, fixrm, list, plugin
Загрузка участников маркетингового списка, или позиций прайслиста из Excel файла, является камнем преткновения уже не одной версии CRM. Менялся механизм импорта, писались утиллиты, а воз, кажется, и ныне там. Сегодня я попытаюсь решить эту проблему для всего разумного человечества или хотя бы его части!
Итак, стандартный механизм удобен тем что он:
Когда я понял, что не хочу еще раз реализовывать все это, идея пришла достаточно быстро:
Неуправляемое решение и проект выложу чуть позже, как только нормально портирую его на "чистую" версию системы.
Данный подход работает и для других задач, например, для вышеупомянутой загрузки позиций прайсов или любых других связей N:N. Создав соответствующие объекты и параметризовав плагин, например, передавая ему имена полей идентификаторов и имя связи, можно загружать данные при помощи методаТак же, в некоторых задачах может показаться разумной идея разрывать связь при событии удаления нашего вспомогательного объекта. Например, это поможет откатить изменения при откате задания импорта.
Итак, стандартный механизм удобен тем что он:
- Стандартный!
- Умеет быстро делать сопоставления
- Умеет массово грузить и связывать несколько объектов в одном задании
- Имеет гибкие настройки поиска и сопоставления идентификаторов
Когда я понял, что не хочу еще раз реализовывать все это, идея пришла достаточно быстро:
- Создаем свой кастомный объект ListMember
- Настраиваем в нем связи с List, Contact, Account, Lead.
- Стандартными средствами создаем шаблон для импорта этого объекта.
- Пишем плагин который асинхронно срабатывает на событие post-create объекта ListMember, вынимает из него ListId и при помощи AddMemberListRequest добавляет в него ContactId, AccountId или LeadId - в зависимости от того, что было указано в файле импорта!
X++:
IPluginExecutionContext context = localContext.PluginExecutionContext; // Используется CRM Developer Toolkit if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { Entity entity = (Entity)context.InputParameters["Target"]; fixrm_ListMember listMember = entity.ToEntity<fixrm_ListMember>(); EntityReference listId = listMember.fixrm_ListId; if (listId != null) { AddMemberListRequest request = new AddMemberListRequest(); request.ListId = listId.Id; EntityReference accountId = listMember.fixrm_AccountId; if (accountId != null) { request.EntityId = accountId.Id; } else { EntityReference contactId = listMember.fixrm_ContactId; if (contactId != null) { request.EntityId = contactId.Id; } else { EntityReference leadId = listMember.fixrm_LeadId; if (leadId != null) { request.EntityId = leadId.Id; } } } IOrganizationService service = localContext.OrganizationService; service.Execute(request); } }
Данный подход работает и для других задач, например, для вышеупомянутой загрузки позиций прайсов или любых других связей N:N. Создав соответствующие объекты и параметризовав плагин, например, передавая ему имена полей идентификаторов и имя связи, можно загружать данные при помощи метода
X++:
IOrganizationService.Associate
Всего комментариев 0