28: tempOrigSystems ame_util.stringList;
29: begin
30: /*
31: The engine only calls a handler if a rule requiring it exists, so we can assume that
32: the package variables that ame_engine.getHandlerRules initializes are nonempty.
33: */
34: ame_engine.getHandlerRules(ruleIdsOut => ruleIds,
35: approverCategoriesOut => approverCategories,
36: parametersOut => parameters,
30: /*
31: The engine only calls a handler if a rule requiring it exists, so we can assume that
32: the package variables that ame_engine.getHandlerRules initializes are nonempty.
33: */
34: ame_engine.getHandlerRules(ruleIdsOut => ruleIds,
35: approverCategoriesOut => approverCategories,
36: parametersOut => parameters,
37: parameterTwosOut => parameterTwos);
38: /* Initialize the source list. */
46: ame_util.stringListToIdList(stringListIn => parameters,
47: idListOut => groupIds);
48: /* Bug:4491715 when get configs we sort group ids so corresponding sources and categories
49: must also be sorted */
50: ame_engine.getApprovalGroupConfigs(groupIdsInOut => groupIds,
51: sourcesInOut => sources,
52: approverCategoriesInOut => approverCategories,
53: orderNumbersOut => groupOrderNumbers,
54: votingRegimesOut => votingRegimes);
55: /* Eliminate duplicate group-ID entries, possibly leaving the package-variable lists sparse. */
56: eliminateDuplicates;
57: /* Find the transaction allows empty approval groups or not */
58: allowEmptyGroups :=
59: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.allowEmptyGroupAttribute)
60: = ame_util.booleanAttributeTrue;
61: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
62: tempApprover.api_insertion := ame_util.oamGenerated;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
59: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.allowEmptyGroupAttribute)
60: = ame_util.booleanAttributeTrue;
61: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
62: tempApprover.api_insertion := ame_util.oamGenerated;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
60: = ame_util.booleanAttributeTrue;
61: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
62: tempApprover.api_insertion := ame_util.oamGenerated;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
61: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
62: tempApprover.api_insertion := ame_util.oamGenerated;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
62: tempApprover.api_insertion := ame_util.oamGenerated;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
70: tempApprover.action_type_order_number := ame_engine.getHandlerActionTypeOrderNum;
63: tempApprover.authority := ame_engine.getHandlerAuthority;
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
70: tempApprover.action_type_order_number := ame_engine.getHandlerActionTypeOrderNum;
71: /*
64: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
70: tempApprover.action_type_order_number := ame_engine.getHandlerActionTypeOrderNum;
71: /*
72: /*
65: tempApprover.item_class := ame_engine.getHandlerItemClassName;
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
70: tempApprover.action_type_order_number := ame_engine.getHandlerActionTypeOrderNum;
71: /*
72: /*
73: Now iterate through the sorted groups, adding their membership to the engine's
66: tempApprover.item_id := ame_engine.getHandlerItemId;
67: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
68: tempApprover.item_order_number := ame_engine.getHandlerItemOrderNumber;
69: tempApprover.sub_list_order_number := ame_engine.getHandlerSublistOrderNum;
70: tempApprover.action_type_order_number := ame_engine.getHandlerActionTypeOrderNum;
71: /*
72: /*
73: Now iterate through the sorted groups, adding their membership to the engine's
74: approver list in the group-member order dictated by the group's voting regime
82: tempApproverDisplayNames.delete;
83: tempOrigSystemIds.delete;
84: tempOrigSystems.delete;
85: /* Fetch the group's membership. */
86: ame_engine.getRuntimeGroupMembers(groupIdIn => groupIds(tempIndex),
87: approverNamesOut => tempApproverNames,
88: approverOrderNumbersOut => tempApproverOrderNumbers,
89: approverDisplayNamesOut => tempApproverDisplayNames,
90: origSystemIdsOut => tempOrigSystemIds,
103: tempApprover.orig_system_id := tempOrigSystemIds(i);
104: tempApprover.display_name := tempApproverDisplayNames(i);
105: tempApprover.approver_category := approverCategories(tempIndex);
106: tempApprover.group_or_chain_id := groupIds(tempIndex);
107: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
108: itemClassIn => tempApprover.item_class,
109: itemIdIn => tempApprover.item_id,
110: actionTypeIdIn => tempApprover.action_type_id,
111: groupOrChainIdIn => tempApprover.group_or_chain_id);
117: tempApprover.member_order_number := i;
118: else /* votingRegimes(i) in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
119: tempApprover.member_order_number := 1;
120: end if;
121: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
122: /*
123: The engine will set tempApprover.approver_order_number; leave them null here.
124: */
125: ame_engine.addApprover(approverIn => tempApprover);
121: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
122: /*
123: The engine will set tempApprover.approver_order_number; leave them null here.
124: */
125: ame_engine.addApprover(approverIn => tempApprover);
126: end loop;
127: tempIndex := groupIds.next(tempIndex);
128: end loop;
129: exception