Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Mail Merge системных объектов
Запись от Артем Enot Грунин размещена 19.12.2008 в 16:12
Теги mail merge
Все вы знаете, что в CRM 4.0 "слияние" стало проще и доступнее, но отчего-то данная ф-ция доступна не для всех системных объектов. Особенно обидно то, что она недоступна для таких объектов как "Счет" или "Заказ". Как это исправить? Внимание - прямое вторжение в базу! Делаем бекапы.
В таблице MetadataSchema.Entity находим запись нужного объекта и значение атрибута IsMailMergeEnabled ставим True, после чего перезагружаем сайт через iisreset. Теперь можно создавать шаблон и выгружать данные из объектов данного типа. Феномен пока изучен слабо, но проблем обнаружено не было. Была попытка сделать подобное через импорт-экспорт кастомизаций. В исходные XML файлы данный атрибут попадает, но его изменение, отчего-то не принесло результатов.
Так же вы могли обратить внимание, что существует альтернативный механизм вызова этой ф-ции: у сущности Quote значение атрибута - False и кнопка слияния доступна только на форме объекта и не доступна из списка. Тем не менее, мы можем создавать шаблоны слияния для объектов данного типа и пользоваться, в общем-то теми же средствами. Как реализовать слияние в подобном ключе?
Для этого в разделе настроек находим и открываем для редактирования объект Mail Merge Tamplate, как оказалось он вполне настраиваемый. В списке атрибутов находим "templatetypecode" типа picklist - именно он определяет тип связанной с шаблоном сущности и, что удивительно, позволяет добавлять новые опции! Вот только есть заковырка - после добавление новой опции система валится при попытке создать новый шаблон. Проблема в численном значении опции. Дело в том, что система не позволяет задавать любой идентификатор через интерфейс. Придется согласиться с предлагаемым значением, после чего залезть в базу, найти таблицу MetadataSchema.AttributePicklistValue и в ней руками исправить код пиклиста созданной нами опции. Код опции должен совпадать с object type code> сущности для которой включается слияние. После изменения перезагружаем систему и шаблоны слияния должны заработать нормально.
Осталась последняя сложность: добавить кнопку слияния на форму объекта. Попытка сделать ее по аналогии с формой Quote не увенчалась успехом. Отчего-то код исполняемый по этой кнопке отказывается работать с другими объектами, хотя и выглядит вполне универсальным. Приведенное ниже решение - некий обходной маневр - гибрид того кода, который вызывает слияние из списка записей и того, что работает в форме. Код универсален и должен работать с любой сущностью.
Ну и последним вопросом, наверно, остается вопрос почему механизма 2 и какой выбрать. Как мне кажется, разница между шаблонами для Lead и Quote заключается в том, что шаблон Quote еще и генерирует строки "продуктов для предложения" в документе. Как это делается уже обсуждалось на форуме, так что не буду повторяться. Видимо здесь и возникла сложность - трудно или и вовсе не возможно создать такой шаблон слияния, который позволил бы генерировать отдельные документы для каждого набора Quote + QuoteDetail. Если помните сейчас создается 1 документ с шапкой из данных Quote и в нем генерируются строки таблицы для данных из QuoteDetail. Итого: если нужно делать слияние множества объектов - используйте 1й подход, если есть необходимость использовать в слиянии данные из связанных объектов - используйте второй.[/QUOTE]
В таблице MetadataSchema.Entity находим запись нужного объекта и значение атрибута IsMailMergeEnabled ставим True, после чего перезагружаем сайт через iisreset. Теперь можно создавать шаблон и выгружать данные из объектов данного типа. Феномен пока изучен слабо, но проблем обнаружено не было. Была попытка сделать подобное через импорт-экспорт кастомизаций. В исходные XML файлы данный атрибут попадает, но его изменение, отчего-то не принесло результатов.
Так же вы могли обратить внимание, что существует альтернативный механизм вызова этой ф-ции: у сущности Quote значение атрибута - False и кнопка слияния доступна только на форме объекта и не доступна из списка. Тем не менее, мы можем создавать шаблоны слияния для объектов данного типа и пользоваться, в общем-то теми же средствами. Как реализовать слияние в подобном ключе?
Для этого в разделе настроек находим и открываем для редактирования объект Mail Merge Tamplate, как оказалось он вполне настраиваемый. В списке атрибутов находим "templatetypecode" типа picklist - именно он определяет тип связанной с шаблоном сущности и, что удивительно, позволяет добавлять новые опции! Вот только есть заковырка - после добавление новой опции система валится при попытке создать новый шаблон. Проблема в численном значении опции. Дело в том, что система не позволяет задавать любой идентификатор через интерфейс. Придется согласиться с предлагаемым значением, после чего залезть в базу, найти таблицу MetadataSchema.AttributePicklistValue и в ней руками исправить код пиклиста созданной нами опции. Код опции должен совпадать с object type code> сущности для которой включается слияние. После изменения перезагружаем систему и шаблоны слияния должны заработать нормально.
Осталась последняя сложность: добавить кнопку слияния на форму объекта. Попытка сделать ее по аналогии с формой Quote не увенчалась успехом. Отчего-то код исполняемый по этой кнопке отказывается работать с другими объектами, хотя и выглядит вполне универсальным. Приведенное ниже решение - некий обходной маневр - гибрид того кода, который вызывает слияние из списка записей и того, что работает в форме. Код универсален и должен работать с любой сущностью.
Код:
<ToolBar ValidForCreate="0" ValidForUpdate="1"> <Button Icon="/_imgs/ico_mailmerge.gif" JavaScript=' var oArgs = new Object(); var oIds = new Array(1); oIds[0] = crmForm.ObjectId; oArgs.TotalRecords = 1; oArgs.SelectedRecords = 1; oArgs.Ids = oIds; oArgs.GridXml = ""; openStdDlg(prependOrgName("/_grid/cmds/dlg_webmailmerge.aspx?mergetype=3&objectTypeCode=") + CrmEncodeDecode.CrmUrlEncode(crmForm.ObjectTypeCode), oArgs, 600, 600);'> <Titles> <Title LCID="1033" Text="Mail Merge" /> </Titles> <ToolTips> <ToolTip LCID="1033" Text="Convert form to the Word document" /> </ToolTips> </Button> </ToolBar>
Всего комментариев 0