使 MDS 用户定义脚本中的成员无效

Invalidate Members in MDS User Defined Script

我正在研究在 SQL Server 2017 中实施主数据服务的概念验证。我已经用暂存表加载了一个实体并处理了批处理。我已经设置了业务规则来逐一验证成员,一切正常。

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

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

一个解决方案是:-

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

这是正在发生的事情:-

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

这种方法的挑战:-

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