内容


使用 Virtual Member Manager 和 LDAP 构建人工任务

将 Virtual Member Manager 用作人员目录提供者来在人工任务中配置人员解析

Comments

简介

本文介绍如何将 Virtual Member Manager 作为人员目录提供者来在人工任务中配置人员解析。您将使用 WebSphere® Integration Developer V7.0.0.2(以下简称 Integration Developer)开发人工任务,并将它们部署到 WebSphere Process Server V7.0.0.2(以下简称 Process Server)。Virtual Member Manager 将用于配置一个充当存储库的后端 IBM Tivoli Directory LDAP 服务器,其中包含授权执行建模任务的用户或用户组。本文将向您展示如何:

  • 创建一个任务,其中组被用作人员解析的人员分配标准。该组将在 IBM Tivoli LDAP Directory Server V6.0 中配置。
  • 创建一个任务,其中含有 XPath 表达式的动态人员解析被用于给授权用户分配任务。
  • 添加一个用户定义的新人员分配标准来使用 Virtual Member Manager 执行人员解析。

WebSphere Process Server V7.0 的 Business Process Choreographer (BPC) 样例页 有使用 Process Server 建模人工任务的操作指南。见 Business Process Management 样例和教程 的 “Human Task 特性” 小节。

本文将使用在 样例页 中介绍的概念进行开发,并提供更多关于使用 Virtual Member Manager 和 LDAP 配置人工任务的功能。

本文样例中开发的所有组件都包含在 压缩文件 中,见本文的下载部分。压缩文件包含以下 3 个模块,其中含有您将要开发的业务流程:

  • .ldif 文件
  • VMM-People-Assignment-Criteria.xml
  • VMMTransformation.xsl

Virtual Member Manager

Virtual Member Manager 是在 WebSphere Process Server V6.1 中首次引入的,将多个用户存储库配置成一个虚拟存储库。使用 Virtual Member Manager (VMM),就有可能将许多彼此独立的存储库(比如,LDAP、基于存储库的 WebSphere Application Server 文件)或多个 LDAP 存储库中的数据合并到一个库中。关于 VMM 的背景知识,参见 使用一个联合存储库在 WebSphere Application Server V6.1 中扩展您的用户注册选项

本文中,您将配置 VMM 来使用一个 LDAP 存储库,该库包含一个用户组和多个属于该组的用户。您将使用 Process Server 中的 VMM 配置 LDAP 存储库。LDAP 存储库包含在 Tivoli Directory Server V6.0 中。

开发环境是 WebSphere Integration Developer V7.0.0.2。WebSphere Integration Developer V7.0.0.2 中包含 Unit Test Environment Server (WebSphere Process Server V7.0.0.2),对模块进行部署和测试。该环境可独立用于开发和测试。开发的所有模块含有一个业务进程和一个人工任务,阐释之前 “简介” 部分列出的各个功能。

将用户数据加载到 Tivoli Directory Server

您必须将一个扩展名为 .ldif 的文件(其中含有用户数据)加载到 LDAP 服务器,如清单 1 所示。

清单 1. Data.ldif
dn: ou=pe,o=ibm,c=us
objectclass: organizationalUnit
objectclass: top
ou: pe

dn: cn=ordermgr,ou=pe,o=ibm,c=us
mail: ordermgr@us.ibm.com
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: ePerson
sn: amgr
cn: ordermgr
uid: ordermgr
departmentnumber: 777
userpassword: ordermgr

dn: cn=order1,ou=pe,o=ibm,c=us
mail: order1@us.ibm.com
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: ePerson
sn: auser1
cn: order1
manager: cn=ordermgr,ou=pe,o=ibm,c=us
uid: order1
userpassword: order1

dn: cn=order2,ou=pe,o=ibm,c=us
mail: order2@us.ibm.com
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: ePerson
sn: auser2
cn: order2
manager: cn=ordermgr,ou=pe,o=ibm,c=us
userpassword: order2
uid: order2


