1 PACKAGE BODY AME_RULES_API2 AS
2 /* $Header: amereapi.pkb 120.4 2006/07/07 10:14:05 pvelugul noship $ */
3 duplicateRuleKeyException exception;
4 X_AME_INSTALLATION_LEVEL varchar2(255);
5 procedure OWNER_TO_WHO (
6 X_OWNER in VARCHAR2,
7 X_CREATED_BY out nocopy NUMBER,
8 X_LAST_UPDATED_BY out nocopy NUMBER,
9 X_LAST_UPDATE_LOGIN out nocopy NUMBER
10 ) is
11 begin
12 X_CREATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
13 X_LAST_UPDATED_BY := AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER);
14 X_LAST_UPDATE_LOGIN := 0;
15 end OWNER_TO_WHO;
16
17 procedure KEY_TO_IDS (
18 X_RULE_KEY in VARCHAR2,
19 X_ITEM_CLASS_NAME in VARCHAR2,
20 X_RULE_ID out nocopy NUMBER,
21 X_ITEM_CLASS_ID out nocopy NUMBER,
22 X_CUSTOM_DETECT out nocopy BOOLEAN
23 ) is
24 cursor CSR_GET_ITEM_CLASS_ID
25 (
26 X_ITEM_CLASS_NAME in VARCHAR2
27 ) is
28 select ITEM_CLASS_ID
29 from AME_ITEM_CLASSES
30 where NAME = X_ITEM_CLASS_NAME
31 and sysdate between START_DATE
32 and nvl(END_DATE - (1/86400), sysdate);
33 cursor CSR_GET_RULE_ID
34 (
35 X_RULE_KEY in VARCHAR2
36 ) is
37 select RULE_ID, CREATED_BY
38 from AME_RULES
39 where RULE_KEY = X_RULE_KEY;
40 X_CREATED_BY number;
41 X_RULE_ID_2 number;
42 begin
43 open CSR_GET_ITEM_CLASS_ID (
44 X_ITEM_CLASS_NAME
45 );
46 fetch CSR_GET_ITEM_CLASS_ID into X_ITEM_CLASS_ID;
47 if (CSR_GET_ITEM_CLASS_ID%notfound) then
48 X_ITEM_CLASS_ID := null;
49 end if;
50 close CSR_GET_ITEM_CLASS_ID;
51
52 open CSR_GET_RULE_ID (
53 X_RULE_KEY
54 );
55 -- fetch RULE if there is a match on RULE_KEY
56 fetch CSR_GET_RULE_ID into X_RULE_ID,
57 X_CREATED_BY;
58 if (CSR_GET_RULE_ID%notfound) then
59 X_RULE_ID := null;
60 else
61 loop
62 -- detect for custom data only
63 if X_CREATED_BY = 1 then
64 X_CUSTOM_DETECT := false;
65 exit;
66 else
67 X_CUSTOM_DETECT := true;
68 end if;
69 fetch CSR_GET_RULE_ID into X_RULE_ID_2,
70 X_CREATED_BY;
71 if (CSR_GET_RULE_ID%notfound) then
72 exit;
73 end if;
74 end loop;
75 end if;
76 close CSR_GET_RULE_ID;
77 end KEY_TO_IDS;
78
79 function DO_UPDATE_INSERT(X_OWNER in NUMBER,
80 X_CURRENT_OWNER in NUMBER,
81 X_LAST_UPDATE_DATE in VARCHAR2,
82 X_CURRENT_LAST_UPDATE_DATE in VARCHAR2,
83 X_CUSTOM_MODE in VARCHAR2)
84 return boolean as
85 begin
86 return AME_SEED_UTILITY.MERGE_ROW_TEST
87 (X_OWNER => X_OWNER
88 ,X_CURRENT_OWNER => X_CURRENT_OWNER
89 ,X_LAST_UPDATE_DATE => X_LAST_UPDATE_DATE
90 ,X_CURRENT_LAST_UPDATE_DATE => X_CURRENT_LAST_UPDATE_DATE
91 ,X_CUSTOM_MODE => X_CUSTOM_MODE
92 );
93 end DO_UPDATE_INSERT;
94
95 function DO_TL_UPDATE_INSERT(X_OWNER in NUMBER,
96 X_CURRENT_OWNER in NUMBER,
97 X_LAST_UPDATE_DATE in VARCHAR2,
98 X_CURRENT_LAST_UPDATE_DATE in VARCHAR2,
99 X_CREATED_BY in VARCHAR2,
100 X_CUSTOM_MODE in VARCHAR2)
101 return boolean as
102 begin
103 return AME_SEED_UTILITY.TL_MERGE_ROW_TEST
104 (X_OWNER => X_OWNER
105 ,X_CURRENT_OWNER => X_CURRENT_OWNER
106 ,X_LAST_UPDATE_DATE => X_LAST_UPDATE_DATE
107 ,X_CURRENT_LAST_UPDATE_DATE => X_CURRENT_LAST_UPDATE_DATE
108 ,X_CUSTOM_MODE => X_CUSTOM_MODE
109 );
110 end DO_TL_UPDATE_INSERT;
111
112 procedure KEY_TO_IDS_2 (
113 X_RULE_ID in NUMBER,
114 X_RULE_KEY in VARCHAR2,
115 X_ACTION_TYPE_NAME in VARCHAR2,
116 X_PARAMETER in VARCHAR2,
117 X_ITEM_CLASS_NAME in VARCHAR2,
118 X_ACTION_ID out nocopy NUMBER,
119 X_EXISTING_RULE_KEY out nocopy VARCHAR2,
120 X_RULE_COUNT out nocopy NUMBER,
121 X_ITEM_CLASS_ID out nocopy NUMBER
122 ) is
123 cursor CSR_CHECK_RULE_KEY
124 (
125 X_RULE_KEY in VARCHAR2
126 ) is
127 select RULE_ID
128 from AME_RULES
129 where RULE_KEY = X_RULE_KEY;
130 cursor CSR_RULE_KEY
131 (
132 X_RULE_ID in NUMBER
133 ) is
134 select RULE_KEY
135 from AME_RULES
136 where RULE_ID = X_RULE_ID;
137 cursor CSR_GET_ITEM_CLASS_ID
138 (
139 X_ITEM_CLASS_NAME in VARCHAR2
140 ) is
141 select ITEM_CLASS_ID
142 from AME_ITEM_CLASSES
143 where NAME = X_ITEM_CLASS_NAME
144 and sysdate between START_DATE
145 and nvl(END_DATE - (1/86400), sysdate);
146 cursor CSR_GET_RULE_COUNT
147 (
148 X_RULE_ID in NUMBER
149 ) is
150 select COUNT(*)
151 from AME_RULES
152 where RULE_ID = X_RULE_ID;
153 cursor CSR_GET_ACTION_ID is
154 select action_id
155 from ame_actions aa,
156 ame_action_types aat
157 where aa.parameter = X_PARAMETER
158 and aat.name = X_ACTION_TYPE_NAME
159 and aat.action_type_id = aa.action_type_id
160 and sysdate between aa.start_date and
161 nvl(aa.end_date - (1/86400),sysdate)
162 and sysdate between aat.start_date and
163 nvl(aat.end_date - (1/86400),sysdate);
164 X_RULE_KEY_CHECK NUMBER;
165 errorCode integer;
166 errorMessage ame_util.longestStringType;
167 begin
168 if X_AME_INSTALLATION_LEVEL is null then
169 X_EXISTING_RULE_KEY:= null;
170 X_ITEM_CLASS_ID:= null;
171 open CSR_GET_ACTION_ID;
172 fetch CSR_GET_ACTION_ID into X_ACTION_ID;
173 close CSR_GET_ACTION_ID;
174 else
175 open CSR_CHECK_RULE_KEY (
176 X_RULE_KEY
177 );
178 -- fetch RULE if there is a match on RULE_KEY
179 -- raise an exception
180 fetch CSR_CHECK_RULE_KEY into X_RULE_KEY_CHECK;
181 if (CSR_CHECK_RULE_KEY%found) then
182 raise duplicateRuleKeyException;
183 end if;
184 close CSR_CHECK_RULE_KEY;
185 open CSR_RULE_KEY (
186 X_RULE_ID
187 );
188 -- fetch EXISTING RULE KEY if there is a match on RULE_ID
189 fetch CSR_RULE_KEY into X_EXISTING_RULE_KEY;
190 if (CSR_RULE_KEY%notfound) then
191 X_EXISTING_RULE_KEY := null;
192 end if;
193 close CSR_RULE_KEY;
194 -- get item_class_id
195 open CSR_GET_ITEM_CLASS_ID (
196 X_ITEM_CLASS_NAME
197 );
198 fetch CSR_GET_ITEM_CLASS_ID into X_ITEM_CLASS_ID;
199 if (CSR_GET_ITEM_CLASS_ID%notfound) then
200 X_ITEM_CLASS_ID := null;
201 end if;
202 close CSR_GET_ITEM_CLASS_ID;
203 end if;
204 open CSR_GET_RULE_COUNT (
205 X_RULE_ID
206 );
207 fetch CSR_GET_RULE_COUNT
208 into X_RULE_COUNT;
209 close CSR_GET_RULE_COUNT;
210 exception
211 when duplicateRuleKeyException then
212 errorCode := -20001;
213 errorMessage := 'OAM is attempting to upload a duplicate rule key. ';
214 ame_util.runtimeException(packageNameIn => 'ame_rules_api2',
215 routineNameIn => 'key_to_ids_2',
216 exceptionNumberIn => errorCode,
217 exceptionStringIn => errorMessage);
218 raise;
219 when others then
220 ame_util.runtimeException('ame_rules_api2',
221 'key_to_ids_2',
222 sqlcode,
223 sqlerrm);
224 raise;
225 end KEY_TO_IDS_2;
226
227 procedure VALIDATE_RULE_TYPE (
228 X_RULE_TYPE in NUMBER
229 ) is
230 invalidRuleTypeException exception;
231 errorCode integer;
232 errorMessage ame_util.longestStringType;
233 begin
234 X_AME_INSTALLATION_LEVEL:= fnd_profile.value('AME_INSTALLATION_LEVEL');
235 if X_AME_INSTALLATION_LEVEL is null then
236 if (X_RULE_TYPE not in (ame_util.authorityRuleType
237 ,ame_util.exceptionRuleType
238 ,ame_util.preListGroupRuleType
239 ,ame_util.postListGroupRuleType
240 )) then
241 raise invalidRuleTypeException;
242 end if;
243 else
244 if (X_RULE_TYPE not in (ame_util.authorityRuleType
245 ,ame_util.exceptionRuleType
246 ,ame_util.preListGroupRuleType
247 ,ame_util.postListGroupRuleType
248 ,ame_util.productionRuleType
249 )) then
250 raise invalidRuleTypeException;
251 end if;
252 end if;
253 exception
254 when invalidRuleTypeException then
255 errorCode := -20001;
256 errorMessage := 'OAM is attempting to upload an invalid rule type. ';
257 ame_util.runtimeException(packageNameIn => 'ame_rules_api2',
258 routineNameIn => 'validate_rule_type',
259 exceptionNumberIn => errorCode,
260 exceptionStringIn => errorMessage);
261 raise_application_error(errorCode,
262 errorMessage);
263 when others then
264 ame_util.runtimeException('ame_rules_api2',
265 'validate_rule_type',
266 sqlcode,
267 sqlerrm);
268 raise;
269 end VALIDATE_RULE_TYPE;
270
271 procedure INSERT_ROW (
272 X_RULE_KEY in VARCHAR2,
273 X_RULE_TYPE in NUMBER,
274 X_ACTION_ID in NUMBER,
275 X_CREATED_BY in NUMBER,
276 X_CREATION_DATE in DATE,
277 X_LAST_UPDATED_BY in NUMBER,
278 X_LAST_UPDATE_DATE in DATE,
279 X_LAST_UPDATE_LOGIN in NUMBER,
280 X_START_DATE in DATE,
281 X_DESCRIPTION in VARCHAR2,
282 X_ITEM_CLASS_ID in NUMBER,
283 X_OBJECT_VERSION_NUMBER in NUMBER)
284 is
285 lockHandle varchar2(500);
286 returnValue integer;
287 X_RULE_ID number;
288 begin
289
290 DBMS_LOCK.ALLOCATE_UNIQUE (lockname =>'AME_RULES.'||X_RULE_KEY,lockhandle => lockHandle);
291 returnValue := DBMS_LOCK.REQUEST(lockhandle => lockHandle,timeout => 0, release_on_commit=>true);
292 if returnValue = 0 then
293 select ame_rules_s.nextval into X_RULE_ID from dual;
294 insert into AME_RULES
295 (
296 RULE_ID,
297 RULE_KEY,
298 RULE_TYPE,
299 ACTION_ID,
300 CREATED_BY,
301 CREATION_DATE,
302 LAST_UPDATED_BY,
303 LAST_UPDATE_DATE,
304 LAST_UPDATE_LOGIN,
305 START_DATE,
306 END_DATE,
307 DESCRIPTION,
308 ITEM_CLASS_ID,
309 OBJECT_VERSION_NUMBER
310 ) select
311 X_RULE_ID,
312 x_RULE_KEY,
313 X_RULE_TYPE,
314 X_ACTION_ID,
315 X_CREATED_BY,
316 X_CREATION_DATE,
317 X_LAST_UPDATED_BY,
318 X_LAST_UPDATE_DATE,
319 X_LAST_UPDATE_LOGIN,
320 X_START_DATE,
321 AME_SEED_UTILITY.GET_DEFAULT_END_DATE,
322 X_DESCRIPTION,
323 X_ITEM_CLASS_ID,
324 X_OBJECT_VERSION_NUMBER
325 from sys.dual
326 where not exists (select NULL
327 from AME_RULES
328 where RULE_KEY = X_RULE_KEY
329 and sysdate between START_DATE
330 and nvl(END_DATE - (1/86400), sysdate));
331 if sql%found then
332 if not AME_SEED_UTILITY.MLS_ENABLED then
333 return;
334 end if;
335 insert into AME_RULES_TL
336 (RULE_ID
337 ,DESCRIPTION
338 ,CREATED_BY
339 ,CREATION_DATE
340 ,LAST_UPDATED_BY
341 ,LAST_UPDATE_DATE
342 ,LAST_UPDATE_LOGIN
343 ,LANGUAGE
344 ,SOURCE_LANG
345 ) select X_RULE_ID,
346 X_DESCRIPTION,
347 X_CREATED_BY,
348 X_CREATION_DATE,
349 X_LAST_UPDATED_BY,
350 X_LAST_UPDATE_DATE,
351 X_LAST_UPDATE_LOGIN,
352 L.LANGUAGE_CODE,
353 userenv('LANG')
354 from FND_LANGUAGES L
355 where L.INSTALLED_FLAG in ('I', 'B')
356 and not exists (select null
357 from AME_RULES_TL T
358 where T.RULE_ID = X_RULE_ID
359 and T.LANGUAGE = L.LANGUAGE_CODE);
360 end if;
361 end if;
362 end INSERT_ROW;
363
364 procedure INSERT_ROW_2 (
365 X_RULE_ID in NUMBER,
366 X_RULE_KEY in VARCHAR2,
367 X_RULE_TYPE in NUMBER,
368 X_ACTION_ID in NUMBER,
369 X_CREATED_BY in NUMBER,
370 X_CREATION_DATE in DATE,
371 X_LAST_UPDATED_BY in NUMBER,
372 X_LAST_UPDATE_DATE in DATE,
373 X_LAST_UPDATE_LOGIN in NUMBER,
374 X_START_DATE in DATE,
375 X_DESCRIPTION in VARCHAR2,
376 X_ITEM_CLASS_ID in NUMBER,
377 X_OBJECT_VERSION_NUMBER in NUMBER)
378 is
379 lockHandle varchar2(500);
380 returnValue integer;
381 begin
382 DBMS_LOCK.ALLOCATE_UNIQUE (lockname =>'AME_RULES.'||X_RULE_ID,lockhandle => lockHandle);
383 returnValue := DBMS_LOCK.REQUEST(lockhandle => lockHandle,timeout => 0, release_on_commit=>true);
384 if returnValue = 0 then
385 insert into AME_RULES
386 (
387 RULE_ID,
388 RULE_KEY,
389 RULE_TYPE,
390 ACTION_ID,
391 CREATED_BY,
392 CREATION_DATE,
393 LAST_UPDATED_BY,
394 LAST_UPDATE_DATE,
395 LAST_UPDATE_LOGIN,
396 START_DATE,
397 END_DATE,
398 DESCRIPTION,
399 ITEM_CLASS_ID,
400 OBJECT_VERSION_NUMBER
401 ) select
402 X_RULE_ID,
403 X_RULE_KEY,
404 X_RULE_TYPE,
405 X_ACTION_ID,
406 X_CREATED_BY,
407 X_CREATION_DATE,
408 X_LAST_UPDATED_BY,
409 X_LAST_UPDATE_DATE,
410 X_LAST_UPDATE_LOGIN,
411 X_START_DATE,
412 AME_SEED_UTILITY.GET_DEFAULT_END_DATE,
413 X_DESCRIPTION,
414 X_ITEM_CLASS_ID,
415 X_OBJECT_VERSION_NUMBER
416 from sys.dual
417 where not exists (select NULL
418 from AME_RULES
419 where RULE_ID = X_RULE_ID
420 and ((START_DATE - (1/86400)) <= sysdate)
421 and (((END_DATE - (1/86400)) >= sysdate)
422 or (END_DATE is null)));
423
424 if sql%found then
425 if not AME_SEED_UTILITY.MLS_ENABLED then
426 return;
427 end if;
431 ,CREATED_BY
428 insert into AME_RULES_TL
429 (RULE_ID
430 ,DESCRIPTION
432 ,CREATION_DATE
433 ,LAST_UPDATED_BY
434 ,LAST_UPDATE_DATE
435 ,LAST_UPDATE_LOGIN
436 ,LANGUAGE
437 ,SOURCE_LANG
438 ) select X_RULE_ID,
439 X_DESCRIPTION,
440 X_CREATED_BY,
441 X_CREATION_DATE,
442 X_LAST_UPDATED_BY,
443 X_LAST_UPDATE_DATE,
444 X_LAST_UPDATE_LOGIN,
445 L.LANGUAGE_CODE,
446 userenv('LANG')
447 from FND_LANGUAGES L
448 where L.INSTALLED_FLAG in ('I', 'B')
449 and not exists (select null
450 from AME_RULES_TL T
451 where T.RULE_ID = X_RULE_ID
452 and T.LANGUAGE = L.LANGUAGE_CODE);
453 end if;
454 end if;
455 end INSERT_ROW_2;
456
457 procedure DELETE_ROW (
458 X_RULE_KEY in VARCHAR2
459 ) is
460 begin
461 if AME_SEED_UTILITY.MLS_ENABLED then
462 delete from AME_RULES_TL
463 where RULE_ID in (select RULE_ID
464 from AME_RULES
465 where RULE_KEY = X_RULE_KEY);
466 end if;
467 delete from AME_RULES
468 where RULE_KEY = X_RULE_KEY;
469 if (sql%notfound) then
470 raise no_data_found;
471 end if;
472 end DELETE_ROW;
473
474 procedure LOAD_ROW (
475 X_RULE_KEY in VARCHAR2,
476 X_RULE_ID in VARCHAR2,
477 X_ACTION_TYPE_NAME in VARCHAR2,
478 X_PARAMETER in VARCHAR2,
479 X_RULE_TYPE in VARCHAR2,
480 X_DESCRIPTION in VARCHAR2,
481 X_ITEM_CLASS_NAME in VARCHAR2,
482 X_OWNER in VARCHAR2,
483 X_LAST_UPDATE_DATE in VARCHAR2,
484 X_CUSTOM_MODE in VARCHAR2
485 )
486 is
487 X_ACTION_ID NUMBER :=null;
488 X_CREATED_BY NUMBER;
489 X_CUSTOM_DETECT BOOLEAN := false;
490 X_EXISTING_RULE_KEY ame_rules.rule_key%type:=null;
491 X_ITEM_CLASS_ID NUMBER;
492 X_LAST_UPDATED_BY NUMBER;
493 X_LAST_UPDATE_LOGIN NUMBER;
494 X_RULE_ID_LOAD NUMBER;
495 X_RULE_COUNT NUMBER:=0;
496 X_RULE_KEY2 VARCHAR2(100);
497 begin
498 X_AME_INSTALLATION_LEVEL:= fnd_profile.value('AME_INSTALLATION_LEVEL');
499 --for pre-AME 11510 do not upload rules if item class does not belong
500 --to header or lineitem item class
501 if X_AME_INSTALLATION_LEVEL is null then
502 if X_ITEM_CLASS_NAME is not null
503 and X_ITEM_CLASS_NAME not in(
504 ame_util.headerItemClassName,
505 ame_util.lineItemItemClassName
506 ) then
507 return;
508 elsif X_ACTION_TYPE_NAME in ('pre-chain-of-authority approvals',
509 'post-chain-of-authority approvals',
510 'approval-group chain of authority'
511 ) then
512 return;
513 end if;
514 end if;
515 VALIDATE_RULE_TYPE (
516 X_RULE_TYPE
517 );
518 OWNER_TO_WHO (
519 X_OWNER,
520 X_CREATED_BY,
521 X_LAST_UPDATED_BY,
522 X_LAST_UPDATE_LOGIN
523 );
524 --the if part of the code executes only for AME 11510
525 if X_RULE_ID > 0 then
526 if X_AME_INSTALLATION_LEVEL is not null then
527 X_RULE_ID_LOAD := null;
528 -- RULE_ID is POSITIVE - DRIVE OFF RULE_KEY
529 KEY_TO_IDS (
530 X_RULE_KEY,
531 X_ITEM_CLASS_NAME,
532 X_RULE_ID_LOAD,
533 X_ITEM_CLASS_ID,
534 X_CUSTOM_DETECT
535 );
536 -- the rule row was found matching the RULE_KEY
537 -- however it is custom created and will have an '@' sign prepended
538 -- insert a new row
539 --the following insert does not occur for prior versions of AME 11510
540 if AME_SEED_UTILITY.IS_SEED_USER(X_OWNER) and
541 (X_RULE_ID_LOAD is not null) and
542 X_CUSTOM_DETECT then
543 update AME_RULES
544 set RULE_KEY = '@' || X_RULE_KEY
545 where RULE_KEY = X_RULE_KEY;
546 INSERT_ROW (
547 X_RULE_KEY,
548 X_RULE_TYPE,
549 X_ACTION_ID,
550 X_CREATED_BY,
551 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
552 X_LAST_UPDATED_BY,
553 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
554 X_LAST_UPDATE_LOGIN,
555 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
556 X_DESCRIPTION,
557 X_ITEM_CLASS_ID,
558 1);
559 end if;
560 -- the rule row was not found insert a new row
561 if (X_RULE_ID_LOAD is null) then
562 INSERT_ROW (
563 X_RULE_KEY,
564 X_RULE_TYPE,
565 X_ACTION_ID,
566 X_CREATED_BY,
567 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
568 X_LAST_UPDATED_BY,
569 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
570 X_LAST_UPDATE_LOGIN,
571 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
572 X_DESCRIPTION,
573 X_ITEM_CLASS_ID,
574 1);
575 -- the current row was found end date the current row
576 -- do not update or insert
580 -- RULE_ID is NEGATIVE - DRIVE OFF RULE_ID
577 end if;
578 end if;
579 else --ldt is prior version of AME 11510
581 KEY_TO_IDS_2 (
582 X_RULE_ID,
583 X_RULE_KEY,
584 X_ACTION_TYPE_NAME,
585 X_PARAMETER,
586 X_ITEM_CLASS_NAME,
587 X_ACTION_ID,
588 X_EXISTING_RULE_KEY,
589 X_RULE_COUNT,
590 X_ITEM_CLASS_ID
591 );
592 -- Populate the Rule Key
593 X_RULE_KEY2:= X_RULE_KEY;
594 -- the current row was not found insert a new row
595 if (X_RULE_COUNT = 0) then
596 INSERT_ROW_2 (
597 X_RULE_ID,
598 X_RULE_KEY2,
599 X_RULE_TYPE,
600 X_ACTION_ID,
601 X_CREATED_BY,
602 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
603 X_LAST_UPDATED_BY,
604 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
605 X_LAST_UPDATE_LOGIN,
606 to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS'),
607 X_DESCRIPTION,
608 X_ITEM_CLASS_ID,
609 1);
610 end if;
611 -- a current row is found.
612 -- the rule key is from an older ldt and
613 -- must be synchronized with the newer ldt extract from SEED
617 update AME_RULES
614 if (X_RULE_COUNT > 0) and
615 (X_EXISTING_RULE_KEY is not null) and
616 (X_EXISTING_RULE_KEY <> X_RULE_KEY) then
618 set RULE_KEY = X_RULE_KEY
619 where RULE_KEY = X_EXISTING_RULE_KEY
620 and RULE_ID = X_RULE_ID;
621 end if;
622 end if;
623 exception
624 when duplicateRuleKeyException then
625 null;
626 when others then
627 ame_util.runtimeException('ame_rules_api2',
628 'load_row',
629 sqlcode,
630 sqlerrm);
631 raise;
632 end LOAD_ROW;
633
634 procedure TRANSLATE_ROW
635 (X_RULE_KEY in varchar2
636 ,X_DESCRIPTION in varchar2
637 ,X_OWNER in varchar2
638 ,X_LAST_UPDATE_DATE in varchar2
639 ,X_CUSTOM_MODE in varchar2
640 ) as
641 X_CURRENT_OWNER number;
642 X_CURRENT_LAST_UPDATE_DATE varchar2(19);
643 X_CREATED_BY varchar2(100);
644 X_RULE_ID number;
645 begin
646 if not AME_SEED_UTILITY.MLS_ENABLED then
647 return;
648 end if;
649 begin
653 ARU.RULE_ID
650 select ARUTL.LAST_UPDATED_BY,
651 AME_SEED_UTILITY.DATE_AS_STRING(ARUTL.LAST_UPDATE_DATE),
652 AME_SEED_UTILITY.OWNER_AS_STRING(ARUTL.CREATED_BY),
654 into X_CURRENT_OWNER,
655 X_CURRENT_LAST_UPDATE_DATE,
656 X_CREATED_BY,
657 X_RULE_ID
658 from AME_RULES ARU,
659 AME_RULES_TL ARUTL
660 where ARU.RULE_KEY = X_RULE_KEY
661 and sysdate between ARU.START_DATE and nvl(ARU.END_DATE - (1/86400),sysdate)
662 and ARUTL.RULE_ID = ARU.RULE_ID
663 and ARUTL.LANGUAGE = userenv('LANG');
664 if DO_TL_UPDATE_INSERT
665 (X_OWNER => AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER),
666 X_CURRENT_OWNER => X_CURRENT_OWNER,
667 X_LAST_UPDATE_DATE => X_LAST_UPDATE_DATE,
668 X_CURRENT_LAST_UPDATE_DATE => X_CURRENT_LAST_UPDATE_DATE,
669 X_CREATED_BY => X_CREATED_BY,
670 X_CUSTOM_MODE => X_CUSTOM_MODE) then
671 update AME_RULES_TL ARUTL
672 set DESCRIPTION = nvl(X_DESCRIPTION,DESCRIPTION),
673 SOURCE_LANG = userenv('LANG'),
674 LAST_UPDATE_DATE = AME_SEED_UTILITY.DATE_AS_DATE(X_LAST_UPDATE_DATE),
675 LAST_UPDATED_BY = AME_SEED_UTILITY.OWNER_AS_INTEGER(X_OWNER),
676 LAST_UPDATE_LOGIN = 0
677 where ARUTL.RULE_ID = X_RULE_ID
678 and userenv('LANG') in (ARUTL.LANGUAGE,ARUTL.SOURCE_LANG);
679 end if;
680 exception
681 when no_data_found then
682 null;
683 end;
684 end TRANSLATE_ROW;
685
686 END AME_RULES_API2;