17.05.2013, 17:36 | #1 |
Еда - топливо, Одежда - н
|
Начало для разработчика под CRM
Привет всем!
Прошу не ругаться матом так сразу Я тут решил научиться писать скрипты под CRM. Но у меня появились вопросы. SDK у меня есть, сразу скажу. Вопросы: 1. В чем нужно писать эти скрипты? Visual Studio подойдет? Где почитать как все это настроить? 2. Как тестить, то что написал? Может еще что-то надо?? Разработчиков под рукой нет и спросить некого... Читать талмуды очень долго и нудно. Но само собой разумеется, что читать буду. Но для начала хочется понимать, что нужно настроить и как для того что бы начинать работать и хоть что-то писать. Буду благодарен за любые советы и критику. |
|
18.05.2013, 12:03 | #2 |
Еда - топливо, Одежда - н
|
Цитата:
Сообщение от -O_o-
Привет всем!
Прошу не ругаться матом так сразу Я тут решил научиться писать скрипты под CRM. Но у меня появились вопросы. SDK у меня есть, сразу скажу. Вопросы: 1. В чем нужно писать эти скрипты? Visual Studio подойдет? Где почитать как все это настроить? 2. Как тестить, то что написал? Может еще что-то надо?? Разработчиков под рукой нет и спросить некого... Читать талмуды очень долго и нудно. Но само собой разумеется, что читать буду. Но для начала хочется понимать, что нужно настроить и как для того что бы начинать работать и хоть что-то писать. Буду благодарен за любые советы и критику. |
|
18.05.2013, 23:27 | #3 |
Участник
|
Добрый вечер.
А что вы понимаете под скриптами? ) Код плагинов и воркфлоу я бы рекомендовал писать в Visual Studio 2010/2012. Скрипты на JavaScript тоже можно писать в VisualStudio, но здесь мне не с чем сравнивать, т.к. всегда пользовался только этой средой разработки. Для моих нужд этого хватало. Также рекомендую предварительно установить дополнение CRM Developer Toolkit (его можно найти в SDK) для VisualStudio, это облегчит разработку CRM-решений. http://msdn.microsoft.com/en-us/library/hh372957.aspx http://community.dynamics.com/crm/b/...x#.UZfVH8q8NX8 Отчеты (reporting) пишу в VisualStudio либо в SQL Server Business Intelligence Development Studio. Ну и SQL Server Management Studio никто не отменял, SQL-запросы удобнее писать именно там (ИМХО). |
|
20.05.2013, 16:49 | #4 |
Участник
|
Цитата:
По поводу "в чем писать". Перепробовал несколько редакторов, в том числе - пробовал в Visual Studio с установленными JavaScriptSnippets и JScriptEditorExtensions. Оказалось, что наиболее удобнее это делать в Notepad++. Удобства Notepad++ перевешивают преимущества IntelliSense. Тем более в Notepad++ можно добавлять свои ключевые слова... Отладка. Для новичка рекомендую Xrm.Page Snapshot - отладка офлайн сценариев на форме. Тулза вполне пригодна для отладки обработчиков событий, простой логики и интерфейса. События от ленты и запросы SOAP/REST не отловит. После того, как "детские" ошибки исчезают, лучше, чем встроенный отладчик в IE найти сложно. Для многобраузерной CRM последнее время мне больше нравится отлаживаться в Firefox. (IE не позволяет отловить события с ленты, только в режиме совместимости). Весь процесс выглядит примерно так: 1) Пишем скрипт в Notepad++ 2) Попутно правим/создаем атрибуты сущности, отношения и т.п. 3) Добавляем скрипт в форму, публикуемся. 4) Открываем новую сессию IE (как правило, под учеткой простого юзера). Тестим 5) При обнаружении ошибок - жмем F12, отлаживаемся. Приятные полезности отладчика IE: 1) возможность просмотреть всю иерархию объектов, если они находятся в поле видимости. Даже если эти объекты не указаны в коде сценария. 2) возможность запуска любых внешних сценариев в текущем контексте. Т.е. просто взял сценарий Ctrl+C из редактора Notepad++, выплюнул в консоль отладчика и запустил. Далее тут же в консоли проверил результат. Ну и трассировка alert-ами в особо сложных случаях. Удачи!
__________________
Материалы для внедренцев Microsoft Dynamics CRM теперь на сайте Infoleat.com и в моем блоге CRM для бизнеса |
|
|
За это сообщение автора поблагодарили: Roman08 (1). |
20.05.2013, 16:52 | #5 |
Еда - топливо, Одежда - н
|
Именно скрипты на JavaScript. Хочу для начала просто делать базовые вещи.
Скрывать поля например, или алерты выкидывать в зависимости от условий. А дальше посмотрим. Вопрос наверное будет более корректно задать так: Как создать проект в Visual Studio именно для разработки скриптов на JavaScript? Я установил из SDK tooklit v 1.1, но при создании проекта, написало ошибку |
|
21.05.2013, 18:35 | #6 |
Участник
|
JavaScript можно писать в любом блокноте (но Notepad++ более удобный, но тут как кому )
А начинать надо в SDK с Development for Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online > Software Development Kit for Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online > Programming Reference for Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online > Client-Side Programming Reference или на msdn это http://msdn.microsoft.com/en-us/library/gg328255.aspx в этом разделе есть все что касается клиентской части работы с формой. А потом нужно учить вот это Use Web Service Data in Web Resources (REST and SOAP Endpoint) |
|
22.05.2013, 15:14 | #7 |
Заноза в заднице
|
И мои пять копеек...
1. Скрипты пишу в Visual Studio 2010. При этом никакой специальный тип проекта и CRM-ные надстройки не использую. Все скрипты храню в созданном для этого пустом проекте веб-приложения.
2. Для удобства IntelliSense пользуюсь старым способом: из SDK вытащил файл справочника XrmPageTemplate.js, поместил его в проект, а в создаваемых файлах скриптов даю ссылку первой строкой в таком виде: X++: /// <reference path="\ISReferences\XrmPageTemplate.js" /> 4. С отладкой в самой VS естественно никак, поэтому для отладки скриптов держим тестовый сервер, который в принципе является копией рабочего. Основной инструмент отладки - Средства Разработчика Internet Explorer (вызывается по нажатии F12) плюс алерты там, где возникает необходимость отследить что-то в контрольных точках без отладки. 5. После того, как скриптов становится много - выделяю наиболее употребимые методы с обобщениями и разного рода предварительными проверками в общий класс, типа Basic, в котором со временем набралось масса нужных функций, типа получение значений атрибутов полей, с проверкой типа возвращаемого значения и однозначным возвратом, который не принуждает устраивать кучу проверок по ходу скриптов, также выделил отдельно функцию присвоения значения атрибута с setSubmitMode, ну и прочее разное, что встречается часто и повторяется. 6. Ну и работу со скриптами постоянно веду: если где-то что-то приходится читать после создания и применения, ну там ошибка какая или изменения надо внести - тотчас реагирую на желание что-то упростить или сделать более удобочитаемым. Определения названий полей выношу на верхний уровень, чтобы не искать их по ходу скрипта, а сначала видеть, какие имена атрибутов используются. Стараюсь искать какие-нибудь готовые фреймворки в сети, смотрю, что в них есть полезного, какие приемы используются другими разработчиками в тех или иных ситуациях.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
|
За это сообщение автора поблагодарили: Roman08 (1). |
22.05.2013, 17:55 | #8 |
Консультант-джедай
|
А может стоить начать изучение с самго JavaScript? книжечку там почитать для чайников? без привязки к CRM
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
За это сообщение автора поблагодарили: Артем Enot Грунин (1), Konstantin Katsovich (1). |
23.05.2013, 14:46 | #9 |
Заноза в заднице
|
Скорее всего так и надо действовать, но практика показывает, что прикладные задачи способствуют скорейшему изучению языка, если конечно есть базовые знания и навыки в программировании. Абстрактные примеры и основы, как правило, собираются в мыслях в один большой ком и становятся полезной информацией только тогда, когда ты точно знаешь зачем тебе то или иное знание.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
24.05.2013, 14:25 | #10 |
Участник
|
Для быстрого изменения/отладки не сильно больших скриптов использую вот такую штуку: http://jswebresourcemanager.codeplex.com/ - она позволяет сократить время от редактирования скрипта до возможности нажать F5 в браузере до нескольких секунд.
|
|
24.05.2013, 16:35 | #11 |
Moderator
|
Цитата:
Сообщение от Likefire
Скорее всего так и надо действовать, но практика показывает, что прикладные задачи способствуют скорейшему изучению языка, если конечно есть базовые знания и навыки в программировании. Абстрактные примеры и основы, как правило, собираются в мыслях в один большой ком и становятся полезной информацией только тогда, когда ты точно знаешь зачем тебе то или иное знание.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 24.05.2013 в 16:38. |
|
30.10.2013, 16:54 | #12 |
Еда - топливо, Одежда - н
|
И снова привет всем.
Спасибо за ваши комменты. Столкнулся с проблемой того, что не понимаю как использовать такую штуку как "XrmServiceToolkit". И того, что я имею на данный момент. - есть понимание того как работает JS. (что такое переменные, классы, объекты, методы, свойства и т.д.) - есть понимание того, как использовать SDK к примитивным задачам. Типа: X++: function ShowAttributes() { var ContractType = Xrm.Page.getAttribute("agl_dopsoglashenie").getValue(); if (ContractType == false) { Xrm.Page.ui.controls.get("agl_osnovnoy_dogovorid").setVisible(false); Xrm.Page.getAttribute("agl_osnovnoy_dogovorid").setValue(null); } else { Xrm.Page.ui.controls.get("agl_osnovnoy_dogovorid").setVisible(true); Xrm.Page.getAttribute("agl_osnovnoy_dogovorid").setRequiredLevel("required"); } } Я скачал ее. Там было 3 файла. (jquery; json2; XrmServiceToolkit). Я создал веб. ресурсы в CRM.(по идее, этого достаточно для того, чтобы написанные меною строки кода, могли обращаться к ним и выполняться так как надо.) ---------------------- Но я получил конфуз... ТУТ описаны методы. Но что-то я не догоняю как их использовать... У меня разрыв шаблона что-ли.. И так же почитал ТУТ и я вообще запутался... -----------------
Благодарю |
|
30.10.2013, 17:03 | #13 |
Участник
|
Ты скажи, что тебе не ясно.
Подключаешь на форму ресурсы. Далее смотрим пример. Предположим на создание. XrmServiceToolkit.Rest.Create это вызов самого метода. В него передаются параметры. Сформированный account, "AccountSet", функция, которая запустится после того, как все пройдет успешно и функция, которая запустится, если возникнет ошибка. |
|
30.10.2013, 17:04 | #14 |
Консультант-джедай
|
Классы?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
30.10.2013, 17:05 | #15 |
Еда - топливо, Одежда - н
|
Для примера, сейчас есть задача..
С первым пунктом справился, код в посте выше. А вот со вторым проблемы. Вопросы: 1. Что нужно в лукап "Клиент передавать"? ИД записи или GUID еще что-то. Чтобы CRM схавал это. 2. Как добраться до клиента в выбранном лукапе? |
|
30.10.2013, 17:15 | #16 |
Участник
|
X++: XrmServiceToolkit.Rest.Retrieve( Xrm.Page.ui.controls.get("agl_osnovnoy_dogovorid").getValue()[0].id, 'agl_osnovnoy_dogovorSet', null, null, function (result) { // названия после точки не помню быстро. думаю сам проверишь. if(result. != null) { var contactId = result. .Id var contactName = result. .name // а тут код по заполнению лукапа должен быть } }, function (error) { equal(true, false, error.message); }, false ); Писал по примеру. Последний раз редактировалось g.Naukovych; 30.10.2013 в 17:17. |
|
30.10.2013, 17:32 | #17 |
Участник
|
От себя вопрос
почему agl_osnovnoy_dogovor, а не agl_main_contract Последний раз редактировалось g.Naukovych; 30.10.2013 в 17:49. |
|
30.10.2013, 17:55 | #18 |
Еда - топливо, Одежда - н
|
Если ты имеешь ввиду contRact то скажу:
Мог бы съехать на то, что кто-то сделал или так регламентировали или еще что-то. Не профессионально было сделано мной, исправляюсь А вообще, в каждой конторе свой регламент . У кого-то требуют оригинал перевод. (тоже есть минусы, переводят как попало, гугл транслейт и потом вообще не понятно что за объект) особенно для банков. Если все же contact, то не могу понять при чем тут контакт. У меня есть вопросы. Цитата:
1. Что означает вот это ( 'agl_osnovnoy_dogovorSet', null,, null)
2. // а тут код по заполнению лукапа должен быть. Типа как-то так: X++: var lookupData = new Array(); var lookupItem = new Object(); lookupItem.id = contactId; lookupData [0] = lookupItem; Xrm.Page.getAttribute("название поля где клиент").setValue(lookupData); |
|
30.10.2013, 18:42 | #19 |
Еда - топливо, Одежда - н
|
Вообщем получился у меня такой код.
Библиотеки добавлены, все опубликовано. заполняю поле "основной договор" выдает ошибку. X++: function GetAccountFromContract() { XrmServiceToolkit.Rest.Retrieve(Xrm.Page.ui.controls.get("agl_osnovnoy_dogovorid").getValue()[0].id, 'agl_osnovnoy_dogovoridSet', null, null, function (result) { if (result.agl_accountid != null) { var AccountId = result.agl_accountid.id; var AccountName = result.agl_accountid.name; var lookupData = new Array(); var lookupItem = new Object(); lookupItem = AccountId; lookupData[0] = lookupItem; Xrm.Page.getAttribute("agl_accountid").setValue(lookupData); } }, function (error) { equal(true, false, error.message); }, false ); } Последний раз редактировалось -O_o-; 30.10.2013 в 18:46. |
|
30.10.2013, 18:57 | #20 |
Участник
|
Может, глупый вопрос, но почему:
X++: Xrm.Page.ui.controls.get("agl_osnovnoy_dogovorid").getValue()[0].id X++: Xrm.Page.getAttribute("agl_osnovnoy_dogovorid").getValue()[0].id |
|
|
За это сообщение автора поблагодарили: g.Naukovych (2). |
|
|