dn: cn=order3,ou=pe,o=ibm,c=us
mail: order3@us.ibm.com
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: ePerson
sn: auser3
cn: order3
manager: cn=ordermgr,ou=pe,o=ibm,c=us
userpassword: order3
uid: order3

dn: cn=OrderProcessors,ou=pe,o=ibm,c=us
cn: OrderProcessors
objectclass: groupOfNames
objectclass: top
member: cn=order1,ou=pe,o=ibm,c=us
member: cn=order2,ou=pe,o=ibm,c=us
member: cn=order3,ou=pe,o=ibm,c=us

在上述文件中,定义了 3 个用户 order1、order2 和 order3,都属于 OrderProcessors 组。这 3 个用户有一个管理人员 ordermgr。与所有 ldif 类型的文件一样,此文件包含几个用来在 LDAP 中限定用户和组的对象类类型。

  1. 将上述数据导入 LDAP 目录服务器,通过从本地 LDAP_ROOT\sbin 运行命令 idsxcfg.exe 完成,LDAP_ROOT\sbin 触发了 LDAP 服务器配置工具。
  2. 一旦配置工具打开,单击 LDIF 任务下的左窗格,然后选择 Import LDIF data,如图 1 所示。
  3. 浏览到文件的位置,并单击 OK
    图 1. 将 LDIF 文件导入到服务器
    将 LDIF 文件导入到服务器
  4. 图 2 显示了从 ldif 文件添加到 LDAP 服务器的条目。注意如果条目名称已存在,LDAP 服务器将会报告。属于一个域的用户必须是惟一的。
    图 2. 将 ldif 文件加载到 LDAP 服务器
    将 ldif 文件加载到 LDAP 服务器
    将 ldif 文件加载到 LDAP 服务器

在 WebSphere Process Server 中配置一个联合存储库

正如 BPC 样例 所记录的,这里有许多人员分配标准可用来建模一个人工任务。人员分配标准的目的是授予用户访问权限来执行基于用户权限的任务,同时处理底层存储库。BPC 样例页显示如何使用基于文件的的注册表(即 WebSphere Application Server 附带的默认存储库)将人员分配标准添加到一个任务。尽管基于人员分配标准来分配任务的基本原理是一样的,但还需要几步来配置 VMM,以支持对包含用户的存储库执行查询。

