28: /* make sure that process runs with background engine
29: to prevent SAVEPOINT/ROLLBACK error (see Workflow FAQ)
30: the value to use for this is -1 */
31:
32: l_run_wf_in_background CONSTANT WF_ENGINE.THRESHOLD%TYPE := -1;
33: l_wf_timeout NUMBER := TO_NUMBER(FND_PROFILE.VALUE ('GMD_WF_TIMEOUT'));
34:
35:
36: l_WorkflowProcess VARCHAR2(30) := 'GMDFMLAP_PROCESS';
37: l_count NUMBER;
38: BEGIN
39:
40: /* create the process */
41: WF_ENGINE.CREATEPROCESS (itemtype => l_itemtype, itemkey => l_itemkey, process => l_WorkflowProcess) ;
42:
43: /* make sure that process runs with background engine */
44: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
45:
40: /* create the process */
41: WF_ENGINE.CREATEPROCESS (itemtype => l_itemtype, itemkey => l_itemkey, process => l_WorkflowProcess) ;
42:
43: /* make sure that process runs with background engine */
44: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
45:
46: /* set the item attributes */
47: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
48: aname => 'GMDFMLAP_FORMULA_ID',
43: /* make sure that process runs with background engine */
44: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
45:
46: /* set the item attributes */
47: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
48: aname => 'GMDFMLAP_FORMULA_ID',
49: avalue => p_formula_id);
50:
51: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
47: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
48: aname => 'GMDFMLAP_FORMULA_ID',
49: avalue => p_formula_id);
50:
51: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
52: aname => 'GMDFMLAP_START_STATUS',
53: avalue => p_start_status);
54:
55: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
51: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
52: aname => 'GMDFMLAP_START_STATUS',
53: avalue => p_start_status);
54:
55: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
56: aname => 'GMDFMLAP_TARGET_STATUS',
57: avalue => p_target_status);
58:
59: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
55: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
56: aname => 'GMDFMLAP_TARGET_STATUS',
57: avalue => p_target_status);
58:
59: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
60: aname => 'GMDFMLAP_FORMULA_NO',
61: avalue => p_formula_no);
62:
63: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
59: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
60: aname => 'GMDFMLAP_FORMULA_NO',
61: avalue => p_formula_no);
62:
63: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
64: aname => 'GMDFMLAP_FORMULA_VERS',
65: avalue => p_formula_vers);
66:
67: l_wf_timeout := (l_wf_timeout * 24 * 60) / 4 ; -- Converting days into minutes
65: avalue => p_formula_vers);
66:
67: l_wf_timeout := (l_wf_timeout * 24 * 60) / 4 ; -- Converting days into minutes
68:
69: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
70: aname => 'GMDFMLAP_TIMEOUT',
71: avalue => l_wf_timeout);
72: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
73: aname => 'GMDFMLAP_MESG_CNT',
68:
69: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
70: aname => 'GMDFMLAP_TIMEOUT',
71: avalue => l_wf_timeout);
72: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
73: aname => 'GMDFMLAP_MESG_CNT',
74: avalue => 1);
75:
76: l_runform := 'GMDFRMED_F:FORMULA_ID='||to_char(p_formula_id);
74: avalue => 1);
75:
76: l_runform := 'GMDFRMED_F:FORMULA_ID='||to_char(p_formula_id);
77:
78: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
79: aname => 'GMDFMLAP_FORM',
80: avalue => l_runform);
81:
82: -- get values to be stored into the workflow item
84: INTO l_performer_name ,l_performer_display_name
85: FROM FND_USER
86: WHERE USER_ID = p_Requester;
87:
88: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
89: aname => 'GMDFMLAP_REQUSTER',
90: avalue => l_performer_name );
91:
92: /* Mercy Thomas Bug 3173515 Added the following variables for the NPD workflow changes */
99: INTO l_performer_name ,l_performer_display_name
100: FROM FND_USER
101: WHERE USER_ID = l_owner_id;
102:
103: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
104: aname => 'GMDFMLAP_OWNER_ID',
105: avalue => l_performer_name);
106:
107: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
103: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
104: aname => 'GMDFMLAP_OWNER_ID',
105: avalue => l_performer_name);
106:
107: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
108: aname => 'GMDFMLAP_FORMULA_DESC',
109: avalue => l_formula_desc);
110:
111: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
107: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
108: aname => 'GMDFMLAP_FORMULA_DESC',
109: avalue => l_formula_desc);
110:
111: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
112: aname => 'GMDFMLAP_FORMULA_CLASS',
113: avalue => l_formula_class);
114:
115: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
111: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
112: aname => 'GMDFMLAP_FORMULA_CLASS',
113: avalue => l_formula_class);
114:
115: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
116: aname => 'GMDFMLAP_SCALE_TYPE',
117: avalue => l_scale_type);
118:
119:
120: /* Mercy Thomas Bug 3173515 End of the changes */
121:
122: /* start the Workflow process */
123:
124: WF_ENGINE.STARTPROCESS (itemtype => l_itemtype,itemkey => l_itemkey);
125:
126:
127:
128: EXCEPTION
148: IS
149: /* procedure to Check Approval is required or not if required find the approver and send the notification to
150: approver */
151:
152: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
153: p_data_string VARCHAR2(2000);
154: p_lab_wf_item_type VARCHAR2(8) := 'GMDFMLAP'; -- Recipe Lab use Approval Workflow Inernal Name
155: P_lab_Process_name VARCHAR2(32) := 'GMDFMLAP_PROCESS'; -- Recipe Lab use Approval Workflow Process Inernal Name
156: P_lab_activity_name VARCHAR2(80) := 'GMDFMLAP_NOTI_REQUEST';
181: p_lab_activity_name,
182: p_data_string,
183: P_role);
184: l_data_string := replace(p_wf_data_string,l_delimiter,wf_core.newline);
185: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
186: itemkey => p_itemkey,
187: aname => 'GMDFMLAP_ADDL_TEXT',
188: avalue => l_data_string);
189:
186: itemkey => p_itemkey,
187: aname => 'GMDFMLAP_ADDL_TEXT',
188: avalue => l_data_string);
189:
190: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
191: itemkey => p_itemkey,
192: aname => 'GMDFMLAP_APPROVER',
193: avalue => p_role);
194:
193: avalue => p_role);
194:
195: p_resultout:='COMPLETE:Y';
196: ELSE
197: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_TARGET_STATUS');
198: UPDATE FM_FORM_MST_B
199: SET FORMULA_STATUS = l_target_status
200: WHERE FORMULA_ID = l_formula_id;
201: p_resultout:='COMPLETE:N';
213: p_itemkey IN VARCHAR2,
214: p_actid IN NUMBER,
215: p_funcmode IN VARCHAR2,
216: p_resultout OUT NOCOPY VARCHAR2) IS
217: l_mesg_cnt number:=wf_engine.getitemattrnumber(p_itemtype, p_itemkey,'GMDFMLAP_MESG_CNT');
218: l_approver VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_APPROVER');
219: BEGIN
220: IF (p_funcmode = 'TIMEOUT') THEN
221: l_mesg_cnt := l_mesg_cnt + 1;
214: p_actid IN NUMBER,
215: p_funcmode IN VARCHAR2,
216: p_resultout OUT NOCOPY VARCHAR2) IS
217: l_mesg_cnt number:=wf_engine.getitemattrnumber(p_itemtype, p_itemkey,'GMDFMLAP_MESG_CNT');
218: l_approver VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_APPROVER');
219: BEGIN
220: IF (p_funcmode = 'TIMEOUT') THEN
221: l_mesg_cnt := l_mesg_cnt + 1;
222: IF l_mesg_cnt <= 4 THEN
219: BEGIN
220: IF (p_funcmode = 'TIMEOUT') THEN
221: l_mesg_cnt := l_mesg_cnt + 1;
222: IF l_mesg_cnt <= 4 THEN
223: WF_ENGINE.SETITEMATTRNUMBER(itemtype => p_itemtype,itemkey => p_itemkey,
224: aname => 'GMDFMLAP_MESG_CNT',
225: avalue => l_mesg_cnt);
226: ELSE
227: p_resultout := 'COMPLETE:DEFAULT';
226: ELSE
227: p_resultout := 'COMPLETE:DEFAULT';
228: END IF;
229: ELSIF (p_funcmode = 'RESPOND') THEN
230: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
231: itemkey => p_itemkey,
232: aname => 'GMDFMLAP_CURR_PERFORMER',
233: avalue => l_approver);
234: END IF;
250: p_actid IN NUMBER,
251: p_funcmode IN VARCHAR2,
252: p_resultout OUT NOCOPY VARCHAR2) IS
253: l_target_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
254: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
255: /* GK added variables for recipe generation B3604554 */
256: l_return_status VARCHAR2(1);
257: x_recipe_no VARCHAR2(32);
258: x_recipe_version NUMBER;
289:
290: BEGIN
291:
292: IF (p_funcmode = 'RUN') THEN
293: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_TARGET_STATUS');
294: UPDATE FM_FORM_MST_B
295: SET FORMULA_STATUS = l_target_status
296: WHERE FORMULA_ID = l_formula_id;
297:
329: p_resultout OUT NOCOPY VARCHAR2) IS
330: l_rework_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
331: l_target_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
332: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
333: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
334: BEGIN
335: IF (p_funcmode = 'RUN') THEN
336: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_START_STATUS');
337: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_TARGET_STATUS');
332: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
333: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
334: BEGIN
335: IF (p_funcmode = 'RUN') THEN
336: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_START_STATUS');
337: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_TARGET_STATUS');
338: SELECT rework_status into l_rework_status
339: FROM GMD_STATUS_NEXT
340: WHERE current_status = l_start_status
333: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
334: BEGIN
335: IF (p_funcmode = 'RUN') THEN
336: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_START_STATUS');
337: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_TARGET_STATUS');
338: SELECT rework_status into l_rework_status
339: FROM GMD_STATUS_NEXT
340: WHERE current_status = l_start_status
341: AND target_status = l_target_status
351: p_itemkey IN VARCHAR2,
352: p_actid IN NUMBER,
353: p_funcmode IN VARCHAR2,
354: p_resultout OUT NOCOPY VARCHAR2) IS
355: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
356: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
357: BEGIN
358: IF (p_funcmode = 'RUN') THEN
359: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_START_STATUS');
355: l_formula_id FM_FORM_MST_B.formula_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_FORMULA_ID'));
356: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
357: BEGIN
358: IF (p_funcmode = 'RUN') THEN
359: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_START_STATUS');
360: UPDATE FM_FORM_MST_B
361: SET FORMULA_STATUS = l_start_status
362: WHERE FORMULA_ID = l_formula_id;
363: END IF;
368: p_itemkey IN VARCHAR2,
369: p_actid IN NUMBER,
370: p_funcmode IN VARCHAR2,
371: p_resultout OUT NOCOPY VARCHAR2) IS
372: l_requester VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_REQUSTER');
373: BEGIN
374: IF (p_funcmode = 'RESPOND') THEN
375: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
376: itemkey => p_itemkey,
371: p_resultout OUT NOCOPY VARCHAR2) IS
372: l_requester VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_REQUSTER');
373: BEGIN
374: IF (p_funcmode = 'RESPOND') THEN
375: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
376: itemkey => p_itemkey,
377: aname => 'GMDFMLAP_CURR_PERFORMER',
378: avalue => l_requester);
379: END IF;
385: p_actid IN NUMBER,
386: p_funcmode IN VARCHAR2,
387: p_resultout OUT NOCOPY VARCHAR2) IS
388: l_html_mesg VARCHAR2(4000);
389: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_COMMENT');
390: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_DISP_COMMENT');
391: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_CURR_PERFORMER');
392: BEGIN
393: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
386: p_funcmode IN VARCHAR2,
387: p_resultout OUT NOCOPY VARCHAR2) IS
388: l_html_mesg VARCHAR2(4000);
389: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_COMMENT');
390: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_DISP_COMMENT');
391: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_CURR_PERFORMER');
392: BEGIN
393: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
394: BEGIN
387: p_resultout OUT NOCOPY VARCHAR2) IS
388: l_html_mesg VARCHAR2(4000);
389: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_COMMENT');
390: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_DISP_COMMENT');
391: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDFMLAP_CURR_PERFORMER');
392: BEGIN
393: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
394: BEGIN
395: l_mesg_comment := l_mesg_comment||wf_core.newline||l_performer||' : '||FND_DATE.DATE_TO_CHARDT(SYSDATE)||
398: l_comment := null;
399: EXCEPTION WHEN OTHERS THEN
400: NULL;
401: END;
402: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
403: itemkey => p_itemkey,
404: aname => 'GMDFMLAP_DISP_COMMENT',
405: avalue => l_mesg_comment);
406: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
402: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
403: itemkey => p_itemkey,
404: aname => 'GMDFMLAP_DISP_COMMENT',
405: avalue => l_mesg_comment);
406: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
407: -- itemkey => p_itemkey,
408: -- aname => 'GMDFMLAP_HTML_DISP_COMMENT',
409: -- avalue => l_html_mesg);
410: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
406: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
407: -- itemkey => p_itemkey,
408: -- aname => 'GMDFMLAP_HTML_DISP_COMMENT',
409: -- avalue => l_html_mesg);
410: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
411: itemkey => p_itemkey,
412: aname => 'GMDFMLAP_COMMENT',
413: avalue => l_comment);
414: END IF;