Опишу способ как создать свою кнопку на панели, ну и прикрутить к ней полезный функционал.
Мой пример: Необходимо из пользовательской сущности «Спецификация к договору» создавать Заказ. А именно: добавить кнопку, при нажатии на которую будет создаваться «Заказ» и продукты из «Спецификации» будут перетягивать в «Существующие продукты» сущности «Заказ».
Опишу все по шагам, мне так удобней. Для того, чтобы новая кнопка отображалась в необходимой сущности необходимо:
- Здесь C:\Program Files\Microsoft CRM\CRMWeb ищем файл web.config. Включаем <add key=»ISVIntegration» value=»Web»/>, можно выбрать и All, тогда наша модификация будет доступна как из веб-клиента (IE) так и из Outlook-клиента
- Ищем файл isv.config.xml. Обычно его можно найти здесь: C:\Program Files\Microsoft CRM\CRMWeb\_Resources. Открываем его для редактирования и добавляем код в раздел сущностей, стандартный выглядит примерно так:
…
<Entity name=»lead» />
<Entity name=»opportunity» />
<Entity name=»list» />
<Entity name=»campaign» />
…
Мой добавленный код
<Entity name=»do_salescontractspec»>
<ToolBar ValidForCreate=»0″ ValidForUpdate=»1″>
<Button Title=»Создать Заказ» ToolTip=»Make order» Icon=»/1/contactclone.gif» Url=»/1/createorder.htm» WinMode=»1″ WinParams=»dialogHeight:100px;dialogWidth:300px;»/>Если хотите, чтобы название кнопки было написано по-русски, то isv.config.xml необходимо сохранить в кодировке utf-8.
Mictosoft предлагает еще такой вариант:
<Titles>
<Title LCID=»1033″ Text=» Test » />
</Titles>Т.е, использовать LCID. Для русского языка LCID = 1049
- Создаем новую папку в CRMWeb (C:\Program Files\Microsoft CRM\CRMWeb\). У меня это папка 1. Она используется на предыдущем шаге. Icon=»/1/contactclone.gif» Url=»/1/createorder.htm» . Путь лучше задавать относительный, а не ввиде http://localhost:5555/1/. CRMWeb- это веб-узел (папка) по умолчанию для MS CRM 3.0
- В ней создаем новый файл cloneorder.htm. Вот его исходный код:
- <html>
<title>Создание Заказа</title><style>BODY, TD
{
font-family: arial;
font-size: 12px;
}TD.body
{
border-bottom: solid 1px #cccccc;
text-align: center;
}</style>
<script language=»javascript»>
// Устанавливаем глобальную переменную для клонирования окна Заказа (quote)
var oClonedOrder;function window.onload()
{
// Открываю новую форму Заказа
oClonedOrder = window.open(‘/sfa/quotes/edit.aspx‘,»,’menubar=0, status=1, width=1000, height=600′);// Таймер на загрузку страницы
setTimeout(‘checkPageState()’,100);
}function checkPageState()
{
if (oClonedOrder.document.readyState == ‘complete’)
{
CloneContact();
return;
}setTimeout(‘checkPageState()’,100);
}function CloneContact()
{// Получаю указатель на родительскую запись (окно)
var oParent = window.dialogArguments;
var oSource = oParent.document.crmForm;//
with(oClonedOrder.document.crmForm)
{
// Имена полей. Полю из нового окна присваиваю поле из «родительского» окна
customerid.DataValue = oSource.do_account.DataValue;
do_firm.DataValue = oSource.do_firm.DataValue;
opportunityid.DataValue=oSource.do_opportunity.DataValue;
do_salecontract.DataValue = oSource.do_salescontract.DataValue;
name.DataValue = oSource.do_name.DataValue+’ из спецификации’;}
// Закрываю вспомогательное окно
window.close();
}</script>
<body>
<table width=»100%» height=»100%» border=»0″ cellpadding=»0″ cellspacing=»0″ align>
<tr valign=»middle»>
<td class=»body» align=»center»>
<div style=»font-size= 12pt; font-family= Tahoma;»>Создание заказа…</div>
</td>
</tr>
</table></body>
</html>
- Обратите внимание на /sfa/quotes/edit.aspx .Я создаю Заказ, поэтому перенаправляю запрос на создание на стандартную страницу для создания Заказа — /sfa/quotes/edit.aspx. Чтобы узнать такую же страницу для любой сущности, необходимо создать объект этой сущности и нажать F11, в строке адреса будет путь

- Теперь обновляем окно браузера и видим кнопку на панели.

Самое полезное это то, что создается полный клон записи, даже уже сохраненные отношения с другими объектами переносятся в новой, «клонированной» записи.
Полезные ссылки:
Информация про ISV.Config для Microsoft Dynamics CRM 3.0
