创建自定义工作流 (Master Data Services)

适用于:SQL Server - 仅限 Windows Azure SQL 托管实例

Master Data Services使用业务规则创建基本的工作流解决方案,例如自动更新和验证数据,并根据指定的条件发送电子邮件通知。 当您需要的处理比内置工作流操作提供的处理更复杂时,请使用自定义工作流。 自定义工作流是您创建的 .NET 程序集。 在调用您的工作流程序集时,您的代码可以执行您的情况所需要的任何操作。 例如,如果工作流需要复杂的事件处理(如多层审批或复杂的决策树),则可以配置Master Data Services来启动自定义工作流,以分析数据并确定将数据发送到审批位置。

如何处理自定义工作流

处理自定义工作流涉及三main组件:主数据管理器 Web 应用程序、SQL Server MDS 工作流集成服务和工作流处理程序程序集。 这些组件按如下所示处理自定义工作流:

  1. 使用 Master Data Manager 验证启动工作流的实体。

  2. 主数据管理器将满足业务规则条件的成员发送到 Master Data Services 数据库中的 Service Broker 队列。

  3. SQL Server MDS 工作流集成服务定期调用 Master Data Services 数据库中的存储过程。

  4. 当此存储过程发现 Service Broker 队列中的记录时,它将这些记录返回到 SQL Server MDS Workflow Integration Service。

  5. SQL Server MDS Workflow Integration Services 将数据路由到您的工作流处理程序程序集。

注意

注意:SQL Server MDS Workflow Integration Service 旨在触发简单的过程。 如果您的自定义代码需要复杂处理,请在单独的线程中或工作流进程之外完成您的处理。

为自定义工作流配置 Master Data Services

创建自定义工作流需要编写一些自定义代码并配置Master Data Services,以便将工作流数据传递给工作流处理程序。 请按照以下步骤启用自定义工作流处理:

  1. 创建实现 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender 的 .NET 程序集。

  2. 配置 SQL Server MDS 工作流集成服务以连接到 Master Data Services 数据库,并将标记与工作流处理程序相关联。

  3. 启动 SQL Server MDS Workflow Integration Service。

  4. 在 Master Data Manager 中创建业务规则,用于启动一个用工作流处理程序的名称标记的工作流。

  5. 将此业务规则应用到成员,以触发您的自定义工作流。

创建工作流处理程序程序集

自定义工作流是实现 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender 接口的 .NET 类库程序集。 SQL Server MDS 工作流集成服务调用 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* 方法来运行代码。 有关实现 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* 的示例代码,请参阅 (Master Data Services) 自定义工作流示例

按照以下步骤使用 Visual Studio 2010 创建 SQL Server MDS Workflow Integration Service 可以调用来处理自定义工作流的程序集:

  1. 在 Visual Studio 2010 中,创建使用所选语言的新“类库”项目。 若要创建 C# 类库,请选择“Visual C#\Windows”项目类型,并选择“类库”模板。 输入项目名称,如“MDSWorkflowTest”,然后单击“确定”

  2. 将引用添加到 Microsoft.MasterDataServices.WorkflowTypeExtender.dll。 可以在安装文件夹>\Master Data Services\WebApplication\bin 中找到<此程序集。

  3. 将“using Microsoft.MasterDataServices.Core.Workflow;”添加到 C# 代码文件。

  4. 继承自类声明中 的 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender 。 该类声明应类似于:“public class WorkflowTester : IWorkflowTypeExtender”。

  5. 实现 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender 接口。 SQL Server MDS 工作流集成服务调用 Microsoft.MasterDataServices.WorkflowTypeExtender.IWorkflowTypeExtender.StartWorkflow* 方法来启动工作流。

  6. 将程序集复制到安装文件夹>\Master Data Services\WebApplication\bin 中<名为 Microsoft.MasterDataServices.Workflow.exe SQL Server MDS 工作流集成服务可执行文件的位置。

