Сохранение и закрытие выхода из веб-ресурса перед асинхронным вызовом веб-API

1

Я создаю довольно сложный веб-ресурс, который использует Dynamics Web API для чтения/записи данных в Dynamics. У меня есть ситуация, когда мне нужно создать объект, требующий идентификатор из двух других объектов, которые мне нужно создать. Для этого я использую два асинхронных вызова для создания двух объектов, а затем я использую данные, возвращенные из двух асинхронных вызовов, для заполнения записей данных в моем третьем сущности, который я создаю. Проблема, с которой я сталкиваюсь, заключается в том, что когда кто-то нажимает кнопку "Сохранить и закрывать", "Закрыть" происходит до завершения моих асинхронных вызовов. Первый вызов вызова отправляется, а затем "Закрыть" происходит без второго или третьего создания. Я также опасаюсь, что при сохранении у меня, скорее всего, будет состояние гонки с моими вызовами веб-API, если, если кто-то щелкнул Закрыть достаточно быстро после сохранения, все данные могут не быть сохранены. Есть ли способ обойти эту проблему с асинхронными вызовами?

Некоторые возможные решения, которые я изучил, либо не работают, либо мне не очень нравится

  • Отключить сохранение и закрытие (возможно, при выполнении Сохранить и затем закрыть)
  • Batch Processing (не уверен, что это будет даже работать, но это будет сложнее, если это произойдет)
  • Используйте таймауты для приостановки закрытия (не думайте, что это сработает)
  • Отменить Закрыть & переиздать Закрыть, когда сохранение завершено (должен быть лучший способ, не так ли?)
  • 0
    Вы можете сделать это в действии или плагин вместо JS?
  • 0
    [Создать запись A -> Создать запись B -> Создать запись C, ссылающуюся на A & B], это может быть (синхронный) рабочий процесс, если вам не требуются более сложные манипуляции с данными
Показать ещё 2 комментария
Теги:
asynchronous
dynamics-crm
microsoft-dynamics
microsoft-dynamics-webapi

2 ответа

-2
Лучший ответ

Здесь есть два решения, которые, похоже, работают.

  1. Удалите кнопку "Сохранить и закрыть".
  2. Добавьте пользовательскую кнопку для сохранения и закрытия.

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

0

В принципе, я не хочу останавливать пользователя для своих внутренних операций, что будет плохой пользовательский интерфейс. Тем не менее, если Business согласен, у вас может быть пользовательская кнопка "Сохранить и закрыть" или предотвратить по умолчанию сохранение и закрытие OOB, откройте собственный HTML файл webresource, отображающий индикатор выполнения, выполняя все вызовы Async WebAPI внутри всплывающего окна, пока мы не получим статус 200 для всего, затем закройте всплывающее окно прогресса.

Другой способ - это классический плагин Async для его достижения. Даже действие доступно. В отличие от службы Organizationdata, конечная точка WebAPI также может помочь вам в коде на стороне сервера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню