01.03.2012, 18:52 | #1 |
Участник
|
Как получить информацию о текущей форме?
CRM 2011
На риббоне есть кнопка, вызывающая веб-ресурс (Silverlight). Кнопка находится на форме записи, а также в гриде связанных записей. Нужно получить ID записи, если это форма и список ID, если это грид (список выделенных записей). Как в Silverlight (или хоть на JavaScript) понять что это за форма, если это грид, тот как получить список выделенных записей... Судя по всему надо как то пользовать объект Xrm.Там есть метод getControlType, который вроде должен возвращать тип формы, но Xrm.Page.ui почему то null... Помогите пожалуйста, всю голову уже себе этим сломал |
|
01.03.2012, 19:22 | #2 |
Kostya Afendikov
|
для Form вы можете в Action передавать Url и добавить Crm Parameter - FirstPrimaryItemId
для Home и Sub-grid: Crm Parameter - FirstSelectedItemId (для одной выбранной записи) для нескольких наверно подойдет - SelectedControlSelectedItemIds Рекомендую скачать этот инструмент http://crmvisualribbonedit.codeplex.com/ и для вашей сущности поиграться с настройками в Action и возможными параметрами для передачи. |
|
01.03.2012, 20:22 | #3 |
Консультант-джедай
|
Попробуйте так... сделайте две внешне одинаковые кнопки, но вызывающие разные функции (JS Веб-ресурса) т распаложенные, соотвветственно на ленте основной формы и связанныз записей. Для получения GUID’ов выделенных записей:
X++: <RibbonDiffXml> <CustomActions> <CustomAction Id="new_MyFirstButton" Location="Mscrm.HomepageGrid.{!EntityLogicalName}.MainTab.Management.Controls._children" Sequence="31" > <CommandUIDefinition> <Button Id="B_MyFirstButton" LabelText="Супер кнопка" ToolTipTitle="Подсказка для супер кнопки" ToolTipDescription="Описание для супер кнопки" TemplateAlias="o1" Image32by32="$webresource:new_cub32.png" Command="Form.account.CustomButton" /> </CommandUIDefinition> </CustomAction> </CustomActions> <Templates> <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates> </Templates> <CommandDefinitions> <CommandDefinition Id="Form.account.CustomButton"> <EnableRules> <EnableRule Id="Mscrm.Enabled" /> </EnableRules> <DisplayRules/> <Actions> <JavaScriptFunction FunctionName="AlertGUID" Library="$Webresource:new_AlertGUID.js" > <CrmParameter Value="SelectedControlSelectedItemIds" /> </JavaScriptFunction> </Actions> </CommandDefinition> </CommandDefinitions> <RuleDefinitions> <TabDisplayRules/> <DisplayRules/> <EnableRules/> </RuleDefinitions> <LocLabels /> </RibbonDiffXml> X++: function AlertGUID(SelectedControlSelectedItemIds) { alert("SelectedControlSelectedItemIds: " + SelectedControlSelectedItemIds); // Все GUID'ы разделенные запятыми } X++: Xrm.Page.data.entity.getId();
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
За это сообщение автора поблагодарили: mistah (1). |
05.03.2012, 14:47 | #4 |
Участник
|
ААААААААААААААААААААААААААААААА, я всю голову уже себе сломал....
Сделал кнопку. Тип действия - открывание URL веб-ресурса. Через CrmParameter сделал чтобы в адресную строку подставлялись нужные мне параметры. Все нормально, строка формируется но Silverlight-приложение при этом отказывается запускаться напроч. Убираю параметры из строки адреса - запускается. Что за нах? Ладно, так не получилось - пробую по другому. Сделал дейcтвие - вызов JavaScript. X++: function Foo(formEtn, formId, gridIds) { var page = context.prependOrgName('/WebResources/Foo/Loader.html'); window.open(page); } Блин, просто не знаю что делать... В голове куча слов и все матерные... То ли я дурак, то ли лыжи не едут... Кто-нибудь знает как отрыть Silverlight-приложение и передать туда данные? Хоть как нибудь? |
|
05.03.2012, 15:22 | #5 |
Консультант-джедай
|
http://jesseliberty.com/2008/12/26/p...-applications/
http://www.voidspace.org.uk/ironpyth...riptable.shtml http://www.byteblocks.com/post/2009/...lverlight.aspx
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
05.03.2012, 15:47 | #6 |
Участник
|
Да нет, я говорю о параметрах из CRM...
Никак не могу понять почему ClientGlobalContext.js.aspx валится с ошибкой и почему веб-ресурс не открывается с параметрами... |
|
05.03.2012, 15:50 | #7 |
Участник
|
Вообще говоря, в том, что валится ClientGlobalContext.js.aspx и в том, что непосредственно из Silverlight я не могу достучаться до части функций Xrm, видится связь. Но как это пофиксить... Где то попадалась информация, что такое может быть, если где то в JS библиотеке есть команды, не упрятанные в функции. Но такого вроде не наблюдается...
|
|
05.03.2012, 15:53 | #8 |
Консультант-джедай
|
ClientGlobalContext.js.aspx предоставляет доступ к следующим функциям http://msdn.microsoft.com/en-us/library/gg334511.aspx
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
05.03.2012, 15:53 | #9 |
Участник
|
А при попытке открыть веб-ресурс с параметрами, типа вот так:
http://localhost/org/%7B634665441520...w_registration валится ошибка X++: An error has occurred. Try this action again. If the problem continues, check the Microsoft Dynamics CRM Community for solutions or contact your organization's Microsoft Dynamics CRM Administrator. Finally, you can contact Microsoft Support Убираеш параметры - открывается... вообще не понятно с чего вдруг. |
|
05.03.2012, 16:02 | #10 |
Участник
|
Не знаю, может я как то сумбурно описал задачу и проблему, сейчас попробую еще раз...
В общем задача такая... Есть Silverlight-приложение, в которое нужно каким то способом передать ID текущей записи (или массив ID, если открыта форма связанных записей). Соответственно есть два пути как вызвать мое приложение и передать ему параметры. 1. Сделать кнопку типа ссылку, которая будет открывать ресурс и в качестве параметров в строке адреса передавать нужные мне параметры, полученные с помощью CrmParametr. Тут облом - ресурс не открывается если в его адресе есть параметры. Почему - не понятно. 2. Сделать кнопку, вызывающую скрипт. В скрипте получить нужные значения, открыть ресурс с помощью метода window.showmodaldialog и передать туда эти параметры. Но и тут тоже облом - клинит ClientGlobalContext.js.aspx. Я просто в растерянности, где искать концы проблемы... |
|
05.03.2012, 17:59 | #11 |
Консультант-джедай
|
А если не использовать ClientGlobalContext.js.aspx? А с помощью JS выцеплять параметры из URL?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
05.03.2012, 18:12 | #12 |
Участник
|
Если не использовать ClientGlobalContext.js, то нужно использовать стандартный Silverlight.js, а значит его нужно тоже подключать как ресурс, но это костылизация уже получается... ClientGlobalContext, на сколько я понимаю, и создан как замена Silverlight.js + ряд дополнительных методов... Но вот его почему то клинит... гррр...
|
|
06.03.2012, 13:51 | #13 |
Участник
|
Нда... почему не работает веб-ресурс, если в него передать какие то параметры, стало понятно... вот
И кому только это в голову то пришло... В общем вариант с передачей параметров прямо из CRM в ресурс можно считать не реализуемым... Остается JavaScript... |
|
13.03.2012, 09:46 | #14 |
Участник
|
В общем выкрутился так:
- создал по кнопке для формы объекта и списка, - для каждой кнопки создал свое отдельное действие - открыть URL (мой SL-ресурс), - в качестве параметра Data в случае с формой передаю CRM-параметр FirstPrimaryItemId (получаю ID текущей записи формы), а в случае со списком параметр SelectesControlSelectedItemIds (получаю список ID отмеченных записей) Плюсы решения: - оно работает - все решено без использования JS чисто декларативно Минусы: - по двум местам размазаны настройки окна - в моем случае не принципиально, но таким способом не передашь больше одного параметра |
|
04.04.2012, 02:12 | #15 |
Участник
|
Еще один способ передачи параметров, в случае с диалоговым окном, может кому пригодиться...
http://www.buseng.ru/blog/2012/04/re...insilverlight/ |
|