例如:使用流程管理器设置要使用的工作流
在“流程管理器”表单中设置工作流任务的人员添加一个“任务类型”设为“开始工作流”的任务,指定此任务相关的信息,然后在“事件名称”字段中选择工作流事件。“事件名称”字段列出 SyteLine 中可用的所有非框架与非核心事件。用户必须创建将在此处列出的工作流事件。
当被指定此工作流任务的人员在“流程管理器”中打开此任务时,此事件的名称显示在“事件名称”字段中。此人单击“”按钮开始此工作流。
初始化数据库中提供 HR_NewHireAnnouncement 事件及其事件处理程序,以及一些事件操作和一个示例存储过程,就像在“流程管理器”中修改并测试的示例工作流一样。此示例工作流向所有员工提供新员工姓名和职位详情的通知。如果要在系统中测试,必须按照此处所述编辑此示例。此示例显示如何通过形成表单脚本传递此事件的参数。此通用存储的程序触发任何给定的定制事件。
事件定义
此示例 HR_NewHireAnnouncement 事件有一个处理程序和三个事件操作:
- Action Type "Set Attributes" SET(EVENTTITLE=E(EventTitle)):此事件操作将处理任务 RowPointer 写入此事件进行对照参考。
- 操作类型“通知”具有这些参数:
- 至:事件全局常量 "HRNewHireAnnouncementRecipients"
注意:必须为此事件全局常量定义一系列关联的用户。
- 主题:可转换字符串 "Welcoming new Employee <empname>"
- 正文:可转换字符串 "I am very pleased to announce that <empname> will be joining us as <empposition> from today."
此事件操作通知与新员工相关的事件全局常量关联的用户。EmpName 和 EmpPosition 是此事件的输入参数。此信息来自此工作流发起的流程。
- 至:事件全局常量 "HRNewHireAnnouncementRecipients"
- 操作类型:“完成”
如果您要编写自己的事件,则必须使用每一个和第三个事件操作,根据您的要求在中间编写自己的事件操作。
示例 HR_NewHireAnnouncement 事件以不丢状态交付。必须在“工作流事件处理程序激活”表单上启动它才能使用。在“通知用户”字段中,指定应接收新员工公告通知的适当用户。
表单脚本:
- 对于必须由流程管理器支持的所有定制事件,必须识别所有输入参数。(HR_NewHireAnnouncement 事件示例需要两个输入参数:EmpName 和 EmpPosition)。
- 如果事件使用输入参数,确定这些输入参数是否从表单页组件、属性或变量读取。如果不是,在表单上读取这些值。指定这些输入参数。(在此示例中,可从表单组件同时读取两个输入参数的数据。)
如此示例所示,指定输入参数:
If ThisForm.Components("MyTasksFormPageEventNameEdit").Text = "HR_NewHireAnnouncement" Then ThisForm.Variables("ParmName1").Value = "EmpName" ThisForm.Variables("ParmValue1").Value = ThisForm.Components("MyTasksFormPageEmpName1Edit").Text ThisForm.Variables("ParmName2").Value = "EmpPosition" ThisForm.Variables("ParmValue2").Value = ThisForm.Components("MyTasksFormPageJobTitleEdit").Text End If
注意: 如果从流程管理器执行附加定制人力资源事件,在“流程管理器”表单脚本中添加自己的代码块,为您的定制事件指定输入参数。我们提供此示例代码作为您可以使用的构建框架。 - 运行事件名称在表单可用的存储过程,以及存储过程支持的所有名称/值对。
存储过程
我们会提供具有以下参数的通用存储过程GenericNotifyEventGlobalCsSp:
- @EventName
- @ProcessTaskRowPointer
- @EventStateRowPointer OUTPUT
- @Infobar OUTPUT
- @ParmName1
- @ParmValue1
- @ParmName2
- @ParmValue2
- €¦参数名称和值 3 至 19 ...
- @ParmName20
- @ParmValue20
此存储过程执行以下步骤:
- 初始化 @SessionId、@EventTrxId、@EventParmId
- 将 @ProcessTaskRowPointer 作为输入参数传递到事件,这存储在“事件标题”中
- 通过传递 @EventName、@SessionId、@EventTrxId 和 @EventParmId 执行 FireEventSp
- 等待延迟 '00:00:05'
- 阅读事件状态 RowPointer,返回此表单。
注意: 取决于“处理缺省值”表单上的“保留成功事件状态”的设置,如果此事件执行成功,可能不会创建 EvenState 记录。在此情况下,EventStateRowPointer 为 NULL,这不是问题,因为您只想捕捉所有失败的事件。
根据指定更新此示例代码时,且在“”表单中单击“启动事件”按钮,创建的事件状态记录的 RowPointer 存储在 process_mgr_process_task.EventStateRowPointer 中。成功消息显示为“事件已启动。”