配置 SQL Server MDS Workflow Integration Service

编辑Master Data Services配置文件,以包含Master Data Services数据库的连接信息,并按照以下步骤将标记与工作流处理程序程序集相关联:

  1. 在安装文件夹>\Master Data Services\WebApplication\bin 中找到<Microsoft.MasterDataServices.Workflow.exe.config。

  2. 将Master Data Services数据库连接信息添加到“ConnectionString”设置。 如果SQL Server安装使用区分大小写的排序规则,则必须在与数据库中相同的大小写中输入数据库的名称。 例如,完整设置标记可能类似以下形式:

    <setting name="ConnectionString" serializeAs="String">  
        <value>Server=myServer;Database=myDatabase;Integrated Security=True</value>  
    </setting>  
    
  3. 在“ConnectionString”设置下,添加“WorkflowTypeExtenders”设置以将标记名称与工作流处理程序程序集关联。 例如:

    <setting name="WorkflowTypeExtenders" serializeAs="String">  
        <value>TEST=MDSWorkflowTestLib.WorkflowTester, MDSWorkflowTestLib</value>  
    </setting>  
    

    值标记的内部文本<采用 Workflow tag>=<assembly-qualified 工作流类型名称>的形式<。> <工作流标记> 是在 Master Data Manager 中创建业务规则时用于标识工作流处理程序程序集的名称。 <程序集限定的工作流类型名称> 是工作流类的命名空间限定名称,后跟逗号,后跟程序集的显示名称。 如果您的程序集采用强名称,则还必须包括版本信息及其 PublicKeyToken。 如果为不同类型的工作流创建了多个工作流处理程序,则可以包含 <多个设置> 标记。

注意

根据服务器的配置,在尝试保存 Microsoft.MasterDataServices.Workflow.exe.config 文件时,可能会显示一条“拒绝访问”错误。 如果发生这种情况,则暂时禁用服务器上的用户帐户控制 (UAC)。 为此,打开“控制面板”,单击“系统与安全”。 在“操作中心”下,单击“更改用户帐户控制设置”。 在“用户帐户控制设置”对话框中,将滑动条移动到底部以不再接收通知。 重新启动您的计算机,然后重复前面的步骤以编辑您的配置文件。 保存该文件之后,将您的 UAC 设置重置为默认级别。

启动 SQL Server MDS Workflow Integration Service

