Добавить выпадающее меню на ленту CRM 2011

#xml #dynamics-crm #dynamics-crm-2011 #crm

#xml #dynamics-crm #динамика-crm-2011 #crm

Вопрос:

Я новичок в crm 2011. Я нашел документацию о том, как добавить новую кнопку на ленту. И как группировать кнопки. Но мне нужна кнопка выпадающего меню на ленте. Как я могу это сделать? Я не нашел никакой информации об этом.

Спасибо!

Ответ №1:

Это должно помочь вам начать. Если все, что вам нужно, это статическое меню, вы можете поместить тег во всплывающий элемент управления и создать меню оттуда.

 <FlyoutAnchor Id="Sample.account.form.FlyoutAnchor.Static"
              Sequence="10"
              Command="Mscrm.Enabled"
              Image16by16="/_imgs/placeholders/ribbon_placeholder_16.png"
              Image32by32="/_imgs/ribbon/newrecord32.png"
              LabelText="Sample Flyout"
              Alt="Sample Flyout"            
              TemplateAlias="isv">
  <Menu Id="Sample.account.form.Menu">
    <MenuSection Id="Sample.account.form.MenuSection" 
                 Title="Menu Section Title" 
                 Sequence="15">
      <Controls Id="Sample.account.form.MenuSection.Controls">
        <Button Id="Sample.account.form.Controls.Button.FirstButton"
                Command="Sample.ButtonCommand.Command"
                LabelText="First Button"
                ToolTipTitle="First Button"
                ToolTipDescription="The first button"
                TemplateAlias="isv"
                Sequence="20"/>
      </Controls>
    </MenuSection>
  </Menu>
</FlyoutAnchor>
  

Если вы хотите генерировать меню динамически, вы можете использовать этот элемент управления всплывающим меню вместо этого. Обратите внимание на добавленные атрибуты заполнения.
Затем вам нужно создать меню с помощью javascript.

 <FlyoutAnchor Id="Sample.account.form.FlyoutAnchor.Dynamic"
              Sequence="10"
              Command="Mscrm.Enabled"
              Image16by16="/_imgs/placeholders/ribbon_placeholder_16.png"
              Image32by32="/_imgs/ribbon/newrecord32.png"
              LabelText="Sample Flyout"
              Alt="Sample Flyout"
              PopulateDynamically="true"
              PopulateQueryCommand="Sample.PopulateDynamicMenu"
              TemplateAlias="isv" />
  

Я создал две команды, которые обращаются к функциям javascript. DynamicMenu создает меню, и поиск используется для определения, какая кнопка была нажата. Обратите внимание, что оба они передают параметр CommandProperties, это важно для javascript.

 <CommandDefinition Id="Sample.PopulateDynamicMenu">
      <EnableRules>
        <EnableRule Id="Mscrm.Enabled" />
      </EnableRules>
      <DisplayRules />
      <Actions>
        <JavaScriptFunction FunctionName="DynamicMenu"
                            Library="$webresource:a_JavaScript_File">
          <CrmParameter Value="CommandProperties" />
        </JavaScriptFunction>
      </Actions>
</CommandDefinition>
<CommandDefinition Id="Sample.SearchCommand">
      <EnableRules />
      <DisplayRules />
      <Actions>
        <JavaScriptFunction FunctionName="Search" 
                            Library="$webresource:a_JavaScript_File">
          <CrmParameter Value="CommandProperties" />
        </JavaScriptFunction>
      </Actions>
</CommandDefinition>
  

Вот функции javascript:

 function DynamicMenu(CommandProperties) {
    ///<summary>Dynamically generate menu items based on context</summary>
    /// <param name="CommandProperties">
    ///    Command properties crm parameter sent from the ribbon.  object used to inject the Menu XML
    /// </param>

    var menuXml = '<Menu Id="Sample.DynamicMenu">'  
                    '<MenuSection Id="Sample.Dynamic.MenuSection" Sequence="10">'  
                        '<Controls Id="Sample.Dynamic.Controls">'  
                            '<Button Id="Sample.account.form.Controls.Button.FirstButton"'  
                                    ' Command="Sample.SearchCommand"'  
                                    ' LabelText="First Button"'  
                                    ' ToolTipTitle="First Button"'  
                                    ' ToolTipDescription="The first button"'  
                                    ' TemplateAlias="isv"'  
                                    ' Sequence="20" />'                                    
                        '</Controls>'  
                    '</MenuSection>'  
                '</Menu>';


    CommandProperties.PopulationXML = menuXml;
}

function Search(CommandProperties) {
    ///<summary>Determines which control was pressed</summary>
    /// <param name="CommandProperties">
    ///    Command properties crm parameter sent from the ribbon.  object used to read which dynamically generated
    ///    button is selected.
    /// </param>

    var controlId = CommandProperties.SourceControlId;
    switch (controlId) {
        case 'Sample.account.form.Controls.Button.FirstButton':
            alert(controlId   ' was pressed!');
            break;        
        default:
            alert('unknown');
    }
}
  

Комментарии:

1. Когда я вызываю функцию DynamicMenu, что я должен передать в качестве параметра? (Свойства командной строки)

2. Crm передает нужные вам переменные. Вот для чего предназначена эта строка XML <Значение CrmParameter=»CommandProperties» />. В функциях, которые я просто ввел с тем же именем для согласованности, вам не обязательно. Вот список возможных параметров, которые вы можете указать CRM для отправки: msdn.microsoft.com/en-us/library/gg309332.aspx

3. есть причина, по которой это у меня не работает? я скопировал и вставил ваш код для первого и второго exmaple, оба для меня не работают для crm 2011 в помещении. Я получаю XML-ошибку при открытии From. Я добавил правильное расположение другой кнопки, которую я удалил

4. Сложно устранить неполадки, не зная, в чем заключается ошибка. Ошибка XML позволяет мне предположить, что у вас ошибка проверки схемы в XML, сгенерированном функцией JavaScript (если бы у вас была ошибка в RibbonDiffXML, решение не импортировало бы). Убедитесь, что вы не удалили " где-нибудь случайно. Далее я хотел бы убедиться, что все идентификаторы и порядковые номера верны. Дубликаты вызовут проблемы.