Workflow Function Activity
Overview• 前面的工作流中使用了通知节点作为演示,  在实际的情况中, 更多使用到的是另外一种  节点: 函数节点. 函数节点用于执行指定的  plsql函数, 实现特定的业务功能. 将在之前创  建的工作流(wfdemo.wft)基础...
Create a function activity• 使用WFB打开wfdemo.wft文件, 在导航窗口的函数节点下面添加一个新  的节点, 该节点重要的属性有Function Name和Result Type:  Function Nam...
Workflow Procedure                   - API Standard• 创建函数节点时指定的过程由工作流引擎调用  (Wf_Engine_Util.Function_Call), 它必须遵循如下的格  式:  ...
Workflow Procedure        - Function Mode & Resultout• API标准中的funcmode参数代表节点的运行模式, 有以下几种情况:  RUN          运行, 节点在初次运行时模式为R...
Workflow Procedure              - wfdemo.find_approver• wfdemo.find_approver用于根据申请人(LEAVEREQUSTER)工作流属性, 找到该  申请人的上级主管, 并设...
Workflow Procedure             - wfdemo.find_approver    select c.user_name into v_manager        from fnd_user a, per_all...
Run        - Normal• 添加函数节点之后流程看起来如下, 如果找  到了审批人则向他发送通知, 如果没有则结  束流程:• 在WAP页面中启动该流程并将申请人设置为  OPERATIONS:
Run                  - Normal• 在状态监控页面查看该流程的运行情况, 如  下:可以看到函数节点运行完成, 并且已经发出FYA通知, 使用如下sql可查找通知的收件人:  select * from wf_item...
Run               - Error• 如果在启动流程时没有指定申请人工作流参  数(LEAVEREQUSTER), 那么函数节点在执行过  程中会因为select...into语句抛出no data found  异常, 进而导...
END
Upcoming SlideShare
Loading in...5
×

5, workflow function activity

275

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
275
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

5, workflow function activity

  1. 1. Workflow Function Activity
  2. 2. Overview• 前面的工作流中使用了通知节点作为演示, 在实际的情况中, 更多使用到的是另外一种 节点: 函数节点. 函数节点用于执行指定的 plsql函数, 实现特定的业务功能. 将在之前创 建的工作流(wfdemo.wft)基础之上演示函数 节点的使用, 包括如下内容: – 如何定义一个函数节点? – 工作流过程API规范 – 工作流过程运行模式
  3. 3. Create a function activity• 使用WFB打开wfdemo.wft文件, 在导航窗口的函数节点下面添加一个新 的节点, 该节点重要的属性有Function Name和Result Type: Function Name 指定为某个plsql存储过程, 格式为<Package>.<Procedure> Result Type 指定为某个Lookup Type名称, 这里选择 WFSTD工作流中的Boolean, 它有两个值 T和F分别表示true和false. Result Type 决定了函数节点之后的会有哪些分支 (T/F), 工作流过程在执行时会返回 Result Type中的某个值, 如果返回T则 流程沿着T分支往下走, F则走F分支.
  4. 4. Workflow Procedure - API Standard• 创建函数节点时指定的过程由工作流引擎调用 (Wf_Engine_Util.Function_Call), 它必须遵循如下的格 式: procedure <procedure name> ( itemtype in varchar2, itemkey in varchar2, actid in number, funcmode in varchar2, resultout out varchar2) is... 工作流引擎在执行过程时, 会传入当前的item type, item key, 活动id, 模式以及结果参数, 过程中需要对 funcmode进行判断从而决定具体执行哪些操作.• 参考附件中的wf_function_template.sql, 该脚本包含 了工作流过程的编写模板.
  5. 5. Workflow Procedure - Function Mode & Resultout• API标准中的funcmode参数代表节点的运行模式, 有以下几种情况: RUN 运行, 节点在初次运行时模式为RUN CANCEL 取消节点执行, wf_engine.abortprocess会传入此模式 RETRY 重新执行该节点, 在状态监控页面执行retry或者调用 wf_engine.handleerror过程时传入此模式 SKIP 跳过该节点,在状态监控页面执行skip或者调用 wf_engine.handleerror过程时传入此模式• API标准中的resultout参数用于返回节点的状态和执行结果, 格式为status:result, 比如COMPLETE:T表示节点状态为COMPLETE返回结果为T. 可能的结果有: COMPLETE:<result_code> WAITING DEFERRED:<date> NOTIFIED:<notification_id>:<assigned_user> ERROR:<error_code> 其中result_code会与函数节点指定的result type中的值进行比较, 从而决定流程 下一步的走向.
  6. 6. Workflow Procedure - wfdemo.find_approver• wfdemo.find_approver用于根据申请人(LEAVEREQUSTER)工作流属性, 找到该 申请人的上级主管, 并设置为审批人(LEAVEREQAPPROVER)工作流属性. 需要 建一个plsql包wfdemo还它下面的子过程find_approver, 代码如下(可以在附 件中找到): create or replace package body wfdemo as procedure find_approver(itemtype in varchar2, itemkey in varchar2, actid in number, funcmode in varchar2, resultout out varchar2) as v_manager VARCHAR2(30); v_employee VARCHAR2(30); begin IF funcmode in (RUN, RETRY) THEN v_employee := wf_engine.getItemAttrText(itemtype, itemkey, LEAVEREQUSTER) ;
  7. 7. Workflow Procedure - wfdemo.find_approver select c.user_name into v_manager from fnd_user a, per_all_assignments_f b, fnd_user c where a.user_name = v_employee and a.employee_id = b.person_id and b.effective_end_date > sysdate and b.supervisor_id = c.employee_id; END IF; IF v_manager is null THEN resultout := COMPLETE:F; ELSE wf_engine.SetItemAttrText(itemtype, itemkey, LEAVEREQAPPROVER, v_manager); resultout := COMPLETE:T; END IF;EXCEPTION WHEN OTHERS THEN resultout := ERROR: || sqlcode; WF_CORE.CONTEXT(wfdemo, find_approver, itemtype, itemkey, to_char(sqlcode)); raise;end wfdemo;
  8. 8. Run - Normal• 添加函数节点之后流程看起来如下, 如果找 到了审批人则向他发送通知, 如果没有则结 束流程:• 在WAP页面中启动该流程并将申请人设置为 OPERATIONS:
  9. 9. Run - Normal• 在状态监控页面查看该流程的运行情况, 如 下:可以看到函数节点运行完成, 并且已经发出FYA通知, 使用如下sql可查找通知的收件人: select * from wf_item_activity_statuses where item_type = LEAVEREQ and item_key = 6‘ 接下来的流程就于之前的一样了.
  10. 10. Run - Error• 如果在启动流程时没有指定申请人工作流参 数(LEAVEREQUSTER), 那么函数节点在执行过 程中会因为select...into语句抛出no data found 异常, 进而导致节点出错, 如下:
  11. 11. END

×