第一步,配置 WebSphere Application Server 连接的 LDAP 服务器,以便您可以保证全局安全性。接下来,配置存储库,以便通过指定可以在 LDAP 中进行用户搜索的树的根部从 LDAP 服务器中检索用户和组。对象被存储在树结构中的 LDAP 服务器上,这样树的根部就为不同插件和应用程序的搜索指定了一个起点。

  1. 启动 WebSphere Process Server。从 Integration Developer 的 Server 窗格中,右键单击服务器并选择 Administration > Run Administrative Console
  2. 登录 Administrative Console 并导航到 Global Security,然后选择联合存储库下拉菜单旁边的 Configure 选项,如图 3 所示。
    图 3. 配置存储库
    配置存储库
    配置存储库
  3. 在这里,单击 Manage Repositories
  4. 选择 Add 按钮(图 4),出现一个类似图 5 的界面。
    图 4. 管理存储库
    管理存储库
    管理存储库
    图 5. 为 LDAP 服务器添加属性
    为 LDAP 服务器添加属性
    为 LDAP 服务器添加属性
  5. 添加存储库名称、LDAP Server 服务器的主机名和端口号(默认是 389)。添加 LDAP 服务器的绑定可分辨名称和密码,然后选择 OK。如果有已经配置好的存储库,也可以指定一个故障转移服务器。
  6. 选择 OK 之后,WebSphere Application Server 试图连接到 LDAP 服务器,如果出现错误,它将会报告。如果您没有看到任何错误,那么到 LDAP 服务器的连接可能已经配置好了。
  7. 指定存储库细节之后,您需要输入一个库条目来指向 LDAP 目录下的一个搜索库。这些库条目成为联合存储库领域(realm)的一部分。
  8. 导航到 Global Security > Federated Repositories,然后选择 Add Base entry to Realm。对于刚刚添加的存储库,输入子树的路径,这将在 LDAP 服务器中对用户条目进行搜索。对于在上面导入到 LDAP 服务器 的 ldif 文件的示例,您需要输入以下值,[o=ibm,c=us],作为领域中的子条目名,如图 6 所示。

    指定的搜索库是 o=ibm,c=us。在本文中,我们只为已配置的 LDAP 服务器指定一个子树。如果您想要配置其他子树,可以添加含有适当子树根的其他库条目。

    图 6. 为已配置的存储库添加库条目
    为已配置的存储库添加库条目
    为已配置的存储库添加库条目
  9. 现在重启 Process Server 使上述更改生效。重启服务器后,再次登录到管理控制台,并导航到用户和组视图,其中显示从 LDAP 服务器检索到的所有用户和组,还有一些您可能已经定义了的其他存储库。从 Admin Console 左边的窗格导航到用户和组,然后选择 Manage Groups,如图 7 所示。
  10. 选择 Search 按钮,然后您将看到检索的所有组。
    图 7. 在 Admin Console 中搜索组
    在 Admin Console 中搜索组
    在 Admin Console 中搜索组

    LDAP 用户的可分辨名称是由 LDAP Server 中用户实际的 DN 和为联合存储库定义的库条目(o=SampleLDAP)构成的。实际 LDAP(o=ibm,c=us)的子树根在用户名中没有显示出来。反而,被映射在联合存储库中的库条目显示出来。用户的惟一 ID 是用户 ID 加库条目。

    如果您查看图 7 中的管理控制台,库条目 o=ibm,c=us 被映射到 o=SampleLDAP。以下是 ldif 文件的词条,定义相同而没有映射:

    dn: cn=OrderProcessors,ou=pe,o=ibm,c=us
    cn: OrderProcessors
    objectclass: groupOfNames
    objectclass: top
    member: cn=order1,ou=pe,o=ibm,c=us
    member: cn=order2,ou=pe,o=ibm,c=us
    member: cn=order3,ou=pe,o=ibm,c=us
  11. 类似地,通过选择 Manage Users 选项并再次选择 Search,您可以搜索在 LDAP 服务器中配置的用户。图 8 显示了有惟一名称的 OrderProcessors 组成员。
    图 8. 在 Admin Console 搜索用户
    在 Admin Console 搜索用户
    在 Admin Console 搜索用户

使用 Group Members 人员分配标准建模一个人工任务

