76: end if;
77: return wf_engine_bulk.schema;
78: exception
79: when OTHERS then
80: Wf_Core.Context('Wf_Engine_Bulk', 'Current_Schema');
81: raise;
82: end Current_Schema;
83:
84: --
312: begin
313: -- Check Arguments
314: if ((itemtype is null) or
315: (aname is null)) then
316: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
317: Wf_Core.Token('ANAME', nvl(aname, 'NULL'));
318: Wf_Core.Raise('WFSQL_ARGS');
319:
320: end if;
313: -- Check Arguments
314: if ((itemtype is null) or
315: (aname is null)) then
316: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
317: Wf_Core.Token('ANAME', nvl(aname, 'NULL'));
318: Wf_Core.Raise('WFSQL_ARGS');
319:
320: end if;
321: If g_SuccessItems.count=0 then
314: if ((itemtype is null) or
315: (aname is null)) then
316: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
317: Wf_Core.Token('ANAME', nvl(aname, 'NULL'));
318: Wf_Core.Raise('WFSQL_ARGS');
319:
320: end if;
321: If g_SuccessItems.count=0 then
322: return;
392:
393: begin
394: -- Check Arguments
395: if (itemtype is null) then
396: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
397: Wf_Core.Raise('WFSQL_ARGS');
398: end if;
399:
400: if (anames.COUNT = 0 or avalues.COUNT = 0) then
393: begin
394: -- Check Arguments
395: if (itemtype is null) then
396: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
397: Wf_Core.Raise('WFSQL_ARGS');
398: end if;
399:
400: if (anames.COUNT = 0 or avalues.COUNT = 0) then
401: -- Do not do anything if index table is empty.
406: -- Raise an error if the two index tables do not end at the same index
407: -- or do not have the same number of elements.
408: g_failedItems:=itemkeys;
409: g_failedAttributes:=anames;
410: Wf_Core.Raise('WFENG_BLK_ITM_ATTRARR_MISMATCH');
411: end if;
412:
413: --If itemtype is on demand, we will insert default values if not exists already
414: if wf_item.Attribute_On_Demand(itemtype, itemkeys(itemkeys.FIRST)) then
498: end if; --sucessUpdates doesnot match item count
499:
500:
501: if g_failedItems.COUNT >0 then
502: WF_CORE.TOKEN('ITEMTYPE',itemtype);
503: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.count));
504: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
505: WF_CORE.Raise('WFENG_BULK_SETATTR');
506: end if;
499:
500:
501: if g_failedItems.COUNT >0 then
502: WF_CORE.TOKEN('ITEMTYPE',itemtype);
503: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.count));
504: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
505: WF_CORE.Raise('WFENG_BULK_SETATTR');
506: end if;
507:
500:
501: if g_failedItems.COUNT >0 then
502: WF_CORE.TOKEN('ITEMTYPE',itemtype);
503: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.count));
504: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
505: WF_CORE.Raise('WFENG_BULK_SETATTR');
506: end if;
507:
508: exception
501: if g_failedItems.COUNT >0 then
502: WF_CORE.TOKEN('ITEMTYPE',itemtype);
503: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.count));
504: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
505: WF_CORE.Raise('WFENG_BULK_SETATTR');
506: end if;
507:
508: exception
509: when others then
506: end if;
507:
508: exception
509: when others then
510: Wf_Core.Context('Wf_Engine_Bulk', 'SetItemAttrText', itemtype);
511: raise;
512: end SetItemAttrText;
513:
514:
539:
540: begin
541: -- Check Arguments
542: if (itemtype is null) then
543: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
544: Wf_Core.Raise('WFSQL_ARGS');
545:
546: elsif (anames.COUNT = 0 or avalues.COUNT = 0) then
547: -- Do not do anything if index table is empty.
540: begin
541: -- Check Arguments
542: if (itemtype is null) then
543: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
544: Wf_Core.Raise('WFSQL_ARGS');
545:
546: elsif (anames.COUNT = 0 or avalues.COUNT = 0) then
547: -- Do not do anything if index table is empty.
548: return;
552: -- Raise an error if the two index tables do not end at the same index
553: -- or do not have the same number of elements.
554: g_failedItems:=itemkeys;
555: g_failedAttributes:=anames;
556: Wf_Core.Raise('WFENG_BLK_ITM_ATTRARR_MISMATCH');
557: end if;
558: --If itemtype is on demand, we will insert default values if not exists already
559: if wf_item.Attribute_On_Demand(itemtype, itemkeys(itemkeys.FIRST)) then
560: begin
643: end if; --sucessUpdates doesnot match item count
644:
645: if g_failedItems.COUNT >0 then
646:
647: WF_CORE.TOKEN('ITEMTYPE',itemtype);
648: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
649: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
650: WF_CORE.Raise('WFENG_BULK_SETATTR');
651: end if;
644:
645: if g_failedItems.COUNT >0 then
646:
647: WF_CORE.TOKEN('ITEMTYPE',itemtype);
648: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
649: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
650: WF_CORE.Raise('WFENG_BULK_SETATTR');
651: end if;
652:
645: if g_failedItems.COUNT >0 then
646:
647: WF_CORE.TOKEN('ITEMTYPE',itemtype);
648: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
649: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
650: WF_CORE.Raise('WFENG_BULK_SETATTR');
651: end if;
652:
653: exception
646:
647: WF_CORE.TOKEN('ITEMTYPE',itemtype);
648: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
649: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
650: WF_CORE.Raise('WFENG_BULK_SETATTR');
651: end if;
652:
653: exception
654: when others then
651: end if;
652:
653: exception
654: when others then
655: Wf_Core.Context('Wf_Engine_Bulk', 'SetItemAttrNumber', itemtype);
656: raise;
657: end SetItemAttrNumber;
658:
659: --
685: begin
686:
687: -- Check Arguments
688: if (itemtype is null) then
689: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
690: Wf_Core.Raise('WFSQL_ARGS');
691:
692: elsif (anames.COUNT = 0 or avalues.COUNT = 0) then
693: -- Do not do anything if index table is empty.
686:
687: -- Check Arguments
688: if (itemtype is null) then
689: Wf_Core.Token('ITEMTYPE', nvl(itemtype, 'NULL'));
690: Wf_Core.Raise('WFSQL_ARGS');
691:
692: elsif (anames.COUNT = 0 or avalues.COUNT = 0) then
693: -- Do not do anything if index table is empty.
694: return;
698: -- Raise an error if the two index tables do not end at the same index
699: -- or do not have the same number of elements.
700: g_FailedItems:=itemkeys;
701: g_FailedAttributes:=anames;
702: Wf_Core.Raise('WFENG_BLK_ITM_ATTRARR_MISMATCH');
703: end if;
704: -- Reset the table of Failed Items and Failed Attributes
705: g_FailedItems.DELETE;
706: g_FailedAttributes.DELETE;
787: end if; --successUpdates count=0
788: end if; --sucessUpdates doesnot match item count
789:
790: if g_failedItems.COUNT >0 then
791: WF_CORE.TOKEN('ITEMTYPE',itemtype);
792: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
793: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
794: WF_CORE.Raise('WFENG_BULK_SETATTR');
795: end if;
788: end if; --sucessUpdates doesnot match item count
789:
790: if g_failedItems.COUNT >0 then
791: WF_CORE.TOKEN('ITEMTYPE',itemtype);
792: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
793: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
794: WF_CORE.Raise('WFENG_BULK_SETATTR');
795: end if;
796: exception
789:
790: if g_failedItems.COUNT >0 then
791: WF_CORE.TOKEN('ITEMTYPE',itemtype);
792: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
793: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
794: WF_CORE.Raise('WFENG_BULK_SETATTR');
795: end if;
796: exception
797: when others then
790: if g_failedItems.COUNT >0 then
791: WF_CORE.TOKEN('ITEMTYPE',itemtype);
792: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
793: WF_CORE.TOKEN('FAILED',to_char(g_FailedItems.COUNT));
794: WF_CORE.Raise('WFENG_BULK_SETATTR');
795: end if;
796: exception
797: when others then
798: Wf_Core.Context('Wf_Engine_Bulk', 'SetItemAttrDate', itemtype);
794: WF_CORE.Raise('WFENG_BULK_SETATTR');
795: end if;
796: exception
797: when others then
798: Wf_Core.Context('Wf_Engine_Bulk', 'SetItemAttrDate', itemtype);
799: raise;
800: end SetItemAttrDate;
801:
802: -- BulkCreateProcess (PUBLIC)
844:
845: begin
846: -- Argument validation
847: if (itemtype is null) then
848: Wf_Core.Token('ITEMTYPE', itemtype);
849: Wf_Core.Token('PROCESS', process);
850: Wf_Core.Raise('WFSQL_ARGS');
851: end if;
852: l_itemkeys:= itemkeys;
845: begin
846: -- Argument validation
847: if (itemtype is null) then
848: Wf_Core.Token('ITEMTYPE', itemtype);
849: Wf_Core.Token('PROCESS', process);
850: Wf_Core.Raise('WFSQL_ARGS');
851: end if;
852: l_itemkeys:= itemkeys;
853: l_user_keys:= user_keys;
846: -- Argument validation
847: if (itemtype is null) then
848: Wf_Core.Token('ITEMTYPE', itemtype);
849: Wf_Core.Token('PROCESS', process);
850: Wf_Core.Raise('WFSQL_ARGS');
851: end if;
852: l_itemkeys:= itemkeys;
853: l_user_keys:= user_keys;
854: l_owner_roles:= owner_roles;
876: if (root is null) then
877:
878: g_FailedItems:=l_itemkeys;
879:
880: Wf_Core.Token('TYPE', itemtype);
881: Wf_Core.Token('KEY', l_itemkeys.FIRST);
882: Wf_Core.Raise('WFENG_ITEM_ROOT_SELECTOR');
883: end if;
884: else
877:
878: g_FailedItems:=l_itemkeys;
879:
880: Wf_Core.Token('TYPE', itemtype);
881: Wf_Core.Token('KEY', l_itemkeys.FIRST);
882: Wf_Core.Raise('WFENG_ITEM_ROOT_SELECTOR');
883: end if;
884: else
885: root := process;
878: g_FailedItems:=l_itemkeys;
879:
880: Wf_Core.Token('TYPE', itemtype);
881: Wf_Core.Token('KEY', l_itemkeys.FIRST);
882: Wf_Core.Raise('WFENG_ITEM_ROOT_SELECTOR');
883: end if;
884: else
885: root := process;
886: end if;
895: if ((typ is null) or (typ <> wf_engine.eng_process)) then
896:
897: g_FailedItems:=l_itemkeys;
898:
899: Wf_Core.Token('TYPE', itemtype);
900: Wf_Core.Token('NAME', root);
901: Wf_Core.Raise('WFENG_PROCESS_NAME');
902: end if;
903:
896:
897: g_FailedItems:=l_itemkeys;
898:
899: Wf_Core.Token('TYPE', itemtype);
900: Wf_Core.Token('NAME', root);
901: Wf_Core.Raise('WFENG_PROCESS_NAME');
902: end if;
903:
904: -- Validate the root argument is runnable
897: g_FailedItems:=l_itemkeys;
898:
899: Wf_Core.Token('TYPE', itemtype);
900: Wf_Core.Token('NAME', root);
901: Wf_Core.Raise('WFENG_PROCESS_NAME');
902: end if;
903:
904: -- Validate the root argument is runnable
905:
919: exception
920: when no_data_found then
921: g_failedItems:=l_itemkeys;
922:
923: Wf_Core.Token('TYPE', itemtype);
924: Wf_Core.Token('NAME', root);
925: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
926: end ;
927: -- Check for the length of the parent_context if it is provided
920: when no_data_found then
921: g_failedItems:=l_itemkeys;
922:
923: Wf_Core.Token('TYPE', itemtype);
924: Wf_Core.Token('NAME', root);
925: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
926: end ;
927: -- Check for the length of the parent_context if it is provided
928: if (parent_context is NOT null and (length(parent_context) > 25)) then
921: g_failedItems:=l_itemkeys;
922:
923: Wf_Core.Token('TYPE', itemtype);
924: Wf_Core.Token('NAME', root);
925: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
926: end ;
927: -- Check for the length of the parent_context if it is provided
928: if (parent_context is NOT null and (length(parent_context) > 25)) then
929: g_failedItems:=l_itemkeys;
926: end ;
927: -- Check for the length of the parent_context if it is provided
928: if (parent_context is NOT null and (length(parent_context) > 25)) then
929: g_failedItems:=l_itemkeys;
930: WF_CORE.Token('LABEL', parent_context);
931: WF_CORE.Token('LENGTH', '25');
932: WF_CORE.Raise('WFENG_LABEL_TOO_LARGE');
933: end if;
934: -- Check for duplicate item. Not needed as BulkCreateItems would validate this
927: -- Check for the length of the parent_context if it is provided
928: if (parent_context is NOT null and (length(parent_context) > 25)) then
929: g_failedItems:=l_itemkeys;
930: WF_CORE.Token('LABEL', parent_context);
931: WF_CORE.Token('LENGTH', '25');
932: WF_CORE.Raise('WFENG_LABEL_TOO_LARGE');
933: end if;
934: -- Check for duplicate item. Not needed as BulkCreateItems would validate this
935:
928: if (parent_context is NOT null and (length(parent_context) > 25)) then
929: g_failedItems:=l_itemkeys;
930: WF_CORE.Token('LABEL', parent_context);
931: WF_CORE.Token('LENGTH', '25');
932: WF_CORE.Raise('WFENG_LABEL_TOO_LARGE');
933: end if;
934: -- Check for duplicate item. Not needed as BulkCreateItems would validate this
935:
936: -- Clear plsql cache first, just in case previous
959: -- Build the array of random numbers for monitor and access key attributes
960: schemaAttribute:=Wf_Engine_Bulk.Current_Schema;
961: if g_successItems.count>0 then
962: for arrInd in g_SuccessItems.first..g_SuccessItems.last loop
963: mon_random(arrInd) := Wf_Core.Random;
964: acc_random(arrInd) := Wf_Core.Random;
965:
966: end loop;
967: end if;
960: schemaAttribute:=Wf_Engine_Bulk.Current_Schema;
961: if g_successItems.count>0 then
962: for arrInd in g_SuccessItems.first..g_SuccessItems.last loop
963: mon_random(arrInd) := Wf_Core.Random;
964: acc_random(arrInd) := Wf_Core.Random;
965:
966: end loop;
967: end if;
968: -- Create monitor access key attributes
1068:
1069: g_successItems:=l_itemKeys;
1070: --finally raise exception if the FailedItems table is non-empty
1071: if g_FailedItems.COUNT>0 then
1072: WF_CORE.Token('TYPE',itemtype);
1073: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1074: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1075: WF_CORE.RAISE('WFENG_BULK_OPER');
1076: end if;
1069: g_successItems:=l_itemKeys;
1070: --finally raise exception if the FailedItems table is non-empty
1071: if g_FailedItems.COUNT>0 then
1072: WF_CORE.Token('TYPE',itemtype);
1073: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1074: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1075: WF_CORE.RAISE('WFENG_BULK_OPER');
1076: end if;
1077:
1070: --finally raise exception if the FailedItems table is non-empty
1071: if g_FailedItems.COUNT>0 then
1072: WF_CORE.Token('TYPE',itemtype);
1073: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1074: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1075: WF_CORE.RAISE('WFENG_BULK_OPER');
1076: end if;
1077:
1078: exception
1071: if g_FailedItems.COUNT>0 then
1072: WF_CORE.Token('TYPE',itemtype);
1073: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1074: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1075: WF_CORE.RAISE('WFENG_BULK_OPER');
1076: end if;
1077:
1078: exception
1079: when others then
1076: end if;
1077:
1078: exception
1079: when others then
1080: Wf_Core.Context('Wf_Engine_Bulk', 'CreateProcess', itemtype, process);
1081: raise;
1082: end CreateProcess;
1083:
1084: ----------------------------------------------------------------
1183: and WI.ITEM_KEY = l_itemkeys(1);
1184: exception
1185: when no_Data_found then
1186: g_FailedItems:=l_itemkeys;
1187: Wf_Core.Token('TYPE', itemtype);
1188: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1189: Wf_Core.Raise('WFENG_ITEM');
1190:
1191: end;
1184: exception
1185: when no_Data_found then
1186: g_FailedItems:=l_itemkeys;
1187: Wf_Core.Token('TYPE', itemtype);
1188: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1189: Wf_Core.Raise('WFENG_ITEM');
1190:
1191: end;
1192:
1185: when no_Data_found then
1186: g_FailedItems:=l_itemkeys;
1187: Wf_Core.Token('TYPE', itemtype);
1188: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1189: Wf_Core.Raise('WFENG_ITEM');
1190:
1191: end;
1192:
1193: -- Get the id of the process root.
1196: if (processid is null) then
1197:
1198: g_FailedItems:=itemkeys;
1199:
1200: Wf_Core.Token('TYPE', itemtype);
1201: Wf_Core.Token('NAME', process);
1202: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1203: end if;
1204:
1197:
1198: g_FailedItems:=itemkeys;
1199:
1200: Wf_Core.Token('TYPE', itemtype);
1201: Wf_Core.Token('NAME', process);
1202: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1203: end if;
1204:
1205:
1198: g_FailedItems:=itemkeys;
1199:
1200: Wf_Core.Token('TYPE', itemtype);
1201: Wf_Core.Token('NAME', process);
1202: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1203: end if;
1204:
1205:
1206: --increment the execution time counter value
1382:
1383: --depending on the activity function, enqueue on the proper queue.
1384:
1385: if l_itemkeys.COUNT <=0 then
1386: WF_CORE.Token('TYPE',itemtype);
1387: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1388: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
1389: WF_CORE.RAISE('WFENG_BULK_OPER');
1390: exit;
1383: --depending on the activity function, enqueue on the proper queue.
1384:
1385: if l_itemkeys.COUNT <=0 then
1386: WF_CORE.Token('TYPE',itemtype);
1387: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1388: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
1389: WF_CORE.RAISE('WFENG_BULK_OPER');
1390: exit;
1391: end if;
1384:
1385: if l_itemkeys.COUNT <=0 then
1386: WF_CORE.Token('TYPE',itemtype);
1387: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1388: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
1389: WF_CORE.RAISE('WFENG_BULK_OPER');
1390: exit;
1391: end if;
1392:
1385: if l_itemkeys.COUNT <=0 then
1386: WF_CORE.Token('TYPE',itemtype);
1387: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1388: WF_CORE.TOKEN('TOTAL',to_char(itemkeys.COUNT));
1389: WF_CORE.RAISE('WFENG_BULK_OPER');
1390: exit;
1391: end if;
1392:
1393: --reset the duedate, msgid tables
1417: ignore_notfound=>TRUE);
1418: end if;
1419: exception
1420: when others then
1421: if (wf_core.error_name = 'WFENG_ACTIVITY_ATTR') then
1422: -- No #TIMEOUT attr means no timeout
1423: wf_core.clear;
1424: duedate:= null;
1425: end if;
1419: exception
1420: when others then
1421: if (wf_core.error_name = 'WFENG_ACTIVITY_ATTR') then
1422: -- No #TIMEOUT attr means no timeout
1423: wf_core.clear;
1424: duedate:= null;
1425: end if;
1426: end;
1427:
1557: -- Report an error if no start activities can be found.
1558: if (i = 0) then
1559:
1560: g_FailedItems:=itemkeys;
1561: Wf_Core.Token('PROCESS', process);
1562: Wf_Core.Raise('WFENG_NO_START');
1563: end if;
1564: g_successItems:=l_ItemKeys;
1565: -- Report Error if Failure has occured for some item keys
1558: if (i = 0) then
1559:
1560: g_FailedItems:=itemkeys;
1561: Wf_Core.Token('PROCESS', process);
1562: Wf_Core.Raise('WFENG_NO_START');
1563: end if;
1564: g_successItems:=l_ItemKeys;
1565: -- Report Error if Failure has occured for some item keys
1566: if g_failedItems.COUNT>0 then
1563: end if;
1564: g_successItems:=l_ItemKeys;
1565: -- Report Error if Failure has occured for some item keys
1566: if g_failedItems.COUNT>0 then
1567: WF_CORE.Token('TYPE',itemtype);
1568: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1569: WF_CORE.TOKEN('TOTAL',to_char(g_successItems.COUNT));
1570: WF_CORE.RAISE('WFENG_BULK_OPER');
1571: end if;
1564: g_successItems:=l_ItemKeys;
1565: -- Report Error if Failure has occured for some item keys
1566: if g_failedItems.COUNT>0 then
1567: WF_CORE.Token('TYPE',itemtype);
1568: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1569: WF_CORE.TOKEN('TOTAL',to_char(g_successItems.COUNT));
1570: WF_CORE.RAISE('WFENG_BULK_OPER');
1571: end if;
1572: exception
1565: -- Report Error if Failure has occured for some item keys
1566: if g_failedItems.COUNT>0 then
1567: WF_CORE.Token('TYPE',itemtype);
1568: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1569: WF_CORE.TOKEN('TOTAL',to_char(g_successItems.COUNT));
1570: WF_CORE.RAISE('WFENG_BULK_OPER');
1571: end if;
1572: exception
1573: when others then
1566: if g_failedItems.COUNT>0 then
1567: WF_CORE.Token('TYPE',itemtype);
1568: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1569: WF_CORE.TOKEN('TOTAL',to_char(g_successItems.COUNT));
1570: WF_CORE.RAISE('WFENG_BULK_OPER');
1571: end if;
1572: exception
1573: when others then
1574: Wf_Core.Context('Wf_Engine_Bulk','StartProcess',
1570: WF_CORE.RAISE('WFENG_BULK_OPER');
1571: end if;
1572: exception
1573: when others then
1574: Wf_Core.Context('Wf_Engine_Bulk','StartProcess',
1575: itemtype);
1576: raise;
1577: end StartProcess;
1578:
1652: if activityStatus is not null then
1653: if activityStatus <> 'DEFERRED' and activityStatus <> 'NOTIFIED' then
1654: --raise error
1655: g_failedItems:=itemkeys;
1656: WF_CORE.RAISE('WFENG_INVALID_ACT_STATUS');
1657: end if;
1658: end if;
1659:
1660: -- initialize the itemkeys list
1667: when others then
1668:
1669: if g_failedItems.COUNT>0 then
1670:
1671: wf_core.clear;
1672: l_itemkeys:=g_SuccessItems;
1673: end if;
1674: end;
1675: if l_itemkeys.count<=0 then
1672: l_itemkeys:=g_SuccessItems;
1673: end if;
1674: end;
1675: if l_itemkeys.count<=0 then
1676: WF_CORE.Token('TYPE',itemtype);
1677: WF_CORE.Token('FAILED',to_char(itemkeys.count));
1678: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1679: WF_CORE.RAISE('WFENG_BULK_OPER');
1680: end if;
1673: end if;
1674: end;
1675: if l_itemkeys.count<=0 then
1676: WF_CORE.Token('TYPE',itemtype);
1677: WF_CORE.Token('FAILED',to_char(itemkeys.count));
1678: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1679: WF_CORE.RAISE('WFENG_BULK_OPER');
1680: end if;
1681: --clear the successful items table
1674: end;
1675: if l_itemkeys.count<=0 then
1676: WF_CORE.Token('TYPE',itemtype);
1677: WF_CORE.Token('FAILED',to_char(itemkeys.count));
1678: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1679: WF_CORE.RAISE('WFENG_BULK_OPER');
1680: end if;
1681: --clear the successful items table
1682: g_SuccessItems.DELETE;
1675: if l_itemkeys.count<=0 then
1676: WF_CORE.Token('TYPE',itemtype);
1677: WF_CORE.Token('FAILED',to_char(itemkeys.count));
1678: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1679: WF_CORE.RAISE('WFENG_BULK_OPER');
1680: end if;
1681: --clear the successful items table
1682: g_SuccessItems.DELETE;
1683:
1696: when no_Data_found then
1697:
1698: g_FailedItems:=l_itemkeys;
1699:
1700: Wf_Core.Token('TYPE', itemtype);
1701: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1702: Wf_Core.Raise('WFENG_ITEM');
1703: end;
1704:
1697:
1698: g_FailedItems:=l_itemkeys;
1699:
1700: Wf_Core.Token('TYPE', itemtype);
1701: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1702: Wf_Core.Raise('WFENG_ITEM');
1703: end;
1704:
1705:
1698: g_FailedItems:=l_itemkeys;
1699:
1700: Wf_Core.Token('TYPE', itemtype);
1701: Wf_Core.Token('KEY', l_itemkeys.FIRST);
1702: Wf_Core.Raise('WFENG_ITEM');
1703: end;
1704:
1705:
1706: -- Get the id of the process root.
1710: if (processid is null) then
1711:
1712: g_FailedItems:=itemkeys;
1713:
1714: Wf_Core.Token('TYPE', itemtype);
1715: Wf_Core.Token('NAME', process);
1716: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1717: end if;
1718:
1711:
1712: g_FailedItems:=itemkeys;
1713:
1714: Wf_Core.Token('TYPE', itemtype);
1715: Wf_Core.Token('NAME', process);
1716: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1717: end if;
1718:
1719:
1712: g_FailedItems:=itemkeys;
1713:
1714: Wf_Core.Token('TYPE', itemtype);
1715: Wf_Core.Token('NAME', process);
1716: Wf_Core.Raise('WFENG_PROCESS_RUNNABLE');
1717: end if;
1718:
1719:
1720:
1734: When no_data_found then
1735:
1736: g_FailedItems:=itemkeys;
1737:
1738: WF_CORE.Token('ACTIVITY',activity);
1739: WF_CORE.Token('ITEMTYPE',itemtype);
1740: WF_CORE.Token('PROCESS',process);
1741: WF_CORE.Raise('ACTIVITY_NOT_FOUND');
1742: End;
1735:
1736: g_FailedItems:=itemkeys;
1737:
1738: WF_CORE.Token('ACTIVITY',activity);
1739: WF_CORE.Token('ITEMTYPE',itemtype);
1740: WF_CORE.Token('PROCESS',process);
1741: WF_CORE.Raise('ACTIVITY_NOT_FOUND');
1742: End;
1743:
1736: g_FailedItems:=itemkeys;
1737:
1738: WF_CORE.Token('ACTIVITY',activity);
1739: WF_CORE.Token('ITEMTYPE',itemtype);
1740: WF_CORE.Token('PROCESS',process);
1741: WF_CORE.Raise('ACTIVITY_NOT_FOUND');
1742: End;
1743:
1744: -- insert the process into the item activity statuses table
1737:
1738: WF_CORE.Token('ACTIVITY',activity);
1739: WF_CORE.Token('ITEMTYPE',itemtype);
1740: WF_CORE.Token('PROCESS',process);
1741: WF_CORE.Raise('ACTIVITY_NOT_FOUND');
1742: End;
1743:
1744: -- insert the process into the item activity statuses table
1745:
1805: if l_itemkeys.COUNT <=0 then
1806:
1807: g_FailedItems:=itemkeys;
1808:
1809: WF_CORE.Token('TYPE',itemtype);
1810: WF_CORE.Token('FAILED', to_char(g_FailedItems.count));
1811: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1812: WF_CORE.RAISE('WFENG_BULK_OPER');
1813: return;
1806:
1807: g_FailedItems:=itemkeys;
1808:
1809: WF_CORE.Token('TYPE',itemtype);
1810: WF_CORE.Token('FAILED', to_char(g_FailedItems.count));
1811: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1812: WF_CORE.RAISE('WFENG_BULK_OPER');
1813: return;
1814: end if;
1807: g_FailedItems:=itemkeys;
1808:
1809: WF_CORE.Token('TYPE',itemtype);
1810: WF_CORE.Token('FAILED', to_char(g_FailedItems.count));
1811: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1812: WF_CORE.RAISE('WFENG_BULK_OPER');
1813: return;
1814: end if;
1815:
1808:
1809: WF_CORE.Token('TYPE',itemtype);
1810: WF_CORE.Token('FAILED', to_char(g_FailedItems.count));
1811: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.count));
1812: WF_CORE.RAISE('WFENG_BULK_OPER');
1813: return;
1814: end if;
1815:
1816: --reset the duedate, msgid tables
1842: ignore_notfound=>TRUE);
1843: end if;
1844: exception
1845: when others then
1846: if (wf_core.error_name = 'WFENG_ACTIVITY_ATTR') then
1847: -- No #TIMEOUT attr means no timeout
1848: wf_core.clear;
1849: duedate:= null;
1850: end if;
1844: exception
1845: when others then
1846: if (wf_core.error_name = 'WFENG_ACTIVITY_ATTR') then
1847: -- No #TIMEOUT attr means no timeout
1848: wf_core.clear;
1849: duedate:= null;
1850: end if;
1851: end;
1852:
1978: g_SuccessItems:=l_itemkeys;
1979:
1980: -- Report Error if Failure has occured for some item key
1981: if g_failedItems.COUNT>0 then
1982: WF_CORE.Token('TYPE',itemtype);
1983: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1984: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1985: WF_CORE.RAISE('WFENG_BULK_OPER');
1986: end if;
1979:
1980: -- Report Error if Failure has occured for some item key
1981: if g_failedItems.COUNT>0 then
1982: WF_CORE.Token('TYPE',itemtype);
1983: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1984: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1985: WF_CORE.RAISE('WFENG_BULK_OPER');
1986: end if;
1987: exception
1980: -- Report Error if Failure has occured for some item key
1981: if g_failedItems.COUNT>0 then
1982: WF_CORE.Token('TYPE',itemtype);
1983: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1984: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1985: WF_CORE.RAISE('WFENG_BULK_OPER');
1986: end if;
1987: exception
1988: when others then
1981: if g_failedItems.COUNT>0 then
1982: WF_CORE.Token('TYPE',itemtype);
1983: WF_CORE.Token('FAILED',to_char(g_FailedItems.count));
1984: WF_CORE.TOKEN('TOTAL', to_char(itemkeys.COUNT));
1985: WF_CORE.RAISE('WFENG_BULK_OPER');
1986: end if;
1987: exception
1988: when others then
1989: Wf_Core.Context('Wf_Engine_Bulk','FastForward',
1985: WF_CORE.RAISE('WFENG_BULK_OPER');
1986: end if;
1987: exception
1988: when others then
1989: Wf_Core.Context('Wf_Engine_Bulk','FastForward',
1990: Itemtype,process,activity);
1991: raise;
1992:
1993: