|
![]() |
#1 |
Участник
|
пример доступа к DB со стороны серверной части
https://metanit.com/web/nodejs/6.2.php |
|
![]() |
#2 |
Участник
|
Да, я видел исходный вопрос, но потом почему-то речь зашла про небольшие приложения типа мобильных - я и ответил про мобильные приложения. Впрочем, вернемся к исходной теме...Я не считаю работу в оффлайне обязательной, в некоторых сценариях без онлайна не обойтись. Но я считаю, что обмен данными стороннего приложения с Аксаптой должен быть по возможности асинхронным. Асинхронность уже дает некую автономность и предполагает хранение слепков данных отдельно от БД Аксапты, а дальше, если развивать тему, можно воспроизвести во внешнем приложении некую бизнес-логику, которая будет работать на доступных в оффлайне данных из Аксапты. Банальные Excel-файлы, которые генерятся движком экспорта-импорта данных в AX 2009, уже содержат енумы и возможность выбора значений в связанных ячейках, а не требуют вбивать метки енумов руками. От приложения я как пользователь ожидал бы чего-то большего, нежели выбор значений из справочников, на что способен даже Excel. Я ожидал бы учета истории того, что я вводил, применения некий правил, некой логики, которая облегчала бы мою работу и предупреждала ошибки, а не позволяла мне потратить кучу времени и сил на вбивание данных, чтобы в итоге оказаться в тупике и всё переделывать. Апофеозом такого подхода в моем понимании являются AX POS и Commerce Runtime, но в этой теме, полагаю, речь о чем-то попроще...
На Аксапту зачастую замыкают очень много сторонних приложений и сервисов, подчас критически важных для бизнеса. И чем проще будет делать интеграцию с Аксаптой, тем больше сторонних приложений и сервисов будут с ней связывать. При этом Аксапта в вынешнем виде - это большая монолитная система с большой базой, кучей серверов и необходимостью это все обслуживать. Иными словами, Аксапта бывает иногда недоступна, и чем больше база и/или количество серверов, тем дольше могут длиться периоды недоступности. Так вот, асинхронная интеграция сторонних приложений и сервисов позволяет легче проходить периоды недоступности Аксапты и заодно сглаживать пики нагрузки. Далее, вернемся к сторонним приложениям, с которыми работают конечные пользователи. Если приложение умеет держать автономные слепки справочников, но не помогает мне как пользователю с ними работать, не помогает избегать ошибок, то какой от него толк? Чем оно лучше, "умнее" файлов Excel, куда выгружены справочники и в ячейках настроен выбор из них? А если приложение и в оффлайне не работает, то чем оно лучше уже имеющейся в коробке портальной веб-морды, для которой уже реализован механизм "достучаться до Аксапты"? |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
![]() |
#3 |
Участник
|
Цитата:
В акс7 основной клиент в ритейле - браузерный cloudPOS - это набор html-страниц и javaScript'ов. не могу назвать ритейл ни апофеозом, ни примером для подражания. собственно вопрос то и родился в ходе работы в ритейлом в акс7. |
|
![]() |
#4 |
Banned
|
Цитата:
Только не говори что ты опять меня забанишь за оффтопик. Это по теме почему один набор 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 |
|
![]() |
#5 |
Участник
|
нормально вроде.
Цитата:
правда оформлен в стиле виндовых modern apps. но клиент очень тесно завязан на серверную часть магазина. которая сильно завязана на IIS, MS SQL, .net и прочие виндовые технологии. а не могу назвать примером для подражания, поскольку мне кажется, что на других библиотеках подобное пишется гораздо легче и обладает большим функционалом. да, понятно, что ритейлу надо поддерживать совместимость с предыдущей версией. но... просто мне кажется, что можно делать морды намного проще и намного функциональнее при помощи традиционных веб-технологий. если бы был набор библиотек/инструментов доступа к Аксапте. Типа библиотеки доступа к mySQL, postgreSQL, mongoDB. Даже с учетом того, что клиент самой аксапты 7 - это тоже браузерное веб-приложение. |
|
|
За это сообщение автора поблагодарили: ax_mct (5). |
![]() |
#6 |
Banned
|
Цитата:
При этом данное веб-приложение может требовать наличие интернета, и не обязательно должно уметь работать без него сохраняя что-то на клиентском компьютере. Это уже излишне в большинстве случаев. Но автономность через асинхронность - must be. И в таком свете и реализация будет отличаться от сросшихся близнецов. |
|
![]() |
#7 |
Участник
|
вот состав библиотек в <head> в существующем клиенте аксапты и в cloudPOS
больше всего меня удивляет полифил для промисов... Последний раз редактировалось mazzy; 24.05.2017 в 19:34. |
|
![]() |
#8 |
Banned
|
Цитата:
![]() Тоску понимаю и поддерживаю. Выход вижу но туда AX7 не пролезет, она сама стена. Хотя можно анализировать архитектуру AX7 и что-где-чем можно заменить. Но связанными руками да в темной комнате с поттергейстом?. Я думаю это из-за 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 |
|
![]() |
#9 |
Участник
|
именно это и удивляет.
под хромом, кстати, не работает из коробки. хотя обещали. может будет еще. понятно, что промисы удобная штука... но раз уж взялись использовать экспериментальные технологии, то взяли бы сразу async/await тайпскриптовский... хотя само наличие экспериментального полифила в ФИНАНСОВОЙ программе... да еще в браузере... понятно, что в браузере должно работать в режиме киоска... но, блииин... слишком это сложно. собственно поэтому не считаю ритейл образцом для подражания. собственно отсюда и вопрос. |
|
![]() |
#10 |
Banned
|
Ответ в "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); } |
|
![]() |
#11 |
Участник
|
аксапта на react, cloudPOS на knockout... и никогда не быть им вместе...
поэт, уводящий в оффтопик. блин. вернемся к теме? Цитата:
Сообщение от mazzy
![]() Как достучаться из веб-приложения к акс2012, акс2009?
Предположим, есть традиционное веб-приложение на традиционном для веба LAMP Как лучше с архитектурной точки зрения организовать Поделитесь опытом, размышлениями. Есть ли уже готовые решения? Цитата:
Цитата:
Сообщение от egorych
![]() А я бы сделал старый-добрый Web сервис, ну или REST, но независимый от Аксапты - который бы реализовывал нужный функционал.
Как он будет это делать - через коннектор, Odata или просто читать напрямую из базы - уже дело вкуса. Внешнее приложение просто дергало бы в нужный момент сервис и не парилось как там чего реализовано. Цитата:
Сообщение от gl00mie
![]() Я не считаю работу в оффлайне обязательной, в некоторых сценариях без онлайна не обойтись. Но я считаю, что обмен данными стороннего приложения с Аксаптой должен быть по возможности асинхронным. Асинхронность уже дает некую автономность и предполагает хранение слепков данных отдельно от БД Аксапты, а дальше, если развивать тему, можно воспроизвести во внешнем приложении некую бизнес-логику, которая будет работать на доступных в оффлайне данных из Аксапты.
... А если приложение и в оффлайне не работает, то чем оно лучше уже имеющейся в коробке портальной веб-морды, для которой уже реализован механизм "достучаться до Аксапты"? Последний раз редактировалось mazzy; 24.05.2017 в 22:04. |
|
![]() |
#12 |
Banned
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#13 |
Участник
|
по результатам этой и вот этой ветки предлагаю вернуться к теме
Как правильно вести разработку в условиях, когда часть кода закрыта от изменения - Sys-слой в аксапте, закрытые codeunit в навике, extensions в MS CRM |
|
Теги |
ax2009, ax2012, lamp, как правильно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|