-1

我正在开发概念验证以在 SQL Server 2017 中实现主数据服务。我已经加载了一个带有临时表的实体并处理了批处理。我已经设置了业务规则来逐一验证成员,并且一切正常。

现在我正在尝试创建一个用户定义的脚本(存储过程)作为自定义操作,该操作将具有更复杂的逻辑并相应地使记录无效。由于逻辑更加复杂,我需要在操作(存储过程,基于集合)而不是条件(函数,迭代)中完成此操作。

如何在自定义操作中以编程方式使记录无效?

4

1 回答 1

1

一种解决方案是:-

  1. 向该实体添加一个属性/列。我们称之为“ForceFail”。
  2. 将此列设为对所有用户只读(安全部分)。
  3. 或者,如果您甚至不希望用户在 Web UI 或 Excel 加载项中看到此内容,请将显示宽度设置为 0。
  4. 让您的自定义 SP 评估复杂条件并在失败的任何地方将 ForceFail 列更新为“y”(假设)。这可以通过以下方式实现:-
    • 将记录保存到 Staging Leaf 表并仅提供 Code 列和 ForceFail 列的值,然后运行 ​​Staging 过程以更新数据。或者,
    • 如果您通过 Web API 执行此操作,则直接更新 ForceFail 列的值。
  5. 然后,为此实体创建一个业务规则
    • (条件 > 等于 > 选择属性:="ForceFail" > 属性值:="y")
    • (操作 > 无效 > 选择您认为应突出显示为无效的任何属性)
  6. 最后,使用 SP 或 WCF API 验证实体。

这是正在发生的事情:-

  • 您执行评估复杂规则的批量操作,确定应该失败的行的代码值。将他们的 ForceFail 列更新为“y”(或您选择的任何其他值)
  • 业务规则评估此 ForceFail 值,无论在何处找到,都将该行标记为无效。
  • 然后,您在此实体上处理业务规则,以便此评估生效。

这种方法的挑战:-

  • 显而易见的是,您必须运行额外的暂存批处理或进行多个 WCF API 调用。
  • 如果您的用户更正了导致其失败的数据,那么与在那里评估的常规业务规则不同,然后验证状态得到更新..您将无法执行此操作,直到您的自定义 SP 再次运行以评估并更改 ForceFail 的值。
于 2018-03-16T21:21:09.427 回答