DBA Data[Home] [Help]

PACKAGE BODY: APPS.AME_TEST_UTILITY_PKG

Source


1 package body ame_test_utility_pkg as
2 /* $Header: ametestutility.pkb 120.4.12010000.2 2008/08/05 05:15:44 ubhat ship $ */
3 --+
4 function isValidApprover(attributeIdIn    in  number
5                         ,attributeValueIn in  varchar2)
6   return varchar2 as
7   approverTypeId number;
8   approverName   wf_roles.display_name%type;
9   begin
10     approverTypeId := ame_attribute_pkg.getApproverTypeId
11                         (attributeIdIn => attributeIdIn);
12     if(approverTypeId is not null and attributeValueIn is not null)
13     then
14       approverName := AME_APPROVER_TYPE_PKG.getWfRolesName
15                         (origSystemIn       => approverTypeId
16                         ,origSystemIdIn     => attributeValueIn
17                         ,raiseNoDataFoundIn => 'true');
18     end if;
19     return '';
20   exception
21     when others then
22       ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
23                                     routineNameIn => 'isValidApprover',
24                                     exceptionNumberIn => sqlcode,
25                                     exceptionStringIn => sqlerrm);
26       return sqlerrm || ' ';
27   end;
28 --+
29   function getActionTypeName(actionTypeIdIn in integer) return varchar2 as
30     actionTypeName ame_action_types_vl.user_action_type_name%type;
31     begin
32        if (actionTypeIdIn = -1) then
33         return ame_util.getMessage('PER','AME_400637_TEXT_NONE');
34         end if;
35       select user_action_type_name
36         into actionTypeName
37         from ame_action_types_vl
38        where action_type_id = actionTypeIdIn
39          and sysdate between start_date
40               and nvl(end_date - ame_util.oneSecond, sysdate);
41        return actionTypeName;
42      exception
43        when others then
44          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
45                                     routineNameIn => 'getActionTypeName',
46                                     exceptionNumberIn => sqlcode,
47                                     exceptionStringIn => sqlerrm);
48        raise;
49        return actionTypeName;
50     end getActionTypeName;
51 --+
52   function getApproverGroupName(groupIdIn in integer) return varchar2 as
53     actionTypeName ame_action_types_vl.user_action_type_name%type;
54     begin
55       select user_approval_group_name
56         into actionTypeName
57         from ame_approval_groups_vl
58        where approval_group_id = groupIdIn
59          and sysdate between start_date and nvl(end_date - ame_util.oneSecond, sysdate);
60        return actionTypeName;
61       exception
62        when others then
63          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
64                                     routineNameIn => 'getApproverGroupName',
65                                     exceptionNumberIn => sqlcode,
66                                     exceptionStringIn => sqlerrm);
67        raise;
68        return actionTypeName;
69     end getApproverGroupName;
70 --+
71   function getApprovalStatusDesc(statusIn in varchar2) return varchar2 as
72     approvalStatusDesc fnd_lookups.meaning%type;
73     begin
74        return statusIn;
75        exception
76        when others then
77          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
78                                     routineNameIn => 'getApprovalStatusDesc',
79                                     exceptionNumberIn => sqlcode,
80                                     exceptionStringIn => sqlerrm);
81        raise;
82        return statusIn;
83     end getApprovalStatusDesc;
84 --+
85   function getApprovalCategoryDesc(categoryIn in varchar2) return varchar2 as
86     approvalCategoryDesc fnd_lookups.meaning%type;
87     begin
88       select meaning
89         into approvalCategoryDesc
90         from fnd_lookups fl
91        where fl.lookup_type = 'AME_APPROVER_CATEGORY'
92          and fl.enabled_flag = 'Y'
93          and fl.lookup_code = categoryIn
94          and trunc(sysdate) between start_date_active
95               and nvl(end_date_active, trunc(sysdate));
96        return approvalCategoryDesc;
97     exception
98       when no_data_found then
99         return null;
100       when others then
101        ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
102                                     routineNameIn => 'getApprovalCategoryDesc',
103                                     exceptionNumberIn => sqlcode,
104                                     exceptionStringIn => sqlerrm);
105        raise;
106        return approvalCategoryDesc;
107     end getApprovalCategoryDesc;
108 --+
109   function getAuthorityDesc(authorityIn in varchar2) return varchar2 as
110     authorityDesc fnd_lookups.meaning%type;
111     begin
112       select meaning
113         into authorityDesc
114         from fnd_lookups fl
115        where fl.lookup_type = 'AME_SUBLIST_TYPES'
116          and fl.enabled_flag = 'Y'
117          and fl.lookup_code = authorityIn
118          and trunc(sysdate) between start_date_active
119               and nvl(end_date_active, trunc(sysdate));
120        return(authorityDesc);
121      exception
122        when others then
123          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
124                                     routineNameIn => 'getAuthorityDesc',
125                                     exceptionNumberIn => sqlcode,
126                                     exceptionStringIn => sqlerrm);
127        raise;
128        return 'Not a valid';
129     end getAuthorityDesc;
130 --+
131   function getApiInsertionDesc(apiInsertionIn in varchar2) return varchar2 as
132     apiInsertionDesc fnd_lookups.meaning%type;
133     begin
134        return apiInsertionIn;
135     exception
136        when others then
137          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
138                                     routineNameIn => 'getApiInsertionDesc',
139                                     exceptionNumberIn => sqlcode,
140                                     exceptionStringIn => sqlerrm);
141        raise;
142        return apiInsertionIn;
143     end getApiInsertionDesc;
144 --+
145   function getOrigSystemDesc(origSystemIn in varchar2) return varchar2 as
146     origSystemDesc fnd_lookups.meaning%type;
147     begin
148       select meaning
149         into origSystemDesc
150         from fnd_lookups fl
151        where fl.lookup_type = 'FND_WF_ORIG_SYSTEMS'
152          and fl.lookup_code = origSystemIn
153          and trunc(sysdate) between start_date_active
154               and nvl(end_date_active, trunc(sysdate));
155        return origSystemDesc;
156      exception
157        when others then
158          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
159                                    routineNameIn => 'getOrigSystemDesc',
160                                    exceptionNumberIn => sqlcode,
161                                    exceptionStringIn => sqlerrm);
162          raise;
163        return origSystemDesc;
164     end getOrigSystemDesc;
165 --+
166   function getRuleTypeDesc(ruleTypeIn in varchar2) return varchar2 as
167     ruleTypeDesc fnd_lookups.meaning%type;
168     begin
169       select meaning
170         into ruleTypeDesc
171         from fnd_lookups fl
172        where fl.lookup_type = 'AME_RULE_TYPE'
173          and fl.enabled_flag = 'Y'
174          and fl.lookup_code = ruleTypeIn
175          and trunc(sysdate) between start_date_active
176               and nvl(end_date_active, trunc(sysdate));
177        return ruleTypeDesc;
178        exception
179        when others then
180          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
181                                    routineNameIn => 'getRuleTypeDesc',
182                                    exceptionNumberIn => sqlcode,
183                                    exceptionStringIn => sqlerrm);
184          raise;
185          return ruleTypeDesc;
186     end getRuleTypeDesc;
187 --+
188   function getRuleType(ruleIdIn in integer
189                       ,effectiveDateIn in date) return varchar2 as
190     ruleTypeCode varchar2(1);
191     ruleTypeDesc fnd_lookups.meaning%type;
192     begin
193       select rule_type
194         into ruleTypeCode
195         from ame_rules
196        where rule_id = ruleIdIn
197          and effectiveDateIn between start_date
198               and nvl(end_date - ame_util.oneSecond, sysdate);
199       return getApprovalCategoryDesc(ruleTypeCode);
200       exception
201        when others then
202          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
203                                     routineNameIn => 'getRuleType',
204                                     exceptionNumberIn => sqlcode,
205                                     exceptionStringIn => sqlerrm);
206          raise;
207          return getApprovalCategoryDesc(ruleTypeCode);
208     end getRuleType;
209 --+
210   function getRuleCategory(ruleIdIn        in integer
211                           ,applicationIdIn in integer
212                           ,effectiveDateIn in date) return varchar2 as
213     categoryCode varchar2(1);
214     cagegoryDesc fnd_lookups.meaning%type;
215     begin
216       begin
217       select approver_category
218         into categoryCode
219         from ame_rule_usages
220        where rule_id = ruleIdIn
221          and item_id = applicationIdIn
222          and effectiveDateIn between start_date
223            and nvl(end_date - ame_util.oneSecond, sysdate);
224       exception
225         when no_data_found then
226           categoryCode := 'A';
227       end;
228       return getApprovalCategoryDesc(categoryCode);
229       exception
230        when others then
231       ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
232                                     routineNameIn => 'getRuleCategory',
233                                     exceptionNumberIn => sqlcode,
234                                     exceptionStringIn => sqlerrm);
235        raise;
236        return null;
237     end getRuleCategory;
238 --+
239   function getConditionsList(ruleIdIn        in integer
240                             ,effectiveDateIn   in date) return varchar2 as
241     cursor getCondtitionsCursor(ruleIdIn        in integer
242                                ,effectiveDateIn in date) is
243       select condition_id
244         from ame_condition_usages
245        where rule_id = ruleIdIn
246          and effectiveDateIn between start_date
247            and nvl(end_date - ame_util.oneSecond, sysdate);
248     conditionsList  ame_util.longestStringType;
249     conditionIdList ame_util.idList;
250     begin
251       open getCondtitionsCursor(ruleIdIn => ruleIdIn
252                         ,effectiveDateIn => effectiveDateIn);
253       fetch getCondtitionsCursor bulk collect
254         into conditionIdList;
255       close getCondtitionsCursor;
256       for x in 1 .. conditionIdList.count loop
257         if x > 1 then
258           conditionsList := conditionsList || fnd_global.local_chr(ascii_chr => 13);
259         end if;
260         conditionsList := conditionsList
261                           || ame_utility_pkg.get_condition_description(p_condition_id => conditionIdList(x));
262       end loop;
263       return conditionsList;
264     exception
265        when others then
266          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
267                                    routineNameIn => 'getConditionsList',
268                                    exceptionNumberIn => sqlcode,
269                                    exceptionStringIn => sqlerrm);
270          raise;
271          return null;
272     end getConditionsList;
273 --+
274 function getItemClassNameById(itemClassIdIn in integer) return varchar2 as
275     itemName ame_item_classes.name%type;
276     begin
277      select user_item_class_name
278        into itemName
279         from ame_item_classes_vl
280          where item_class_id = itemClassIdIn and
281           sysdate between start_date and
282             nvl(end_date - ame_util.oneSecond, sysdate) ;
283        return(itemName);
284       exception
285         when others then
286           rollback;
287             ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
288                                    routineNameIn => 'getItemClassNameById',
289                                    exceptionNumberIn => sqlcode,
290                                    exceptionStringIn => sqlerrm);
291               raise;
292          return null;
293     end getItemClassNameById;
294 --+
295  function getItemClassName(itemClassNameIn in varchar2) return varchar2 as
296     itemName ame_item_classes.name%type;
297     begin
298      select user_item_class_name
299        into itemName
300         from ame_item_classes_vl
301          where trim(name) = trim(itemClassNameIn) and
302           sysdate between start_date and
303             nvl(end_date - ame_util.oneSecond, sysdate) ;
304        return(itemName);
305       exception
306         when others then
307             ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
308                                    routineNameIn => 'getItemClassName',
309                                    exceptionNumberIn => sqlcode,
310                                    exceptionStringIn => sqlerrm);
311               raise;
312          return null;
313     end getItemClassName;
314 --+
315   function getActionsList(ruleIdIn          in integer
316                          ,effectiveDateIn   in date) return varchar2 as
317     cursor getActionsCursor(ruleIdIn        in integer
318                            ,effectiveDateIn in date) is
319       select action_id
320         from ame_action_usages
321        where rule_id = ruleIdIn
322          and effectiveDateIn between start_date
323            and nvl(end_date - ame_util.oneSecond, sysdate);
324     actionsList  ame_util.longestStringType;
325     actionIdList ame_util.idList;
326     begin
327       open getActionsCursor(ruleIdIn => ruleIdIn
328                         ,effectiveDateIn => effectiveDateIn);
329       fetch getActionsCursor bulk collect
330         into actionIdList;
331       close getActionsCursor;
332       for x in 1 .. actionIdList.count loop
333         if x <> 1 then
334           actionsList := actionsList || fnd_global.local_chr(ascii_chr => 13);
335         end if;
336         actionsList := actionsList
337                     || ame_utility_pkg.get_action_description(p_action_id => actionIdList(x));
338       end loop;
339       return actionsList;
340      exception
341        when others then
342          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
343                                    routineNameIn => 'getActionsList',
344                                    exceptionNumberIn => sqlcode,
345                                    exceptionStringIn => sqlerrm);
346          raise;
347          return null;
348     end getActionsList;
349 --+
350   function getRuleDescription(ruleIdIn in integer,effectiveRuleDate in date) return varchar2 as
351     ruleDesc ame_rules_vl.description%type;
352     begin
353       select description
354         into ruleDesc
355         from ame_rules_vl
356        where rule_id = ruleIdIn
357          and  effectiveRuleDate between start_date
358               and nvl(end_date - ame_util.oneSecond, sysdate);
359       return ruleDesc;
360       exception
361        when others then
362          ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
363                                    routineNameIn => 'getRuleDescription',
364                                    exceptionNumberIn => sqlcode,
365                                    exceptionStringIn => sqlerrm);
366          raise;
367          return null;
368     end getRuleDescription;
369 --+
370   function getSourceDesc(sourceIn in varchar2, effectiveRuleDate in date) return varchar2 as
371     sourceDesc ame_util.longestStringType;
372     ruleIdList ame_util.idList;
373     sourceDescription ame_util.stringType;
374     begin
375       ame_util.parseSourceValue(sourceValueIn => sourceIn
376                                ,sourceDescriptionOut => sourceDescription
377                                ,ruleIdListOut => ruleIdList);
378       for x in 1 .. ruleIdList.count loop
379         if x > 1 then
380           sourceDesc := sourceDesc || fnd_global.local_chr(ascii_chr => 13);
381         end if;
382         sourceDesc := sourceDesc || getRuleDescription(ruleIdList(x),effectiveRuleDate);
383       end loop;
384       return sourceDesc;
385     exception
386       when others then
387         ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
388                                   routineNameIn => 'getSourceDesc',
389                                   exceptionNumberIn => sqlcode,
390                                   exceptionStringIn => sqlerrm);
391          raise;
392          return null;
393     end getSourceDesc;
394 --+
395 function isAttributesExist(applicationIdIn      in        number
396                           ,itemClassIdIn        in        number)
397   return varchar2 as
398   retValue   varchar2(10) := 'Disabled';
399   atrCount   number;
400   begin
401     select count(1)
402       into atrCount
403       from ame_attributes,
404            ame_attribute_usages
405      where ame_attribute_usages.attribute_id = ame_attributes.attribute_id
406        and ame_attribute_usages.application_id = applicationIdIn
407        and ame_attributes.item_class_id = itemClassIdIn
408        and sysdate between ame_attribute_usages.start_date and
409              nvl(ame_attribute_usages.end_date - ame_util.oneSecond,sysdate)
410        and sysdate between ame_attributes.start_date and
411              nvl(ame_attributes.end_date - ame_util.oneSecond,sysdate);
412     if(atrCount > 0) then
413       retValue := 'Enabled';
414     end if;
415     return retValue;
416     exception
417       When others then
418         ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
419                                   routineNameIn => 'isAttributesExist',
420                                   exceptionNumberIn => sqlcode,
421                                   exceptionStringIn => sqlerrm);
422         raise;
423         return retValue;
424   end isAttributesExist;
425   --+
426 /*************************************************************************************
427   procedures
428 *************************************************************************************/
429 procedure setErrorMessage(attributeNameIn       in varchar2
430                          ,attributeItemTypeIn   in varchar2
431                          ,itemClassIdIn         in number   default null
432                          ,itemIdIn              in varchar2 default null
433                          ,approverTypeIdIn      in number   default null) is
434  itemClassName  varchar2(100);
435 begin
436  if attributeItemTypeIn = 'MANDATORY_ATTR' then
437    fnd_message.set_name('PER','AME_400824_INV_MAND_ATTR_USG');
438    fnd_message.set_token('ATTRIBUTE_NAME',attributeNameIn);
439    hr_multi_message.add (p_associated_column1 => 'ATTR_NAME'
440                          , p_message_type  => hr_multi_message.g_warning_msg);
441  elsif attributeItemTypeIn = 'HEADER_ATTR' then
442    if approverTypeIdIn is not null then
443      fnd_message.set_name('PER','AME_400821_INVAL_APR_ATTR_USG');
444      fnd_message.set_token('ATTRIBUTE_NAME',attributeNameIn);
445      hr_multi_message.add (p_associated_column1 => 'ATTR_NAME');
446    else
447      fnd_message.set_name('PER','AME_400820_INVAL_HDR_ATTR_USG');
448      fnd_message.set_token('ATTRIBUTE_NAME',attributeNameIn);
449      hr_multi_message.add (p_associated_column1 => 'ATTR_NAME'
450                           , p_message_type  => hr_multi_message.g_warning_msg);
451    end if;
452  else
453    itemClassName := getItemClassNameById(itemClassIdIn=> itemClassIdIn);
454    if approverTypeIdIn is not null then
455      fnd_message.set_name('PER','AME_400823_INV_APR_LN_ATR_USG');
456      fnd_message.set_token('ATTRIBUTE_NAME',attributeNameIn);
457      fnd_message.set_token('ITEM_ID',itemIdIn);
458      fnd_message.set_token('ITEM_CLASS',itemClassName);
459      hr_multi_message.add (p_associated_column1 => 'ATTR_NAME');
460    else
461      fnd_message.set_name('PER','AME_400822_INVAL_LNE_ATTR_USG');
462      fnd_message.set_token('ATTRIBUTE_NAME',attributeNameIn);
463      fnd_message.set_token('ITEM_ID',itemIdIn);
464      fnd_message.set_token('ITEM_CLASS',itemClassName);
465      hr_multi_message.add (p_associated_column1 => 'ATTR_NAME'
466                           ,p_message_type  => hr_multi_message.g_warning_msg
467                           );
468    end if;
469  end if;
470 end setErrorMessage;
471 
472 function checkConversionError(attributeNameIn     in varchar2
473                              ,attributeItemTypeIn in varchar2
474                              ,attributeValue1In   in varchar2
475                              ,attributeValue2In   in varchar2 default null
476                              ,attributeValue3In   in varchar2 default null
477                              ,attributeTypeIn     in varchar2
478                              ,approverTypeIdIn    in number   default null
479                              ,itemClassIdIn       in number   default null
480                              ,itemIdIn            in varchar2 default null
481                               ) return varchar2 is
482   dummy_num       number;
483   dummy_date      date;
484   dummy_curr_code boolean := true;
485   dummy_conv_type boolean := true ;
486  begin
487    if attributeTypeIn = ame_util.numberAttributeType then
488     -- number attribute validation
489      begin
490        dummy_num := to_number(attributeValue1In);
491      exception
492        when others then
493           begin
494             if (approverTypeIdIn is not null)  then
495               setErrorMessage(attributeNameIn      => attributeNameIn
496                              ,attributeItemTypeIn  => attributeItemTypeIn
497                              ,itemIdIn             => itemIdIn
498                              ,itemClassIdIn        => itemClassIdIn
499                              ,approverTypeIdIn     => approverTypeIdIn);
500               return 'APPR_ATTR_ERROR';
501             else
502               setErrorMessage(attributeNameIn      => attributeNameIn
503                              ,attributeItemTypeIn  => attributeItemTypeIn
504                              ,itemClassIdIn        => itemClassIdIn
505                              ,itemIdIn             => itemIdIn
506                              );
507               return 'ERROR_EXIST';
508             end if;
509           exception
510             when others then
511               setErrorMessage(attributeNameIn      => attributeNameIn
512                              ,attributeItemTypeIn  => attributeItemTypeIn
513                              ,itemClassIdIn        => itemClassIdIn
514                              ,itemIdIn             => itemIdIn
515                              );
516              return 'ERROR_EXIST';
517           end;
518      end;
519    elsif attributeTypeIn = ame_util.dateAttributeType then
520     --date validation
521      begin
522        dummy_date := to_date(attributeValue1In, ame_util.versionDateFormatModel);
523      exception
524       when others then
525         setErrorMessage(attributeNameIn      => attributeNameIn
526                        ,attributeItemTypeIn  => attributeItemTypeIn
527                        ,itemClassIdIn        => itemClassIdIn
528                        ,itemIdIn             => itemIdIn
529                        );
530         return 'ERROR_EXIST';
531      end;
532    elsif attributeTypeIn = ame_util.booleanAttributeType then
533     --boolean attribute validation
534      if trim(attributeValue1In) <> ame_util.booleanAttributeTrue and
535             trim(attributeValue1In) <> ame_util.booleanAttributeFalse then
536         setErrorMessage(attributeNameIn      => attributeNameIn
537                        ,attributeItemTypeIn  => attributeItemTypeIn
538                        ,itemClassIdIn        => itemClassIdIn
539                        ,itemIdIn             => itemIdIn
540                        );
541        return 'ERROR_EXIST';
542      end if;
543    elsif attributeTypeIn = ame_util.currencyAttributeType then
544     -- Currency attr validation
545      begin
546        dummy_num := to_number(attributeValue1In);
547        dummy_curr_code := ame_util.isCurrencyCodeValid(currencyCodeIn => attributeValue2In);
548        dummy_conv_type := ame_util.isConversionTypeValid(conversionTypeIn => attributeValue3In);
549        if  (dummy_curr_code is not null and dummy_curr_code = false) or
550            (dummy_curr_code is not null and dummy_conv_type = false )then
551         setErrorMessage(attributeNameIn      => attributeNameIn
552                        ,attributeItemTypeIn  => attributeItemTypeIn
553                        ,itemClassIdIn        => itemClassIdIn
554                        ,itemIdIn             => itemIdIn
555                        );
556         return 'ERROR_EXIST';
557       end if;
558      exception
559       when others then
560         setErrorMessage(attributeNameIn      => attributeNameIn
561                        ,attributeItemTypeIn  => attributeItemTypeIn
562                        ,itemClassIdIn        => itemClassIdIn
563                        ,itemIdIn             => itemIdIn
564                        );
565         return 'ERROR_EXIST';
566      end;
567    end if;
568    return 'NO_ERROR';
569  end checkConversionError;
570 
571 procedure getNonMandAttributes(applicationIdIn   in integer,
572                                itemClassIdIn     in integer,
573                                attributeIdOut    out nocopy ame_util.stringList,
574                                attributeNameOut  out nocopy ame_util.stringList,
575                                attributeTypeOut  out nocopy ame_util.stringList,
576                                approverTypeIdOut out nocopy ame_util.idList) as
577   cursor attributeCursor(applicationIdIn in integer,
578                          headerItemClassIdIn in integer) is
579     select
580       ame_attributes.attribute_id,
581       ame_attributes.name,
582       ame_attributes.attribute_type,
583       ame_attributes.approver_type_id
584     from
585       ame_attributes,
586       ame_attribute_usages,
587       ame_item_classes
588     where
589       ame_attributes.attribute_id = ame_attribute_usages.attribute_id and
590       ame_attributes.item_class_id = ame_item_classes.item_class_id and
591       ame_item_classes.item_class_id = headerItemClassIdIn and
592       ame_attribute_usages.application_id = applicationIdIn and
593       nvl(ame_attributes.line_item, ame_util.booleanFalse) = ame_util.booleanFalse and
594       ame_attributes.attribute_id not in
595       (select attribute_id from ame_mandatory_attributes
596        where action_type_id = -1 and
597          sysdate between ame_mandatory_attributes.start_date and
598            nvl(ame_mandatory_attributes.end_date - ame_util.oneSecond, sysdate) ) and
599         sysdate between ame_attributes.start_date and
600                nvl(ame_attributes.end_date - ame_util.oneSecond, sysdate) and
601         sysdate between ame_attribute_usages.start_date and
602                nvl(ame_attribute_usages.end_date - ame_util.oneSecond, sysdate) and
603         sysdate between ame_item_classes.start_date and
604                nvl(ame_item_classes.end_date - ame_util.oneSecond, sysdate)
605       order by ame_attributes.name;
606   tempIndex integer;
607 begin
608     tempIndex := 1;
609     for tempAttributeUsage in attributeCursor(applicationIdIn => applicationIdIn,
610                                               headerItemClassIdIn => itemClassIdIn) loop
611       /* The explicit conversion below lets nocopy work. */
612       attributeIdOut(tempIndex) := to_char(tempAttributeUsage.attribute_id);
613       attributeNameOut(tempIndex) := tempAttributeUsage.name;
614       attributeTypeOut(tempIndex) := tempAttributeUsage.attribute_type;
615       approverTypeIdOut(tempIndex) := tempAttributeUsage.approver_type_id;
616       tempIndex := tempIndex + 1;
617     end loop;
618 exception
619   when others then
620     rollback;
621     ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
622                               routineNameIn => 'getNonMandAttributes',
623                               exceptionNumberIn => sqlcode,
624                               exceptionStringIn => '(application ID ' ||
625                                                   applicationIdIn||
626                                                   ') ' ||
627                                                   sqlerrm);
628     raise;
629 end getNonMandAttributes;
630 
631 procedure populateRealTransAttributes(applicationIdIn in  number
632                                      ,transactionIdIn in  varchar2
633                                      ,errString out nocopy varchar2) as
634 
635   cursor getVariantAttributes(applicationIdIn in number) is
636     select atr.attribute_id
637           ,atr.name
638           ,atr.attribute_type
639           ,atr.approver_type_id
640       from ame_attributes atr
641           ,ame_attribute_usages atu
642      where atr.name in (ame_util.jobLevelStartingPointAttribute
643                         ,ame_util.nonDefStartingPointPosAttr
644                         ,ame_util.nonDefPosStructureAttr
645                         ,ame_util.supStartingPointAttribute
646                         ,ame_util.firstStartingPointAttribute
647                         ,ame_util.secondStartingPointAttribute
648                         )
649        and atr.attribute_id = atu.attribute_id
650        and atu.application_id = applicationIdIn
651        and sysdate between atr.start_date and nvl(atr.end_date - (1/86400), sysdate)
652        and sysdate between atu.start_date and nvl(atu.end_date - (1/86400), sysdate);
653 
654   attributeIds    ame_util.stringList;
655   attributeIds2   ame_util.stringList;
656   attributeNames  ame_util.stringList;
657   attributeTypes  ame_util.stringList;
658   attributeValue1 ame_util.attributeValueType;
659   attributeValue2 ame_util.attributeValueType;
660   attributeValue3 ame_util.attributeValueType;
661   itemClassIdsList   ame_util.stringList;
662   itemClassNamesList ame_util.stringList;
663   itemIds            ame_util.stringList;
664   upperLimit      integer;
665   workflowItemKey wf_item_activity_statuses.item_key%type;
666   workflowItemType wf_item_activity_statuses.item_type%type;
667   variantAttributeIds ame_util.idList;
668   variantAttributeNames ame_util.stringList;
669   variantAttributeTypes ame_util.stringList;
670   variantAttributeApprType  ame_util.idList;
671   approverTypeIdList     ame_util.idList;
672   itemClassName          varchar2(100);
673   convErrYes             boolean;
674   purgeValueYes          boolean;
675   begin
676     errString := 'NO_ERROR';
677     hr_multi_message.enable_message_list;
678     ame_engine.updateTransactionState(isTestTransactionIn         => false
679                                      ,isLocalTransactionIn        => true
680                                      ,fetchConfigVarsIn           => true
681                                      ,fetchOldApproversIn         => false
682                                      ,fetchInsertionsIn           => false
683                                      ,fetchDeletionsIn            => false
684                                      ,fetchAttributeValuesIn      => true
685                                      ,fetchInactiveAttValuesIn    => true
686                                      ,processProductionActionsIn  => false
687                                      ,processProductionRulesIn    => false
688                                      ,updateCurrentApproverListIn => false
689                                      ,updateOldApproverListIn     => false
690                                      ,processPrioritiesIn         => false
691                                      ,prepareItemDataIn           => false
692                                      ,prepareRuleIdsIn            => false
693                                      ,prepareRuleDescsIn          => false
694                                      ,transactionIdIn             => transactionIdIn
695                                      ,ameApplicationIdIn          => applicationIdIn
696                                      ,fndApplicationIdIn          => null
697                                      ,transactionTypeIdIn         => null);
698     --+
699     open getVariantAttributes(applicationIdIn => applicationIdIn);
700     fetch getVariantAttributes bulk collect into variantAttributeIds
701                                                 ,variantAttributeNames
702                                                 ,variantAttributeTypes
703                                                 ,variantAttributeApprType;
704     close getVariantAttributes;
705     --+
706 
707     --+
708     --+
709     --+
710        delete from ame_temp_trans_att_values
711         where application_id = applicationIdIn
712           and transaction_id = transactionIdIn;
713     --+
714     --+ mandatory attributes
715     --+
716     ame_attribute_pkg.getMandatoryAttributes2(applicationIdIn  => applicationIdIn
717                                              ,attributeIdOut   => attributeIds
718                                              ,attributeNameOut => attributeNames
719                                              ,attributeTypeOut => attributeTypes);
720     upperLimit := attributeIds.count;
721     ame_util.getWorkflowAttributeValues(applicationIdIn     => applicationIdIn,
722                                         transactionIdIn     => transactionIdIn,
723                                         workflowItemKeyOut  => workflowItemKey,
724                                         workflowItemTypeOut => workflowItemType);
725     --+
726     for i in 1 .. upperLimit loop
727       --+
728       if attributeNames(i) = ame_util.workflowItemKeyAttribute then
729         attributeValue1 := workflowItemKey;
730         attributeValue2 := null;
731         attributeValue3 := null;
732       elsif attributeNames(i) = ame_util.workflowItemTypeAttribute then
733         attributeValue1 := workflowItemType;
734         attributeValue2 := null;
735         attributeValue3 := null;
736       else
737         ame_engine.getHeaderAttValues1(attributeIdIn      => to_number(attributeIds(i))
738                                       ,attributeValue1Out => attributeValue1
739                                       ,attributeValue2Out => attributeValue2
740                                       ,attributeValue3Out => attributeValue3);
741       end if;
742       --+
743      errString:= checkConversionError(attributeNameIn       => attributeNames(i)
744                                      ,attributeItemTypeIn   => 'MANDATORY_ATTR'
745                                      ,attributeValue1In     => attributeValue1
746                                      ,attributeValue2In     => attributeValue2
747                                      ,attributeValue3In     => attributeValue3
748                                      ,attributeTypeIn       => attributeTypes(i)
749                                      ,approverTypeIdIn      => null
750                                     );
751      if errString = 'ERROR_EXIST' then
752       convErrYes := true;
753      end if;
754 
755       --+
756       insert into ame_temp_trans_att_values(application_id
757                                 ,transaction_id
758                                 ,row_timestamp
759                                 ,attribute_id
760                                 ,attribute_name
761                                 ,attribute_type
762                                 ,is_mandatory
763                                 ,attribute_value_1
764                                 ,attribute_value_2
765                                 ,attribute_value_3
766                                 ,item_id
767                                 ,item_class_id)
768                           values(applicationIdIn
769                                 ,transactionIdIn
770                                 ,sysdate
771                                 ,attributeIds(i)
772                                 ,attributeNames(i)
773                                 ,attributeTypes(i)
774                                 ,'Y'
775                                 ,attributeValue1
776                                 ,attributeValue2
777                                 ,attributeValue3
778                                 ,transactionIdIn
779                                 ,1);
780     end loop;
781     --+
782     --+ non mandatory header attributes
783     --+
784     getNonMandAttributes(applicationIdIn   => applicationIdIn
785                         ,itemClassIdIn     => ame_admin_pkg.getItemClassIdByName(itemClassNameIn => ame_util.headerItemClassName)
786                         ,attributeIdOut    => attributeIds
787                         ,attributeNameOut  => attributeNames
788                         ,attributeTypeOut  => attributeTypes
789                         ,approverTypeIdOut => approverTypeIdList);
790     upperLimit := attributeIds.count;
791     --+
792     for i in 1 .. upperLimit loop
793       --+
794       ame_engine.getHeaderAttValues1(attributeIdIn      => to_number(attributeIds(i))
795                                     ,attributeValue1Out => attributeValue1
796                                     ,attributeValue2Out => attributeValue2
797                                     ,attributeValue3Out => attributeValue3);
798 
799       --+
800      errString := checkConversionError(attributeNameIn     => attributeNames(i)
801                                       ,attributeItemTypeIn => 'HEADER_ATTR'
802                                       ,attributeValue1In   => attributeValue1
803                                       ,attributeValue2In   => attributeValue2
804                                       ,attributeValue3In   => attributeValue3
805                                       ,attributeTypeIn     => attributeTypes(i)
806                                       ,approverTypeIdIn    => approverTypeIdList(i)
807                                       );
808      if errString = 'ERROR_EXIST' then
809        convErrYes := true;
810      end if;
811      if errString = 'APPR_ATTR_ERROR' then
812        purgeValueYes := true;
813      end if;
814       --+
815       insert into ame_temp_trans_att_values(application_id
816                                 ,transaction_id
817                                 ,row_timestamp
818                                 ,attribute_id
819                                 ,attribute_name
820                                 ,attribute_type
821                                 ,is_mandatory
822                                 ,attribute_value_1
823                                 ,attribute_value_2
824                                 ,attribute_value_3
825                                 ,item_id
826                                 ,item_class_id)
827                           values(applicationIdIn
828                                 ,transactionIdIn
829                                 ,sysdate
830                                 ,attributeIds(i)
831                                 ,attributeNames(i)
832                                 ,attributeTypes(i)
833                                 ,'N'
834                                 ,attributeValue1
835                                 ,attributeValue2
836                                 ,attributeValue3
837                                 ,transactionIdIn
838                                 ,1);
839     end loop;
840     --+
841     ame_admin_pkg.getTransTypeItemClasses4(applicationIdIn   => applicationIdIn
842                                           ,itemClassIdsOut   => itemClassIdsList
843                                           ,itemClassNamesOut => itemClassNamesList);
844     upperLimit := itemClassIdsList.count;
845     --+
846     for i in 1 .. upperLimit loop
847       --+
848       ame_engine.getItemClassItemIds(itemClassIdIn => itemClassIdsList(i)
849                                     ,itemIdsOut    => itemIds);
850       getNonMandAttributes(applicationIdIn     => applicationIdIn
851                           ,itemClassIdIn     => to_number(itemClassIdsList(i))
852                           ,attributeIdOut    => attributeIds2
853                           ,attributeNameOut  => attributeNames
854                           ,attributeTypeOut  => attributeTypes
855                           ,approverTypeIdOut => approverTypeIdList);
856       for j in 1 .. itemIds.count loop
857         --+
858         for k in 1 .. attributeIds2.count loop
859           --+
860           ame_engine.getItemAttValues1(attributeIdIn      => attributeIds2(k)
861                                       ,itemIdIn           => itemIds(j)
862                                       ,attributeValue1Out => attributeValue1
863                                       ,attributeValue2Out => attributeValue2
864                                       ,attributeValue3Out => attributeValue3);
865 
866           --+
867           errString := checkConversionError(attributeNameIn     => attributeNames(k)
868                                            ,attributeItemTypeIn => 'OTHER_ATTR'
869                                            ,attributeValue1In   => attributeValue1
870                                            ,attributeValue2In   => attributeValue2
871                                            ,attributeValue3In   => attributeValue3
872                                            ,attributeTypeIn     => attributeTypes(k)
873                                            ,approverTypeIdIn    => approverTypeIdList(k)
874                                            ,itemClassIdIn       => itemClassIdsList(i)
875                                            ,itemIdIn            => itemIds(j)
876                                             );
877           if errString = 'ERROR_EXIST' then
878             convErrYes := true;
879           end if;
880           if errString = 'APPR_ATTR_ERROR' then
881             purgeValueYes := true;
882           end if;
883           --+
884           insert into ame_temp_trans_att_values(application_id
885                                     ,transaction_id
886                                     ,row_timestamp
887                                     ,attribute_id
888                                     ,attribute_name
889                                     ,attribute_type
890                                     ,is_mandatory
891                                     ,attribute_value_1
892                                     ,attribute_value_2
893                                     ,attribute_value_3
894                                     ,item_id
895                                     ,item_class_id)
896                               values(applicationIdIn
897                                     ,transactionIdIn
898                                     ,sysdate
899                                     ,attributeIds2(k)
900                                     ,attributeNames(k)
901                                     ,attributeTypes(k)
902                                     ,'N'
903                                     ,attributeValue1
904                                     ,attributeValue2
905                                     ,attributeValue3
906                                     ,itemIds(j)
907                                     ,itemClassIdsList(i));
908         end loop;
909         -- Add by srpurani for variant attribute enhancement
910         attributeValue2 := null;
911         attributeValue3 := null;
912         for k in 1..variantAttributeIds.count loop
913           --+
914          begin
915           attributeValue1 := null;
916           attributeValue1 := ame_engine.getVariantAttributeValue(attributeIdIn => variantAttributeIds(k),
917                                                                   itemClassIn   => itemClassNamesList(i),
918                                                                   itemIdIn      => itemIds(j));
919           exception
920             When others then
921              if attributeValue1 is null then
922                attributeValue1 := 'null';
923              end if;
924              errString := checkConversionError(
925                                        attributeNameIn     => variantAttributeNames(k)
926                                       ,attributeItemTypeIn => 'OTHER_ATTR'
927                                       ,attributeValue1In   => attributeValue1
928                                       ,attributeValue2In   => attributeValue2
929                                       ,attributeValue3In   => attributeValue3
930                                       ,attributeTypeIn     => variantAttributeTypes(k)
931                                       ,approverTypeIdIn    => variantAttributeApprType(k)
932                                       ,itemClassIdIn       => itemClassIdsList(i)
933                                       ,itemIdIn            => itemIds(j)
934                                       );
935              if errString = 'ERROR_EXIST' then
936                convErrYes := true;
937              end if;
938              if errString = 'APPR_ATTR_ERROR' then
939                purgeValueYes := true;
940              end if;
941          end;
942           --+
943           insert into ame_temp_trans_att_values(application_id
944                                     ,transaction_id
945                                     ,row_timestamp
946                                     ,attribute_id
947                                     ,attribute_name
948                                     ,attribute_type
949                                     ,is_mandatory
950                                     ,attribute_value_1
951                                     ,attribute_value_2
952                                     ,attribute_value_3
953                                     ,item_id
954                                     ,item_class_id)
955                               values(applicationIdIn
956                                     ,transactionIdIn
957                                     ,sysdate
958                                     ,variantAttributeIds(k)
959                                     ,variantAttributeNames(k)
960                                     ,variantAttributeTypes(k)
961                                     ,'N'
962                                     ,attributeValue1
963                                     ,attributeValue2
964                                     ,attributeValue3
965                                     ,itemIds(j)
966                                     ,itemClassIdsList(i));
967           --+
968         end loop;
969         --+
970       end loop;
971       --+
972     end loop;
973     --+
974     if purgeValueYes then
975       delete from ame_temp_trans_att_values
976       where application_id = applicationIdIn
977       and transaction_id = transactionIdIn;
978       errString := 'APPR_ATTR_ERROR';
979       return;
980     end if;
981     if convErrYes then
982       errString := 'AME_CONV_ERROR';
983       return;
984     end if;
985      exception
986       When others then
987         ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
988                                   routineNameIn => 'populateRealTransAttributes',
989                                   exceptionNumberIn => sqlcode,
990                                   exceptionStringIn => sqlerrm);
991         if sqlcode = -20001 then
992           errString :=  sqlerrm;
993           errString:= substr(errString,11);
994         else
995           fnd_message.set_name('PER','AME_400754_TEST_REALTX_ATT_ERR');
996           hr_multi_message.add (p_associated_column1 => 'ATTR_NAME');
997           errString := 'ERROR_EXIST';
998          end if;
999   end populateRealTransAttributes;
1000 --+
1001 procedure getApplicableRules(applicationIdIn      in        number
1002                             ,transactionIdIn      in        varchar2
1003                             ,isRealTransaction    in        varchar2 -- 'Y' for a real transaction
1004                                                                      -- 'N' for a test transaction
1005                             ,processPriorities    in        varchar2
1006                             ,rulesOut            out nocopy ame_rules_list
1007                             ,errString           out nocopy varchar2) as
1008   ruleItemClassIds ame_util.idList;
1009   itemClassIds     ame_util.idList;
1010   itemIds          ame_util.stringList;
1011   ruleTypes        ame_util.idList;
1012   ruleDescriptions ame_util.stringList;
1013   ruleIds          ame_util.idList;
1014   rulesList  ame_rules_list := ame_rules_list();
1015   ruleObject ame_rule;
1016   effectiveRuleDate date;
1017   effecitveRuleDateString ame_util.stringType;
1018   itemClassName    varchar2(100);
1019   begin
1020   errString := 'NO_ERROR';
1021     ame_engine.updateTransactionState(isTestTransactionIn         => isRealTransaction = 'N'
1022                                      ,isLocalTransactionIn        => true
1023                                      ,fetchConfigVarsIn           => true
1024                                      ,fetchOldApproversIn         => false
1025                                      ,fetchInsertionsIn           => false
1026                                      ,fetchDeletionsIn            => false
1027                                      ,fetchAttributeValuesIn      => true
1028                                      ,fetchInactiveAttValuesIn    => false
1029                                      ,processProductionActionsIn  => false
1030                                      ,processProductionRulesIn    => true
1031                                      ,updateCurrentApproverListIn => false
1032                                      ,updateOldApproverListIn     => false
1033                                      ,processPrioritiesIn         => processPriorities = 'Y'
1034                                      ,prepareItemDataIn           => false
1035                                      ,prepareRuleIdsIn            => false
1036                                      ,prepareRuleDescsIn          => false
1037                                      ,transactionIdIn             => transactionIdIn
1038                                      ,ameApplicationIdIn          => applicationIdIn
1039                                      ,fndApplicationIdIn          => null
1040                                      ,transactionTypeIdIn         => null);
1041     effectiveRuleDate := ame_engine.getEffectiveRuleDate;
1042     ame_engine.getTestTransApplicableRules(ruleItemClassIdsOut => ruleItemClassIds
1043                                           ,itemClassIdsOut     => itemClassIds
1044                                           ,itemIdsOut          => itemIds
1045                                           ,ruleIdsOut          => ruleIds
1046                                           ,ruleTypesOut        => ruleTypes
1047                                           ,ruleDescriptionsOut => ruleDescriptions);
1048 
1049     for i in 1 .. itemIds.count loop
1050       if(ruleItemClassIds(i) is not null) then
1051         itemClassName := ame_test_utility_pkg.getItemClassNameById(ruleItemClassIds(i));
1052       else
1053         itemClassName := null;
1054       end if;
1055       ruleObject :=  ame_rule(ruleIds(i)
1056                                     ,ruleDescriptions(i)
1057                                     ,ruleItemClassIds(i)
1058                                     ,itemClassName
1059                                     ,itemIds(i)
1060                                     ,getRuleTypeDesc(ruleTypes(i))
1061                                     ,ruleTypes(i)
1062                                     ,getRuleCategory(ruleIds(i),applicationIdIn,effectiveRuleDate)
1063                                     ,ame_rule_pkg.getEffectiveStartDateUsage
1064                                        (applicationIdIn => applicationIdIn
1065                                        ,ruleIdIn        => ruleIds(i)
1066                                        ,effectiveDateIn  => effectiveRuleDate)
1067                                     ,ame_rule_pkg.getEffectiveEndDateUsage
1068                                        (applicationIdIn => applicationIdIn
1069                                        ,ruleIdIn        => ruleIds(i)
1070                                        ,effectiveDateIn  => effectiveRuleDate)
1071                                     ,getConditionsList(ruleIds(i),effectiveRuleDate)
1072                                     ,getActionsList(ruleIds(i),effectiveRuleDate)
1073                                     );
1074      rulesList.extend;
1075      rulesList(i) := ruleObject;
1076     end loop;
1077     rulesOut := rulesList;
1078     exception
1079       When others then
1080         ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
1081                                   routineNameIn => 'getApplicableRules',
1082                                   exceptionNumberIn => sqlcode,
1083                                   exceptionStringIn => sqlerrm);
1084         if sqlcode = -20001 then
1085           errString :=  sqlerrm;
1086           errString:= substr(errString,11);
1087         else
1088           fnd_message.set_name('PER','AME_400692_ENGINE_ERROR');
1089           errString := fnd_message.get;
1090         end if;
1091   end getApplicableRules;
1092 --+
1093 procedure getApprovers(applicationIdIn      in        number
1094                       ,transactionIdIn      in        varchar2
1095                       ,isRealTransaction    in        varchar2 -- 'Y' for a real transaction
1096                                                                -- 'N' for a test transaction
1097                       ,approverListStageIn  in        integer
1098                       ,approversOut        out nocopy ame_approvers_list
1099                       ,errString           out nocopy varchar2) as
1100   approverList ame_util.approversTable2;
1101   productionIndexes ame_util.idList;
1102   variableNames ame_util.stringList;
1103   variableValues ame_util.stringList;
1104   approverObjList ame_approvers_list := ame_approvers_list();
1105   approver        ame_approver;
1106   effectiveRuleDate date;
1107   tempActionTypeName ame_util.stringType;
1108   tempGroupName ame_util.stringType;
1109   approverSource varchar2(500);
1110   productionsList varchar2(4000);
1111   ruleIdList ame_util.idList;
1112   l_app_count number;
1113   begin
1114     l_app_count :=0;
1115     errString:= 'NO_ERROR';
1116     ame_engine.getTestTransApprovers(isTestTransactionIn  => isRealTransaction = 'N'
1117                                     ,transactionIdIn      => transactionIdIn
1118                                     ,ameApplicationIdIn   => applicationIdIn
1119                                     ,approverListStageIn  => approverListStageIn
1120                                     ,approversOut         => approverList
1121                                     ,productionIndexesOut => productionIndexes
1122                                     ,variableNamesOut     => variableNames
1123                                     ,variableValuesOut    => variableValues);
1124   --+
1125   effectiveRuleDate := ame_engine.getEffectiveRuleDate;
1126   --+
1127     for i in 1 .. approverList.count loop
1128       tempActionTypeName := getActionTypeName(approverList(i).action_type_id);
1129       if(tempActionTypeName in (ame_util.groupChainApprovalTypeName
1130                                ,ame_util.preApprovalTypeName
1131                                ,ame_util.postApprovalTypeName))then
1132         tempGroupName := getApproverGroupName(approverList(i).group_or_chain_id);
1133       else
1134         tempGroupName := 'Chain '||approverList(i).group_or_chain_id;
1135       end if;
1136       ame_util.parseSourceValue(sourceValueIn        => approverList(i).source
1137                                ,sourceDescriptionOut => approverSource
1138                                ,ruleIdListOut        => ruleIdList);
1139       productionsList := '';
1140       for j in 1 .. productionIndexes.count
1141       loop
1142         if(productionIndexes(j) = i) then
1143           if (j <> 1) then
1144             productionsList := productionsList || fnd_global.local_chr(ascii_chr => 13);
1145           end if;
1146           productionsList := productionsList ||
1147                              variableNames(j)|| ' : ' ||
1148                              variableValues(j);
1149         end if;
1150       end loop;
1151       if ((approverList(i).approval_status is null) or
1152           (approverList(i).approval_status not like '%'||ame_util.repeatedStatus) or
1153           (approverListStageIn < 6)) then
1154         if approverListStageIn = 1 and
1155             approverList(i).approval_status like '%'||ame_util.repeatedStatus then
1156           approverList(i).approval_status :=null;
1157         end if;
1158         if approverListStageIn = 5 and
1159             approverList(i).approval_status like '%'||ame_util.repeatedStatus then
1160           approverList(i).approval_status :=ame_util.repeatedStatus;
1161         end if;
1162         approver := ame_approver(approverList(i).name
1163                                 ,approverList(i).orig_system
1164                                 ,approverList(i).orig_system_id
1165                                 ,approverList(i).display_name
1166                                 ,approverList(i).approver_category
1167                                 ,approverList(i).api_insertion
1168                                 ,approverList(i).authority
1169                                 ,approverList(i).approval_status
1170                                 ,approverList(i).action_type_id
1171                                 ,approverList(i).group_or_chain_id
1172                                 ,approverList(i).occurrence
1173                                 ,approverSource
1174                                 ,getItemClassName(approverList(i).item_class)
1175                                 ,approverList(i).item_id
1176                                 ,approverList(i).item_class_order_number
1177                                 ,approverList(i).item_order_number
1178                                 ,approverList(i).sub_list_order_number
1179                                 ,approverList(i).action_type_order_number
1180                                 ,approverList(i).group_or_chain_order_number
1181                                 ,approverList(i).member_order_number
1182                                 ,approverList(i).approver_order_number
1183                                 ,tempActionTypeName
1184                                 ,getOrigSystemDesc(approverList(i).orig_system)
1185                                 ,tempGroupName
1186                                 ,getAuthorityDesc(approverList(i).authority)
1187                                 ,getApiInsertionDesc(approverList(i).api_insertion)
1188                                 ,getApprovalStatusDesc(approverList(i).approval_status)
1189                                 ,getApprovalCategoryDesc(approverList(i).approver_category)
1190                                 ,getSourceDesc(approverList(i).source,effectiveRuleDate)
1191                                 ,productionsList);
1192         l_app_count := l_app_count + 1;
1193         approverObjList.extend;
1194         approverObjList(l_app_count) := approver;
1195       end if;
1196     end loop;
1197     approversOut := approverObjList;
1198     exception
1199       When others then
1200       ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
1201                                     routineNameIn => 'getApprovers',
1202                                     exceptionNumberIn => sqlcode,
1203                                     exceptionStringIn => sqlerrm);
1204 
1205       if sqlcode = -20001 then
1206         errString :=  sqlerrm;
1207         errString:= substr(errString,11);
1208       else
1209         fnd_message.set_name('PER','AME_400692_ENGINE_ERROR');
1210          errString := fnd_message.get;
1211        end if;
1212   --+
1213   end getApprovers;
1214 --+
1215 procedure getTransactionProductions(applicationIdIn      in        number
1216                                    ,transactionIdIn      in        varchar2
1217                                    ,isRealTransaction    in        varchar2 -- 'Y' for a real transaction
1218                                                                             -- 'N' for a test transaction
1219                                    ,processPriorities    in        varchar2
1220                                    ,productionsOut      out nocopy ame_productions_list
1221                                    ,errString           out nocopy varchar2) as
1222   variableNames  ame_util.stringList;
1223   variableValues ame_util.stringList;
1224   productionNVPair ame_production_name_value_pair;
1225   productionsList ame_util2.productionsTable ;--:= ame_util2.productionsTable();
1226 
1227   begin
1228     errString := 'NO_ERROR';
1229       ame_engine.updateTransactionState(isTestTransactionIn => isRealTransaction = 'N',
1230                                         isLocalTransactionIn => true,
1231                                         fetchConfigVarsIn => true,
1232                                         fetchOldApproversIn => false,
1233                                         fetchInsertionsIn => false,
1234                                         fetchDeletionsIn => false,
1235                                         fetchAttributeValuesIn => true,
1236                                         fetchInactiveAttValuesIn => false,
1237                                         processProductionActionsIn => false,
1238                                         processProductionRulesIn => true,
1239                                         updateCurrentApproverListIn => true,
1240                                         updateOldApproverListIn => false,
1241                                         processPrioritiesIn => processPriorities = 'Y',
1242                                         prepareItemDataIn => false,
1243                                         prepareRuleIdsIn => false,
1244                                         prepareRuleDescsIn => false,
1245                                         transactionIdIn => transactionIdIn,
1246                                         ameApplicationIdIn => applicationIdIn,
1247                                         fndApplicationIdIn => null,
1248                                         transactionTypeIdIn => null);
1249       ame_engine.getAllProductions(productionsOut => productionsList);
1250       productionsOut := ame_productions_list();
1251       for i in 1 .. productionsList.count loop
1252         productionsOut.extend();
1253         productionsOut(i) := ame_production_name_value_pair(null,null,null,null);
1254         productionsOut(i).name := productionsList(i).variable_name;
1255         productionsOut(i).value := productionsList(i).variable_value;
1256         productionsOut(i).item_class := getItemClassName(productionsList(i).item_class);
1257         productionsOut(i).item_id := productionsList(i).item_id;
1258 
1259       end loop;
1260      exception
1261          When others then
1262       ame_util.runtimeException(packageNameIn => 'ame_test_utility_pkg',
1263                                     routineNameIn => 'getTransactionProductions',
1264                                     exceptionNumberIn => sqlcode,
1265                                     exceptionStringIn => sqlerrm);
1266            if sqlcode = -20001 then
1267              errString :=  sqlerrm;
1268              errString:= substr(errString,11);
1269            else
1270              fnd_message.set_name('PER','AME_400692_ENGINE_ERROR');
1271              errString := fnd_message.get;
1272            end if;
1273   end getTransactionProductions;
1274 end ame_test_utility_pkg;