默认情况下,不安装 SQL Server MDS Workflow Integration Service。 您必须先安装此服务,才能使用它。 为获得最大安全性,为该服务创建一个本地用户,并仅为该用户授予执行工作流操作所需的权限。 若要创建用户,请按照以下步骤安装此服务,然后启动该服务:

  1. 使用“本地用户和组”管理器创建名为(例如,mds_workflow_service)的本地用户。

  2. 使用 SQL Server Management Studio 向 mds_workflow_service 用户授予执行 [mdm].[udpExternalActionsGet] 存储过程的权限。 为此,请为mds_workflow_service帐户创建新登录名,在Master Data Services数据库中创建新用户,将此用户映射到mds_workflow_service登录名,并授予用户对 [mdm][ 的 EXECUTE 权限。[udpExternalActionsGet] 存储过程。

  3. 向 mds_workflow_service 用户授予执行工作流处理程序程序集的权限。 为此,将 mds_workflow_service 用户添加到工作流处理程序程序集“属性”的“安全性”选项卡,然后向 mds_workflow_service 用户授予 READ 权限和 EXECUTE 权限

  4. 向 mds_workflow_service 用户授予执行 SQL Server MDS Workflow Integration Service 可执行文件的权限。 为此,请将mds_workflow_service用户添加到安装文件夹>\Master Data Services\WebApplication\bin 中<Microsoft.MasterDataServices.Workflow.exe属性的“安全”选项卡,并授予mds_workflow_service用户 READ 和 EXECUTE 权限。

  5. 通过使用 .NET 安装实用工具(名为 InstallUtil.exe)来安装 SQL Server MDS Workflow Integration Service。 InstallUtil.exe 位于 .NET 安装文件夹中,如 C:\Windows\Microsoft.NET\Framework\v4.0.30319\。 通过在提升的命令提示符中输入以下命令安装 SQL Server MDS Workflow Integration Service:

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil Microsoft.MasterDataServices.Workflow.exe  
    

    在安装过程中出现提示时,指定 mds_workflow_service 用户。

  6. 通过使用“服务”管理单元来启动 SQL Server MDS Workflow Integration Service。 为此,请在“服务”管理单元中找到SQL Server MDS 工作流集成服务,将其选中,然后单击“启动”链接。

创建工作流业务规则

使用 Master Data Manager 创建和发布业务规则,该规则将在应用时启动工作流。 应确保业务规则包含更改属性值的操作,以便该规则应用一次后,其计算结果为 False。 例如,当 Price 属性值大于 500 且 Approved 属性值为空时,您的业务规则可能计算为 True。 该规则可能包含两个操作:一个操作是将 Approved 属性值设置为“挂起”,另一个操作是启动工作流。 或者,建议创建一个使用“已更改”条件的规则,并将属性添加到更改跟踪组。 有关业务规则的详细信息,请参阅业务规则 (Master Data Services)

按照以下步骤在 Master Data Manager 中创建可启动自定义工作流的业务规则:

  1. 在 Master Data Manager 的业务规则编辑器中,指定业务规则的条件后,将 “启动工作流” 操作从 “外部操作 ”列表拖动到 THEN 窗格的 “操作” 标签。

  2. 在“编辑操作”窗格中的“工作流类型”框中,键入标识工作流处理程序程序集的标记。 这是您在您的程序集的配置文件中指定的标记,例如 TEST。

  3. 或者,选中“包含成员数据”复选框。 选中此复选框可以在 XML 中包括传递到工作流处理程序的的属性名称和值。

  4. 在“工作流站点”框中,键入网站名称。 对于您的自定义工作流,此方法不适用,但可用于添加的内容。

  5. 在“工作流名称”框中,键入来自 Visual Studio 的工作流名称。 对于您的自定义工作流,此方法不适用,但可用于添加的内容。

  6. 保存并发布业务规则。

应用业务规则以启动工作流

将此业务规则应用于您的数据,以启动工作流。 为此,请使用 Master Data Manager 编辑包含要验证的成员的实体。 单击“应用业务规则”。 为了响应业务规则,Master Data Manager 填充Master Data Services数据库的 Service Broker 队列。 当 SQL Server MDS Workflow Integration Service 检查该队列时,它将数据发送到指定的工作流处理程序程序集并清除该队列。 工作流处理程序程序集执行已编码到队列中的任何操作。

排除自定义工作流故障

如果工作流处理程序程序集不接收数据,则可以尝试调试 SQL Server MDS Workflow Integration Service 或查看 Service Broker 队列。

调试 SQL Server MDS Workflow Integration Service

若要调试 SQL Server Workflow Integration Service,请执行以下步骤:

  1. 使用“服务”管理单元以停止服务。

  2. 打开命令提示符,导航到此服务的位置,通过输入 Microsoft.MasterDataServices.Workflow.exe -console 在控制台中运行此服务。

  3. 在 Master Data Manager 中,更新成员并再次应用业务规则。 控制台窗口中将显示详细日志。

查看 Service Broker 队列

包含作为工作流一部分传递的主数据的 Service Broker 队列为:mdm.microsoft/mdm/queue/externalaction。 可以在 SQL Management Studio 的对象资源管理器Master Data Services数据库的 Service Broker 节点下找到队列。 请注意,如果此服务已正确清除队列,则此队列将为空。

另请参阅

自定义工作流示例 (Master Data Services)
自定义工作流 XML 说明 (Master Data Services)