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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2017, 11:49   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
пример доступа к DB со стороны серверной части
https://metanit.com/web/nodejs/6.2.php
__________________
полезное на axForum, github, vk, coub.
Старый 24.05.2017, 17:39   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как достучаться из веб-приложения к акс2012, акс2009?
Цитата:
Сообщение от mazzy Посмотреть сообщение
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Цитата:
Сообщение от mazzy Посмотреть сообщение
Согласен, что вряд ли кто заинтересуется альтернативным интерфейсом ко всей Аксапте. но небольшие приложения типа вот таких - вполне
Timesheets, Expenses, Approvals - это, по-моему, какие-то игрушки либо proof of concept.
вопрос и был задан не про них. а про класс подобных веб-приложений.
Да, я видел исходный вопрос, но потом почему-то речь зашла про небольшие приложения типа мобильных - я и ответил про мобильные приложения. Впрочем, вернемся к исходной теме...
Цитата:
Сообщение от mazzy Посмотреть сообщение
почему ты считаешь работу в оффлайне обязательной?
Я не считаю работу в оффлайне обязательной, в некоторых сценариях без онлайна не обойтись. Но я считаю, что обмен данными стороннего приложения с Аксаптой должен быть по возможности асинхронным. Асинхронность уже дает некую автономность и предполагает хранение слепков данных отдельно от БД Аксапты, а дальше, если развивать тему, можно воспроизвести во внешнем приложении некую бизнес-логику, которая будет работать на доступных в оффлайне данных из Аксапты. Банальные Excel-файлы, которые генерятся движком экспорта-импорта данных в AX 2009, уже содержат енумы и возможность выбора значений в связанных ячейках, а не требуют вбивать метки енумов руками. От приложения я как пользователь ожидал бы чего-то большего, нежели выбор значений из справочников, на что способен даже Excel. Я ожидал бы учета истории того, что я вводил, применения некий правил, некой логики, которая облегчала бы мою работу и предупреждала ошибки, а не позволяла мне потратить кучу времени и сил на вбивание данных, чтобы в итоге оказаться в тупике и всё переделывать. Апофеозом такого подхода в моем понимании являются AX POS и Commerce Runtime, но в этой теме, полагаю, речь о чем-то попроще...
На Аксапту зачастую замыкают очень много сторонних приложений и сервисов, подчас критически важных для бизнеса. И чем проще будет делать интеграцию с Аксаптой, тем больше сторонних приложений и сервисов будут с ней связывать. При этом Аксапта в вынешнем виде - это большая монолитная система с большой базой, кучей серверов и необходимостью это все обслуживать. Иными словами, Аксапта бывает иногда недоступна, и чем больше база и/или количество серверов, тем дольше могут длиться периоды недоступности. Так вот, асинхронная интеграция сторонних приложений и сервисов позволяет легче проходить периоды недоступности Аксапты и заодно сглаживать пики нагрузки.
Далее, вернемся к сторонним приложениям, с которыми работают конечные пользователи. Если приложение умеет держать автономные слепки справочников, но не помогает мне как пользователю с ними работать, не помогает избегать ошибок, то какой от него толк? Чем оно лучше, "умнее" файлов Excel, куда выгружены справочники и в ячейках настроен выбор из них? А если приложение и в оффлайне не работает, то чем оно лучше уже имеющейся в коробке портальной веб-морды, для которой уже реализован механизм "достучаться до Аксапты"?
За это сообщение автора поблагодарили: mazzy (5).
Старый 24.05.2017, 18:37   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Апофеозом такого подхода в моем понимании являются AX POS и Commerce Runtime, но в этой теме, полагаю, речь о чем-то попроще...
Ну, как сказать...
В акс7 основной клиент в ритейле - браузерный cloudPOS - это набор html-страниц и javaScript'ов.

не могу назвать ритейл ни апофеозом, ни примером для подражания.
собственно вопрос то и родился в ходе работы в ритейлом в акс7.
__________________
полезное на axForum, github, vk, coub.
Старый 24.05.2017, 18:53   #4  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ну, как сказать...
В акс7 основной клиент в ритейле - браузерный cloudPOS - это набор html-страниц и javaScript'ов.