在本小节,您将使用 Group Members 人员分配标准来为所有者分配在 Integration Developer 中建模的任务。从创建一个名为 HumanTaskGroup 的新模型开始。

  1. 创建以下内容:一个新业务对象 SimpleHTBO,含有一个字符串字段 Name(用于表示流程名);一个新接口 simpleInterface ,含有一个双向操作,一个 simpleHTBO 输入和一个字符串输出。
  2. 创建一个名为 HumanTaskwithGroupBPEL 的新 Long Running BusinessProcess,选择 simpleInterface 作为业务流程的接口。
  3. 以上步骤完成之后,从 Business Integration 视图选择最新创建的业务流程,并添加一个名为 GroupAssigmentTask 的人工任务,选择 simpleInterface 作为接口。
  4. 还是在 Business Process Designer 中,在人工任务后添加一个代码片段,用于将调试语句打印到控制台。
  5. 完成这些步骤后,您的业务流程看起来如图 9 所示。
    图 9. 建模业务流程
    建模业务流程
    建模业务流程
  6. 打开人工任务。在 Description 选项卡,您可以为人工任务添加一个显示名称。切换到 Details 选项卡,在此您可以看到基于 simpleInterface 的人工任务的输入和输出,simpleInterface 在创建任务时被选中。
    图 10. 人工任务输入和输出
    H人工任务输入和输出
    H人工任务输入和输出
  7. 在人工任务编辑器的上部单击 People Assignment 并选择 Potential Owners。在底部窗格中的 People Assignment 下拉菜单中,选择 Group 作为人员分配标准来进行人员解析,在 Group ID 中,指定仅让 OrderProcessors 组的成员来执行这一任务,其他用户不允许执行这一任务。
  8. 在 Group ID 中,在 Value 字段输入 Unique Name,在 Group OrderProcessors 的 Admin Console 中显示。例如,使用公用名和 LDAP 库条目指定完全限定的惟一名:realm。
    GroupID cn=OrderProcessors,ou=pe,o=SampleLDAP

    图 11 显示了 GroupID 人员分配标准。

    图 11. 人员分配标准
    人员分配标准
    人员分配标准
  9. 从顶部窗格单击任务,并选择 Details 选项卡。在该视图中,您可以设置人员目录提供者供 Process Server 使用。该选项支持选择 VMM、standAlone LDAP Server、用户注册表(WebSphere Application Server 附带的默认用户注册表),以及系统注册表。选择 Virtual Member Manager 作为人员目录提供者,如图 12 所示。
    图 12. 任务属性
    Task properties
    Task properties
  10. 在 Java™ 代码段,输入一个测试字符串进行故障查找,目的是跟踪流程执行。这个可用于显示业务流程的人工任务步骤已完成,如图 13 所示。
    图 13. 业务流程中的 Java 片段
    业务流程中的 Java 片段
    业务流程中的 Java 片段
  11. 通过在服务器上右键单击并选择 Add and Remove Projects,将模块部署到 Process Server,如图 14 所示。
    图 14. 从服务器添加和删除项目
    从服务器添加和删除项目
    从服务器添加和删除项目
  12. 当发布到 Process Server 的过程完成后,启动 Admin Console 并导航到 Applications > WebSphere Enterprise Applications,确保应用程序 HumanTaskGroupApp 处于启动状态,如图 15 所示。
    图 15. Admin Console 中的 HumanTaskGroupApp
    Admin Console 中的 HumanTaskGroupApp
    Admin Console 中的 HumanTaskGroupApp

测试 HumanTaskGroup 模块

下一步是确保您建模的任务运行良好。为此,以 Administrator 身份登录,从业务流程模板创建一个业务流程实例。任何用户都可以登录创建一个业务流程实例。接下来,以一个授权处理任务的用户身份登录,查看是否可供此用户使用。您可以使用另一个未经授权处理任务的用户身份登录,以确保不管是否应该在 To-Do 列表中显示任务,非授权访问都可以正常运行。

  1. 登录 Business Process Explorer。您可以从 Integration Developer 通过右键单击服务器来启动它,随后选择 Launch > Business Process Explorer
  2. 使用另一个用户身份登录 Business Process Choreographer,比如 admin,或另一个在您的 LDAP 或文件存储库中配置的用户。从左窗格导航到 Process Templates > Currently Valid。选择 HumanTaskwithGroupBPEL,然后选择 Start Instance,如图 16 所示。
    图 16. 有效流程模板
    有效流程模板
    有效流程模板
  3. 提供一个流程名称作为输入,输入一个字符串。选择 Submit(图 17)。
    图 17. 流程实例数据
    流程实例数据
    流程实例数据
  4. 现在作为 order1order2order3 登录,查看 To-Do 列表确保上述任务作为这些用户其中之一的一个待办事项显示,如图 18 所示。我们作为 order 1 登录。
    图 18. 用户 order1 的待办任务
    用户 order1 的待办任务
    用户 order1 的待办任务
  5. 您可以查看人工任务的详细情况,首先选中它,然后单击 Staff 选项卡。其中显示一些细节,比如任务的发起人以及处理它的人员。一旦任务由 owner1 声明,Owner 字段将显示名称 order1,如图 19 所示。您可以单击 Work On and Complete the Task
    图 19. 任务描述
    任务描述
    任务描述

