AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Прочие вопросы
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.05.2013, 17:36   #1  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Начало для разработчика под CRM
Привет всем!
Прошу не ругаться матом так сразу
Я тут решил научиться писать скрипты под CRM. Но у меня появились вопросы. SDK у меня есть, сразу скажу.
Вопросы:
1. В чем нужно писать эти скрипты? Visual Studio подойдет? Где почитать как все это настроить?
2. Как тестить, то что написал?
Может еще что-то надо??
Разработчиков под рукой нет и спросить некого... Читать талмуды очень долго и нудно. Но само собой разумеется, что читать буду. Но для начала хочется понимать, что нужно настроить и как для того что бы начинать работать и хоть что-то писать.

Буду благодарен за любые советы и критику.
Старый 18.05.2013, 12:03   #2  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Цитата:
Сообщение от -O_o- Посмотреть сообщение
Привет всем!
Прошу не ругаться матом так сразу
Я тут решил научиться писать скрипты под CRM. Но у меня появились вопросы. SDK у меня есть, сразу скажу.
Вопросы:
1. В чем нужно писать эти скрипты? Visual Studio подойдет? Где почитать как все это настроить?
2. Как тестить, то что написал?
Может еще что-то надо??
Разработчиков под рукой нет и спросить некого... Читать талмуды очень долго и нудно. Но само собой разумеется, что читать буду. Но для начала хочется понимать, что нужно настроить и как для того что бы начинать работать и хоть что-то писать.

Буду благодарен за любые советы и критику.
просмотрело 50 человек, и что? нет ни одного разработчика среди них ))))
Старый 18.05.2013, 23:27   #3  
drongo is offline
drongo
Участник
 
35 / 12 (1) ++
Регистрация: 20.05.2012
Адрес: Россия, Москва
Добрый вечер.

А что вы понимаете под скриптами? )

Код плагинов и воркфлоу я бы рекомендовал писать в 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  
Fighter is offline
Fighter
Участник
Аватар для Fighter
 
108 / 31 (2) +++
Регистрация: 26.07.2011
Адрес: Kyiv
Записей в блоге: 12
Цитата:
Сообщение от -O_o- Посмотреть сообщение
Привет всем!
Вопросы:
1. В чем нужно писать эти скрипты? Visual Studio подойдет? Где почитать как все это настроить?
2. Как тестить, то что написал?
Может еще что-то надо??
Привет!
По поводу "в чем писать".
Перепробовал несколько редакторов, в том числе - пробовал в 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  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Цитата:
Сообщение от drongo Посмотреть сообщение
Добрый вечер.

А что вы понимаете под скриптами? )
Именно скрипты на JavaScript. Хочу для начала просто делать базовые вещи.
Скрывать поля например, или алерты выкидывать в зависимости от условий.
А дальше посмотрим.
Вопрос наверное будет более корректно задать так:
Как создать проект в Visual Studio именно для разработки скриптов на JavaScript?

Я установил из SDK tooklit v 1.1, но при создании проекта, написало ошибку
Изображения
 
Старый 21.05.2013, 18:35   #6  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
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  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
И мои пять копеек...
1. Скрипты пишу в Visual Studio 2010. При этом никакой специальный тип проекта и CRM-ные надстройки не использую. Все скрипты храню в созданном для этого пустом проекте веб-приложения.
2. Для удобства IntelliSense пользуюсь старым способом: из SDK вытащил файл справочника XrmPageTemplate.js, поместил его в проект, а в создаваемых файлах скриптов даю ссылку первой строкой в таком виде:
X++:
/// <reference path="\ISReferences\XrmPageTemplate.js" />
3. Файлы скриптов организовал таким образом, что копии опубликованных скриптов под аналогичными именами сохраняю в отдельных файлах, а изменения все веду в файле скрипта под названием TempScript.js.
4. С отладкой в самой VS естественно никак, поэтому для отладки скриптов держим тестовый сервер, который в принципе является копией рабочего. Основной инструмент отладки - Средства Разработчика Internet Explorer (вызывается по нажатии F12) плюс алерты там, где возникает необходимость отследить что-то в контрольных точках без отладки.
5. После того, как скриптов становится много - выделяю наиболее употребимые методы с обобщениями и разного рода предварительными проверками в общий класс, типа Basic, в котором со временем набралось масса нужных функций, типа получение значений атрибутов полей, с проверкой типа возвращаемого значения и однозначным возвратом, который не принуждает устраивать кучу проверок по ходу скриптов, также выделил отдельно функцию присвоения значения атрибута с setSubmitMode, ну и прочее разное, что встречается часто и повторяется.
6. Ну и работу со скриптами постоянно веду: если где-то что-то приходится читать после создания и применения, ну там ошибка какая или изменения надо внести - тотчас реагирую на желание что-то упростить или сделать более удобочитаемым. Определения названий полей выношу на верхний уровень, чтобы не искать их по ходу скрипта, а сначала видеть, какие имена атрибутов используются. Стараюсь искать какие-нибудь готовые фреймворки в сети, смотрю, что в них есть полезного, какие приемы используются другими разработчиками в тех или иных ситуациях.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
За это сообщение автора поблагодарили: Roman08 (1).
Старый 22.05.2013, 17:55   #8  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
А может стоить начать изучение с самго JavaScript? книжечку там почитать для чайников? без привязки к CRM
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
За это сообщение автора поблагодарили: Артем Enot Грунин (1), Konstantin Katsovich (1).
Старый 23.05.2013, 14:46   #9  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от slivka_83 Посмотреть сообщение
А может стоить начать изучение с самго JavaScript? книжечку там почитать для чайников? без привязки к CRM
Скорее всего так и надо действовать, но практика показывает, что прикладные задачи способствуют скорейшему изучению языка, если конечно есть базовые знания и навыки в программировании. Абстрактные примеры и основы, как правило, собираются в мыслях в один большой ком и становятся полезной информацией только тогда, когда ты точно знаешь зачем тебе то или иное знание.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 24.05.2013, 14:25   #10  
Алексей Калистратов is offline
Алексей Калистратов
Участник
 
