在异步 Web API 调用之前保存并关闭退出的 Web 资源
Save & Close Exiting Web Resource before Asynchronous Web API Call
我正在构建一个相当复杂的 Web 资源,它使用 Dynamics Web API 到 read/write 数据到 Dynamics。我有一种情况需要创建一个实体,该实体需要来自我需要创建的其他两个实体的 ID。为此,我使用两个异步调用来创建两个实体,然后使用从这两个异步调用返回的数据来填充我创建的第三个实体中的数据记录。我遇到的问题是,当有人单击保存并关闭时,关闭发生在我的异步调用完成之前。发送第一个创建调用,然后在没有第二个或第三个创建发生的情况下发生关闭。我还担心在保存时,我的 Web API 调用很可能存在竞争条件,如果有人在“保存”后足够快地单击“关闭”,则可能无法保存所有数据。有什么方法可以解决异步调用的这个问题吗?
我探索过的一些可能的解决方案要么行不通,要么我不太喜欢
- 禁用保存并关闭(保存然后关闭时可能仍然存在竞争条件)
- 批处理(不确定这是否有效,但如果有效则更难)
- 使用超时暂停关闭(认为这行不通)
- 取消关闭并在保存完成后重新发出关闭(必须有更好的方法,对吧?)
基本上我不想让用户停止我的内部操作,那将是糟糕的用户体验。如果业务同意,您仍然可以使用自定义保存和关闭按钮或防止 OOB 保存和关闭的默认设置,打开自定义 HTML 显示进度条的 Web 资源,同时在弹出窗口中执行所有异步 WebAPI 调用,直到我们获得状态 200一切,然后关闭进度弹出窗口。
另一条路线是Classic Async Plugin 来实现它。甚至 Action 也可用。与 Organizationdata 服务不同,WebAPI 端点还可以在服务器端代码中为您提供帮助。
这里有两个似乎有效的解决方案。
- 删除“保存并关闭”按钮。
- 为保存并关闭添加自定义按钮。
我们最终使用了选项 1,但有时可能会返回尝试选项 2。我们还添加了一个弹出框,在保存完成时显示 success/fail 消息,以便用户使用在导航离开页面之前等待弹出框。
我正在构建一个相当复杂的 Web 资源,它使用 Dynamics Web API 到 read/write 数据到 Dynamics。我有一种情况需要创建一个实体,该实体需要来自我需要创建的其他两个实体的 ID。为此,我使用两个异步调用来创建两个实体,然后使用从这两个异步调用返回的数据来填充我创建的第三个实体中的数据记录。我遇到的问题是,当有人单击保存并关闭时,关闭发生在我的异步调用完成之前。发送第一个创建调用,然后在没有第二个或第三个创建发生的情况下发生关闭。我还担心在保存时,我的 Web API 调用很可能存在竞争条件,如果有人在“保存”后足够快地单击“关闭”,则可能无法保存所有数据。有什么方法可以解决异步调用的这个问题吗?
我探索过的一些可能的解决方案要么行不通,要么我不太喜欢
- 禁用保存并关闭(保存然后关闭时可能仍然存在竞争条件)
- 批处理(不确定这是否有效,但如果有效则更难)
- 使用超时暂停关闭(认为这行不通)
- 取消关闭并在保存完成后重新发出关闭(必须有更好的方法,对吧?)
基本上我不想让用户停止我的内部操作,那将是糟糕的用户体验。如果业务同意,您仍然可以使用自定义保存和关闭按钮或防止 OOB 保存和关闭的默认设置,打开自定义 HTML 显示进度条的 Web 资源,同时在弹出窗口中执行所有异步 WebAPI 调用,直到我们获得状态 200一切,然后关闭进度弹出窗口。
另一条路线是Classic Async Plugin 来实现它。甚至 Action 也可用。与 Organizationdata 服务不同,WebAPI 端点还可以在服务器端代码中为您提供帮助。
这里有两个似乎有效的解决方案。
- 删除“保存并关闭”按钮。
- 为保存并关闭添加自定义按钮。
我们最终使用了选项 1,但有时可能会返回尝试选项 2。我们还添加了一个弹出框,在保存完成时显示 success/fail 消息,以便用户使用在导航离开页面之前等待弹出框。