[Home] [Help]
PACKAGE BODY: APPS.OKC_XPRT_TMPL_RULE_ASSNS_PVT
Source
1 PACKAGE BODY OKC_XPRT_TMPL_RULE_ASSNS_PVT AS
2 /* $Header: OKCVXRULASSNB.pls 120.0 2005/05/25 19:25:54 appldev noship $ */
3
4
5 ------------------------------------------------------------------------------
6 -- GLOBAL CONSTANTS
7 ------------------------------------------------------------------------------
8 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKC_XPRT_TMPL_RULE_ASSNS_PVT';
9 G_APP_NAME CONSTANT VARCHAR2(3) := OKC_API.G_APP_NAME;
10
11 G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
12 G_MODULE CONSTANT VARCHAR2(250) := 'okc.plsql.'||g_pkg_name||'.';
13 G_APPLICATION_ID CONSTANT NUMBER :=510; -- OKC Application
14
15 G_FALSE CONSTANT VARCHAR2(1) := FND_API.G_FALSE;
16 G_TRUE CONSTANT VARCHAR2(1) := FND_API.G_TRUE;
17
18 G_RET_STS_SUCCESS CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
19 G_RET_STS_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_ERROR;
20 G_RET_STS_UNEXP_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
21
22 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKC_UNEXPECTED_ERROR';
23 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'ERROR_MESSAGE';
24 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'ERROR_CODE';
25 G_UNABLE_TO_RESERVE_REC CONSTANT VARCHAR2(200) := OKC_API.G_UNABLE_TO_RESERVE_REC;
26
27
28 PROCEDURE copy_template_rule_assns
29 (
30 p_api_version IN NUMBER,
31 p_init_msg_list IN VARCHAR2,
32 p_commit IN VARCHAR2,
33 p_source_template_id IN NUMBER,
34 p_target_template_id IN NUMBER,
35 x_return_status OUT NOCOPY VARCHAR2,
36 x_msg_data OUT NOCOPY VARCHAR2,
37 x_msg_count OUT NOCOPY NUMBER
38 ) IS
39
40 CURSOR csr_template_org(p_template_id IN NUMBER) IS
41 SELECT org_id
42 FROM okc_terms_templates_all
43 WHERE template_id = p_template_id;
44
45 -- get all rules on source template that are Not Inactive
46 CURSOR csr_template_rules IS
47 SELECT t.rule_id
48 FROM okc_xprt_template_rules t,
49 okc_xprt_rule_hdrs_all r
50 WHERE r.rule_id = t.rule_id
51 AND r.status_code <> 'INACTIVE'
52 AND NVL(t.deleted_flag,'N') <> 'Y'
53 AND t.template_id = p_source_template_id;
54
55 -- Copy all questions from the source template
56 -- if the question belongs to Inactive rule, UI will delete it
57 -- Bug 4070731 modified to copy runtime_available_flag as 'N'
58 -- bug 4111451 Undo the above bug 4070731
59 CURSOR csr_template_questions IS
60 SELECT question_id,
61 mandatory_flag,
62 sequence_num,
63 question_rule_status,
64 runtime_available_flag
65 FROM okc_xprt_question_orders
66 WHERE template_id = p_source_template_id;
67
68 l_api_version CONSTANT NUMBER := 1;
69 l_api_name CONSTANT VARCHAR2(30) := 'copy_template_rule_assns';
70 l_source_template_org_id okc_terms_templates_all.org_id%TYPE;
71 l_target_template_org_id okc_terms_templates_all.org_id%TYPE;
72
73
74 TYPE ruleIdList IS TABLE OF okc_xprt_template_rules.rule_id%TYPE INDEX BY BINARY_INTEGER;
75 TYPE questionIdList IS TABLE OF okc_xprt_question_orders.question_id%TYPE INDEX BY BINARY_INTEGER;
76 TYPE mandatoryFlagList IS TABLE OF okc_xprt_question_orders.mandatory_flag%TYPE INDEX BY BINARY_INTEGER;
77 TYPE sequenceNumList IS TABLE OF okc_xprt_question_orders.sequence_num%TYPE INDEX BY BINARY_INTEGER;
78 TYPE questionRuleStatusList IS TABLE OF okc_xprt_question_orders.question_rule_status%TYPE INDEX BY BINARY_INTEGER;
79 TYPE runtimeAvailableFlagList IS TABLE OF okc_xprt_question_orders.runtime_available_flag%TYPE INDEX BY BINARY_INTEGER;
80
81
82 rule_id_tbl ruleIdList;
83 question_id_tbl questionIdList;
84 mandatory_flag_tbl mandatoryFlagList;
85 sequence_num_tbl sequenceNumList;
86 question_rule_status_tbl questionRuleStatusList;
87 runtime_available_flag_tbl runtimeAvailableFlagList;
88
89 BEGIN
90
91 -- start debug log
92 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
93 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
94 G_MODULE||l_api_name,
95 '100: Entered '||G_PKG_NAME ||'.'||l_api_name);
96 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
97 G_MODULE||l_api_name,
98 '100: p_source_template_id : '||p_source_template_id);
99 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
100 G_MODULE||l_api_name,
101 '100: p_target_template_id : '||p_target_template_id);
102 END IF;
103
104 -- Standard call to check for call compatibility.
105 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
106 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
107 END IF;
108
109 IF FND_API.to_Boolean( p_init_msg_list ) THEN
110 FND_MSG_PUB.initialize;
111 END IF;
112
113 x_return_status := G_RET_STS_SUCCESS;
114
115 -- Check if both templates have the same Org Id else skip copy as we don't copy
116 -- rules in case of global template to local template copy
117
118 OPEN csr_template_org(p_template_id => p_source_template_id);
119 FETCH csr_template_org INTO l_source_template_org_id;
120 CLOSE csr_template_org;
121
122 OPEN csr_template_org(p_template_id => p_target_template_id);
123 FETCH csr_template_org INTO l_target_template_org_id;
124 CLOSE csr_template_org;
125
126 -- debug log
127 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
128 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
129 G_MODULE||l_api_name,
130 '110: l_source_template_org_id : '||l_source_template_org_id);
131 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
132 G_MODULE||l_api_name,
133 '110: l_target_template_org_id : '||l_target_template_org_id);
134 END IF;
135
136 IF l_source_template_org_id = l_target_template_org_id THEN
137 -- both templates in same Org, copy rules
138
139 -- Copy Local Rules
140 OPEN csr_template_rules;
141 FETCH csr_template_rules BULK COLLECT INTO rule_id_tbl;
142 CLOSE csr_template_rules;
143
144 IF rule_id_tbl.COUNT > 0 THEN
145
146 FORALL i IN rule_id_tbl.FIRST..rule_id_tbl.LAST
147
148 INSERT INTO okc_xprt_template_rules
149 (
150 TEMPLATE_RULE_ID,
151 TEMPLATE_ID,
152 RULE_ID,
153 OBJECT_VERSION_NUMBER,
154 CREATED_BY,
155 CREATION_DATE,
156 LAST_UPDATED_BY,
157 LAST_UPDATE_DATE,
158 LAST_UPDATE_LOGIN,
159 DELETED_FLAG
160 )
161 VALUES
162 (
163 okc_xprt_template_rules_s.NEXTVAL,
164 p_target_template_id,
165 rule_id_tbl(i),
166 1,
167 Fnd_Global.User_Id,
168 sysdate,
169 Fnd_Global.User_Id,
170 sysdate,
171 Fnd_Global.Login_Id,
172 'N'
173 );
174
175 END IF; -- rule_id_tbl.COUNT > 0
176
177 -- Copy Template Question Order
178 OPEN csr_template_questions;
179 FETCH csr_template_questions BULK COLLECT INTO question_id_tbl,
180 mandatory_flag_tbl,
181 sequence_num_tbl,
182 question_rule_status_tbl,
183 runtime_available_flag_tbl;
184 CLOSE csr_template_questions;
185
186 IF question_id_tbl.COUNT > 0 THEN
187
188 FORALL i IN question_id_tbl.FIRST..question_id_tbl.LAST
189
190 INSERT INTO okc_xprt_question_orders
191 (
192 QUESTION_ORDER_ID,
193 TEMPLATE_ID,
194 QUESTION_ID,
195 MANDATORY_FLAG,
196 OBJECT_VERSION_NUMBER,
197 CREATED_BY,
198 CREATION_DATE,
199 LAST_UPDATED_BY,
200 LAST_UPDATE_DATE,
201 LAST_UPDATE_LOGIN,
202 SEQUENCE_NUM,
203 QUESTION_RULE_STATUS,
204 RUNTIME_AVAILABLE_FLAG
205 )
206 VALUES
207 (
208 okc_xprt_question_orders_s.NEXTVAL,
209 p_target_template_id,
210 question_id_tbl(i),
211 mandatory_flag_tbl(i),
212 1,
213 Fnd_Global.User_Id,
214 sysdate,
215 Fnd_Global.User_Id,
216 sysdate,
217 Fnd_Global.Login_Id,
218 sequence_num_tbl(i),
219 question_rule_status_tbl(i),
220 runtime_available_flag_tbl(i)
221 );
222
223 END IF; -- question_id_tbl.COUNT > 0
224
225
226 END IF; -- l_source_template_org_id = l_target_template_org_id
227
228
229
230 IF FND_API.To_Boolean( p_commit ) THEN
231 COMMIT WORK;
232 END IF;
233
234 -- Standard call to get message count and if count is 1, get message info.
235 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
236
237 -- end debug log
238 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
239 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
240 G_MODULE||l_api_name,
241 '1000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
242 END IF;
243
244 EXCEPTION
245 WHEN FND_API.G_EXC_ERROR THEN
246
247 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
248 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
249 G_MODULE||l_api_name,
250 '2000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
251 END IF;
252
253 x_return_status := G_RET_STS_ERROR;
254 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
255
256 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
257
258 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
259 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
260 G_MODULE||l_api_name,
261 '3000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
262 END IF;
263
264 x_return_status := G_RET_STS_UNEXP_ERROR;
265 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
266
267 WHEN OTHERS THEN
268
269 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
270 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
271 G_MODULE||l_api_name,
272 '4000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
273 END IF;
274
275 okc_Api.Set_Message(p_app_name => G_APP_NAME,
276 p_msg_name => G_UNEXPECTED_ERROR,
277 p_token1 => G_SQLCODE_TOKEN,
278 p_token1_value => sqlcode,
279 p_token2 => G_SQLERRM_TOKEN,
280 p_token2_value => sqlerrm);
281 x_return_status := G_RET_STS_UNEXP_ERROR;
282 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
283
284 END copy_template_rule_assns;
285
286
287 PROCEDURE delete_template_rule_assns
288 (
289 p_api_version IN NUMBER,
290 p_init_msg_list IN VARCHAR2,
291 p_commit IN VARCHAR2,
292 p_template_id IN NUMBER,
293 x_return_status OUT NOCOPY VARCHAR2,
294 x_msg_data OUT NOCOPY VARCHAR2,
298 l_api_name CONSTANT VARCHAR2(30) := 'delete_template_rule_assns';
295 x_msg_count OUT NOCOPY NUMBER
296 ) IS
297
299 l_api_version CONSTANT NUMBER := 1;
300
301
302
303 BEGIN
304
305 -- start debug log
306 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
307 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
308 G_MODULE||l_api_name,
309 '100: Entered '||G_PKG_NAME ||'.'||l_api_name);
310 END IF;
311
312 -- Standard call to check for call compatibility.
313 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
314 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
315 END IF;
316
317 IF FND_API.to_Boolean( p_init_msg_list ) THEN
318 FND_MSG_PUB.initialize;
319 END IF;
320 x_return_status := G_RET_STS_SUCCESS;
321
322 -- delete template rules
323 DELETE FROM okc_xprt_template_rules
324 WHERE template_id = p_template_id;
325
326 -- delete template questions
327 DELETE FROM okc_xprt_question_orders
328 WHERE template_id = p_template_id;
329
330
331
332 IF FND_API.To_Boolean( p_commit ) THEN
333 COMMIT WORK;
334 END IF;
335
336 -- Standard call to get message count and if count is 1, get message info.
337 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
338
339 -- end debug log
340 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
341 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
342 G_MODULE||l_api_name,
343 '1000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
344 END IF;
345
346 EXCEPTION
347 WHEN FND_API.G_EXC_ERROR THEN
348
349 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
350 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
351 G_MODULE||l_api_name,
352 '2000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
353 END IF;
354
355 x_return_status := G_RET_STS_ERROR;
356 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
357
358 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
359
360 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
361 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
362 G_MODULE||l_api_name,
363 '3000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
364 END IF;
365
366 x_return_status := G_RET_STS_UNEXP_ERROR;
367 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
368
369 WHEN OTHERS THEN
370
371 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
372 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
373 G_MODULE||l_api_name,
374 '4000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
375 END IF;
376
377 okc_Api.Set_Message(p_app_name => G_APP_NAME,
378 p_msg_name => G_UNEXPECTED_ERROR,
379 p_token1 => G_SQLCODE_TOKEN,
380 p_token1_value => sqlcode,
381 p_token2 => G_SQLERRM_TOKEN,
382 p_token2_value => sqlerrm);
383 x_return_status := G_RET_STS_UNEXP_ERROR;
384 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
385
386 END delete_template_rule_assns;
387
388 PROCEDURE merge_template_rule_assns
389 (
390 p_api_version IN NUMBER,
391 p_init_msg_list IN VARCHAR2,
392 p_commit IN VARCHAR2,
393 p_template_id IN NUMBER,
394 p_parent_template_id IN NUMBER,
395 x_return_status OUT NOCOPY VARCHAR2,
396 x_msg_data OUT NOCOPY VARCHAR2,
397 x_msg_count OUT NOCOPY NUMBER
398 ) IS
399
400 l_api_name CONSTANT VARCHAR2(30) := 'merge_template_rule_assns';
401 l_api_version CONSTANT NUMBER := 1;
402
403 CURSOR csr_xprt_enabled IS
404 SELECT NVL(contract_expert_enabled,'N')
405 FROM okc_terms_templates_all
406 WHERE template_id = p_parent_template_id;
407
408 l_xprt_enabled_flag okc_terms_templates_all.contract_expert_enabled%TYPE;
409
410
411 BEGIN
412
413 -- start debug log
414 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
415 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
416 G_MODULE||l_api_name,
417 '100: Entered '||G_PKG_NAME ||'.'||l_api_name);
418 END IF;
419
420 -- Standard call to check for call compatibility.
421 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
423 END IF;
424
425 IF FND_API.to_Boolean( p_init_msg_list ) THEN
426 FND_MSG_PUB.initialize;
427 END IF;
428
429 x_return_status := G_RET_STS_SUCCESS;
430
431 -- Delete Parent Template Rules
432 DELETE FROM okc_xprt_template_rules
433 WHERE template_id = p_parent_template_id;
434
435 -- Delete Parent Template Questions
436 DELETE FROM okc_xprt_question_orders
437 WHERE template_id = p_parent_template_id;
438
439 -- Check if the revision template is expert enabled and if not delete the rule data
440
441 OPEN csr_xprt_enabled;
442 FETCH csr_xprt_enabled INTO l_xprt_enabled_flag;
443 CLOSE csr_xprt_enabled;
444
445 IF l_xprt_enabled_flag = 'N' THEN
446
447 -- Delete Parent Template Rules
448 DELETE FROM okc_xprt_template_rules
452 DELETE FROM okc_xprt_question_orders
449 WHERE template_id = p_template_id;
450
451 -- Delete Parent Template Questions
453 WHERE template_id = p_template_id;
454
455 ELSE
456 -- revision template IS expert enabled
457
458 -- Update okc_xprt_template_rules for Revision template
459 UPDATE okc_xprt_template_rules
460 SET template_id = p_parent_template_id,
461 last_update_date = SYSDATE,
462 last_updated_by= FND_GLOBAL.USER_ID,
463 last_update_login= FND_GLOBAL.LOGIN_ID
464 WHERE template_id = p_template_id;
465
466 -- Update okc_xprt_question_orders for Revision template
467 UPDATE okc_xprt_question_orders
468 SET template_id = p_parent_template_id,
469 last_update_date = SYSDATE,
470 last_updated_by= FND_GLOBAL.USER_ID,
471 last_update_login= FND_GLOBAL.LOGIN_ID
472 WHERE template_id = p_template_id;
473
474 END IF;
475
476 IF FND_API.To_Boolean( p_commit ) THEN
477 COMMIT WORK;
478 END IF;
479
480 -- Standard call to get message count and if count is 1, get message info.
481 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
482
483 -- end debug log
484 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
485 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
486 G_MODULE||l_api_name,
487 '1000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
488 END IF;
489
490 EXCEPTION
491 WHEN FND_API.G_EXC_ERROR THEN
492
493 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
494 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
495 G_MODULE||l_api_name,
496 '2000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
497 END IF;
498
499 x_return_status := G_RET_STS_ERROR;
500 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
501
502 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
503
504 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
505 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
506 G_MODULE||l_api_name,
507 '3000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
508 END IF;
509
510 x_return_status := G_RET_STS_UNEXP_ERROR;
511 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
512
513 WHEN OTHERS THEN
514
515 IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
516 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
517 G_MODULE||l_api_name,
518 '4000: Leaving '||G_PKG_NAME ||'.'||l_api_name);
519 END IF;
520
521 okc_Api.Set_Message(p_app_name => G_APP_NAME,
522 p_msg_name => G_UNEXPECTED_ERROR,
523 p_token1 => G_SQLCODE_TOKEN,
524 p_token1_value => sqlcode,
525 p_token2 => G_SQLERRM_TOKEN,
526 p_token2_value => sqlerrm);
527 x_return_status := G_RET_STS_UNEXP_ERROR;
528 FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
529
530 END merge_template_rule_assns;
531
532
533
534
535 END OKC_XPRT_TMPL_RULE_ASSNS_PVT;