06.09.2018, 15:31 | #1 |
Участник
|
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 |
Участник
|
Если я правильно понял, то делать надо так, если запуск надо инициализровать для конкретного акаунта/сущнеости:
X++: "/api/data/v8.2/accounts(" + Id + ")/new_sendfollowupemail", true); Последний раз редактировалось Ion; 06.09.2018 в 17:05. |
|
06.09.2018, 19:31 | #3 |
Чайный пьяница
|
Дайте скриншот вашего экшена. И вообще рекомендую использовать CrmRestBuilder для подготовки болванки вашего запроса.
Ну и в принципе гугл никто не отменял. Глобальный экшен Entity-bound
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 06.09.2018 в 19:34. |
|
06.09.2018, 20:22 | #4 |
Участник
|
Цитата:
Сообщение от a33ik
Дайте скриншот вашего экшена. И вообще рекомендую использовать CrmRestBuilder для подготовки болванки вашего запроса.
Ну и в принципе гугл никто не отменял. Глобальный экшен Entity-bound спасибо. |
|
10.09.2018, 19:19 | #5 |
Участник
|
Цитата:
И метод который его высылает. Там всего два параметра: 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] X++: Contact: { primarykeyid: "b340ce6f-0bb5-e811-a96b-000d3af45d23", @odata.type: "Microsoft.Dynamics.CRM.contact" } Language:"481050000" Цитата:
An error occurred while validating input parameters: Microsoft.OData.ODataException: Does not support untyped value in non-open type
Последний раз редактировалось Ion; 10.09.2018 в 19:29. |
|
10.09.2018, 19:26 | #6 |
Чайный пьяница
|
Скриншот процесса можете приложить, пожалуйста?
То что точно неправильно это следующее: Код: contact.primarykeyid = xrmContact.id; Код: contact.contactid = xrmContact.id; Рекомендую поменять тип для Contact c Entity на EntityReference.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Ion (1). |
|
|