не могу назвать ритейл ни апофеозом, ни примером для подражания.
собственно вопрос то и родился в ходе работы в ритейлом в акс7.
А можно подробностей? Почему этот набор html-страниц и javaScript'ов не кросс-платформенный и не кросс-браузерный?

Только не говори что ты опять меня забанишь за оффтопик. Это по теме почему один набор html-страниц и javaScript'ов может достучаться, а другой вряд-ли.

Supported web browsers for Retail Cloud POS

Retail Cloud POS for Dynamics 365 for Operations can run in any of the following web browsers that run on the specified operating systems:
Microsoft Edge (latest publicly available version) on Windows 10
Internet Explorer 11 on Windows 10, Windows 8.1, or Windows 7
Chrome (latest publicly available version) on Windows 10, Windows 8.1, or Windows 7

https://docs.microsoft.com/en-us/dyn...m-requirements
Старый 24.05.2017, 19:19   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
нормально вроде.

Цитата:
Сообщение от ax_mct Посмотреть сообщение
А можно подробностей? Почему этот набор html-страниц и javaScript'ов не кросс-платформенный и не кросс-браузерный?
клиент - и кросс-платформенный, и кросс-браузерный.
правда оформлен в стиле виндовых modern apps.

но клиент очень тесно завязан на серверную часть магазина.
которая сильно завязана на IIS, MS SQL, .net и прочие виндовые технологии.

а не могу назвать примером для подражания, поскольку мне кажется, что на других библиотеках подобное пишется гораздо легче и обладает большим функционалом.
да, понятно, что ритейлу надо поддерживать совместимость с предыдущей версией.
но...

просто мне кажется, что можно делать морды намного проще и намного функциональнее при помощи традиционных веб-технологий. если бы был набор библиотек/инструментов доступа к Аксапте. Типа библиотеки доступа к mySQL, postgreSQL, mongoDB. Даже с учетом того, что клиент самой аксапты 7 - это тоже браузерное веб-приложение.
Миниатюры
Нажмите на изображение для увеличения
Название: ax7.PNG
Просмотров: 345
Размер:	68.3 Кб
ID:	11413   Нажмите на изображение для увеличения
Название: pos.jpg
Просмотров: 302
Размер:	116.7 Кб
ID:	11414  

__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: ax_mct (5).
Старый 24.05.2017, 18:41   #6  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...
А если приложение и в оффлайне не работает, то чем оно лучше уже имеющейся в коробке портальной веб-морды, для которой уже реализован механизм "достучаться до Аксапты"?
Я бы уточнил что имеется в виду под "оффлайн". Для меня это возможность автономной работы веб-приложения. Автономной от AX/ERP. Если такой асинхронности нет - то это инвалидное решение.

При этом данное веб-приложение может требовать наличие интернета, и не обязательно должно уметь работать без него сохраняя что-то на клиентском компьютере. Это уже излишне в большинстве случаев.

Но автономность через асинхронность - must be. И в таком свете и реализация будет отличаться от сросшихся близнецов.
Старый 24.05.2017, 19:31   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
вот состав библиотек в <head> в существующем клиенте аксапты и в cloudPOS
больше всего меня удивляет полифил для промисов...
Миниатюры
Нажмите на изображение для увеличения
Название: ax7-head.PNG
Просмотров: 403
Размер:	109.3 Кб
ID:	11415   Нажмите на изображение для увеличения
Название: pos-head.PNG
Просмотров: 376
Размер:	82.9 Кб
ID:	11416  

__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 24.05.2017 в 19:34.
Старый 24.05.2017, 20:17   #8  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
клиент - и кросс-платформенный, и кросс-браузерный.
правда оформлен в стиле виндовых modern apps.
Шутка удалась

Тоску понимаю и поддерживаю. Выход вижу но туда AX7 не пролезет, она сама стена. Хотя можно анализировать архитектуру AX7 и что-где-чем можно заменить.
Но связанными руками да в темной комнате с поттергейстом?.

