6, workflow miscellaneous

728 views

Published on

Miscellaneous, including:
process selector
activity statuses...
and more alike

  • Be the first to comment

  • Be the first to like this

6, workflow miscellaneous

  1. 1. Workflow Miscellaneous
  2. 2. Overview• 前面介绍了如何使用WFB定义一个简单的流程, 如何在EBS中使用该流程, 以及工作流的表/API 等. 除了这些基本的特性之外, 这里将介绍一些 其他的高级特性和细节: – Process Selector/Callback – 活动状态 – 活动超时(timeout), 延迟(deferred), 停滞(stuck) – Respond类型消息 – 通知重新分配(Reassign)/假期规则(Vacation Rule)/工 作列表(worklist)
  3. 3. Process Selector• 根据工作流的设计, 一个Item Type可以包含 多个Process, 那么在工作流引擎在启动一个 工作流时会如何选择启动哪一个流程呢? 有 如下两种方式: 1, wf_engine.CreateProcess 传入process参数 为非null值, 从而启动指定的流程; 2, wf_engine.CreateProcess 传入process参数 为null值, 则会调用Item Type的selector过程, 该过程会返回流程的名称.
  4. 4. Process Selector - WFB Setup• 如何为Item Type指定一个selector过程呢? 在 WFB中打开Item Type节点的属性, 在Selector 字段中指定selector过程, 遵循如下格式 <package>.<procedure>, 如下:
  5. 5. Process Selector - API Standard• selector过程必须遵循如下的API格式: procedure <procedure_name> ( itemtype in varchar2, itemkey in varchar2, actid in number, command in varchar2, resultout out varchar2) ... 参数说明: itemtype Item Type的内部名称 itemkey Item Key actid 过程被调用时的活动id, 当command参数为 RUN时此参数为null command 调用模式, 可以是RUN, TEST_CTX, SET_CTX, 后两者用于selector过程的回调功能; 调用 wf_engine.createprocess未指定process参数时传 入command参数为RUN resultout 对于RUN/TEST_CTX模式返回值, RUN模式返 回选择的流程名称
  6. 6. Process Selector - A toy demo• 定义wfdemo.selector过程如下, 始终返回default流程, 仅作为演示: procedure selector(itemtype in varchar2, itemkey in varchar2, actid in number, command in varchar2, resultout out varchar2) is begin if(command = RUN) then resultout := ‘DEFAULT; end if; end;• 另外定义一个dummy流程, 如图:• 上传该wft文件, 使用如下代码运行该工作流(WAP页面必须指定process) declare v_itemtype varchar2(30) := LEAVEREQ; v_itemkey varchar2(30) := 10; begin wf_engine.createprocess(v_itemtype, v_itemkey, null); wf_engine.SetItemAttrText(v_itemtype, v_itemkey, LEAVEREQUSTER, OPERATIONS); wf_engine.startProcess(v_itemtype, v_itemkey); commit; end;
  7. 7. Process Selector - More• Item Type的selector信息记录可以使用如下 sql进行查询: select name, wf_selector from wf_item_types where name = LEAVEREQ• selector过程除了在启动工作流使决定使用 哪一个流程外, 还可以被扩展为类似于回调 (callback)的功能, 在执行活动节点之前调用 selector过程传入command参数为TEST_CTX 或者SET_CTX验证或者设置上下文.
  8. 8. Activity Statuses• 工作流活动在执行的过程中有相应的状态标记, 分 为: Active 活动正在被执行, 顶层流程在流 程结束之前一直处于active状态 Complete 活动成功完成 Waiting 等待. 示例: AND活动 Notified 活动等待FYA通知的反馈, 或者等待 一个事件消息 Deferred 活动被延迟, 将由后台引擎执行 Error 活动执行过程中遇到错误 Suspend 活动被暂停
  9. 9. Notification Timeout - Setup• 可以为活动节点定义超时属性, 从而在活动超时的情况下 采取相应的动作, 通常超时属性应用在FYA的通知节点. 设 置如下:• 节点的超时属性可以设置如下: – No timeout 不设置超时 – Relative Time 指定超时时间 – Item Attribute 引用工作流属性• 当为一个节点设置了超时属性之后, 该节点可以选择在超时情况下执行什么动作, 比如结束流程/重新执行当前节点/执行另一个节活动等.
  10. 10. Activity Cost• 在对函数活动节点进行设置时, 可以设置一个 cost属性, 如下:• cost属性值是对该节点执 行时间的一个估计, 在WFB 中单位是秒(以1/100秒 存储wf_activities/cost字段). 在 工作流运行的过程中, 会对比活动的cost值 与wf_engine.threshold的值, 如果大于则停止该 流程的执行; 否则则执行该流程. wf_engine.threshold的值默认为50(1/100秒). 从 WFB到数据库的转换乘以100即可, 这里设置为 1在数据库存储的值是100, 该活动将会被延迟.
  11. 11. Activity Cost• 重新上传之后, 在WAP中启动该流程. 可以看到流 程在执行到”Find Approver”节点时状态变为了 Deferred, 当前函数节点没有被执行.• 可以使用如下两种方式驱动deferred节点的执行:1, 运行并发请求”Workflow background process”;2, 调用wf_engine.Background过程, 实际上方法1调用 了此过程.
  12. 12. Activity Cost - Workflow background process• 使用SA职责提交提交该并发请求, 请求完成 之后流程将会继续往下执行:
  13. 13. Activity Cost - WFSTD DEFER• 除了设置函数节点的cost属性之外还可以通 过WFSTD中的DEFER节点实现延迟, 只需要 在节点前面添加一个DEFER节点就可以做到 这一点, 如下:
  14. 14. Stuck Process• 当一个流程处在active状态但是无法继续执 行时, 该流程状态将会被标志为ERROR:#STUCK, 相应的错误流程将会被执行. 这样的情况可 能发生在: 1, 当前流程节点非END节点, 但是没有后续 节点; 2, 节点返回了值但是没有为该值定义下一 个节点;
  15. 15. Respond Message• 答复类型的消息属性用于FYA通知的审批人填写反馈信息; 在定义FYA通知的消息时, 添加一个Respond类型的消息属 性即可. 在status monitor页面点击participant responses
  16. 16. Notification Reassign - Sender• 默认情况下FYA通知由通知的接收人进行审批, 在通知的审批页面提供 了Reassign按钮, 用于将通知分配给其他人, 有两种模式: 1, Delegate 委托别人审批, 但是不改变通知的所有人(责任人不变); 2, Transfer 将通知转移给其他人, 通知的所有人发生变化; 示例:
  17. 17. Notification Reassign - Receiver• 重新分配通知之后, 通知接收人可以在工作 列表中看到该通知, 打开通知之后还可以查 看通知的历史:
  18. 18. Notification Reassign - Disable• 使用特殊消息属性#HIDE_REASSIGN可以控 制相应通知审批页Reassign按钮是否显示, 如果设置为Y则不显示, 示例:
  19. 19. Notification Reassign - Database• 对一个通知进行Reassign时, 会修改数据中相应的记 录. 按照deletge或者transfer: 1, delegate 2, transfer 作transfer时同时还会修改wf_item_activity_statuses 表中的assigned_user字段; 而delegate不会
  20. 20. Vacation Rules• 通过定义假期规则用户可以设定在离开的时间 内如何自动处理收到的通知, 假期规则可以作 用在: – 所有Item Types的通知 – 指定Item Type的通知 – 指定Item Type的指定通知假期规则从下往上进行检查, 如果发现匹配则执行相应的动作, 有以下类型: – 重新分配通知 – 回复或者关闭通知 – 将reassign的通知返回原接收者
  21. 21. Vacation Rules - Maintain• 可以在首页的worklist访问假期规则页面, 在 该页面可以对假期规则进行创建, 更新和删 除等操作, 如下:• 新建一个假期规则 1, 设置Item Type
  22. 22. Vacation Rules - Maintain2, 设置通知3, 设置执行的动作, 这里选择回复
  23. 23. Worklist Access• 在HOME页面的工作列表区域还可以设置允 许其他的用户访问当前用户的工作列表, 如 下:
  24. 24. Worklist Access• 这里将cbrown用户工作列表的权限分配给了 process_ops用户, 使用process_ops登录后在工作列 表区域会多出一个切换用户按钮, 切换用户之后可 以看到cbrown的工作列表并进行操作:

×