上述模块显示如何使用组来建模人工任务,其中将 VMM 作为人员目录提供者。下一部分将展示如何建模一个人工任务,您将再次使用 VMM。然而,这次您将使用一个动态表达式来解析运行时的用户,通过使用一个业务对象变量和人员分配标准 GroupNameWithoutNamedUsers 完成。

使用动态表达式和人员分配标准 GroupMembersWithoutNamedUsers 建模一个人工任务。

  1. 创建一个新模块,命名为 HumanTaskArrayReplacementVariable
  2. 创建一个业务对象,命名为 SimpleHTBONames,它包含一个类型为 string 的 groupName 字段,还有一个类型为 string 数组的 Name 字段,如图 20 所示。Name 字段包含被排除在处理任务之外的一组用户。groupName 用于指定授权用户所在的组。
    图 20. SimpleHTBONames 业务对象
    SimpleHTBONames 业务对象
  3. 创建一个名为 simpleInterface 的新接口,它带有一个双向操作,指定业务对象 simpleHTBONames 作为输入,string 作为输出。创建一个名为 HumanTaskReplacementBPEL 的新 Long Running BusinessProcess,然后选择 simpleInterface 作为业务对象的接口。
  4. 上述步骤完成之后,从 Business Integration 视图选择新创建的业务对象,然后添加一个新人工任务。在向导中人工任务的默认名为 HumanTaskReplacementBPELTask1(您可以修改)。选择 simpleInterface 作为接口。
  5. 您可以像以前那样添加一个片段来将调试语句打印到控制台。您的业务流程看起来像 图 9 中的业务流程。
  6. 现在,要修改人工任务来动态使用在变量 SimpleHTBONames 中定义的字段 “groupName”,方式就是使用 XPath 表达式来定义执行该任务的人。xpath 表达式在运行时根据用户为传入的业务对象的 groupName 属性指定的值进行估值。这些值在 BPC Explorer 中由用户指定,在运行时填入 XPath 来确定分配了任务的用户列表。

    人员分配标准 GroupMembersWithoutNamedUsers 由两部分组成,一个组名称和一些已命名的用户(他们被排除在潜在所有者之外)。

  7. 打开刚刚创建的人工任务,选择人员分配标准 Group Members without Named Users。在 Group Name 字段中输入以下值:
    %htm:input.operationParameters\input/groupName%

    这个 XPath 指向紧接输入对象和字段名的人工任务上的操作,比如 SimpleHTBONames\groupName。

  8. 在 NamedUsers 字段中,输入图 21 所示的值:
    %htm:input.operationParameters\input/Name%

    这个 XPath 指向紧接输入对象和字段名的人工任务上的操作,比如 SimpleHTBONames\Name。

    图 21. Group Members without Named Users People Assignment Criteria
    Group Members without Named Users People Assignment Criteria
    Group Members without Named Users People Assignment Criteria
  9. 在本例中,XPath 指定组名是基于输入变量(业务对象 SimpleHTBONames)的,并且是从 groupName 字段访问的。类似地,NamedUsers 值检索自 “Name” 字段的同一个业务对象。这两个值,GroupName 和 NamedUsers,在运行时通过 BPC Explorer 指定。您也可添加多个要排除的用户;因此,业务对象 SimpleHTBONames 中的字段 Name 被指定为一个 “数组” 类型的字符串。如果要指定多个用户,字段类型必须是数组。如果只将其创建为字符串类型,且输入多个值,XPath 解析不返回任何用户。
  10. 在人工任务的 Details 部分,再次选择 VMM 作为人员目录提供者。