Цитата:
Сообщение от mazzy Посмотреть сообщение
больше всего меня удивляет полифил для промисов...
Я думаю это из-за IE.

A Promise object represents an operation that is not completed yet, but is expected to complete in the future.

Internet Explorer 11 doesn’t implement native promises. For browsers that do not implement native promises, you must include a separate library to provide a polyfill. A polyfill is code that provides capabilities not provided natively by a browser. There are several polyfills or libraries which will allow Internet Explorer 11 to have promises: es6-promise, q.js, and bluebird.

https://msdn.microsoft.com/en-us/lib...romiseFunction
Старый 24.05.2017, 21:18   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Internet Explorer 11 doesn’t implement native promises.
именно это и удивляет.
под хромом, кстати, не работает из коробки. хотя обещали. может будет еще.

понятно, что промисы удобная штука...
но раз уж взялись использовать экспериментальные технологии, то взяли бы сразу async/await тайпскриптовский...

хотя само наличие экспериментального полифила в ФИНАНСОВОЙ программе... да еще в браузере...
понятно, что в браузере должно работать в режиме киоска... но, блииин...

слишком это сложно.
собственно поэтому не считаю ритейл образцом для подражания.
собственно отсюда и вопрос.
__________________
полезное на axForum, github, vk, coub.
Старый 24.05.2017, 21:47   #10  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
слишком это сложно.
...
собственно отсюда и вопрос.
Ответ в "ES6 Promise polyfill".

То что вы думали что мы обещали - так это мы о другом говорили.
A promises callback cannot return that same promise.

Оставьте это программирование обещающей расе.
You must pass an array to Promise race

Даже не знаем что вам еще обещать. Попробуйте что-то более современное.
Failed to construct Promise. Please use the new.

Код:
if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1)
{
    (function(t){function z(){for(var a=0;a<g.length;a++)g[a][0](g[a][1]);g=[];m=!1}function n(a,b){g.push([a,b]);m||(m=!0,A(z,0))}function B(a,b){function c(a){p(b,a)}function h(a){k(b,a)}try{a(c,h)}catch(d){h(d)}}function u(a){var b=a.owner,c=b.state_,b=b.data_,h=a[c];a=a.then;if("function"===typeof h){c=l;try{b=h(b)}catch(d){k(a,d)}}v(a,b)||(c===l&&p(a,b),c===q&&k(a,b))}function v(a,b){var c;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(b&&("function"===
typeof b||"object"===typeof b)){var h=b.then;if("function"===typeof h)return h.call(b,function(d){c||(c=!0,b!==d?p(a,d):w(a,d))},function(b){c||(c=!0,k(a,b))}),!0}}catch(d){return c||k(a,d),!0}return!1}function p(a,b){a!==b&&v(a,b)||w(a,b)}function w(a,b){a.state_===r&&(a.state_=x,a.data_=b,n(C,a))}function k(a,b){a.state_===r&&(a.state_=x,a.data_=b,n(D,a))}function y(a){var b=a.then_;a.then_=void 0;for(a=0;a<b.length;a++)u(b[a])}function C(a){a.state_=l;y(a)}function D(a){a.state_=q;y(a)}function e(a){if("function"!==
typeof a)throw new TypeError("Promise constructor takes a function argument");if(!1===this instanceof e)throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this.then_=[];B(a,this)}var f=t.Promise,s=f&&"resolve"in f&&"reject"in f&&"all"in f&&"race"in f&&function(){var a;new f(function(b){a=b});return"function"===typeof a}();"undefined"!==typeof exports&&exports?(exports.Promise=s?f:e,exports.Polyfill=e):"function"==
typeof define&&define.amd?define(function(){return s?f:e}):s||(t.Promise=e);var r="pending",x="sealed",l="fulfilled",q="rejected",E=function(){},A="undefined"!==typeof setImmediate?setImmediate:setTimeout,g=[],m;e.prototype={constructor:e,state_:r,then_:null,data_:void 0,then:function(a,b){var c={owner:this,then:new this.constructor(E),fulfilled:a,rejected:b};this.state_===l||this.state_===q?n(u,c):this.then_.push(c);return c.then},"catch":function(a){return this.then(null,a)}};e.all=function(a){if("[object Array]"!==
Object.prototype.toString.call(a))throw new TypeError("You must pass an array to Promise.all().");return new this(function(b,c){function h(a){e++;return function(c){d[a]=c;--e||b(d)}}for(var d=[],e=0,f=0,g;f<a.length;f++)(g=a[f])&&"function"===typeof g.then?g.then(h(f),c):d[f]=g;e||b(d)})};e.race=function(a){if("[object Array]"!==Object.prototype.toString.call(a))throw new TypeError("You must pass an array to Promise.race().");return new this(function(b,c){for(var e=0,d;e<a.length;e++)(d=a[e])&&"function"===
typeof d.then?d.then(b,c):b(d)})};e.resolve=function(a){return a&&"object"===typeof a&&a.constructor===this?a:new this(function(b){b(a)})};e.reject=function(a){return new this(function(b,c){c(a)})}})("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this);

}
https://community.dynamics.com/enter...r-and-promises
Старый 24.05.2017, 21:58   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
аксапта на react, cloudPOS на knockout... и никогда не быть им вместе...
поэт, уводящий в оффтопик. блин.


