1

我正在构建一个相当复杂的 Web 资源,它使用 Dynamics Web API 将数据读/写到 Dynamics。我有一种情况,我需要创建一个实体,该实体需要我需要创建的其他两个实体的 ID。为此,我使用两个异步调用来创建两个实体,然后使用从两个异步调用返回的数据来填充我创建的第三个实体中的数据记录。我遇到的问题是,当有人单击保存并关闭时,关闭发生在我的异步调用完成之前。发送第一个创建调用,然后发生关闭,而不会发生第二个或第三个创建。我还担心在保存时,我的 Web API 调用很可能会出现竞争情况,如果有人在保存后足够快地单击关闭,则可能无法保存所有数据。

我探索过的一些可能的解决方案要么不起作用,要么我不太喜欢

  • 禁用保存并关闭(保存然后关闭时可能仍然存在竞争条件)
  • 批处理(不确定这是否可行,但如果可行,难度会更大)
  • 使用超时来暂停关闭(不要认为这会起作用)
  • 保存完成后取消关闭并重新发出关闭(必须有更好的方法,对吧?)
4

2 回答 2

0

基本上我不想让用户停止我的内部操作,这将是一个糟糕的用户体验。仍然如果业务同意,您可以使用自定义保存并关闭按钮或阻止默认的 OOB 保存并关闭,打开自定义 HTML 网络资源显示进度条,同时在弹出窗口中执行所有异步 WebAPI 调用,直到我们获得所有状态 200,然后关闭进度弹出窗口。

另一种途径是 Classic Async Plugin 来实现它。甚至可以使用 Action。与 Organizationdata 服务不同,WebAPI 端点也可以在服务器端代码中为您提供帮助。

于 2017-09-19T14:30:47.110 回答
-1

这里有两种似乎可行的解决方案。

  1. 删除保存并关闭按钮。
  2. 为保存并关闭添加自定义按钮。

我们最终使用了选项 1,但可能会在某个时候返回尝试选项 2。我们还添加了一个弹出框,用于在保存完成时显示成功/失败消息,让用户习惯于等待弹出框在导航离开页面之前。

于 2017-11-08T18:05:52.337 回答