测试 HumanTaskArrayReplacementVariable

  1. 将模块部署到服务器,并确保模块处于运行状态。
  2. 启动 BPC Explorer 并登录。创建流程 HumanTaskReplacementBPEL 的一个实例。为流程输入一个名称。在组的 Name 字段中,输入完全限定的惟一组名。通过单击 Add 为每个要排除的用户输入要排除的用户名。如果要排除两个用户,添加了第一个用户之后通过选择 Add 输入它们。如图 22 所示。
  3. 在组名中,我们选择了 OrderProcessors(cn=OrderProcessors,ou=pe,o=SampleLDAP)组,对于要排除的用户,我们输入 order1order 2。根据 OrderProcessors 组中的用户数量,这意味着只有 order3 可以处理这一任务。
    图 22. 流程 HumanTaskReplacementBPEL 的输入
    流程 HumanTaskReplacementBPEL 的输入
    流程 HumanTaskReplacementBPEL 的输入
  4. 单击 Submit。因为 order3 是惟一有资格执行该任务的用户,登录时这一任务将自动显示在用户的任务清单中(如果这一检查也能在 Integration Developer 中启用)。
  5. 现在,以 order3 登录来检查该任务是否显示在任务清单中。
  6. 查看上述人工任务的 Task Input Message 选项卡,您将可以看到为要排除的组名和用户输入的值(图 23)。在 Staff 选项卡中显示该任务的发起人和所有者。
    图 23. 任务描述
    任务描述
    任务描述

上述模块显示了如何使用表达式和多个输入值添加人员解析到您的人工任务,使用一个含有数组输入的业务对象变量。

下一部分显示如何编辑 VMMTransformation.xsl 文件,来添加用户定义的新人员分配标准。它不会出现在人工任务编辑器中的预定义人员分配标准列表中。

修改 VMMTransformation.xsl 文件来添加一个新人员分配标准

本部分显示了如何通过人工任务编辑器添加一个不在可用人员分配标准列表中显示的新人员分配标准。除了在 VMM-People-Assignment-Criteria.xml 中指定一个新人员分配标准之外,您还需要编辑 xslt 文件来添加一个新模板,在用户定义的人员分配标准出现时调用。该模板由人员插件提供者执行,以确定处理这项任务的用户列表。