вернемся к теме?
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как достучаться из веб-приложения к акс2012, акс2009?

Предположим, есть традиционное веб-приложение на традиционном для веба LAMP

Как лучше с архитектурной точки зрения организовать доступ к Аксапте для взаимодействие с Аксаптой этого приложения? делать прокси к бизнес-коннектору? делать сервер OData? Создавать специализироованные веб-сервисы средствами самой Аксапты? Еще как-то?
Поделитесь опытом, размышлениями.

Есть ли уже готовые решения?
были высказывания:
Цитата:
Сообщение от Diman Посмотреть сообщение
Я бы сделал так:
AX as a set of services - Queue - facade [LAMP + front (reactJS)]
Можно отказаться от очереди в этой схеме если пользователь готов ждать\терять запрос\ответ и весь роутинг зашить в LAMP
Цитата:
Сообщение от egorych Посмотреть сообщение
А я бы сделал старый-добрый Web сервис, ну или REST, но независимый от Аксапты - который бы реализовывал нужный функционал.
Как он будет это делать - через коннектор, Odata или просто читать напрямую из базы - уже дело вкуса. Внешнее приложение просто дергало бы в нужный момент сервис и не парилось как там чего реализовано.
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Я не считаю работу в оффлайне обязательной, в некоторых сценариях без онлайна не обойтись. Но я считаю, что обмен данными стороннего приложения с Аксаптой должен быть по возможности асинхронным. Асинхронность уже дает некую автономность и предполагает хранение слепков данных отдельно от БД Аксапты, а дальше, если развивать тему, можно воспроизвести во внешнем приложении некую бизнес-логику, которая будет работать на доступных в оффлайне данных из Аксапты.
...
А если приложение и в оффлайне не работает, то чем оно лучше уже имеющейся в коробке портальной веб-морды, для которой уже реализован механизм "достучаться до Аксапты"?
еще?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 24.05.2017 в 22:04.
Старый 25.05.2017, 00:43   #12  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от mazzy Посмотреть сообщение
еще?
Сдаю...

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Варианты
- web service for AX using AIF. SOAPClient скажем в php.
- .NET DLL к которой мы обращаемся в X++ и которая делает все что душе угодно, тот же JSON.NET.
- обмен файлами
.
За это сообщение автора поблагодарили: mazzy (2).
Теги
ax2009, ax2012, lamp, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stoneridgesoftware: Working with the OData Endpoint in Dynamics 365 for Operations Blog bot DAX Blogs 0 12.01.2017 17:11
AIF: OData Query Service Blog bot DAX Blogs 0 24.08.2011 09:11
axforum blogs: Трудности перехода: опыт переноса модификаций с AX 3.0 SP5 EE на AX 2009 SP1 RU5 EE Blog bot DAX Blogs 0 19.07.2011 03:14
DAX2009 workflows - отдельный сервер для каждого приложения nebraska DAX: Администрирование 1 01.10.2010 09:37
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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