DBA Data[Home] [Help]

PACKAGE BODY: APPS.AME_RULE_USAGES_API2

Source


1 PACKAGE BODY AME_RULE_USAGES_API2 AS
2 /* $Header: amersapi.pkb 120.2 2005/10/14 04:13 ubhat noship $ */
3 procedure OWNER_TO_WHO (
4   X_OWNER in VARCHAR2,
5   X_CREATED_BY out nocopy NUMBER,
6   X_LAST_UPDATED_BY out nocopy NUMBER,
7   X_LAST_UPDATE_LOGIN out nocopy NUMBER
8 ) is
9 begin
10   X_CREATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
11   X_LAST_UPDATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
12   X_LAST_UPDATE_LOGIN := 0;
13 end OWNER_TO_WHO;
14 
15 procedure KEY_TO_IDS (
16   X_RULE_KEY                 in  VARCHAR2,
17   X_APPLICATION_SHORT_NAME   in  VARCHAR2,
18   X_TRANSACTION_TYPE_ID      in  VARCHAR2,
19   X_RULE_USAGE               out nocopy VARCHAR2,
20   X_RULE_ID                  out nocopy NUMBER,
21   X_ITEM_ID                  out nocopy NUMBER
22 ) is
23   cursor CSR_GET_ITEM_ID
24   (
25     X_APPLICATION_SHORT_NAME in VARCHAR2,
26     X_TRANSACTION_TYPE_ID    in VARCHAR2
27   ) is
28    select ACA.APPLICATION_ID
29    from   AME_CALLING_APPS ACA,
30           FND_APPLICATION_VL FA
31    where  FA.APPLICATION_SHORT_NAME = X_APPLICATION_SHORT_NAME
32      and  nvl(ACA.TRANSACTION_TYPE_ID,'NULL') = nvl(X_TRANSACTION_TYPE_ID,'NULL')
33      and  FA.APPLICATION_ID = ACA.FND_APPLICATION_ID
34      and sysdate between ACA.START_DATE
35        and nvl(ACA.END_DATE - (1/86400), sysdate);
36 
37   cursor CSR_GET_RULE_ID
38   (
39    X_RULE_KEY      in VARCHAR2
40   ) is
41   select RULE_ID
42     from AME_RULES
43    where RULE_KEY = X_RULE_KEY;
44 
45   cursor CSR_GET_RULE_USAGE
46   (
47    X_ITEM_ID       in NUMBER,
48    X_RULE_ID       in NUMBER
49   ) is
50   select 'FOUND'
51     from AME_RULE_USAGES
52    where RULE_ID  = X_RULE_ID
53      and ITEM_ID  = X_ITEM_ID;
54 
55 begin
56   open CSR_GET_ITEM_ID (
57     X_APPLICATION_SHORT_NAME,
58     X_TRANSACTION_TYPE_ID
59   );
60   fetch CSR_GET_ITEM_ID into X_ITEM_ID;
61     if (CSR_GET_ITEM_ID%notfound) then
62       X_ITEM_ID := null;
63     end if;
64   close CSR_GET_ITEM_ID;
65 
66   open CSR_GET_RULE_ID (
67     X_RULE_KEY
68   );
69   fetch CSR_GET_RULE_ID into X_RULE_ID;
70     if (CSR_GET_RULE_ID%notfound) then
71       X_RULE_ID := null;
72     end if;
73   close CSR_GET_RULE_ID;
74 
75   if (X_ITEM_ID is not null) and (X_RULE_ID is not null) then
76     open CSR_GET_RULE_USAGE (
77       X_ITEM_ID, X_RULE_ID
78     );
79     fetch CSR_GET_RULE_USAGE into X_RULE_USAGE;
80     if (CSR_GET_RULE_USAGE%notfound) then
81       X_RULE_USAGE := 'NOTFOUND';
82     end if;
83     close CSR_GET_RULE_USAGE;
84   end if;
85 
86 end KEY_TO_IDS;
87 
88 procedure KEY_TO_IDS_2 (
89   X_RULE_ID                  in  NUMBER,
90   X_APPLICATION_SHORT_NAME   in  VARCHAR2,
91   X_TRANSACTION_TYPE_ID      in  VARCHAR2,
92   X_ITEM_ID                  out nocopy NUMBER,
93   X_RULE_USAGE_COUNT         out nocopy NUMBER
94 ) is
95   cursor CSR_GET_ITEM_ID
96   (
97     X_APPLICATION_SHORT_NAME in VARCHAR2,
98     X_TRANSACTION_TYPE_ID    in VARCHAR2
99   ) is
100    select ACA.APPLICATION_ID
101    from   AME_CALLING_APPS ACA,
102           FND_APPLICATION_VL FA
103    where  FA.APPLICATION_SHORT_NAME = X_APPLICATION_SHORT_NAME
104      and  nvl(ACA.TRANSACTION_TYPE_ID,'NULL') = nvl(X_TRANSACTION_TYPE_ID,'NULL')
105      and  FA.APPLICATION_ID = ACA.FND_APPLICATION_ID
106      and ((ACA.START_DATE - (1/86400)) <= sysdate)
107      and (((ACA.END_DATE  - (1/86400)) >= sysdate)
108       or (ACA.END_DATE is null));
109 
110   cursor CSR_GET_RULE_USAGE_COUNT
111   (
112    X_ITEM_ID       in NUMBER,
113    X_RULE_ID       in NUMBER
114   ) is
115   select COUNT(*)
116     from AME_RULE_USAGES
117    where RULE_ID = X_RULE_ID
118      and ITEM_ID = X_ITEM_ID;
119 
120 begin
121   open CSR_GET_ITEM_ID (
122     X_APPLICATION_SHORT_NAME,
123     X_TRANSACTION_TYPE_ID
124   );
125   fetch CSR_GET_ITEM_ID into X_ITEM_ID;
126     if (CSR_GET_ITEM_ID%notfound) then
127       X_ITEM_ID := null;
128     end if;
129   close CSR_GET_ITEM_ID;
130 
131   if X_ITEM_ID is not null then
132     open CSR_GET_RULE_USAGE_COUNT (
133       X_ITEM_ID, X_RULE_ID
134     );
135     fetch CSR_GET_RULE_USAGE_COUNT into X_RULE_USAGE_COUNT;
136     close CSR_GET_RULE_USAGE_COUNT;
137   end if;
138 
139 end KEY_TO_IDS_2;
140 
141 function CALCULATE_USE_COUNT(X_ATTRIBUTE_ID ame_attribute_usages.attribute_id%type,
142                            X_APPLICATION_ID ame_attribute_usages.application_id%type) return integer as
143   cursor RULE_CURSOR(X_APPLICATION_ID  in integer) is
144   select  AME_RULE_USAGES.RULE_ID, AME_RULES.ACTION_ID
145     from AME_RULES, AME_RULE_USAGES
146    where AME_RULES.RULE_ID =  AME_RULE_USAGES.RULE_ID
147      and AME_RULE_USAGES.ITEM_ID = X_APPLICATION_ID
148      and ((sysdate between AME_RULES.START_DATE
149             and nvl(AME_RULES.END_DATE - (1/86400), sysdate))
150       or (sysdate < AME_RULES.START_DATE
151             and AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,
152                           AME_RULES.START_DATE + (1/86400))))
153      and ((sysdate between AME_RULE_USAGES.START_DATE
154      and nvl(AME_RULE_USAGES.END_DATE - (1/86400), sysdate))
155       or (sysdate < AME_RULE_USAGES.START_DATE
156      and AME_RULE_USAGES.START_DATE < nvl(AME_RULE_USAGES.END_DATE,
157                           AME_RULE_USAGES.START_DATE + (1/86400))));
158     RULE_COUNT integer;
159     TEMP_COUNT integer;
160     NEW_USE_COUNT integer;
161   begin
162    NEW_USE_COUNT := 0;
163    for TEMPRULE in RULE_CURSOR(X_APPLICATION_ID => X_APPLICATION_ID) loop
164      select count(*)
165      into TEMP_COUNT
166      from AME_CONDITIONS,
167           AME_CONDITION_USAGES
168      where
169       AME_CONDITIONS.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
170       AME_CONDITIONS.CONDITION_ID = AME_CONDITION_USAGES.CONDITION_ID and
171       AME_CONDITION_USAGES.RULE_ID = TEMPRULE.RULE_ID and
172       sysdate between AME_CONDITIONS.START_DATE and
173                 nvl(AME_CONDITIONS.END_DATE - (1/86400), sysdate) and
174       ((sysdate between AME_CONDITION_USAGES.START_DATE and
175             nvl(AME_CONDITION_USAGES.END_DATE - (1/86400), sysdate)) or
176        (sysdate < AME_CONDITION_USAGES.START_DATE and
177         AME_CONDITION_USAGES.START_DATE < nvl(AME_CONDITION_USAGES.END_DATE,
178                            AME_CONDITION_USAGES.START_DATE + (1/86400))));
179     if(TEMP_COUNT > 0) then
180        NEW_USE_COUNT := NEW_USE_COUNT + 1;
181     else
182        if(TEMPRULE.ACTION_ID is null) then
183          -- action_id is already migrated from ame_rules to ame_action_usages
184          select count(*)
185          into TEMP_COUNT
186          from
187            AME_MANDATORY_ATTRIBUTES,
188            AME_ACTIONS,
189            AME_ACTION_USAGES
190          where
191           AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
192           AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
193           AME_ACTIONS.ACTION_ID = AME_ACTION_USAGES.ACTION_ID and
194           AME_ACTION_USAGES.RULE_ID = TEMPRULE.RULE_ID and
195           sysdate between AME_MANDATORY_ATTRIBUTES.START_DATE and
196                     nvl(AME_MANDATORY_ATTRIBUTES.END_DATE - (1/86400), sysdate) and
197           sysdate between AME_ACTIONS.START_DATE and
198                     nvl(AME_ACTIONS.END_DATE - (1/86400), sysdate) and
199           ((sysdate between AME_ACTION_USAGES.START_DATE and
200                      nvl(AME_ACTION_USAGES.END_DATE - (1/86400), sysdate)) or
201            (sysdate < AME_ACTION_USAGES.START_DATE and
202             AME_ACTION_USAGES.START_DATE < nvl(AME_ACTION_USAGES.END_DATE,
203                                AME_ACTION_USAGES.START_DATE + (1/86400))));
204        else
205          select count(*)
206          into TEMP_COUNT
207          from
208            AME_MANDATORY_ATTRIBUTES,
209            AME_ACTIONS,
210            AME_RULES
211          where
212           AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
213           AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
214           AME_ACTIONS.ACTION_ID = AME_RULES.ACTION_ID and
215           AME_RULES.RULE_ID = TEMPRULE.RULE_ID and
216           sysdate between AME_MANDATORY_ATTRIBUTES.START_DATE and
217                     nvl(AME_MANDATORY_ATTRIBUTES.END_DATE - (1/86400), sysdate) and
218           sysdate between AME_ACTIONS.START_DATE and
219                     nvl(AME_ACTIONS.END_DATE - (1/86400), sysdate) and
220           ((sysdate between AME_RULES.START_DATE and
221                      nvl(AME_RULES.END_DATE - (1/86400), sysdate)) or
222            (sysdate < AME_RULES.START_DATE and
223             AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,
224                                AME_RULES.START_DATE + (1/86400))));
225        end if;
226        if(TEMP_COUNT > 0) then
227           NEW_USE_COUNT := NEW_USE_COUNT + 1;
228        end if;
229      end if;
230    end loop;
231    return(NEW_USE_COUNT);
232   exception
233     when others then
234       ame_util.runtimeException('ame_attribute_usages_api2',
235                                 'calculate_use_count',
236                                 sqlcode,
237                                 sqlerrm);
238      raise;
239      return(null);
240 end CALCULATE_USE_COUNT;
241 
242 procedure CHANGE_ATTRIBUTE_USAGES_COUNT(X_RULE_ID ame_rule_usages.rule_id%type,
243                                         X_APPLICATION_ID ame_rule_usages.item_id%type) is
244   cursor GET_USED_ATTRIBUTES (X_RULE_ID ame_rule_usages.rule_id%type) is
245     select AME_CONDITIONS.ATTRIBUTE_ID
246     from  AME_CONDITIONS,
247       AME_CONDITION_USAGES
248     where
249       AME_CONDITIONS.CONDITION_TYPE in (AME_UTIL.ORDINARYCONDITIONTYPE,
250                                         AME_UTIL.EXCEPTIONCONDITIONTYPE) and
251       AME_CONDITION_USAGES.RULE_ID = X_RULE_ID and
252       AME_CONDITION_USAGES.CONDITION_ID = AME_CONDITIONS.CONDITION_ID and
253       (AME_CONDITIONS.START_DATE <= sysdate and
254         (AME_CONDITIONS.END_DATE is null or sysdate < AME_CONDITIONS.END_DATE)) and
255       ((sysdate between AME_CONDITION_USAGES.START_DATE and
256            nvl(AME_CONDITION_USAGES.END_DATE - (1/86400), sysdate)) or
257        (sysdate < AME_CONDITION_USAGES.START_DATE and
258         AME_CONDITION_USAGES.START_DATE < nvl(AME_CONDITION_USAGES.END_DATE,
259                          AME_CONDITION_USAGES.START_DATE + (1/86400))))
260       union
261       select AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID
262       from AME_MANDATORY_ATTRIBUTES,
263        AME_ACTION_USAGES,
264        AME_ACTIONS
265       where
266        AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
267        AME_ACTIONS.ACTION_ID = AME_ACTION_USAGES.ACTION_ID and
268        AME_ACTION_USAGES.RULE_ID = X_RULE_ID and
269        (AME_MANDATORY_ATTRIBUTES.START_DATE <= sysdate and
270        (AME_MANDATORY_ATTRIBUTES.END_DATE is null or sysdate < AME_MANDATORY_ATTRIBUTES.END_DATE)) and
271        ((sysdate between AME_ACTION_USAGES.START_DATE and
272            nvl(AME_ACTION_USAGES.END_DATE - (1/86400), sysdate)) or
273         (sysdate < AME_ACTION_USAGES.START_DATE and
274          AME_ACTION_USAGES.START_DATE < nvl(AME_ACTION_USAGES.END_DATE,AME_ACTION_USAGES.START_DATE
275                                                  + (1/86400)))) and
276         (AME_ACTIONS.START_DATE <= sysdate and
277         (AME_ACTIONS.END_DATE is null or sysdate < AME_ACTIONS.END_DATE))
278       union
279       select AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID
280       from AME_MANDATORY_ATTRIBUTES,
281        AME_RULES,
282        AME_ACTIONS
283       where
284        AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
285        AME_ACTIONS.ACTION_ID = AME_RULES.ACTION_ID and
286        AME_RULES.ACTION_ID is not null and
287        AME_RULES.RULE_ID = X_RULE_ID and
288        (AME_MANDATORY_ATTRIBUTES.START_DATE <= sysdate and
289        (AME_MANDATORY_ATTRIBUTES.END_DATE is null or sysdate < AME_MANDATORY_ATTRIBUTES.END_DATE)) and
290        ((sysdate between AME_RULES.START_DATE and
291            nvl(AME_RULES.END_DATE - (1/86400), sysdate)) or
292         (sysdate < AME_RULES.START_DATE and
293          AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,AME_RULES.START_DATE
294                                                  + (1/86400)))) and
295         (AME_ACTIONS.START_DATE <= sysdate and
296         (AME_ACTIONS.END_DATE is null or sysdate < AME_ACTIONS.END_DATE));
297   ATTRIBUTE_IDS_LIST ame_util.idList;
298   X_USE_COUNT ame_attribute_usages.use_count%type;
299 begin
300   for ATTRIBUTE_REC in GET_USED_ATTRIBUTES(X_RULE_ID => X_RULE_ID) loop
301     -- calculate use count
302     X_USE_COUNT := CALCULATE_USE_COUNT(ATTRIBUTE_REC.ATTRIBUTE_ID, X_APPLICATION_ID);
303     -- update ame_attribute_usages
304     update AME_ATTRIBUTE_USAGES
305     set  USE_COUNT = X_USE_COUNT
306     where
307      ATTRIBUTE_ID = ATTRIBUTE_REC.ATTRIBUTE_ID and
308      APPLICATION_ID = X_APPLICATION_ID and
309      sysdate between START_DATE and
310                nvl(END_DATE - (1/86400), sysdate);
311   end loop;
312 end CHANGE_ATTRIBUTE_USAGES_COUNT;
313 
314   procedure create_parallel_config
315     (x_rule_id in integer
316     ,x_application_id in integer
317     ) as
318     cursor rule_action_cursor is
319       select aa.action_id,
320              aa.action_type_id,
321              aat.name,
322              aa.parameter
323         from ame_rule_usages aru,
324              ame_action_usages aau,
325              ame_actions aa,
326              ame_action_types aat
327        where aru.rule_id = x_rule_id
328          and aru.item_id = x_application_id
329          and sysdate between aat.start_date and nvl(aat.end_date,sysdate)
330          and sysdate between aa.start_date and nvl(aa.end_date,sysdate)
331          and (sysdate between aru.start_date and nvl(aru.end_date,sysdate) or
332               aru.start_date > sysdate and nvl(aru.end_date,aru.start_date + (1/86400)) < aru.start_date)
333          and (sysdate between aau.start_date and nvl(aau.end_date,sysdate) or
334               aau.start_date > sysdate and nvl(aau.end_date,aau.start_date + (1/86400)) < aau.start_date)
335          and aru.rule_id = aau.rule_id
336          and aau.action_id = aa.action_id
337          and aa.action_type_id = aat.action_type_id;
338     cursor group_action_type_cursor(c_action_type_id integer) is
339       select null
340         from ame_action_types
341        where sysdate between start_date and nvl(end_date,sysdate)
342          and action_type_id = c_action_type_id
343          and name in ('pre-chain-of-authority approvals'
344                      ,'post-chain-of-authority approvals'
345                      ,'approval-group chain of authority');
346     x_action_type_id integer;
347     x_action_id integer;
348     x_action_type_name varchar2(100);
349     x_group_based_action varchar2 (10);
350     x_parameter varchar2(320);
351     x_approval_group_id integer;
352     x_dummy varchar2(10);
353   begin
354     AME_SEED_UTILITY.INIT_AME_INSTALLATION_LEVEL;
355     if AME_SEED_UTILITY.AME_INSTALLATION_LEVEL is null or to_number(AME_SEED_UTILITY.AME_INSTALLATION_LEVEL)  < 2 then
356       return;
357     end if;
358     open rule_action_cursor;
359     loop
360       fetch rule_action_cursor
361        into x_action_id,
362             x_action_type_id,
363             x_action_type_name,
364             x_parameter;
365       exit when rule_action_cursor%notfound;
366 
367       open group_action_type_cursor(x_action_type_id);
368       fetch group_action_type_cursor into x_dummy;
369       if group_action_type_cursor%found then
370         x_group_based_action := 'Y';
371         x_approval_group_id := to_number(x_parameter);
372       else
373         x_group_based_action := 'N';
374         x_approval_group_id := null;
375       end if;
376       close group_action_type_cursor;
377 
378       ame_seed_utility.create_parallel_config
382         ,x_approval_group_id
379         (x_action_type_id
380         ,x_action_type_name
381         ,x_action_id
383         );
384     end loop;
385     close rule_action_cursor;
386   end create_parallel_config;
387 
388 procedure INSERT_ROW (
389  X_ITEM_ID                         in NUMBER,
390  X_RULE_ID                         in NUMBER,
391  X_APPROVER_CATEGORY               in VARCHAR2,
392  X_CREATED_BY                      in NUMBER,
393  X_CREATION_DATE                   in DATE,
394  X_LAST_UPDATED_BY                 in NUMBER,
395  X_LAST_UPDATE_DATE                in DATE,
396  X_LAST_UPDATE_LOGIN               in NUMBER,
397  X_START_DATE                      in DATE,
398  X_OBJECT_VERSION_NUMBER           in NUMBER)
399  is
400 begin
401 
402   insert into AME_RULE_USAGES
403   (
404    ITEM_ID,
405    RULE_ID,
406    APPROVER_CATEGORY,
407    CREATED_BY,
408    CREATION_DATE,
409    LAST_UPDATED_BY,
410    LAST_UPDATE_DATE,
411    LAST_UPDATE_LOGIN,
412    START_DATE,
413    END_DATE,
414    OBJECT_VERSION_NUMBER
415   ) values (
416    X_ITEM_ID,
417    X_RULE_ID,
418    X_APPROVER_CATEGORY,
419    X_CREATED_BY,
420    X_CREATION_DATE,
421    X_LAST_UPDATED_BY,
422    X_LAST_UPDATE_DATE,
423    X_LAST_UPDATE_LOGIN,
424    X_START_DATE,
425    AME_SEED_UTILITY.GET_DEFAULT_END_DATE,
426    X_OBJECT_VERSION_NUMBER);
427    CHANGE_ATTRIBUTE_USAGES_COUNT(X_RULE_ID => X_RULE_ID,
428                                  X_APPLICATION_ID => X_ITEM_ID);
429 end INSERT_ROW;
430 
431 procedure DELETE_ROW (
432   X_ITEM_ID in NUMBER,
433   X_RULE_ID in NUMBER
434 ) is
435 begin
436   delete from AME_RULE_USAGES
437   where ITEM_ID = X_ITEM_ID
438     and RULE_ID = X_RULE_ID;
439   if (sql%notfound) then
440     raise no_data_found;
441   end if;
442 end DELETE_ROW;
443 
444 procedure LOAD_ROW (
445           X_RULE_KEY               in VARCHAR2,
446           X_RULE_ID                in VARCHAR2,
447           X_APPLICATION_SHORT_NAME in VARCHAR2,
448           X_TRANSACTION_TYPE_ID    in VARCHAR2,
449           X_APPROVER_CATEGORY      in VARCHAR2,
450           X_OWNER                  in VARCHAR2,
454 is
451           X_LAST_UPDATE_DATE       in VARCHAR2,
452           X_CUSTOM_MODE            in VARCHAR2
453 )
455   X_ITEM_ID NUMBER;
456   X_CREATED_BY NUMBER;
457   X_CURRENT_LAST_UPDATE_DATE VARCHAR2(19);
458   X_CURRENT_OWNER VARCHAR2(100);
459   X_LAST_UPDATED_BY NUMBER;
460   X_LAST_UPDATE_LOGIN NUMBER;
461   X_RULE_ID_LOAD NUMBER;
462   X_RULE_USAGE VARCHAR2(20);
463   X_RULE_USAGE_COUNT NUMBER :=0;
464 begin
465   OWNER_TO_WHO (
466     X_OWNER,
467     X_CREATED_BY,
468     X_LAST_UPDATED_BY,
469     X_LAST_UPDATE_LOGIN
470   );
471 if X_RULE_ID > 0 then
472 -- drive off RULE_KEY
473   X_RULE_ID_LOAD := null;
474   KEY_TO_IDS (
475     X_RULE_KEY,
476     X_APPLICATION_SHORT_NAME,
477     X_TRANSACTION_TYPE_ID,
478     X_RULE_USAGE,
479     X_RULE_ID_LOAD,
480     X_ITEM_ID
481   );
482 -- the current row was not found insert a new row
483    if (X_RULE_USAGE = 'NOTFOUND') then
484      INSERT_ROW (
485        X_ITEM_ID,
486        X_RULE_ID_LOAD,
487        X_APPROVER_CATEGORY,
488        X_CREATED_BY,
489        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
490        X_LAST_UPDATED_BY,
491        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
492        X_LAST_UPDATE_LOGIN,
493        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
494        1);
495      create_parallel_config
496        (x_rule_id => x_rule_id_load
497        ,x_application_id => x_item_id);
498    end if;
499 -- the current row was found end date the current row
500 -- do not update or insert
501 else
502 -- drive off RULE_ID
503   KEY_TO_IDS_2 (
504     X_RULE_ID,
505     X_APPLICATION_SHORT_NAME,
506     X_TRANSACTION_TYPE_ID,
507     X_ITEM_ID,
508     X_RULE_USAGE_COUNT
509   );
510 -- the current row was not found insert a new row
511    if    (X_RULE_USAGE_COUNT = 0)
512      and (X_ITEM_ID is not null) then
513      INSERT_ROW (
514        X_ITEM_ID,
515        X_RULE_ID,
516        X_APPROVER_CATEGORY,
517        X_CREATED_BY,
518        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
519        X_LAST_UPDATED_BY,
520        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
521        X_LAST_UPDATE_LOGIN,
522        to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
523        1);
524      create_parallel_config
525        (x_rule_id => x_rule_id
526        ,x_application_id => x_item_id);
527    end if;
528 end if;
529 exception
530     when others then
531     ame_util.runtimeException('ame_rules_usages_api2',
532                          'load_row',
533                          sqlcode,
534                          sqlerrm);
535         raise;
536 end LOAD_ROW;
537 --
538 END AME_RULE_USAGES_API2;