Использование атрибута readLocal источника данных JSDO для предотвращения ненужных вызовов XHR - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разработать веб-приложение Angular, которое будет использовать серверную часть данных OpenEdge ABL через API-интерфейс Progress Application Server для OpenEdge (PASOE).Объект данных JavaScript или JSDO ( github: progress / JSDO ) будут использоваться для управления / транспортировки данных, а объекты JSDO DataSource будут использоваться на стороне клиента для чтения данных в Kendo UI источники данных для отображения.Эти объекты DataSource также неявно вызывают многие из внутренних функций JSDO автоматически.По большей части все работает очень хорошо.

Вот основной процесс: запустите сеанс Progress, передав URI каталога, URI службы и метод аутентификации.Затем создайте экземпляр JSDO, передав имя нужного ресурса (многие конечные точки могут быть описаны в одном URI каталога; JSDO использует этот каталог, чтобы узнать, что / как взаимодействует с этой службой данных).Затем создайте объект JSDO DataSource для выполнения любой фильтрации на стороне сервера и считывания данных.Сеанс завершается с помощью Promise, тогда как метод read () источника данных JSDO возвращает Observable.Подписка на возвращаемое значение Observable приводит к асинхронному получению нужных данных.

Однако задача немного сложнее при доступе к многостоловому ресурсу.Самая распространенная причина использования многотабличного ресурса - это связи между главной и подробной таблицами.Например, Orders и OrderLines могут обслуживаться на одном ресурсе.Однако для этого потребуется экземпляр DataSource для каждой таблицы, на которую необходимо сослаться в ресурсе, поскольку каждый DataSource взаимодействует только с одной таблицей.Но, поскольку фактический запрос XHR к серверу со стороны JSDO всегда возвращает данные для обеих таблиц, было бы излишним делать еще один вызов RESTful API для данных, которые уже существуют на стороне клиента.Поэтому был добавлен атрибут readLocal (true / false, по умолчанию false), чтобы указать DataSource для чтения данных локально в этом контексте.

Вот проблема: объект JSDO DataSource по-прежнему выполняет второй XHR-запрос, даже когда я задаю readLocal: true при настройке подробного DataSource.Пока он возвращает правильные данные, кажется плохой практикой отправлять несколько запросов на данные, которые уже находятся в браузере клиента.

Стремясь изолировать проблему, я удалил пользовательский интерфейс Kendo, а также компоненты и сервисы Angular из своего кода.У меня есть весь код приложения, запущенный в app.component.ts, и я использую ведение журнала консоли, чтобы проверить, удаляются ли данные успешно.Оттуда будет легко интегрироваться с виджетом Kendo.Как я упоминал ранее, данные возвращаются нормально, но я наблюдаю второй XHR-запрос, поступающий в Службу данных путем мониторинга с помощью инструментов разработчика> вкладка «Сеть» (оба в Firefox / Chrome).

Есть кто-нибудьуспешно использовал readLocal?Мне не удалось найти какие-либо рабочие примеры, которые реализуют эту функцию.Я могу опубликовать свой код, если это необходимо.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...