31: /* make sure that process runs with background engine
32: to prevent SAVEPOINT/ROLLBACK error (see Workflow FAQ)
33: the value to use for this is -1 */
34:
35: l_run_wf_in_background CONSTANT WF_ENGINE.THRESHOLD%TYPE := -1;
36: l_wf_timeout NUMBER := TO_NUMBER(FND_PROFILE.VALUE ('GMD_WF_TIMEOUT'));
37:
38:
39: l_WorkflowProcess VARCHAR2(30) := 'GMDRTLAP_PROCESS';
40: l_count NUMBER;
41: BEGIN
42:
43: /* create the process */
44: WF_ENGINE.CREATEPROCESS (itemtype => l_itemtype, itemkey => l_itemkey, process => l_WorkflowProcess) ;
45:
46: /* make sure that process runs with background engine */
47: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
48:
43: /* create the process */
44: WF_ENGINE.CREATEPROCESS (itemtype => l_itemtype, itemkey => l_itemkey, process => l_WorkflowProcess) ;
45:
46: /* make sure that process runs with background engine */
47: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
48:
49: /* set the item attributes */
50: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
51: aname => 'GMDRTLAP_ROUTING_ID',
46: /* make sure that process runs with background engine */
47: WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
48:
49: /* set the item attributes */
50: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
51: aname => 'GMDRTLAP_ROUTING_ID',
52: avalue => p_Routing_id);
53:
54: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
50: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
51: aname => 'GMDRTLAP_ROUTING_ID',
52: avalue => p_Routing_id);
53:
54: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
55: aname => 'GMDRTLAP_START_STATUS',
56: avalue => p_start_status);
57:
58: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
54: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
55: aname => 'GMDRTLAP_START_STATUS',
56: avalue => p_start_status);
57:
58: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
59: aname => 'GMDRTLAP_TARGET_STATUS',
60: avalue => p_target_status);
61:
62: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
58: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
59: aname => 'GMDRTLAP_TARGET_STATUS',
60: avalue => p_target_status);
61:
62: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
63: aname => 'GMDRTLAP_ROUTING_NO',
64: avalue => p_Routing_no);
65:
66: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
62: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
63: aname => 'GMDRTLAP_ROUTING_NO',
64: avalue => p_Routing_no);
65:
66: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
67: aname => 'GMDRTLAP_ROUTING_VERS',
68: avalue => p_Routing_vers);
69: l_wf_timeout := (l_wf_timeout * 24 * 60) / 4 ; -- Converting days into minutes
70:
67: aname => 'GMDRTLAP_ROUTING_VERS',
68: avalue => p_Routing_vers);
69: l_wf_timeout := (l_wf_timeout * 24 * 60) / 4 ; -- Converting days into minutes
70:
71: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
72: aname => 'GMDRTLAP_TIMEOUT',
73: avalue => l_wf_timeout);
74: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
75: aname => 'GMDRTLAP_MESG_CNT',
70:
71: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
72: aname => 'GMDRTLAP_TIMEOUT',
73: avalue => l_wf_timeout);
74: WF_ENGINE.SETITEMATTRNUMBER(itemtype => l_itemtype,itemkey => l_itemkey,
75: aname => 'GMDRTLAP_MESG_CNT',
76: avalue => 1);
77:
78:
77:
78:
79: l_runform := 'GMDROTED_F:ROUTING_ID='||to_char(p_Routing_id);
80:
81: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
82: aname => 'GMDRTLAP_FORM',
83: avalue => l_runform);
84:
85: -- get values to be stored into the workflow item
87: INTO l_performer_name ,l_performer_display_name
88: FROM FND_USER
89: WHERE USER_ID = p_Requester;
90:
91: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
92: aname => 'GMDRTLAP_REQUSTER',
93: avalue => l_performer_name );
94:
95: /* Mercy Thomas Bug 3173515 Added the following variables for the NPD workflow changes */
102: INTO l_performer_name ,l_performer_display_name
103: FROM FND_USER
104: WHERE USER_ID = l_owner_id;
105:
106: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
107: aname => 'GMDRTLAP_OWNER_ID',
108: avalue => l_performer_name);
109:
110: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
106: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
107: aname => 'GMDRTLAP_OWNER_ID',
108: avalue => l_performer_name);
109:
110: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
111: aname => 'GMDRTLAP_ROUTING_DESC',
112: avalue => l_routing_desc);
113:
114: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
110: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
111: aname => 'GMDRTLAP_ROUTING_DESC',
112: avalue => l_routing_desc);
113:
114: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
115: aname => 'GMDRTLAP_ROUTING_CLASS',
116: avalue => l_routing_class);
117:
118: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
114: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
115: aname => 'GMDRTLAP_ROUTING_CLASS',
116: avalue => l_routing_class);
117:
118: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
119: aname => 'GMDRTLAP_ROUTING_QTY',
120: avalue => l_routing_qty);
121:
122: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
118: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
119: aname => 'GMDRTLAP_ROUTING_QTY',
120: avalue => l_routing_qty);
121:
122: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
123: aname => 'GMDRTLAP_ROUTING_UOM',
124: avalue => l_item_um);
125:
126: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
122: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
123: aname => 'GMDRTLAP_ROUTING_UOM',
124: avalue => l_item_um);
125:
126: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
127: aname => 'GMDRTLAP_EFF_START_DATE',
128: avalue => l_effective_start_date);
129:
130: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
126: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
127: aname => 'GMDRTLAP_EFF_START_DATE',
128: avalue => l_effective_start_date);
129:
130: WF_ENGINE.SETITEMATTRTEXT(itemtype => l_itemtype,itemkey => l_itemkey,
131: aname => 'GMDRTLAP_EFF_END_DATE',
132: avalue => l_effective_end_date);
133:
134: /* Mercy Thomas Bug 3173515 End of the changes */
134: /* Mercy Thomas Bug 3173515 End of the changes */
135:
136: /* start the Workflow process */
137:
138: WF_ENGINE.STARTPROCESS (itemtype => l_itemtype,itemkey => l_itemkey);
139:
140:
141:
142: EXCEPTION
162: IS
163: /* procedure to Check Approval is required or not if required find the approver and send the notification to
164: approver */
165:
166: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
167: p_data_string VARCHAR2(2000);
168: p_wf_data_string VARCHAR2(2000);
169: p_lab_wf_item_type VARCHAR2(8) := 'GMDRTLAP'; -- Recipe Lab use Approval Workflow Inernal Name
170: P_lab_Process_name VARCHAR2(32) := 'GMDRTLAP_PROCESS'; -- Recipe Lab use Approval Workflow Process Inernal Name
195: p_lab_activity_name,
196: p_data_string,
197: P_role);
198: l_data_string := replace(p_wf_data_string,l_delimiter,wf_core.newline);
199: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
200: itemkey => p_itemkey,
201: aname => 'GMDRTLAP_ADDL_TEXT',
202: avalue => l_data_string);
203:
200: itemkey => p_itemkey,
201: aname => 'GMDRTLAP_ADDL_TEXT',
202: avalue => l_data_string);
203:
204: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
205: itemkey => p_itemkey,
206: aname => 'GMDRTLAP_APPROVER',
207: avalue => p_role);
208:
207: avalue => p_role);
208:
209: p_resultout:='COMPLETE:Y';
210: ELSE
211: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
212: UPDATE GMD_ROUTINGS_B
213: SET ROUTING_STATUS = l_target_status
214: WHERE ROUTING_ID = l_Routing_id;
215: p_resultout:='COMPLETE:N';
227: p_itemkey IN VARCHAR2,
228: p_actid IN NUMBER,
229: p_funcmode IN VARCHAR2,
230: p_resultout OUT NOCOPY VARCHAR2) IS
231: l_mesg_cnt number:=wf_engine.getitemattrnumber(p_itemtype, p_itemkey,'GMDRTLAP_MESG_CNT');
232: l_approver VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_APPROVER');
233: BEGIN
234: IF (p_funcmode = 'TIMEOUT') THEN
235: l_mesg_cnt := l_mesg_cnt + 1;
228: p_actid IN NUMBER,
229: p_funcmode IN VARCHAR2,
230: p_resultout OUT NOCOPY VARCHAR2) IS
231: l_mesg_cnt number:=wf_engine.getitemattrnumber(p_itemtype, p_itemkey,'GMDRTLAP_MESG_CNT');
232: l_approver VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_APPROVER');
233: BEGIN
234: IF (p_funcmode = 'TIMEOUT') THEN
235: l_mesg_cnt := l_mesg_cnt + 1;
236: IF l_mesg_cnt <= 4 THEN
233: BEGIN
234: IF (p_funcmode = 'TIMEOUT') THEN
235: l_mesg_cnt := l_mesg_cnt + 1;
236: IF l_mesg_cnt <= 4 THEN
237: WF_ENGINE.SETITEMATTRNUMBER(itemtype => p_itemtype,itemkey => p_itemkey,
238: aname => 'GMDRTLAP_MESG_CNT',
239: avalue => l_mesg_cnt);
240: ELSE
241: p_resultout := 'COMPLETE:DEFAULT';
240: ELSE
241: p_resultout := 'COMPLETE:DEFAULT';
242: END IF;
243: ELSIF (p_funcmode = 'RESPOND') THEN
244: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
245: itemkey => p_itemkey,
246: aname => 'GMDRTLAP_CURR_PERFORMER',
247: avalue => l_approver);
248: END IF;
255: p_actid IN NUMBER,
256: p_funcmode IN VARCHAR2,
257: p_resultout OUT NOCOPY VARCHAR2) IS
258: l_target_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
259: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
260: BEGIN
261: IF (p_funcmode = 'RUN') THEN
262: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
263: UPDATE GMD_ROUTINGS_B
258: l_target_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
259: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
260: BEGIN
261: IF (p_funcmode = 'RUN') THEN
262: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
263: UPDATE GMD_ROUTINGS_B
264: SET ROUTING_STATUS = l_target_status
265: WHERE ROUTING_ID = l_Routing_id;
266: END IF;
275: p_resultout OUT NOCOPY VARCHAR2) IS
276: l_rework_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
277: l_target_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
278: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
279: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
280: BEGIN
281: IF (p_funcmode = 'RUN') THEN
282: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_START_STATUS');
283: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
278: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
279: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
280: BEGIN
281: IF (p_funcmode = 'RUN') THEN
282: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_START_STATUS');
283: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
284: SELECT rework_status into l_rework_status
285: FROM GMD_STATUS_NEXT
286: WHERE current_status = l_start_status
279: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
280: BEGIN
281: IF (p_funcmode = 'RUN') THEN
282: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_START_STATUS');
283: l_target_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_TARGET_STATUS');
284: SELECT rework_status into l_rework_status
285: FROM GMD_STATUS_NEXT
286: WHERE current_status = l_start_status
287: AND target_status = l_target_status
297: p_itemkey IN VARCHAR2,
298: p_actid IN NUMBER,
299: p_funcmode IN VARCHAR2,
300: p_resultout OUT NOCOPY VARCHAR2) IS
301: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
302: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
303: BEGIN
304: IF (p_funcmode = 'RUN') THEN
305: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_START_STATUS');
301: l_Routing_id gmd_routings_b.Routing_id%TYPE:=to_number(wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_ROUTING_ID'));
302: l_start_status GMD_STATUS_NEXT.TARGET_STATUS%TYPE;
303: BEGIN
304: IF (p_funcmode = 'RUN') THEN
305: l_start_status := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_START_STATUS');
306: UPDATE GMD_ROUTINGS_B
307: SET ROUTING_STATUS = l_start_status
308: WHERE ROUTING_ID = l_Routing_id;
309: END IF;
313: p_itemkey IN VARCHAR2,
314: p_actid IN NUMBER,
315: p_funcmode IN VARCHAR2,
316: p_resultout OUT NOCOPY VARCHAR2) IS
317: l_requester VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_REQUSTER');
318: BEGIN
319: IF (p_funcmode = 'RESPOND') THEN
320: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
321: itemkey => p_itemkey,
316: p_resultout OUT NOCOPY VARCHAR2) IS
317: l_requester VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_REQUSTER');
318: BEGIN
319: IF (p_funcmode = 'RESPOND') THEN
320: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
321: itemkey => p_itemkey,
322: aname => 'GMDRTLAP_CURR_PERFORMER',
323: avalue => l_requester);
324: END IF;
330: p_actid IN NUMBER,
331: p_funcmode IN VARCHAR2,
332: p_resultout OUT NOCOPY VARCHAR2) IS
333: l_html_mesg VARCHAR2(4000);
334: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_COMMENT');
335: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_DISP_COMMENT');
336: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_CURR_PERFORMER');
337: BEGIN
338: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
331: p_funcmode IN VARCHAR2,
332: p_resultout OUT NOCOPY VARCHAR2) IS
333: l_html_mesg VARCHAR2(4000);
334: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_COMMENT');
335: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_DISP_COMMENT');
336: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_CURR_PERFORMER');
337: BEGIN
338: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
339: BEGIN
332: p_resultout OUT NOCOPY VARCHAR2) IS
333: l_html_mesg VARCHAR2(4000);
334: l_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_COMMENT');
335: l_mesg_comment VARCHAR2(4000):=wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_DISP_COMMENT');
336: l_performer VARCHAR2(80) := wf_engine.getitemattrtext(p_itemtype, p_itemkey,'GMDRTLAP_CURR_PERFORMER');
337: BEGIN
338: IF (p_funcmode = 'RUN' AND l_comment IS NOT NULL) THEN
339: BEGIN
340: l_mesg_comment := l_mesg_comment||wf_core.newline||l_performer||' : '||FND_DATE.DATE_TO_CHARDT(SYSDATE)||
343: l_comment := null;
344: EXCEPTION WHEN OTHERS THEN
345: NULL;
346: END;
347: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
348: itemkey => p_itemkey,
349: aname => 'GMDRTLAP_DISP_COMMENT',
350: avalue => l_mesg_comment);
351: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
347: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
348: itemkey => p_itemkey,
349: aname => 'GMDRTLAP_DISP_COMMENT',
350: avalue => l_mesg_comment);
351: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
352: -- itemkey => p_itemkey,
353: -- aname => 'GMDRTLAP_HTML_DISP_COMMENT',
354: -- avalue => l_html_mesg);
355: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
351: -- WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
352: -- itemkey => p_itemkey,
353: -- aname => 'GMDRTLAP_HTML_DISP_COMMENT',
354: -- avalue => l_html_mesg);
355: WF_ENGINE.SETITEMATTRTEXT(itemtype => p_itemtype,
356: itemkey => p_itemkey,
357: aname => 'GMDRTLAP_COMMENT',
358: avalue => l_comment);
359: END IF;