注意业务流程编排中的授权和人员解析,第 3 部分: 自定义人员解析的选项 一文是了解人员解析不同组件的极佳资料。这篇文章解释了您在该模块中更改的各个文件,以及不同人员分配标准的运行时解析是如何完成的。

  1. 导航到包含人员分配标准定义的文件。文件位于 shared_resources/plugins 目录下。如果您安装了 Integration Developer 和 Unit Test Environment,文件 com.ibm.wbit.tel.ui_7.0.200.version_number.jar 位于 DISK_DRIVE/ProgramFiles/IBM/SDPS0Shared/plugins 目录下。
  2. 在此目录下提取文件,并创建 VMM-People-Assignment-Criteria.xml 文件的一个副本,来添加一个新人员分配标准。
  3. 将以下人员分配标准定义元素添加到复制的文件中。这是您将要添加的新人员分配标准,比如 Manager and Employee by Employee User ID,给定一个员工用户 ID 就可以检索管理人员 ID 和员工 ID。
  4. 在文件末尾添加清单 2 中的部分。正如文本显示,这个人员分配标准只接受一个强制参数,比如 EmployeeUserID,并在指定这个人员分配标准时返回员工用户 ID 和管理人员用户 ID 作为任务的潜在所有者。
    清单 2. VMM-People-Assignment-Criteria.xml
    <vs:DefineVerb name=“ Manager and employee by employee user ID ">
    	<vs:Description> Assigns employee's manager  
    </vs:Description>
    	<vs:Mandatory>
    		<vs:Parameter>
    			<vs:Name>EmployeeUserID</vs:Name>
    			<vs:Type>xsd:string</vs:Type>
    		</vs:Parameter>
    	</vs:Mandatory>
    </vs:DefineVerb>
  5. 编辑上述文件之后,重启 Integration Developer。您需要添加这个文件到工作区,使用新添加的人员分配标准来支持人工任务开发。
  6. 创建一个新模块 HumanTaskModifiedVerb。创建一个业务对象,它有一个名为 “Name” 的字符串字段。创建一个接口,将业务对象作为输入,将字符串类型作为输出。
  7. 创建一个新业务对象,选择创建的接口。在选择同一接口的流程内创建一个新人工任务,然后可以在人工任务之后添加一个片段。该业务流程看起来像之前在模块 1 和模块 2 中创建的业务流程。(参见 使用 Group Members 人员分配标准建模一个人工任务 小节)。
  8. 将修改的人员分配标准文件添加到工作区,这样您就可以通过导航到 Select File > Import > General > File System 在人工任务分配标准中使用它。浏览到包含新人员分配标准定义的 VMM-People-Assignment-Criteria.xml 的位置。选择当前模块作为文件将要导出的位置。
  9. 导航到 Windows > Preferences > Business Integration > Human Task Editor > People Directory。选中 Virtual Member Manager,然后单击 EditBrowse 定位文件在模块内的位置,如图 24 所示。
    图 24. 将 VMM-People-Assignment-Criteria.xml 添加到工作区
    将 VMM-People-Assignment-Criteria.xml 添加到工作区
    将 VMM-People-Assignment-Criteria.xml 添加到工作区
  10. 打开创建的人工任务,并选择 VMM 作为人员目录提供者。在人工任务的人员分配标准中,选择新添加的人员分配标准 Manager and Employee by Employee user ID,如图 25 所示。

    这个人员分配标准分配人工任务给员工,以及在人员分配标准中输入用户 ID 的员工的管理人员。

    图 25. 有员工用户 ID 的管理人员和员工
    有员工用户 ID 的管理人员和员工
    有员工用户 ID 的管理人员和员工

    在这个人工任务中,order1 的管理人员(比如 ordermgr)和 order1 用户被分配给任务。也是在这个任务中,您可以让多个用户同时工作,也可以使用动态 XPath 表达式,而不是像之前的示例那样为任务使用一个固定用户。

  11. 现在您需要编辑 VMM People Directory Configuration XSL 来添加一个新映射模板,当在任务部署过程中遇到上述任务时,它将被调用。order1 的 EmployeeUserID 值被 XSLT 人员分配标准映射和人员插件提供者用来向 LDAP 服务器发出查询,以检索用户 order1 及其授权处理上述任务的的管理人员。
  12. 要编辑 XSLT 映射,导航到 WPS_INSTALL_ROOT/ProcessChoreographer/Staff 目录,并打开 VmmTransformation.xsl。该文件包含被调用的所有模板,具体取决于在人工任务中定义的人员分配标准。
  13. 编辑根调度程序模板,将人员分配标准的转换委派给指定模板,以添加以下映射,如清单 3 所示。
    清单 3. VmmTransformation.xsl
    <xsl:when test="$verb='Manager and employee by employee user ID''">
    	<xsl:call-template name="ManagerAndEmployeeByEmployeeUserID"/>
    </xsl:when>
  14. 添加人员分配标准映射模板,这个模板在运行时将与为人工任务指定的参数合并来创建一个针对 LDAP 服务器执行的查询,如清单 4 所示。
    清单 4. VmmTransformation.xsl (continued)
    <!-- Begin template ManagerAndEmployeeByEmployeeUserID -->
    <xsl:template name="ManagerAndEmployeeByEmployeeUserID">
    	<svmm: staffQueries>
    		<xsl:attribute name="threshold"/>
    			<xsl:value-of select="$Threshold"/>
    		</xsl:attribute>
    
    
    	<svmm: intermediateResult>
    		<xsl:attribute name="name"/>manager</xsl:attribute>
    	<svmm:search>
    		<xsl:attribute name="searchExpression">//entities[@xsi:type=
            '<xsl:value-of select="$VMMUserEntityType"/>' and 
            <xsl:value-of select="$VMMUserIdAttribute"/>=
            '<xsl:value-of select="staff:parameter[@id='EmployeeUserID']"/>']
            </xsl:attribute>
    	
    	<svmm:resultEntity>
    		<xsl:attribute name="type"> <xsl:value-of select=
            "$VMMUserEntityType"/>  </xsl:attribute>				 
    		<svmm:attribute> 
    			<xsl:attribute name="name"> <xsl:value-of select=
                "$VMMUserManagerAttribute"/> </xsl:attribute>
    
    		<xsl:attribute name="destination">intermediate
             </xsl:attribute>				
    		</svmm:attribute>				 	
    	</svmm:resultEntity>			
    
           </svmm:search>
    	</svmm:intermediateResult>
    
            <svmm:user>
    			<xsl:attribute name="id">%manager%</xsl:attribute>
    			<xsl:attribute name="idType"> <xsl:value-of select=
                 "$VMMUserIdType"/> </xsl:attribute>
    			<xsl:call-template name="ResultEntitySpecForUserData"/>
           </svmm:user>
    	      <svmm:userID>
    	      	<xsl:attribute name="name"><xsl:value-of select="
                 staff:parameter[@id='EmployeeUserID']"/></xsl:attribute>
    	      </svmm:userID>
    
    	</svmm:staffQueries>
    
    </xsl:template>
    	<!-- End template ManagerAndEmployeeByEmployeeUserID-->

