19.12.2008, 16:12 | #1 |
Moderator
|
Доброго времени суток коллеги. Все вы знаете, что в 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>
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 24.12.2008 в 14:38. Причина: Один фиг один написал |
|
|
За это сообщение автора поблагодарили: Dissident (1), SLK (1), Сабитов Андрей (2). |
15.09.2009, 13:26 | #2 |
Участник
|
Цитата:
Сообщение от Артем Enot Грунин
Доброго времени суток коллеги. Все вы знаете, что в 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> >Код рассчитывается как <object type code> / 1000: если код сущности 1088, то код опции должен быть 1,088. при замене атрибута на 1,088 выдает ошибку и дает только вставить 1088. Я где то что то упустил? |
|
15.09.2009, 13:41 | #3 |
Moderator
|
Цитата:
Сообщение от Артем Enot Грунин
Проблема в численном значении опции. Дело в том, что система не позволяет задавать любой идентификатор через интерфейс. Придется согласиться с предлагаемым значением, после чего залезть в базу, найти таблицу MetadataSchema.AttributePicklistValue и в ней руками исправить код пиклиста созданной нами опции
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
15.09.2009, 13:45 | #4 |
Участник
|
|
|
15.09.2009, 16:38 | #5 |
Moderator
|
Посмотрел еще раз. Судя по всему, нужен просто код сущности. На 1000 делить ничего не надо. Не помню почему я так решил. Возможно до каких-то апдейтов было иначе, может просто я ошибся.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 15.09.2009 в 16:40. |
|
|
За это сообщение автора поблагодарили: Савран Роман (1). |
17.03.2010, 11:08 | #6 |
Участник
|
Здравствуйте, нашел эту важную тему и дополнительные вопросы появились..
1. А где можно посмотреть код сущности? У предложения этот код = 1 084, у заказа и счета я не смог найти (( 2. Тут дан совет: "после чего залезть в базу, найти таблицу MetadataSchema.AttributePicklistValue и в ней руками исправить код пиклиста созданной нами опции." Подскажите пожалуйста, куда именно нужно зайти, чтобы изменить код пиклиста, я открыл эту таблицу, но не могу найти там параметров созданной мной опции. Скрин приложил |
|
17.03.2010, 17:20 | #7 |
Участник
|
так, с этим вопросом вроде разобрался, остался еще один ))
Вы пишете: "Осталась последняя сложность: добавить кнопку слияния на форму объекта. Попытка сделать ее по аналогии с формой Quote не увенчалась успехом. Отчего-то код исполняемый по этой кнопке отказывается работать с другими объектами, хотя и выглядит вполне универсальным. Приведенное ниже решение - некий обходной маневр - гибрид того кода, который вызывает слияние из списка записей и того, что работает в форме. Код универсален и должен работать с любой сущностью." А каким образом и где именно прописать этот код? Нужно прибегать к экспортированию настроек? |
|
17.03.2010, 17:44 | #8 |
Консультант-джедай
|
Надо экспортировать ISV.config и там для соответствующего объекта дописать этот код
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
|