Показать сообщение отдельно
Старый 19.12.2008, 16:12   #1  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Доброго времени суток коллеги. Все вы знаете, что в CRM 4.0 "слияние" стало проще и доступнее, но отчего-то данная ф-ция доступна не для всех системных объектов. Особенно обидно то, что она недоступна для таких объектов как "Счет" или "Заказ". Как это исправить? Внимание - прямое вторжение в базу! Делаем бекапы.
В таблице MetadataSchema.Entity находим запись нужного объекта и значение атрибута IsMailMergeEnabled ставим True, после чего перезагружаем сайт через iisreset. Теперь можно создавать шаблон и выгружать данные из объектов данного типа. Феномен пока изучен слабо, но проблем обнаружено не было. Была попытка сделать подобное через импорт-экспорт кастомизаций. В исходные XML файлы данный атрибут попадает, но его изменение, отчего-то не принесло результатов.

Так же вы могли обратить внимание, что существует альтернативный механизм вызова этой ф-ции: у сущности Quote значение атрибута - False и кнопка слияния доступна только на форме объекта и не доступна из списка. Тем не менее, мы можем создавать шаблоны слияния для объектов данного типа и пользоваться, в общем-то теми же средствами. Как реализовать слияние в подобном ключе?

Для этого в разделе настроек находим и открываем для редактирования объект Mail Merge Tamplate, как оказалось он вполне настраиваемый. В списке атрибутов находим "templatetypecode" типа picklist - именно он определяет тип связанной с шаблоном сущности и, что удивительно, позволяет добавлять новые опции! Вот только есть заковырка - после добавление новой опции система валится при попытке создать новый шаблон. Проблема в численном значении опции. Дело в том, что система не позволяет задавать любой идентификатор через интерфейс. Придется согласиться с предлагаемым значением, после чего залезть в базу, найти таблицу MetadataSchema.AttributePicklistValue и в ней руками исправить код пиклиста созданной нами опции. Код рассчитывается как <object type code> / 1000: если код сущности 1088, то код опции должен быть 1,088. После изменения перезагружаем систему и шаблоны слияния заработают нормально.

Осталась последняя сложность: добавить кнопку слияния на форму объекта. Попытка сделать ее по аналогии с формой 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>
Ну и последним вопросом, наверно, остается вопрос почему механизма 2 и какой выбрать. Как мне кажется, разница между шаблонами для Lead и Quote заключается в том, что шаблон Quote еще и генерирует строки "продуктов для предложения" в документе. Как это делается уже обсуждалось на форуме, так что не буду повторяться. Видимо здесь и возникла сложность - трудно или и вовсе не возможно создать такой шаблон слияния, который позволил бы генерировать отдельные документы для каждого набора Quote + QuoteDetail. Если помните сейчас создается 1 документ с шапкой из данных Quote и в нем генерируются строки таблицы для данных из QuoteDetail. Итого: если нужно делать слияние множества объектов - используйте 1й подход, если есть необходимость использовать в слиянии данные из связанных объектов - используйте второй.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional

Последний раз редактировалось Артем Enot Грунин; 24.12.2008 в 14:38. Причина: Один фиг один написал
За это сообщение автора поблагодарили: Dissident (1), SLK (1), Сабитов Андрей (2).