Опишу способ как создать свою кнопку на панели, ну и прикрутить к ней полезный функционал.

Мой пример: Необходимо из пользовательской сущности «Спецификация к договору» создавать Заказ. А именно: добавить кнопку, при нажатии на которую будет создаваться «Заказ» и продукты из «Спецификации» будут перетягивать в «Существующие продукты» сущности «Заказ».

Опишу все по шагам, мне так удобней. Для того, чтобы новая кнопка отображалась в необходимой сущности необходимо:

  1. Здесь C:\Program Files\Microsoft CRM\CRMWeb ищем файл web.config. Включаем <add key=»ISVIntegration» value=»Web»/>, можно выбрать и All, тогда наша модификация будет доступна как из веб-клиента (IE) так и из Outlook-клиента
  2. Ищем файл 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

  3. Создаем новую папку в 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
  4. В ней создаем новый файл cloneorder.htm. Вот его исходный код:
  5. <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>

  6. Обратите внимание на /sfa/quotes/edit.aspx .Я создаю Заказ, поэтому перенаправляю запрос на создание на стандартную страницу для создания Заказа — /sfa/quotes/edit.aspx. Чтобы узнать такую же страницу для любой сущности, необходимо создать объект этой сущности и нажать F11, в строке адреса будет путь ;)
  7. Теперь обновляем окно браузера и видим кнопку на панели.

Самое полезное это то, что создается полный клон записи, даже уже сохраненные отношения с другими объектами переносятся в новой, «клонированной» записи.

Полезные ссылки:

Информация про ISV.Config для Microsoft Dynamics CRM 3.0