以下步骤概述了在运行时执行上述模板时所完成的操作:

  1. 从 VMM(<svmm:search>)检索员工的记录,并访问属性 $VMMUserManagerAttribute。默认情况下,设置为 “manager” 来检索管理人员用户 ID。在一个名为 “manager” 的中间结果对象中存储此值。
  2. 检索管理人员的记录(<svmm:user>),并通过调用一个现有 XSL 模板(<xsl:call-template…>)返回管理人员的值。
  3. 添加员工的用户 ID 到结果(<svmm:userID>)。

在部署编辑的 VmmTransformation.xsl 文件到 Websphere Process Server 时,注意以下几点:

  1. 如果 Process Server 是在一个集群化环境中配置的,那么 VmmTransformation.xsl 文件需要在集群化环境中的每个节点上进行编辑,以纳入新模板映射的更改。进行了上述更改之后,重启 Process Server,将更改复制到服务器上。确保将 Vmmtransformation.xsl 文件复制到 WPS_INSTAL_ROOT 上的 ProcessChoreographer/Staff 目录,用于集群化环境中的所有服务器,也可用于一个独立服务器。
  2. 重启服务器,然后添加模块到 Process Server。通过以任何用户身份登录 BPC Explorer 重启一个 HumanTaskWithModifiedVerbBPEL 模板实例。输入一个流程名并单击 Submit。退出 BPC Explorer。
  3. 作为用户 order1 登录到 BPC Explorer,来查看是否将该任务显示为待处理任务。如果是,退出并以 ordermgr 登录来检查任务是否也可由 ordermgr 来处理。这些用户中只有一个可以声明和处理该任务。尝试以另一个用户身份登录来查看是否他们可以处理该任务。
  4. 单击任务并查看 Staff 选项卡。它显示了 order1 和 ordermgr 的潜在所有者列表,如图 26 所示。
    图 26. 任务的潜在所有者
    任务的潜在所有者
    任务的潜在所有者

结束语

本文介绍了如何通过使用不同的人员分配标准和 Virtual Member Manager 设计人工任务,进而使用人员解析。还展示了如何基于现有的基本人工任务特性使用 WebSphere Process Server 创建这一功能。您可以通过各种方法建模人工任务,具体取决于您的业务需求。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=628053
ArticleTitle=使用 Virtual Member Manager 和 LDAP 构建人工任务
publish-date=02212011