36 / 12 (1) ++
Регистрация: 02.05.2012
Для быстрого изменения/отладки не сильно больших скриптов использую вот такую штуку: http://jswebresourcemanager.codeplex.com/ - она позволяет сократить время от редактирования скрипта до возможности нажать F5 в браузере до нескольких секунд.
Старый 24.05.2013, 16:35   #11  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Цитата:
Сообщение от Likefire Посмотреть сообщение
Скорее всего так и надо действовать, но практика показывает, что прикладные задачи способствуют скорейшему изучению языка, если конечно есть базовые знания и навыки в программировании. Абстрактные примеры и основы, как правило, собираются в мыслях в один большой ком и становятся полезной информацией только тогда, когда ты точно знаешь зачем тебе то или иное знание.
Ежу понятно, что изучать проще на реальном примере. Однако это боль читать код различных горе-программистов, которые не знают средств языка на котором пишут. Знакомство с "классическими" языками программирования - это безусловно прекрасно с точки зрения умения читать код и реже очепятываться, однако, не мне вам говорить, что JavaScript - это нечто совершенно отличающееся от объектно ориентированных языков к которым все привыкли. В нем совершенно иные принципы наследования, инкапсуляции и даже использования операций!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional

Последний раз редактировалось Артем Enot Грунин; 24.05.2013 в 16:38.
Старый 30.10.2013, 16:54   #12  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
И снова привет всем.
Спасибо за ваши комменты.
Столкнулся с проблемой того, что не понимаю как использовать такую штуку как "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");
    }
}
Но сейчас пришел к тому, что нужно иметь понимание и умение использования REST & SOAP. Мне порекомендовали и я почитал о библиотеке XrmServiceToolkit.
Я скачал ее. Там было 3 файла. (jquery; json2; XrmServiceToolkit). Я создал веб. ресурсы в CRM.(по идее, этого достаточно для того, чтобы написанные меною строки кода, могли обращаться к ним и выполняться так как надо.)
----------------------
Но я получил конфуз...
ТУТ описаны методы. Но что-то я не догоняю как их использовать... У меня разрыв шаблона что-ли..
И так же почитал ТУТ и я вообще запутался...
-----------------
  1. Подскажите как использовать методы библиотеки, которую я скачал.
  2. Может тыкнете пальцем что я упустил.

Благодарю
Старый 30.10.2013, 17:03   #13  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Ты скажи, что тебе не ясно.

Подключаешь на форму ресурсы.

Далее смотрим пример.
Предположим на создание.

XrmServiceToolkit.Rest.Create это вызов самого метода.

В него передаются параметры. Сформированный account, "AccountSet", функция, которая запустится после того, как все пройдет успешно и функция, которая запустится, если возникнет ошибка.
__________________
Мой блог https://procrm.tv
Старый 30.10.2013, 17:04   #14  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Цитата:
Сообщение от -O_o- Посмотреть сообщение
- есть понимание того как работает JS. (что такое ... классы... )
Классы?
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 30.10.2013, 17:05   #15  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Для примера, сейчас есть задача..
  1. Если это доп. соглашение, то отображать поле выбора для главного договора "основной договор" и сделать его обязательным
  2. После добавления договора, заполнить поле "клиент" из этого же договора.
Основной договор - это та же сущность "договор", просто ссылка на самого себя.

С первым пунктом справился, код в посте выше.
А вот со вторым проблемы. Вопросы:
1. Что нужно в лукап "Клиент передавать"? ИД записи или GUID еще что-то. Чтобы CRM схавал это.
2. Как добраться до клиента в выбранном лукапе?
Миниатюры
Нажмите на изображение для увеличения
Название: договор.png
Просмотров: 513
Размер:	15.8 Кб
ID:	8546  
Старый 30.10.2013, 17:15   #16  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
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
            );
как то так это выглядит.
Писал по примеру.
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 30.10.2013 в 17:17.
Старый 30.10.2013, 17:32   #17  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
От себя вопрос
почему agl_osnovnoy_dogovor, а не agl_main_contract
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 30.10.2013 в 17:49.
Старый 30.10.2013, 17:55   #18  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
От себя вопрос
почему agl_osnovnoy_dogovor, а не agl_main_contact
Если ты имеешь ввиду 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  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Вообщем получился у меня такой код.
Библиотеки добавлены, все опубликовано.
заполняю поле "основной договор" выдает ошибку.
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  
kalina is offline
kalina
Участник
MCBMSS
 
25 / 16 (1) ++
Регистрация: 12.07.2011
Адрес: Израиль
Может, глупый вопрос, но почему:
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).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 13 Blog bot Dynamics CRM: Blogs 0 27.03.2013 22:12
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 12 Blog bot Dynamics CRM: Blogs 0 30.01.2013 01:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 10 Blog bot Dynamics CRM: Blogs 0 17.08.2012 03:27
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 4 Blog bot Dynamics CRM: Blogs 0 24.09.2011 01:16
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.