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

时间:2018-03-13 14:11:53

标签: sql-server sql-server-2017 master-data-services

我正在研究在SQL Server 2017中实现主数据服务的概念验证。我已经加载了一个带有登台表的实体并处理了批处理。我已经设置了业务规则来逐一验证成员,并且所有工作都很好。

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

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

1 个答案:

答案 0 :(得分:1)

一种解决方案是: -

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

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

    采用这种方法的挑战: -

    • 显而易见的是,您必须运行其他Staging Batches或进行多个WCF API调用。
    • 如果您的用户更正了导致其失败的数据,那么与在那里评估的常规业务规则不同然后验证状态得到更新..您将无法执行此操作,直到您的自定义SP再次运行以评估&更改ForceFail的值。