#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, решение не импортировало бы). Убедитесь, что вы не удалили
"
где-нибудь случайно. Далее я хотел бы убедиться, что все идентификаторы и порядковые номера верны. Дубликаты вызовут проблемы.