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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.09.2018, 15:31   #1  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Run action from javascript
Привет!

Давно не использовать экшены и в новой версии не знаю, как правильно их вызывать.

Вернее надо с кастомной страницы вызвать экшен, который по определенной логике вышлет письма. Изначально был и есть диалог с этой логикой подвязанный под акаунт.

Вопрос вот в чем:
- если буду его вызывать с JS то делать глобальным и прокидывать параметры нужные процессу - акаунт и контакт;
- указать сущность акаунт и тогда при вызове просто прокидывать один лишь контакт, но тут мне не ясно как указать что все будет осуществляться в контексте данного акаунта, там можно как это инициализировать?

Код:
function CallCustomAction() {
    try {

        var reqName = "new_sendfollowupemail";
        var clientUrl = Xrm.Page.context.getClientUrl();
        var parameters = {
           "Account":
                  {
                      "@odata.type": "Microsoft.Dynamics.CRM.account",
                      "accountid": "C4CA0B66-59B9-E611-8106-C4346BDC0E01",
                      "name": "Account Test",
                      "accountnumber": "123"
                  }
		  "Contact":
                  {
                      "@odata.type": "Microsoft.Dynamics.CRM.contact",
                      "contactid": "C4CA0B66-59B9-E611-8106-C4346BDC0E01",
                      "name": "Contact Test",
                      "accountnumber": "321"
                  }	  
        };

        //Create request
        var req = new XMLHttpRequest();
        req.open("POST", clientUrl + "/api/data/v8.2/" + reqName, true);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");

        req.onreadystatechange = function () {

            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null;

                if (this.status == 200 || this.status == 204) {
                    //success callback   
                    console.log("Success");
                } else {
                    //error callback      
                    console.log("Error");
                }
            }
        };
        req.send(JSON.stringify(parameters));

    } catch (e) {
        alert(e.message);
    }
}
Старый 06.09.2018, 16:57   #2  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Если я правильно понял, то делать надо так, если запуск надо инициализровать для конкретного акаунта/сущнеости:

X++:
"/api/data/v8.2/accounts(" + Id + ")/new_sendfollowupemail", true);

Последний раз редактировалось Ion; 06.09.2018 в 17:05.
Старый 06.09.2018, 19:31   #3  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Дайте скриншот вашего экшена. И вообще рекомендую использовать CrmRestBuilder для подготовки болванки вашего запроса.
Ну и в принципе гугл никто не отменял.
Глобальный экшен
Entity-bound
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit

Последний раз редактировалось a33ik; 06.09.2018 в 19:34.
Старый 06.09.2018, 20:22   #4  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Дайте скриншот вашего экшена. И вообще рекомендую использовать CrmRestBuilder для подготовки болванки вашего запроса.
Ну и в принципе гугл никто не отменял.
Глобальный экшен
Entity-bound
Та я это все нагуглил, пока пилил фронт - решил уточнить. За ссылку CrmRestBuilder
спасибо.
Старый 10.09.2018, 19:19   #5  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от Ion Посмотреть сообщение
Та я это все нагуглил, пока пилил фронт - решил уточнить. За ссылку CrmRestBuilder
спасибо.
Не могу понять что не работает. Есть сам процесс(картинка)

И метод который его высылает. Там всего два параметра: Contact and Picklist

X++:
  public executeAction(accountId: string, xrmContact: Contact, language: OptionSet): Observable<any> {
    console.log("run executeAction");
    const httpOptions = {
      headers: this.httpHeaders
    };

    let parameters: any = {};
    let contact: any = {};
    contact.primarykeyid = xrmContact.id;
    contact["@odata.type"] = "Microsoft.Dynamics.CRM.contact";
    parameters.Contact = contact;
    parameters.Language = language.value;
    let url = `accounts(${accountId})/Microsoft.Dynamics.CRM.arbela_SendWelcomeLetter`;      
    return this.httpClient.post(combineUrl(url), parameters, httpOptions);
  }
Запрос идет по этому урл.

X++:
[url]https://dev.crm3.dynamics.com/api/data/v9/accounts(AE572049-1A85-E811-A957-000D3AF42A5A)/Microsoft.Dynamics.CRM.prefix_SendWelcomeLetter[/url]
С таким Body request
X++:
Contact: { primarykeyid: "b340ce6f-0bb5-e811-a96b-000d3af45d23", @odata.type: "Microsoft.Dynamics.CRM.contact" }
Language:"481050000"
Ругаеться на Bad Request. Падает с ошибкой

Цитата:
An error occurred while validating input parameters: Microsoft.OData.ODataException: Does not support untyped value in non-open type
Использовал CRM REST Builderv2.5.0.0

Последний раз редактировалось Ion; 10.09.2018 в 19:29.
Старый 10.09.2018, 19:26   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Скриншот процесса можете приложить, пожалуйста?

То что точно неправильно это следующее:

Код:
contact.primarykeyid = xrmContact.id;
Должно быть

Код:
contact.contactid = xrmContact.id;
Знаю, что так сгенерировал CrmRestBuilder, но это то, как он сейчас работает.

Рекомендую поменять тип для Contact c Entity на EntityReference.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Ion (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
NAV Team: Upgrading from Microsoft Dynamics NAV 2009 R2 or Microsoft Dynamics NAV 2009 SP1 to Microsoft Dynamics NAV 2015 Blog bot Dynamics CRM: Blogs 0 23.02.2015 13:00
Navigate Into Success: Passing JSON from JavaScript to C/AL Blog bot Dynamics CRM: Blogs 0 31.12.2014 10:00
Ошибка бизнес-процесса Tarasov E Dynamics CRM: Разработка 9 18.02.2010 14:02
NAV Team: How to run 2 RTC on the same pc and connect it to different db (how to run pages/reports from diff db) Blog bot Dynamics CRM: Blogs 0 17.11.2009 09:52
wiki.dynamicsbook: Changes Made in Navision Attain 3.60 Blog bot Dynamics CRM: Blogs 0 02.09.2008 13:23

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:18.