136: g_kffcache_item_type := p_item_type;
137: g_kffcache_item_key := p_item_key;
138:
139: g_kffcache_key_flex.application_id := To_number
140: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_APPLID'));
141:
142: g_kffcache_key_flex.application_short_name :=
143: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_APPLSNAME');
144:
139: g_kffcache_key_flex.application_id := To_number
140: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_APPLID'));
141:
142: g_kffcache_key_flex.application_short_name :=
143: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_APPLSNAME');
144:
145: g_kffcache_key_flex.id_flex_code :=
146: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_CODE');
147:
142: g_kffcache_key_flex.application_short_name :=
143: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_APPLSNAME');
144:
145: g_kffcache_key_flex.id_flex_code :=
146: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_CODE');
147:
148: g_kffcache_key_flex.id_flex_num := To_number
149: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_NUM'));
150:
145: g_kffcache_key_flex.id_flex_code :=
146: wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_CODE');
147:
148: g_kffcache_key_flex.id_flex_num := To_number
149: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_NUM'));
150:
151: g_kffcache_key_flex.numof_segments := To_number
152: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_NSEGMENTS'));
153: END IF;
148: g_kffcache_key_flex.id_flex_num := To_number
149: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_NUM'));
150:
151: g_kffcache_key_flex.numof_segments := To_number
152: (wf_engine.GetItemAttrText(p_item_type, p_item_key, 'FND_FLEX_NSEGMENTS'));
153: END IF;
154:
155: px_key_flex := g_kffcache_key_flex;
156:
372: TO_CHAR(FND_FLEX_WORKFLOW_ITEMKEY_S.NEXTVAL)
373: INTO l_itemkey
374: FROM DUAL;
375: ELSE -- Synch Mode, key is '#SYNCH'
376: l_itemkey := wf_engine.eng_synch;
377: END IF;
378:
379: --
380: -- Select the process to start for the given structure.
395: --
396: -- Create the workflow process for the given itemtype with the
397: -- generated itemkey and selected process.
398: --
399: wf_engine.CreateProcess(itemtype, l_itemkey, l_pname);
400:
401: --
402: -- Create item attributes for the process to store the flexfield
403: -- information.
421: -- FND_FLEX_INSERT - Insert new combinations?
422: -- FND_FLEX_NEW - Is this a new code combination?
423: -- FND_FLEX_SEGMENTn - Flexfield Segments
424: --
425: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLSNAME');
426: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CODE');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
422: -- FND_FLEX_NEW - Is this a new code combination?
423: -- FND_FLEX_SEGMENTn - Flexfield Segments
424: --
425: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLSNAME');
426: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CODE');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
423: -- FND_FLEX_SEGMENTn - Flexfield Segments
424: --
425: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLSNAME');
426: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CODE');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
424: --
425: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLSNAME');
426: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CODE');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
425: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLSNAME');
426: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CODE');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
427: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NUM');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
428: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_APPLID');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
429: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NSEGMENTS');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
430:
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
431: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_CCID');
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
439: FOR i IN 1..l_nsegments LOOP
432: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_SEGMENTS');
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
439: FOR i IN 1..l_nsegments LOOP
440: wf_engine.AddItemAttr(itemtype, l_itemkey,
433: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DATA');
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
439: FOR i IN 1..l_nsegments LOOP
440: wf_engine.AddItemAttr(itemtype, l_itemkey,
441: 'FND_FLEX_SEGMENT' || TO_CHAR(i));
434: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_DESCRIPTIONS');
435: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_MESSAGE');
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
439: FOR i IN 1..l_nsegments LOOP
440: wf_engine.AddItemAttr(itemtype, l_itemkey,
441: 'FND_FLEX_SEGMENT' || TO_CHAR(i));
442: END LOOP;
436: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_STATUS');
437: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_INSERT');
438: wf_engine.AddItemAttr(itemtype, l_itemkey, 'FND_FLEX_NEW');
439: FOR i IN 1..l_nsegments LOOP
440: wf_engine.AddItemAttr(itemtype, l_itemkey,
441: 'FND_FLEX_SEGMENT' || TO_CHAR(i));
442: END LOOP;
443:
444: --
443:
444: --
445: -- Set structure specific Item Attributes.
446: --
447: wf_engine.SetItemAttrText(itemtype, l_itemkey,
448: 'FND_FLEX_APPLSNAME', appl_short_name);
449: wf_engine.SetItemAttrText(itemtype, l_itemkey,
450: 'FND_FLEX_CODE', code);
451: wf_engine.SetItemAttrText(itemtype, l_itemkey,
445: -- Set structure specific Item Attributes.
446: --
447: wf_engine.SetItemAttrText(itemtype, l_itemkey,
448: 'FND_FLEX_APPLSNAME', appl_short_name);
449: wf_engine.SetItemAttrText(itemtype, l_itemkey,
450: 'FND_FLEX_CODE', code);
451: wf_engine.SetItemAttrText(itemtype, l_itemkey,
452: 'FND_FLEX_NUM', TO_CHAR(num));
453: wf_engine.SetItemAttrText(itemtype, l_itemkey,
447: wf_engine.SetItemAttrText(itemtype, l_itemkey,
448: 'FND_FLEX_APPLSNAME', appl_short_name);
449: wf_engine.SetItemAttrText(itemtype, l_itemkey,
450: 'FND_FLEX_CODE', code);
451: wf_engine.SetItemAttrText(itemtype, l_itemkey,
452: 'FND_FLEX_NUM', TO_CHAR(num));
453: wf_engine.SetItemAttrText(itemtype, l_itemkey,
454: 'FND_FLEX_APPLID', TO_CHAR(l_application_id));
455: wf_engine.SetItemAttrText(itemtype, l_itemkey,
449: wf_engine.SetItemAttrText(itemtype, l_itemkey,
450: 'FND_FLEX_CODE', code);
451: wf_engine.SetItemAttrText(itemtype, l_itemkey,
452: 'FND_FLEX_NUM', TO_CHAR(num));
453: wf_engine.SetItemAttrText(itemtype, l_itemkey,
454: 'FND_FLEX_APPLID', TO_CHAR(l_application_id));
455: wf_engine.SetItemAttrText(itemtype, l_itemkey,
456: 'FND_FLEX_NSEGMENTS', TO_CHAR(l_nsegments));
457: --
451: wf_engine.SetItemAttrText(itemtype, l_itemkey,
452: 'FND_FLEX_NUM', TO_CHAR(num));
453: wf_engine.SetItemAttrText(itemtype, l_itemkey,
454: 'FND_FLEX_APPLID', TO_CHAR(l_application_id));
455: wf_engine.SetItemAttrText(itemtype, l_itemkey,
456: 'FND_FLEX_NSEGMENTS', TO_CHAR(l_nsegments));
457: --
458: -- Set the kffcache.
459: --
546:
547: --
548: -- Reset Process Run specific Item Attributes. (Init them)
549: --
550: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
547: --
548: -- Reset Process Run specific Item Attributes. (Init them)
549: --
550: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
548: -- Reset Process Run specific Item Attributes. (Init them)
549: --
550: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
549: --
550: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
550: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
558: ELSE
551: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
552: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
558: ELSE
559: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'N');
553: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
554: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
558: ELSE
559: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'N');
560: END IF;
561: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
555: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
556: IF (insert_if_new) THEN
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
558: ELSE
559: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'N');
560: END IF;
561: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
562:
563: l_nsegments := To_number
557: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'Y');
558: ELSE
559: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', 'N');
560: END IF;
561: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
562:
563: l_nsegments := To_number
564: (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NSEGMENTS'));
565:
560: END IF;
561: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
562:
563: l_nsegments := To_number
564: (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NSEGMENTS'));
565:
566: FOR i IN 1..l_nsegments LOOP
567: wf_engine.SetItemAttrText(itemtype, itemkey,
568: 'FND_FLEX_SEGMENT' || TO_CHAR(i), NULL);
563: l_nsegments := To_number
564: (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NSEGMENTS'));
565:
566: FOR i IN 1..l_nsegments LOOP
567: wf_engine.SetItemAttrText(itemtype, itemkey,
568: 'FND_FLEX_SEGMENT' || TO_CHAR(i), NULL);
569: END LOOP;
570:
571: --
577: --
578: -- Set the cost threshold to a high value so that none of the
579: -- functions will ever be run in the background.
580: --
581: l_threshold := wf_engine.threshold;
582: wf_engine.threshold := 999999;
583:
584: wf_engine.StartProcess(itemtype, itemkey);
585:
578: -- Set the cost threshold to a high value so that none of the
579: -- functions will ever be run in the background.
580: --
581: l_threshold := wf_engine.threshold;
582: wf_engine.threshold := 999999;
583:
584: wf_engine.StartProcess(itemtype, itemkey);
585:
586: wf_engine.threshold := l_threshold;
580: --
581: l_threshold := wf_engine.threshold;
582: wf_engine.threshold := 999999;
583:
584: wf_engine.StartProcess(itemtype, itemkey);
585:
586: wf_engine.threshold := l_threshold;
587: EXCEPTION
588: WHEN OTHERS THEN
582: wf_engine.threshold := 999999;
583:
584: wf_engine.StartProcess(itemtype, itemkey);
585:
586: wf_engine.threshold := l_threshold;
587: EXCEPTION
588: WHEN OTHERS THEN
589: wf_engine.threshold := l_threshold;
590: RAISE;
585:
586: wf_engine.threshold := l_threshold;
587: EXCEPTION
588: WHEN OTHERS THEN
589: wf_engine.threshold := l_threshold;
590: RAISE;
591: END;
592:
593: --
598: --
599: -- Check the success first.
600: --
601: IF ((l_process_result = 'SUCCESS') AND
602: (l_process_status = wf_engine.eng_completed)) THEN
603: l_wf_success := TRUE;
604: --
605: -- The process completed successfully. Get the results of the
606: -- flex valiation. Return error message and fail if the
606: -- flex valiation. Return error message and fail if the
607: -- validation failed.
608: --
609:
610: ccid := To_number(wf_engine.GetItemAttrText(itemtype, itemkey,
611: 'FND_FLEX_CCID'));
612: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
613: 'FND_FLEX_SEGMENTS');
614: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
608: --
609:
610: ccid := To_number(wf_engine.GetItemAttrText(itemtype, itemkey,
611: 'FND_FLEX_CCID'));
612: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
613: 'FND_FLEX_SEGMENTS');
614: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
615: 'FND_FLEX_DATA');
616: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
610: ccid := To_number(wf_engine.GetItemAttrText(itemtype, itemkey,
611: 'FND_FLEX_CCID'));
612: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
613: 'FND_FLEX_SEGMENTS');
614: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
615: 'FND_FLEX_DATA');
616: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
617: 'FND_FLEX_DESCRIPTIONS');
618: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
612: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
613: 'FND_FLEX_SEGMENTS');
614: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
615: 'FND_FLEX_DATA');
616: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
617: 'FND_FLEX_DESCRIPTIONS');
618: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
619: 'FND_FLEX_STATUS');
620: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
614: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
615: 'FND_FLEX_DATA');
616: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
617: 'FND_FLEX_DESCRIPTIONS');
618: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
619: 'FND_FLEX_STATUS');
620: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
621: = 'Y') THEN
622: new_combination := TRUE;
616: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
617: 'FND_FLEX_DESCRIPTIONS');
618: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
619: 'FND_FLEX_STATUS');
620: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
621: = 'Y') THEN
622: new_combination := TRUE;
623: ELSE
624: new_combination := FALSE;
641: -- Generate should not return NULL validation status.
642: --
643: l_validation_status := Nvl(l_validation_status, 'INVALID');
644: IF (l_validation_status <> 'VALID') THEN
645: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
646: 'FND_FLEX_MESSAGE');
647: --
648: -- Debug
649: --
659: -- This indicates a fatal error. The code combination generation
660: -- and validation has not been completed successfully.
661: -- Retrieve the error message and set the output values to null
662: --
663: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
664: 'FND_FLEX_MESSAGE');
665: ccid := 0;
666:
667: --
666:
667: --
668: -- Still return whatever is generated.
669: --
670: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
671: 'FND_FLEX_SEGMENTS');
672: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
673: 'FND_FLEX_DATA');
674: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
668: -- Still return whatever is generated.
669: --
670: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
671: 'FND_FLEX_SEGMENTS');
672: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
673: 'FND_FLEX_DATA');
674: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
675: 'FND_FLEX_DESCRIPTIONS');
676: new_combination := FALSE;
670: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
671: 'FND_FLEX_SEGMENTS');
672: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
673: 'FND_FLEX_DATA');
674: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
675: 'FND_FLEX_DESCRIPTIONS');
676: new_combination := FALSE;
677:
678: --
795: -- combination should be inserted into the database if it is
796: -- new.
797: --
798: IF (insert_if_new) THEN
799: wf_engine.SetItemAttrText(itemtype, itemkey,
800: 'FND_FLEX_INSERT', 'Y');
801: ELSE
802: wf_engine.SetItemAttrText(itemtype, itemkey,
803: 'FND_FLEX_INSERT', 'N');
798: IF (insert_if_new) THEN
799: wf_engine.SetItemAttrText(itemtype, itemkey,
800: 'FND_FLEX_INSERT', 'Y');
801: ELSE
802: wf_engine.SetItemAttrText(itemtype, itemkey,
803: 'FND_FLEX_INSERT', 'N');
804: END IF;
805:
806: --
812: --
813: -- Set the cost threshold to a high value so that none of the
814: -- functions will ever be run in the background.
815: --
816: l_threshold := wf_engine.threshold;
817: wf_engine.threshold := 999999;
818:
819: IF (block_activity IS NULL) THEN
820: wf_engine.StartProcess(itemtype, itemkey);
813: -- Set the cost threshold to a high value so that none of the
814: -- functions will ever be run in the background.
815: --
816: l_threshold := wf_engine.threshold;
817: wf_engine.threshold := 999999;
818:
819: IF (block_activity IS NULL) THEN
820: wf_engine.StartProcess(itemtype, itemkey);
821: ELSE
816: l_threshold := wf_engine.threshold;
817: wf_engine.threshold := 999999;
818:
819: IF (block_activity IS NULL) THEN
820: wf_engine.StartProcess(itemtype, itemkey);
821: ELSE
822: wf_engine.CompleteActivity(itemtype, itemkey, block_activity, '');
823: END IF;
824:
818:
819: IF (block_activity IS NULL) THEN
820: wf_engine.StartProcess(itemtype, itemkey);
821: ELSE
822: wf_engine.CompleteActivity(itemtype, itemkey, block_activity, '');
823: END IF;
824:
825: wf_engine.threshold := l_threshold;
826: EXCEPTION
821: ELSE
822: wf_engine.CompleteActivity(itemtype, itemkey, block_activity, '');
823: END IF;
824:
825: wf_engine.threshold := l_threshold;
826: EXCEPTION
827: WHEN OTHERS THEN
828: wf_engine.threshold := l_threshold;
829: RAISE;
824:
825: wf_engine.threshold := l_threshold;
826: EXCEPTION
827: WHEN OTHERS THEN
828: wf_engine.threshold := l_threshold;
829: RAISE;
830: END;
831:
832: --
837: --
838: -- Check the success first.
839: --
840: IF (((l_process_result = 'SUCCESS') AND
841: (l_process_status = wf_engine.eng_completed)) OR
842: ((l_process_result IS NULL) AND
843: (l_process_status = wf_engine.eng_notified))) THEN
844: l_wf_success := TRUE;
845: --
839: --
840: IF (((l_process_result = 'SUCCESS') AND
841: (l_process_status = wf_engine.eng_completed)) OR
842: ((l_process_result IS NULL) AND
843: (l_process_status = wf_engine.eng_notified))) THEN
844: l_wf_success := TRUE;
845: --
846: -- The process completed successfully. Get the results of the
847: -- flex valiation. Return error message and fail if the
847: -- flex valiation. Return error message and fail if the
848: -- validation failed.
849: --
850:
851: ccid := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
852: 'FND_FLEX_CCID'));
853: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
854: 'FND_FLEX_SEGMENTS');
855: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
849: --
850:
851: ccid := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
852: 'FND_FLEX_CCID'));
853: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
854: 'FND_FLEX_SEGMENTS');
855: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
856: 'FND_FLEX_DATA');
857: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
851: ccid := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
852: 'FND_FLEX_CCID'));
853: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
854: 'FND_FLEX_SEGMENTS');
855: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
856: 'FND_FLEX_DATA');
857: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
858: 'FND_FLEX_DESCRIPTIONS');
859: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
853: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
854: 'FND_FLEX_SEGMENTS');
855: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
856: 'FND_FLEX_DATA');
857: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
858: 'FND_FLEX_DESCRIPTIONS');
859: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
860: 'FND_FLEX_STATUS');
861: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
855: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
856: 'FND_FLEX_DATA');
857: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
858: 'FND_FLEX_DESCRIPTIONS');
859: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
860: 'FND_FLEX_STATUS');
861: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
862: = 'Y') THEN
863: new_combination := TRUE;
857: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
858: 'FND_FLEX_DESCRIPTIONS');
859: l_validation_status := wf_engine.GetItemAttrText(itemtype, itemkey,
860: 'FND_FLEX_STATUS');
861: IF (wf_engine.GetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW')
862: = 'Y') THEN
863: new_combination := TRUE;
864: ELSE
865: new_combination := FALSE;
882: -- Generate_partial should not return NULL validation status.
883: --
884: l_validation_status := Nvl(l_validation_status, 'INVALID');
885: IF (l_validation_status <> 'VALID') THEN
886: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
887: 'FND_FLEX_MESSAGE');
888: --
889: -- Debug
890: --
900: -- and validation has not been completed successfully.
901: -- Retrieve the error message and set the output values to null
902: --
903: IF (l_process_status = 'ERROR') THEN
904: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
905: 'FND_FLEX_MESSAGE');
906: ELSIF (l_process_result = 'FAILURE') THEN
907: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
908: 'FND_FLEX_MESSAGE');
903: IF (l_process_status = 'ERROR') THEN
904: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
905: 'FND_FLEX_MESSAGE');
906: ELSIF (l_process_result = 'FAILURE') THEN
907: error_message := wf_engine.GetItemAttrText(itemtype, itemkey,
908: 'FND_FLEX_MESSAGE');
909: ELSE
910: error_message := 'Error: Process ' || subprocess ||
911: ' not completed';
915:
916: --
917: -- Still return whatever is generated.
918: --
919: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
920: 'FND_FLEX_SEGMENTS');
921: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
922: 'FND_FLEX_DATA');
923: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
917: -- Still return whatever is generated.
918: --
919: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
920: 'FND_FLEX_SEGMENTS');
921: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
922: 'FND_FLEX_DATA');
923: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
924: 'FND_FLEX_DESCRIPTIONS');
925: new_combination := FALSE;
919: concat_segs := wf_engine.GetItemAttrText(itemtype, itemkey,
920: 'FND_FLEX_SEGMENTS');
921: concat_ids := wf_engine.GetItemAttrText(itemtype, itemkey,
922: 'FND_FLEX_DATA');
923: concat_descrs := wf_engine.GetItemAttrText(itemtype, itemkey,
924: 'FND_FLEX_DESCRIPTIONS');
925: new_combination := FALSE;
926:
927: --
939: --
940: -- Since this is a partial generate just clear the
941: -- flexfield attributes for the next run
942: --
943: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
940: -- Since this is a partial generate just clear the
941: -- flexfield attributes for the next run
942: --
943: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
941: -- flexfield attributes for the next run
942: --
943: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
942: --
943: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
943: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_CCID', NULL);
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
944: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_SEGMENTS', NULL);
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
952: 'FND_FLEX_NSEGMENTS'));
945: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DATA', NULL);
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
952: 'FND_FLEX_NSEGMENTS'));
953: FOR i IN 1..nsegments LOOP
946: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_DESCRIPTIONS', NULL);
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
952: 'FND_FLEX_NSEGMENTS'));
953: FOR i IN 1..nsegments LOOP
954: wf_engine.SetItemAttrText(itemtype, itemkey,
947: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_MESSAGE', NULL);
948: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_STATUS', NULL);
949: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_INSERT', NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
952: 'FND_FLEX_NSEGMENTS'));
953: FOR i IN 1..nsegments LOOP
954: wf_engine.SetItemAttrText(itemtype, itemkey,
955: 'FND_FLEX_SEGMENT' || TO_CHAR(i), NULL);
950: wf_engine.SetItemAttrText(itemtype, itemkey, 'FND_FLEX_NEW', NULL);
951: nsegments := TO_NUMBER(wf_engine.GetItemAttrText(itemtype, itemkey,
952: 'FND_FLEX_NSEGMENTS'));
953: FOR i IN 1..nsegments LOOP
954: wf_engine.SetItemAttrText(itemtype, itemkey,
955: 'FND_FLEX_SEGMENT' || TO_CHAR(i), NULL);
956: END LOOP;
957:
958: --
1027: --
1028: -- Got the values, now assign them to the segment attributes.
1029: --
1030: FOR i IN 1..nsegments LOOP
1031: wf_engine.SetItemAttrText(itemtype, itemkey,
1032: 'FND_FLEX_SEGMENT' || TO_CHAR(i),
1033: segment_array(i));
1034: --
1035: -- Debug