[Home] [Help]
PACKAGE BODY: APPS.CZ_UIOA_PVT
Source
1 PACKAGE BODY CZ_UIOA_PVT AS
2 /* $Header: czuioab.pls 120.86.12020000.2 2012/08/17 15:33:13 smanna ship $ */
3
4 G_GEN_VERSION CONSTANT VARCHAR2(25) :='11.5.20';
5 G_GEN_HEADER CONSTANT VARCHAR2(100) :='$Header: czuioab.pls 120.86.12020000.2 2012/08/17 15:33:13 smanna ship $';
6
7 G_DEFAULT_MASTER_TEMPLATE_ID CONSTANT INTEGER := 10;
8
9 G_PAGE_STATUS_CONTENT_TYPE CONSTANT INTEGER := 187;
10
11 G_TEMPLATE_USE_COPY CONSTANT INTEGER := 1;
12 G_TEMPLATE_USE_LOCAL_COPY CONSTANT INTEGER := 2;
13 G_TEMPLATE_USE_BY_REFERENCE CONSTANT INTEGER := 3;
14
15 G_DEFAULT_PRICE_DISPLAY CONSTANT INTEGER := 3;
16 G_DEFAULT_PRICE_UPDATE CONSTANT INTEGER := 1;
17
18 G_ONE_COL_CONTROL_LAYOUT CONSTANT INTEGER := 0;
19 G_TWO_COL_CONTROL_LAYOUT CONSTANT INTEGER := 1;
20 G_THREE_COL_CONTROL_LAYOUT CONSTANT INTEGER := 2;
21
22 G_PRODUCT_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_PRODUCT;
23 G_COMPONENT_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_COMPONENT;
24 G_REFERENCE_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_REFERENCE;
25 G_CONNECTOR_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_CONNECTOR;
26 G_BOM_MODEL_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_BOM_MODEL;
27 G_FEATURE_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_FEATURE;
28 G_OPTION_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_OPTION;
29 G_BOM_OPTION_CLASS_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_BOM_OPTION_CLASS;
30 G_BOM_STANDART_ITEM_TYPE CONSTANT INTEGER := CZ_TYPES.PS_NODE_TYPE_BOM_STANDART_ITEM;
31
32 G_UNDEFINED_DATA_TYPE CONSTANT INTEGER := CZ_TYPES.DATA_TYPE_NODE;
33
34 G_DEFAULT_CAPTION_RULE_ID CONSTANT INTEGER := 800;
35 G_CAPTION_RULE_TOKENNAME VARCHAR2(255);
36
37 G_CX_BUTTON_ACTION_TYPE CONSTANT INTEGER := 23;
38
39 G_OPTIONAL_INST_TYPE CONSTANT INTEGER := 1;
40 G_MANDATORY_INST_TYPE CONSTANT INTEGER := 2;
41 G_CONNECTOR_INST_TYPE CONSTANT INTEGER := 3;
42 G_MINMAX_INST_TYPE CONSTANT INTEGER := 4;
43
44 G_SINGLE_PAGE CONSTANT INTEGER := 0;
45 G_PAGE_FLOW CONSTANT INTEGER := 1;
46 G_SINGLE_LEVEL_MENU CONSTANT INTEGER := 2;
47 G_MULTI_LEVEL_MENU CONSTANT INTEGER := 3;
48 G_MODEL_TREE_MENU CONSTANT INTEGER := 4;
49 G_SUBTABS CONSTANT INTEGER := 5;
50
51 G_SINGLE_PG_TYPE CONSTANT NUMBER := 0;
52 G_SUBSECTIONS_PG_TYPE CONSTANT NUMBER := 1;
53 G_NEW_PAGES_PG_TYPE CONSTANT NUMBER := 2;
54 G_DRILLDOWN_PAGES_PG_TYPE CONSTANT NUMBER := 3;
55
56 G_UI_PAGE_NODE_TYPE CONSTANT NUMBER := 520;
57 G_UI_REGION_NODE_TYPE CONSTANT NUMBER := 521;
58 G_UI_REGULAR_NODE_TYPE CONSTANT NUMBER := 522;
59 G_UI_DRILLDOWN_NODE_TYPE CONSTANT NUMBER := 523;
60 G_UI_NONBOMADDINST_NODE_TYPE CONSTANT NUMBER := 524;
61 G_UI_BOMADDINST_NODE_TYPE CONSTANT NUMBER := 525;
62 G_UI_DELINST_NODE_TYPE CONSTANT NUMBER := 526;
63 G_UI_MINMAXREF_NODE_TYPE CONSTANT NUMBER := 527;
64 G_UI_CX_BUTTON_NODE_TYPE CONSTANT NUMBER := 528;
65 G_UI_PAGEDRILLDOWN_NODE_TYPE CONSTANT NUMBER := 529;
66 G_UMINMAX_CONNECTOR_TYPEID CONSTANT NUMBER := 541;
67
68 G_UNON_COUNT_FEATURE_TYPEID CONSTANT INTEGER := 537;
69 G_UCOUNT_FEATURE_TYPEID CONSTANT INTEGER := 540;
70 G_UCOUNT_FEATURE01_TYPEID CONSTANT INTEGER := 539;
71 G_UMINMAX_FEATURE_TYPEID CONSTANT INTEGER := 538;
72
73 G_ACTION_GO_TO_PAGE CONSTANT INTEGER := 1;
74 G_ACTION_CONFIGURE_SUBCOMP CONSTANT INTEGER := 9;
75
76 G_CZ_EXTENTSIONS_RULE_TYPE CONSTANT NUMBER := 300;
77 G_EXPR_SYS_ARGUMENT CONSTANT NUMBER := 217;
78 G_EVENT_ON_COMMAND_SIGID CONSTANT NUMBER := 2203;
79 G_GENERATE_OUTPUT_EVENT CONSTANT NUMBER := 31;
80 G_RAISE_COMMAND_EVENT CONSTANT NUMBER := 32;
81
82 G_NEW_UI_STATUS CONSTANT VARCHAR2(255) := 'NEW';
83 G_REFRESH_UI_STATUS CONSTANT VARCHAR2(255) := 'REFRESH';
84 G_RUNNING_STATUS CONSTANT VARCHAR2(255) := 'RUNNING';
85 G_ERROR_STATUS CONSTANT VARCHAR2(255) := 'ERROR';
86 G_PROCESSED_UI_STATUS CONSTANT VARCHAR2(255) := 'PROCESSED';
87
88 G_CX_VALID CONSTANT VARCHAR2(1) :='V';
89 G_CX_INVALID CONSTANT VARCHAR2(1) :='I';
90 G_CX_MUST_BE_DELETED CONSTANT VARCHAR2(1) :='D';
91
92 G_GLOBAL_TEMPLATES_UI_DEF_ID CONSTANT INTEGER := 0;
93
94 G_NO_FLAG CONSTANT VARCHAR2(1) := '0';
95 G_YES_FLAG CONSTANT VARCHAR2(1) := '1';
96
97 G_MARK_TO_ADD CONSTANT VARCHAR2(1) := '2';
98 G_MARK_TO_DELETE CONSTANT VARCHAR2(1) := '3';
99 G_MARK_TO_REFRESH CONSTANT VARCHAR2(1) := '4';
100 G_MARK_DO_NOT_REFRESH CONSTANT VARCHAR2(1) := '5';
101 G_MARK_TO_DEASSOCIATE CONSTANT VARCHAR2(1) := '6';
102 G_LIMBO_FLAG CONSTANT VARCHAR2(1) := '7';
103 G_MARK_TO_MOVE CONSTANT VARCHAR2(1) := '8';
104
105 G_CREATE_ONLY_UI_STRUCTURE CONSTANT VARCHAR2(1) := '1';
106 G_CREATE_ONLY_UI_XML CONSTANT VARCHAR2(1) := '2';
107
108 G_CONTAINER_TEMPLATE_ID INTEGER := 1;
109
110 G_NSTD_CONTAINER_TEMPLATE_ID CONSTANT INTEGER := 620;
111
112 G_2COLS_CONTAINER_TEMPLATE_ID CONSTANT INTEGER := 660;
113 G_3COLS_CONTAINER_TEMPLATE_ID CONSTANT INTEGER := 661;
114
115 G_DRILLDOWN_BUTTON_TEMPLATE_ID CONSTANT INTEGER := 230;
116 G_DRILLDOWN_IMAGE_TEMPLATE_ID CONSTANT INTEGER := 231;
117 G_DRILLDOWN_LABEL_TEMPLATE_ID CONSTANT INTEGER := 232;
118
119 G_DELETE_PAGE CONSTANT INTEGER := 1;
120 G_DELETE_ELEMENTS CONSTANT INTEGER := 2;
121 G_REFRESH_PAGE CONSTANT INTEGER := 3;
122 G_NEW_PAGE CONSTANT INTEGER := 4;
123
124 G_LABEL_PAIR_LAYOUT_STYLE CONSTANT INTEGER := 1;
125 G_WRAPPED_LAYOUT_STYLE CONSTANT INTEGER := 2;
126 G_TABLE_LAYOUT_STYLE CONSTANT INTEGER := 3;
127 G_OTHER_LAYOUT_STYLE CONSTANT INTEGER := 9;
128
129 G_DELETE_MODE CONSTANT VARCHAR2(1) := '0';
130 G_COPY_MODE CONSTANT VARCHAR2(1) := '0';
131
132 G_UMPERS CONSTANT VARCHAR2(1) := fnd_global.local_chr(38);
133
134 g_DRILLDOWN_TEMPLATE_ID INTEGER := 230;
135 g_DRILLDOWN_ELEM_SIGNATURE_ID INTEGER;
136 g_DRILLDOWN_B_SIGNATURE_ID INTEGER;
137
138 g_suppress_refresh_flag VARCHAR2(1) := '0';
139
140 G_USER_ATTRIBUTE1_NAME CONSTANT VARCHAR2(255) := 'user:attribute1';
141 G_USER_ATTRIBUTE2_NAME CONSTANT VARCHAR2(255) := 'user:attribute2';
142 G_USER_ATTRIBUTE3_NAME CONSTANT VARCHAR2(255) := 'user:attribute3';
143 G_USER_ATTRIBUTE4_NAME CONSTANT VARCHAR2(255) := 'user:attribute4';
144 G_USER_ATTRIBUTE5_NAME CONSTANT VARCHAR2(255) := 'user:attribute5';
145 G_USER_ATTRIBUTE10_NAME CONSTANT VARCHAR2(255) := 'user:attribute10';
146
147 G_UI_CONTENTS_TAG CONSTANT VARCHAR2(255) := 'ui:contents';
148 G_ID_ATTRIBUTE CONSTANT VARCHAR2(255) := 'id';
149
150 G_HEADER_TAG CONSTANT VARCHAR2(255) := 'oa:header';
151 G_NESTED_TAG CONSTANT VARCHAR2(255) := 'user:nested';
152 G_ROW_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:rowLayout';
153 G_CONTENT_CONTAINER_TAG CONSTANT VARCHAR2(255) := 'oa:contentContainer';
154 G_STACK_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:stackLayout';
155 G_TABLE_TAG CONSTANT VARCHAR2(255) := 'oa:table';
156 G_SUBMIT_BUTTON_TAG CONSTANT VARCHAR2(255) := 'oa:submitButton';
157 G_MSG_CHECKBOX_TAG CONSTANT VARCHAR2(255) := 'oa:messageCheckbox';
158 G_MSG_RADIO_BUTTON_TAG CONSTANT VARCHAR2(255) := 'oa:messageRadioButton';
159 G_MSG_STYLED_TEXT_TAG CONSTANT VARCHAR2(255) := 'oa:messageStyledText';
160 G_MSG_TEXT_INPUT_TAG CONSTANT VARCHAR2(255) := 'oa:messageTextInput';
161 G_MSG_CHOICE_TAG CONSTANT VARCHAR2(255) := 'oa:messageChoice';
162 G_TABLE_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:tableLayout';
163 G_CELL_FORMAT_TAG CONSTANT VARCHAR2(255) := 'oa:cellFormat';
164 G_FLOW_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:flowLayout';
165 G_DBL_COL_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:doubleColumnLayout';
166 G_SUB_TAB_LAYOUT_TAG CONSTANT VARCHAR2(255) := 'oa:subTabLayout';
167 G_TEXT_TAG CONSTANT VARCHAR2(255) := 'oa:staticStyledText';
168 G_BUTTON_TAG CONSTANT VARCHAR2(255) := 'oa:button';
169 G_IMAGE_TAG CONSTANT VARCHAR2(255) := 'oa:image';
170 G_SPACER_TAG CONSTANT VARCHAR2(255) := 'oa:spacer';
171 G_TEMPLATE_INCLUDE_TAG CONSTANT VARCHAR2(255) := 'oa:templateInclude';
172 G_RAW_TEXT_TAG CONSTANT VARCHAR2(255) := 'oa:rawText';
173 G_SWITCHER_TAG CONSTANT VARCHAR2(255) := 'oa:switcher';
174
175 G_INLINE_COPY_TMPL CONSTANT VARCHAR2(255) := 'TEMPLATE';
176 G_INLINE_COPY_UIPAGE CONSTANT VARCHAR2(255) := 'PAGE';
177
178 G_ROW_LAYOUT CONSTANT NUMBER := 6001;
179 G_CELL_FORMAT CONSTANT NUMBER := 6002;
180 G_FLOW_LAYOUT CONSTANT NUMBER := 6003;
181 G_STACK_LAYOUT CONSTANT NUMBER := 6004;
182 G_BULLETED_LIST CONSTANT NUMBER := 6005;
183 G_TABLE_LAYOUT CONSTANT NUMBER := 6006;
184 G_HEADER_REGION CONSTANT NUMBER := 6007;
185 G_SWITCHER_REGION CONSTANT NUMBER := 6008;
186 G_CASE_REGION CONSTANT NUMBER := 6009;
187 G_CONTENT_CONTAINER CONSTANT NUMBER := 6010;
188 G_UI_TEMPLATE_REFERENCE CONSTANT NUMBER := 6011;
189 G_SUMMARY_TABLE CONSTANT NUMBER := 6012;
190 G_ITEM_SELECTION_TABLE CONSTANT NUMBER := 6013;
191 G_INSTANCE_MANAGEMENT_TABLE CONSTANT NUMBER := 6014;
192 G_INSTANCE_MANAGEMENT_CONTROL CONSTANT NUMBER := 6015;
193 G_CONNECTION_NAVIGATOR CONSTANT NUMBER := 6016;
194 G_CONNECTION_TARGETS_TABLE CONSTANT NUMBER := 6017;
195 G_STYLED_TEXT CONSTANT NUMBER := 6018;
196 G_IMAGE CONSTANT NUMBER := 6019;
197 G_BUTTON CONSTANT NUMBER := 6020;
198 G_SPACER CONSTANT NUMBER := 6021;
199 G_TEXT_INPUT CONSTANT NUMBER := 6022;
200 G_DROPDOWN_LIST CONSTANT NUMBER := 6023;
201 G_CHECK_BOX CONSTANT NUMBER := 6024;
202 G_RADIO_BUTTON CONSTANT NUMBER := 6025;
203 G_SELECTION_STATUS_INDICATOR CONSTANT NUMBER := 6026;
204 G_RAW_TEXT CONSTANT NUMBER := 6027;
205 G_NODE_LIST_LAYOUT_REGION CONSTANT NUMBER := 6028;
206 G_NAVIGATION_BAR CONSTANT NUMBER := 6030;
207 G_LINK CONSTANT NUMBER := 6031;
208 G_BUTTON_BAR CONSTANT NUMBER := 6032;
209 G_RADIO_BUTTON_GROUP CONSTANT NUMBER := 6033;
210 G_SCRIPT CONSTANT NUMBER := 6034;
211 G_SEPARATOR CONSTANT NUMBER := 6035;
212 G_SERVLET_INCLUDE CONSTANT NUMBER := 6036;
213 G_SUBTAB_LAYOUT CONSTANT NUMBER := 6040;
214 G_TIP CONSTANT NUMBER := 6041;
215 G_TRAIN CONSTANT NUMBER := 6042;
216 G_PAGE CONSTANT NUMBER := 6044;
217 G_HIDESHOW_REGION CONSTANT NUMBER := 6045;
218 G_INSTANTIATION_CHECKBOX CONSTANT NUMBER := 6047;
219 G_ENHANCED_CHECKBOX CONSTANT NUMBER := 6048;
220 G_ENHANCED_RADIO_BUTTON CONSTANT NUMBER := 6049;
221 G_STATIC_STYLED_TEXT CONSTANT NUMBER := 6050;
222 G_FORMATTED_TEXT CONSTANT NUMBER := 6051;
223 G_EMPTY CONSTANT NUMBER := 6052;
224 G_NODE_LIST_ROW_LAYOUT CONSTANT NUMBER := 6053;
225 G_NODE_LIST_FLOW_LAYOUT CONSTANT NUMBER := 6055;
226 G_PAGE_INCLUDE_REGION CONSTANT NUMBER := 6068;
227 G_NODE_LIST_STACK_LAYOUT CONSTANT NUMBER := 6057;
228 G_NODE_LIST_BULLETED_LIST CONSTANT NUMBER := 6059;
229 G_NODE_LIST_TABLE_LAYOUT CONSTANT NUMBER := 6061;
230 G_FORMATTED_TEXT CONSTANT NUMBER := 6067;
231 G_PAGE_INCL_REGION_SIGNATURE CONSTANT NUMBER := 6073;
232
233 G_ADDED_FLAG CONSTANT VARCHAR2(1) := '0';
234 G_REMOVED_FLAG CONSTANT VARCHAR2(1) := '1';
235 G_EXISTS_FLAG CONSTANT VARCHAR2(1) := '3';
236
237 G_TABLELAYOUT_TEMPLATE VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/regions/TableLayoutRegion';
238 G_ANCHOR_TEMPLATE VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/regions/Anchor';
239 G_LINK_TEMPLATE VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/templates/Link';
240
241 g_PAGE_STATUS_TEMPLATE_ID NUMBER;
242
243 G_DEFAULT_START_URL VARCHAR2(255) := 'czContainer.jsp';
244 G_DEFAULT_PAGE_LAYOUT VARCHAR2(255) := '/oracle/apps/cz/runtime/oa/webui/pages/CZMainPage';
245
246 G_DRILLDOWN_TEMPLATE_NAME VARCHAR2(255);
247
248 G_MSGTEMP_RQDMSG_OVRCTRDIC NUMBER := 600;
249 G_MSGTEMP_RQDMSG_NOVRCTRDIC NUMBER := 601;
250 G_MSGTEMP_RQDMSG_INVLDINP NUMBER := 603;
251 G_MSGTEMP_RQDMSG_FATERR NUMBER := 613;
252
253 G_MSGTEMP_OPTMSG_VLDNOTIF NUMBER := 620;
254 G_MSGTEMP_OPTMSG_CNFRMSAVFIN NUMBER := 606;
255 G_MSGTEMP_OPTMSG_CNFRMCANCEL NUMBER := 608;
256 G_MSGTEMP_OPTMSG_CNFRMDELINST NUMBER := 610;
257 G_MSGTEMP_OPTMSG_CNFRMLDINST NUMBER := 628;
258 G_MSGTEMP_OPTMSG_CNFRMEDINST NUMBER := 616;
259 G_MSGTEMP_OPTMSG_QRYDELINST NUMBER := 630;
260
261 G_UTILTEMP_BB_BASICTXN NUMBER := 175;
262 G_UTILTEMP_BB_NSTXN NUMBER := 24;
263 G_UTILTEMP_BB_2PGNVG NUMBER := 177;
264 G_UTILTEMP_BB_NPGNVG NUMBER := 178;
265
266 G_UTILTEMP_PAGLAY_PGSTA NUMBER := 187;
267 G_UTILTEMP_BB_PRVWPG NUMBER := 186;
268 G_UTILTEMP_UPT_CFGPRV NUMBER := 651;
269 G_UTILTEMP_UPT_CXNCHO NUMBER := 545;
270
271 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
272 TYPE number_tbl_type_idx_vc2 IS TABLE OF NUMBER INDEX BY VARCHAR2(15);
273 --TYPE varchar_tbl_type IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
274 TYPE ui_page_elements_tbl_type IS TABLE OF CZ_UI_PAGE_ELEMENTS%ROWTYPE INDEX BY VARCHAR2(15);--kdande; Bug 6875560; 12-Mar-2008
275
276 -- fix for bug 6837809 : skudryav 28-Mar-2008
277 TYPE ui_page_el_int_tbl_type IS TABLE OF CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE INDEX BY BINARY_INTEGER;
278
279 TYPE ui_def_nodes_tbl_type IS TABLE OF CZ_UI_DEFS%ROWTYPE INDEX BY BINARY_INTEGER;
280 TYPE ui_page_sets_tbl_type IS TABLE OF CZ_UI_PAGE_SETS%ROWTYPE INDEX BY BINARY_INTEGER;
281 TYPE ui_pages_tbl_type IS TABLE OF CZ_UI_PAGES%ROWTYPE INDEX BY BINARY_INTEGER;
282 TYPE ui_page_refs_tbl_type IS TABLE OF CZ_UI_PAGE_REFS%ROWTYPE INDEX BY BINARY_INTEGER;
283 TYPE xml_dom_elements_tbl_type IS TABLE OF xmldom.DOMNode INDEX BY BINARY_INTEGER;
284
285 TYPE varchar2_tbl_type IS TABLE OF VARCHAR2(255) INDEX BY VARCHAR2(255);
286
287 TYPE xml_dom_nodes_tbl_type IS TABLE OF xmldom.DOMNode INDEX BY VARCHAR2(255);
288 g_page_elements_tbl xml_dom_nodes_tbl_type;
289
290
291 TYPE nested_number_tbl_type IS TABLE OF number_tbl_type INDEX BY BINARY_INTEGER;
292
293 g_jrad_trans_list jdr_utils.translationlist := jdr_utils.translationlist();
294 g_ref_expls_tbl number_tbl_type_idx_vc2;
295 g_ui_def_nodes_tbl ui_def_nodes_tbl_type;
296 g_ui_page_elements_tbl ui_page_elements_tbl_type;
297 g_ui_pages_counter_tbl number_tbl_type;
298 g_ui_pages_tbl ui_pages_tbl_type;
299 g_model_nodes_tbl model_nodes_tbl_type;
300 g_ui_page_refs_tbl ui_page_refs_tbl_type;
301 g_nbr_elements_on_page_tbl number_tbl_type;
302 g_ps_node_persist_id_tbl number_tbl_type_idx_vc2;
303 g_ui_action_ids_tbl number_tbl_type;
304 g_ui_refs_tbl number_tbl_type_idx_vc2;
305 g_ui_page_sets_tbl ui_page_sets_tbl_type;
306 g_template_jrad_name_tbl varchar_tbl_type;
307 g_template_id_tbl number_tbl_type;
308 g_template_ui_def_id_tbl number_tbl_type;
309 g_root_persist_id_tbl number_tbl_type_idx_vc2;
310 g_moved_content_tbl number_tbl_type;
311 g_cx_names_tbl number_tbl_type;
312 g_ref_cx_paths_tbl varchar_tbl_type;
313 g_last_seq_elem_tbl number_tbl_type;
314 g_handled_attr_id_tbl varchar_tbl_type;
315 g_local_ui_context ui_def_nodes_tbl_type;
316 g_check_boundaries_tbl varchar_tbl_type;
317 g_locked_templates_id_tbl number_tbl_type;
318 g_dom_elements_tbl xml_dom_elements_tbl_type;
319 g_elements_to_move nested_number_tbl_type;
320 g_tgt_pg_to_src_pg_map nested_number_tbl_type; -- used for moving nodes
321
322 g_dom_elements_to_move xml_dom_elements_tbl_type;
323
324 g_connector_counter NUMBER;
325 g_bomm_counter NUMBER;
326 g_mandatory_comp_counter NUMBER;
327 g_mandatory_ref_counter NUMBER;
328 g_minmax_ref_counter NUMBER;
329 g_optional_ref_counter NUMBER;
330 g_of_feature_counter NUMBER;
331 g_if_feature_counter NUMBER;
332 g_df_feature_counter NUMBER;
333 g_bf_feature_counter NUMBER;
334 g_tf_feature_counter NUMBER;
335 g_tot_feature_counter NUMBER;
336 g_rsc_feature_counter NUMBER;
337 g_itot_feature_counter NUMBER;
338 g_irsc_feature_counter NUMBER;
339 g_opt_counter NUMBER;
340
341 g_status VARCHAR2(255);
342 g_industry VARCHAR2(255);
343 g_ret BOOLEAN;
344
345 g_currentUINode NUMBER;
346 g_currUISeqVal NUMBER;
347 g_currentPageRef NUMBER;
348 g_currPageRefSeqVal NUMBER;
349 g_currentPage NUMBER;
350 g_currPageSeqVal NUMBER;
351 g_currentPageSet NUMBER;
352 g_currPageSetSeqVal NUMBER;
353 g_currentUIAction NUMBER;
354 g_currUIActionSeqVal NUMBER;
355 g_currentIntlText NUMBER;
356 g_currIntlTextSeqVal NUMBER;
357
358 g_IntlTextINCREMENT NUMBER := 20;
359 g_UINodeINCREMENT NUMBER := 20;
360 g_PageRefINCREMENT NUMBER := 20;
361 g_PageINCREMENT NUMBER := 20;
362 g_PageSetINCREMENT NUMBER := 20;
363 g_UIActionINCREMENT NUMBER := 20;
364
365 g_Elements_Per_Column NUMBER;
366 g_Num_Elements_On_Page NUMBER;
367
368 g_Use_Cache BOOLEAN := FALSE;
369 g_REFRESH_MODEL_PATH BOOLEAN := TRUE;
370
371 g_UI_Context CZ_UI_DEFS%ROWTYPE;
372
373 g_using_new_UI_refresh BOOLEAN;
374
375 g_ELEMENT_COUNTER NUMBER;
376
377 -------------- JDR DOC BUILDER/XML Parsing part -----------------
378
379 g_DOC xmldom.DOMDocument;
380 g_JRADDOC jdr_docbuilder.Document;
381 g_PARSER xmlparser.parser;
382 g_Null_Xml_Node xmldom.DOMNode;
383
384 g_MSG_COUNT NUMBER := 0;
385 g_MSG_DATA VARCHAR2(32000);
386 g_RETURN_STATUS VARCHAR2(10);
387 g_WRONG_PS_NODE_ID NUMBER;
388
389 MAX_CHUNK_SIZE CONSTANT INTEGER := 32000;
390
391 WRONG_UI_TEMPLATE EXCEPTION;
392 WRONG_UI_TO_REFRESH EXCEPTION;
393 PAGE_CANNOT_BE_SPLIT EXCEPTION;
394 WRONG_EXT_PS_TYPE EXCEPTION;
395 UNREACH_UI_NODE EXCEPTION;
396 --FAILED_TO_LOCK_MODEL EXCEPTION;
397 --FAILED_TO_LOCK_TEMPLATE EXCEPTION;
398
399 TYPE char_tbl_type IS TABLE OF VARCHAR2(255);
400 g_toplevel_attr_tbl char_tbl_type := char_tbl_type('version',
401 'xml:lang',
402 'file-version',
403 'xmlns:oa',
404 'xmlns:ui',
405 'xmlns:jrad',
406 'xmlns:user',
407 'FILE-version',
408 'file-version',
409 'xmlns:user',
410 'xmlns:USER',
411 'xmlns');
412
413 g_condition_attr_tbl char_tbl_type := char_tbl_type('displayCondnId',
414 'enabledCondnId',
415 'colDisplayCondnId',
416 'liDisplayCondnId',
417 'rowDisplayCondnId',
418 'rowEnabledCondnId',
419 'switcherCondnId');
420
421 g_caption_attr_tbl char_tbl_type := char_tbl_type('captionIntlTextId',
422 'rolloverIntlTextId',
423 'cellIntlTextId',
424 'urlIntlTextId',
425 'tableSummaryIntlTextId',
426 'imageSourceIntlTextId',
427 'addInstBtnIntlTextId');
428
429 g_view_prefix_tbl char_tbl_type := char_tbl_type('COMP_',
430 'SIM_',
431 'CS_',
432 'OF_',
433 'IF_',
434 'DF_',
435 'BF_',
436 'TF_',
437 'TOT_',
438 'RSC_',
439 'ITOT_',
440 'IRSC_',
441 'REF_',
442 'CON_',
443 'BOMM_',
444 'OPT_' );
445
446 TYPE attribute_record_type IS RECORD(
447 NAME jdr_attributes.att_name%TYPE,
448 VALUE jdr_attributes.att_value%TYPE);
449
450 TYPE attributes_tbl_type IS TABLE OF attribute_record_type INDEX BY BINARY_INTEGER;
451
452 --vsingava IM-ER
453 TYPE expl_node_persistent_id_pair IS RECORD(
454 expl_node_id NUMBER,
455 persistent_node_id NUMBER);
456
457
458 -------------------------------------------------------------------
459
460 --
461 -- section for a different DEBUG procedures
462 --
463 PROCEDURE DEBUG(p_str IN VARCHAR2) IS
464 BEGIN
465 --DBMS_OUTPUT.PUT_LINE(p_str);
466 NULL;
467 END DEBUG;
468
469 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN VARCHAR2) IS
470 BEGIN
471 DEBUG(p_var_name || ' = ' || p_var_value);
472 END DEBUG;
473
474 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN NUMBER) IS
475 BEGIN
476 DEBUG(p_var_name || ' = ' || TO_CHAR(p_var_value));
477 END DEBUG;
478
479 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN DATE) IS
480 BEGIN
481 DEBUG(p_var_name || ' = ' ||
482 TO_CHAR(p_var_value, 'DD-MM-YYYY HH24:MI:SS'));
483 END DEBUG;
484
485 PROCEDURE dump_Error_Stack(p_prefix IN VARCHAR2) IS
486 l_msg_count NUMBER;
487 l_msg_data VARCHAR2(4000);
488 l_msg_index number;
489 BEGIN
490 DEBUG('------------ Start of '||p_prefix||' ----------------');
491 l_msg_index := 1;
492 l_msg_count := fnd_msg_pub.COUNT_MSG();
493 DEBUG(p_prefix||' '||TO_CHAR(l_msg_count)||' error messages .');
494 WHILE l_msg_count > 0 LOOP
495 l_msg_data := fnd_msg_pub.GET(l_msg_index,fnd_api.g_false);
496 DEBUG(p_prefix||l_msg_data);
497 l_msg_index := l_msg_index + 1;
498 l_msg_count := l_msg_count - 1;
499 END LOOP;
500 DEBUG('------------ End of '||p_prefix||' ----------------');
501 END dump_Error_Stack;
502
503 PROCEDURE lock_Model(p_model_id IN NUMBER,
504 p_locked_entities_tbl OUT NOCOPY cz_security_pvt.number_type_tbl) IS
505 PRAGMA AUTONOMOUS_TRANSACTION;
506 l_lock_status VARCHAR2(255);
507 l_msg_count NUMBER;
508 l_msg_data VARCHAR2(4000);
509 BEGIN
510
511 cz_security_pvt.lock_model(1.0,p_model_id,FND_API.G_TRUE,FND_API.G_FALSE,
512 p_locked_entities_tbl,
513 l_lock_status,l_msg_count,l_msg_data);
514 COMMIT;
515 IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
516 RAISE FAILED_TO_LOCK_MODEL;
517 END IF;
518 END lock_Model;
519
520 PROCEDURE unlock_Model(p_locked_entities_tbl IN cz_security_pvt.number_type_tbl) IS
521 PRAGMA AUTONOMOUS_TRANSACTION;
522 l_lock_status VARCHAR2(255);
523 l_msg_count NUMBER;
524 l_msg_data VARCHAR2(4000);
525 BEGIN
526 cz_security_pvt.unlock_model(p_api_version => 1.0,
527 p_models_to_unlock => p_locked_entities_tbl,
528 p_commit_flag => FND_API.G_FALSE,
529 p_init_msg_list => FND_API.G_FALSE,
530 x_return_status => l_lock_status,
531 x_msg_count => l_msg_count,
532 x_msg_data => l_msg_data);
533 COMMIT;
534 END unlock_Model;
535
536 FUNCTION is_Used_By_Reference(p_detailed_type_id IN NUMBER,
537 p_ctrl_template_id IN NUMBER)
538 RETURN BOOLEAN IS
539 BEGIN
540
541 IF ((p_detailed_type_id IN
542 (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID
543 ,CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID
544 ,CZ_TYPES.UMINMAX_COMPONENT_TYPEID
545 ,CZ_TYPES.UNON_COUNT_FEATURE_TYPEID
546 ,CZ_TYPES.UCOUNT_FEATURE_TYPEID
547 ,CZ_TYPES.UCOUNT_FEATURE01_TYPEID
548 ,CZ_TYPES.UMINMAX_FEATURE_TYPEID
549 ,CZ_TYPES.UINTEGER_FEATURE_TYPEID
550 ,CZ_TYPES.UDECIMAL_FEATURE_TYPEID
551 ,CZ_TYPES.UBOOLEAN_FEATURE_TYPEID
552 ,CZ_TYPES.UTEXT_FEATURE_TYPEID
553 ,CZ_TYPES.UTOTAL_TYPEID
554 ,CZ_TYPES.URESOURCE_TYPEID
555 ,CZ_TYPES.UCONNECTOR_TYPEID,CZ_TYPES.UMINMAX_CONNECTOR)
556 AND g_UI_Context.CTRLTEMPLUSE_NONBOM=G_TEMPLATE_USE_BY_REFERENCE)
557 OR
558 (p_detailed_type_id IN
559 (CZ_TYPES.UMANDATORY_REF_TYPEID
560 ,CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
561 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
562 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
563 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
564 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
565 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
566 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
567 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
568 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
569 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID)
570 AND g_UI_Context.CTRLTEMPLUSE_BOM=G_TEMPLATE_USE_BY_REFERENCE)) AND
571 p_ctrl_template_id NOT IN(G_DRILLDOWN_IMAGE_TEMPLATE_ID,G_DRILLDOWN_LABEL_TEMPLATE_ID,
572 G_DRILLDOWN_BUTTON_TEMPLATE_ID) THEN
573 RETURN TRUE;
574 END IF;
575
576 RETURN FALSE;
577
578 END is_Used_By_Reference;
579
580 PROCEDURE lock_UI_Template(p_template_id IN NUMBER,
581 p_template_ui_def_id IN NUMBER DEFAULT NULL,
582 px_needs_to_be_unlocked OUT NOCOPY BOOLEAN) IS
583 PRAGMA AUTONOMOUS_TRANSACTION;
584
585 l_templates_to_lock_tbl cz_security_pvt.number_type_tbl;
586 l_locked_templates_tbl cz_security_pvt.number_type_tbl;
587 l_seeded_flag CZ_UI_TEMPLATES.seeded_flag%TYPE;
588 l_lock_status VARCHAR2(255);
589 l_msg_count NUMBER;
590 l_msg_data VARCHAR2(4000);
591
592 BEGIN
593 IF p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
594 p_template_ui_def_id IS NULL THEN
595 SELECT seeded_flag INTO l_seeded_flag FROM CZ_UI_TEMPLATES
596 WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
597 IF l_seeded_flag=G_YES_FLAG THEN
598 RETURN;
599 END IF;
600 l_templates_to_lock_tbl(1) := p_template_id;
601 cz_security_pvt.lock_template(p_api_version => 1.0,
602 p_templates_to_lock => l_templates_to_lock_tbl,
603 p_commit_flag => FND_API.G_FALSE,
604 p_init_msg_list => FND_API.G_FALSE,
605 x_locked_templates => l_locked_templates_tbl,
606 x_return_status => l_lock_status,
607 x_msg_count => l_msg_count,
608 x_msg_data => l_msg_data);
609 COMMIT;
610
611 IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
612 RAISE FAILED_TO_LOCK_TEMPLATE;
613 END IF;
614 IF l_locked_templates_tbl.COUNT>0 THEN
615 px_needs_to_be_unlocked := TRUE;
616 ELSE
617 px_needs_to_be_unlocked := FALSE;
618 END IF;
619 END IF;
620 END lock_UI_Template;
621
622 PROCEDURE unlock_UI_Template(p_template_id IN NUMBER,
623 p_template_ui_def_id IN NUMBER DEFAULT NULL,
624 p_needs_to_be_unlocked IN BOOLEAN) IS
625 PRAGMA AUTONOMOUS_TRANSACTION;
626 l_templates_to_unlock_tbl cz_security_pvt.number_type_tbl;
627 l_lock_status VARCHAR2(255);
628 l_msg_count NUMBER;
629 l_msg_data VARCHAR2(4000);
630 BEGIN
631 IF (p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
632 p_template_ui_def_id IS NULL) AND p_needs_to_be_unlocked THEN
633 l_templates_to_unlock_tbl(1) := p_template_id;
634 cz_security_pvt.unlock_template(p_api_version => 1.0,
635 p_templates_to_unlock => l_templates_to_unlock_tbl,
636 p_commit_flag => FND_API.G_FALSE,
637 p_init_msg_list => FND_API.G_FALSE,
638 x_return_status => l_lock_status,
639 x_msg_count => l_msg_count,
640 x_msg_data => l_msg_data);
641 COMMIT;
642 END IF;
643 END unlock_UI_Template;
644
645 --
646 -- lock all global UI templates for a given model_id and ui_def_id
647 -- array x_templates_id_tbl will contain locked UI templates
648 --
649 PROCEDURE lock_UI_Templates(p_model_id IN NUMBER,
650 p_ui_def_id IN NUMBER) IS
651 l_needs_to_be_unlocked BOOLEAN;
652
653 l_lock_status VARCHAR2(255);
654 l_msg_count NUMBER;
655 l_msg_data VARCHAR2(4000);
656 l_msg_index number;
657 BEGIN
658 FOR i IN(SELECT DISTINCT template_id, detailed_type_id
659 FROM CZ_UITEMPLS_FOR_PSNODES_V
660 WHERE devl_project_id=p_model_id AND
661 ui_def_id=p_ui_def_id AND
662 template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
663 deleted_flag = G_NO_FLAG)
664 LOOP
665 IF is_Used_By_Reference(i.detailed_type_id, i.template_id)=FALSE AND
666 NOT(g_locked_templates_id_tbl.EXISTS(i.template_id)) THEN
667
668 BEGIN
669 --
670 -- lock current UI Template
671 --
672 lock_UI_Template( i.template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID, l_needs_to_be_unlocked);
673 --
674 -- collect only those UI templates
675 -- which really have been locked
676 --
677 IF l_needs_to_be_unlocked THEN
678 g_locked_templates_id_tbl(i.template_id) := i.template_id;
679 END IF;
680 EXCEPTION
681 WHEN FAILED_TO_LOCK_TEMPLATE THEN
682 DEBUG('Failed to lock UI Template with template_id=', i.template_id);
683 g_MSG_COUNT := fnd_msg_pub.COUNT_MSG();
684 END;
685
686 END IF;
687
688 END LOOP;
689
690 END lock_UI_Templates;
691
692 --
693 -- unlock global UI templates specified by array x_templates_id_tbl
694 --
695 PROCEDURE unlock_UI_Templates IS
696 l_index NUMBER;
697 BEGIN
698
699 IF g_locked_templates_id_tbl.Count>0 THEN
700
701 l_index := g_locked_templates_id_tbl.First;
702
703 LOOP
704 IF l_index IS NULL THEN
705 EXIT;
706 END IF;
707
708 DEBUG('UI Template to unlock : ',g_locked_templates_id_tbl(l_index));
709 --
710 -- unlock current UI Template
711 --
712 unlock_UI_Template( g_locked_templates_id_tbl(l_index), G_GLOBAL_TEMPLATES_UI_DEF_ID, TRUE);
713 l_index := g_locked_templates_id_tbl.NEXT(l_index);
714 END LOOP;
715
716 END IF;
717
718 END unlock_UI_Templates;
719
720 --
721 -- initialize sequences to use in UI Generation/UI Refresh
722 --
723 PROCEDURE Initialize_Sequences IS
724 BEGIN
725
726 SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currentUINode FROM dual;
727 g_currUISeqVal := g_currentUINode;
728
729 SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currentPageRef FROM dual;
730 g_currPageRefSeqVal := g_currentPageRef;
731
732 SELECT CZ_UI_PAGES_S.nextval INTO g_currentPage FROM dual;
733 g_currPageSeqVal := g_currentPage;
734
735 SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currentPageSet FROM dual;
736 g_currPageSetSeqVal := g_currentPageSet;
737
738 SELECT CZ_UI_ACTIONS_S.nextval INTO g_currentUIAction FROM dual;
739 g_currUIActionSeqVal := g_currentUIAction;
740
741 END Initialize_Sequences;
742
743 --
744 -- initialize FND variables/packages
745 --
746 PROCEDURE Initialize(x_return_status OUT NOCOPY VARCHAR2,
747 x_msg_count OUT NOCOPY NUMBER,
748 x_msg_data OUT NOCOPY VARCHAR2) IS
749 BEGIN
750 g_MSG_COUNT := 0 ;
751 fnd_msg_pub.initialize;
752 x_return_status := FND_API.G_RET_STS_SUCCESS;
753 x_msg_count := 0;
754 x_msg_data := NULL;
755 Initialize_Sequences();
756 g_ui_def_nodes_tbl.DELETE;
757 g_ui_pages_counter_tbl.DELETE;
758 g_root_persist_id_tbl.DELETE;
759 g_local_ui_context.DELETE;
760 g_check_boundaries_tbl.DELETE;
761 g_locked_templates_id_tbl.DELETE;
762 g_elements_to_move.DELETE;
763 g_dom_elements_to_move.DELETE;
764 g_tgt_pg_to_src_pg_map.DELETE;
765 END Initialize;
766
767 --
768 -- add FND error message
769 --
770 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
771 p_fatal_error IN BOOLEAN) IS
772
773 BEGIN
774 FND_MESSAGE.SET_NAME('CZ', p_message_name);
775 IF p_fatal_error THEN
776 FND_MSG_PUB.ADD;
777 ELSE
778 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
779 END IF;
780 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
781 p_data => g_MSG_DATA);
782 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
783 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
784 ELSE
785 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
786 END IF;
787
788 END add_Error_Message;
789
790 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
791 p_token_name IN VARCHAR2,
792 p_token_value IN VARCHAR2,
793 p_fatal_error IN BOOLEAN) IS
794
795 BEGIN
796 FND_MESSAGE.SET_NAME('CZ', p_message_name);
797 IF p_token_name IS NOT NULL THEN
798 FND_MESSAGE.SET_TOKEN(p_token_name, p_token_value);
799 END IF;
800 IF p_fatal_error THEN
801 FND_MSG_PUB.ADD;
802 ELSE
803 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
804 END IF;
805 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
806 p_data => g_MSG_DATA);
807 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
808 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
809 ELSE
810 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
811 END IF;
812 END add_Error_Message;
813
814 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
815 p_token_name1 IN VARCHAR2,
816 p_token_value1 IN VARCHAR2,
817 p_token_name2 IN VARCHAR2,
818 p_token_value2 IN VARCHAR,
819 p_fatal_error IN BOOLEAN) IS
820
821 BEGIN
822 FND_MESSAGE.SET_NAME('CZ', p_message_name);
823 IF p_token_name1 IS NOT NULL THEN
824 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
825 END IF;
826
827 IF p_token_name2 IS NOT NULL THEN
828 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
829 END IF;
830
831 IF p_fatal_error THEN
832 FND_MSG_PUB.ADD;
833 ELSE
834 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
835 END IF;
836
837 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
838 p_data => g_MSG_DATA);
839 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
840 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
841 ELSE
842 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
843 END IF;
844 END add_Error_Message;
845
846 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
847 p_token_name1 IN VARCHAR2,
848 p_token_value1 IN VARCHAR2,
849 p_token_name2 IN VARCHAR2,
850 p_token_value2 IN VARCHAR,
851 p_token_name3 IN VARCHAR2,
852 p_token_value3 IN VARCHAR,
853 p_fatal_error IN BOOLEAN) IS
854
855 BEGIN
856 FND_MESSAGE.SET_NAME('CZ', p_message_name);
857 IF p_token_name1 IS NOT NULL THEN
858 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
859 END IF;
860
861 IF p_token_name2 IS NOT NULL THEN
862 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
863 END IF;
864
865 IF p_token_name3 IS NOT NULL THEN
866 FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
867 END IF;
868
869 IF p_fatal_error THEN
870 FND_MSG_PUB.ADD;
871 ELSE
872 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
873 END IF;
874
875 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
876 p_data => g_MSG_DATA);
877 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
878 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
879 ELSE
880 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
881 END IF;
882 END add_Error_Message;
883
884 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
885 p_token_name1 IN VARCHAR2,
886 p_token_value1 IN VARCHAR2,
887 p_token_name2 IN VARCHAR2,
888 p_token_value2 IN VARCHAR,
889 p_token_name3 IN VARCHAR2,
890 p_token_value3 IN VARCHAR,
891 p_token_name4 IN VARCHAR2,
892 p_token_value4 IN VARCHAR,
893 p_token_name5 IN VARCHAR2,
894 p_token_value5 IN VARCHAR,
895 p_fatal_error IN BOOLEAN) IS
896
897 BEGIN
898 FND_MESSAGE.SET_NAME('CZ', p_message_name);
899 IF p_token_name1 IS NOT NULL THEN
900 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
901 END IF;
902
903 IF p_token_name2 IS NOT NULL THEN
904 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
905 END IF;
906
907 IF p_token_name3 IS NOT NULL THEN
908 FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
909 END IF;
910
911 IF p_token_name4 IS NOT NULL THEN
912 FND_MESSAGE.SET_TOKEN(p_token_name4, p_token_value4);
913 END IF;
914
915 IF p_token_name5 IS NOT NULL THEN
916 FND_MESSAGE.SET_TOKEN(p_token_name5, p_token_value5);
917 END IF;
918
919 IF p_fatal_error THEN
920 FND_MSG_PUB.ADD;
921 ELSE
922 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
923 END IF;
924
925 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
926 p_data => g_MSG_DATA);
927 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
928 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
929 ELSE
930 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
931 END IF;
932 END add_Error_Message;
933
934 --
935 -- return increment of sequence p_sequence_name which
936 -- is under schema p_sequence_owner
937 --
938 FUNCTION get_Seq_Inc(p_sequence_name IN VARCHAR2,
939 p_sequence_owner IN VARCHAR2) RETURN NUMBER IS
940 l_seq_increment NUMBER;
941 BEGIN
942 SELECT increment_by INTO l_seq_increment
943 FROM all_sequences
944 WHERE sequence_owner=p_sequence_owner AND
945 sequence_name=p_sequence_name;
946 RETURN l_seq_increment;
947 END get_Seq_Inc;
948
949 --
950 -- open XML parser
951 --
952 PROCEDURE Open_Parser IS
953 BEGIN
954 --
955 -- create a new XML parser ( global )
956 --
957 g_PARSER := xmlparser.newParser;
958 END Open_Parser;
959
960 --
961 -- close XML parser
962 --
963 PROCEDURE Close_Parser IS
964 BEGIN
965 --
966 -- close XML parser ( global )
967 --
968 xmlparser.freeParser(g_PARSER);
969 EXCEPTION
970 WHEN OTHERS THEN
971 IF SQLCODE='-20103' THEN
972 NULL;
973 ELSE
974 DEBUG('Close_Parser() : XML Parser can not be closed : '||SQLERRM);
975 RAISE;
976 END IF;
977 END Close_Parser;
978
979 FUNCTION cloneNode(p_source_xml_node xmldom.DOMNode, p_target_subtree_xml_node xmldom.DOMNode) RETURN xmldom.DOMNode IS
980
981 l_xmldoc xmldom.DOMDocument;
982
983 BEGIN
984
985 l_xmldoc := xmldom.getOwnerDocument(p_target_subtree_xml_node);
986
987 BEGIN
988
989 CZ_UIOA_PVT.g_temp_xmldoc := l_xmldoc;
990 CZ_UIOA_PVT.g_temp_source_xml_node := p_source_xml_node;
991
992 EXECUTE IMMEDIATE
993 'BEGIN ' ||
994 ' CZ_UIOA_PVT.g_temp_xml_node := XMLDOM.importNode(CZ_UIOA_PVT.g_temp_xmldoc, CZ_UIOA_PVT.g_temp_source_xml_node, TRUE); ' ||
995 'END;';
996
997 RETURN CZ_UIOA_PVT.g_temp_xml_node;
998
999 EXCEPTION
1000 WHEN OTHERS THEN
1001 IF SQLCODE=-6550 THEN -- there is no function importNode() in XMLDOM
1002 RETURN xmldom.cloneNode(p_source_xml_node, TRUE);
1003 ELSE
1004 RAISE;
1005 END IF;
1006 END;
1007
1008 END cloneNode;
1009
1010 --
1011 -- generate NEW ID FROM a given sequence
1012 -- Parameters : p_sequence_name - name of DB sequence
1013 -- Return : next id from sequence
1014 --
1015 FUNCTION allocateId(p_sequence_name IN VARCHAR2) RETURN NUMBER IS
1016 l_id NUMBER;
1017 BEGIN
1018 IF p_sequence_name='CZ_UI_PAGE_ELEMENTS_S' THEN
1019 IF g_currentUINode<g_currUISeqVal+g_UINodeINCREMENT-1 THEN
1020 g_currentUINode := g_currentUINode+1;
1021 ELSE
1022 SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currUISeqVal FROM dual;
1023 g_currentUINode := g_currUISeqVal;
1024 END IF;
1025 RETURN g_currentUINode;
1026 ELSIF p_sequence_name='CZ_UI_PAGE_REFS_S' THEN
1027 IF g_currentPageRef<g_currPageRefSeqVal+g_PageRefINCREMENT-1 THEN
1028 g_currentPageRef := g_currentPageRef+1;
1029 ELSE
1030 SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currPageRefSeqVal FROM dual;
1031 g_currentPageRef := g_currPageRefSeqVal;
1032 END IF;
1033 RETURN g_currentPageRef;
1034 ELSIF p_sequence_name='CZ_UI_PAGES_S' THEN
1035 IF g_currentPage<g_currPageSeqVal+g_PageINCREMENT-1 THEN
1036 g_currentPage := g_currentPage+1;
1037 ELSE
1038 SELECT CZ_UI_PAGES_S.nextval INTO g_currPageSeqVal FROM dual;
1039 g_currentPage := g_currPageSeqVal;
1040 END IF;
1041 RETURN g_currentPage;
1042 ELSIF p_sequence_name='CZ_UI_PAGE_SETS_S' THEN
1043 IF g_currentPageSet<g_currPageSetSeqVal+g_PageSetINCREMENT-1 THEN
1044 g_currentPageSet := g_currentPageSet+1;
1045 ELSE
1046 SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currPageSetSeqVal FROM dual;
1047 g_currentPageSet := g_currPageSetSeqVal;
1048 END IF;
1049 RETURN g_currentPageSet;
1050 ELSIF p_sequence_name='CZ_UI_ACTIONS_S' THEN
1051 IF g_currentUIAction<g_currUIActionSeqVal+g_UIActionINCREMENT-1 THEN
1052 g_currentUIAction := g_currentUIAction+1;
1053 ELSE
1054 SELECT CZ_UI_ACTIONS_S.nextval INTO g_currUIActionSeqVal FROM dual;
1055 g_currentUIAction := g_currUIActionSeqVal;
1056 END IF;
1057 RETURN g_currentUIAction;
1058 ELSIF p_sequence_name='CZ_INTL_TEXTS_S' THEN
1059 IF g_currentIntlText<g_currIntlTextSeqVal+g_IntlTextINCREMENT-1 THEN
1060 g_currentIntlText := g_currentIntlText+1;
1061 ELSE
1062 SELECT CZ_INTL_TEXTS_S.nextval INTO g_currIntlTextSeqVal FROM dual;
1063 g_currentIntlText := g_currIntlTextSeqVal;
1064 END IF;
1065 RETURN g_currentIntlText;
1066 ELSE
1067 EXECUTE IMMEDIATE 'SELECT ' || p_sequence_name || '.NEXTVAL FROM dual' INTO l_id;
1068 RETURN l_id;
1069 END IF;
1070
1071 EXCEPTION
1072 WHEN OTHERS THEN
1073 IF SQLCODE='-2289' THEN
1074 DEBUG('allocateId() : sequence '||p_sequence_name||' does not exist.');
1075 ELSE
1076 DEBUG('Sequence '||p_sequence_name||' can not be handled.');
1077 END IF;
1078 RAISE;
1079 END allocateId;
1080
1081 PROCEDURE set_Local_UI_Context(p_ui_def_id IN NUMBER) IS
1082 BEGIN
1083 IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1084 SELECT * INTO g_local_ui_context(p_ui_def_id) FROM CZ_UI_DEFS
1085 WHERE ui_def_id=p_ui_def_id;
1086 END IF;
1087 END set_Local_UI_Context;
1088
1089 FUNCTION get_Local_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1090 BEGIN
1091 IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1092 SELECT * INTO g_local_ui_context(p_ui_def_id)
1093 FROM CZ_UI_DEFS
1094 WHERE ui_def_id=p_ui_def_id;
1095 END IF;
1096 RETURN g_local_ui_context(p_ui_def_id);
1097 END get_Local_UI_Context;
1098
1099 --
1100 -- return new element_id
1101 --
1102 FUNCTION get_Element_Id RETURN VARCHAR2 IS
1103 BEGIN
1104 RETURN TO_CHAR(allocateId('CZ_UI_PAGE_ELEMENTS_S'));
1105 END get_Element_Id;
1106
1107 --
1108 -- mark UI page as deleted
1109 --
1110 PROCEDURE mark_UI_Page_As_Refreshed(p_page_id IN NUMBER,
1111 p_ui_def_id IN NUMBER) IS
1112 BEGIN
1113 UPDATE CZ_UI_PAGES
1114 SET deleted_flag = DECODE(deleted_flag,G_MARK_TO_ADD,
1115 G_MARK_TO_ADD,G_MARK_TO_REFRESH),
1116 page_rev_nbr=page_rev_nbr+1
1117 WHERE page_id=p_page_id AND
1118 ui_def_id=p_ui_def_id AND
1119 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1120 END mark_UI_Page_As_Refreshed;
1121
1122 --
1123 -- mark UI page as deleted
1124 --
1125 PROCEDURE mark_UI_Page_As_Deleted(p_page_id IN NUMBER,
1126 p_ui_def_id IN NUMBER) IS
1127 BEGIN
1128 UPDATE CZ_UI_PAGES
1129 SET deleted_flag = G_MARK_TO_DELETE
1130 WHERE page_id=p_page_id AND
1131 ui_def_id=p_ui_def_id;
1132 END mark_UI_Page_As_Deleted;
1133
1134 --
1135 -- mark UI as UI with errors
1136 --
1137 PROCEDURE mark_UI(p_ui_def_id IN NUMBER,
1138 p_ui_status IN VARCHAR2) IS
1139 BEGIN
1140 UPDATE CZ_UI_DEFS
1141 SET ui_status=p_ui_status
1142 WHERE ui_def_id=p_ui_def_id;
1143 END mark_UI;
1144
1145 --
1146 -- refresh UI node marks
1147 --
1148 PROCEDURE refresh_UI_Node_Marks(p_page_id IN NUMBER,
1149 p_hmode IN NUMBER) IS
1150 BEGIN
1151
1152 IF p_hmode = G_DELETE_PAGE THEN
1153
1154 UPDATE CZ_UI_PAGES
1155 SET page_rev_nbr = page_rev_nbr + 1,
1156 deleted_flag = G_YES_FLAG
1157 WHERE page_id = p_page_id AND
1158 ui_def_id = g_UI_Context.ui_def_id;
1159 --
1160 -- mark elements as already deleted
1161 --
1162 UPDATE CZ_UI_PAGE_ELEMENTS
1163 SET deleted_flag=G_YES_FLAG
1164 WHERE ui_def_id= g_UI_Context.ui_def_id AND
1165 page_id=p_page_id;
1166
1167 ELSIF p_hmode = G_DELETE_ELEMENTS THEN
1168 --
1169 -- mark elements as already deleted
1170 --
1171 UPDATE CZ_UI_PAGE_ELEMENTS
1172 SET deleted_flag=G_YES_FLAG
1173 WHERE ui_def_id= g_UI_Context.ui_def_id AND
1174 page_id=p_page_id AND
1175 deleted_flag IN(G_MARK_TO_DELETE);
1176
1177 IF SQL%ROWCOUNT>0 THEN
1178 --
1179 -- update revision of deleted UI page
1180 --
1181 UPDATE CZ_UI_PAGES
1182 SET page_rev_nbr = page_rev_nbr + 1
1183 WHERE page_id = p_page_id AND
1184 ui_def_id = g_UI_Context.ui_def_id;
1185 END IF;
1186
1187 ELSIF p_hmode = G_REFRESH_PAGE THEN
1188
1189 --
1190 -- update page status and page_rev_nbr
1191 -- page_rev_nbr=1 because this is first creation
1192 --
1193 UPDATE CZ_UI_PAGES
1194 SET page_rev_nbr = page_rev_nbr+1,
1195 deleted_flag = G_NO_FLAG
1196 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1197 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1198
1199 UPDATE CZ_UI_PAGE_ELEMENTS
1200 SET deleted_flag = G_NO_FLAG
1201 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1202 page_id = p_page_id AND
1203 deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1204
1205 ELSIF p_hmode = G_NEW_PAGE THEN
1206
1207 UPDATE CZ_UI_PAGES
1208 SET page_rev_nbr = 1,
1209 deleted_flag = G_NO_FLAG
1210 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1211 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1212
1213 UPDATE CZ_UI_PAGE_ELEMENTS
1214 SET deleted_flag = G_NO_FLAG
1215 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1216 page_id = p_page_id AND
1217 deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1218 ELSE
1219 NULL;
1220 /*
1221 UPDATE CZ_UI_PAGES
1222 SET deleted_flag = G_NO_FLAG
1223 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1224 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1225
1226 UPDATE CZ_UI_PAGE_ELEMENTS
1227 SET deleted_flag = G_NO_FLAG
1228 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1229 page_id = p_page_id AND
1230 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1231 */
1232 END IF;
1233
1234 END refresh_UI_Node_Marks;
1235
1236
1237 --
1238 -- get and save Transalations for a given JRAD document
1239 --
1240 PROCEDURE translate_JRAD_Doc(p_jrad_doc_name IN VARCHAR2) IS
1241 BEGIN
1242 jdr_docbuilder.refresh;
1243
1244 g_jrad_trans_list := jdr_utils.getTranslations(p_jrad_doc_name);
1245
1246 IF g_jrad_trans_list IS NOT NULL THEN
1247 jdr_utils.saveTranslations(p_jrad_doc_name,g_jrad_trans_list);
1248 END IF;
1249 END translate_JRAD_Doc;
1250
1251 --
1252 -- returns viewname given the prefix
1253 --
1254 FUNCTION get_next_view_name(p_view_name_prefix IN VARCHAR) RETURN VARCHAR2 IS
1255
1256 BEGIN
1257
1258 IF p_view_name_prefix='COMP' THEN
1259 g_mandatory_comp_counter := g_mandatory_comp_counter+1;
1260 RETURN p_view_name_prefix || '_' || g_mandatory_comp_counter;
1261 ELSIF p_view_name_prefix='SIM' THEN
1262 g_optional_ref_counter := g_optional_ref_counter+1;
1263 RETURN p_view_name_prefix || '_' || g_optional_ref_counter;
1264 ELSIF p_view_name_prefix='CS' THEN
1265 g_minmax_ref_counter := g_minmax_ref_counter+1;
1266 RETURN p_view_name_prefix || '_' || g_minmax_ref_counter;
1267 ELSIF p_view_name_prefix='OF' THEN
1268 g_of_feature_counter := g_of_feature_counter+1;
1269 RETURN p_view_name_prefix || '_' || g_of_feature_counter;
1270 ELSIF p_view_name_prefix='IF' THEN
1271 g_if_feature_counter := g_if_feature_counter+1;
1272 RETURN p_view_name_prefix || '_' || g_if_feature_counter;
1273 ELSIF p_view_name_prefix='DF' THEN
1274 g_df_feature_counter := g_df_feature_counter+1;
1275 RETURN p_view_name_prefix || '_' || g_df_feature_counter;
1276 ELSIF p_view_name_prefix='BF' THEN
1277 g_bf_feature_counter := g_bf_feature_counter+1;
1278 RETURN p_view_name_prefix || '_' || g_bf_feature_counter;
1279 ELSIF p_view_name_prefix='TF' THEN
1280 g_tf_feature_counter := g_tf_feature_counter+1;
1281 RETURN p_view_name_prefix || '_' || g_tf_feature_counter;
1282 ELSIF p_view_name_prefix='TOT' THEN
1283 g_tot_feature_counter := g_tot_feature_counter+1;
1284 RETURN p_view_name_prefix || '_' || g_tot_feature_counter;
1285 ELSIF p_view_name_prefix='RSC' THEN
1286 g_rsc_feature_counter := g_rsc_feature_counter+1;
1287 RETURN p_view_name_prefix || '_' || g_rsc_feature_counter;
1288 ELSIF p_view_name_prefix='ITOT' THEN
1289 g_itot_feature_counter := g_itot_feature_counter+1;
1290 RETURN p_view_name_prefix || '_' || g_itot_feature_counter;
1291 ELSIF p_view_name_prefix='IRSC' THEN
1292 g_irsc_feature_counter := g_irsc_feature_counter+1;
1293 RETURN p_view_name_prefix || '_' || g_irsc_feature_counter;
1294 ELSIF p_view_name_prefix='REF' THEN
1295 g_mandatory_ref_counter := g_mandatory_ref_counter+1;
1296 RETURN p_view_name_prefix || '_' || g_mandatory_ref_counter;
1297 ELSIF p_view_name_prefix='CON' THEN
1298 g_connector_counter := g_connector_counter+1;
1299 RETURN p_view_name_prefix || '_' || g_connector_counter;
1300 ELSIF p_view_name_prefix='BOMM' THEN
1301 g_bomm_counter := g_bomm_counter+1;
1302 RETURN p_view_name_prefix || '_' || g_bomm_counter;
1303 ELSIF p_view_name_prefix='OPT' THEN
1304 g_opt_counter := g_opt_counter+1;
1305 RETURN p_view_name_prefix || '_' || g_opt_counter;
1306 END IF;
1307 END get_next_view_name;
1308
1309 --
1310 -- return name of node type
1311 --
1312 FUNCTION get_View_Name(p_ui_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
1313 x_has_children OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1314 l_view_name VARCHAR2(255);
1315 BEGIN
1316 x_has_children := G_NO_FLAG;
1317
1318 IF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID) THEN
1319
1320 g_mandatory_comp_counter := g_mandatory_comp_counter + 1;
1321 l_view_name := 'COMP_' ||
1322 TO_CHAR(g_mandatory_comp_counter);
1323 x_has_children := G_YES_FLAG;
1324
1325 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID) THEN
1326
1327 g_optional_ref_counter := g_optional_ref_counter + 1;
1328 l_view_name := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1329 -- x_has_children := G_YES_FLAG; -- Shantaram's requitement 08/04/2004
1330
1331 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
1332
1333 g_minmax_ref_counter := g_minmax_ref_counter + 1;
1334 l_view_name := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1335 x_has_children := G_YES_FLAG;
1336
1337 ELSIF p_ui_node.detailed_type_id IN
1338 (CZ_TYPES.UNON_COUNT_FEATURE_TYPEID, CZ_TYPES.UCOUNT_FEATURE_TYPEID,
1339 CZ_TYPES.UCOUNT_FEATURE01_TYPEID, CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
1340
1341 g_of_feature_counter := g_of_feature_counter + 1;
1342 l_view_name := 'OF_' || TO_CHAR(g_of_feature_counter);
1343 x_has_children := G_YES_FLAG;
1344
1345 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UINTEGER_FEATURE_TYPEID) THEN
1346
1347 g_if_feature_counter := g_if_feature_counter + 1;
1348 l_view_name := 'IF_' || TO_CHAR(g_if_feature_counter);
1349
1350 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UDECIMAL_FEATURE_TYPEID) THEN
1351
1352 g_df_feature_counter := g_df_feature_counter + 1;
1353 l_view_name := 'DF_' || TO_CHAR(g_df_feature_counter);
1354
1355 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UBOOLEAN_FEATURE_TYPEID) THEN
1356
1357 g_bf_feature_counter := g_bf_feature_counter + 1;
1358 l_view_name := 'BF_' || TO_CHAR(g_bf_feature_counter);
1359
1360 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTEXT_FEATURE_TYPEID) THEN
1361
1362 g_tf_feature_counter := g_tf_feature_counter + 1;
1363 l_view_name := 'TF_' || TO_CHAR(g_tf_feature_counter);
1364
1365 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTOTAL_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_TOTAL THEN
1366
1367 g_tot_feature_counter := g_tot_feature_counter + 1;
1368 l_view_name := 'TOT_' || TO_CHAR(g_tot_feature_counter);
1369
1370 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.URESOURCE_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_RESOURCE THEN
1371
1372 g_rsc_feature_counter := g_rsc_feature_counter + 1;
1373 l_view_name := 'RSC_' || TO_CHAR(g_rsc_feature_counter);
1374
1375 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTOTAL_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_INT_TOTAL THEN
1376
1377 g_itot_feature_counter := g_itot_feature_counter + 1;
1378 l_view_name := 'ITOT_' || TO_CHAR(g_itot_feature_counter);
1379
1380 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.URESOURCE_TYPEID) AND p_ui_node.ps_node_type=CZ_TYPES.PS_NODE_TYPE_INT_RESOURCE THEN
1381
1382 g_irsc_feature_counter := g_irsc_feature_counter + 1;
1383 l_view_name := 'IRSC_' || TO_CHAR(g_irsc_feature_counter);
1384
1385 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
1386
1387 g_mandatory_ref_counter := g_mandatory_ref_counter + 1;
1388 l_view_name := 'REF_' || TO_CHAR(g_mandatory_ref_counter);
1389
1390 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID) THEN
1391
1392 g_optional_ref_counter := g_optional_ref_counter + 1;
1393 l_view_name := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1394 --x_has_children := G_YES_FLAG; -- Shantaram's requitement 09/01/2004
1395 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
1396
1397 g_minmax_ref_counter := g_minmax_ref_counter + 1;
1398 l_view_name := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1399 x_has_children := G_YES_FLAG;
1400 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UCONNECTOR_TYPEID) THEN
1401
1402 g_connector_counter := g_connector_counter + 1;
1403 l_view_name := 'CON_' || TO_CHAR(g_connector_counter);
1404
1405 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_CONNECTOR) THEN
1406
1407 g_connector_counter := g_connector_counter + 1;
1408 l_view_name := 'CON_' || TO_CHAR(g_connector_counter);
1409 x_has_children := G_YES_FLAG;
1410 ELSIF p_ui_node.detailed_type_id IN
1411 (CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
1412 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
1413 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
1414 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
1415 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
1416 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
1417 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
1418 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
1419
1420 g_bomm_counter := g_bomm_counter + 1;
1421 l_view_name := 'BOMM_' || TO_CHAR(g_bomm_counter);
1422 x_has_children := G_YES_FLAG;
1423
1424 ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UBOM_STANDART_ITEM_TYPEID THEN
1425 g_bomm_counter := g_bomm_counter + 1;
1426 l_view_name := 'BOMM_' || TO_CHAR(g_bomm_counter);
1427
1428 ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UOPTION_TYPEID THEN
1429 g_opt_counter := g_opt_counter + 1;
1430 l_view_name := 'OPT_' || TO_CHAR(g_opt_counter);
1431
1432 ELSE
1433 NULL;
1434 END IF;
1435
1436 RETURN l_view_name;
1437 END get_View_Name;
1438
1439 --
1440 -- return COUNT ( of UI pages of a given UI) + 1
1441 --
1442 FUNCTION get_Page_Counter RETURN NUMBER IS
1443 l_page_counter NUMBER;
1444 BEGIN
1445 --
1446 -- if it is cached then get it from cache
1447 --
1448 SELECT COUNT(page_id)
1449 INTO l_page_counter
1450 FROM CZ_UI_PAGES
1451 WHERE ui_def_id = g_UI_Context.ui_def_id;
1452
1453 RETURN l_page_counter;
1454
1455 END get_Page_Counter;
1456
1457 --
1458 -- construct JRAD Page/Region name based on ui_def_id and page_id
1459 -- Parameters : p_page_id - identifies UI page ( -> CZ_UI_PAGES.page_id )
1460 -- Return : JRAD Page/Region name
1461 --
1462 FUNCTION generate_JRAD_Page_Name(p_page_counter IN NUMBER)
1463 RETURN VARCHAR2 IS
1464
1465 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
1466 l_counter NUMBER;
1467
1468 BEGIN
1469
1470 --
1471 -- generate Page Name based on l_master_template_node.ui_def_id ( global variable - scope is "current UI" )
1472 -- and g_PAGE_COUNTER ( global variable - scope is "current UI" )
1473 --
1474 l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
1475 TO_CHAR(g_UI_Context.ui_def_id) || '/Page_' ||TO_CHAR(g_UI_Context.ui_def_id)||'_'||
1476 TO_CHAR(p_page_counter);
1477
1478 SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1479 WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1480
1481 IF l_counter>0 THEN
1482 l_counter:=l_counter+1;
1483 l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1484
1485 LOOP
1486 SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1487 WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1488 IF l_counter=0 THEN
1489 EXIT;
1490 ELSE
1491 l_counter:=l_counter+1;
1492 l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1493 END IF;
1494 END LOOP;
1495 END IF;
1496
1497 RETURN l_jrad_doc;
1498 END generate_JRAD_Page_Name;
1499
1500 --
1501 -- get short JRAD name
1502 --
1503 FUNCTION get_Short_JRAD_Name(p_full_jrad_name IN VARCHAR2)
1504 RETURN VARCHAR2 IS
1505 l_str VARCHAR2(4000);
1506 l_num NUMBER;
1507 BEGIN
1508 l_str := p_full_jrad_name;
1509
1510 LOOP
1511 l_num := INSTR(l_str,'/');
1512 IF l_num > 0 THEN
1513 l_str := SUBSTR(l_str,l_num+1);
1514 IF l_str IS NULL THEN
1515 EXIT;
1516 END IF;
1517 ELSE
1518 EXIT;
1519 END IF;
1520 END LOOP;
1521 RETURN l_str;
1522 END get_Short_JRAD_Name;
1523
1524 --
1525 -- return CZ_UI_DEFS data of Master Template Settings
1526 --
1527 FUNCTION get_UI_Def_Node(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1528 BEGIN
1529 --
1530 -- if cache contains given ui_def_id then get it from cache
1531 --
1532 IF NOT(g_ui_def_nodes_tbl.EXISTS(p_ui_def_id)) THEN
1533 SELECT * INTO g_ui_def_nodes_tbl(p_ui_def_id)
1534 FROM CZ_UI_DEFS
1535 WHERE ui_def_id = p_ui_def_id;
1536 END IF;
1537 RETURN g_ui_def_nodes_tbl(p_ui_def_id);
1538 END get_UI_Def_Node;
1539
1540 --
1541 -- return data for model node with ps_node_id = p_ps_node_id
1542 -- ( private )
1543 -- Parameters :
1544 -- p_ps_node_id - identifies node in Model tree
1545 --
1546 FUNCTION get_Model_Node(p_ps_node_id IN NUMBER)
1547 RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1548 BEGIN
1549 -- if cache is populated then get it from cache
1550 IF NOT(g_model_nodes_tbl.EXISTS(p_ps_node_id)) THEN
1551 SELECT DISTINCT *
1552 INTO g_model_nodes_tbl(p_ps_node_id)
1553 FROM CZ_UITEMPLS_FOR_PSNODES_V
1554 WHERE ps_node_id = p_ps_node_id AND
1555 ui_def_id=g_UI_Context.from_master_template_id AND
1556 deleted_flag = G_NO_FLAG;
1557
1558 ---Bug6406709
1559 IF g_model_nodes_tbl(p_ps_node_id).ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1560 g_model_nodes_tbl(p_ps_node_id).ui_omit := G_NO_FLAG;
1561 END IF;
1562
1563 g_ps_node_persist_id_tbl(g_model_nodes_tbl(p_ps_node_id).persistent_node_id) := p_ps_node_id;
1564 END IF;
1565 RETURN g_model_nodes_tbl(p_ps_node_id);
1566 END get_Model_Node;
1567
1568 --
1569 -- get persistent_node_id of root node
1570 --
1571 FUNCTION get_Root_Persistent_Node_Id
1572 RETURN NUMBER IS
1573 BEGIN
1574 -- if cache is populated then get it from cache
1575 IF NOT(g_root_persist_id_tbl.EXISTS(g_UI_Context.devl_project_id)) THEN
1576 IF g_model_nodes_tbl.EXISTS(g_UI_Context.devl_project_id) THEN
1577 g_root_persist_id_tbl(g_UI_Context.devl_project_id) := g_model_nodes_tbl(g_UI_Context.devl_project_id).persistent_node_id;
1578 ELSE
1579 SELECT persistent_node_id
1580 INTO g_root_persist_id_tbl(g_UI_Context.devl_project_id)
1581 FROM CZ_PS_NODES
1582 WHERE devl_project_id=g_UI_Context.devl_project_id AND
1583 parent_id IS NULL AND
1584 deleted_flag=G_NO_FLAG;
1585 END IF;
1586 END IF;
1587 RETURN g_root_persist_id_tbl(g_UI_Context.devl_project_id);
1588 END get_Root_Persistent_Node_Id;
1589
1590 --
1591 -- return data for model node with a given persistent node id
1592 -- ( private )
1593 -- Parameters :
1594 -- p_persistent_node_id - persistent id of model node
1595 -- p_model_id - identifies model
1596 -- p_ui_def_id - identifies UI Master Template Setting
1597 --
1598 FUNCTION get_Model_Node_By_Persist_Id(p_persistent_node_id IN NUMBER,
1599 p_model_id IN NUMBER)
1600 RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1601 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1602 l_ps_node_id NUMBER;
1603 BEGIN
1604 -- if cache is populated then get it from cache
1605 SELECT DISTINCT *
1606 INTO l_node
1607 FROM CZ_UITEMPLS_FOR_PSNODES_V
1608 WHERE devl_project_id = p_model_id AND
1609 persistent_node_id = p_persistent_node_id AND
1610 ui_def_id=g_UI_Context.from_master_template_id AND
1611 deleted_flag = G_NO_FLAG;
1612
1613 ---Bug6406709
1614 IF l_node.ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1615 l_node.ui_omit := G_NO_FLAG;
1616 END IF;
1617
1618 RETURN l_node;
1619 EXCEPTION
1620 WHEN OTHERS THEN
1621 RETURN l_node;
1622 END get_Model_Node_By_Persist_Id;
1623 --vsingava IM-ER
1624 FUNCTION getNodeByPersistentAndExplId(p_persistent_node_id IN NUMBER,
1625 p_expl_id IN NUMBER)
1626 RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1627 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1628 l_reference_id NUMBER;
1629 l_model_id NUMBER;
1630 l_ps_node_type NUMBER;
1631
1632 BEGIN
1633
1634 SELECT component_id, model_id, ps_node_type INTO l_reference_id, l_model_id, l_ps_node_type
1635 FROM cz_model_ref_expls
1636 WHERE model_ref_expl_id = p_expl_id
1637 AND deleted_flag = G_NO_FLAG;
1638
1639 l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, l_reference_id);
1640
1641 IF l_node.ps_node_id IS NULL THEN
1642 -- Couldn't find the node in the referenced model. The AMN could be the root
1643 -- node of the referenced model, in which case the persistent_node_Id could
1644 -- be that of the referring node. So, let's look in the model containing the
1645 -- this model_ref_explosion_id
1646 l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, l_model_id);
1647 END IF;
1648
1649 IF ( l_node.ps_node_id IS NULL AND l_ps_node_type = G_REFERENCE_TYPE ) THEN
1650 -- This could be a case where Developer sets the explosion_id from the context of
1651 -- the model for the UI being processed, and the persistent_node_id from the context of
1652 -- the model containing the actual reference (263) node
1653
1654 -- Let's go through the reference chain starting from this model down to the referred model
1655 FOR i in (SELECT model_ref_expl_id, child_model_expl_id, model_id
1656 FROM cz_model_ref_expls
1657 START WITH model_ref_expl_Id = p_expl_id
1658 CONNECT BY PRIOR child_model_expl_id = model_ref_expl_Id
1659 AND deleted_flag = G_NO_FLAG)
1660 LOOP
1661 l_node := get_Model_Node_By_Persist_Id(p_persistent_node_id, i.model_id);
1662 IF l_node.ps_node_id IS NOT NULL THEN
1663 RETURN l_node;
1664 END IF;
1665 END LOOP;
1666 END IF;
1667
1668 RETURN l_node;
1669 EXCEPTION
1670 WHEN OTHERS THEN
1671 RETURN l_node;
1672 END getNodeByPersistentAndExplId;
1673
1674 --
1675 -- return data for model node with ps_node_id = p_ps_node_id
1676 -- ( private )
1677 --
1678 PROCEDURE get_Child_Nodes(p_ps_node_id IN NUMBER,
1679 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
1680 x_seq_nodes_tbl OUT NOCOPY ui_page_el_int_tbl_type, -- fix for bug 6837809 : skudryav 28-Mar-2008
1681 x_child_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
1682 x_non_deleted_child_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
1683 p_include_deleted_nodes IN VARCHAR2 DEFAULT G_NO_FLAG) IS
1684
1685 l_current_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1686 l_ps_node_id NUMBER;
1687
1688 BEGIN
1689
1690 IF g_Use_Cache AND g_model_nodes_tbl.EXISTS(p_ps_node_id) THEN
1691 l_ps_node_id := g_model_nodes_tbl.First;
1692 LOOP
1693 IF l_ps_node_id IS NULL THEN
1694 EXIT;
1695 END IF;
1696 l_current_model_node := g_model_nodes_tbl(l_ps_node_id);
1697 IF l_current_model_node.parent_id=p_ps_node_id THEN
1698 IF (l_current_model_node.ui_omit=G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) THEN
1699 x_child_nodes_tbl(l_current_model_node.persistent_node_id) := l_current_model_node;
1700 x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := l_current_model_node;
1701 END IF;
1702 IF l_current_model_node.deleted_flag = G_NO_FLAG THEN
1703 x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := l_current_model_node;
1704 END IF;
1705 END IF;
1706
1707 l_ps_node_id := g_model_nodes_tbl.NEXT(l_ps_node_id);
1708 END LOOP;
1709
1710 ELSE -- cache is not used
1711
1712 FOR i IN (SELECT DISTINCT *
1713 FROM CZ_UITEMPLS_FOR_PSNODES_V
1714 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
1715 parent_id = p_ps_node_id AND
1716 (ui_omit = G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) AND
1717 (p_include_deleted_nodes = G_YES_FLAG OR deleted_flag = G_NO_FLAG)
1718 ORDER BY tree_seq)
1719 LOOP
1720 IF i.deleted_flag = G_NO_FLAG AND i.detailed_type_id=G_UNDEFINED_DATA_TYPE THEN
1721 g_WRONG_PS_NODE_ID := i.ps_node_id;
1722 DEBUG('get_Child_Nodes() error message : node with ps_node_id='||TO_CHAR(i.ps_node_id)||
1723 ' has undefined detailed type.');
1724 RAISE WRONG_EXT_PS_TYPE;
1725 END IF;
1726
1727 ---Bug6406709
1728 IF (i.ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG) THEN
1729 i.ui_omit := G_NO_FLAG;
1730 END IF;
1731
1732 x_child_nodes_tbl(i.persistent_node_id) := i;
1733 x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := i;
1734
1735 IF i.deleted_flag = G_NO_FLAG THEN
1736 x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := i;
1737 END IF;
1738 END LOOP;
1739 END IF;
1740 END get_Child_Nodes;
1741
1742 --
1743 -- return expl data for model node with ps_node_id = p_ps_node_id
1744 -- ( private )
1745 --
1746 FUNCTION get_Expl_Id(p_model_id IN NUMBER,
1747 p_ps_node_id IN NUMBER,
1748 p_component_id IN NUMBER,
1749 p_ps_node_type IN NUMBER) RETURN NUMBER IS
1750
1751 l_model_ref_expl_id CZ_MODEL_REF_EXPLS.model_ref_expl_id%TYPE;
1752
1753 BEGIN
1754
1755 IF p_ps_node_id IS NOT NULL AND (p_component_id IS NULL OR p_component_id=0) THEN
1756 DEBUG('Wrong data in CZ_PS_NODES. Node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1757 ' has invalid component_id='||TO_CHAR(p_component_id));
1758 RETURN 0;
1759 END IF;
1760
1761 --
1762 -- if cache is populated then get it from cache
1763 --
1764 IF g_ref_expls_tbl.EXISTS(p_ps_node_id) THEN
1765 l_model_ref_expl_id := g_ref_expls_tbl(p_ps_node_id);
1766 ELSE
1767
1768 IF p_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND g_ref_expls_tbl.EXISTS(p_component_id) THEN
1769 l_model_ref_expl_id := g_ref_expls_tbl(p_component_id);
1770 g_ref_expls_tbl(p_ps_node_id) := l_model_ref_expl_id;
1771 ELSE
1772 IF p_ps_node_type IN (G_REFERENCE_TYPE, G_CONNECTOR_TYPE) THEN
1773 SELECT MIN(model_ref_expl_id)
1774 INTO l_model_ref_expl_id
1775 FROM CZ_MODEL_REF_EXPLS a
1776 WHERE model_id = p_model_id AND
1777 referring_node_id = p_ps_node_id AND
1778 deleted_flag = G_NO_FLAG;
1779 ELSE
1780 SELECT MIN(model_ref_expl_id)
1781 INTO l_model_ref_expl_id
1782 FROM CZ_MODEL_REF_EXPLS
1783 WHERE model_id = p_model_id AND
1784 component_id = p_component_id AND
1785 referring_node_id IS NULL AND
1786 deleted_flag = G_NO_FLAG;
1787 END IF;
1788 END IF;
1789
1790 END IF;
1791
1792 RETURN l_model_ref_expl_id;
1793
1794 EXCEPTION
1795 WHEN OTHERS THEN
1796 DEBUG('get_Expl_Id() node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1797 ' can not be handled : '||SQLERRM);
1798 RETURN 0;
1799 END get_Expl_Id;
1800
1801 --
1802 -- return UI page node
1803 --
1804 FUNCTION get_UI_Page_Node(p_page_id IN NUMBER)
1805 RETURN CZ_UI_PAGES%ROWTYPE IS
1806 l_page_node CZ_UI_PAGES%ROWTYPE;
1807 BEGIN
1808 SELECT * INTO l_page_node
1809 FROM CZ_UI_PAGES
1810 WHERE page_id=p_page_id AND
1811 ui_def_id=g_UI_Context.ui_def_id;
1812 RETURN l_page_node;
1813 END get_UI_Page_Node;
1814
1815 --
1816 -- return UI element with element_id = p_element_id
1817 --
1818 FUNCTION get_UI_Element(p_element_id IN VARCHAR2,
1819 p_page_id IN NUMBER)
1820 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
1821 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
1822 BEGIN
1823 SELECT *
1824 INTO l_ui_node
1825 FROM CZ_UI_PAGE_ELEMENTS
1826 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1827 page_id=p_page_id AND
1828 element_id = p_element_id;
1829 RETURN l_ui_node;
1830 END get_UI_Element;
1831
1832 --
1833 -- return UI element with element_id = p_element_id
1834 --
1835 FUNCTION get_Page_Set(p_page_set_id IN NUMBER)
1836 RETURN CZ_UI_PAGE_SETS%ROWTYPE IS
1837 l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
1838 BEGIN
1839 SELECT *
1840 INTO l_page_set_node
1841 FROM CZ_UI_PAGE_SETS
1842 WHERE page_set_id = p_page_set_id AND
1843 ui_def_id=g_UI_Context.ui_def_id;
1844 RETURN l_page_set_node;
1845 END get_Page_Set;
1846
1847 FUNCTION get_UI_Node_Name(p_page_id IN NUMBER,
1848 p_template_id IN NUMBER,
1849 p_template_name IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
1850
1851 l_counter NUMBER;
1852 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
1853
1854 BEGIN
1855
1856 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
1857 WHERE ui_def_id=g_UI_Context.ui_def_id AND
1858 page_id=p_page_id AND
1859 ctrl_template_id=p_template_id AND
1860 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1861
1862 IF p_template_name IS NULL THEN
1863 BEGIN
1864 SELECT template_name||' - '||TO_CHAR(l_counter)
1865 INTO l_ui_node_name
1866 FROM CZ_UI_TEMPLATES
1867 WHERE template_id=p_template_id AND
1868 ui_def_id=g_UI_Context.ui_def_id;
1869 EXCEPTION
1870 WHEN NO_DATA_FOUND THEN
1871 SELECT template_name||' - '||TO_CHAR(l_counter)
1872 INTO l_ui_node_name
1873 FROM CZ_UI_TEMPLATES
1874 WHERE template_id=p_template_id AND
1875 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1876 END;
1877 ELSE
1878 l_ui_node_name := p_template_name||' - '||TO_CHAR(l_counter);
1879 END IF;
1880
1881 RETURN l_ui_node_name;
1882 END get_UI_Node_Name;
1883
1884 --
1885 -- return full JRAD name of UI template
1886 --
1887 FUNCTION get_JRAD_Name(p_template_id IN NUMBER,
1888 p_template_ui_def_id IN NUMBER DEFAULT NULL)
1889 RETURN VARCHAR2 IS
1890
1891 BEGIN
1892 --
1893 -- if it is in cache get it from cache
1894 --
1895 IF g_template_jrad_name_tbl.EXISTS(p_template_id) AND p_template_ui_def_id IS NOT NULL THEN
1896 RETURN g_template_jrad_name_tbl(p_template_id);
1897 ELSE
1898 IF p_template_ui_def_id IS NOT NULL THEN
1899 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1900 FROM CZ_UI_TEMPLATES
1901 WHERE template_id=p_template_id AND
1902 ui_def_id=p_template_ui_def_id;
1903 ELSE
1904 BEGIN
1905 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1906 FROM CZ_UI_TEMPLATES
1907 WHERE template_id=p_template_id AND
1908 ui_def_id=g_UI_Context.ui_def_id;
1909 EXCEPTION
1910 WHEN OTHERS THEN
1911 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1912 FROM CZ_UI_TEMPLATES
1913 WHERE template_id=p_template_id AND
1914 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1915 END;
1916 END IF;
1917 END IF;
1918 RETURN g_template_jrad_name_tbl(p_template_id);
1919 END get_JRAD_Name;
1920
1921 --
1922 -- get UI Action Id associated with a given ui node
1923 --
1924 FUNCTION get_UI_Action_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
1925 RETURN NUMBER IS
1926 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
1927 BEGIN
1928 SELECT ui_action_id
1929 INTO l_ui_action_id
1930 FROM CZ_UI_ACTIONS
1931 WHERE ui_def_id = p_ui_node.ui_def_id AND
1932 source_page_id=p_ui_node.page_id AND
1933 element_id = p_ui_node.element_id AND
1934 deleted_flag=G_NO_FLAG;
1935 RETURN l_ui_action_id;
1936 END get_UI_Action_Id;
1937
1938 --
1939 -- copy CZ_INTL_TEXTS record
1940 --
1941 FUNCTION copy_Intl_Text(p_intl_text_id IN NUMBER,
1942 p_target_ui_def_id IN NUMBER,
1943 p_page_id IN NUMBER,
1944 p_element_id IN NUMBER) RETURN NUMBER IS
1945
1946 l_ui_intl_text_id NUMBER;
1947 l_model_id NUMBER;
1948 l_seeded_flag VARCHAR2(1);
1949 l_persistent_intl_text_id NUMBER;
1950
1951 BEGIN
1952
1953 IF p_intl_text_id IS NULL OR p_intl_text_id=0 THEN
1954 RETURN p_intl_text_id;
1955 ELSE
1956 SELECT seeded_flag INTO l_seeded_flag FROM CZ_INTL_TEXTS
1957 WHERE intl_text_id=p_intl_text_id;
1958 END IF;
1959
1960 IF l_seeded_flag='0' OR l_seeded_flag IS NULL THEN
1961 IF p_target_ui_def_id IS NOT NULL AND p_target_ui_def_id<>0 THEN
1962 SELECT NVL(devl_project_id,0) INTO l_model_id FROM CZ_UI_DEFS
1963 WHERE ui_def_id=p_target_ui_def_id;
1964 END IF;
1965 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
1966
1967 INSERT INTO CZ_INTL_TEXTS
1968 (INTL_TEXT_ID,
1969 TEXT_STR,
1970 DELETED_FLAG,
1971 SEEDED_FLAG,
1972 UI_DEF_ID,
1973 MODEL_ID,
1974 UI_PAGE_ID,
1975 UI_PAGE_ELEMENT_ID
1976 )
1977 SELECT
1978 l_ui_intl_text_id,
1979 text_str,
1980 G_NO_FLAG,
1981 G_NO_FLAG,
1982 p_target_ui_def_id,
1983 l_model_id,
1984 p_page_id,
1985 p_element_id
1986 FROM CZ_INTL_TEXTS
1987 WHERE intl_text_id=p_intl_text_id;
1988
1989 SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
1990 FROM CZ_INTL_TEXTS
1991 WHERE INTL_TEXT_ID = l_ui_intl_text_id;
1992
1993 RETURN l_persistent_intl_text_id;
1994
1995 ELSE
1996 RETURN p_intl_text_id;
1997 END IF;
1998 END copy_Intl_Text;
1999
2000 --
2001 -- refresh UI Images in UI based on data from Master Template
2002 --
2003 PROCEDURE refresh_UI_Images(p_ui_def_id IN NUMBER, p_master_template_id IN NUMBER) IS
2004 BEGIN
2005
2006 INSERT INTO CZ_UI_IMAGES
2007 (UI_DEF_ID
2008 ,MASTER_TEMPLATE_FLAG
2009 ,IMAGE_USAGE_CODE
2010 ,IMAGE_FILE
2011 ,DELETED_FLAG
2012 ,SEEDED_FLAG
2013 ,ENTITY_CODE,
2014 LAST_UPDATE_LOGIN)
2015 SELECT
2016 p_ui_def_id
2017 ,G_NO_FLAG
2018 ,IMAGE_USAGE_CODE
2019 ,IMAGE_FILE
2020 ,DELETED_FLAG
2021 ,G_NO_FLAG
2022 ,ENTITY_CODE
2023 ,-UID
2024 FROM CZ_UI_IMAGES a
2025 WHERE ui_def_id=p_master_template_id
2026 AND deleted_flag=G_NO_FLAG AND
2027 NOT EXISTS(SELECT NULL FROM CZ_UI_IMAGES
2028 WHERE ui_def_id=p_ui_def_id AND
2029 IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
2030 ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG);
2031 /*
2032 UPDATE CZ_UI_IMAGES a
2033 SET IMAGE_FILE=(SELECT IMAGE_FILE FROM CZ_UI_IMAGES
2034 WHERE ui_def_id=p_master_template_id AND
2035 IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
2036 ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG )
2037 WHERE ui_def_id=p_ui_def_id AND deleted_flag=G_NO_FLAG;
2038 */
2039 END refresh_UI_Images;
2040
2041 PROCEDURE refresh_Cont_Templs
2042 (p_content_type IN NUMBER,
2043 p_master_template_id IN NUMBER,
2044 p_ui_def_id IN NUMBER,
2045 p_create_cont_entry IN BOOLEAN) IS
2046
2047 l_template_ui_def_id NUMBER;
2048
2049 BEGIN
2050
2051 IF p_create_cont_entry THEN
2052 l_template_ui_def_id := g_UI_Context.ui_def_id;
2053 ELSE
2054 l_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2055 END IF;
2056 FOR h IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2057 WHERE ui_def_id = p_master_template_id AND
2058 content_type=p_content_type AND
2059 deleted_flag=G_NO_FLAG)
2060 LOOP
2061 BEGIN
2062 INSERT INTO CZ_UI_CONT_TYPE_TEMPLS
2063 (ui_def_id,
2064 content_type,
2065 template_id,
2066 master_template_flag,
2067 seeded_flag,
2068 template_ui_def_id,
2069 deleted_flag)
2070 VALUES(
2071 p_ui_def_id,
2072 h.content_type,
2073 h.template_id,
2074 G_NO_FLAG,
2075 G_NO_FLAG,
2076 l_template_ui_def_id,
2077 G_NO_FLAG);
2078 --
2079 -- populate cache of UI Templates
2080 --
2081 g_template_id_tbl(h.content_type) := h.template_id;
2082 g_template_ui_def_id_tbl(h.content_type) := l_template_ui_def_id;
2083
2084 EXCEPTION
2085 WHEN OTHERS THEN
2086 DEBUG(SQLERRM);
2087 END;
2088 END LOOP;
2089 END refresh_Cont_Templs;
2090
2091 PROCEDURE save_Template_As_Local
2092 (p_template_id IN NUMBER,
2093 p_ui_def_id IN NUMBER) IS
2094
2095 l_xmldoc xmldom.DOMDocument;
2096 l_jrad_doc VARCHAR2(4000);
2097 l_template_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
2098
2099 BEGIN
2100
2101 l_template_jrad_doc := get_JRAD_Name(p_template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID);
2102
2103 l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
2104 TO_CHAR(p_ui_def_id) || '/' ||
2105 get_Short_JRAD_Name(l_template_jrad_doc);
2106 BEGIN
2107
2108 --
2109 -- create UI Template in JRAD repository
2110 --
2111 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
2112
2113 IF xmldom.isNull(l_xmldoc) THEN
2114 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2115 p_token_name => 'UI_TEMPLATE',
2116 p_token_value => l_template_jrad_doc,
2117 p_fatal_error => TRUE);
2118 RAISE WRONG_UI_TEMPLATE;
2119 END IF;
2120
2121 Save_Document(p_xml_doc => l_xmldoc,
2122 p_doc_name => l_jrad_doc);
2123
2124 EXCEPTION
2125 WHEN OTHERS THEN
2126 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2127 p_token_name => 'UI_TEMPLATE',
2128 p_token_value => l_template_jrad_doc,
2129 p_fatal_error => TRUE);
2130 RAISE WRONG_UI_TEMPLATE;
2131 END;
2132
2133 BEGIN
2134 INSERT INTO CZ_UI_TEMPLATES
2135 (TEMPLATE_ID,
2136 UI_DEF_ID,
2137 TEMPLATE_NAME,
2138 TEMPLATE_TYPE,
2139 TEMPLATE_DESC,
2140 PARENT_CONTAINER_TYPE,
2141 JRAD_DOC,
2142 BUTTON_BAR_TEMPLATE_ID,
2143 MESSAGE_TYPE,
2144 MAIN_MESSAGE_ID,
2145 TITLE_ID,
2146 SEEDED_FLAG,
2147 LAYOUT_UI_STYLE,
2148 ROOT_REGION_TYPE,
2149 ROOT_ELEMENT_SIGNATURE_ID,
2150 BUTTON_BAR_TEMPL_UIDEF_ID,
2151 TEMPLATE_USAGE,
2152 AMN_USAGE,
2153 DELETED_FLAG)
2154 SELECT
2155 template_id,
2156 g_UI_Context.ui_def_id,
2157 TEMPLATE_NAME,
2158 TEMPLATE_TYPE,
2159 TEMPLATE_DESC,
2160 PARENT_CONTAINER_TYPE,
2161 l_jrad_doc,
2162 BUTTON_BAR_TEMPLATE_ID,
2163 MESSAGE_TYPE,
2164 MAIN_MESSAGE_ID,
2165 TITLE_ID,
2166 G_NO_FLAG,
2167 LAYOUT_UI_STYLE,
2168 ROOT_REGION_TYPE,
2169 ROOT_ELEMENT_SIGNATURE_ID,
2170 BUTTON_BAR_TEMPL_UIDEF_ID,
2171 TEMPLATE_USAGE,
2172 AMN_USAGE,
2173 G_NO_FLAG
2174 FROM CZ_UI_TEMPLATES
2175 WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
2176
2177 g_template_jrad_name_tbl(p_template_id) := l_jrad_doc;
2178
2179 EXCEPTION
2180 WHEN OTHERS THEN
2181 DEBUG('save_Template_As_Local() : '||SQLERRM);
2182 END;
2183
2184 END save_Template_As_Local;
2185
2186 --
2187 -- check : should new Content type record be added ?
2188 --
2189 FUNCTION must_Add_Content_Type_Record(p_content_type IN NUMBER,
2190 p_it_is_in_model IN BOOLEAN) RETURN BOOLEAN IS
2191
2192 BEGIN
2193
2194 IF p_content_type IN(CZ_TYPES.UMANDATORY_COMPONENT_TYPEID,
2195 CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,
2196 CZ_TYPES.UMINMAX_COMPONENT_TYPEID,
2197 CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
2198 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
2199 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
2200 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
2201 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
2202 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
2203 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
2204 CZ_TYPES.UTEXT_FEATURE_TYPEID,
2205 CZ_TYPES.UTOTAL_TYPEID,
2206 CZ_TYPES.URESOURCE_TYPEID,
2207 CZ_TYPES.UMANDATORY_REF_TYPEID,
2208 CZ_TYPES.UCONNECTOR_TYPEID) THEN
2209
2210 IF g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY
2211 AND p_it_is_in_model THEN
2212
2213 RETURN TRUE;
2214
2215 ELSE
2216
2217 RETURN FALSE;
2218
2219 END IF;
2220
2221
2222 ELSIF p_content_type IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
2223 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
2224 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
2225 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
2226 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
2227 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
2228 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
2229 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
2230 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
2231 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
2232
2233 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY
2234 AND p_it_is_in_model THEN
2235
2236 RETURN TRUE;
2237
2238 ELSE
2239
2240 RETURN FALSE;
2241
2242 END IF;
2243
2244 ELSIF (g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2245 p_content_type IN(G_MSGTEMP_RQDMSG_OVRCTRDIC
2246 ,G_MSGTEMP_RQDMSG_NOVRCTRDIC
2247 ,G_MSGTEMP_RQDMSG_INVLDINP
2248 ,G_MSGTEMP_RQDMSG_FATERR)) OR
2249 (g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2250 p_content_type IN(G_MSGTEMP_OPTMSG_VLDNOTIF
2251 ,G_MSGTEMP_OPTMSG_CNFRMSAVFIN
2252 ,G_MSGTEMP_OPTMSG_CNFRMCANCEL
2253 ,G_MSGTEMP_OPTMSG_CNFRMDELINST
2254 ,G_MSGTEMP_OPTMSG_CNFRMLDINST
2255 ,G_MSGTEMP_OPTMSG_CNFRMEDINST
2256 ,G_MSGTEMP_OPTMSG_QRYDELINST)) OR
2257 (g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY AND
2258 p_content_type IN(G_UTILTEMP_BB_NSTXN
2259 ,G_UTILTEMP_BB_BASICTXN
2260 ,G_UTILTEMP_BB_2PGNVG
2261 ,G_UTILTEMP_BB_NPGNVG)) OR
2262 (g_UI_Context.CTRLTEMPLATEUSE_UTILITYPAGE = G_TEMPLATE_USE_LOCAL_COPY AND
2263 p_content_type IN(G_UTILTEMP_PAGLAY_PGSTA
2264 ,G_UTILTEMP_BB_PRVWPG
2265 ,G_UTILTEMP_UPT_CFGPRV
2266 ,G_UTILTEMP_UPT_CXNCHO)) THEN
2267
2268 RETURN TRUE;
2269
2270 END IF;
2271
2272 RETURN FALSE;
2273
2274 END must_Add_Content_Type_Record;
2275
2276 --
2277 -- create local UI templates
2278 --
2279 PROCEDURE create_Local_UI_Templates IS
2280
2281 l_handled_templates_tbl number_tbl_type;
2282 l_detailed_type_id_tbl number_tbl_type;
2283 l_template_rec CZ_UI_TEMPLATES%ROWTYPE;
2284 l_jrad_doc VARCHAR2(4000);
2285 l_template_ui_def_id NUMBER := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2286 l_create_cont_entry BOOLEAN := FALSE;
2287
2288 BEGIN
2289
2290 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2291 g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY OR
2292 g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY OR
2293 g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY OR
2294 g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY THEN
2295
2296 --
2297 -- open XML parser
2298 --
2299 Open_Parser;
2300 END IF;
2301
2302 --
2303 -- refresh UI Images in UI based on data from Master Template
2304 --
2305
2306 refresh_UI_Images(p_ui_def_id => g_UI_Context.ui_def_id,
2307 p_master_template_id => g_UI_Context.from_master_template_id);
2308
2309 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2310 g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY THEN
2311
2312 FOR m IN(SELECT DISTINCT detailed_type_id
2313 FROM CZ_UITEMPLS_FOR_PSNODES_V
2314 WHERE devl_project_id=g_UI_Context.devl_project_id AND
2315 ui_def_id=g_UI_Context.from_master_template_id AND
2316 deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG)
2317 LOOP
2318 l_detailed_type_id_tbl(m.detailed_type_id) := m.detailed_type_id;
2319 END LOOP;
2320
2321 END IF;
2322
2323 FOR k IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2324 WHERE ui_def_id = g_UI_Context.from_master_template_id AND
2325 deleted_flag = G_NO_FLAG)
2326 LOOP
2327
2328 IF k.content_type = G_PAGE_STATUS_CONTENT_TYPE THEN
2329 g_PAGE_STATUS_TEMPLATE_ID := k.template_id;
2330 END IF;
2331
2332 l_create_cont_entry := must_Add_Content_Type_Record(k.content_type,
2333 l_detailed_type_id_tbl.EXISTS(k.content_type));
2334
2335 IF l_create_cont_entry THEN
2336
2337 save_Template_As_Local(p_template_id => k.template_id,
2338 p_ui_def_id => g_UI_Context.ui_def_id);
2339
2340 refresh_Cont_Templs(p_content_type => k.content_type,
2341 p_master_template_id => g_UI_Context.from_master_template_id,
2342 p_ui_def_id => g_UI_Context.ui_def_id,
2343 p_create_cont_entry => TRUE);
2344
2345 ELSE
2346 IF NOT(l_detailed_type_id_tbl.EXISTS(k.content_type)) THEN
2347 refresh_Cont_Templs(p_content_type => k.content_type,
2348 p_master_template_id => g_UI_Context.from_master_template_id,
2349 p_ui_def_id => g_UI_Context.ui_def_id,
2350 p_create_cont_entry => FALSE);
2351 END IF;
2352
2353 END IF;
2354
2355 END LOOP;
2356
2357 SELECT template_id INTO g_DRILLDOWN_TEMPLATE_ID
2358 FROM CZ_UI_CONT_TYPE_TEMPLS
2359 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
2360 content_type=2151 AND deleted_flag=G_NO_FLAG;
2361
2362 -- close XML parser
2363 Close_Parser;
2364
2365 -- reopen XML parser
2366 Open_Parser;
2367
2368 END create_Local_UI_Templates;
2369
2370 --
2371 -- return page_ref node of nearest page
2372 --
2373 FUNCTION get_UI_Page_Ref_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2374 RETURN CZ_UI_PAGE_REFS%ROWTYPE IS
2375
2376 l_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
2377
2378 BEGIN
2379
2380 IF p_ui_node.page_id IS NULL THEN
2381 RETURN l_page_ref_node;
2382 END IF;
2383
2384 SELECT *
2385 INTO l_page_ref_node
2386 FROM CZ_UI_PAGE_REFS a
2387 WHERE ui_def_id = p_ui_node.ui_def_id AND
2388 (target_page_id,page_set_id) IN
2389 (SELECT page_id,NVL(page_set_id,a.page_set_id) FROM CZ_UI_PAGES
2390 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id AND
2391 deleted_flag NOT IN(G_YES_FLAG)) AND
2392 deleted_flag = G_NO_FLAG;
2393
2394 RETURN l_page_ref_node;
2395
2396 END get_UI_Page_Ref_Node;
2397
2398 --
2399 -- the function returns a Model Path
2400 -- for a given persistent_node_id
2401 --
2402 FUNCTION get_Page_Path(p_ps_node_id IN NUMBER,
2403 p_page_set_id IN NUMBER DEFAULT NULL) RETURN VARCHAR2 IS
2404
2405 l_model_path VARCHAR2(32000);
2406 l_persistent_node_id NUMBER;
2407 l_parent_id NUMBER;
2408 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
2409 l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
2410 l_seq_nbr NUMBER;
2411 l_node_depth NUMBER;
2412
2413 BEGIN
2414
2415 IF p_page_set_id IS NOT NULL THEN
2416
2417 l_page_set_node := get_Page_Set(p_page_set_id);
2418
2419 IF l_page_set_node.persistent_node_id IS NOT NULL THEN
2420 l_persistent_node_id := l_page_set_node.persistent_node_id;
2421 ELSE
2422 BEGIN
2423 SELECT MIN(node_depth) INTO l_node_depth FROM CZ_UI_PAGE_REFS
2424 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2425 AND deleted_flag=G_NO_FLAG;
2426
2427 SELECT MIN(SEQ_NBR) INTO l_seq_nbr FROM CZ_UI_PAGE_REFS
2428 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2429 AND node_depth=l_node_depth AND deleted_flag=G_NO_FLAG;
2430
2431 SELECT DISTINCT target_persistent_node_id INTO l_persistent_node_id
2432 FROM CZ_UI_PAGE_REFS
2433 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2434 AND seq_nbr=l_seq_nbr AND
2435 target_persistent_node_id NOT IN
2436 (SELECT ref_persistent_node_id FROM CZ_UI_REFS WHERE
2437 ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG) AND
2438 rownum<2;
2439 EXCEPTION
2440 WHEN OTHERS THEN
2441 RETURN '.';
2442 END;
2443 END IF;
2444
2445 l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id, g_UI_Context.devl_project_id);
2446
2447 END IF;
2448
2449 SELECT parent_id INTO l_parent_id FROM CZ_PS_NODES
2450 WHERE ps_node_id=p_ps_node_id;
2451
2452 IF l_parent_id IS NULL THEN
2453 RETURN '.';
2454 END IF;
2455
2456 IF p_page_set_id IS NULL THEN
2457 FOR i IN(SELECT persistent_node_id, parent_id FROM CZ_PS_NODES
2458 START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2459 CONNECT BY PRIOR parent_id=ps_node_id AND
2460 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2461 LOOP
2462 IF l_model_path IS NULL THEN
2463 l_model_path:=TO_CHAR(i.persistent_node_id);
2464 ELSIF i.parent_id IS NOT NULL THEN
2465 l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2466 ELSE
2467 NULL;
2468 END IF;
2469 END LOOP;
2470
2471 RETURN l_model_path;
2472
2473 ELSE
2474
2475 FOR i IN(SELECT ps_node_id,persistent_node_id, parent_id FROM CZ_PS_NODES
2476 START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2477 CONNECT BY PRIOR parent_id=ps_node_id AND
2478 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2479 LOOP
2480 IF i.ps_node_id = l_ps_node.ps_node_id THEN
2481 EXIT;
2482 END IF;
2483 IF l_model_path IS NULL THEN
2484 l_model_path:=TO_CHAR(i.persistent_node_id);
2485 ELSIF i.parent_id IS NOT NULL THEN
2486 l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2487 ELSE
2488 NULL;
2489 END IF;
2490 END LOOP;
2491
2492 IF l_model_path IS NULL THEN
2493 l_model_path := '.';
2494 END IF;
2495
2496 RETURN l_model_path;
2497
2498
2499 END IF;
2500 END get_Page_Path;
2501
2502 --
2503 -- the function retrurns a Model Path
2504 -- for a given persistent_node_id
2505 --
2506 FUNCTION get_Model_Path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2507 RETURN VARCHAR2 IS
2508
2509 l_page_path VARCHAR2(32000) := '';
2510 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2511
2512 PROCEDURE construct_Path(p_current_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2513 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2514 BEGIN
2515
2516 IF p_current_ui_node.pagebase_persistent_node_id <>
2517 p_current_ui_node.persistent_node_id THEN
2518
2519 l_ui_node := get_UI_Element(p_element_id => p_current_ui_node.parent_element_id,
2520 p_page_id => p_current_ui_node.page_id);
2521
2522 IF l_ui_node.pagebase_persistent_node_id = l_ui_node.persistent_node_id OR
2523 l_ui_node.parent_element_id IS NULL THEN
2524 RETURN;
2525 ELSE
2526 IF l_ui_node.persistent_node_id IS NOT NULL AND
2527 p_current_ui_node.persistent_node_id <> l_ui_node.persistent_node_id THEN
2528
2529 l_page_path := TO_CHAR(l_ui_node.persistent_node_id) || '.' ||
2530 l_page_path;
2531 END IF;
2532 construct_Path(l_ui_node);
2533 END IF;
2534 ELSE
2535 RETURN;
2536 END IF;
2537 END construct_Path;
2538
2539 BEGIN
2540
2541 IF p_ui_node.persistent_node_id=0 THEN
2542 RETURN '*';
2543 END IF;
2544
2545 IF p_ui_node.parent_element_id IS NULL THEN
2546 RETURN '.';
2547 ELSE
2548
2549 BEGIN
2550 l_parent_ui_node := get_UI_Element(p_ui_node.parent_element_id, p_ui_node.page_id);
2551
2552 EXCEPTION
2553 WHEN NO_DATA_FOUND THEN
2554 RETURN '.';
2555 END;
2556
2557 IF l_parent_ui_node.parent_element_id IS NULL AND
2558 l_parent_ui_node.persistent_node_id=p_ui_node.persistent_node_id THEN
2559 RETURN '.';
2560 END IF;
2561
2562 l_page_path := TO_CHAR(p_ui_node.persistent_node_id);
2563
2564 construct_Path(p_ui_node);
2565 END IF;
2566 RETURN l_page_path;
2567 END get_Model_Path;
2568
2569 --
2570 -- return COUNT ( of UI page sets of a given UI) + 1
2571 --
2572 FUNCTION get_Page_Set_Counter RETURN NUMBER IS
2573 l_page_counter NUMBER;
2574 BEGIN
2575 SELECT COUNT(*)
2576 INTO l_page_counter
2577 FROM CZ_UI_PAGE_SETS
2578 WHERE ui_def_id = g_UI_Context.ui_def_id AND
2579 deleted_flag=G_NO_FLAG;
2580 RETURN l_page_counter;
2581 END get_Page_Set_Counter;
2582
2583 --
2584 -- return COUNT ( of UI pages of a given UI) + 1
2585 --
2586 FUNCTION get_Last_Seq_Nbr(p_parent_element_id IN VARCHAR2) RETURN NUMBER IS
2587 l_seq_nbr NUMBER;
2588 l_num_element_id NUMBER;
2589 l_parent_seq_nbr NUMBER;
2590 BEGIN
2591 SELECT NVL(MAX(seq_nbr),0)
2592 INTO l_seq_nbr
2593 FROM CZ_UI_PAGE_ELEMENTS
2594 WHERE ui_def_id=g_UI_Context.ui_def_id AND
2595 parent_element_id=p_parent_element_id AND
2596 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2597 RETURN l_seq_nbr;
2598 END get_Last_Seq_Nbr;
2599
2600 --
2601 -- return COUNT ( of UI pages of a given UI) + 1
2602 --
2603 FUNCTION get_Last_Split_Page_Nbr(p_page_id IN NUMBER) RETURN NUMBER IS
2604 l_split_seq_nbr NUMBER;
2605 BEGIN
2606 SELECT NVL(MAX(split_seq_nbr),0)
2607 INTO l_split_seq_nbr
2608 FROM CZ_UI_PAGES
2609 WHERE ui_def_id=g_UI_Context.ui_def_id AND
2610 persistent_node_id IN
2611 (SELECT persistent_node_id FROM CZ_UI_PAGES
2612 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id);
2613 RETURN l_split_seq_nbr;
2614 END get_Last_Split_Page_Nbr;
2615
2616 --
2617 -- return COUNT ( of UI pages of a given UI) + 1
2618 --
2619 FUNCTION get_Num_Elements_On_Page(p_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2620 RETURN NUMBER IS
2621 l_counter NUMBER;
2622 BEGIN
2623 SELECT COUNT(element_id)
2624 INTO l_counter
2625 FROM CZ_UI_PAGE_ELEMENTS
2626 WHERE ui_def_id=p_page_node.ui_def_id AND
2627 page_id=p_page_node.page_id AND ctrl_template_id IS NOT NULL AND
2628 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2629 RETURN l_counter;
2630 END get_Num_Elements_On_Page;
2631
2632 --
2633 -- create new Page Set
2634 --
2635 PROCEDURE create_Page_Set
2636 (
2637 p_ui_def_id IN NUMBER,
2638 p_page_set_type IN NUMBER,
2639 p_persistent_node_id IN NUMBER,
2640 p_model_ref_expl_id IN NUMBER,
2641 x_page_set_id OUT NOCOPY NUMBER
2642 ) IS
2643
2644 l_ui_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
2645 l_page_set_name CZ_UI_PAGE_SETS.name%TYPE;
2646 l_root_persistent_node_id NUMBER;
2647 l_page_set_counter NUMBER;
2648
2649 BEGIN
2650
2651 IF p_page_set_type IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,
2652 G_MODEL_TREE_MENU,G_PAGE_FLOW,G_SUBTABS) THEN
2653
2654 SELECT COUNT(page_set_id)+1 INTO l_page_set_counter FROM CZ_UI_PAGE_SETS
2655 WHERE ui_def_id=p_ui_def_id AND page_set_type=p_page_set_type AND
2656 deleted_flag=G_NO_FLAG;
2657 IF p_page_set_type IN(G_PAGE_FLOW) THEN
2658 l_page_set_name := 'Page Flow - '|| TO_CHAR(l_page_set_counter);
2659 ELSIF p_page_set_type IN(G_SUBTABS) THEN
2660 l_page_set_name := 'Subtabs - '|| TO_CHAR(l_page_set_counter);
2661 ELSE
2662 l_page_set_name := 'Menu - '|| TO_CHAR(l_page_set_counter);
2663 END IF;
2664 ELSE
2665 l_page_set_counter := get_Page_Set_Counter() + 1;
2666 l_page_set_name := 'Page Set - ' || TO_CHAR(l_page_set_counter);
2667 END IF;
2668
2669 x_page_set_id := allocateId('CZ_UI_PAGE_SETS_S');
2670
2671 INSERT INTO CZ_UI_PAGE_SETS
2672 (ui_def_id,
2673 page_set_id,
2674 page_set_type,
2675 NAME,
2676 suppress_refresh_flag,
2677 train_jrad_doc,
2678 persistent_node_id,
2679 pagebase_expl_node_id,
2680 deleted_flag)
2681 VALUES
2682 (p_ui_def_id,
2683 x_page_set_id,
2684 p_page_set_type,
2685 l_page_set_name,
2686 g_suppress_refresh_flag,
2687 NULL,
2688 p_persistent_node_id,
2689 p_model_ref_expl_id,
2690 G_NO_FLAG);
2691
2692 l_ui_page_set_node.ui_def_id := p_ui_def_id;
2693 l_ui_page_set_node.page_set_id := x_page_set_id;
2694 l_ui_page_set_node.page_set_type := p_page_set_type;
2695 l_ui_page_set_node.name := l_page_set_name;
2696 l_ui_page_set_node.suppress_refresh_flag := g_suppress_refresh_flag;
2697 l_ui_page_set_node.train_jrad_doc:= NULL;
2698 l_ui_page_set_node.persistent_node_id := p_persistent_node_id;
2699 l_ui_page_set_node.pagebase_expl_node_id := p_model_ref_expl_id;
2700 l_ui_page_set_node.deleted_flag := G_NO_FLAG;
2701
2702 g_ui_page_sets_tbl(x_page_set_id) := l_ui_page_set_node;
2703
2704 END create_Page_Set;
2705
2706 --
2707 -- check : is it UI Page
2708 --
2709 FUNCTION is_UI_Page(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
2710 x_drilldown OUT NOCOPY BOOLEAN) RETURN BOOLEAN IS
2711
2712 l_root_persistent_node_id NUMBER;
2713 BEGIN
2714
2715 l_root_persistent_node_id := get_Root_Persistent_Node_Id();
2716
2717 x_drilldown := FALSE;
2718
2719 ------- Single Page --------
2720
2721
2722 -- If the navigation style is Single_Page, and pagination style is "Subsections"
2723 -- or "Single Page", then create new page for all non virtual P/C/M/OC.
2724 -- All other UI nodes will not have their own page
2725
2726 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2727 (
2728 (g_UI_Context.PAGIN_NONINST IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2729 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2730 OR
2731 (g_UI_Context.PAGIN_BOMOC IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2732 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2733 )
2734 THEN
2735
2736 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2737 RETURN TRUE;
2738 END IF;
2739
2740 RETURN FALSE;
2741 END IF;
2742
2743
2744 -- If the navigation style is "Single Page" and pagination type is "New Pages"
2745 -- then create new Pages for all P/C/M/OC but the immediate children of the root.
2746 -- The immediate children of the root will be created on the page for the root
2747 -- as subsections
2748
2749 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2750 (
2751 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2752 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2753 OR
2754 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2755 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2756 ) THEN
2757
2758 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2759 RETURN TRUE;
2760 END IF;
2761
2762 -- If this is child of the root, add it to the root page
2763
2764 IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2765 RETURN FALSE;
2766 ELSE
2767 x_drilldown := TRUE;
2768 RETURN TRUE;
2769 END IF;
2770
2771 RETURN FALSE;
2772 END IF;
2773
2774 -- If the navigation style is "Single Page" and pagination is "Drilldown Pages",
2775 -- then create new page for all non virtual nodes and virtual nodes which are not
2776 -- immediate child of the root. Immediate children of the root will have their
2777 -- UI Nodes on the page for the root
2778
2779 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2780 (
2781 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2782 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2783 OR
2784 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2785 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2786 ) THEN
2787
2788 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2789 RETURN TRUE;
2790 END IF;
2791
2792 IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2793 RETURN FALSE;
2794 ELSE
2795 x_drilldown := TRUE;
2796 RETURN TRUE;
2797 END IF;
2798
2799 RETURN FALSE;
2800
2801 END IF;
2802
2803 ----- Page Flow -------
2804
2805 -- If the primary navigation is "Page Flow" and pagination is "Single Page",
2806 -- then create new page for root, non virtual nodes and direct children (P/C/M/OC)
2807 -- of the root. All under nodes will be created as subsections
2808
2809 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2810 (
2811 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2812 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2813 OR
2814 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2815 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2816 ) THEN
2817
2818 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2819 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2820 RETURN TRUE;
2821 END IF;
2822
2823 RETURN FALSE;
2824 END IF;
2825
2826 -- If the primary navigation is "Page Flow" and pagination is "New Pages", then
2827 -- create create new pages for all P/C/M/OC
2828
2829 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2830 (
2831 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2832 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2833 OR
2834 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2835 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2836 ) THEN
2837
2838 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2839 RETURN TRUE;
2840 END IF;
2841
2842 RETURN TRUE;
2843 END IF;
2844
2845 -- If the primary navigation is "Page Flow" and pagination is "Drilldown Pages", then
2846 -- create create new pages for all (P/C/M/OC)
2847 -- Further, drilldowns will be created for virtual P/C/M/OC that are not direct children
2848 -- of the root
2849
2850 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2851 (
2852 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2853 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2854 OR
2855 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2856 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2857 ) THEN
2858
2859 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2860 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2861 RETURN TRUE;
2862 END IF;
2863
2864 IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2865 x_drilldown := TRUE;
2866 END IF;
2867
2868 RETURN TRUE;
2869 END IF;
2870
2871 ----- Menu -----
2872
2873 -- If the navigation style is Side Nav or Tree and pagination type is "Single Page" or
2874 -- "Subsections" then create new pages for root and its direct children.
2875 -- For all other P/C/M/OC, if the node is non virtual then create a new Page with a
2876 -- Drilldown to it. For all other nodes no new page
2877
2878 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2879 (
2880 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2881 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2882 OR
2883 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2884 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2885 ) THEN
2886
2887 IF p_node.parent_id IS NULL OR
2888 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2889 RETURN TRUE;
2890 END IF;
2891
2892 IF p_node.virtual_flag = G_NO_FLAG THEN
2893 x_drilldown := TRUE;
2894 RETURN TRUE;
2895 END IF;
2896
2897 RETURN FALSE;
2898 END IF;
2899
2900 -- If the navigation style is "Side Menu" or "Tree", and pagination style is "New Pages"
2901 -- then create new pages for all P/C/M/OC
2902
2903 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2904 (
2905 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2906 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2907 OR
2908 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2909 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2910 ) THEN
2911
2912 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2913 RETURN TRUE;
2914 END IF;
2915
2916 RETURN TRUE;
2917 END IF;
2918
2919 -- If the navigation style is "Side Menu" or "Tree", and pagination is "Drilldown Pages", then
2920 -- create new new pages for all P/C/M/OC. Further all page for all nodes that are not
2921 -- direct children of the root, will have a Drilldown
2922
2923 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2924 (
2925 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2926 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2927 OR
2928 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2929 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2930 ) THEN
2931
2932 IF p_node.parent_id IS NULL OR
2933 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2934 RETURN TRUE;
2935 END IF;
2936
2937 IF p_node.virtual_flag = G_NO_FLAG THEN
2938 x_drilldown := TRUE;
2939 RETURN TRUE;
2940 END IF;
2941
2942 x_drilldown := TRUE;
2943 RETURN TRUE;
2944 END IF;
2945
2946 ---- Subtabs -------
2947
2948 -- If the navigation style is "Subtabs" and pagination is "Single Page" or
2949 -- "Subsections," then create new pages for the root, non virtual nodes and
2950 -- direct P/C/M/OC children of the root.
2951
2952 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2953 (
2954 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2955 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2956 OR
2957 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2958 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2959 ) THEN
2960
2961 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2962 p_node.parent_persistent_node_id = l_root_persistent_node_id THEN
2963 RETURN TRUE;
2964 END IF;
2965
2966 RETURN FALSE;
2967 END IF;
2968
2969 -- If navigation style is "Subtabs" and pagination is "New Pages," then create
2970 -- new pages for all P/C/M/OC
2971
2972 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2973 (
2974 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2975 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2976 OR
2977 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2978 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2979 ) THEN
2980
2981 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2982 RETURN TRUE;
2983 END IF;
2984
2985 RETURN TRUE;
2986
2987 END IF;
2988
2989 -- If the navigation style is "Subtabs" and pagination is "Drilldown Pages,"
2990 -- then create new pages for all P/C/M/OC. Node not directly under the root will
2991 -- also have a drilldown
2992
2993 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2994 (
2995 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2996 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2997 OR
2998 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2999 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
3000 ) THEN
3001
3002 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
3003 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
3004 RETURN TRUE;
3005 END IF;
3006
3007 IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
3008 x_drilldown := TRUE;
3009 END IF;
3010
3011 RETURN TRUE;
3012 END IF;
3013
3014 -- If none of the above satisfy, then create new pages for all P/C/M/OC
3015
3016 IF p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE,
3017 G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
3018 RETURN TRUE;
3019 ELSE
3020 RETURN FALSE;
3021 END IF;
3022 END is_UI_Page;
3023
3024 --
3025 -- check - is it UI Reference or no
3026 --
3027 FUNCTION is_UI_Reference(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3028 RETURN BOOLEAN IS
3029 l_ui_ref_exists VARCHAR2(1);
3030 BEGIN
3031 SELECT 'x' INTO l_ui_ref_exists
3032 FROM CZ_UI_REFS
3033 WHERE ui_def_id=p_ui_node.ui_def_id AND
3034 ref_persistent_node_id=p_ui_node.persistent_node_id AND
3035 deleted_flag=G_NO_FLAG AND rownum<2;
3036 RETURN TRUE;
3037 EXCEPTION
3038 WHEN NO_DATA_FOUND THEN
3039 RETURN FALSE;
3040 END is_UI_Reference;
3041
3042 --
3043 -- remove Instance Management Controls from CZ_UI_PAGE_ELEMENTS
3044 --
3045 PROCEDURE remove_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3046
3047 l_changed_pages_tbl number_tbl_type;
3048 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
3049 l_mark_flag CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
3050
3051 BEGIN
3052
3053 FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag
3054 FROM CZ_UI_PAGE_ELEMENTS
3055 WHERE ui_def_id=p_ui_node.ui_def_id AND
3056 persistent_node_id=p_ui_node.persistent_node_id AND
3057 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
3058 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG))
3059 LOOP
3060 IF i.suppress_refresh_flag=G_YES_FLAG THEN
3061 UPDATE CZ_UI_PAGE_ELEMENTS
3062 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3063 persistent_node_id=0
3064 WHERE ui_def_id=p_ui_node.ui_def_id AND
3065 page_id=i.page_id AND
3066 element_id=i.element_id;
3067 ELSE
3068 SELECT suppress_refresh_flag INTO l_suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
3069 WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=i.page_id AND
3070 element_id=i.parent_element_id;
3071 IF l_suppress_refresh_flag=G_YES_FLAG THEN
3072 UPDATE CZ_UI_PAGE_ELEMENTS
3073 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3074 persistent_node_id=0
3075 WHERE ui_def_id=p_ui_node.ui_def_id AND
3076 page_id=i.page_id AND
3077 element_id=i.element_id;
3078 ELSE
3079 UPDATE CZ_UI_PAGE_ELEMENTS
3080 SET deleted_flag=G_MARK_TO_DELETE
3081 WHERE ui_def_id=p_ui_node.ui_def_id AND
3082 page_id=i.page_id AND
3083 element_id=i.element_id;
3084 END IF;
3085 END IF;
3086
3087 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
3088
3089 END LOOP;
3090
3091 END remove_Instance_Controls;
3092
3093 --
3094 -- merge two Page Flows - parent and child Page Flows into one Page Flow
3095 -- p_ui_node is a first node of child Page Flow
3096 --
3097 PROCEDURE merge_Page_Flows(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3098 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3099 l_changed_target_ids_tbl number_tbl_type;
3100 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
3101 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
3102 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3103 l_child_page_set_id NUMBER;
3104 l_child_page_ref_id NUMBER;
3105 l_parent_page_set_id NUMBER;
3106 l_parent_page_ref_id NUMBER;
3107 l_page_ref_type NUMBER;
3108
3109 BEGIN
3110 --
3111 -- get Page set id of UI node p_ui_node
3112 --
3113 BEGIN
3114 l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3115 l_child_page_set_id := l_ui_page_ref_node.page_set_id;
3116 l_child_page_ref_id := l_ui_page_ref_node.page_ref_id;
3117 EXCEPTION
3118 WHEN NO_DATA_FOUND THEN
3119 RETURN;
3120 END;
3121
3122 --
3123 -- get Page set id and page_ref_id of parent Page Flow
3124 --
3125 SELECT MIN(page_ref_id)
3126 INTO l_parent_page_ref_id
3127 FROM CZ_UI_PAGE_REFS
3128 WHERE ui_def_id=p_ui_node.ui_def_id AND
3129 target_persistent_node_id=p_ui_node.parent_persistent_node_id AND
3130 deleted_flag=G_NO_FLAG;
3131
3132 SELECT page_set_id,page_ref_type
3133 INTO l_parent_page_set_id,l_page_ref_type FROM CZ_UI_PAGE_REFS
3134 WHERE ui_def_id=p_ui_node.ui_def_id AND page_ref_id=l_parent_page_ref_id;
3135
3136 --
3137 -- attach child Page Flow to the parent Page Flow
3138 --
3139 UPDATE CZ_UI_PAGE_REFS
3140 SET parent_page_ref_id = l_parent_page_ref_id
3141 WHERE ui_def_id=p_ui_node.ui_def_id AND
3142 page_ref_id=l_child_page_ref_id;
3143
3144 UPDATE CZ_UI_PAGE_REFS
3145 SET page_set_id = l_parent_page_set_id
3146 WHERE ui_def_id=p_ui_node.ui_def_id AND
3147 target_page_id IN
3148 (SELECT target_page_id FROM CZ_UI_PAGE_REFS
3149 START WITH ui_def_id=p_ui_node.ui_def_id AND
3150 page_ref_id=l_child_page_ref_id
3151 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3152 ui_def_id=p_ui_node.ui_def_id AND
3153 page_set_id=l_child_page_set_id AND
3154 PRIOR page_set_id=l_child_page_set_id AND
3155 PRIOR ui_def_id=p_ui_node.ui_def_id AND
3156 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3157 RETURNING target_persistent_node_id BULK COLLECT INTO l_changed_target_ids_tbl;
3158
3159 IF l_changed_target_ids_tbl.COUNT>0 THEN
3160 FOR x IN l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3161 LOOP
3162 UPDATE CZ_UI_PAGES
3163 SET page_set_id=l_parent_page_set_id
3164 WHERE persistent_node_id=l_changed_target_ids_tbl(x) AND
3165 ui_def_id=p_ui_node.ui_def_id;
3166
3167 -- IF l_page_ref_type IN(G_PAGE_FLOW,G_SUBTABS) THEN
3168 l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(x), g_UI_Context.devl_project_id);
3169 l_target_path := get_Page_Path(l_model_node.ps_node_id, l_parent_page_set_id);
3170 UPDATE CZ_UI_PAGE_REFS
3171 SET target_path=l_target_path
3172 WHERE ui_def_id=p_ui_node.ui_def_id AND
3173 page_set_id=l_parent_page_set_id AND
3174 target_persistent_node_id=l_changed_target_ids_tbl(x) AND
3175 target_path<>l_target_path;
3176 -- END IF;
3177
3178 END LOOP;
3179 END IF;
3180
3181 END merge_Page_Flows;
3182
3183 --
3184 -- split one Page Flow into two Page Flows - parent and child
3185 --
3186 PROCEDURE split_Page_Flow(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3187 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3188 l_changed_target_ids_tbl number_tbl_type;
3189 l_target_page_ids_tbl number_tbl_type;
3190 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
3191 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
3192 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3193 l_page_set_type NUMBER;
3194 l_initial_page_set_id NUMBER;
3195 l_initial_page_ref_id NUMBER;
3196 l_page_set_id NUMBER;
3197
3198 BEGIN
3199
3200 --
3201 -- get Page set id of UI node p_ui_node
3202 --
3203 BEGIN
3204 l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3205 l_initial_page_set_id := l_ui_page_ref_node.page_set_id;
3206 l_initial_page_ref_id := l_ui_page_ref_node.page_ref_id;
3207 EXCEPTION
3208 WHEN NO_DATA_FOUND THEN
3209 RETURN;
3210 END;
3211
3212 /*
3213 IF l_ui_page_ref_node.page_ref_type=G_SUBTABS THEN
3214 l_page_set_type := G_SUBTABS;
3215 ELSE
3216 l_page_set_type := G_PAGE_FLOW;
3217 END IF;
3218 */
3219
3220 IF l_page_set_type IS NULL THEN
3221 l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
3222 END IF;
3223
3224 create_Page_Set(p_ui_def_id => p_ui_node.ui_def_id,
3225 p_page_set_type => l_page_set_type,
3226 p_persistent_node_id => p_ui_node.persistent_node_id,
3227 p_model_ref_expl_id => p_ui_node.model_ref_expl_id,
3228 x_page_set_id => l_page_set_id);
3229
3230 UPDATE CZ_UI_PAGE_REFS
3231 SET target_path='.',
3232 parent_page_ref_id=NULL,
3233 node_depth=1,
3234 seq_nbr=1
3235 WHERE ui_def_id=p_ui_node.ui_def_id AND
3236 page_ref_id=l_initial_page_ref_id;
3237
3238 UPDATE CZ_UI_PAGE_REFS
3239 SET page_set_id = l_page_set_id
3240 WHERE ui_def_id=p_ui_node.ui_def_id AND
3241 target_persistent_node_id IN
3242 (SELECT target_persistent_node_id FROM CZ_UI_PAGE_REFS
3243 START WITH ui_def_id=p_ui_node.ui_def_id AND
3244 page_ref_id=l_initial_page_ref_id
3245 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3246 ui_def_id=p_ui_node.ui_def_id AND
3247 page_set_id=l_initial_page_set_id AND
3248 PRIOR page_set_id=l_initial_page_set_id AND
3249 PRIOR ui_def_id=p_ui_node.ui_def_id AND
3250 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3251 RETURNING target_page_id,target_persistent_node_id
3252 BULK COLLECT INTO l_target_page_ids_tbl,l_changed_target_ids_tbl;
3253
3254 IF l_changed_target_ids_tbl.COUNT>0 THEN
3255 FOR j in l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3256 LOOP
3257 UPDATE CZ_UI_PAGES
3258 SET page_set_id=l_page_set_id
3259 WHERE page_id=l_target_page_ids_tbl(j) AND
3260 ui_def_id=p_ui_node.ui_def_id;
3261
3262 l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(j), g_UI_Context.devl_project_id);
3263 l_target_path := get_Page_Path(l_model_node.ps_node_id, l_page_set_id);
3264
3265 UPDATE CZ_UI_PAGE_REFS
3266 SET target_path=l_target_path
3267 WHERE ui_def_id=p_ui_node.ui_def_id AND
3268 page_set_id=l_page_set_id AND
3269 target_persistent_node_id=l_changed_target_ids_tbl(j) AND
3270 target_path<>l_target_path;
3271
3272 END LOOP;
3273 END IF;
3274
3275 END split_Page_Flow;
3276
3277 --
3278 -- check - is CX valid or no ?
3279 --
3280 FUNCTION get_CX_Button_Status(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3281 RETURN VARCHAR2 IS
3282
3283 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3284 l_ui_cx_command_name CZ_EXPRESSION_NODES.data_value%TYPE;
3285 l_undeleted_exist BOOLEAN;
3286
3287 BEGIN
3288
3289 l_model_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id, g_UI_Context.devl_project_id);
3290
3291 BEGIN
3292 SELECT cx_command_name
3293 INTO l_ui_cx_command_name
3294 FROM CZ_UI_ACTIONS
3295 WHERE ui_def_id=p_ui_node.ui_def_id AND
3296 element_id=p_ui_node.element_id AND
3297 cx_command_name IS NOT NULL AND-- fix for bug 3923033
3298 deleted_flag=G_NO_FLAG;
3299 EXCEPTION
3300 WHEN NO_DATA_FOUND THEN
3301 RETURN G_CX_VALID;
3302 END;
3303
3304 l_undeleted_exist := FALSE;
3305 FOR i IN(SELECT a.deleted_flag, a.invalid_flag, a.disabled_flag ,
3306 a.INSTANTIATION_SCOPE, b.data_value, a.name
3307 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3308 WHERE a.devl_project_id=l_model_node.devl_project_id AND
3309 a.component_id=l_model_node.ps_node_id AND
3310 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3311 a.deleted_flag=G_NO_FLAG AND
3312 b.rule_id=a.rule_id AND
3313 b.deleted_flag=G_NO_FLAG AND
3314 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3315 data_value=l_ui_cx_command_name)
3316 LOOP
3317
3318 IF i.deleted_flag=G_NO_FLAG THEN
3319 l_undeleted_exist := TRUE;
3320 END IF;
3321
3322 IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3323 i.deleted_flag=G_NO_FLAG THEN
3324 RETURN G_CX_VALID;
3325 END IF;
3326 END LOOP;
3327
3328 IF l_model_node.ps_node_type=G_REFERENCE_TYPE THEN
3329
3330 FOR i IN(SELECT a.name, a.deleted_flag, a.invalid_flag, a.disabled_flag,
3331 a.INSTANTIATION_SCOPE, b.data_value
3332 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3333 WHERE a.devl_project_id=l_model_node.devl_project_id AND
3334 a.component_id IN
3335 (SELECT ps_node_id FROM CZ_PS_NODES
3336 WHERE devl_project_id IN
3337 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
3338 START WITH model_id=l_model_node.devl_project_id AND
3339 referring_node_id=l_model_node.ps_node_id
3340 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
3341 deleted_flag='0' AND PRIOR deleted_flag='0') AND
3342 deleted_flag='0') AND
3343 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3344 b.rule_id=a.rule_id AND
3345 b.deleted_flag=G_NO_FLAG AND
3346 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3347 data_value IS NOT NULL)
3348 LOOP
3349
3350 IF l_model_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
3351 i.INSTANTIATION_SCOPE=1 AND i.disabled_flag=G_NO_FLAG THEN
3352
3353 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
3354 p_token_name1 => 'EVENT_NAME',
3355 p_token_value1 => i.data_value,
3356 p_token_name2 => 'RULE_NAME',
3357 p_token_value2 => i.name,
3358 p_fatal_error => FALSE);
3359
3360
3361 RETURN G_CX_INVALID;
3362 END IF;
3363
3364 IF i.deleted_flag=G_NO_FLAG THEN
3365 l_undeleted_exist := TRUE;
3366 END IF;
3367
3368 IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3369 i.deleted_flag=G_NO_FLAG THEN
3370 RETURN G_CX_VALID;
3371 END IF;
3372 END LOOP;
3373
3374 END IF;
3375
3376 IF l_undeleted_exist=FALSE THEN
3377 RETURN G_CX_MUST_BE_DELETED;
3378 ELSE
3379 RETURN G_CX_INVALID;
3380 END IF;
3381 END get_CX_Button_Status;
3382
3383 --
3384 -- refresh expl ids in UI tables
3385 --
3386 PROCEDURE sync_Expl_Ids(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3387 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3388 p_expl_id IN NUMBER) IS
3389
3390 BEGIN
3391
3392
3393 IF p_expl_id <> p_ui_node.model_ref_expl_id THEN
3394 UPDATE CZ_UI_PAGE_ELEMENTS
3395 SET model_ref_expl_id=p_expl_id
3396 WHERE ui_def_id=p_ui_node.ui_def_id AND
3397 page_id=p_ui_node.page_id AND
3398 element_id=p_ui_node.element_id;
3399
3400 IF p_ui_node.parent_element_id IS NULL THEN
3401 UPDATE CZ_UI_PAGES
3402 SET pagebase_expl_node_id=p_expl_id
3403 WHERE page_id=p_ui_node.page_id AND
3404 ui_def_id=p_ui_node.ui_def_id;
3405 IF SQL%ROWCOUNT>0 THEN
3406 UPDATE CZ_UI_PAGE_SETS
3407 SET pagebase_expl_node_id=p_expl_id
3408 WHERE ui_def_id=g_UI_Context.ui_def_id
3409 AND persistent_node_id=p_ui_node.persistent_node_id
3410 AND deleted_flag=G_NO_FLAG;
3411 END IF;
3412 END IF;
3413
3414 UPDATE CZ_UI_PAGE_REFS
3415 SET target_expl_node_id=p_expl_id
3416 WHERE ui_def_id=p_ui_node.ui_def_id AND
3417 target_persistent_node_id=p_node.persistent_node_id;
3418
3419 END IF;
3420 END sync_Expl_Ids;
3421
3422 --
3423 -- refresh expl ids in UI tables
3424 --
3425 PROCEDURE sync_Expl_Ids(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3426 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3427 l_model_ref_expl_id NUMBER;
3428 BEGIN
3429 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
3430 p_ps_node_id => p_node.ps_node_id,
3431 p_component_id => p_node.component_id,
3432 p_ps_node_type => p_node.ps_node_type);
3433 sync_Expl_Ids(p_node, p_ui_node, l_model_ref_expl_id);
3434 END;
3435
3436
3437
3438 --
3439 -- replace Template Id of UI node p_ui_node
3440 --
3441 PROCEDURE replace_Template_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3442 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
3443
3444 l_element_signature_id NUMBER;
3445 l_counter NUMBER;
3446
3447 BEGIN
3448
3449 SELECT COUNT(*)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
3450 WHERE ui_def_id=p_ui_node.ui_def_id AND
3451 page_id=p_ui_node.page_id AND
3452 element_signature_id=p_model_node.root_element_signature_id AND
3453 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG);
3454
3455 UPDATE CZ_UI_PAGE_ELEMENTS
3456 SET ctrl_template_id=p_model_node.template_id,
3457 element_signature_id=p_model_node.root_element_signature_id,
3458 deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH),
3459 name=p_model_node.template_name||' - '||l_counter
3460 WHERE ui_def_id=p_ui_node.ui_def_id AND
3461 page_id=p_ui_node.page_id AND
3462 element_id=p_ui_node.element_id;
3463
3464 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
3465
3466 END replace_Template_Id;
3467
3468 --
3469 -- remove common attributes in case when we attach template
3470 -- starting with DOM node p_node
3471 -- Parameters : p_node - identifies DOM node of subtree's root
3472 --
3473 PROCEDURE remove_TopLevel_Attributes(p_node xmldom.DOMNode) IS
3474 l_root_elem xmldom.DOMElement;
3475 BEGIN
3476 l_root_elem := xmldom.makeElement(p_node);
3477 FOR i IN g_toplevel_attr_tbl.FIRST .. g_toplevel_attr_tbl.LAST
3478 LOOP
3479 BEGIN
3480 xmldom.removeAttribute(l_root_elem, g_toplevel_attr_tbl(i));
3481 EXCEPTION
3482 WHEN OTHERS THEN
3483 NULL;
3484 END;
3485 END LOOP;
3486 END remove_TopLevel_Attributes;
3487
3488 --
3489 -- remove non user attributes from a given XML node
3490 --
3491 PROCEDURE remove_Non_User_Attributes(p_node xmldom.DOMNode) IS
3492
3493 l_root_elem xmldom.DOMElement;
3494 l_node_map_tbl xmldom.DOMNamedNodeMap;
3495 l_node_attr xmldom.DOMNode;
3496 l_attr_name VARCHAR2(32000);
3497 l_length NUMBER;
3498
3499 BEGIN
3500
3501 l_root_elem := xmldom.makeElement(p_node);
3502
3503 l_node_map_tbl := xmldom.getAttributes(p_node);
3504 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3505 l_length := xmldom.getLength(l_node_map_tbl);
3506 --
3507 -- loop through attributes
3508 --
3509 FOR i IN 0 .. l_length - 1
3510 LOOP
3511 l_node_attr := xmldom.item(l_node_map_tbl, i);
3512
3513 IF NOT(xmldom.isNull(l_node_attr)) THEN
3514 l_attr_name := xmldom.getNodeName(l_node_attr);
3515 IF (lower(l_attr_name) not like ('user:attribute%') AND
3516 lower(l_attr_name) <> G_ID_ATTRIBUTE) OR
3517 lower(l_attr_name)=G_USER_ATTRIBUTE10_NAME THEN
3518 xmldom.removeAttribute(l_root_elem, l_attr_name);
3519 END IF;
3520 END IF;
3521 END LOOP;
3522 END IF;
3523
3524 EXCEPTION
3525 WHEN OTHERS THEN
3526 DEBUG('remove_Non_User_Attributes() : '||SQLERRM);
3527 END remove_Non_User_Attributes;
3528
3529 --
3530 -- clear the cache
3531 --
3532 PROCEDURE flash_Cache IS
3533 BEGIN
3534 g_model_nodes_tbl.DELETE;
3535 g_ui_page_elements_tbl.DELETE;
3536 g_ps_node_persist_id_tbl.DELETE;
3537 g_ui_pages_tbl.DELETE;
3538 g_ui_page_refs_tbl.DELETE;
3539 g_ui_refs_tbl.DELETE;
3540 g_ui_page_sets_tbl.DELETE;
3541 g_ref_expls_tbl.DELETE;
3542 g_ui_action_ids_tbl.DELETE;
3543 END flash_Cache;
3544
3545 --
3546 -- cache Mode nodes and UI data
3547 --
3548 PROCEDURE populate_Cache IS
3549
3550 BEGIN
3551
3552 flash_Cache;
3553
3554 FOR i IN (SELECT DISTINCT *
3555 FROM CZ_UITEMPLS_FOR_PSNODES_V
3556 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
3557 devl_project_id = g_UI_Context.devl_project_id)
3558 LOOP
3559 g_model_nodes_tbl(i.ps_node_id) := i;
3560 g_ps_node_persist_id_tbl(i.persistent_node_id) := i.ps_node_id;
3561 END LOOP;
3562
3563 FOR i IN(SELECT model_ref_expl_id,referring_node_id,component_id
3564 FROM CZ_MODEL_REF_EXPLS
3565 WHERE model_id=g_UI_Context.devl_project_id AND
3566 deleted_flag=G_NO_FLAG)
3567 LOOP
3568 IF i.referring_node_id IS NOT NULL THEN
3569 g_ref_expls_tbl(i.referring_node_id) := i.model_ref_expl_id;
3570 ELSE
3571 g_ref_expls_tbl(i.component_id) := i.model_ref_expl_id;
3572 END IF;
3573 END LOOP;
3574
3575 FOR i IN (SELECT *
3576 FROM CZ_UI_PAGES
3577 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3578 deleted_flag = G_NO_FLAG)
3579 LOOP
3580 g_ui_pages_tbl(i.page_id) := i;
3581
3582 IF NOT(g_ui_pages_counter_tbl.EXISTS(g_UI_Context.ui_def_id)) THEN
3583 g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := 1;
3584 ELSE
3585 g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) + 1;
3586 END IF;
3587 END LOOP;
3588
3589 FOR i IN (SELECT *
3590 FROM CZ_UI_PAGE_ELEMENTS
3591 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3592 deleted_flag = G_NO_FLAG)
3593 LOOP
3594 BEGIN
3595 g_ui_page_elements_tbl(TO_NUMBER(i.element_id)) := i;
3596 EXCEPTION
3597 WHEN OTHERS THEN
3598 --
3599 -- if element_id is not a number it will not be cached
3600 --
3601 NULL;
3602 END;
3603 END LOOP;
3604
3605 FOR i IN (SELECT *
3606 FROM CZ_UI_PAGE_REFS
3607 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3608 deleted_flag = G_NO_FLAG)
3609 LOOP
3610 g_ui_page_refs_tbl(i.page_ref_id) := i;
3611 END LOOP;
3612
3613 FOR i IN (SELECT *
3614 FROM CZ_UI_PAGE_SETS
3615 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3616 deleted_flag = G_NO_FLAG)
3617 LOOP
3618 g_ui_page_sets_tbl(i.page_set_id) := i;
3619 END LOOP;
3620
3621 FOR i IN (SELECT ref_persistent_node_id
3622 FROM CZ_UI_REFS
3623 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3624 deleted_flag = G_NO_FLAG)
3625 LOOP
3626 g_ui_refs_tbl(i.ref_persistent_node_id) := i.ref_persistent_node_id;
3627 END LOOP;
3628
3629 FOR i IN (SELECT element_id, ui_action_id
3630 FROM CZ_UI_ACTIONS
3631 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3632 deleted_flag = G_NO_FLAG)
3633 LOOP
3634 BEGIN
3635 g_ui_action_ids_tbl(TO_NUMBER(i.element_id)) := i.ui_action_id;
3636 EXCEPTION
3637 WHEN OTHERS THEN
3638 NULL;
3639 END;
3640 END LOOP;
3641
3642 END populate_Cache;
3643
3644 ---------------------------------------------------------------------
3645 -------------------------XML Parsing Part ---------------------------
3646 ---------------------------------------------------------------------
3647
3648 --
3649 -- returns value of a given attribute
3650 -- Parameters :
3651 -- p_node - DOM node
3652 -- p_attr_name - attribute name
3653 -- Return : attribute value as VARCHAR2 string
3654 --
3655 FUNCTION get_Attribute_Value(p_node IN xmldom.DOMNode,
3656 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3657
3658 l_node_map_tbl xmldom.DOMNamedNodeMap;
3659 l_node_attr xmldom.DOMNode;
3660 l_attr_value VARCHAR2(32000);
3661 l_length NUMBER;
3662
3663 BEGIN
3664 IF xmldom.IsNull(p_node) THEN
3665 RETURN NULL;
3666 END IF;
3667 l_node_map_tbl := xmldom.getAttributes(p_node);
3668
3669 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3670 l_length := xmldom.getLength(l_node_map_tbl);
3671 --
3672 -- loop through attributes
3673 --
3674 FOR i IN 0 .. l_length - 1
3675 LOOP
3676 l_node_attr := xmldom.item(l_node_map_tbl, i);
3677 IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3678 l_attr_value := xmldom.getNodeValue(l_node_attr);
3679 EXIT;
3680 END IF;
3681 END LOOP;
3682 END IF;
3683 RETURN l_attr_value;
3684 END get_Attribute_Value;
3685
3686 FUNCTION attribute_Value(p_node IN xmldom.DOMNode,
3687 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3688
3689 l_node_map_tbl xmldom.DOMNamedNodeMap;
3690 l_node_attr xmldom.DOMNode;
3691 l_attr_value VARCHAR2(32000);
3692 l_length NUMBER;
3693
3694 BEGIN
3695 l_node_map_tbl := xmldom.getAttributes(p_node);
3696 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3697 l_length := xmldom.getLength(l_node_map_tbl);
3698 --
3699 -- loop through attributes
3700 --
3701 FOR i IN 0 .. l_length - 1
3702 LOOP
3703 l_node_attr := xmldom.item(l_node_map_tbl, i);
3704 IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3705 l_attr_value := xmldom.getNodeValue(l_node_attr);
3706 IF l_attr_value IS NULL THEN
3707 RETURN NULL;
3708 ELSE
3709 RETURN l_attr_value;
3710 END IF;
3711 END IF;
3712 END LOOP;
3713 END IF;
3714 RETURN '*';
3715 END attribute_Value;
3716
3717 --
3718 -- return value of specified user atribute
3719 --
3720 FUNCTION get_User_Attribute(p_user_attribute_value IN VARCHAR2,
3721 p_cz_attribute_name IN VARCHAR2)
3722 RETURN VARCHAR2 IS
3723
3724 l_ind1 NUMBER;
3725 l_ind2 NUMBER;
3726 l_substr VARCHAR2(32000);
3727
3728 BEGIN
3729
3730 l_ind1 := INSTR(p_user_attribute_value,p_cz_attribute_name);
3731
3732 IF l_ind1 > 0 THEN
3733 l_substr := SUBSTR(p_user_attribute_value,l_ind1+LENGTH(p_cz_attribute_name)+LENGTH('='));
3734 l_ind2 := INSTR(l_substr, '|');
3735 IF l_ind2 > 0 THEN
3736 RETURN SUBSTR(l_substr,1,l_ind2-1);
3737 ELSE
3738 RETURN l_substr;
3739 END IF;
3740 ELSE
3741 RETURN NULL;
3742 END IF;
3743 END get_User_Attribute;
3744
3745 --
3746 -- find DOM node by persistent_node_id
3747 --
3748 FUNCTION find_XML_Node_By_Attribute(p_subtree_doc xmldom.DOMDocument,
3749 p_attribute_name IN VARCHAR2,
3750 p_attribute_value IN VARCHAR2,
3751 p_in_user_attributes IN VARCHAR2 DEFAULT NULL)
3752 RETURN xmldom.DOMNode IS
3753
3754 l_node xmldom.DOMNode;
3755 l_nodeslist xmldom.DOMNodeList;
3756 l_empty_xml_node xmldom.DOMNode;
3757 l_length NUMBER;
3758 l_attribute_value VARCHAR2(32000);
3759
3760 BEGIN
3761
3762 IF p_attribute_name=G_ID_ATTRIBUTE AND g_page_elements_tbl.EXISTS(p_attribute_value) THEN
3763 RETURN g_page_elements_tbl(p_attribute_value);
3764 END IF;
3765
3766 --
3767 -- here we don't need to know about hierachy of nodes
3768 -- so we just need to get list of all nodes of XML subtree
3769 --
3770 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
3771 l_length := xmldom.getLength(l_nodeslist);
3772
3773 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
3774
3775 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3776
3777 IF p_in_user_attributes=G_YES_FLAG THEN
3778 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3779 l_attribute_value := get_User_Attribute(l_attribute_value, p_attribute_name);
3780 ELSE
3781 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3782 END IF;
3783
3784 IF l_attribute_value = p_attribute_value THEN
3785 RETURN l_node;
3786 END IF;
3787
3788 --
3789 -- scan subtree and substitute macros "%" to real values
3790 --
3791 FOR i IN 0 .. l_length - 1
3792 LOOP
3793 l_node := xmldom.item(l_nodeslist, i);
3794
3795 IF p_in_user_attributes=G_YES_FLAG THEN
3796 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3797 l_attribute_value := get_User_Attribute(l_attribute_value, p_attribute_name);
3798 ELSE
3799 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3800 END IF;
3801
3802 IF l_attribute_value = p_attribute_value THEN
3803 RETURN l_node;
3804 END IF;
3805 END LOOP;
3806 RETURN l_empty_xml_node;
3807
3808 END find_XML_Node_By_Attribute;
3809
3810 --
3811 -- return DOM node of top level tag <ui:contents>
3812 -- if node does not contain p_tag node then return the node itself ( p_node )
3813 -- Parameters :
3814 -- p_node - DOM node
3815 -- Return : top level DOM node with XML tag = p_tag
3816 --
3817 FUNCTION getUIContents(p_node xmldom.DOMNode,
3818 p_return_empty_node VARCHAR2 DEFAULT NULL) RETURN xmldom.DOMNode IS
3819 l_child_nodes_tbl xmldom.DOMNodeList;
3820 l_child_xml_node xmldom.DOMNode;
3821 l_empty_xml_node xmldom.DOMNode;
3822 l_length NUMBER;
3823 BEGIN
3824 l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3825 l_length := xmldom.getLength(l_child_nodes_tbl);
3826 FOR k IN 0 .. l_length - 1
3827 LOOP
3828 --
3829 -- get next child DOM node
3830 --
3831 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3832
3833 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3834 UPPER(G_UI_CONTENTS_TAG) THEN
3835 RETURN l_child_xml_node;
3836 END IF;
3837 END LOOP;
3838
3839 IF p_return_empty_node IS NULL OR p_return_empty_node=G_NO_FLAG THEN
3840 RETURN p_node;
3841 ELSE
3842 RETURN l_empty_xml_node;
3843 END IF;
3844 END getUIContents;
3845
3846 FUNCTION findChildXMLTag(p_node xmldom.DOMNode,
3847 p_xml_tag VARCHAR2) RETURN xmldom.DOMNode IS
3848 l_child_nodes_tbl xmldom.DOMNodeList;
3849 l_child_xml_node xmldom.DOMNode;
3850 l_empty_xml_node xmldom.DOMNode;
3851 l_length NUMBER;
3852 BEGIN
3853 l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3854 l_length := xmldom.getLength(l_child_nodes_tbl);
3855 FOR k IN 0 .. l_length - 1
3856 LOOP
3857 --
3858 -- get next child DOM node
3859 --
3860 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3861
3862 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3863 UPPER(p_xml_tag) THEN
3864 RETURN l_child_xml_node;
3865 END IF;
3866 END LOOP;
3867
3868 RETURN l_empty_xml_node;
3869
3870 END findChildXMLTag;
3871
3872 --
3873 -- return DOM node of top level tag <ui:contents>
3874 -- if node does not contain p_tag node then return the node itself ( p_node )
3875 -- Parameters :
3876 -- p_node - DOM node
3877 -- Return : top level DOM node with XML tag = p_tag
3878 --
3879 FUNCTION get_Col_UIContents(p_node xmldom.DOMNode,
3880 p_col_number NUMBER) RETURN xmldom.DOMNode IS
3881 l_child_nodes_tbl xmldom.DOMNodeList;
3882 l_child_xml_node xmldom.DOMNode;
3883 l_first_ui_contents xmldom.DOMNode;
3884 l_second_ui_contents xmldom.DOMNode;
3885 l_rowlayout xmldom.DOMNode;
3886 l_length NUMBER;
3887 l_counter NUMBER;
3888 l_id_attribute VARCHAR2(255);
3889 BEGIN
3890
3891 l_first_ui_contents := getUIContents(p_node);
3892
3893 l_child_nodes_tbl := xmldom.getChildNodes(l_first_ui_contents);
3894 l_length := xmldom.getLength(l_child_nodes_tbl);
3895 FOR k IN 0 .. l_length - 1
3896 LOOP
3897 --
3898 -- get next child DOM node
3899 --
3900 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3901
3902 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3903 UPPER('oa:rowLayout') THEN
3904
3905 l_id_attribute := get_Attribute_Value(l_child_xml_node,
3906 G_ID_ATTRIBUTE);
3907
3908 EXIT;
3909 END IF;
3910 END LOOP;
3911
3912 l_second_ui_contents := getUIContents(l_child_xml_node);
3913
3914 l_counter:= 0;
3915
3916 l_child_nodes_tbl := xmldom.getChildNodes(l_second_ui_contents);
3917 l_length := xmldom.getLength(l_child_nodes_tbl);
3918 FOR k IN 0 .. l_length - 1
3919 LOOP
3920 --
3921 -- get next child DOM node
3922 --
3923 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3924
3925 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3926 UPPER('oa:cellFormat') THEN
3927 l_counter := l_counter + 1;
3928 IF l_counter=p_col_number THEN
3929
3930 l_id_attribute := get_Attribute_Value(l_child_xml_node,
3931 G_ID_ATTRIBUTE);
3932
3933 RETURN getUIContents(l_child_xml_node);
3934 END IF;
3935
3936 END IF;
3937 END LOOP;
3938
3939 RETURN p_node;
3940
3941 END get_Col_UIContents;
3942
3943 --
3944 -- find DOM node by persistent_node_id
3945 --
3946 FUNCTION find_Table_Of_XML_Node(p_parent_xml_node xmldom.DOMNode,
3947 p_element_id IN VARCHAR2)
3948 RETURN xmldom.DOMNode IS
3949
3950 l_child_xml_node xmldom.DOMNode;
3951 l_table_child_xml_node xmldom.DOMNode;
3952 l_empty_xml_node xmldom.DOMNode;
3953 l_uicont_xml_node xmldom.DOMNode;
3954 l_ui_contents_xml_node xmldom.DOMNode;
3955 l_child_nodes_tbl xmldom.DOMNodeList;
3956 l_table_child_nodes_tbl xmldom.DOMNodeList;
3957 l_length NUMBER;
3958 l_table_child_length NUMBER;
3959
3960 BEGIN
3961
3962 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
3963 'oa:flowLayout','oa:tableLayout') THEN
3964
3965 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
3966 ELSE
3967 l_ui_contents_xml_node := p_parent_xml_node;
3968 END IF;
3969
3970 --
3971 -- get child nodes of DOM node : p_node
3972 --
3973 l_child_nodes_tbl := xmldom.getChildNodes(l_ui_contents_xml_node);
3974
3975 --
3976 -- we need to get length of array of child nodes
3977 -- to go through the array in loop
3978 --
3979 l_length := xmldom.getLength(l_child_nodes_tbl);
3980
3981 FOR k IN 0 .. l_length - 1
3982 LOOP
3983 --
3984 -- get next child DOM node
3985 --
3986 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3987
3988 IF (get_Attribute_Value(l_child_xml_node, G_USER_ATTRIBUTE5_NAME) = 'TABLELAYOUT_FOR_UI_GEN') THEN
3989
3990 BEGIN
3991 l_uicont_xml_node := getUIContents(l_child_xml_node);
3992
3993 l_table_child_nodes_tbl := xmldom.getChildNodes(l_uicont_xml_node);
3994 l_table_child_length := xmldom.getLength(l_table_child_nodes_tbl);
3995
3996 FOR m IN 0 .. l_table_child_length - 1
3997 LOOP
3998 l_table_child_xml_node := xmldom.item(l_table_child_nodes_tbl, m);
3999
4000 IF get_Attribute_Value(l_table_child_xml_node, G_ID_ATTRIBUTE) = p_element_id THEN
4001 RETURN l_uicont_xml_node;
4002 END IF;
4003 END LOOP;
4004 END;
4005 END IF;
4006 END LOOP;
4007 RETURN l_empty_xml_node;
4008 EXCEPTION
4009 WHEN OTHERS THEN
4010 DEBUG('find_Table_Of_XML_Node() : '||SQLERRM);
4011 RETURN l_empty_xml_node;
4012 END find_Table_Of_XML_Node;
4013
4014 --
4015 -- find a given xml tag up on the tree
4016 --
4017 FUNCTION find_Element_Id_Of_XMLTag(p_xml_node xmldom.DOMNode,
4018 p_tag_name VARCHAR2 ) RETURN VARCHAR2 IS
4019 l_node xmldom.DOMNode;
4020 l_hgrid_node xmldom.DOMNode;
4021 PROCEDURE find_hgrid(p_node xmldom.DOMNode) IS
4022 BEGIN
4023 IF xmldom.isNull(p_node) THEN
4024 RETURN;
4025 END IF;
4026 l_node := xmldom.getParentNode(p_node);
4027 IF lower(xmldom.getNodeName(l_node))=lower(p_tag_name) THEN
4028 l_hgrid_node := l_node;
4029 ELSE
4030 find_hgrid(l_node);
4031 END IF;
4032 END find_hgrid;
4033 BEGIN
4034 find_hgrid(p_xml_node);
4035 RETURN get_Attribute_Value(l_hgrid_node,
4036 G_ID_ATTRIBUTE);
4037 EXCEPTION
4038 WHEN OTHERS THEN
4039 DEBUG('find_Element_Id_Of_XMLTag() : '||SQLERRM);
4040 RETURN NULL;
4041 END find_Element_Id_Of_XMLTag;
4042
4043
4044 FUNCTION find_AMN_Element_Above(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
4045
4046 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4047
4048 PROCEDURE AMN_Element_Above(p_node xmldom.DOMNode) IS
4049
4050 l_node xmldom.DOMNode;
4051 l_next_node xmldom.DOMNode;
4052 l_user_attribute1 VARCHAR2(32000);
4053
4054 BEGIN
4055
4056 l_node := xmldom.getParentNode(p_node);
4057
4058 IF xmldom.isNull(l_node) THEN
4059 l_element_id := get_Attribute_Value(p_node, G_ID_ATTRIBUTE);
4060 RETURN;
4061 END IF;
4062
4063 l_user_attribute1 := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
4064
4065 IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
4066
4067 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4068 RETURN;
4069
4070 ELSE
4071
4072 l_next_node := xmldom.getParentNode(l_node);
4073
4074 IF xmldom.isNull(l_next_node) THEN
4075 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4076 RETURN;
4077 ELSE
4078 AMN_Element_Above(l_node);
4079 END IF;
4080
4081 END IF;
4082
4083 END AMN_Element_Above;
4084
4085 BEGIN
4086
4087 AMN_Element_Above(p_xml_node);
4088
4089 RETURN l_element_id;
4090
4091 END find_AMN_Element_Above;
4092
4093
4094 --
4095 -- parse or export/parse JRAD document
4096 -- Parameters :
4097 -- p_doc_full_name - full JRAD name of the document
4098 --
4099 FUNCTION parse_JRAD_Document(p_doc_full_name IN VARCHAR2)
4100 RETURN xmldom.DOMDocument IS
4101
4102 l_buffer VARCHAR2(32000);
4103 l_lob_loc CLOB;
4104 l_amount BINARY_INTEGER;
4105 l_position INTEGER := 1;
4106 l_xmldoc xmldom.DOMDocument;
4107 l_exportfinished BOOLEAN;
4108
4109 BEGIN
4110
4111 DBMS_LOB.CREATETEMPORARY(l_lob_loc, TRUE);
4112 DBMS_LOB.OPEN(l_lob_loc, DBMS_LOB.LOB_READWRITE);
4113
4114 l_buffer := jdr_utils.ExportDocument(p_document => p_doc_full_name,
4115 p_exportfinished => l_exportfinished);
4116
4117 IF l_buffer IS NULL THEN
4118 RETURN l_xmldoc;
4119 END IF;
4120
4121 l_amount := LENGTH(l_buffer);
4122
4123 DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4124 l_position := l_position + l_amount;
4125
4126 IF l_exportfinished=FALSE THEN
4127 LOOP
4128 l_buffer := jdr_utils.ExportDocument(p_document => NULL,
4129 p_exportfinished => l_exportfinished);
4130
4131 IF l_buffer IS NULL THEN
4132 EXIT;
4133 END IF;
4134
4135 l_amount := LENGTH(l_buffer);
4136
4137 DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4138 l_position := l_position + l_amount;
4139
4140 IF l_buffer IS NULL OR l_exportfinished THEN
4141 EXIT;
4142 END IF;
4143 END LOOP;
4144
4145 END IF;
4146
4147 xmlparser.parseCLOB(g_PARSER, l_lob_loc);
4148
4149 l_xmldoc := xmlparser.getDocument(g_PARSER);
4150
4151 DBMS_LOB.CLOSE(l_lob_loc);
4152 DBMS_LOB.FREETEMPORARY(l_lob_loc);
4153
4154 RETURN l_xmldoc;
4155
4156 EXCEPTION
4157 WHEN OTHERS THEN
4158 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
4159 p_token_name => 'UI_TEMPLATE',
4160 p_token_value => p_doc_full_name,
4161 p_fatal_error => TRUE);
4162 RAISE WRONG_UI_TEMPLATE;
4163 END parse_JRAD_Document;
4164
4165 --
4166 -- set CZ Attributes for a given DOM node
4167 -- Parameters : p_dom_element - DOM Element which identifies DOM node
4168 -- p_attribute_name - attribute name
4169 -- p_attribute_value - attribute value
4170 --
4171 PROCEDURE set_Attribute(p_dom_element xmldom.DOMElement,
4172 p_attribute_name IN VARCHAR2,
4173 p_attribute_value IN VARCHAR2) IS
4174
4175 BEGIN
4176 xmldom.setAttribute(p_dom_element, p_attribute_name, p_attribute_value);
4177 END set_Attribute;
4178
4179 --
4180 -- set CZ Attributes for a given DOM node
4181 -- Parameters : p_dom_element - DOM Element which identifies DOM node
4182 -- p_attribute_name - attribute name
4183 -- p_attribute_value - attribute value
4184 --
4185 PROCEDURE set_Attribute(p_dom_node xmldom.DOMNode,
4186 p_attribute_name IN VARCHAR2,
4187 p_attribute_value IN VARCHAR2) IS
4188
4189 BEGIN
4190 xmldom.setAttribute(xmldom.makeElement(p_dom_node), p_attribute_name, p_attribute_value);
4191 END set_Attribute;
4192
4193 --
4194 -- set internal CZ attributes within "user:attribute1"
4195 --
4196 PROCEDURE set_User_Attribute(p_cz_attribute_name IN VARCHAR2,
4197 p_cz_attribute_value IN VARCHAR2,
4198 p_add_if_not_present IN BOOLEAN DEFAULT FALSE,
4199 px_xml_attribute_value IN OUT NOCOPY VARCHAR2) IS
4200
4201 l_str VARCHAR2(4000);
4202 l_sub_str VARCHAR2(4000);
4203 l_next_equal_ind NUMBER;
4204 l_next_ind NUMBER;
4205 l_ind NUMBER;
4206
4207 BEGIN
4208
4209 --
4210 -- get string of CZ user attributes
4211 --
4212 l_str := px_xml_attribute_value;
4213 l_ind := INSTR(l_str, p_cz_attribute_name);
4214
4215 IF l_ind > 0 THEN
4216
4217 l_sub_str := SUBSTR(l_str, l_ind);
4218 l_next_ind := INSTR(l_sub_str, '|');
4219
4220 l_next_equal_ind := INSTR(l_sub_str, '=');
4221
4222 IF l_next_equal_ind > 1 THEN
4223
4224 IF l_next_ind > 0 THEN
4225 px_xml_attribute_value := SUBSTR(l_str, 1, l_ind + l_next_equal_ind - 1) ||
4226 p_cz_attribute_value || SUBSTR(l_sub_str, l_next_ind);
4227 ELSE
4228 px_xml_attribute_value := SUBSTR(l_str, 1,l_ind + l_next_equal_ind - 1) || p_cz_attribute_value;
4229 END IF;
4230
4231 END IF;
4232 ELSE
4233 NULL;
4234 END IF;
4235
4236 END set_User_Attribute;
4237 --vsingava IM-ER
4238 PROCEDURE set_user_attribute(p_xml_node xmldom.DOMNode,
4239 p_jrad_attribute_name VARCHAR2,
4240 p_cz_attribute_name VARCHAR2,
4241 p_attribute_value VARCHAR2) IS
4242 l_user_attribute VARCHAR2(2000);
4243 l_xml_node xmldom.DOMNode;
4244 BEGIN
4245
4246 l_user_attribute := get_Attribute_Value(p_xml_node,
4247 p_jrad_attribute_name);
4248
4249 set_User_Attribute(p_cz_attribute_name => p_cz_attribute_name,
4250 p_cz_attribute_value => p_attribute_value,
4251 p_add_if_not_present => TRUE,
4252 px_xml_attribute_value => l_user_attribute);
4253
4254 set_Attribute(p_xml_node,p_jrad_attribute_name, l_user_attribute);
4255
4256 END set_user_attribute;
4257
4258 -- Removes the indicated CZ attribute from the indicated Jrad User attribute and set the
4259 -- remainder back on to the node
4260 FUNCTION remove_user_attribute(p_xml_node xmldom.DOMNode,
4261 p_jrad_attribute_name VARCHAR2,
4262 p_cz_attribute_name VARCHAR2) RETURN VARCHAR2 IS
4263 l_user_attribute VARCHAR2(2000);
4264 l_cz_attr_val VARCHAR2(2000);
4265 l_substr VARCHAR2(2000);
4266 l_length NUMBER;
4267 l_ind1 NUMBER;
4268 l_ind2 NUMBER;
4269 BEGIN
4270
4271
4272 l_user_attribute := get_Attribute_Value(p_xml_node,
4273 p_jrad_attribute_name);
4274
4275 l_ind1 := INSTR(l_user_attribute, p_cz_attribute_name);
4276
4277 IF l_ind1 > 0 THEN
4278 l_length := LENGTH(p_cz_attribute_name)+LENGTH('=');
4279 l_substr := SUBSTR(l_user_attribute,l_ind1+l_length);
4280 l_ind2 := INSTR(l_substr, '|');
4281 IF l_ind2 > 0 THEN
4282 l_cz_attr_val := SUBSTR(l_substr,1,l_ind2-1);
4283 l_user_attribute := SUBSTR(l_user_attribute, 1, l_ind1-1) || SUBSTR(l_user_attribute, l_ind1 + l_length + l_ind2);
4284 ELSE
4285 l_cz_attr_val := l_substr;
4286 l_user_attribute := SUBSTR(l_user_attribute, 1, l_ind1-1);
4287 END IF;
4288 ELSE
4289 l_substr := NULL;
4290 END IF;
4291
4292 IF l_substr IS NOT NULL THEN
4293 set_Attribute(p_xml_node,p_jrad_attribute_name, l_user_attribute);
4294 END IF;
4295
4296 RETURN l_substr;
4297
4298 END remove_user_attribute;
4299
4300 --
4301 -- this procedure adds CZ_UI_PAGE_ELEMENTS records
4302 -- which correspond to first level UI template references
4303 --
4304 PROCEDURE add_Extends_Refs(p_xml_node xmldom.DOMNode,
4305 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
4306
4307 l_seq_nbr NUMBER;
4308 l_template_id NUMBER;
4309 l_template_name CZ_UI_TEMPLATES.template_name%TYPE;
4310 l_id_attribute_value CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4311 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4312 l_extend_attr_value VARCHAR2(4000);
4313
4314 BEGIN
4315
4316 l_extend_attr_value := get_Attribute_Value(p_xml_node, 'extends');
4317
4318 IF l_extend_attr_value IS NULL THEN
4319 RETURN;
4320 END IF;
4321
4322 l_id_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4323
4324 IF l_id_attribute_value IS NULL THEN
4325 RETURN;
4326 END IF;
4327
4328 SELECT template_id,template_name INTO l_template_id,l_template_name FROM CZ_UI_TEMPLATES
4329 WHERE ui_def_id=NVL(p_ui_node.ctrl_template_ui_def_id,G_GLOBAL_TEMPLATES_UI_DEF_ID) AND
4330 jrad_doc=l_extend_attr_value AND deleted_flag=G_NO_FLAG;
4331
4332 SELECT NVL(max(seq_nbr),0)+1 INTO l_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
4333 WHERE ui_def_id=p_ui_node.ui_def_id AND
4334 page_id=p_ui_node.page_id AND
4335 parent_element_id=p_ui_node.element_id AND
4336 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
4337
4338 l_element_id := get_element_Id();
4339
4340 INSERT INTO CZ_UI_PAGE_ELEMENTS
4341 (
4342 UI_DEF_ID
4343 ,PAGE_ID
4344 ,PERSISTENT_NODE_ID
4345 ,ELEMENT_ID
4346 ,PARENT_PERSISTENT_NODE_ID
4347 ,REGION_PERSISTENT_NODE_ID
4348 ,PAGEBASE_PERSISTENT_NODE_ID
4349 ,CTRL_TEMPLATE_ID
4350 ,BASE_PAGE_FLAG
4351 ,INSTANTIABLE_FLAG
4352 ,SEQ_NBR
4353 ,DELETED_FLAG
4354 ,CTRL_TEMPLATE_UI_DEF_ID
4355 ,MODEL_REF_EXPL_ID
4356 ,SUPPRESS_REFRESH_FLAG
4357 ,PARENT_ELEMENT_ID
4358 ,ELEMENT_TYPE
4359 ,NAME
4360 ,ELEMENT_SIGNATURE_ID
4361 ,TARGET_PAGE_UI_DEF_ID
4362 ,TARGET_PAGE_ID
4363 )
4364 VALUES
4365 (
4366 p_ui_node.ui_def_id
4367 ,p_ui_node.page_id
4368 ,NULL
4369 ,l_element_id
4370 ,p_ui_node.parent_persistent_node_id
4371 ,p_ui_node.region_persistent_node_id
4372 ,p_ui_node.pagebase_persistent_node_id
4373 ,l_template_id
4374 ,'0'
4375 ,'0'
4376 ,l_seq_nbr
4377 ,G_NO_FLAG
4378 ,p_ui_node.ctrl_template_ui_def_id
4379 ,NULL
4380 ,'0'
4381 ,p_ui_node.element_id
4382 ,NULL
4383 ,l_template_name
4384 ,6011
4385 ,NULL
4386 ,NULL
4387 );
4388
4389 set_Attribute(p_xml_node, G_ID_ATTRIBUTE, l_element_id);
4390
4391 END add_Extends_Refs;
4392
4393 FUNCTION find_Parent_UI_Element
4394 (p_xml_node xmldom.DOMNode,
4395 p_ui_def_id IN NUMBER,
4396 p_ui_page_id IN NUMBER) RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
4397
4398 l_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE;
4399
4400 PROCEDURE get_Parent_XML(p_check_xml_node xmldom.DOMNode) IS
4401
4402 l_parent_xml_node xmldom.DOMNode;
4403 l_id_attr_value VARCHAR2(32000);
4404
4405 BEGIN
4406
4407 l_id_attr_value := get_Attribute_Value(p_check_xml_node, G_ID_ATTRIBUTE);
4408
4409 IF l_id_attr_value IS NOT NULL THEN
4410
4411 BEGIN
4412 SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4413 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4414 element_id=l_id_attr_value;
4415 RETURN;
4416 EXCEPTION
4417 WHEN NO_DATA_FOUND THEN
4418 NULL;
4419 END;
4420
4421 END IF;
4422
4423 l_parent_xml_node := xmldom.getParentNode(p_check_xml_node);
4424
4425
4426 IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
4427
4428 l_id_attr_value := get_Attribute_Value(l_parent_xml_node , G_ID_ATTRIBUTE);
4429
4430
4431 IF l_id_attr_value IS NOT NULL THEN
4432
4433 BEGIN
4434 SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4435 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4436 element_id=l_id_attr_value;
4437 RETURN;
4438 EXCEPTION
4439 WHEN NO_DATA_FOUND THEN
4440 get_Parent_XML(l_parent_xml_node);
4441 END;
4442
4443 ELSE
4444 get_Parent_XML(l_parent_xml_node);
4445 END IF;
4446
4447 ELSE
4448 RETURN;
4449 END IF;
4450
4451 END get_Parent_XML;
4452
4453
4454 BEGIN
4455
4456 get_Parent_XML(p_xml_node);
4457
4458 RETURN l_ui_element;
4459
4460 END find_Parent_UI_Element;
4461
4462 --
4463 -- replace prefixes which are used by runtime caching
4464 --
4465 FUNCTION replace_Prefix(p_str IN VARCHAR2, p_inline_copy_mode IN VARCHAR2) RETURN VARCHAR2 IS
4466 BEGIN
4467 IF p_inline_copy_mode=G_INLINE_COPY_TMPL THEN
4468 RETURN REPLACE(p_str,'_czt','_czc');
4469 ELSIF p_inline_copy_mode=G_INLINE_COPY_UIPAGE THEN
4470 RETURN REPLACE(REPLACE(p_str,'_czt','_czn'), '_czc','_czn');
4471 ELSE
4472 RETURN p_str;
4473 END IF;
4474 END replace_Prefix;
4475
4476 --
4477 -- handle special cases ( like "switcher case", "ancestor node" )
4478 --
4479 PROCEDURE handle_Special_XMLCases
4480 (p_xml_node xmldom.DOMNode,
4481 p_old_xml_node_id VARCHAR2,
4482 p_new_xml_node_id VARCHAR2,
4483 p_jrad_doc VARCHAR2,
4484 px_xml_switcher_id IN OUT NOCOPY VARCHAR2,
4485 p_inline_copy_mode IN VARCHAR2) IS
4486
4487 l_curr_parent_xml_node xmldom.DOMNode;
4488 l_ancestor_node_id VARCHAR2(255);
4489 l_xml_node_name VARCHAR2(255);
4490 l_parent_xml_node_name VARCHAR2(255);
4491 l_hgrid_element_id VARCHAR2(255);
4492 l_switcher_xml_id VARCHAR2(255);
4493 l_switcher_casename VARCHAR2(255);
4494 l_uicase_name VARCHAR2(255);
4495 l_user_attribute3_value VARCHAR2(4000);
4496 l_user_attribute4_value VARCHAR2(4000);
4497
4498 BEGIN
4499
4500 l_curr_parent_xml_node := xmldom.getParentNode(p_xml_node);
4501
4502 l_xml_node_name := xmldom.getNodeName(p_xml_node);
4503 l_parent_xml_node_name := xmldom.getNodeName(l_curr_parent_xml_node);
4504
4505 l_ancestor_node_id := get_Attribute_Value(p_xml_node,
4506 'ancestorNode');
4507
4508 IF p_old_xml_node_id IS NOT NULL THEN
4509 set_Attribute(p_xml_node, G_ID_ATTRIBUTE, replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4510 END IF;
4511
4512 IF l_ancestor_node_id IS NOT NULL THEN
4513
4514 l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
4515
4516 IF NOT(xmldom.IsNull(p_xml_node)) THEN
4517
4518 l_ancestor_node_id := p_jrad_doc||'.'||l_hgrid_element_id;
4519 set_Attribute(p_xml_node,
4520 'ancestorNode',
4521 l_ancestor_node_id);
4522
4523 END IF; -- end of IF NOT(xmldom.IsNull(p_xml_node))
4524
4525 END IF; -- end of IF l_ancestor_node IS NOT NULL
4526
4527 --
4528 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
4529 --
4530 IF l_xml_node_name='oa:switcher' THEN
4531
4532 px_xml_switcher_id := p_old_xml_node_id;
4533
4534 l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4535 l_switcher_casename := get_User_Attribute(l_user_attribute3_value, 'switcherDefaultCaseName');
4536
4537 IF l_switcher_casename IS NOT NULL THEN
4538 l_switcher_casename := replace_Prefix(REPLACE(l_switcher_casename, px_xml_switcher_id, p_new_xml_node_id), p_inline_copy_mode);
4539
4540 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
4541 p_cz_attribute_value => l_switcher_casename,
4542 px_xml_attribute_value => l_user_attribute3_value);
4543
4544 set_Attribute(p_xml_node,
4545 G_USER_ATTRIBUTE3_NAME,
4546 l_user_attribute3_value);
4547
4548 END IF;
4549
4550 set_Attribute(p_xml_node,
4551 G_ID_ATTRIBUTE,
4552 replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4553
4554 END IF; -- end of IF l_xml_node_name='oa:switcher'
4555
4556 --
4557 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
4558 --
4559 IF l_xml_node_name='ui:case' THEN
4560 IF l_parent_xml_node_name='oa:switcher' THEN
4561
4562 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
4563 l_uicase_name := get_Attribute_Value(p_xml_node, 'name');
4564
4565 set_Attribute(p_xml_node,
4566 'name',
4567 replace_Prefix(REPLACE(l_uicase_name, px_xml_switcher_id, l_switcher_xml_id), p_inline_copy_mode));
4568
4569 END IF; -- end of IF l_parent_xml_node_name='oa:switcher'
4570
4571 l_user_attribute4_value := get_Attribute_Value(p_xml_node,
4572 G_USER_ATTRIBUTE4_NAME);
4573
4574 IF l_user_attribute4_value IS NOT NULL THEN
4575 set_User_Attribute(p_cz_attribute_name => 'caseId',
4576 p_cz_attribute_value => get_Element_Id(),
4577 px_xml_attribute_value => l_user_attribute4_value);
4578
4579 set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4_value);
4580 END IF; -- end of IF l_user_attribute4 IS NOT NULL
4581
4582 END IF; -- end of IF l_xml_node_name='ui:case'
4583
4584 --
4585 -- if current tag is <oa:stackLayout>
4586 -- then replace old id with new one
4587 IF (l_xml_node_name='oa:stackLayout' AND l_parent_xml_node_name='ui:case') THEN
4588
4589 set_Attribute(p_xml_node,
4590 G_ID_ATTRIBUTE,
4591 replace_Prefix(get_Attribute_Value(l_curr_parent_xml_node, 'name'), p_inline_copy_mode));
4592
4593 END IF; -- end of IF (l_xml_node_name='oa:stackLayout' ...
4594
4595 END handle_Special_XMLCases;
4596
4597 --
4598 -- refresh Template Ref Counts
4599 --
4600 PROCEDURE refresh_Templ_Ref_Counts
4601 (p_template_xml_doc xmldom.DOMDocument,
4602 p_template_ui_def_id NUMBER,
4603 p_template_id NUMBER) IS
4604
4605 l_xml_node xmldom.DOMNode;
4606 l_child_nodes_tbl xmldom.DOMNodeList;
4607 l_extends_attribute VARCHAR2(2000);
4608 l_ref_tmpls_tbl number_tbl_type;
4609 l_ref_tmpl_seeded_flag varchar_tbl_type;
4610 l_ref_template_id NUMBER;
4611 l_seeded_flag CZ_UI_REF_TEMPLATES.ref_templ_seeded_flag%TYPE;
4612 l_template_id CZ_UI_REF_TEMPLATES.template_id%TYPE;
4613 l_length NUMBER;
4614
4615 BEGIN
4616
4617 l_child_nodes_tbl := xmldom.getElementsByTagName(p_template_xml_doc, '*');
4618 l_length := xmldom.getLength(l_child_nodes_tbl);
4619
4620 IF (l_length > 0) THEN
4621 FOR k IN 0..l_length-1
4622 LOOP
4623 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
4624 l_extends_attribute := get_Attribute_Value(l_xml_node, 'extends');
4625
4626 IF l_extends_attribute IS NOT NULL THEN
4627
4628
4629 BEGIN
4630 SELECT template_id, seeded_flag
4631 INTO l_ref_template_id, l_seeded_flag
4632 FROM CZ_UI_TEMPLATES
4633 WHERE ui_def_id=p_template_ui_def_id AND
4634 jrad_doc=l_extends_attribute AND
4635 deleted_flag=G_NO_FLAG;
4636
4637 IF l_ref_tmpls_tbl.EXISTS(l_ref_template_id) THEN
4638 l_ref_tmpls_tbl(l_ref_template_id) := l_ref_tmpls_tbl(l_ref_template_id) + 1;
4639 ELSE
4640 l_ref_tmpls_tbl(l_ref_template_id) := 1;
4641 END IF;
4642 l_ref_tmpl_seeded_flag(l_ref_template_id) := l_seeded_flag;
4643 EXCEPTION
4644 WHEN NO_DATA_FOUND THEN
4645 NULL;
4646 END;
4647
4648 END IF;
4649
4650 END LOOP;
4651 END IF;
4652
4653 FOR k IN(SELECT ref_template_id FROM CZ_UI_REF_TEMPLATES
4654 WHERE template_id=p_template_id AND
4655 template_ui_def_id=p_template_ui_def_id AND
4656 deleted_flag=G_NO_FLAG)
4657 LOOP
4658 IF NOT(l_ref_tmpls_tbl.EXISTS(k.ref_template_id)) THEN
4659 DELETE FROM CZ_UI_REF_TEMPLATES
4660 WHERE template_id=p_template_id AND
4661 template_ui_def_id=p_template_ui_def_id AND
4662 ref_template_id=k.ref_template_id;
4663 END IF;
4664 END LOOP;
4665
4666 l_template_id := l_ref_tmpls_tbl.FIRST;
4667 LOOP
4668 IF l_template_id IS NULL THEN
4669 EXIT;
4670 END IF;
4671
4672 UPDATE CZ_UI_REF_TEMPLATES
4673 SET ref_count = l_ref_tmpls_tbl(l_template_id)
4674 WHERE template_id=p_template_id AND
4675 template_ui_def_id=p_template_ui_def_id AND
4676 ref_template_id=l_template_id AND
4677 deleted_flag=G_NO_FLAG;
4678
4679 IF SQL%ROWCOUNT=0 THEN
4680 INSERT INTO CZ_UI_REF_TEMPLATES
4681 (
4682 TEMPLATE_ID
4683 ,REF_TEMPLATE_ID
4684 ,DELETED_FLAG
4685 ,TEMPLATE_UI_DEF_ID
4686 ,REF_TEMPLATE_UI_DEF_ID
4687 ,SEEDED_FLAG
4688 ,REF_TEMPL_SEEDED_FLAG
4689 ,REF_COUNT
4690 )
4691 VALUES
4692 (
4693 p_template_id
4694 ,l_template_id
4695 ,G_NO_FLAG
4696 ,p_template_ui_def_id
4697 ,p_template_ui_def_id
4698 ,G_NO_FLAG
4699 ,l_ref_tmpl_seeded_flag(l_template_id)
4700 ,l_ref_tmpls_tbl(l_template_id)
4701 );
4702 END IF;
4703
4704 l_template_id := l_ref_tmpls_tbl.NEXT(l_template_id);
4705 END LOOP;
4706
4707 END refresh_Templ_Ref_Counts;
4708
4709
4710 --
4711 -- initialize nodeView counters
4712 --
4713 PROCEDURE init_Page_View_Counters IS
4714
4715 l_view_counter NUMBER;
4716
4717 BEGIN
4718
4719 g_bomm_counter := 1;
4720 g_mandatory_comp_counter := 1;
4721
4722 g_connector_counter := 0;
4723 g_mandatory_ref_counter := 0;
4724 g_minmax_ref_counter := 0;
4725 g_optional_ref_counter := 0;
4726 g_of_feature_counter := 0;
4727 g_if_feature_counter := 0;
4728 g_df_feature_counter := 0;
4729 g_bf_feature_counter := 0;
4730 g_tf_feature_counter := 0;
4731 g_tot_feature_counter := 0;
4732 g_rsc_feature_counter := 0;
4733 g_itot_feature_counter := 0;
4734 g_irsc_feature_counter := 0;
4735 g_opt_counter := 0;
4736
4737 END init_Page_View_Counters;
4738
4739
4740 PROCEDURE init_Page_View_Counters(p_subtree_doc xmldom.DOMDocument) IS
4741
4742 l_node xmldom.DOMNode;
4743 l_nodeslist xmldom.DOMNodeList;
4744 l_empty_xml_node xmldom.DOMNode;
4745 l_length NUMBER;
4746 l_attribute_value VARCHAR2(32000);
4747 l_node_view VARCHAR2(255);
4748 l_id_attr_value VARCHAR2(255);
4749
4750 PROCEDURE set_View_Counter(p_node_view IN VARCHAR2) IS
4751 l_node_view_index NUMBER;
4752 l_underscore_pos NUMBER;
4753 l_prefix VARCHAR2(255);
4754 BEGIN
4755
4756 IF p_node_view IS NOT NULL THEN
4757
4758 l_underscore_pos := INSTR(p_node_view, '_');
4759 IF (l_underscore_pos > 1) THEN
4760 l_prefix := SUBSTR(p_node_view,1,l_underscore_pos);
4761 ELSE
4762 RETURN;
4763 END IF;
4764
4765 FOR i IN g_view_prefix_tbl.First..g_view_prefix_tbl.Last
4766 LOOP
4767
4768 IF l_prefix=g_view_prefix_tbl(i) THEN
4769
4770 l_node_view_index := TO_NUMBER(SUBSTR(p_node_view, l_underscore_pos+1));
4771
4772 IF g_view_prefix_tbl(i)='COMP_' THEN
4773 IF l_node_view_index > g_mandatory_comp_counter THEN
4774 g_mandatory_comp_counter := l_node_view_index;
4775 END IF;
4776
4777 ELSIF g_view_prefix_tbl(i)='SIM_' THEN
4778 IF l_node_view_index > g_optional_ref_counter THEN
4779 g_optional_ref_counter := l_node_view_index;
4780 END IF;
4781
4782 ELSIF g_view_prefix_tbl(i)='CS_' THEN
4783 IF l_node_view_index > g_minmax_ref_counter THEN
4784 g_minmax_ref_counter := l_node_view_index;
4785 END IF;
4786
4787 ELSIF g_view_prefix_tbl(i)='OF_' THEN
4788 IF l_node_view_index > g_of_feature_counter THEN
4789 g_of_feature_counter := l_node_view_index;
4790 END IF;
4791
4792 ELSIF g_view_prefix_tbl(i)='IF_' THEN
4793 IF l_node_view_index > g_if_feature_counter THEN
4794 g_if_feature_counter := l_node_view_index;
4795 END IF;
4796
4797 ELSIF g_view_prefix_tbl(i)='DF_' THEN
4798 IF l_node_view_index > g_df_feature_counter THEN
4799 g_df_feature_counter := l_node_view_index;
4800 END IF;
4801
4802 ELSIF g_view_prefix_tbl(i)='BF_' THEN
4803 IF l_node_view_index > g_bf_feature_counter THEN
4804 g_bf_feature_counter := l_node_view_index;
4805 END IF;
4806
4807 ELSIF g_view_prefix_tbl(i)='TF_' THEN
4808 IF l_node_view_index > g_tf_feature_counter THEN
4809 g_tf_feature_counter := l_node_view_index;
4810 END IF;
4811
4812 ELSIF g_view_prefix_tbl(i)='TOT_' THEN
4813 IF l_node_view_index > g_tot_feature_counter THEN
4814 g_tot_feature_counter := l_node_view_index;
4815 END IF;
4816
4817 ELSIF g_view_prefix_tbl(i)='RSC_' THEN
4818 IF l_node_view_index > g_rsc_feature_counter THEN
4819 g_rsc_feature_counter := l_node_view_index;
4820 END IF;
4821
4822 ELSIF g_view_prefix_tbl(i)='ITOT_' THEN
4823 IF l_node_view_index > g_itot_feature_counter THEN
4824 g_itot_feature_counter := l_node_view_index;
4825 END IF;
4826
4827 ELSIF g_view_prefix_tbl(i)='IRSC_' THEN
4828 IF l_node_view_index > g_irsc_feature_counter THEN
4829 g_irsc_feature_counter := l_node_view_index;
4830 END IF;
4831
4832
4833 ELSIF g_view_prefix_tbl(i)='REF_' THEN
4834 IF l_node_view_index > g_mandatory_ref_counter THEN
4835 g_mandatory_ref_counter := l_node_view_index;
4836 END IF;
4837
4838 ELSIF g_view_prefix_tbl(i)='CON_' THEN
4839 IF l_node_view_index > g_connector_counter THEN
4840 g_connector_counter := l_node_view_index;
4841 END IF;
4842
4843 ELSIF g_view_prefix_tbl(i)='BOMM_' THEN
4844 IF l_node_view_index > g_bomm_counter THEN
4845 g_bomm_counter := l_node_view_index;
4846 END IF;
4847
4848 ELSIF g_view_prefix_tbl(i)='OPT_' THEN
4849 IF l_node_view_index > g_opt_counter THEN
4850 g_opt_counter := l_node_view_index;
4851 END IF;
4852
4853 END IF;
4854 END IF;
4855 END LOOP;
4856
4857 END IF;
4858
4859 END set_View_Counter;
4860
4861 BEGIN
4862
4863 g_bomm_counter := 0;
4864 g_mandatory_comp_counter := 0;
4865
4866 g_connector_counter := 0;
4867 g_mandatory_ref_counter := 0;
4868 g_minmax_ref_counter := 0;
4869 g_optional_ref_counter := 0;
4870 g_of_feature_counter := 0;
4871 g_if_feature_counter := 0;
4872 g_df_feature_counter := 0;
4873 g_bf_feature_counter := 0;
4874 g_tf_feature_counter := 0;
4875 g_tot_feature_counter := 0;
4876 g_rsc_feature_counter := 0;
4877 g_itot_feature_counter := 0;
4878 g_irsc_feature_counter := 0;
4879 g_opt_counter := 0;
4880
4881 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
4882 l_length := xmldom.getLength(l_nodeslist);
4883
4884 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
4885
4886 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4887 l_node_view := get_User_Attribute(l_attribute_value, 'nodeView');
4888
4889 set_View_Counter(l_node_view);
4890
4891 FOR i IN 0 .. l_length - 1
4892 LOOP
4893 l_node := xmldom.item(l_nodeslist, i);
4894 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4895 l_node_view := get_User_Attribute(l_attribute_value, 'nodeView');
4896 set_View_Counter(l_node_view);
4897
4898 l_id_attr_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4899 IF l_id_attr_value IS NOT NULL THEN
4900 BEGIN
4901 g_dom_elements_tbl(TO_NUMBER(l_id_attr_value)) := l_node;
4902 EXCEPTION
4903 WHEN OTHERS THEN
4904 --
4905 -- if element_id is not a number it will not be cached
4906 --
4907 NULL;
4908 END;
4909 END IF;
4910 END LOOP;
4911
4912 END init_Page_View_Counters;
4913
4914 PROCEDURE resolve_view_names(p_xml_node IN xmldom.DOMNode,
4915 p_ui_page_id IN NUMBER,
4916 p_counter IN OUT NOCOPY NUMBER,
4917 p_element_ids_table IN OUT NOCOPY varchar2_tbl_type) IS
4918
4919 l_view_name VARCHAR2(255);
4920 l_children_view_name VARCHAR2(255);
4921
4922 l_user_attribute VARCHAR2(32000);
4923 l_user_attribute_value VARCHAR2(32000);
4924 l_ind NUMBER;
4925 l_child_nodes_tbl xmldom.DOMNodeList;
4926 l_length NUMBER;
4927 l_child_xml_node xmldom.DOMNode;
4928 l_element_id VARCHAR2(255);
4929
4930 BEGIN
4931
4932
4933 IF p_counter = -1 THEN
4934 SELECT COUNT(element_id) INTO p_counter
4935 FROM CZ_UI_PAGE_ELEMENTS
4936 WHERE ui_def_id=g_UI_Context.ui_def_id
4937 AND page_id=p_ui_page_id AND
4938 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
4939 END IF;
4940
4941 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4942 IF l_element_id IS NOT NULL THEN
4943 p_element_ids_table(l_element_id) := l_element_id;
4944 END IF;
4945
4946 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4947 IF l_user_attribute_value IS NOT NULL THEN
4948
4949 l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
4950
4951 IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
4952 l_ind := INSTR(l_view_name, '_');
4953 l_view_name := SUBSTR(l_view_name,1,l_ind-1);
4954 l_view_name := get_next_view_name(l_view_name);
4955
4956 set_User_Attribute(p_cz_attribute_name => 'nodeView',
4957 p_cz_attribute_value => l_view_name,
4958 px_xml_attribute_value => l_user_attribute_value);
4959
4960 l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
4961
4962 IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
4963
4964 l_children_view_name := l_view_name || '_children';
4965 DEBUG('asp: New children view name = ' || l_children_view_name);
4966
4967 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
4968 p_cz_attribute_value => l_children_view_name,
4969 px_xml_attribute_value => l_user_attribute_value);
4970 END IF;
4971
4972 set_Attribute(p_xml_node,
4973 G_USER_ATTRIBUTE3_NAME,
4974 l_user_attribute_value);
4975 END IF;
4976 END IF;
4977
4978 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
4979 l_length := xmldom.getLength(l_child_nodes_tbl);
4980
4981 FOR k IN 0 .. l_length - 1
4982 LOOP
4983 --
4984 -- get next child DOM node
4985 --
4986 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
4987
4988 resolve_view_names(p_xml_node => l_child_xml_node,
4989 p_ui_page_id => p_ui_page_id,
4990 p_counter => p_counter,
4991 p_element_ids_table => p_element_ids_table);
4992
4993 END LOOP;
4994
4995
4996 END resolve_view_names;
4997
4998
4999 --
5000 -- set Attributes for Template
5001 --
5002 PROCEDURE set_Template_Attributes(p_xml_root_node xmldom.DOMNode,
5003 p_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
5004 p_element_signature_id NUMBER DEFAULT NULL) IS
5005
5006 l_xml_root_element_node xmldom.DOMElement := xmldom.makeElement(p_xml_root_node);
5007 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
5008 l_ui_action_id NUMBER;
5009 l_drilldown_text_id NUMBER;
5010
5011 l_view_name VARCHAR2(255);
5012 l_picklist_view_name VARCHAR2(255);
5013 l_has_children VARCHAR2(1);
5014
5015 l_model_path VARCHAR2(32000);
5016 l_user_attribute VARCHAR2(32000);
5017
5018 BEGIN
5019
5020 --
5021 -- get Model node by persistent_node_id and project_id
5022 --
5023 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,
5024 g_UI_Context.devl_project_id);
5025
5026 --
5027 -- get a corresponding view name by detailed_type_id and
5028 -- also get variable has_children
5029 --
5030 IF p_ui_node.parent_element_id IS NULL THEN
5031 IF l_node.ps_node_type IN(258,259) THEN
5032 l_view_name := 'COMP_1';
5033 ELSE
5034 l_view_name := 'BOMM_1';
5035 l_picklist_view_name := l_view_name || '_children';
5036 END IF;
5037 ELSE
5038 l_view_name := get_View_Name(l_node, l_has_children);
5039 END IF;
5040
5041 --
5042 -- UI Page or CX associated with an
5043 -- instantiable component must have nodeView='COMP_...'
5044 --
5045 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE OR
5046 p_ui_node.parent_element_id IS NULL THEN
5047 l_view_name := REPLACE(l_view_name,'CS_','COMP_');
5048 END IF;
5049
5050 IF l_has_children = G_YES_FLAG THEN
5051 l_picklist_view_name := l_view_name || '_children';
5052 END IF;
5053
5054 IF g_ref_cx_paths_tbl.EXISTS(TO_NUMBER(p_ui_node.element_id)) THEN
5055 l_model_path := g_ref_cx_paths_tbl(TO_NUMBER(p_ui_node.element_id));
5056 ELSE
5057 l_model_path := get_Model_Path(p_ui_node);
5058 END IF;
5059
5060 --
5061 -- set JRAD id of element
5062 --
5063 set_Attribute(l_xml_root_element_node,
5064 G_ID_ATTRIBUTE,
5065 p_ui_node.element_id);
5066
5067 --
5068 -- attribute1 is always used only for model_path
5069 --
5070 set_Attribute(l_xml_root_element_node,
5071 G_USER_ATTRIBUTE1_NAME,
5072 'model_path='||l_model_path);
5073
5074 IF l_model_path='*' THEN
5075 set_Attribute(l_xml_root_element_node,
5076 G_USER_ATTRIBUTE2_NAME,
5077 '0');
5078 ELSE
5079 --
5080 -- set attribute2 to persistent_node_id :
5081 -- THIS ATTRIBUTE MUST BE SET ONLY BY UI GENERATION / UI REFRESH
5082 --
5083 set_Attribute(l_xml_root_element_node,
5084 G_USER_ATTRIBUTE2_NAME,
5085 TO_CHAR(p_ui_node.persistent_node_id));
5086 END IF;
5087
5088 --
5089 -- get value of "user:attribute3"
5090 --
5091 l_user_attribute := get_Attribute_Value(p_xml_root_node,
5092 G_USER_ATTRIBUTE3_NAME);
5093
5094 IF l_user_attribute IS NOT NULL THEN
5095
5096 IF l_view_name IS NOT NULL THEN
5097 set_User_Attribute(p_cz_attribute_name => 'nodeView',
5098 p_cz_attribute_value => l_view_name,
5099 px_xml_attribute_value => l_user_attribute);
5100 END IF;
5101 IF l_picklist_view_name IS NOT NULL THEN
5102 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
5103 p_cz_attribute_value => l_picklist_view_name,
5104 px_xml_attribute_value => l_user_attribute);
5105 END IF;
5106
5107 IF INSTR(l_user_attribute, 'actionId=')>0 THEN
5108 BEGIN
5109 l_ui_action_id := get_UI_Action_Id(p_ui_node);
5110 EXCEPTION
5111 WHEN OTHERS THEN
5112 NULL;
5113 END;
5114
5115 IF l_ui_action_id IS NOT NULL THEN
5116 set_User_Attribute(p_cz_attribute_name => 'actionId',
5117 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
5118 px_xml_attribute_value => l_user_attribute);
5119 END IF;
5120
5121 END IF;
5122 /* commented out according to request from 8/12/2004
5123 set_User_Attribute(p_cz_attribute_name => 'blockSize',
5124 p_cz_attribute_value => TO_CHAR(g_UI_Context.ROWS_PER_TABLE),
5125 px_xml_attribute_value => l_user_attribute);
5126 */
5127 END IF; -- end of setting G_USER_ATTRIBUTE3_NAME
5128
5129 IF p_ui_node.element_type IN(G_UI_PAGEDRILLDOWN_NODE_TYPE,G_UI_DRILLDOWN_NODE_TYPE) THEN
5130 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
5131
5132 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
5133 g_UI_Context.ui_def_id,
5134 p_ui_node.page_id, p_ui_node.element_id);
5135
5136 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
5137 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
5138 px_xml_attribute_value => l_user_attribute);
5139
5140 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
5141 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
5142 px_xml_attribute_value => l_user_attribute);
5143
5144 END IF;
5145 --
5146 -- set "source" for image associated with a drilldown
5147 --
5148 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
5149 set_Attribute(l_xml_root_element_node,
5150 'source',
5151 g_UI_Context.DRILLDOWN_IMAGE_URL);
5152 END IF;
5153 ELSIF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
5154 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
5155 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5156 px_xml_attribute_value => l_user_attribute);
5157
5158 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
5159 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5160 px_xml_attribute_value => l_user_attribute);
5161
5162 END IF;
5163
5164 set_Attribute(l_xml_root_element_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
5165
5166 --
5167 -- get value of "user:attribute4" which is used by Oracle Configurator Developer
5168 --
5169 l_user_attribute := get_Attribute_Value(p_xml_root_node,
5170 G_USER_ATTRIBUTE4_NAME);
5171 IF l_user_attribute IS NOT NULL THEN
5172
5173 set_User_Attribute(p_cz_attribute_name => 'name',
5174 p_cz_attribute_value => p_ui_node.name,
5175 px_xml_attribute_value => l_user_attribute);
5176
5177 IF p_element_signature_id IS NOT NULL THEN
5178 set_User_Attribute(p_cz_attribute_name => 'elementType',
5179 p_cz_attribute_value => TO_CHAR(p_element_signature_id),
5180 px_xml_attribute_value => l_user_attribute);
5181 ELSE
5182 set_User_Attribute(p_cz_attribute_name => 'elementType',
5183 p_cz_attribute_value => TO_CHAR(p_ui_node.element_signature_id),
5184 px_xml_attribute_value => l_user_attribute);
5185 END IF;
5186
5187 END IF;
5188
5189 set_Attribute(l_xml_root_element_node,
5190 G_USER_ATTRIBUTE4_NAME,
5191 l_user_attribute);
5192
5193 set_Attribute(l_xml_root_element_node,
5194 G_USER_ATTRIBUTE5_NAME,
5195 'GENERATED_BY_UI_GEN');
5196
5197 END set_Template_Attributes;
5198
5199 FUNCTION get_Element_XML_Path(p_xml_doc xmldom.DOMDocument,p_element_id VARCHAR2) RETURN VARCHAR2 IS
5200
5201 l_xml_node xmldom.DOMNode;
5202 l_element_path VARCHAR2(32000);
5203
5204 PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5205
5206 l_parent_node xmldom.DOMNode;
5207 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5208 l_user_attribute4_value VARCHAR2(32000);
5209 l_node_name VARCHAR2(32000);
5210
5211 BEGIN
5212
5213 IF xmldom.isNull(p_xml_node) THEN
5214 RETURN;
5215 END IF;
5216 l_parent_node := xmldom.getParentNode(p_xml_node);
5217 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5218
5219 IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5220
5221 l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5222 IF l_user_attribute4_value IS NOT NULL THEN
5223 l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5224
5225 IF l_element_path IS NOT NULL THEN
5226 l_element_path := l_node_name||'.'||l_element_path;
5227 ELSE
5228 l_element_path := l_node_name;
5229 END IF;
5230
5231 END IF;
5232 END IF;
5233
5234 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5235 IF NOT(xmldom.IsNull(l_parent_node)) THEN
5236 construct_XML_Path(l_parent_node);
5237 END IF;
5238 END IF;
5239
5240 END construct_XML_Path;
5241
5242 BEGIN
5243
5244 l_xml_node := find_XML_Node_By_Attribute(p_xml_doc, G_ID_ATTRIBUTE, p_element_id);
5245
5246 IF NOT(xmldom.IsNull(l_xml_node)) THEN
5247 construct_XML_Path(l_xml_node);
5248 ELSE
5249 RETURN NULL;
5250 END IF;
5251
5252 RETURN l_element_path;
5253
5254 END get_Element_XML_Path;
5255
5256 FUNCTION get_Element_XML_Path(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
5257
5258 l_element_path VARCHAR2(32000);
5259
5260 PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5261
5262 l_parent_node xmldom.DOMNode;
5263 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5264 l_user_attribute4_value VARCHAR2(32000);
5265 l_node_name VARCHAR2(32000);
5266
5267 BEGIN
5268
5269 IF xmldom.isNull(p_xml_node) THEN
5270 RETURN;
5271 END IF;
5272 l_parent_node := xmldom.getParentNode(p_xml_node);
5273 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5274
5275 IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5276
5277 l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5278 IF l_user_attribute4_value IS NOT NULL THEN
5279 l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5280
5281 IF l_element_path IS NOT NULL THEN
5282 l_element_path := l_node_name||'.'||l_element_path;
5283 ELSE
5284 l_element_path := l_node_name;
5285 END IF;
5286
5287 END IF;
5288 END IF;
5289
5290 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5291 IF NOT(xmldom.IsNull(l_parent_node)) THEN
5292 construct_XML_Path(l_parent_node);
5293 END IF;
5294 END IF;
5295
5296 END construct_XML_Path;
5297
5298 BEGIN
5299
5300 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5301 construct_XML_Path(p_xml_node);
5302 ELSE
5303 RETURN NULL;
5304 END IF;
5305
5306 RETURN l_element_path;
5307 EXCEPTION
5308 WHEN OTHERS THEN
5309 DEBUG(SQLERRM);
5310 RETURN NULL;
5311 END get_Element_XML_Path;
5312
5313 --
5314 -- return path for a given UI element
5315 --
5316 FUNCTION get_Element_XML_Path(p_ui_def_id IN NUMBER,
5317 p_page_id IN NUMBER,
5318 p_element_id IN VARCHAR2,
5319 p_is_parser_open IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
5320
5321 l_xmldoc xmldom.DOMDocument;
5322 l_page_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
5323 l_ui_name CZ_UI_DEFS.name%TYPE;
5324 l_page_name CZ_UI_PAGES.name%TYPE;
5325 l_element_path VARCHAR2(32000);
5326
5327 BEGIN
5328
5329 IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5330 Open_Parser();
5331 END IF;
5332
5333 SELECT jrad_doc,name INTO l_page_jrad_doc,l_page_name FROM CZ_UI_PAGES
5334 WHERE ui_def_id=p_ui_def_id AND page_id=p_page_id;
5335
5336 --
5337 -- create UI Template in JRAD repository
5338 --
5339 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_page_jrad_doc);
5340
5341 IF xmldom.isNull(l_xmldoc) THEN
5342 -- UI page is already deleted
5343 RETURN NULL;
5344 END IF;
5345
5346 l_element_path := get_Element_XML_Path(l_xmldoc,p_element_id);
5347
5348 IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5349 Close_Parser();
5350 END IF;
5351
5352 SELECT name INTO l_ui_name FROM CZ_UI_DEFS
5353 WHERE ui_def_id=p_ui_def_id;
5354
5355 IF l_element_path IS NULL OR l_element_path='.' THEN
5356 l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name;
5357 ELSE
5358 l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name||'.'||l_element_path;
5359 END IF;
5360
5361 RETURN l_element_path;
5362
5363 END get_Element_XML_Path;
5364
5365
5366 PROCEDURE copy_UI_Rule
5367 (
5368 p_rule_id IN NUMBER,
5369 x_rule_id OUT NOCOPY NUMBER,
5370 p_ui_def_id IN NUMBER,
5371 p_ui_page_id IN NUMBER,
5372 p_ui_element_id IN VARCHAR2,
5373 p_source_ui_def_id IN NUMBER,
5374 p_new_component_id IN NUMBER DEFAULT NULL, -- passed when copied rule needs to be associated to a different PS Node
5375 p_new_expl_node_id IN NUMBER DEFAULT NULL, -- passed when copied rule needs to be associated to a different PS Node
5376 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node
5377 ) IS
5378
5379 l_return_status VARCHAR2(255);
5380 l_msg_count NUMBER;
5381 l_msg_data VARCHAR2(4000);
5382 l_run_id NUMBER;
5383 l_element_path VARCHAR2(4000);
5384 l_source_ui_def_id NUMBER;
5385 l_failure_flag NUMBER;
5386 l_cp_rule_run_id NUMBER;
5387 l_copied_rule BOOLEAN;
5388
5389 BEGIN
5390 IF p_rule_id IS NOT NULL THEN
5391
5392 IF p_source_ui_def_id IS NULL THEN
5393 l_source_ui_def_id := 0;
5394 ELSE
5395 l_source_ui_def_id := p_source_ui_def_id;
5396 END IF;
5397 FOR k IN(SELECT rule_id,rule_type,seeded_flag,devl_project_id FROM CZ_RULES
5398 WHERE persistent_rule_id = p_rule_id AND DECODE(NVL(ui_def_id,0),0,l_source_ui_def_id,ui_def_id)=l_source_ui_def_id
5399 AND deleted_flag=G_NO_FLAG)
5400 LOOP
5401 l_run_id := 0; l_cp_rule_run_id := 0;
5402 l_copied_rule := FALSE;
5403
5404 IF NVL(k.seeded_flag,G_NO_FLAG)=G_NO_FLAG THEN
5405 CZ_DEVELOPER_UTILS_PVT.copy_Rule
5406 (p_rule_id => k.rule_id,
5407 p_init_msg_list => FND_API.G_FALSE,
5408 p_ui_def_id => p_ui_def_id,
5409 p_ui_page_id => p_ui_page_id,
5410 p_ui_page_element_id => p_ui_element_id,
5411 x_out_new_rule_id => x_rule_id,
5412 x_run_id => l_cp_rule_run_id,
5413 x_return_status => l_return_status,
5414 x_msg_count => l_msg_count,
5415 x_msg_data => l_msg_data);
5416
5417 IF p_new_component_id IS NOT NULL THEN
5418
5419 DEBUG('Associating copied rule to a different PS Node');
5420 -- This rule is being copied and associated to a different component_id
5421 UPDATE CZ_RULES
5422 SET component_id = p_new_component_id,
5423 model_ref_expl_id = p_new_expl_node_id
5424 WHERE rule_id = x_rule_id;
5425 l_copied_rule := TRUE;
5426 END IF;
5427 ELSE
5428 x_rule_id := k.rule_id;
5429 END IF;
5430
5431 l_failure_flag := 0;
5432 IF l_cp_rule_run_id > 0 THEN
5433 SELECT COUNT(*) INTO l_failure_flag FROM CZ_DB_LOGS WHERE run_id=l_cp_rule_run_id;
5434 END IF;
5435
5436 IF l_failure_flag=0 AND NVL(k.devl_project_id,0) NOT IN(0,1) AND l_copied_rule THEN
5437 CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => x_rule_id,
5438 p_name => NULL,
5439 x_run_id => l_run_id);
5440 END IF;
5441
5442 IF l_run_id > 0 THEN
5443 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5444 l_element_path := get_Element_XML_Path(p_xml_node => p_xml_node);
5445 ELSE -- UI rule on UI page level
5446 SELECT name INTO l_element_path FROM CZ_UI_PAGES
5447 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
5448 END IF;
5449
5450 IF k.rule_type=33 THEN
5451 add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
5452 p_token_name => 'UIELEMENTPATH',
5453 p_token_value => l_element_path,
5454 p_fatal_error => TRUE);
5455 ELSIF k.rule_type=34 THEN
5456 add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
5457 p_token_name => 'UIELEMENTPATH',
5458 p_token_value => l_element_path,
5459 p_fatal_error => TRUE);
5460 ELSE
5461 NULL;
5462 END IF;
5463
5464 END IF;
5465 END LOOP;
5466 ELSE
5467 x_rule_id := NULL;
5468 END IF;
5469 END copy_UI_Rule;
5470
5471 --vsingava IM-ER
5472 FUNCTION get_Runtime_Relative_Path
5473 (
5474 p_model_id NUMBER,
5475 p_base_persistent_node_Id NUMBER,
5476 p_base_expl_id NUMBER,
5477 p_persistent_node_id NUMBER,
5478 p_ui_node_expl_id NUMBER DEFAULT NULL
5479 ) RETURN VARCHAR2 IS
5480
5481 l_model_path VARCHAR2(32000);
5482 l_pagebase_expl_id NUMBER;
5483 l_expl_id NUMBER;
5484 l_expl_node_id NUMBER;
5485 l_ps_node_id NUMBER;
5486 l_ps_node_type NUMBER;
5487 l_component_id NUMBER;
5488 l_model_ref_expl_id NUMBER;
5489 l_pagebase_persistent_node_id NUMBER;
5490
5491 BEGIN
5492
5493
5494 BEGIN
5495 --
5496 -- does the current node with persistent_node_id=p_persistent_node_id
5497 -- belongs to model with devl_project_id=p_model_id ?
5498 --
5499 SELECT ps_node_id,ps_node_type,component_id
5500 INTO l_ps_node_id, l_ps_node_type, l_component_id FROM CZ_PS_NODES
5501 WHERE devl_project_id=p_model_id AND
5502 persistent_node_id=p_persistent_node_id;
5503
5504 EXCEPTION
5505 WHEN NO_DATA_FOUND THEN
5506 --
5507 -- the current node with persistent_node_id=p_persistent_node_id
5508 -- does not belong to model with devl_project_id=p_model_id
5509 -- and belongs to some referenced model
5510 --
5511 NULL;
5512 END;
5513
5514
5515 --
5516 -- AMN of UI node belongs to current model
5517 --
5518 IF l_ps_node_id IS NOT NULL THEN
5519 l_expl_id := get_Expl_Id(p_model_id => p_model_id,
5520 p_ps_node_id => l_ps_node_id,
5521 p_component_id => l_component_id,
5522 p_ps_node_type => l_ps_node_type);
5523
5524
5525 l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => p_base_expl_id,
5526 p_base_pers_id => p_base_persistent_node_Id,
5527 p_node_expl_id => l_expl_id,
5528 p_node_pers_id => p_persistent_node_id);
5529
5530 IF l_model_path IS NULL THEN
5531 l_model_path := '.';
5532 END IF;
5533
5534 RETURN l_model_path;
5535 END IF;
5536
5537
5538 -- validation of expl_id
5539 SELECT model_ref_expl_id INTO l_model_ref_expl_id
5540 FROM CZ_MODEL_REF_EXPLS
5541 WHERE model_ref_expl_id=p_ui_node_expl_id;
5542
5543 --
5544 -- AMN of UI node belongs to referenced model
5545 --
5546
5547
5548 FOR i IN(SELECT model_ref_expl_id,parent_expl_node_id,ps_node_type,
5549 component_id,referring_node_id
5550 FROM CZ_MODEL_REF_EXPLS
5551 START WITH model_ref_expl_id=p_ui_node_expl_id
5552 CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND
5553 deleted_flag='0')
5554 LOOP
5555 -- go up until the nearest reference or the root
5556 IF (i.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR i.parent_expl_node_id IS NULL) THEN
5557
5558
5559 -- get ps node data for AMN of UI node
5560 SELECT ps_node_id,ps_node_type,component_id
5561 INTO l_ps_node_id, l_ps_node_type,l_component_id
5562 FROM CZ_PS_NODES
5563 WHERE devl_project_id=i.component_id AND
5564 persistent_node_id=p_persistent_node_id AND
5565 deleted_flag=G_NO_FLAG;
5566
5567 -- If the UI AMN found in the referenced model is not a reference or a connector or we are dealing with the
5568 -- reference node itself (can the second part of this condition ever be true)
5569 IF (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR p_ui_node_expl_id=i.model_ref_expl_id) THEN
5570
5571
5572 SELECT model_ref_expl_id INTO l_expl_id FROM
5573 (SELECT model_ref_expl_id,referring_node_id,component_id FROM CZ_MODEL_REF_EXPLS
5574 START WITH model_ref_expl_id=i.model_ref_expl_id
5575 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND deleted_flag='0') a
5576 WHERE (l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.referring_node_id=l_ps_node_id) OR
5577 (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.component_id=l_component_id);
5578
5579
5580
5581 l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => p_base_expl_id,
5582 p_base_pers_id => p_base_persistent_node_id,
5583 p_node_expl_id => l_expl_id,
5584 p_node_pers_id => p_persistent_node_id);
5585
5586
5587 IF l_model_path IS NULL THEN
5588 l_model_path := '.';
5589 END IF;
5590
5591 RETURN l_model_path;
5592 END IF;
5593
5594 END IF;
5595 END LOOP;
5596
5597 END get_Runtime_Relative_Path;
5598
5599
5600 FUNCTION get_Runtime_Relative_Path
5601 (
5602 p_model_id NUMBER,
5603 p_persistent_node_id NUMBER,
5604 p_page_id NUMBER,
5605 p_ui_node_expl_id NUMBER DEFAULT NULL
5606 ) RETURN VARCHAR2 IS
5607
5608 l_model_path VARCHAR2(32000);
5609 l_pagebase_expl_id NUMBER;
5610 l_expl_id NUMBER;
5611 l_expl_node_id NUMBER;
5612 l_ps_node_id NUMBER;
5613 l_ps_node_type NUMBER;
5614 l_component_id NUMBER;
5615 l_model_ref_expl_id NUMBER;
5616 l_pagebase_persistent_node_id NUMBER;
5617
5618 BEGIN
5619
5620 SELECT persistent_node_id,pagebase_expl_node_id
5621 INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
5622 FROM CZ_UI_PAGES
5623 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
5624
5625 RETURN get_Runtime_Relative_Path(p_model_id, l_pagebase_persistent_node_id, l_pagebase_expl_id, p_persistent_node_id, p_ui_node_expl_id);
5626
5627 END;
5628
5629 PROCEDURE handle_User_Attributes
5630 (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5631 p_source_ui_def_id IN NUMBER,
5632 p_source_ui_page_id IN NUMBER,
5633 p_target_ui_def_id IN NUMBER,
5634 p_target_ui_page_id IN NUMBER,
5635 p_new_element_id IN VARCHAR2,
5636 p_il_persistent_node_id IN NUMBER DEFAULT NULL, -- AMN of the enclosing instance list
5637 p_il_expl_node_id IN NUMBER DEFAULT NULL, -- AMN of the enclosing instance list
5638 p_amn_persistent_node_id IN NUMBER DEFAULT NULL, -- AMN of the node (specified or inherited)
5639 p_amn_expl_node_id IN NUMBER DEFAULT NULL, -- AMN of the node (specified or inherited)
5640 p_source_template_id IN NUMBER DEFAULT NULL,
5641 p_target_template_id IN NUMBER DEFAULT NULL,
5642 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5643
5644 l_cached_elems_tbl number_tbl_type;
5645 l_cached_source_elems_tbl number_tbl_type;
5646 l_counter NUMBER := 0;
5647
5648 l_id NUMBER;
5649 l_new_action_id NUMBER;
5650 l_new_rule_id NUMBER;
5651 l_persistent_rule_id NUMBER;
5652 l_new_intl_text_id NUMBER;
5653 l_ui_def_node CZ_UI_DEFS%ROWTYPE;
5654 l_prev_ui_context CZ_UI_DEFS%ROWTYPE;
5655 l_new_target_node_path CZ_UI_ACTIONS.target_node_path%TYPE;
5656 l_base_persistent_node_id NUMBER;
5657 l_base_expl_node_id NUMBER;
5658 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
5659 l_component_id NUMBER;
5660 l_expl_node_id NUMBER;
5661 l_persistent_intl_text_id NUMBER;
5662 l_persistent_intl_text_id_tmp NUMBER;
5663
5664 BEGIN
5665
5666 IF px_user_attribute_value IS NULL THEN
5667 RETURN;
5668 END IF;
5669
5670
5671 l_ui_def_node := get_Local_UI_Context(p_target_ui_def_id);
5672 l_prev_ui_context := g_UI_Context;
5673 g_UI_Context := l_ui_def_node;
5674
5675 BEGIN
5676 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5677 EXCEPTION
5678 WHEN OTHERS THEN
5679 l_id := NULL;
5680 END;
5681
5682 IF l_id IS NOT NULL THEN
5683
5684 FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5685 WHERE ui_def_id=p_source_ui_def_id AND
5686 ui_action_id=l_id AND
5687 NVL(source_page_id,0)=NVL(p_source_ui_page_id,0)
5688 AND seeded_flag=G_NO_FLAG)
5689 LOOP
5690
5691 l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5692
5693 IF i.target_persistent_node_id IS NOT NULL THEN
5694 -- If the IL AMN is passed in, then use that else use the AMN on the page. IL AMN will be passed
5695 -- when the caller needs the paths in actions to start from a node different
5696 -- from the page base. This is needed in elements inside and Instance List Region
5697 IF p_il_persistent_node_id IS NOT NULL THEN
5698
5699 l_base_persistent_node_id := p_il_persistent_node_id;
5700 l_base_expl_node_id := p_il_expl_node_id;
5701
5702 ELSE
5703 -- base AMN is not passed, so continue using the AMN of the page as earlier
5704 SELECT persistent_node_id, pagebase_expl_node_id
5705 INTO l_base_persistent_node_id, l_base_expl_node_id
5706 FROM CZ_UI_PAGES
5707 WHERE ui_def_Id = p_target_ui_def_id
5708 AND page_Id = p_target_ui_page_id;
5709 END IF;
5710
5711 l_new_target_node_path := get_Runtime_Relative_Path(p_model_id => l_ui_def_node.devl_project_id,
5712 p_base_persistent_node_Id => l_base_persistent_node_id,
5713 p_base_expl_id => l_base_expl_node_id,
5714 p_persistent_node_id => i.target_persistent_node_id);
5715 -- This does not seem right. We should pass a value for expl Id here
5716 ELSE
5717 l_new_target_node_path := NULL;
5718 END IF;
5719
5720 INSERT INTO CZ_UI_ACTIONS
5721 (
5722 UI_ACTION_ID
5723 ,UI_DEF_ID
5724 ,SOURCE_PAGE_ID
5725 ,CONTEXT_COMPONENT_ID
5726 ,ELEMENT_ID
5727 ,RENDER_CONDITION_ID
5728 ,UI_ACTION_TYPE
5729 ,TARGET_UI_DEF_ID
5730 ,TARGET_PERSISTENT_NODE_ID
5731 ,TARGET_NODE_PATH
5732 ,TARGET_PAGE_SET_ID
5733 ,TARGET_PAGE_ID
5734 ,TARGET_URL
5735 ,FRAME_NAME
5736 ,TARGET_ANCHOR
5737 ,DELETED_FLAG
5738 ,SEEDED_FLAG
5739 ,CX_COMMAND_NAME
5740 ,WINDOW_PARAMETERS
5741 ,TARGET_WINDOW_TYPE
5742 ,TARGET_WINDOW_NAME
5743 ,TARGET_EXPL_NODE_ID
5744 ,URL_PROPERTY_ID
5745 ,PROC_PAGE_TEMPL_UI_DEF_ID
5746 ,PAGE_TITLE_TEXT_ID
5747 ,MAIN_MESSAGE_TEXT_ID
5748 ,PROCESSING_CAPTION_TEXT_ID
5749 ,PROCESSING_PAGE_TEMPL_ID
5750 --Processing page ER 9656558
5751 ,PROCESSING_PAGE_ENABLED_FLAG
5752 )
5753 VALUES(
5754 l_new_action_id
5755 ,p_target_ui_def_id
5756 ,p_target_ui_page_id
5757 ,i.CONTEXT_COMPONENT_ID
5758 ,p_new_element_id
5759 ,i.RENDER_CONDITION_ID
5760 ,i.UI_ACTION_TYPE
5761 ,i.TARGET_UI_DEF_ID
5762 ,i.TARGET_PERSISTENT_NODE_ID
5763 ,l_new_target_node_path
5764 ,i.TARGET_PAGE_SET_ID
5765 ,i.TARGET_PAGE_ID
5766 ,i.TARGET_URL
5767 ,i.FRAME_NAME
5768 ,i.TARGET_ANCHOR
5769 ,i.DELETED_FLAG
5770 ,'0'
5771 ,i.CX_COMMAND_NAME
5772 ,i.WINDOW_PARAMETERS
5773 ,i.TARGET_WINDOW_TYPE
5774 ,i.TARGET_WINDOW_NAME
5775 ,i.TARGET_EXPL_NODE_ID
5776 ,i.URL_PROPERTY_ID
5777 ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5778 ,i.PAGE_TITLE_TEXT_ID
5779 ,i.MAIN_MESSAGE_TEXT_ID
5780 ,i.PROCESSING_CAPTION_TEXT_ID
5781 ,i.PROCESSING_PAGE_TEMPL_ID
5782 ,i.PROCESSING_PAGE_ENABLED_FLAG
5783 );
5784
5785 set_User_Attribute(p_cz_attribute_name => 'actionId',
5786 p_cz_attribute_value => TO_CHAR(l_new_action_id),
5787 px_xml_attribute_value => px_user_attribute_value);
5788
5789 IF p_source_template_id IS NOT NULL THEN
5790 l_counter := l_counter + 1;
5791 l_cached_elems_tbl(l_counter) := l_new_action_id;
5792 l_cached_source_elems_tbl(l_counter) := l_id;
5793 END IF;
5794
5795 END LOOP;
5796
5797 -- set global UI context to its value before this procedure call
5798 g_UI_Context := l_prev_ui_context;
5799 END IF;
5800 l_component_id := NULL;
5801 l_expl_node_id := NULL;
5802
5803 FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
5804 LOOP
5805 BEGIN
5806 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5807 EXCEPTION
5808 WHEN OTHERS THEN
5809 l_id := NULL;
5810 END;
5811 IF l_id IS NOT NULL THEN
5812
5813 IF p_il_persistent_node_id IS NOT NULL THEN
5814 -- IL AMN passed in is not NULL which means that this element is part of an Instance List
5815 -- Region. We need to set the Component Id as the AMN of the UI element itself
5816 IF p_amn_persistent_node_id IS NOT NULL THEN
5817 -- UI Conditions for elements inside Instance List regions are associated to the AMN of the element
5818 -- as opposed to the Page base like in other case. Since this node is under an Instance List, we need
5819 -- to update the rules component_id to be the AMN's ps_node_id
5820 l_model_node := getNodeByPersistentAndExplId(p_amn_persistent_node_id, p_amn_expl_node_id);
5821 l_component_id := l_model_node.ps_node_id;
5822 l_expl_node_id := p_amn_expl_node_id;
5823 END IF;
5824 END IF;
5825 copy_UI_Rule(l_id,
5826 l_new_rule_id,
5827 p_target_ui_def_id,
5828 p_target_ui_page_id,
5829 p_new_element_id,
5830 p_source_ui_def_id,
5831 l_component_id,
5832 l_expl_node_id,
5833 p_xml_node => p_xml_node);
5834
5835 SELECT persistent_rule_id INTO l_persistent_rule_id
5836 FROM cz_rules
5837 WHERE rule_id = l_new_rule_id;
5838
5839
5840 IF p_source_template_id IS NOT NULL THEN
5841 l_counter := l_counter + 1;
5842 l_cached_elems_tbl(l_counter) := l_new_rule_id;
5843 l_cached_source_elems_tbl(l_counter) := l_id;
5844 END IF;
5845
5846 set_User_Attribute(p_cz_attribute_name => g_condition_attr_tbl(i),
5847 p_cz_attribute_value => TO_CHAR(l_persistent_rule_id),
5848 px_xml_attribute_value => px_user_attribute_value);
5849
5850 END IF;
5851 END LOOP;
5852
5853 FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
5854 LOOP
5855 BEGIN
5856 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5857 EXCEPTION
5858 WHEN OTHERS THEN
5859 l_id := NULL;
5860 END;
5861
5862 IF l_id IS NOT NULL THEN
5863
5864 l_new_intl_text_id := NULL;
5865 l_persistent_intl_text_id := NULL;
5866
5867 FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5868 WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5869 AND deleted_flag=G_NO_FLAG)
5870 LOOP
5871 l_persistent_intl_text_id_tmp := null;
5872 IF l_new_intl_text_id IS NULL THEN
5873 l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5874 END IF;
5875 INSERT INTO CZ_LOCALIZED_TEXTS
5876 (
5877 LOCALE_ID
5878 ,LOCALIZED_STR
5879 ,INTL_TEXT_ID
5880 ,DELETED_FLAG
5881 ,EFF_FROM
5882 ,EFF_TO
5883 ,SECURITY_MASK
5884 ,EFF_MASK
5885 ,CHECKOUT_USER
5886 ,ORIG_SYS_REF
5887 ,LANGUAGE
5888 ,SOURCE_LANG
5889 ,UI_DEF_ID
5890 ,MODEL_ID
5891 ,SEEDED_FLAG
5892 ,UI_PAGE_ID
5893 ,UI_PAGE_ELEMENT_ID
5894 )
5895 VALUES(
5896 k.LOCALE_ID
5897 ,k.LOCALIZED_STR
5898 ,l_new_intl_text_id
5899 ,k.DELETED_FLAG
5900 ,k.EFF_FROM
5901 ,k.EFF_TO
5902 ,k.SECURITY_MASK
5903 ,k.EFF_MASK
5904 ,k.CHECKOUT_USER
5905 ,k.ORIG_SYS_REF
5906 ,k.LANGUAGE
5907 ,k.SOURCE_LANG
5908 ,p_target_ui_def_id
5909 ,l_ui_def_node.devl_project_id
5910 ,'0'
5911 ,p_target_ui_page_id
5912 ,p_new_element_id
5913 ) RETURNING PERSISTENT_INTL_TEXT_ID INTO l_persistent_intl_text_id_tmp;
5914
5915 IF (k.source_lang = k.language) THEN
5916 l_persistent_intl_text_id := l_persistent_intl_text_id_tmp;
5917 END IF;
5918 END LOOP;
5919
5920 IF l_new_intl_text_id IS NOT NULL THEN
5921 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5922 p_cz_attribute_value => TO_CHAR(l_persistent_intl_text_id),
5923 px_xml_attribute_value => px_user_attribute_value);
5924
5925 IF p_source_template_id IS NOT NULL THEN
5926 l_counter := l_counter + 1;
5927 l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5928 l_cached_source_elems_tbl(l_counter) := l_id;
5929 END IF;
5930 END IF;
5931 ELSE -- l_id is NULL
5932
5933 BEGIN
5934 l_id := g_cx_names_tbl(TO_NUMBER(p_new_element_id));
5935 EXCEPTION
5936 WHEN OTHERS THEN
5937 NULL;
5938 END;
5939
5940 IF l_id IS NOT NULL THEN
5941 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5942 p_cz_attribute_value => TO_CHAR(l_id),
5943 px_xml_attribute_value => px_user_attribute_value);
5944
5945 ELSE
5946 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5947 p_cz_attribute_value => TO_CHAR(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID),
5948 px_xml_attribute_value => px_user_attribute_value);
5949 END IF;
5950
5951 END IF;
5952 END LOOP;
5953
5954 IF l_cached_elems_tbl.COUNT > 0 THEN
5955 FOR i IN l_cached_elems_tbl.First..l_cached_elems_tbl.Last
5956 LOOP
5957
5958 INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5959 (
5960 TEMPLATE_ID
5961 ,UI_DEF_ID
5962 ,ELEMENT_TYPE
5963 ,ELEMENT_ID
5964 ,PERSISTENT_ELEMENT_ID
5965 ,DELETED_FLAG
5966 ,SEEDED_FLAG
5967 )
5968 SELECT
5969 p_target_template_id
5970 ,p_target_ui_def_id
5971 ,ELEMENT_TYPE
5972 ,l_cached_elems_tbl(i)
5973 ,l_cached_elems_tbl(i)
5974 ,G_NO_FLAG
5975 ,G_NO_FLAG
5976 FROM CZ_UI_TEMPLATE_ELEMENTS
5977 WHERE template_id=p_source_template_id AND
5978 ui_def_id=p_source_ui_def_id AND
5979 element_id=l_cached_source_elems_tbl(i) AND
5980 deleted_flag=G_NO_FLAG;
5981 END LOOP;
5982 END IF;
5983
5984 END handle_User_Attributes;
5985
5986 --
5987 -- handle user attributes in UI template
5988 --
5989 PROCEDURE handle_Template_Attributes
5990 (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5991 p_new_element_id IN VARCHAR2,
5992 p_source_ui_def_id IN NUMBER,
5993 p_source_template_id IN NUMBER,
5994 p_target_ui_def_id IN NUMBER,
5995 p_target_template_id IN NUMBER,
5996 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5997
5998 l_cached_elems_tbl number_tbl_type;
5999 l_cached_source_elems_tbl number_tbl_type;
6000 l_counter NUMBER := 0;
6001
6002 l_id NUMBER;
6003 l_new_action_id NUMBER;
6004 l_new_rule_id NUMBER;
6005 l_persistent_rule_id NUMBER;
6006 l_new_intl_text_id NUMBER;
6007 l_persistent_intl_text_id NUMBER;
6008 l_persistent_intl_text_id_tmp NUMBER;
6009
6010 BEGIN
6011
6012 IF px_user_attribute_value IS NULL THEN
6013 RETURN;
6014 END IF;
6015
6016 BEGIN
6017 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
6018 EXCEPTION
6019 WHEN OTHERS THEN
6020 l_id := NULL;
6021 END;
6022
6023 IF l_id IS NOT NULL THEN
6024
6025 FOR i IN(SELECT * FROM CZ_UI_ACTIONS
6026 WHERE ui_action_id=l_id AND
6027 ui_def_id=p_source_ui_def_id AND
6028 source_page_id=0 AND
6029 seeded_flag=G_NO_FLAG)
6030 LOOP
6031
6032 l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
6033
6034 INSERT INTO CZ_UI_ACTIONS
6035 (
6036 UI_ACTION_ID
6037 ,UI_DEF_ID
6038 ,SOURCE_PAGE_ID
6039 ,CONTEXT_COMPONENT_ID
6040 ,ELEMENT_ID
6041 ,RENDER_CONDITION_ID
6042 ,UI_ACTION_TYPE
6043 ,TARGET_UI_DEF_ID
6044 ,TARGET_PERSISTENT_NODE_ID
6045 ,TARGET_NODE_PATH
6046 ,TARGET_PAGE_SET_ID
6047 ,TARGET_PAGE_ID
6048 ,TARGET_URL
6049 ,FRAME_NAME
6050 ,TARGET_ANCHOR
6051 ,DELETED_FLAG
6052 ,SEEDED_FLAG
6053 ,CX_COMMAND_NAME
6054 ,WINDOW_PARAMETERS
6055 ,TARGET_WINDOW_TYPE
6056 ,TARGET_WINDOW_NAME
6057 ,TARGET_EXPL_NODE_ID
6058 ,URL_PROPERTY_ID
6059 ,PROC_PAGE_TEMPL_UI_DEF_ID
6060 ,PAGE_TITLE_TEXT_ID
6061 ,MAIN_MESSAGE_TEXT_ID
6062 ,PROCESSING_CAPTION_TEXT_ID
6063 ,PROCESSING_PAGE_TEMPL_ID
6064 --Processing page ER 9656558
6065 ,PROCESSING_PAGE_ENABLED_FLAG
6066 )
6067 VALUES(
6068 l_new_action_id
6069 ,p_target_ui_def_id
6070 ,0
6071 ,i.CONTEXT_COMPONENT_ID
6072 ,p_new_element_id
6073 ,i.RENDER_CONDITION_ID
6074 ,i.UI_ACTION_TYPE
6075 ,i.TARGET_UI_DEF_ID
6076 ,i.TARGET_PERSISTENT_NODE_ID
6077 ,i.TARGET_NODE_PATH
6078 ,i.TARGET_PAGE_SET_ID
6079 ,i.TARGET_PAGE_ID
6080 ,i.TARGET_URL
6081 ,i.FRAME_NAME
6082 ,i.TARGET_ANCHOR
6083 ,i.DELETED_FLAG
6084 ,'0'
6085 ,i.CX_COMMAND_NAME
6086 ,i.WINDOW_PARAMETERS
6087 ,i.TARGET_WINDOW_TYPE
6088 ,i.TARGET_WINDOW_NAME
6089 ,i.TARGET_EXPL_NODE_ID
6090 ,i.URL_PROPERTY_ID
6091 ,i.PROC_PAGE_TEMPL_UI_DEF_ID
6092 ,i.PAGE_TITLE_TEXT_ID
6093 ,i.MAIN_MESSAGE_TEXT_ID
6094 ,i.PROCESSING_CAPTION_TEXT_ID
6095 ,i.PROCESSING_PAGE_TEMPL_ID
6096 ,i.PROCESSING_PAGE_ENABLED_FLAG
6097 );
6098
6099 set_User_Attribute(p_cz_attribute_name => 'actionId',
6100 p_cz_attribute_value => TO_CHAR(l_new_action_id),
6101 px_xml_attribute_value => px_user_attribute_value);
6102
6103 IF p_source_template_id IS NOT NULL THEN
6104 l_counter := l_counter + 1;
6105 l_cached_elems_tbl(l_counter) := l_new_action_id;
6106 l_cached_source_elems_tbl(l_counter) := l_id;
6107 END IF;
6108
6109 END LOOP;
6110 END IF;
6111
6112 FOR i IN g_condition_attr_tbl.FIRST..g_condition_attr_tbl.LAST
6113 LOOP
6114 BEGIN
6115 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
6116 EXCEPTION
6117 WHEN OTHERS THEN
6118 l_id := NULL;
6119 END;
6120 IF l_id IS NOT NULL THEN
6121 copy_UI_Rule(l_id, l_new_rule_id,0 , 0, p_new_element_id,p_source_ui_def_id, p_xml_node => p_xml_node);
6122
6123 SELECT persistent_rule_id INTO l_persistent_rule_id
6124 FROM cz_rules
6125 WHERE rule_id = l_new_rule_id;
6126
6127
6128 IF p_source_template_id IS NOT NULL THEN
6129 l_counter := l_counter + 1;
6130 l_cached_elems_tbl(l_counter) := l_new_rule_id;
6131 l_cached_source_elems_tbl(l_counter) := l_id;
6132 END IF;
6133
6134 set_User_Attribute(p_cz_attribute_name => g_condition_attr_tbl(i),
6135 p_cz_attribute_value => TO_CHAR(l_persistent_rule_id),
6136 px_xml_attribute_value => px_user_attribute_value);
6137
6138 END IF;
6139 END LOOP;
6140
6141 FOR i IN g_caption_attr_tbl.FIRST..g_caption_attr_tbl.LAST
6142 LOOP
6143
6144 BEGIN
6145 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
6146 EXCEPTION
6147 WHEN OTHERS THEN
6148 l_id := NULL;
6149 END;
6150
6151 IF l_id IS NOT NULL THEN
6152
6153 l_new_intl_text_id := NULL;
6154 l_persistent_intl_text_id := NULL;
6155
6156 FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
6157 WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
6158 AND deleted_flag=G_NO_FLAG)
6159 LOOP
6160 IF l_new_intl_text_id IS NULL THEN
6161 l_persistent_intl_text_id_tmp := null;
6162 l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
6163 END IF;
6164 INSERT INTO CZ_LOCALIZED_TEXTS
6165 (
6166 LOCALE_ID
6167 ,LOCALIZED_STR
6168 ,INTL_TEXT_ID
6169 ,DELETED_FLAG
6170 ,EFF_FROM
6171 ,EFF_TO
6172 ,SECURITY_MASK
6173 ,EFF_MASK
6174 ,CHECKOUT_USER
6175 ,ORIG_SYS_REF
6176 ,LANGUAGE
6177 ,SOURCE_LANG
6178 ,UI_DEF_ID
6179 ,MODEL_ID
6180 ,SEEDED_FLAG
6181 ,UI_PAGE_ID
6182 ,UI_PAGE_ELEMENT_ID
6183 )
6184 VALUES(
6185 k.LOCALE_ID
6186 ,k.LOCALIZED_STR
6187 ,l_new_intl_text_id
6188 ,k.DELETED_FLAG
6189 ,k.EFF_FROM
6190 ,k.EFF_TO
6191 ,k.SECURITY_MASK
6192 ,k.EFF_MASK
6193 ,k.CHECKOUT_USER
6194 ,k.ORIG_SYS_REF
6195 ,k.LANGUAGE
6196 ,k.SOURCE_LANG
6197 ,p_target_ui_def_id
6198 ,NVL(k.model_id,0)
6199 ,'0'
6200 ,0
6201 ,p_new_element_id
6202 ) RETURNING PERSISTENT_INTL_TEXT_ID INTO l_persistent_intl_text_id_tmp;
6203
6204 IF (k.source_lang = k.language) THEN
6205 l_persistent_intl_text_id := l_persistent_intl_text_id_tmp;
6206 END IF;
6207
6208 END LOOP;
6209
6210 IF l_new_intl_text_id IS NOT NULL THEN
6211 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
6212 p_cz_attribute_value => TO_CHAR(l_persistent_intl_text_id),
6213 px_xml_attribute_value => px_user_attribute_value);
6214
6215 IF p_source_template_id IS NOT NULL THEN
6216 l_counter := l_counter + 1;
6217 l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
6218 l_cached_source_elems_tbl(l_counter) := l_id;
6219 END IF;
6220 END IF;
6221
6222 END IF;
6223 END LOOP;
6224
6225 IF l_cached_elems_tbl.COUNT > 0 THEN
6226 FOR i IN l_cached_elems_tbl.FIRST..l_cached_elems_tbl.LAST
6227 LOOP
6228 INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
6229 (
6230 TEMPLATE_ID
6231 ,UI_DEF_ID
6232 ,ELEMENT_TYPE
6233 ,ELEMENT_ID
6234 ,PERSISTENT_ELEMENT_ID
6235 ,DELETED_FLAG
6236 ,SEEDED_FLAG
6237 )
6238 SELECT
6239 p_target_template_id
6240 ,p_target_ui_def_id
6241 ,ELEMENT_TYPE
6242 ,l_cached_elems_tbl(i)
6243 ,l_cached_elems_tbl(i)
6244 ,G_NO_FLAG
6245 ,G_NO_FLAG
6246 FROM CZ_UI_TEMPLATE_ELEMENTS
6247 WHERE template_id=p_source_template_id AND
6248 ui_def_id=p_source_ui_def_id AND
6249 element_id=l_cached_source_elems_tbl(i) AND
6250 deleted_flag=G_NO_FLAG;
6251 END LOOP;
6252 END IF;
6253
6254 END handle_Template_Attributes;
6255
6256 PROCEDURE copy_Node_Related_Entities(p_ui_def_id NUMBER,
6257 p_ui_page_id NUMBER,
6258 p_xml_node xmldom.DOMNode,
6259 p_target_ui_def_id NUMBER DEFAULT NULL,
6260 p_source_ui_page_id NUMBER DEFAULT NULL,
6261 p_source_ui_def_id NUMBER DEFAULT NULL) IS
6262
6263 l_user_attribute_value VARCHAR2(4000);
6264 l_element_id VARCHAR2(255);
6265 l_target_ui_def_id NUMBER;
6266 l_source_ui_page_id NUMBER;
6267 l_source_ui_def_id Number;
6268
6269 BEGIN
6270
6271 IF p_target_ui_def_id IS NULL THEN
6272 l_target_ui_def_id := p_ui_def_id;
6273 ELSE
6274 l_target_ui_def_id := p_target_ui_def_id;
6275 END IF;
6276
6277 IF p_source_ui_def_id IS NULL THEN
6278 l_source_ui_def_id := p_ui_def_id;
6279 ELSE
6280 l_source_ui_def_id := p_source_ui_def_id;
6281 END IF;
6282
6283 if p_source_ui_page_id IS NULL THEN
6284 l_source_ui_page_id := p_ui_page_id;
6285 ELSE
6286 l_source_ui_page_id := p_source_ui_page_id;
6287 END IF;
6288
6289 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
6290
6291 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
6292
6293 IF l_user_attribute_value IS NOT NULL THEN
6294 handle_User_Attributes
6295 (px_user_attribute_value => l_user_attribute_value,
6296 p_source_ui_def_id => l_source_ui_def_id,
6297 p_source_ui_page_id => l_source_ui_page_id,
6298 p_target_ui_def_id => l_target_ui_def_id,
6299 p_target_ui_page_id => p_ui_page_id,
6300 p_new_element_id => l_element_id,
6301 p_xml_node => p_xml_node);
6302
6303 set_Attribute(p_xml_node,
6304 G_USER_ATTRIBUTE3_NAME,
6305 l_user_attribute_value);
6306 END IF;
6307
6308 END copy_Node_Related_Entities;
6309
6310
6311 PROCEDURE handle_UI_CASE_Id(p_xml_node xmldom.DOMNode) IS
6312 l_user_attribute4 VARCHAR2(4000);
6313 BEGIN
6314 IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
6315
6316 l_user_attribute4 := get_Attribute_Value(p_xml_node,
6317 G_USER_ATTRIBUTE4_NAME);
6318 IF l_user_attribute4 IS NOT NULL THEN
6319 set_User_Attribute(p_cz_attribute_name => 'caseId',
6320 p_cz_attribute_value => get_Element_Id(),
6321 px_xml_attribute_value => l_user_attribute4);
6322
6323 set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4);
6324
6325 END IF;
6326 END IF;
6327 END handle_UI_CASE_Id;
6328
6329 PROCEDURE handle_USER_ATTRIBUTE10
6330 (p_xml_root_node xmldom.DOMNode,
6331 p_ui_def_id NUMBER,
6332 p_ui_page_id NUMBER,
6333 p_ui_element_id VARCHAR2) IS
6334
6335 l_user_attribute3_value VARCHAR2(4000);
6336 l_user_attribute10_value VARCHAR2(4000);
6337 l_refenabledCondnId VARCHAR2(255);
6338 l_refenabledCondnComp VARCHAR2(255);
6339 l_refenabledCondnValue VARCHAR2(255);
6340 l_new_refenabledCondnId NUMBER;
6341 l_refdisplayCondnId VARCHAR2(255);
6342 l_refdisplayCondnComp VARCHAR2(255);
6343 l_refdisplayCondnValue VARCHAR2(255);
6344 l_new_refdisplayCondnId NUMBER;
6345 l_persistent_rule_id NUMBER;
6346
6347 BEGIN
6348
6349 l_user_attribute3_value := get_Attribute_Value(p_xml_root_node,
6350 G_USER_ATTRIBUTE3_NAME);
6351
6352 IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0 THEN
6353
6354 l_user_attribute10_value := get_Attribute_Value(p_xml_root_node, G_USER_ATTRIBUTE10_NAME);
6355
6356 IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0 THEN
6357 l_refenabledCondnId := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnId');
6358 l_refenabledCondnComp := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnComp');
6359 l_refenabledCondnValue := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnValue');
6360
6361 copy_UI_Rule(p_rule_id => TO_NUMBER(l_refenabledCondnId),
6362 x_rule_id => l_new_refenabledCondnId,
6363 p_ui_def_id => p_ui_def_id,
6364 p_ui_page_id => p_ui_page_id,
6365 p_ui_element_id => p_ui_element_id,
6366 p_source_ui_def_id => p_ui_def_id);
6367
6368 SELECT persistent_rule_id INTO l_persistent_rule_id
6369 FROM cz_rules
6370 WHERE rule_id = l_new_refenabledCondnId;
6371
6372
6373 l_user_attribute3_value := l_user_attribute3_value||'|enabledCondnId='||TO_CHAR(l_persistent_rule_id)||
6374 '|enabledCondnComp=' || l_refenabledCondnComp || '|enabledCondnValue='||l_refenabledCondnValue;
6375
6376 xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6377 set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6378
6379 END IF; -- end of IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0
6380
6381 END IF; -- end of IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0
6382
6383 IF INSTR(l_user_attribute3_value,'displayCondnId=')=0 THEN
6384 IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0 THEN
6385 l_refdisplayCondnId := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnId');
6386 l_refdisplayCondnComp := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnComp');
6387 l_refdisplayCondnValue := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnValue');
6388
6389
6390 copy_UI_Rule(p_rule_id => TO_NUMBER(l_refdisplayCondnId),
6391 x_rule_id => l_new_refdisplayCondnId,
6392 p_ui_def_id => p_ui_def_id,
6393 p_ui_page_id => p_ui_page_id,
6394 p_ui_element_id => p_ui_element_id,
6395 p_source_ui_def_id => p_ui_def_id);
6396
6397 l_persistent_rule_id := null;
6398 SELECT persistent_rule_id INTO l_persistent_rule_id
6399 FROM cz_rules
6400 WHERE rule_id = l_new_refdisplayCondnId;
6401
6402 l_user_attribute3_value := l_user_attribute3_value||'|displayCondnId='||TO_CHAR(l_persistent_rule_id)||
6403 '|displayCondnComp=' || l_refdisplayCondnComp || '|displayCondnValue='||l_refdisplayCondnValue;
6404 xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6405 set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6406
6407 END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6408
6409 END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6410
6411 END handle_USER_ATTRIBUTE10;
6412
6413 PROCEDURE create_wrapper_table_layout(x_xml_table_node OUT NOCOPY xmldom.DOMNode,
6414 x_xml_tabuicontent_node OUT NOCOPY xmldom.DOMNode,
6415 p_target_subtree_xml_node xmldom.DOMNode) IS
6416
6417 l_doc xmldom.DOMDocument;
6418 l_xml_table_node xmldom.DOMNode;
6419
6420 BEGIN
6421 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
6422
6423 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
6424
6425 remove_TopLevel_Attributes(l_xml_table_node);
6426
6427 --x_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
6428 x_xml_table_node := cloneNode(l_xml_table_node, p_target_subtree_xml_node);
6429
6430 set_Attribute(xmldom.makeElement(x_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
6431 set_Attribute(xmldom.makeElement(x_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
6432
6433 x_xml_tabuicontent_node := getUIContents(x_xml_table_node);
6434
6435 END create_wrapper_table_layout;
6436
6437 FUNCTION insert_before(p_parent_xml_node IN xmldom.DOMNode,
6438 p_new_xml_node IN xmldom.DOMNode,
6439 p_ref_xml_node IN xmldom.DOMNode)
6440 RETURN xmldom.DOMNode IS
6441 l_new_xml_node xmldom.DOMNode;
6442 BEGIN
6443
6444 IF xmldom.isNull(p_ref_xml_node) THEN
6445 l_new_xml_node := xmldom.appendChild(p_parent_xml_node, p_new_xml_node);
6446 ELSE
6447 l_new_xml_node := xmldom.insertBefore(p_parent_xml_node, p_new_xml_node, p_ref_xml_node);
6448 END IF;
6449
6450 return l_new_xml_node;
6451 END insert_before;
6452
6453 FUNCTION insert_node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6454 p_new_xml_node IN xmldom.DOMNode,
6455 p_parent_xml_node IN xmldom.DOMNode)
6456 RETURN xmldom.DOMNode IS
6457
6458 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6459 l_doc xmldom.DOMDocument;
6460 l_anchor_doc xmldom.DOMDocument;
6461 l_subtree_doc xmldom.DOMDocument;
6462 l_xml_root_node xmldom.DOMNode;
6463 l_new_xml_root_node xmldom.DOMNode;
6464 l_out_xml_node xmldom.DOMNode;
6465 l_xml_table_node xmldom.DOMNode;
6466 l_new_xml_table_node xmldom.DOMNode;
6467 l_xml_anchor_node xmldom.DOMNode;
6468 l_new_xml_anchor_node xmldom.DOMNode;
6469 l_xml_node xmldom.DOMNode;
6470 l_xml_tabuicontent_node xmldom.DOMNode;
6471 l_ui_contents_xml_node xmldom.DOMNode;
6472 l_prev_node xmldom.DOMNode;
6473 l_next_node xmldom.DOMNode;
6474 l_prev_node_parent xmldom.DOMNode;
6475 l_next_node_parent xmldom.DOMNode;
6476 l_prev_node_parent_ui_cnt xmldom.DOMNode;
6477 l_next_node_parent_ui_cnt xmldom.DOMNode;
6478 l_grand_parent xmldom.DOMNode;
6479 l_next_sibling_of_parent xmldom.DOMNode;
6480 l_child_nodes_tbl xmldom.DOMNodeList;
6481 l_attribute_value VARCHAR2(4000);
6482 l_attribute_source VARCHAR2(4000);
6483 l_user_attribute VARCHAR2(4000);
6484 l_user_attribute4 VARCHAR2(4000);
6485 l_prev_element_id VARCHAR2(255);
6486 l_next_element_id VARCHAR2(255);
6487 l_prev_element_template_id NUMBER;
6488 l_next_element_template_id NUMBER;
6489 l_prev_elt_lyt_ui_style VARCHAR2(1);
6490 l_next_elt_lyt_ui_style VARCHAR2(1);
6491 l_lyt_ui_style VARCHAR2(1);
6492 l_old_ui_element_id VARCHAR2(255);
6493 l_new_ui_element_id VARCHAR2(255);
6494 l_switcher_element_id VARCHAR2(255);
6495 l_user_attribute3_value VARCHAR2(4000);
6496 l_switcher_casename VARCHAR2(255);
6497 l_length NUMBER;
6498 l_ui_action_id NUMBER;
6499 l_element_signature_id NUMBER;
6500 l_wrap_it BOOLEAN;
6501 l_drilldown_text_id NUMBER;
6502 l_wrap_with_links BOOLEAN := FALSE;
6503 l_template_is_used_by_ref BOOLEAN := TRUE;
6504
6505 BEGIN
6506
6507
6508 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6509 l_new_xml_root_node := p_new_xml_node;
6510
6511 --DEBUG('asp:insert_node ' || l_node.name);
6512
6513 BEGIN
6514
6515 SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6516 FROM CZ_UI_PAGE_ELEMENTS
6517 WHERE ui_def_id=p_ui_node.ui_def_id AND
6518 page_id = p_ui_node.page_id AND
6519 parent_element_id = p_ui_node.parent_element_id AND
6520 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6521 seq_nbr = (SELECT max(seq_nbr)
6522 FROM CZ_UI_PAGE_ELEMENTS
6523 WHERE ui_def_id=p_ui_node.ui_def_id AND
6524 page_id = p_ui_node.page_id AND
6525 parent_element_id = p_ui_node.parent_element_id AND
6526 seq_nbr<p_ui_node.seq_nbr AND
6527 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6528 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6529 ctrl_template_id IS NULL) AND
6530 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6531 AND rownum < 2;
6532
6533 EXCEPTION
6534 WHEN NO_DATA_FOUND THEN
6535 NULL;
6536 END;
6537
6538 --DEBUG('asp:Here 1');
6539
6540 BEGIN
6541 SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6542 FROM CZ_UI_PAGE_ELEMENTS
6543 WHERE ui_def_id=p_ui_node.ui_def_id AND
6544 page_id = p_ui_node.page_id AND
6545 parent_element_id = p_ui_node.parent_element_id AND
6546 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6547 seq_nbr = ( SELECT min(seq_nbr)
6548 FROM CZ_UI_PAGE_ELEMENTS
6549 WHERE ui_def_id=p_ui_node.ui_def_id AND
6550 page_id = p_ui_node.page_id AND
6551 parent_element_id = p_ui_node.parent_element_id AND
6552 seq_nbr>p_ui_node.seq_nbr AND
6553 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6554 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6555 ctrl_template_id IS NULL) AND
6556 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6557 AND rownum < 2;
6558
6559 EXCEPTION
6560 WHEN NO_DATA_FOUND THEN
6561 NULL;
6562 END;
6563
6564 --DEBUG('Here 2');
6565
6566 IF l_prev_element_id IS NOT NULL THEN
6567 l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
6568
6569 l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
6570 l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
6571 BEGIN
6572 SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
6573 FROM CZ_UI_TEMPLATES
6574 WHERE template_id = l_prev_element_template_id
6575 AND ui_def_id = 0
6576 AND deleted_flag = G_NO_FLAG;
6577
6578 EXCEPTION
6579 WHEN NO_DATA_FOUND THEN
6580 NULL;
6581 END;
6582 END IF;
6583
6584 --DEBUG('Here 3');
6585
6586 IF l_next_element_id IS NOT NULL THEN
6587 l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
6588 l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
6589 l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
6590 BEGIN
6591 SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
6592 FROM CZ_UI_TEMPLATES
6593 WHERE template_id = l_next_element_template_id
6594 AND ui_def_id = 0
6595 AND deleted_flag = G_NO_FLAG;
6596
6597 EXCEPTION
6598 WHEN NO_DATA_FOUND THEN
6599 NULL;
6600 END;
6601 END IF;
6602
6603 --DEBUG('Here 4');
6604
6605 IF p_ui_node.ctrl_template_id IS NOT NULL THEN
6606
6607 SELECT layout_ui_style INTO l_lyt_ui_style
6608 FROM CZ_UI_TEMPLATES
6609 WHERE template_id = p_ui_node.ctrl_template_id
6610 AND ui_def_id = 0
6611 AND deleted_flag = G_NO_FLAG;
6612
6613 IF l_lyt_ui_style = G_LABEL_PAIR_LAYOUT_STYLE THEN
6614 l_wrap_it := TRUE;
6615 ELSE
6616 l_wrap_it := FALSE;
6617 END IF;
6618 END IF;
6619
6620 --DEBUG('Here 5');
6621
6622 IF l_prev_element_id IS NOT NULL
6623 OR l_next_element_id IS NOT NULL THEN
6624 IF l_wrap_it THEN
6625 IF l_prev_element_id IS NOT NULL AND
6626 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6627 l_next_node := xmldom.getNextSibling(l_prev_node);
6628 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6629 ELSIF l_next_element_id IS NOT NULL AND
6630 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6631 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6632 ELSE
6633 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6634 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6635 IF l_prev_element_id IS NOT NULL THEN
6636 l_next_node := xmldom.getNextSibling(l_prev_node);
6637 l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6638 ELSIF l_next_element_id IS NOT NULL THEN
6639 l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6640 ELSE
6641 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6642 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6643 END IF;
6644 END IF;
6645 ELSE -- new element is not LABEL_DATA_PAIR
6646
6647 IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
6648 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
6649 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6650
6651
6652 IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
6653 IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
6654 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6655 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6656 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6657 l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
6658 l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
6659 l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
6660 l_next_node := l_xml_table_node;
6661 END IF;
6662 l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
6663 ELSE
6664 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6665 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6666 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6667 END IF;
6668 ELSIF l_prev_element_id IS NOT NULL AND NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6669 l_next_node := xmldom.getNextSibling(l_prev_node);
6670 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6671 ELSIF l_next_element_id IS NOT NULL AND
6672 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6673 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6674 ELSIF l_prev_element_id IS NOT NULL THEN
6675 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6676 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6677 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6678 ELSE
6679 l_grand_parent := xmldom.getParentNode(l_next_node_parent);
6680 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
6681 END IF;
6682 END IF;
6683 ELSE
6684 -- If neither prev_element and next_element is found
6685 -- Insert at the end
6686 --DEBUG('asp:Append at the end');
6687
6688 IF l_wrap_it THEN
6689 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6690 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6691 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6692 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6693 ELSE
6694 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6695 l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
6696 END IF;
6697 END IF;
6698
6699 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6700 RETURN l_new_xml_root_node;
6701
6702 END insert_node;
6703
6704 FUNCTION pluck_XML_node(p_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE,
6705 p_page_id NUMBER,
6706 p_element_id VARCHAR2)
6707 RETURN xmldom.DOMNode IS
6708
6709 l_xml_node_to_pluck xmldom.DOMNode;
6710 l_parent_xml_node xmldom.DOMNode;
6711 l_subtree_doc xmldom.DOMDocument;
6712 l_element_id NUMBER;
6713
6714 BEGIN
6715
6716 l_element_id := TO_NUMBER(p_element_id);
6717
6718 IF g_dom_elements_to_move.EXISTS(l_element_id) THEN
6719 l_xml_node_to_pluck := g_dom_elements_to_move(l_element_id);
6720
6721 ELSE
6722 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
6723
6724 l_xml_node_to_pluck := find_XML_Node_By_Attribute(l_subtree_doc,
6725 G_ID_ATTRIBUTE,
6726 p_element_id,
6727 G_NO_FLAG);
6728
6729 l_parent_xml_node := xmldom.getParentNode(l_xml_node_to_pluck);
6730
6731 l_xml_node_to_pluck := xmldom.removeChild(l_parent_xml_node, l_xml_node_to_pluck);
6732
6733 Save_Document(l_subtree_doc, p_jrad_doc);
6734 END IF;
6735
6736 RETURN l_xml_node_to_pluck;
6737
6738 END pluck_XML_node;
6739
6740
6741 FUNCTION move_XML_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6742 p_parent_xml_node xmldom.DOMNode)
6743 RETURN xmldom.DOMNode IS
6744
6745 l_src_page_id NUMBER;
6746 l_xml_node_to_move xmldom.DOMNode;
6747 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
6748 l_counter NUMBER;
6749 l_element_ids_tbl varchar2_tbl_type;
6750 l_id VARCHAR2(255);
6751 l_component_id NUMBER;
6752 l_old_component_id NUMBER;
6753
6754 BEGIN
6755
6756 l_src_page_id := g_tgt_pg_to_src_pg_map(p_ui_node.page_id)(TO_NUMBER(p_ui_node.element_id));
6757
6758 SELECT jrad_doc INTO l_jrad_doc
6759 FROM CZ_UI_PAGES
6760 WHERE ui_def_id= g_UI_Context.ui_def_id AND
6761 page_id=l_src_page_id;
6762
6763 l_xml_node_to_move := pluck_XML_node(l_jrad_doc, l_src_page_id, p_ui_node.element_id);
6764 l_xml_node_to_move := cloneNode(l_xml_node_to_move, p_parent_xml_node);
6765
6766 l_counter := -1;
6767 resolve_view_names(l_xml_node_to_move, p_ui_node.page_id, l_counter, l_element_ids_tbl);
6768
6769
6770 SELECT ps_node_id INTO l_component_id
6771 FROM CZ_PS_NODES
6772 WHERE devl_project_id = g_UI_Context.devl_project_id
6773 AND persistent_node_Id = p_ui_node.pagebase_persistent_node_id;
6774
6775 SELECT ps_node_id INTO l_old_component_id
6776 FROM CZ_PS_NODES
6777 WHERE devl_project_id = g_UI_Context.devl_project_id
6778 AND persistent_node_id = (SELECT persistent_node_id
6779 FROM CZ_UI_PAGES
6780 WHERE ui_def_id = g_UI_Context.ui_Def_id
6781 AND page_id = l_src_page_id);
6782
6783
6784
6785 FOR i in (SELECT rule_id, ui_page_element_id
6786 FROM CZ_RULES
6787 WHERE devl_project_id = g_UI_Context.devl_project_id
6788 AND ui_def_id = g_UI_Context.ui_def_id
6789 AND ui_page_id = l_src_page_id
6790 AND component_id = l_old_component_id
6791 AND deleted_flag = G_NO_FLAG)
6792 LOOP
6793 DEBUG('asp: Found rule ' || i.rule_id || ', for element ' || i.ui_page_element_Id);
6794 IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6795 DEBUG('asp: Updating rule ' || i.rule_id || ' for element_id ' || i.ui_page_element_id);
6796 UPDATE CZ_RULES
6797 SET component_id = l_component_id,
6798 ui_page_id = p_ui_node.page_id
6799 WHERE devl_project_id = g_UI_Context.devl_project_id
6800 AND rule_id = i.rule_id;
6801 END IF;
6802 END LOOP;
6803
6804 FOR i in (SELECT intl_text_id, ui_page_element_id
6805 FROM CZ_INTL_TEXTS
6806 WHERE model_id = g_UI_Context.devl_project_id
6807 AND ui_def_id = g_UI_Context.ui_def_id
6808 AND ui_page_id = l_src_page_id
6809 AND deleted_flag = G_NO_FLAG)
6810 LOOP
6811 IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6812 DEBUG('asp: Updating intl_text ' || i.intl_text_id || ' for element_id ' || i.ui_page_element_id);
6813 UPDATE CZ_LOCALIZED_TEXTS
6814 SET ui_page_id = p_ui_node.page_id
6815 WHERE intl_text_id = i.intl_text_id;
6816 END IF;
6817 END LOOP;
6818 l_xml_node_to_move := insert_node(p_ui_node, l_xml_node_to_move, p_parent_xml_node);
6819
6820 RETURN l_xml_node_to_move;
6821
6822 END move_XML_Node;
6823
6824 --
6825 -- replace numeric suffix at the end of p_jrad_id with p_root_jrad_id
6826 -- if there is no numeric suffix then it just adds '_'||p_root_jrad_id to p_jrad_id
6827 -- Ex. : if p_jrad_id="_czabcd_100" and p_root_jrad_id="12345"
6828 -- then function will return "_czabcd_12345"
6829 --
6830 FUNCTION handle_JRAD_Id(p_jrad_id IN VARCHAR2,
6831 p_root_jrad_id IN VARCHAR2) RETURN VARCHAR2 IS
6832 l_ind NUMBER;
6833 l_num NUMBER;
6834 l_jrad_id VARCHAR2(4000);
6835 l_next_str VARCHAR2(4000);
6836 BEGIN
6837 l_jrad_id := p_jrad_id;
6838 l_ind := INSTR(l_jrad_id,'_');
6839 LOOP
6840 l_next_str := SUBSTR(l_jrad_id,l_ind+1);
6841 l_ind := INSTR(l_next_str,'_');
6842 IF l_ind=0 THEN
6843 BEGIN
6844 l_num := TO_NUMBER(l_next_str);
6845 l_jrad_id := REPLACE(p_jrad_id,l_next_str,p_root_jrad_id);
6846 RETURN l_jrad_id;
6847 EXCEPTION
6848 WHEN OTHERS THEN
6849 RETURN p_jrad_id||'_'||p_root_jrad_id;
6850 END;
6851 ELSE
6852 l_jrad_id:= l_next_str;
6853 END IF;
6854 END LOOP;
6855 END handle_JRAD_Id;
6856
6857 FUNCTION create_UIXML_Element_new(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6858 p_parent_xml_node xmldom.DOMNode)
6859 RETURN xmldom.DOMNode IS
6860
6861 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6862 l_ctrl_template_name CZ_UI_TEMPLATES.template_name%TYPE;
6863 l_doc xmldom.DOMDocument;
6864 l_anchor_doc xmldom.DOMDocument;
6865 l_subtree_doc xmldom.DOMDocument;
6866 l_xml_root_node xmldom.DOMNode;
6867 l_new_xml_root_node xmldom.DOMNode;
6868 l_out_xml_node xmldom.DOMNode;
6869 l_xml_table_node xmldom.DOMNode;
6870 l_new_xml_table_node xmldom.DOMNode;
6871 l_xml_anchor_node xmldom.DOMNode;
6872 l_new_xml_anchor_node xmldom.DOMNode;
6873 l_xml_node xmldom.DOMNode;
6874 l_xml_tabuicontent_node xmldom.DOMNode;
6875 l_ui_contents_xml_node xmldom.DOMNode;
6876 l_prev_node xmldom.DOMNode;
6877 l_next_node xmldom.DOMNode;
6878 l_prev_node_parent xmldom.DOMNode;
6879 l_next_node_parent xmldom.DOMNode;
6880 l_prev_node_parent_ui_cnt xmldom.DOMNode;
6881 l_next_node_parent_ui_cnt xmldom.DOMNode;
6882 l_grand_parent xmldom.DOMNode;
6883 l_next_sibling_of_parent xmldom.DOMNode;
6884
6885 l_curr_parent_xml_node xmldom.DOMNode;
6886 l_xml_node_name VARCHAR2(255);
6887 l_new_attribute_value VARCHAR2(255);
6888
6889 l_child_nodes_tbl xmldom.DOMNodeList;
6890 l_attribute_value VARCHAR2(4000);
6891 l_attribute_source VARCHAR2(4000);
6892 l_user_attribute VARCHAR2(4000);
6893 l_user_attribute4 VARCHAR2(4000);
6894 l_prev_element_id VARCHAR2(255);
6895 l_next_element_id VARCHAR2(255);
6896 l_jrad_doc VARCHAR2(255);
6897 l_ancestor_node VARCHAR2(255);
6898 l_hgrid_element_id VARCHAR2(255);
6899 l_old_switcher_xml_id VARCHAR2(255);
6900 l_prev_element_template_id NUMBER;
6901 l_next_element_template_id NUMBER;
6902 l_prev_elt_lyt_ui_style VARCHAR2(1);
6903 l_next_elt_lyt_ui_style VARCHAR2(1);
6904 l_old_ui_element_id VARCHAR2(255);
6905 l_new_ui_element_id VARCHAR2(255);
6906 l_switcher_element_id VARCHAR2(255);
6907 l_user_attribute3_value VARCHAR2(4000);
6908 l_switcher_casename VARCHAR2(255);
6909 l_switcher_xml_id VARCHAR2(255);
6910 l_uicase_name VARCHAR2(255);
6911 l_length NUMBER;
6912 l_ui_action_id NUMBER;
6913 l_element_signature_id NUMBER;
6914 l_wrap_it BOOLEAN;
6915 l_drilldown_text_id NUMBER;
6916 l_wrap_with_links BOOLEAN := FALSE;
6917 l_template_is_used_by_ref BOOLEAN := TRUE;
6918 l_user_attribute10_value VARCHAR2(4000); --BUG12563210
6919
6920 BEGIN
6921 --DEBUG('asp:Create UI XML Element new started...');
6922 IF p_ui_node.ctrl_template_id IS NULL THEN
6923 RETURN l_xml_node;
6924 END IF;
6925
6926 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6927
6928 --DEBUG('asp:Create_ui_xml_new ' || l_node.name || ', element_id ' || p_ui_node.element_id);
6929
6930 l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
6931
6932 BEGIN
6933 SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6934 FROM CZ_UI_PAGE_ELEMENTS
6935 WHERE ui_def_id=p_ui_node.ui_def_id AND
6936 page_id = p_ui_node.page_id AND
6937 parent_element_id = p_ui_node.parent_element_id AND
6938 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6939 --jonatara:bug fix7307460
6940 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6941 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL ) AND
6942 seq_nbr = (SELECT max(seq_nbr)
6943 FROM CZ_UI_PAGE_ELEMENTS
6944 WHERE ui_def_id=p_ui_node.ui_def_id AND
6945 page_id = p_ui_node.page_id AND
6946 parent_element_id = p_ui_node.parent_element_id AND
6947 seq_nbr<p_ui_node.seq_nbr AND
6948 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6949 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6950 ctrl_template_id IS NULL) AND
6951 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6952 AND rownum < 2;
6953
6954 EXCEPTION
6955 WHEN NO_DATA_FOUND THEN
6956 NULL;
6957 END;
6958
6959 BEGIN
6960
6961 SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6962 FROM CZ_UI_PAGE_ELEMENTS
6963 WHERE ui_def_id=p_ui_node.ui_def_id AND
6964 page_id = p_ui_node.page_id AND
6965 parent_element_id = p_ui_node.parent_element_id AND
6966 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6967 --jonatara:bug fix7307460
6968 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6969 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL) AND
6970 seq_nbr = ( SELECT min(seq_nbr)
6971 FROM CZ_UI_PAGE_ELEMENTS
6972 WHERE ui_def_id=p_ui_node.ui_def_id AND
6973 page_id = p_ui_node.page_id AND
6974 parent_element_id = p_ui_node.parent_element_id AND
6975 seq_nbr>p_ui_node.seq_nbr AND
6976 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6977 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6978 ctrl_template_id IS NULL) AND
6979 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6980 AND rownum < 2;
6981
6982
6983 EXCEPTION
6984 WHEN NO_DATA_FOUND THEN
6985 NULL;
6986 END;
6987
6988
6989 -- Now lets get the new element ready for insertion. Once the new node
6990 -- is ready, we will insert it int he appropriate place
6991
6992 --
6993 -- drilldowns will be handled by special way ( bug #3271034 )
6994 --
6995 IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
6996 G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
6997 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6998 l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
6999 ELSE
7000 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7001 END IF;
7002 ELSE
7003 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7004 END IF;
7005
7006 --
7007 -- parse document(template) which is going to be nested element
7008 --
7009 l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7010
7011 IF xmldom.isNull(l_subtree_doc) THEN
7012 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7013 p_token_name => 'UI_TEMPLATE',
7014 p_token_value => l_ctrl_template_name,
7015 p_fatal_error => TRUE);
7016
7017 RAISE WRONG_UI_TEMPLATE;
7018 END IF;
7019
7020 --
7021 -- get subdocument's root node
7022 --
7023 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7024
7025 --
7026 -- remove common attributes of container and subtree
7027 --
7028 remove_TopLevel_Attributes(l_xml_root_node);
7029
7030 IF l_template_is_used_by_ref THEN
7031 l_element_signature_id := 6011;
7032 ELSE
7033 l_element_signature_id := p_ui_node.element_signature_id;
7034 END IF;
7035
7036
7037 --
7038 -- set Attributes for this subtree = Template
7039 --
7040 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7041 p_ui_node => p_ui_node,
7042 p_element_signature_id => l_element_signature_id);
7043
7044 --
7045 -- set a special attribute "blockSize" if it is Table control
7046 --
7047 /* commented out according to request from 8/12/2004
7048 IF xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7049 set_Attribute(l_xml_root_node,
7050 'blockSize',
7051 TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7052 END IF;
7053 */
7054
7055 --DEBUG('Here 7');
7056 IF l_template_is_used_by_ref THEN
7057
7058 --
7059 -- returns cloned DOM subtree
7060 --
7061 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7062 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7063
7064 -- Check if l_new_xml_root_node is NOT null - bug 11712366
7065 IF (xmldom.isNull(l_new_xml_root_node) = FALSE) THEN
7066 --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table');
7067 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7068 --
7069 -- remove non user attributes from top tag
7070 --
7071 remove_Non_User_Attributes(l_new_xml_root_node);
7072
7073 -- Remove user:Attribute10 if it exists -- Fix for USS Bug 12563210
7074 l_user_attribute10_value := get_Attribute_Value(l_new_xml_root_node,G_USER_ATTRIBUTE10_NAME);
7075 IF (l_user_attribute10_value IS NOT NULL) THEN
7076 xmldom.removeAttribute(xmldom.makeElement(l_new_xml_root_node),G_USER_ATTRIBUTE10_NAME);
7077 END IF;
7078
7079 --
7080 -- set "extends" attribute
7081 --
7082 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7083
7084 --
7085 -- remove content of template subtree
7086 --
7087 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7088
7089 --
7090 -- we need to get length of array of child nodes
7091 -- to go through the array in loop
7092 -- Bug 11712366 - check if l_child_nodes_table is not empty
7093 IF (xmldom.isNull(l_child_nodes_tbl) = FALSE) THEN
7094 l_length := xmldom.getLength(l_child_nodes_tbl);
7095 FOR k IN 0..l_length-1
7096 LOOP
7097 --
7098 -- get next child DOM node
7099 --
7100 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7101 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7102 END LOOP;
7103 END IF;
7104 --ELSE
7105 --DEBUG('asp:l_new_xml_root_node is null !!');
7106 END IF;
7107 ELSE -- use UI Template by Copy
7108
7109 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7110
7111 l_length := xmldom.getLength(l_child_nodes_tbl);
7112 IF (l_length > 0) THEN
7113 FOR k IN 0..l_length-1
7114 LOOP
7115 --
7116 -- get next child DOM node
7117 --
7118 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7119
7120 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7121
7122 IF k > 0 THEN
7123 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7124
7125 l_xml_node_name := xmldom.getNodeName(l_xml_node);
7126
7127 IF l_attribute_value IS NOT NULL THEN
7128 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7129 l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
7130 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
7131 END IF;
7132
7133 l_ancestor_node := get_Attribute_Value(l_xml_node,
7134 'ancestorNode');
7135 IF l_ancestor_node IS NOT NULL THEN
7136
7137 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7138 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7139
7140 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7141 IF NOT(xmldom.IsNull(l_xml_node)) THEN
7142 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7143
7144 set_Attribute(l_xml_node,
7145 'ancestorNode',
7146 l_ancestor_node);
7147 END IF;
7148 END IF;
7149
7150 --
7151 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7152 --
7153 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7154 l_old_switcher_xml_id := l_attribute_value;
7155 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7156 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7157 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
7158 l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
7159 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
7160 p_cz_attribute_value => l_switcher_casename,
7161 px_xml_attribute_value => l_user_attribute3_value);
7162
7163 set_Attribute(l_xml_node,
7164 G_USER_ATTRIBUTE3_NAME,
7165 l_user_attribute3_value);
7166 END IF;
7167
7168 --
7169 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7170 --
7171 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7172 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7173 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
7174 set_Attribute(xmldom.makeElement(l_xml_node),
7175 'name',
7176 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
7177 handle_UI_CASE_Id(l_xml_node);
7178 END IF;
7179
7180 --
7181 -- if current tag is <oa:stackLayout>
7182 -- then replace old id with new one
7183 --
7184 IF (l_xml_node_name='oa:stackLayout' AND
7185 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7186 set_Attribute(xmldom.makeElement(l_xml_node),
7187 G_ID_ATTRIBUTE,
7188 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7189 END IF;
7190
7191 IF l_attribute_value IS NOT NULL THEN
7192 --
7193 -- create a new copies for corresponding entities ( captions, rules ,... )
7194 --
7195 copy_Node_Related_Entities(p_ui_def_id => p_ui_node.ui_def_id,
7196 p_ui_page_id => p_ui_node.page_id,
7197 p_xml_node => l_xml_node);
7198 END IF;
7199
7200 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7201 IF attribute_Value(l_xml_node, 'source') IS NULL AND
7202 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7203 set_Attribute(l_xml_node,
7204 'source',
7205 g_UI_Context.DRILLDOWN_IMAGE_URL);
7206 END IF;
7207
7208 l_user_attribute := get_Attribute_Value(l_xml_node,
7209 G_USER_ATTRIBUTE3_NAME);
7210
7211 IF l_user_attribute IS NOT NULL THEN
7212
7213 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7214
7215 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7216 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7217 px_xml_attribute_value => l_user_attribute);
7218
7219 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7220 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7221 px_xml_attribute_value => l_user_attribute);
7222 ELSE
7223 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7224
7225 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7226 g_UI_Context.ui_def_id,
7227 p_ui_node.page_id, p_ui_node.element_id);
7228
7229 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7230 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7231 px_xml_attribute_value => l_user_attribute);
7232
7233 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7234 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7235 px_xml_attribute_value => l_user_attribute);
7236
7237 END IF;
7238 END IF; -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7239
7240 BEGIN
7241 l_ui_action_id := get_UI_Action_Id(p_ui_node);
7242 EXCEPTION
7243 WHEN OTHERS THEN
7244 NULL;
7245 END;
7246
7247 IF l_ui_action_id IS NOT NULL THEN
7248
7249 set_User_Attribute(p_cz_attribute_name => 'actionId',
7250 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
7251 px_xml_attribute_value => l_user_attribute);
7252
7253 END IF;
7254
7255 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7256
7257 END IF; -- end of IF l_user_attribute IS NOT NULL
7258
7259 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7260
7261 --++++++ add template references ++++++
7262 add_Extends_Refs(p_xml_node => l_xml_node,
7263 p_ui_node => p_ui_node);
7264
7265 END IF; -- end of IF k > 0 THEN
7266 END LOOP;
7267 END IF;
7268
7269 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7270 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7271
7272 --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table 2');
7273 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7274 END IF;
7275
7276 -- The new element is now ready. It is
7277 -- l_new_xml_root_node, the root of the subtree to be added
7278 -- We need to add this root node to an appropriate location
7279 -- int the XML DOM.
7280
7281
7282 -- we have to decide if we want to add this new element
7283 -- after the prev element, before the next element or as the
7284 -- last element of the given parent region
7285
7286 IF l_prev_element_id IS NOT NULL THEN
7287 l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
7288 l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
7289 l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
7290 BEGIN
7291 SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
7292 FROM CZ_UI_TEMPLATES
7293 WHERE template_id = l_prev_element_template_id
7294 AND ui_def_id = 0
7295 AND deleted_flag = G_NO_FLAG;
7296
7297 EXCEPTION
7298 WHEN NO_DATA_FOUND THEN
7299 NULL;
7300 END;
7301 END IF;
7302
7303 IF l_next_element_id IS NOT NULL THEN
7304 --DEBUG('Here 8.11 ' || l_next_element_id);
7305 IF g_dom_elements_tbl.EXISTS(TO_NUMBER(l_next_element_id)) THEN
7306 l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
7307 --DEBUG('Here 8.12');
7308 l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
7309 --DEBUG('Here 8.13');
7310 l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
7311 --DEBUG('Here 8.14');
7312 BEGIN
7313 SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
7314 FROM CZ_UI_TEMPLATES
7315 WHERE template_id = l_next_element_template_id
7316 AND ui_def_id = 0
7317 AND deleted_flag = G_NO_FLAG;
7318
7319 EXCEPTION
7320 WHEN NO_DATA_FOUND THEN
7321 NULL;
7322 END;
7323 ELSE
7324 l_next_element_id := NULL;
7325 END IF;
7326 END IF;
7327
7328 --DEBUG('Here 9' || l_node.detailed_type_id);
7329 IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7330 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7331 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7332 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7333 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7334 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7335 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7336 CZ_TYPES.UTEXT_FEATURE_TYPEID,
7337 CZ_TYPES.UTOTAL_TYPEID,
7338 CZ_TYPES.URESOURCE_TYPEID) AND
7339 NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7340
7341 --DEBUG('asp:Wrap it 1 ' || l_node.name);
7342 l_wrap_it := TRUE;
7343
7344 ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7345 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7346
7347 IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE OR
7348 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7349 l_wrap_it := FALSE;
7350
7351 ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7352 l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7353 l_wrap_it := TRUE;
7354 ELSE
7355 l_wrap_it := FALSE;
7356 END IF;
7357
7358 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7359 g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7360 l_wrap_with_links := TRUE;
7361 END IF;
7362
7363 ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7364 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7365 CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7366 l_wrap_it := FALSE;
7367 END IF;
7368
7369 IF l_prev_element_id IS NOT NULL
7370 OR l_next_element_id IS NOT NULL THEN
7371 IF l_wrap_it THEN
7372 IF l_prev_element_id IS NOT NULL AND
7373 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7374 l_next_node := xmldom.getNextSibling(l_prev_node);
7375 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7376 ELSIF l_next_element_id IS NOT NULL AND
7377 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7378 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7379 ELSE
7380 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7381 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7382 IF l_prev_element_id IS NOT NULL THEN
7383 l_next_node := xmldom.getNextSibling(l_prev_node);
7384 l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7385 ELSIF l_next_element_id IS NOT NULL THEN
7386 l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7387 ELSE
7388 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7389 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7390 END IF;
7391 END IF;
7392 ELSE -- new element is not LABEL_DATA_PAIR
7393
7394 IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
7395 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
7396 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7397
7398
7399 IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
7400 IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
7401 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7402 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7403 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7404 l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
7405 l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
7406 l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
7407 l_next_node := l_xml_table_node;
7408 END IF;
7409 l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
7410 ELSE
7411 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7412 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7413 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7414 END IF;
7415 ELSIF l_prev_element_id IS NOT NULL AND NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7416 l_next_node := xmldom.getNextSibling(l_prev_node);
7417 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7418 ELSIF l_next_element_id IS NOT NULL AND
7419 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7420 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7421 ELSIF l_prev_element_id IS NOT NULL THEN
7422 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7423 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7424 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7425 ELSE
7426 l_grand_parent := xmldom.getParentNode(l_next_node_parent);
7427 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
7428 END IF;
7429 END IF;
7430 ELSE
7431 -- If neither prev_element and next_element is found
7432 -- Insert at the end
7433 --DEBUG('asp:Append at the end');
7434
7435 IF l_wrap_it THEN
7436 --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(p_parent_xml_node));
7437 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7438 --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(l_ui_contents_xml_node));
7439 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7440 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7441 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7442 ELSE
7443 --DEBUG('Append at the end. Not wrapping');
7444 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7445 l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
7446 END IF;
7447 END IF;
7448
7449 RETURN l_new_xml_root_node;
7450
7451 END create_UIXML_Element_new;
7452
7453 --
7454 -- create new XML JRAD element
7455 --
7456 FUNCTION create_UIXML_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7457 p_parent_xml_node xmldom.DOMNode)
7458 RETURN xmldom.DOMNode IS
7459
7460 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7461 l_ctrl_template_name CZ_UI_TEMPLATES.template_name%TYPE;
7462 l_doc xmldom.DOMDocument;
7463 l_anchor_doc xmldom.DOMDocument;
7464 l_subtree_doc xmldom.DOMDocument;
7465 l_xml_root_node xmldom.DOMNode;
7466 l_new_xml_root_node xmldom.DOMNode;
7467 l_out_xml_node xmldom.DOMNode;
7468 l_xml_table_node xmldom.DOMNode;
7469 l_new_xml_table_node xmldom.DOMNode;
7470 l_xml_anchor_node xmldom.DOMNode;
7471 l_new_xml_anchor_node xmldom.DOMNode;
7472 l_xml_node xmldom.DOMNode;
7473 l_xml_tabuicontent_node xmldom.DOMNode;
7474 l_ui_contents_xml_node xmldom.DOMNode;
7475
7476 l_curr_parent_xml_node xmldom.DOMNode;
7477 l_xml_node_name VARCHAR2(255);
7478 l_new_attribute_value VARCHAR2(255);
7479
7480 l_child_nodes_tbl xmldom.DOMNodeList;
7481 l_attribute_value VARCHAR2(4000);
7482 l_attribute_source VARCHAR2(4000);
7483 l_user_attribute VARCHAR2(4000);
7484 l_user_attribute4 VARCHAR2(4000);
7485 l_jrad_doc VARCHAR2(255);
7486 l_ancestor_node VARCHAR2(255);
7487 l_hgrid_element_id VARCHAR2(255);
7488 l_prev_element_id VARCHAR2(255);
7489 l_old_ui_element_id VARCHAR2(255);
7490 l_new_ui_element_id VARCHAR2(255);
7491 l_switcher_element_id VARCHAR2(255);
7492 l_user_attribute3_value VARCHAR2(4000);
7493 l_switcher_casename VARCHAR2(255);
7494 l_old_switcher_xml_id VARCHAR2(255);
7495 l_switcher_xml_id VARCHAR2(255);
7496 l_uicase_name VARCHAR2(255);
7497 l_length NUMBER;
7498 l_ui_action_id NUMBER;
7499 l_element_signature_id NUMBER;
7500 l_non_bom_content BOOLEAN;
7501 l_wrap_it BOOLEAN;
7502 l_drilldown_text_id NUMBER;
7503 l_wrap_with_links BOOLEAN := FALSE;
7504 l_template_is_used_by_ref BOOLEAN := TRUE;
7505 l_user_attribute10_value VARCHAR2(4000); -- Added for USS bug 12563210
7506
7507 BEGIN
7508
7509 IF g_using_new_UI_refresh THEN
7510 RETURN create_UIXML_Element_new(p_ui_node, p_parent_xml_node);
7511 END IF;
7512
7513 IF p_ui_node.ctrl_template_id IS NULL THEN
7514 RETURN l_xml_node;
7515 END IF;
7516
7517 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7518
7519 l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
7520
7521 BEGIN
7522 SELECT element_id INTO l_prev_element_id
7523 FROM CZ_UI_PAGE_ELEMENTS
7524 WHERE ui_def_id=p_ui_node.ui_def_id AND
7525 parent_persistent_node_id=p_ui_node.parent_persistent_node_id AND
7526 seq_nbr=p_ui_node.seq_nbr-1 AND
7527 deleted_flag<>G_YES_FLAG;
7528
7529 l_xml_tabuicontent_node := find_Table_Of_XML_Node(p_parent_xml_node, l_prev_element_id);
7530
7531 EXCEPTION
7532 WHEN OTHERS THEN
7533 NULL;
7534 END;
7535
7536 --
7537 -- drilldowns will be handled by special way ( bug #3271034 )
7538 --
7539 IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
7540 G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
7541 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7542 l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
7543 ELSE
7544 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7545 END IF;
7546 ELSE
7547 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7548 END IF;
7549
7550 IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7551 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7552 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7553 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7554 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7555 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7556 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7557 CZ_TYPES.UTEXT_FEATURE_TYPEID,
7558 CZ_TYPES.UTOTAL_TYPEID,
7559 CZ_TYPES.URESOURCE_TYPEID) AND
7560 NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7561
7562 l_non_bom_content := TRUE;
7563 l_wrap_it := TRUE;
7564
7565 --
7566 -- add TableLayout
7567 --
7568 IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7569
7570 BEGIN
7571 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7572
7573 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7574
7575 remove_TopLevel_Attributes(l_xml_table_node);
7576
7577 --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7578 l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7579
7580 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7581 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7582
7583 l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7584
7585 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7586 'oa:flowLayout','oa:tableLayout') THEN
7587
7588 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7589 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7590 ELSE
7591 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7592 END IF;
7593
7594 EXCEPTION
7595 WHEN OTHERS THEN
7596 NULL;
7597 END;
7598 END IF;
7599
7600 --
7601 -- BOM part
7602 --
7603 ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7604 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7605
7606 l_non_bom_content := TRUE;
7607
7608 IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE OR
7609 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7610 l_wrap_it := FALSE;
7611
7612 ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7613 l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7614 --
7615 -- add TableLayout
7616 --
7617 IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7618 BEGIN
7619 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7620
7621 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7622
7623 remove_TopLevel_Attributes(l_xml_table_node);
7624
7625 --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7626 l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7627
7628 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7629 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7630
7631 l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7632
7633 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7634 'oa:flowLayout','oa:tableLayout') THEN
7635
7636 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7637
7638 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7639 ELSE
7640 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7641 END IF;
7642 EXCEPTION
7643 WHEN OTHERS THEN
7644 DEBUG('create_UIXML_Element : '||SQLERRM);
7645 END;
7646 END IF;
7647 l_wrap_it := TRUE;
7648 ELSE
7649 l_wrap_it := FALSE;
7650 END IF;
7651
7652 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7653 g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7654 l_wrap_with_links := TRUE;
7655 END IF;
7656
7657 ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7658 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7659 CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7660 l_non_bom_content := FALSE;
7661 l_wrap_it := FALSE;
7662 ELSE
7663 l_non_bom_content := FALSE;
7664 END IF;
7665
7666 --
7667 -- parse document(template) which is going to be nested element
7668 --
7669 l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7670
7671 IF xmldom.isNull(l_subtree_doc) THEN
7672 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7673 p_token_name => 'UI_TEMPLATE',
7674 p_token_value => l_ctrl_template_name,
7675 p_fatal_error => TRUE);
7676
7677 RAISE WRONG_UI_TEMPLATE;
7678 END IF;
7679
7680 --
7681 -- get subdocument's root node
7682 --
7683 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7684
7685 IF l_template_is_used_by_ref=FALSE THEN
7686 handle_USER_ATTRIBUTE10(p_xml_root_node => l_xml_root_node,
7687 p_ui_def_id => p_ui_node.ui_def_id,
7688 p_ui_page_id => p_ui_node.page_id,
7689 p_ui_element_id => p_ui_node.element_id);
7690 END IF;
7691
7692 --
7693 -- remove common attributes of container and subtree
7694 --
7695 remove_TopLevel_Attributes(l_xml_root_node);
7696
7697 IF l_template_is_used_by_ref THEN
7698 l_element_signature_id := 6011;
7699 ELSE
7700 l_element_signature_id := p_ui_node.element_signature_id;
7701 END IF;
7702
7703 --
7704 -- set Attributes for this subtree = Template
7705 --
7706 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7707 p_ui_node => p_ui_node,
7708 p_element_signature_id => l_element_signature_id);
7709
7710 --
7711 -- set a special attribute "blockSize" if it is Table control
7712 --
7713 /* commented out according to request from 8/12/2004
7714 IF xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7715 set_Attribute(l_xml_root_node,
7716 'blockSize',
7717 TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7718 END IF;
7719 */
7720 IF l_template_is_used_by_ref THEN
7721
7722 --
7723 -- returns cloned DOM subtree
7724 --
7725 -- l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7726 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7727
7728 --
7729 -- remove non user attributes from top tag
7730 --
7731 remove_Non_User_Attributes(l_new_xml_root_node);
7732
7733 -- Remove user:Attribute10 if it exists -- Fix for USS Bug 12563210
7734 l_user_attribute10_value := get_Attribute_Value(l_new_xml_root_node,G_USER_ATTRIBUTE10_NAME);
7735 IF (l_user_attribute10_value IS NOT NULL) THEN
7736 xmldom.removeAttribute(xmldom.makeElement(l_new_xml_root_node),G_USER_ATTRIBUTE10_NAME);
7737 END IF;
7738
7739 --
7740 -- set "extends" attribute
7741 --
7742 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7743
7744 --
7745 -- remove content of template subtree
7746 --
7747 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7748
7749 --
7750 -- we need to get length of array of child nodes
7751 -- to go through the array in loop
7752 --
7753 l_length := xmldom.getLength(l_child_nodes_tbl);
7754 FOR k IN 0..l_length-1
7755 LOOP
7756 --
7757 -- get next child DOM node
7758 --
7759 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7760 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7761 END LOOP;
7762
7763 ELSE -- use UI Template by Copy
7764
7765 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7766
7767 l_length := xmldom.getLength(l_child_nodes_tbl);
7768 IF (l_length > 0) THEN
7769 FOR k IN 0..l_length-1
7770 LOOP
7771 --
7772 -- get next child DOM node
7773 --
7774 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7775 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7776
7777 IF k > 0 THEN
7778 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7779
7780 l_xml_node_name := xmldom.getNodeName(l_xml_node);
7781
7782 IF l_attribute_value IS NOT NULL THEN
7783 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7784 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
7785 END IF;
7786
7787 l_ancestor_node := get_Attribute_Value(l_xml_node,
7788 'ancestorNode');
7789 IF l_ancestor_node IS NOT NULL THEN
7790
7791 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7792 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7793
7794 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7795 IF NOT(xmldom.IsNull(l_xml_node)) THEN
7796 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7797
7798 set_Attribute(l_xml_node,
7799 'ancestorNode',
7800 l_ancestor_node);
7801 END IF;
7802 END IF;
7803
7804 --
7805 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7806 --
7807 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7808 l_old_switcher_xml_id := l_attribute_value;
7809 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7810 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7811 l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
7812 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
7813 p_cz_attribute_value => l_switcher_casename,
7814 px_xml_attribute_value => l_user_attribute3_value);
7815
7816 set_Attribute(l_xml_node,
7817 G_USER_ATTRIBUTE3_NAME,
7818 l_user_attribute3_value);
7819 END IF;
7820
7821 --
7822 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7823 --
7824 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7825 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7826 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
7827 set_Attribute(xmldom.makeElement(l_xml_node),
7828 'name',
7829 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
7830 handle_UI_CASE_Id(l_xml_node);
7831 END IF;
7832
7833 --
7834 -- if current tag is <oa:stackLayout>
7835 -- then replace old id with new one
7836 --
7837 IF (l_xml_node_name='oa:stackLayout' AND
7838 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7839 set_Attribute(xmldom.makeElement(l_xml_node),
7840 G_ID_ATTRIBUTE,
7841 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7842 END IF;
7843
7844 IF l_attribute_value IS NOT NULL THEN
7845 --
7846 -- create a new copies for corresponding entities ( captions, rules ,... )
7847 --
7848 copy_Node_Related_Entities(p_ui_def_id => p_ui_node.ui_def_id,
7849 p_ui_page_id => p_ui_node.page_id,
7850 p_xml_node => l_xml_node);
7851 END IF;
7852
7853 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7854 IF attribute_Value(l_xml_node, 'source') IS NULL AND
7855 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7856 set_Attribute(l_xml_node,
7857 'source',
7858 g_UI_Context.DRILLDOWN_IMAGE_URL);
7859 END IF;
7860
7861 l_user_attribute := get_Attribute_Value(l_xml_node,
7862 G_USER_ATTRIBUTE3_NAME);
7863
7864 IF l_user_attribute IS NOT NULL THEN
7865
7866 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7867
7868 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7869 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7870 px_xml_attribute_value => l_user_attribute);
7871
7872 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7873 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7874 px_xml_attribute_value => l_user_attribute);
7875 ELSE
7876 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7877
7878 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7879 g_UI_Context.ui_def_id,
7880 p_ui_node.page_id, p_ui_node.element_id);
7881
7882 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7883 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7884 px_xml_attribute_value => l_user_attribute);
7885
7886 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7887 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7888 px_xml_attribute_value => l_user_attribute);
7889
7890 END IF;
7891 END IF; -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7892
7893 BEGIN
7894 l_ui_action_id := get_UI_Action_Id(p_ui_node);
7895 EXCEPTION
7896 WHEN OTHERS THEN
7897 NULL;
7898 END;
7899
7900 IF l_ui_action_id IS NOT NULL THEN
7901
7902 set_User_Attribute(p_cz_attribute_name => 'actionId',
7903 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
7904 px_xml_attribute_value => l_user_attribute);
7905
7906 END IF;
7907
7908 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7909
7910 END IF; -- end of IF l_user_attribute IS NOT NULL
7911
7912 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7913
7914 --++++++ add template references ++++++
7915 add_Extends_Refs(p_xml_node => l_xml_node,
7916 p_ui_node => p_ui_node);
7917
7918 END IF; -- end of IF k > 0 THEN
7919 END LOOP;
7920 END IF;
7921
7922 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7923 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7924
7925 END IF;
7926
7927 IF l_wrap_it THEN
7928
7929 IF l_wrap_with_links THEN
7930
7931 BEGIN
7932 l_anchor_doc := parse_JRAD_Document(G_ANCHOR_TEMPLATE);
7933
7934 l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7935
7936 remove_TopLevel_Attributes(l_xml_anchor_node);
7937
7938 --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7939 l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7940
7941 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,get_Element_Id());
7942 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'ANCHOR_GENERATED_BY_UI_GEN');
7943
7944 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7945 l_new_xml_anchor_node);
7946
7947 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7948 l_new_xml_root_node);
7949
7950 EXCEPTION
7951 WHEN OTHERS THEN
7952 DEBUG('create_UIXML_Element() : '||SQLERRM);
7953 END;
7954
7955 ELSE -- don't wrap it with rowLayout+Link
7956
7957 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7958 l_new_xml_root_node);
7959
7960 END IF;
7961
7962 RETURN l_out_xml_node;
7963
7964 ELSE -- don't wrap with TableLayout
7965
7966 IF l_wrap_with_links THEN
7967 BEGIN
7968 l_anchor_doc := parse_JRAD_Document(G_LINK_TEMPLATE);
7969
7970 l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7971
7972 remove_TopLevel_Attributes(l_xml_anchor_node);
7973
7974 --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7975 l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7976
7977 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,
7978 '_czt'||to_char(p_ui_node.persistent_node_id)); -- fix for bug #4047136
7979 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'LINK_GENERATED_BY_UI_GEN');
7980 EXCEPTION
7981 WHEN OTHERS THEN
7982 DEBUG('create_UIXML_Element() : '||SQLERRM);
7983 END;
7984 END IF;
7985
7986 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7987 'oa:flowLayout','oa:tableLayout') THEN
7988
7989
7990 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7991
7992 IF l_wrap_with_links THEN
7993 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7994 l_new_xml_anchor_node);
7995 END IF;
7996 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7997 l_new_xml_root_node);
7998 ELSE
7999
8000 IF l_wrap_with_links THEN
8001 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8002 l_new_xml_anchor_node);
8003 END IF;
8004
8005 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8006 l_new_xml_root_node);
8007 END IF;
8008 RETURN l_out_xml_node;
8009 END IF;
8010
8011 END create_UIXML_Element;
8012
8013 --
8014 -- add new XML region
8015 --
8016 FUNCTION create_UIXML_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
8017 p_parent_xml_node xmldom.DOMNode)
8018 RETURN xmldom.DOMNode IS
8019
8020 l_subtree_doc xmldom.DOMDocument;
8021 l_xml_root_node xmldom.DOMNode;
8022 l_new_xml_root_node xmldom.DOMNode;
8023 l_out_xml_node xmldom.DOMNode;
8024 l_ui_contents_xml_node xmldom.DOMNode;
8025 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
8026
8027 BEGIN
8028
8029 l_jrad_doc := get_JRAD_Name(G_NSTD_CONTAINER_TEMPLATE_ID, G_GLOBAL_TEMPLATES_UI_DEF_ID);
8030
8031 --
8032 -- parse document(template) which is going to be nested element
8033 --
8034 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
8035
8036 IF xmldom.isNull(l_subtree_doc) THEN
8037 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
8038 p_token_name => 'UI_TEMPLATE',
8039 p_token_value => l_jrad_doc,
8040 p_fatal_error => TRUE);
8041 RAISE WRONG_UI_TEMPLATE;
8042 END IF;
8043
8044 --
8045 -- get subdocument's root node
8046 --
8047 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
8048
8049 --
8050 -- remove common attributes of container and subtree
8051 --
8052 remove_TopLevel_Attributes(l_xml_root_node);
8053
8054 --
8055 -- set Attributes for this subtree = Template
8056 --
8057 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
8058 p_ui_node => p_ui_node);
8059
8060 --
8061 -- this is a requirement from cz runtime : controllerClass must be =NULL
8062 --
8063 set_Attribute(l_xml_root_node,'controllerClass','');
8064
8065 --
8066 -- returns cloned DOM subtree
8067 --
8068 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8069 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8070
8071 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8072
8073 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
8074 'oa:flowLayout','oa:tableLayout','oa:rowLayout') THEN
8075
8076 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
8077 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
8078 l_new_xml_root_node);
8079 ELSE
8080 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
8081 l_new_xml_root_node);
8082 END IF;
8083
8084 RETURN l_out_xml_node;
8085
8086 END create_UIXML_Region;
8087
8088 --
8089 -- replace XML JRAD element
8090 --
8091 FUNCTION replace_UIXML_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
8092 p_parent_xml_node xmldom.DOMNode,
8093 p_xml_node_to_replace xmldom.DOMNode)
8094 RETURN xmldom.DOMNode IS
8095
8096 l_subtree_doc xmldom.DOMDocument;
8097 l_xml_root_node xmldom.DOMNode;
8098 l_new_xml_root_node xmldom.DOMNode;
8099 l_out_xml_node xmldom.DOMNode;
8100 l_tabxml_uicontens_node xmldom.DOMNode;
8101 l_tabxml_node xmldom.DOMNode;
8102 l_xml_node xmldom.DOMNode;
8103 l_parent_xml_node xmldom.DOMNode;
8104 l_child_nodes_tbl xmldom.DOMNodeList;
8105 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
8106 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
8107 l_user_attribute4 VARCHAR2(4000);
8108 l_user_attribute VARCHAR2(4000);
8109 l_drilldown_text_id NUMBER;
8110 l_ui_action_id NUMBER;
8111 l_length NUMBER;
8112 l_use_by_reference BOOLEAN;
8113 l_curr_parent_xml_node xmldom.DOMNode;
8114 l_attribute_value VARCHAR2(32000);
8115 l_xml_node_name VARCHAR2(4000);
8116 l_old_switcher_xml_id VARCHAR2(4000);
8117 l_user_attribute3_value VARCHAR2(32000);
8118 l_switcher_casename VARCHAR2(4000);
8119 l_new_attribute_value VARCHAR2(32000);
8120 l_switcher_xml_id VARCHAR2(4000);
8121 l_uicase_name VARCHAR2(4000);
8122
8123
8124 BEGIN
8125
8126 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
8127
8128 IF p_ui_node.ctrl_template_id IS NULL AND p_ui_node.element_type=G_UI_DRILLDOWN_NODE_TYPE THEN
8129 BEGIN
8130 l_new_xml_root_node := xmldom.removeChild(p_parent_xml_node,p_xml_node_to_replace);
8131 EXCEPTION
8132 WHEN OTHERS THEN
8133 l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8134 IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8135 l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8136 l_new_xml_root_node := xmldom.removeChild(l_tabxml_uicontens_node,p_xml_node_to_replace);
8137 END IF;
8138 END;
8139 RETURN p_parent_xml_node;
8140 END IF;
8141
8142 l_use_by_reference := is_Used_By_Reference(p_detailed_type_id => l_node.detailed_type_id,
8143 p_ctrl_template_id => p_ui_node.ctrl_template_id);
8144
8145 l_user_attribute4 := get_Attribute_Value(p_xml_node_to_replace, G_USER_ATTRIBUTE4_NAME);
8146 l_user_attribute := get_User_Attribute(l_user_attribute4, 'elementType');
8147
8148 IF l_user_attribute IS NOT NULL AND (NOT l_user_attribute = '6011') THEN
8149 l_use_by_reference := FALSE;
8150 END IF;
8151
8152 l_jrad_doc := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
8153
8154 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
8155
8156 IF xmldom.isNull(l_subtree_doc) THEN
8157 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
8158 p_token_name => 'UI_TEMPLATE',
8159 p_token_value => l_jrad_doc,
8160 p_fatal_error => TRUE);
8161 RAISE WRONG_UI_TEMPLATE;
8162 END IF;
8163
8164 --
8165 -- get subdocument's root node
8166 --
8167 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
8168
8169 --
8170 -- remove common attributes of container and subtree
8171 --
8172 remove_TopLevel_Attributes(l_xml_root_node);
8173
8174 --
8175 -- set Attributes for this subtree = Template
8176 --
8177 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
8178 p_ui_node => p_ui_node);
8179
8180 IF l_use_by_reference THEN
8181 --
8182 -- returns cloned DOM subtree
8183 --
8184 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
8185 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8186
8187
8188 --
8189 -- set "extends" attribute
8190 --
8191 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_jrad_doc);
8192
8193 l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8194 G_USER_ATTRIBUTE4_NAME);
8195 IF l_user_attribute4 IS NOT NULL THEN
8196 set_User_Attribute(p_cz_attribute_name => 'name',
8197 p_cz_attribute_value => p_ui_node.name,
8198 px_xml_attribute_value => l_user_attribute4);
8199 IF p_ui_node.element_signature_id IS NOT NULL THEN
8200 set_User_Attribute(p_cz_attribute_name => 'elementType',
8201 p_cz_attribute_value => '6011',
8202 px_xml_attribute_value => l_user_attribute4);
8203
8204 END IF;
8205 set_Attribute(l_new_xml_root_node,
8206 G_USER_ATTRIBUTE4_NAME,
8207 l_user_attribute4);
8208
8209 END IF;
8210
8211 --
8212 -- remove content of template subtree
8213 --
8214 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
8215
8216 --
8217 -- we need to get length of array of child nodes
8218 -- to go through the array in loop
8219 --
8220 l_length := xmldom.getLength(l_child_nodes_tbl);
8221 FOR k IN 0..l_length-1
8222 LOOP
8223 --
8224 -- get next child DOM node
8225 --
8226 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
8227 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
8228 END LOOP;
8229
8230 ELSE -- use by Copy
8231 l_child_nodes_tbl := xmldom.getElementsByTagName(xmldom.makeElement(l_xml_root_node), '*');
8232 l_length := xmldom.getLength(l_child_nodes_tbl);
8233 IF (l_length > 0) THEN
8234 FOR k IN 0..l_length-1
8235 LOOP
8236 --
8237 -- get next child DOM node
8238 --
8239 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
8240
8241 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8242
8243 IF attribute_Value(l_xml_node, 'source') IS NULL AND
8244 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
8245 set_Attribute(l_xml_node,
8246 'source',
8247 g_UI_Context.DRILLDOWN_IMAGE_URL);
8248 END IF;
8249
8250 l_user_attribute := get_Attribute_Value(l_xml_node,
8251 G_USER_ATTRIBUTE3_NAME);
8252
8253 IF l_user_attribute IS NOT NULL THEN
8254
8255 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
8256
8257 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
8258 g_UI_Context.ui_def_id,
8259 p_ui_node.page_id, p_ui_node.element_id);
8260
8261 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
8262 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
8263 px_xml_attribute_value => l_user_attribute);
8264
8265 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
8266 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
8267 px_xml_attribute_value => l_user_attribute);
8268
8269 END IF;
8270
8271
8272 BEGIN
8273 l_ui_action_id := get_UI_Action_Id(p_ui_node);
8274 EXCEPTION
8275 WHEN OTHERS THEN
8276 NULL;
8277 END;
8278
8279 IF l_ui_action_id IS NOT NULL THEN
8280
8281 set_User_Attribute(p_cz_attribute_name => 'actionId',
8282 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
8283 px_xml_attribute_value => l_user_attribute);
8284
8285 END IF;
8286
8287 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
8288
8289 END IF; -- end of IF l_user_attribute IS NOT NULL
8290 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8291
8292 IF k > 0 THEN
8293
8294 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
8295
8296 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
8297
8298 l_xml_node_name := xmldom.getNodeName(l_xml_node);
8299
8300 IF l_attribute_value IS NOT NULL THEN
8301 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
8302 l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
8303 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
8304 END IF;
8305
8306 --
8307 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
8308 --
8309 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
8310 l_old_switcher_xml_id := l_attribute_value;
8311 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
8312 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
8313 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
8314 l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
8315 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
8316 p_cz_attribute_value => l_switcher_casename,
8317 px_xml_attribute_value => l_user_attribute3_value);
8318
8319 set_Attribute(l_xml_node,
8320 G_USER_ATTRIBUTE3_NAME,
8321 l_user_attribute3_value);
8322 END IF;
8323
8324 --
8325 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
8326 --
8327 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
8328 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
8329 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
8330 set_Attribute(xmldom.makeElement(l_xml_node),
8331 'name',
8332 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
8333 handle_UI_CASE_Id(l_xml_node);
8334 END IF;
8335
8336 --
8337 -- if current tag is <oa:stackLayout>
8338 -- then replace old id with new one
8339 --
8340 IF (l_xml_node_name='oa:stackLayout' AND
8341 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
8342 set_Attribute(xmldom.makeElement(l_xml_node),
8343 G_ID_ATTRIBUTE,
8344 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
8345 END IF;
8346 END IF; -- end of IF k > 0 THEN
8347
8348 END LOOP;
8349 END IF; -- end of IF (l_length > 0) THEN
8350
8351 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8352 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8353
8354
8355 l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8356 G_USER_ATTRIBUTE4_NAME);
8357 IF l_user_attribute4 IS NOT NULL THEN
8358
8359 set_User_Attribute(p_cz_attribute_name => 'name',
8360 p_cz_attribute_value => p_ui_node.name,
8361 px_xml_attribute_value => l_user_attribute4);
8362
8363 IF p_ui_node.element_signature_id IS NOT NULL THEN
8364 set_User_Attribute(p_cz_attribute_name => 'elementType',
8365 p_cz_attribute_value => TO_CHAR(p_ui_node.element_signature_id),
8366 px_xml_attribute_value => l_user_attribute4);
8367
8368 END IF;
8369
8370 set_Attribute(l_new_xml_root_node,
8371 G_USER_ATTRIBUTE4_NAME,
8372 l_user_attribute4);
8373
8374 END IF;
8375
8376 END IF; -- end of use by Copy
8377
8378 l_parent_xml_node := xmldom.getParentNode(p_xml_node_to_replace);
8379 IF g_using_new_UI_refresh THEN
8380 g_dom_elements_tbl.DELETE(TO_NUMBER(p_ui_node.element_id));
8381 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8382 l_new_xml_root_node := xmldom.replaceChild(l_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8383 ELSE
8384 BEGIN
8385 l_new_xml_root_node := xmldom.replaceChild(p_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8386 EXCEPTION
8387 WHEN OTHERS THEN
8388 l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8389 IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8390 l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8391 l_new_xml_root_node := xmldom.replaceChild(l_tabxml_uicontens_node, l_new_xml_root_node, p_xml_node_to_replace);
8392 END IF;
8393 END;
8394 END IF;
8395 RETURN p_parent_xml_node;
8396
8397 EXCEPTION
8398 WHEN OTHERS THEN
8399 DEBUG('replace_UIXML_Element() : '||SQLERRM);
8400 RETURN p_parent_xml_node;
8401 END replace_UIXML_Element;
8402
8403 --vsingava IM-ER
8404 PROCEDURE change_to_basic_Layout(p_xml_node xmldom.DOMNode,
8405 p_user_attribute4 VARCHAR2,
8406 p_page_id NUMBER,
8407 p_amn_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
8408 l_layout_region_type VARCHAR2(10);
8409 l_element_type VARCHAR2(10);
8410 l_new_element_type VARCHAR2(10);
8411 l_view_name VARCHAR2(255);
8412 l_user_attribute1 VARCHAR2(2000);
8413 l_temp_value VARCHAR2(255);
8414 BEGIN
8415
8416 l_layout_region_type := get_User_Attribute(p_user_attribute4, 'layoutRegionType');
8417 l_element_type := get_User_Attribute(p_user_attribute4, 'elementType');
8418
8419 IF l_element_type = '6079' THEN
8420 l_new_element_type := '6006';
8421 ELSIF l_element_type = '6080' THEN
8422 l_new_element_type := '6004';
8423 ELSIF l_element_type = '6081' THEN
8424 l_new_element_type := '6007';
8425 ELSIF l_element_type = '6082' THEN
8426 l_new_element_type := '6003';
8427 ELSE
8428 -- l_element_type = '6083'
8429 l_new_element_type := '6001';
8430 END IF;
8431
8432 set_user_attribute(p_xml_node,
8433 G_USER_ATTRIBUTE4_NAME,
8434 'layoutRegionType',
8435 '0');
8436
8437 set_user_attribute(p_xml_node,
8438 G_USER_ATTRIBUTE4_NAME,
8439 'elementType',
8440 l_new_element_type);
8441
8442 l_user_attribute1 := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
8443
8444 IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
8445 -- This element has an AMN. So we need to change the view names also
8446 l_temp_value := remove_user_attribute(p_xml_node, G_USER_ATTRIBUTE3_NAME, 'nodeChildrenView');
8447 l_view_name := get_View_Name(p_amn_node, l_temp_value);
8448 set_user_attribute(p_xml_node,
8449 G_USER_ATTRIBUTE3_NAME,
8450 'nodeView',
8451 l_view_name);
8452
8453 END IF;
8454
8455
8456 END change_to_basic_Layout;
8457
8458
8459
8460 PROCEDURE refresh_Model_Path(p_ui_element_id VARCHAR2,
8461 p_ui_page_id NUMBER,
8462 p_base_persistent_node_id NUMBER, --vsingava IM-ER
8463 p_base_expl_id NUMBER,
8464 p_persistent_node_id NUMBER,
8465 p_xml_node_to_refresh xmldom.DOMNode) IS
8466
8467 l_new_model_path VARCHAR2(32000);
8468 l_current_model_path VARCHAR2(32000);
8469 l_user_attribute3 VARCHAR2(32000);
8470 l_ui_node_expl_id NUMBER;
8471 l_ui_action_id NUMBER;
8472
8473 BEGIN
8474
8475 IF p_persistent_node_id IS NOT NULL THEN
8476 --
8477 -- get value of "user:attribute1"
8478 --
8479 l_current_model_path := get_Attribute_Value(p_xml_node_to_refresh,
8480 G_USER_ATTRIBUTE1_NAME);
8481
8482 IF l_current_model_path IS NOT NULL THEN
8483
8484 SELECT model_ref_expl_id INTO l_ui_node_expl_id FROM CZ_UI_PAGE_ELEMENTS
8485 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_ui_page_id AND element_id=p_ui_element_id;
8486
8487 l_new_model_path := get_Runtime_Relative_Path(p_model_id => g_UI_Context.devl_project_id,
8488 p_base_persistent_node_id => p_base_persistent_node_id,
8489 p_base_expl_id => p_base_expl_id,
8490 p_persistent_node_id => p_persistent_node_id,
8491 p_ui_node_expl_id => l_ui_node_expl_id);
8492
8493
8494 IF l_new_model_path IS NOT NULL THEN
8495 --
8496 -- attribute1 is always used only for model_path
8497 --
8498 set_Attribute(p_xml_node_to_refresh,
8499 G_USER_ATTRIBUTE1_NAME,
8500 'model_path='||l_new_model_path);
8501 END IF;
8502
8503 END IF; -- end of IF l_current_model_path IS NOT NULL
8504 END IF; -- end of IF p_persistent_node_id IS NOT NULL
8505
8506 l_user_attribute3 := get_Attribute_Value(p_xml_node_to_refresh,
8507 G_USER_ATTRIBUTE3_NAME);
8508
8509 IF l_user_attribute3 IS NOT NULL THEN
8510
8511 BEGIN
8512 l_ui_action_id := TO_NUMBER(get_User_Attribute(l_user_attribute3,'actionId'));
8513 EXCEPTION
8514 WHEN OTHERS THEN
8515 l_ui_action_id := NULL;
8516 END;
8517
8518 IF l_ui_action_id IS NOT NULL THEN
8519 FOR i IN(SELECT target_persistent_node_id,target_expl_node_id FROM CZ_UI_ACTIONS
8520 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8521 source_page_id=p_ui_page_id AND
8522 element_id=p_ui_element_id AND
8523 target_node_path IS NOT NULL AND
8524 deleted_flag=G_NO_FLAG)
8525 LOOP
8526 l_new_model_path := get_Runtime_Relative_Path(p_model_id => g_UI_Context.devl_project_id,
8527 p_base_persistent_node_id => p_base_persistent_node_id,
8528 p_base_expl_id => p_base_expl_id,
8529 p_persistent_node_id => i.target_persistent_node_id,
8530 p_ui_node_expl_id => i.target_expl_node_id);
8531 IF l_new_model_path IS NOT NULL THEN
8532 UPDATE CZ_UI_ACTIONS
8533 SET target_node_path=l_new_model_path
8534 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8535 source_page_id=p_ui_page_id AND
8536 element_id=p_ui_element_id AND
8537 target_node_path<>l_new_model_path;
8538 END IF;
8539 END LOOP;
8540 END IF; -- end of IF l_action_id IS NOT NULL ...
8541
8542 END IF; -- end of IF l_user_attribute3 IS NOT NULL
8543
8544 EXCEPTION
8545 WHEN OTHERS THEN
8546 NULL;
8547 END refresh_Model_Path;
8548
8549 --vsingava IM-ER
8550 PROCEDURE refresh_All_Model_Paths(p_xml_doc xmldom.DOMDocument,
8551 p_page_id NUMBER) IS
8552
8553 l_root_node xmldom.DOMNode;
8554 l_pagebase_persistent_node_id NUMBER;
8555 l_pagebase_expl_id NUMBER;
8556
8557 PROCEDURE refresh_paths_recursive(p_xml_node xmldom.DOMNode,
8558 p_base_persistent_node_id NUMBER,
8559 p_base_expl_id NUMBER,
8560 p_inherited_persistent_id NUMBER,
8561 p_inherited_expl_id NUMBER) IS
8562
8563 l_node xmldom.DOMNode;
8564 l_nodeslist xmldom.DOMNodeList;
8565 l_empty_xml_node xmldom.DOMNode;
8566 l_length NUMBER;
8567 l_element_id VARCHAR2(32000);
8568 l_base_persistent_node_Id NUMBER;
8569 l_base_expl_id NUMBER;
8570 l_inherited_persistent_id NUMBER;
8571 l_inherited_expl_id NUMBER;
8572
8573 l_persistent_node_Id NUMBER;
8574 l_expl_id NUMBER;
8575
8576 l_user_attribute4_value VARCHAR2(2000);
8577 l_layout_region_type VARCHAR2(255);
8578 l_is_instance_list_layout BOOLEAN := FALSE;
8579 l_AMN_set BOOLEAN := FALSE;
8580 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE; --vsingava IM-ER
8581 BEGIN
8582
8583
8584
8585 l_nodeslist := xmldom.getChildrenByTagName(xmldom.makeElement(p_xml_node), '*');
8586 l_length := xmldom.getLength(l_nodeslist);
8587
8588 FOR i IN 0..l_length-1
8589 LOOP
8590
8591 l_base_persistent_node_Id := p_base_persistent_node_Id;
8592 l_base_expl_id := p_base_expl_id;
8593 l_inherited_persistent_id := p_inherited_persistent_id;
8594 l_inherited_expl_id := p_inherited_expl_id;
8595 l_AMN_set := FALSE;
8596 l_is_instance_list_layout := FALSE;
8597
8598 l_node := xmldom.item(l_nodeslist, i);
8599 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
8600 IF l_element_id IS NOT NULL THEN
8601 BEGIN
8602
8603 l_user_attribute4_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
8604 l_layout_region_type := get_User_Attribute(l_user_attribute4_value, 'layoutRegionType');
8605
8606 IF l_layout_region_type = '6078' THEN
8607 -- The node are dealing with is an Instance List Layout Region
8608 l_is_instance_list_layout := TRUE;
8609 DEBUG('Found an instance list layout region');
8610 END IF;
8611
8612 BEGIN
8613
8614 SELECT persistent_node_id, model_ref_expl_id INTO l_persistent_node_id, l_expl_id
8615 FROM CZ_UI_PAGE_ELEMENTS
8616 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8617 page_id=p_page_id AND
8618 element_id=l_element_id;
8619
8620 -- This element has an AMN associated to it directly
8621 l_inherited_persistent_id := l_persistent_node_id;
8622 l_inherited_expl_id := l_expl_id;
8623 l_AMN_set := TRUE;
8624
8625 EXCEPTION
8626 WHEN NO_DATA_FOUND THEN
8627 -- This node does not have an AMN set directly. So use the inherited values
8628 l_persistent_node_id := p_inherited_persistent_id;
8629 l_expl_id := p_inherited_expl_id;
8630 END;
8631
8632 IF l_is_instance_list_layout THEN
8633 -- check if the AMN is still instantiable
8634 l_model_node := getNodeByPersistentAndExplId(l_persistent_node_id, l_expl_id);
8635 IF( l_model_node.instantiable_flag = G_MANDATORY_INST_TYPE ) THEN
8636 DEBUG('Element ' || l_element_id || ' changes from instance list to basic layout');
8637
8638 -- The element should be changed from Instance List Layout to basic layout
8639 change_to_basic_Layout(l_node, l_user_attribute4_value, p_page_id, l_model_node);
8640 ELSE
8641 -- The AMN is still instantiable. Change the base node ids for the next level of recursion.
8642 l_base_persistent_node_Id := l_persistent_node_id;
8643 l_base_expl_id := l_expl_id;
8644 END IF;
8645
8646 END IF;
8647
8648 IF l_AMN_set THEN
8649 refresh_Model_Path(p_ui_element_id => l_element_id,
8650 p_ui_page_id => p_page_id,
8651 p_base_persistent_node_id => p_base_persistent_node_Id,
8652 p_base_expl_id => p_base_expl_id,
8653 p_persistent_node_id => l_persistent_node_id,
8654 p_xml_node_to_refresh => l_node);
8655 ELSE
8656 refresh_Model_Path(p_ui_element_id => l_element_id,
8657 p_ui_page_id => p_page_id,
8658 p_base_persistent_node_id => p_base_persistent_node_Id,
8659 p_base_expl_id => p_base_expl_id,
8660 p_persistent_node_id => NULL,
8661 p_xml_node_to_refresh => l_node);
8662 END IF;
8663 END;
8664
8665 END IF;
8666
8667 refresh_paths_recursive(l_node,
8668 l_base_persistent_node_Id,
8669 l_base_expl_id,
8670 l_inherited_persistent_id,
8671 l_inherited_expl_id);
8672
8673 END LOOP;
8674
8675 END refresh_paths_recursive;
8676
8677 BEGIN
8678
8679 l_root_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
8680
8681 DEBUG('In refresh all model paths: ' || p_page_Id);
8682
8683 SELECT persistent_node_id,pagebase_expl_node_id
8684 INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
8685 FROM CZ_UI_PAGES
8686 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
8687
8688 refresh_paths_recursive (l_root_node,
8689 l_pagebase_persistent_node_id,
8690 l_pagebase_expl_id,
8691 l_pagebase_persistent_node_id,
8692 l_pagebase_expl_id);
8693
8694 END refresh_All_Model_Paths;
8695
8696 ---------------------------------------------------------------------
8697 ------------------- JDR DOC BUILDER / XML Parsing -------------------
8698 ---------------------------------------------------------------------
8699
8700 --
8701 -- get attributes of a given DOM node
8702 -- Parameters : p_node - DOM node
8703 -- Return : array of attributes in format of attributes_tbl_type array
8704 --
8705 FUNCTION get_Attributes(p_node IN xmldom.DOMNode)
8706 RETURN attributes_tbl_type IS
8707
8708 l_attr_tbl attributes_tbl_type;
8709 l_node_map_tbl xmldom.DOMNamedNodeMap;
8710 l_node_attr xmldom.DOMNode;
8711 l_index NUMBER;
8712 l_length NUMBER;
8713
8714 BEGIN
8715 l_node_map_tbl := xmldom.getAttributes(p_node);
8716 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
8717 l_length := xmldom.getLength(l_node_map_tbl);
8718 --
8719 -- loop through attributes
8720 --
8721 l_index := 1;
8722 FOR i IN 0 .. l_length - 1
8723 LOOP
8724 l_node_attr := xmldom.item(l_node_map_tbl, i);
8725 l_attr_tbl(l_index).NAME := xmldom.getNodeName(l_node_attr);
8726 l_attr_tbl(l_index).VALUE := xmldom.getNodeValue(l_node_attr);
8727 l_index := l_index + 1;
8728 END LOOP;
8729 END IF;
8730 RETURN l_attr_tbl;
8731 END get_Attributes;
8732
8733 --
8734 -- set attributes for JRAD doc builder element p_jraddoc_node
8735 -- to attributes of DOM node p_node
8736 -- so this means that we just copy all attributes from DOM Node p_node
8737 -- to attributes of jdr_docbuilder.Element p_jraddoc_node
8738 -- it is used when DOM tree is converted to JRAD document
8739 -- Parameters : p_node - DOM node
8740 -- p_jraddoc_node - JRAD doc builder element
8741 -- Notes : it is not used in UI Generation/UI Refresh process directly
8742 --
8743 PROCEDURE set_Attributes(p_node xmldom.DOMNode,
8744 p_jraddoc_node jdr_docbuilder.Element) IS
8745
8746 l_attr_tbl attributes_tbl_type;
8747
8748 BEGIN
8749 l_attr_tbl := get_Attributes(p_node);
8750 IF l_attr_tbl.COUNT > 0 THEN
8751 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8752 LOOP
8753 jdr_docbuilder.setAttribute(p_jraddoc_node,
8754 l_attr_tbl(l).NAME,
8755 l_attr_tbl(l).VALUE);
8756 END LOOP;
8757 l_attr_tbl.DELETE;
8758 END IF;
8759 END set_Attributes;
8760
8761 --
8762 -- create JRAD element based on a given VARCHAR2 string
8763 -- which must be in the following form :
8764 -- <NS>:<Tag>
8765 -- Example : 'oa:button'
8766 --
8767 -- Parameters : p_node_name - VARCHAR2 string which contains string
8768 -- described above
8769 --
8770 FUNCTION createElement(p_node_name IN VARCHAR2)
8771 RETURN jdr_docbuilder.Element IS
8772
8773 l_ns VARCHAR2(255);
8774 l_el VARCHAR2(255);
8775
8776 BEGIN
8777 l_ns := SUBSTR(p_node_name, 1, INSTR(p_node_name, ':'));
8778 l_el := SUBSTR(p_node_name, INSTR(p_node_name, ':') + 1);
8779
8780 RETURN jdr_docbuilder.createElement(l_ns, l_el);
8781 END createElement;
8782
8783 --
8784 -- recursive procedure which
8785 -- scans DOM tree and create a corresponding JRAD document
8786 -- Parameters :
8787 -- p_nodeList - list of DOM nodes of the current level in DOM tree
8788 -- p_groupingTag - identifies XML grouping tag
8789 -- p_parent - identifes parent JRAD docbuilder element
8790 --
8791 PROCEDURE traverse_DOM_Tree(p_nodeList xmldom.DOMNodeList,
8792 p_groupingTag VARCHAR2,
8793 p_parent jdr_docbuilder.Element) IS
8794
8795 l_next_level_tbl xmldom.DOMNodeList;
8796 l_node xmldom.DOMNode;
8797 l_parent_xml_node xmldom.DOMNode;
8798 l_attr_tbl attributes_tbl_type;
8799 l_child jdr_docbuilder.Element;
8800 l_tag_name VARCHAR2(255);
8801 l_parent_tag_name VARCHAR2(255);
8802 l_grouping_tag VARCHAR2(255);
8803 l_ns VARCHAR2(255);
8804 l_gr VARCHAR2(255);
8805 l_attr_value VARCHAR2(32000);
8806 l_st VARCHAR2(1) := '';
8807 l_length NUMBER;
8808
8809 BEGIN
8810
8811 --
8812 -- now we have a DOM tree of the target JRAD document
8813 -- and we need to populate JRAD tables by using jdr_docbuilder API
8814 --
8815 l_length := xmldom.getLength(p_nodeList);
8816
8817 FOR i IN 0 .. l_length - 1
8818 LOOP
8819 l_node := xmldom.item(p_nodeList, i);
8820
8821 l_tag_name := xmldom.getNodeName(l_node);
8822
8823 l_parent_xml_node := xmldom.getParentNode(l_node);
8824
8825 IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
8826 l_parent_tag_name := xmldom.getNodeName(l_parent_xml_node);
8827 END IF;
8828
8829 l_grouping_tag := '';
8830
8831 l_attr_tbl := get_Attributes(l_node);
8832
8833 IF l_attr_tbl.COUNT = 0 AND l_tag_name NOT IN('ui:firePartialAction') THEN
8834
8835 --
8836 -- this is grouping tag
8837 --
8838 l_grouping_tag := l_tag_name;
8839
8840 END IF;
8841
8842 l_st := NULL;
8843
8844 IF p_groupingTag IS NOT NULL THEN
8845
8846 l_child := createElement(l_tag_name);
8847
8848 l_st := G_YES_FLAG;
8849
8850 IF l_attr_tbl.COUNT > 0 THEN
8851 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8852 LOOP
8853 l_attr_value := l_attr_tbl(l).VALUE;
8854
8855 l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8856 l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8857 l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8858 l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8859 l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8860
8861 jdr_docbuilder.setAttribute(l_child,
8862 l_attr_tbl(l).NAME,
8863 l_attr_value);
8864 END LOOP;
8865 l_attr_tbl.DELETE;
8866 END IF; -- end of IF l_attr_tbl.COUNT > 0 THEN
8867
8868 l_ns := SUBSTR(p_groupingTag, 1, INSTR(p_groupingTag, ':'));
8869 l_gr := SUBSTR(p_groupingTag, INSTR(p_groupingTag, ':') + 1);
8870
8871 IF l_ns IS NULL THEN
8872 l_ns := 'jrad:';
8873 END IF;
8874 jdr_docbuilder.addChild(p_parent, l_ns, l_gr, l_child);
8875
8876 /* new jdr_docbuilder function */
8877
8878 ELSE
8879 IF (l_tag_name='ui:case' AND
8880 l_parent_tag_name IN('oa:switcher')) OR
8881 (l_tag_name='oa:stackLayout' AND l_parent_tag_name = 'ui:case') THEN
8882
8883 l_child := createElement(l_tag_name);
8884
8885 l_st := G_YES_FLAG;
8886 IF l_attr_tbl.COUNT > 0 THEN
8887 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8888 LOOP
8889 l_attr_value := l_attr_tbl(l).VALUE;
8890
8891 l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8892 l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8893 l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8894 l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8895 l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8896
8897 jdr_docbuilder.setAttribute(l_child,
8898 l_attr_tbl(l).NAME,
8899 l_attr_value);
8900
8901 END LOOP;
8902 l_attr_tbl.DELETE;
8903 END IF;
8904
8905 jdr_docbuilder.addChild(p_parent, l_child);
8906
8907 END IF;
8908
8909 NULL;
8910 END IF; -- end of IF p_groupingTag IS NOT NULL THEN
8911
8912 l_next_level_tbl := xmldom.getChildNodes(l_node);
8913 IF NOT(xmldom.isNull(l_next_level_tbl)) AND
8914 xmldom.getLENGTH(l_next_level_tbl) <> 0 THEN
8915
8916 IF l_st IS NULL THEN
8917 traverse_DOM_Tree(l_next_level_tbl,
8918 l_grouping_tag,
8919 p_parent);
8920 ELSE
8921 traverse_DOM_Tree(l_next_level_tbl,
8922 l_grouping_tag,
8923 l_child);
8924 END IF;
8925 END IF;
8926
8927 END LOOP;
8928
8929 END traverse_DOM_Tree;
8930
8931 FUNCTION get_JRADNLS_Lang RETURN VARCHAR2 IS
8932 l_lang VARCHAR2(255);
8933 BEGIN
8934 SELECT ISO_LANGUAGE||'-'||
8935 ISO_TERRITORY
8936 INTO l_lang
8937 FROM FND_LANGUAGES_VL
8938 WHERE language_code=USERENV('LANG');
8939 RETURN l_lang;
8940 EXCEPTION
8941 WHEN OTHERS THEN
8942 RETURN 'EN-US';
8943 END get_JRADNLS_Lang;
8944
8945 --
8946 -- convert DOM Tree to JRAD record sets
8947 -- by ising DOM methods AND jdr_docbuilder API
8948 -- Parameters : p_jrad_doc_name - specifies full JRAD name of
8949 -- document that will be created from DOM tree
8950 -- which is identified by global DOM Document variable g_DOC
8951 --
8952 PROCEDURE convert_DOM_to_JRAD(p_dom_root_node xmldom.DOMNode,
8953 p_jrad_doc_name IN VARCHAR2) IS
8954
8955 l_topLevel jdr_docbuilder.Element;
8956 l_status PLS_INTEGER;
8957 l_lang VARCHAR2(255);
8958 BEGIN
8959
8960 --g_DOC := p_doc;
8961
8962 --
8963 -- refresh global jdr_docbuilder's structures
8964 --
8965 jdr_docbuilder.refresh;
8966
8967 --
8968 -- remove top level xml attributes - jdrdocbuilder always adds these attributes
8969 -- so we don't need to have a duplicates
8970 --
8971 remove_TopLevel_Attributes(p_dom_root_node);
8972
8973 l_lang := get_JRADNLS_Lang();
8974 --
8975 -- create a target JRAD document
8976 --
8977 g_JRADDOC := jdr_docbuilder.createDocument(p_jrad_doc_name, l_lang);
8978
8979 --
8980 -- create root element of the target JRAD document
8981 --
8982 l_topLevel := createElement(xmldom.getNodeName(p_dom_root_node));
8983
8984 --
8985 -- set top level attributes
8986 --
8987 set_Attributes(p_dom_root_node, l_topLevel);
8988
8989 --
8990 -- set JRAD top level node
8991 --
8992 jdr_docbuilder.setTopLevelElement(g_JRADDOC, l_topLevel);
8993
8994 --
8995 -- modify the source DOM tree and create the target JRAD document
8996 -- traverse_DOM_Tree() is recursive procedure
8997 --
8998 traverse_DOM_Tree(xmldom.getChildNodes(p_dom_root_node),
8999 '',
9000 l_topLevel);
9001
9002 --
9003 -- finally SAVE the target JRAD document
9004 --
9005 l_status := jdr_docbuilder.SAVE;
9006
9007 END convert_DOM_to_JRAD;
9008
9009 --
9010 -- save JRAD document
9011 --
9012 PROCEDURE Save_Document(p_xml_doc xmldom.DOMDocument,
9013 p_doc_name IN VARCHAR2) IS
9014 l_dom_root_node xmldom.DOMNode;
9015 BEGIN
9016
9017 --
9018 -- get Document's root node
9019 --
9020 l_dom_root_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
9021 convert_DOM_to_JRAD(p_dom_root_node => l_dom_root_node, p_jrad_doc_name => p_doc_name);
9022
9023 END Save_Document;
9024
9025 --
9026 -- save JRAD document
9027 --
9028 PROCEDURE Save_As_Document(p_xml_root_node xmldom.DOMNode,
9029 p_doc_name IN VARCHAR2) IS
9030 BEGIN
9031
9032 convert_DOM_to_JRAD(p_dom_root_node => p_xml_root_node, p_jrad_doc_name => p_doc_name);
9033
9034 END Save_As_Document;
9035
9036 ---------------------------------------------------------------------
9037 ---------- end of JDR DOC BUILDER / XML Parsing Part ---------------
9038 ---------------------------------------------------------------------
9039
9040 PROCEDURE set_UI_Global_Entities IS
9041 BEGIN
9042
9043 IF NVL(g_UI_Context.preserve_model_hierarchy,G_YES_FLAG) = G_YES_FLAG THEN
9044 g_suppress_refresh_flag := G_NO_FLAG;
9045 ELSE
9046 g_suppress_refresh_flag := G_YES_FLAG;
9047 END IF;
9048
9049 SELECT root_element_signature_id
9050 INTO g_DRILLDOWN_ELEM_SIGNATURE_ID
9051 FROM CZ_UI_TEMPLATES
9052 WHERE template_id=g_DRILLDOWN_TEMPLATE_ID AND
9053 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
9054 deleted_flag=G_NO_FLAG;
9055
9056 IF g_DRILLDOWN_TEMPLATE_ID=G_DRILLDOWN_BUTTON_TEMPLATE_ID THEN
9057 g_DRILLDOWN_B_SIGNATURE_ID := g_DRILLDOWN_ELEM_SIGNATURE_ID;
9058 ELSE
9059 SELECT root_element_signature_id
9060 INTO g_DRILLDOWN_B_SIGNATURE_ID
9061 FROM CZ_UI_TEMPLATES
9062 WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
9063 template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9064 deleted_flag=G_NO_FLAG;
9065 END IF;
9066
9067 SELECT TEMPLATE_TOKEN INTO G_CAPTION_RULE_TOKENNAME FROM CZ_RULES
9068 WHERE rule_id=G_DEFAULT_CAPTION_RULE_ID;
9069
9070 END set_UI_Global_Entities;
9071
9072 --
9073 -- get UI context
9074 --
9075 FUNCTION get_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
9076 BEGIN
9077 RETURN get_UI_Def_Node(p_ui_def_id);
9078 END get_UI_Context;
9079
9080 --
9081 -- set global UI context
9082 --
9083 PROCEDURE set_UI_Context(p_ui_def_id IN NUMBER) IS
9084 l_ui_def_id NUMBER;
9085 BEGIN
9086 l_ui_def_id := p_ui_def_id; -- this is to handle bug in 9i PL/SQL
9087 g_UI_Context := get_UI_Context(l_ui_def_id);
9088
9089 IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
9090 g_UI_Context.ROWS_PER_TABLE := 1000000;
9091 END IF;
9092
9093 IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
9094 g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
9095 END IF;
9096
9097 END set_UI_Context;
9098
9099 --
9100 -- set current global UI Context
9101 -- ( UI Generation mode )
9102 --
9103 FUNCTION create_UI_Context(p_model_id IN NUMBER,
9104 p_master_template_id IN NUMBER DEFAULT NULL,
9105 p_ui_name IN VARCHAR2 DEFAULT NULL,
9106 p_description IN VARCHAR2 DEFAULT NULL,
9107 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
9108 p_create_empty_ui IN VARCHAR2 DEFAULT NULL)
9109 RETURN CZ_UI_DEFS%ROWTYPE IS
9110
9111 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
9112 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
9113 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
9114 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
9115 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
9116 l_master_template_id NUMBER;
9117
9118 BEGIN
9119 l_master_template_id := p_master_template_id; -- this is to handle bug in 9i PL/SQL
9120
9121 --
9122 -- set UI context as UI Master Template Setting
9123 --
9124 set_UI_Context(l_master_template_id);
9125 g_UI_Context.from_master_template_id := l_master_template_id;
9126
9127 IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
9128 g_UI_Context.ROWS_PER_TABLE := 1000000;
9129 END IF;
9130 IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
9131 g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
9132 END IF;
9133
9134 --
9135 -- allocate a new ui_def_id for new UI
9136 --
9137 g_UI_Context.ui_def_id := allocateId('CZ_UI_DEFS_S');
9138 g_UI_Context.devl_project_id := p_model_id;
9139 g_UI_Context.component_id := p_model_id;
9140 g_UI_Context.master_template_flag := G_NO_FLAG;
9141 g_UI_Context.seeded_flag := G_NO_FLAG;
9142 g_UI_Context.ui_style := G_OA_STYLE_UI;
9143 g_UI_Context.from_master_template_id := NVL(l_master_template_id,G_DEFAULT_MASTER_TEMPLATE_ID);
9144 g_UI_Context.empty_ui_flag := NVL(p_create_empty_ui,G_NO_FLAG);
9145
9146 IF p_create_empty_ui IS NULL OR p_create_empty_ui='0' THEN
9147 g_UI_Context.suppress_refresh_flag := '0';
9148 ELSE
9149 g_UI_Context.suppress_refresh_flag := '1';
9150 END IF;
9151
9152 g_UI_Context.persistent_ui_def_id := g_UI_Context.ui_def_id;
9153 g_UI_Context.desc_text := p_description;
9154 g_UI_Context.model_timestamp := SYSDATE;
9155 g_UI_Context.ui_status := G_NEW_UI_STATUS;
9156 g_UI_Context.show_all_nodes_flag := NVL(p_show_all_nodes,G_NO_FLAG);
9157
9158 IF g_UI_Context.start_url IS NULL THEN
9159 g_UI_Context.start_url := G_DEFAULT_START_URL;
9160 END IF;
9161
9162 IF g_UI_Context.page_layout IS NULL THEN
9163 g_UI_Context.page_layout := G_DEFAULT_PAGE_LAYOUT;
9164 END IF;
9165
9166 g_ui_def_nodes_tbl(g_UI_Context.ui_def_id) := g_UI_Context;
9167
9168 --
9169 -- count number of UIs for a given model
9170 --
9171 SELECT COUNT(ui_def_id) + 1
9172 INTO g_UI_Context.tree_seq
9173 FROM CZ_UI_DEFS
9174 WHERE component_id = p_model_id AND
9175 deleted_flag = G_NO_FLAG;
9176
9177 IF p_ui_name IS NULL THEN
9178 SELECT NAME || ' User Interface (' || TO_CHAR(g_UI_Context.tree_seq) || ')'
9179 INTO g_UI_Context.NAME
9180 FROM CZ_DEVL_PROJECTS
9181 WHERE devl_project_id = p_model_id;
9182 ELSE
9183 g_UI_Context.NAME := p_ui_name;
9184 END IF;
9185
9186 set_UI_Global_Entities();
9187
9188 --
9189 -- create local UI Templates if they need to be created
9190 --
9191 create_Local_UI_Templates();
9192
9193 INSERT INTO CZ_UI_DEFS
9194 (UI_DEF_ID,
9195 DESC_TEXT,
9196 NAME,
9197 DEVL_PROJECT_ID,
9198 COMPONENT_ID,
9199 TREE_SEQ,
9200 UI_STYLE,
9201 GEN_VERSION,
9202 TREENODE_DISPLAY_SOURCE,
9203 GEN_HEADER,
9204 LOOK_AND_FEEL,
9205 CONTROLS_PER_SCREEN,
9206 PRIMARY_NAVIGATION,
9207 PERSISTENT_UI_DEF_ID,
9208 MODEL_TIMESTAMP,
9209 UI_STATUS,
9210 PAGE_SET_ID,
9211 START_PAGE_ID,
9212 ERR_RUN_ID,
9213 START_URL,
9214 PAGE_LAYOUT,
9215 PRICE_UPDATE,
9216 SEEDED_FLAG,
9217 MASTER_TEMPLATE_FLAG,
9218 PRICE_DISPLAY,
9219 FROM_MASTER_TEMPLATE_ID,
9220 PAGIN_MAXCONTROLS,
9221 PAGIN_NONINST,
9222 PAGIN_NONINST_REFCOMP,
9223 CONTROL_LAYOUT,
9224 PAGIN_DRILLDOWNCTRL,
9225 OUTER_TEMPLATE_USAGE,
9226 PAGIN_BOMOC,
9227 BOMUI_LAYOUT,
9228 BOMQTYINPUTCTRLS,
9229 CTRLTEMPLUSE_BOM,
9230 CTRLTEMPLUSE_NONBOM,
9231 NONBOM_UILAYOUT,
9232 CTRLTEMPLUSE_COMMON,
9233 CTRLTEMPLUSE_REQDMSG,
9234 CTRLTEMPLUSE_OPTMSG,
9235 MENU_CAPTION_RULE_ID,
9236 PAGE_CAPTION_RULE_ID,
9237 PRESERVE_MODEL_HIERARCHY,
9238 EMPTY_UI_FLAG,
9239 SHOW_TRAIN,
9240 PAGINATION_SLOT,
9241 DRILLDOWN_CONTROL_TEXT_ID,
9242 DRILLDOWN_IMAGE_URL,
9243 ROWS_PER_TABLE,
9244 CTRLTEMPLATEUSE_BUTTONBAR,
9245 CTRLTEMPLATEUSE_UTILITYPAGE,
9246 OPTION_SORT_SELECT_FIRST,
9247 OPTION_SORT_ORDER,
9248 OPTION_SORT_METHOD,
9249 SHOW_ALL_NODES_FLAG,
9250 PAGE_STATUS_TEMPLATE_USAGE,
9251 suppress_refresh_flag,
9252 DELETED_FLAG,
9253 UI_TIMESTAMP_REFRESH,
9254 DRILLDOWN_TX_TYPE,
9255 CONTENT_LAST_UPDATE_DATE,
9256 DISABLE_AUTOOVERRIDE_FLAG
9257 )
9258 SELECT g_UI_Context.ui_def_id,
9259 g_UI_Context.desc_text,
9260 g_UI_Context.NAME,
9261 g_UI_Context.devl_project_id,
9262 g_UI_Context.component_id,
9263 g_UI_Context.tree_seq,
9264 g_UI_Context.ui_style,
9265 G_GEN_VERSION,
9266 TREENODE_DISPLAY_SOURCE,
9267 G_GEN_HEADER,
9268 LOOK_AND_FEEL,
9269 CONTROLS_PER_SCREEN,
9270 PRIMARY_NAVIGATION,
9271 g_UI_Context.persistent_ui_def_id,
9272 g_UI_Context.model_timestamp,
9273 g_UI_Context.ui_status,
9274 g_UI_Context.page_set_id,
9275 g_UI_Context.start_page_id,
9276 g_UI_Context.err_run_id,
9277 g_UI_Context.start_url,
9278 g_UI_Context.page_layout,
9279 G_DEFAULT_PRICE_UPDATE,
9280 '0',
9281 '0',
9282 G_DEFAULT_PRICE_DISPLAY,
9283 g_UI_Context.from_master_template_id,
9284 PAGIN_MAXCONTROLS,
9285 PAGIN_NONINST,
9286 PAGIN_NONINST_REFCOMP,
9287 CONTROL_LAYOUT,
9288 PAGIN_DRILLDOWNCTRL,
9289 OUTER_TEMPLATE_USAGE,
9290 PAGIN_BOMOC,
9291 BOMUI_LAYOUT,
9292 BOMQTYINPUTCTRLS,
9293 CTRLTEMPLUSE_BOM,
9294 CTRLTEMPLUSE_NONBOM,
9295 NONBOM_UILAYOUT,
9296 CTRLTEMPLUSE_COMMON,
9297 CTRLTEMPLUSE_REQDMSG,
9298 CTRLTEMPLUSE_OPTMSG,
9299 MENU_CAPTION_RULE_ID,
9300 PAGE_CAPTION_RULE_ID,
9301 PRESERVE_MODEL_HIERARCHY,
9302 NVL(p_create_empty_ui, G_NO_FLAG),
9303 SHOW_TRAIN,
9304 PAGINATION_SLOT,
9305 DRILLDOWN_CONTROL_TEXT_ID,
9306 DRILLDOWN_IMAGE_URL,
9307 ROWS_PER_TABLE,
9308 CTRLTEMPLATEUSE_BUTTONBAR,
9309 CTRLTEMPLATEUSE_UTILITYPAGE,
9310 OPTION_SORT_SELECT_FIRST,
9311 OPTION_SORT_ORDER,
9312 OPTION_SORT_METHOD,
9313 p_show_all_nodes,
9314 PAGE_STATUS_TEMPLATE_USAGE,
9315 g_UI_Context.suppress_refresh_flag,
9316 DELETED_FLAG,
9317 SYSDATE,
9318 DRILLDOWN_TX_TYPE,
9319 CONTENT_LAST_UPDATE_DATE,
9320 DISABLE_AUTOOVERRIDE_FLAG
9321 FROM CZ_UI_DEFS
9322 WHERE ui_def_id = g_UI_Context.from_master_template_id;
9323
9324 --
9325 -- get root model node
9326 --
9327 l_node := get_Model_Node(p_model_id);
9328
9329 --
9330 -- create root UI page
9331 --
9332 l_page_ui_node := create_UI_Page(p_node => l_node,
9333 x_page_set_id => l_page_set_id,
9334 x_page_set_type => l_page_set_type,
9335 x_page_ref_id => l_page_ref_id);
9336
9337 g_UI_Context.start_page_id := l_page_ui_node.page_id;
9338 g_UI_Context.page_set_id := l_page_set_id;
9339
9340 UPDATE CZ_UI_DEFS
9341 SET start_page_id=g_UI_Context.start_page_id,
9342 page_set_id=g_UI_Context.page_set_id
9343 WHERE ui_def_id=g_UI_Context.ui_def_id;
9344
9345 RETURN g_UI_Context;
9346
9347 END create_UI_Context;
9348
9349 --
9350 -- get UI context of target UI
9351 --
9352 FUNCTION get_Target_UI_Context(p_ui_def_node IN CZ_UI_DEFS%ROWTYPE,
9353 p_reference_id IN NUMBER)
9354 RETURN CZ_UI_DEFS%ROWTYPE IS
9355 l_init_ui_def_id NUMBER;
9356 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
9357 l_old_context CZ_UI_DEFS%ROWTYPE;
9358 BEGIN
9359 l_init_ui_def_id := p_ui_def_node.ui_def_id;
9360 l_old_context := g_UI_Context;
9361
9362 SELECT *
9363 INTO l_target_ui_def_node
9364 FROM CZ_UI_DEFS
9365 WHERE ui_def_id = (SELECT MAX(ui_def_id)
9366 FROM CZ_UI_DEFS
9367 WHERE devl_project_id = p_reference_id AND
9368 ui_status IN (G_PROCESSED_UI_STATUS,G_NEW_UI_STATUS) AND
9369 deleted_flag = G_NO_FLAG);
9370
9371 /* *** bug #3848809 ***
9372 IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
9373 l_target_ui_def_node.PRIMARY_NAVIGATION <> G_MODEL_TREE_MENU THEN
9374
9375 l_target_ui_def_node := create_UI_Context(p_model_id => p_reference_id,
9376 p_master_template_id => p_ui_def_node.from_master_template_id,
9377 p_show_all_nodes => p_ui_def_node.show_all_nodes_flag,
9378 p_create_empty_ui => p_ui_def_node.empty_ui_flag);
9379 --
9380 -- set global UI context
9381 --
9382 set_UI_Context(l_init_ui_def_id);
9383
9384 RETURN l_target_ui_def_node;
9385
9386 ELSE
9387 */
9388 RETURN l_target_ui_def_node;
9389 -- END IF;
9390
9391 EXCEPTION
9392 WHEN NO_DATA_FOUND THEN
9393
9394 l_target_ui_def_node := create_UI_Context(p_model_id => p_reference_id,
9395 p_master_template_id => p_ui_def_node.from_master_template_id,
9396 p_show_all_nodes => p_ui_def_node.show_all_nodes_flag,
9397 p_create_empty_ui => p_ui_def_node.empty_ui_flag);
9398 --
9399 -- set global UI context
9400 --
9401 --set_UI_Context(l_init_ui_def_id);
9402 g_UI_Context := l_old_context;
9403
9404 RETURN l_target_ui_def_node;
9405 END get_Target_UI_Context;
9406
9407 FUNCTION find_CX_On_UI_Page(p_page_id IN NUMBER,
9408 p_component_id IN NUMBER,
9409 p_command_name IN VARCHAR2)
9410 RETURN VARCHAR2 IS
9411
9412 l_page_persistent_node_id NUMBER;
9413
9414 BEGIN
9415
9416 SELECT persistent_node_id INTO l_page_persistent_node_id
9417 FROM CZ_UI_PAGES
9418 WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
9419
9420 FOR i IN (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
9421 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9422 page_id IN(SELECT page_id FROM CZ_UI_PAGES
9423 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9424 persistent_node_id=l_page_persistent_node_id AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)) AND
9425 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
9426 persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
9427 WHERE ps_node_id=p_component_id)
9428 AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
9429 LOOP
9430 FOR k IN(SELECT ui_action_id FROM CZ_UI_ACTIONS
9431 WHERE ui_def_id=g_UI_Context.ui_def_id AND element_id=i.element_id AND
9432 cx_command_name=p_command_name AND deleted_flag=G_NO_FLAG)
9433 LOOP
9434 RETURN i.element_id;
9435 END LOOP;
9436 END LOOP;
9437 -- no CX on the page
9438 RETURN G_NO_FLAG;
9439 END find_CX_On_UI_Page;
9440
9441 --
9442 -- create new CX button
9443 --
9444 PROCEDURE add_CX_Button(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
9445 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
9446
9447 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9448 l_parent_element_id CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
9449 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
9450 l_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
9451 l_page_path VARCHAR2(32000);
9452 l_ui_intl_text_id INTEGER;
9453 l_counter INTEGER;
9454 l_new_node BOOLEAN := FALSE;
9455
9456 l_pb_model_ref_expl_id NUMBER;
9457 l_pb_persistent_node_id NUMBER;
9458 l_persistent_id NUMBER;
9459 l_ref_model_id NUMBER;
9460 l_persistent_intl_text_id NUMBER;
9461 BEGIN
9462
9463 IF p_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9464 RETURN;
9465 END IF;
9466
9467 FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.name
9468 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9469 WHERE a.devl_project_id=p_node.devl_project_id AND
9470 a.component_id=p_node.ps_node_id AND
9471 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9472 a.deleted_flag=G_NO_FLAG AND
9473 a.disabled_flag=G_NO_FLAG AND
9474 a.invalid_flag=G_NO_FLAG AND
9475 b.rule_id=a.rule_id AND
9476 b.deleted_flag=G_NO_FLAG AND
9477 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9478 data_value IS NOT NULL)
9479 LOOP
9480 -- do not create a CX for instantiable reference with
9481 -- instantiation_scope= INSTANCE
9482 IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9483 p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9484 i.INSTANTIATION_SCOPE=1 THEN
9485 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9486 p_token_name1 => 'EVENT_NAME',
9487 p_token_value1 => i.data_value,
9488 p_token_name2 => 'RULE_NAME',
9489 p_token_value2 => i.name,
9490 p_fatal_error => FALSE);
9491 RETURN;
9492 END IF;
9493 IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9494
9495 l_element_id := get_Element_Id();
9496 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9497 INSERT INTO CZ_INTL_TEXTS
9498 (INTL_TEXT_ID,
9499 TEXT_STR,
9500 DELETED_FLAG,
9501 SEEDED_FLAG,
9502 UI_DEF_ID,
9503 MODEL_ID,
9504 UI_PAGE_ID,
9505 UI_PAGE_ELEMENT_ID
9506 )
9507 VALUES
9508 (l_ui_intl_text_id,
9509 i.data_value,
9510 G_NO_FLAG,
9511 G_NO_FLAG,
9512 g_UI_Context.ui_def_id,
9513 g_UI_Context.devl_project_id,
9514 p_ui_node.page_id,
9515 l_element_id
9516 );
9517
9518 SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9519 FROM CZ_INTL_TEXTS
9520 WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9521
9522 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9523
9524 IF p_ui_node.parent_element_id IS NULL THEN
9525 l_parent_element_id := p_ui_node.element_id;
9526 ELSE
9527 l_parent_element_id := p_ui_node.parent_element_id;
9528 END IF;
9529 l_new_node := TRUE;
9530
9531 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9532 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9533 page_id=p_ui_node.page_id AND
9534 ctrl_template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9535 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9536
9537 l_name := G_DRILLDOWN_TEMPLATE_NAME||' - '||TO_CHAR(l_counter);
9538
9539 INSERT INTO CZ_UI_PAGE_ELEMENTS
9540 (ui_def_id,
9541 persistent_node_id,
9542 parent_persistent_node_id,
9543 region_persistent_node_id,
9544 pagebase_persistent_node_id,
9545 page_id,
9546 base_page_flag,
9547 seq_nbr,
9548 ctrl_template_id,
9549 ctrl_template_ui_def_id,
9550 element_id,
9551 parent_element_id,
9552 element_type,
9553 instantiable_flag,
9554 model_ref_expl_id,
9555 element_signature_id,
9556 name,
9557 deleted_flag)
9558 VALUES
9559 (p_ui_node.ui_def_id,
9560 p_node.persistent_node_id,
9561 p_node.parent_persistent_node_id,
9562 p_ui_node.region_persistent_node_id,
9563 p_ui_node.pagebase_persistent_node_id,
9564 p_ui_node.page_id,
9565 NULL,
9566 p_ui_node.seq_nbr+1,
9567 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9568 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9569 l_element_id,
9570 l_parent_element_id,
9571 G_UI_CX_BUTTON_NODE_TYPE,
9572 NULL,
9573 p_ui_node.model_ref_expl_id,
9574 g_DRILLDOWN_B_SIGNATURE_ID,
9575 l_name,
9576 G_MARK_TO_ADD);
9577
9578 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9579
9580 INSERT INTO CZ_UI_ACTIONS
9581 (
9582 ui_action_id
9583 ,ui_def_id
9584 ,source_page_id
9585 ,context_component_id
9586 ,element_id
9587 ,render_condition_id
9588 ,ui_action_type
9589 ,target_ui_def_id
9590 ,target_persistent_node_id
9591 ,target_node_path
9592 ,target_page_set_id
9593 ,target_page_id
9594 ,target_url
9595 ,frame_name
9596 ,target_anchor
9597 ,seeded_flag
9598 ,cx_command_name
9599 ,window_parameters
9600 ,target_window_type
9601 ,target_window_name
9602 ,target_expl_node_id
9603 ,deleted_flag
9604 )
9605 VALUES
9606 (
9607 l_ui_action_id
9608 ,p_ui_node.ui_def_id
9609 ,p_ui_node.page_id
9610 ,p_node.persistent_node_id
9611 ,l_element_id
9612 ,NULL
9613 ,G_CX_BUTTON_ACTION_TYPE
9614 ,NULL
9615 ,NULL
9616 ,NULL
9617 ,NULL
9618 ,NULL
9619 ,NULL
9620 ,NULL
9621 ,NULL
9622 ,'0'
9623 ,i.data_value
9624 ,NULL
9625 ,NULL
9626 ,NULL
9627 ,NULL
9628 ,G_NO_FLAG
9629 );
9630
9631 END IF;
9632
9633 END LOOP;
9634
9635 IF p_node.ps_node_type=G_REFERENCE_TYPE THEN
9636
9637 FOR i IN(SELECT a.model_ref_expl_id, b.data_value, a.component_id, b.expr_node_id, a.name, a.INSTANTIATION_SCOPE
9638 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9639 WHERE a.devl_project_id=p_node.devl_project_id AND
9640 a.component_id IN
9641 (SELECT ps_node_id FROM CZ_PS_NODES
9642 WHERE devl_project_id IN
9643 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
9644 START WITH model_id=p_node.devl_project_id AND
9645 referring_node_id=p_node.ps_node_id AND
9646 deleted_flag='0'
9647 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
9648 deleted_flag='0' AND PRIOR deleted_flag='0') AND
9649 deleted_flag='0') AND
9650 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9651 a.deleted_flag=G_NO_FLAG AND
9652 a.disabled_flag=G_NO_FLAG AND
9653 a.invalid_flag=G_NO_FLAG AND
9654 b.rule_id=a.rule_id AND
9655 b.deleted_flag=G_NO_FLAG AND
9656 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9657 data_value IS NOT NULL)
9658 LOOP
9659
9660 -- do not create a CX for instantiable reference with
9661 -- instantiation_scope= INSTANCE
9662 IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9663 p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9664 i.INSTANTIATION_SCOPE=1 THEN
9665 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9666 p_token_name1 => 'EVENT_NAME',
9667 p_token_value1 => i.data_value,
9668 p_token_name2 => 'RULE_NAME',
9669 p_token_value2 => i.name,
9670 p_fatal_error => FALSE);
9671 RETURN;
9672 END IF;
9673
9674 IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9675
9676 l_element_id := get_Element_Id();
9677 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9678 INSERT INTO CZ_INTL_TEXTS
9679 (INTL_TEXT_ID,
9680 TEXT_STR,
9681 DELETED_FLAG,
9682 SEEDED_FLAG,
9683 UI_DEF_ID,
9684 MODEL_ID,
9685 UI_PAGE_ID,
9686 UI_PAGE_ELEMENT_ID)
9687 VALUES
9688 (l_ui_intl_text_id,
9689 i.data_value,
9690 G_NO_FLAG,
9691 G_NO_FLAG,
9692 g_UI_Context.ui_def_id,
9693 g_UI_Context.devl_project_id,
9694 p_ui_node.page_id,
9695 l_element_id
9696 );
9697
9698 SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9699 FROM CZ_INTL_TEXTS
9700 WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9701
9702 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9703
9704 IF p_ui_node.parent_element_id IS NULL THEN
9705 l_parent_element_id := p_ui_node.element_id;
9706 ELSE
9707 l_parent_element_id := p_ui_node.parent_element_id;
9708 END IF;
9709
9710 l_new_node := TRUE;
9711
9712 INSERT INTO CZ_UI_PAGE_ELEMENTS
9713 (ui_def_id,
9714 persistent_node_id,
9715 parent_persistent_node_id,
9716 region_persistent_node_id,
9717 pagebase_persistent_node_id,
9718 page_id,
9719 base_page_flag,
9720 seq_nbr,
9721 ctrl_template_id,
9722 ctrl_template_ui_def_id,
9723 element_id,
9724 parent_element_id,
9725 element_type,
9726 instantiable_flag,
9727 model_ref_expl_id,
9728 element_signature_id,
9729 name,
9730 deleted_flag)
9731 VALUES
9732 (p_ui_node.ui_def_id,
9733 p_node.persistent_node_id,
9734 p_node.parent_persistent_node_id,
9735 p_ui_node.region_persistent_node_id,
9736 p_ui_node.pagebase_persistent_node_id,
9737 p_ui_node.page_id,
9738 NULL,
9739 p_ui_node.seq_nbr+1,
9740 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9741 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9742 l_element_id,
9743 l_parent_element_id,
9744 G_UI_CX_BUTTON_NODE_TYPE,
9745 NULL,
9746 p_ui_node.model_ref_expl_id,
9747 g_DRILLDOWN_B_SIGNATURE_ID,
9748 'Button - '||i.data_value,
9749 G_MARK_TO_ADD);
9750
9751 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9752
9753 INSERT INTO CZ_UI_ACTIONS
9754 (
9755 ui_action_id
9756 ,ui_def_id
9757 ,source_page_id
9758 ,context_component_id
9759 ,element_id
9760 ,render_condition_id
9761 ,ui_action_type
9762 ,target_ui_def_id
9763 ,target_persistent_node_id
9764 ,target_node_path
9765 ,target_page_set_id
9766 ,target_page_id
9767 ,target_url
9768 ,frame_name
9769 ,target_anchor
9770 ,seeded_flag
9771 ,cx_command_name
9772 ,window_parameters
9773 ,target_window_type
9774 ,target_window_name
9775 ,target_expl_node_id
9776 ,deleted_flag
9777 )
9778 VALUES
9779 (
9780 l_ui_action_id
9781 ,p_ui_node.ui_def_id
9782 ,p_ui_node.page_id
9783 ,p_node.persistent_node_id
9784 ,l_element_id
9785 ,NULL
9786 ,G_CX_BUTTON_ACTION_TYPE
9787 ,NULL
9788 ,NULL
9789 ,NULL
9790 ,NULL
9791 ,NULL
9792 ,NULL
9793 ,NULL
9794 ,NULL
9795 ,'0'
9796 ,i.data_value
9797 ,NULL
9798 ,NULL
9799 ,NULL
9800 ,NULL
9801 ,G_NO_FLAG
9802 );
9803
9804 -- find model to which model ref expl node with i.model_ref_expl_id belongs to
9805 FOR k IN(SELECT component_id, ps_node_type FROM CZ_MODEL_REF_EXPLS
9806 START WITH model_ref_expl_id=i.model_ref_expl_id
9807 CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND deleted_flag='0')
9808 LOOP
9809 IF k.ps_node_type = CZ_TYPES.PS_NODE_TYPE_REFERENCE THEN
9810 l_ref_model_id := k.component_id;
9811 EXIT;
9812 END IF;
9813 END LOOP;
9814
9815 -- find persistent_node_id of PS node which is used in CX binding
9816 SELECT persistent_node_id INTO l_persistent_id FROM CZ_PS_NODES
9817 WHERE devl_project_id=l_ref_model_id AND ps_node_id=i.component_id;
9818
9819 -- find model_ref_expl_id and persistent_node_id of pagebase
9820 SELECT model_ref_expl_id, persistent_node_id INTO l_pb_model_ref_expl_id, l_pb_persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
9821 WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=p_ui_node.page_id AND
9822 element_id=p_ui_node.parent_element_id;
9823
9824 -- save runtime relative path of CX button in associative array g_ref_cx_paths_tbl ( UI element_id <-> runtime relative path )
9825 g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pb_model_ref_expl_id,
9826 p_base_pers_id => l_pb_persistent_node_id,
9827 p_node_expl_id => i.model_ref_expl_id,
9828 p_node_pers_id => l_persistent_id);
9829
9830 END IF;
9831
9832 END LOOP;
9833
9834 END IF;
9835
9836 --
9837 -- if CX button is added then mark UI page as page
9838 -- to refresh
9839 --
9840 IF l_new_node THEN
9841 --
9842 -- mark UI Page as refreshed
9843 --
9844 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
9845 END IF;
9846
9847 END add_CX_Button;
9848
9849 --
9850 -- handle CX for those nodes which have no corresponding
9851 -- records in table CZ_UI_PAGE_ELEMENTS
9852 --
9853 PROCEDURE handle_CXs_For_nonUINodes IS
9854
9855 l_ui_intl_text_id CZ_INTL_TEXTS.intl_text_id%TYPE;
9856 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9857 l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9858 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
9859 l_persistent_intl_text_id NUMBER;
9860 BEGIN
9861
9862 FOR option_node IN(SELECT ps_node_id,persistent_node_id,
9863 parent_persistent_node_id FROM CZ_UITEMPLS_FOR_PSNODES_V a
9864 WHERE devl_project_id=g_UI_Context.devl_project_id AND
9865 ui_def_id=g_UI_Context.from_master_template_id AND
9866 ps_node_type IN(G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) AND
9867 ui_omit=G_NO_FLAG AND deleted_flag=G_NO_FLAG AND
9868 EXISTS(SELECT NULL FROM CZ_RULES
9869 WHERE devl_project_id=g_UI_Context.devl_project_id AND
9870 component_id=a.ps_node_id AND
9871 disabled_flag=G_NO_FLAG AND
9872 deleted_flag=G_NO_FLAG))
9873 LOOP
9874 FOR parent_ui_node IN(SELECT *
9875 FROM CZ_UI_PAGE_ELEMENTS
9876 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9877 persistent_node_id=option_node.parent_persistent_node_id AND
9878 deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE, G_LIMBO_FLAG))
9879 LOOP
9880
9881 FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME
9882 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9883 WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9884 a.component_id=option_node.ps_node_id AND
9885 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9886 a.deleted_flag=G_NO_FLAG AND
9887 a.disabled_flag=G_NO_FLAG AND
9888 a.invalid_flag=G_NO_FLAG AND
9889 b.rule_id=a.rule_id AND
9890 b.deleted_flag=G_NO_FLAG AND
9891 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9892 b.data_value IS NOT NULL)
9893 LOOP
9894 IF find_CX_On_UI_Page(parent_ui_node.page_id, option_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9895 l_element_id := get_Element_Id();
9896
9897 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9898 INSERT INTO CZ_INTL_TEXTS
9899 (INTL_TEXT_ID,
9900 TEXT_STR,
9901 DELETED_FLAG,
9902 SEEDED_FLAG,
9903 UI_DEF_ID,
9904 MODEL_ID,
9905 UI_PAGE_ID,
9906 UI_PAGE_ELEMENT_ID
9907 )
9908 VALUES
9909 (l_ui_intl_text_id,
9910 i.data_value,
9911 G_NO_FLAG,
9912 G_NO_FLAG,
9913 g_UI_Context.ui_def_id,
9914 g_UI_Context.devl_project_id,
9915 parent_ui_node.page_id,
9916 l_element_id
9917 );
9918
9919 SELECT persistent_intl_text_id INTO l_persistent_intl_text_id
9920 FROM CZ_INTL_TEXTS
9921 WHERE INTL_TEXT_ID = l_ui_intl_text_id;
9922
9923 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_persistent_intl_text_id;
9924 g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := get_Model_Path(parent_ui_node)||
9925 '.'||TO_CHAR(option_node.persistent_node_id);
9926
9927 IF parent_ui_node.parent_element_id IS NULL THEN
9928 l_parent_element_id := parent_ui_node.element_id;
9929 ELSE
9930 l_parent_element_id := parent_ui_node.parent_element_id;
9931 END IF;
9932
9933 INSERT INTO CZ_UI_PAGE_ELEMENTS
9934 (ui_def_id,
9935 persistent_node_id,
9936 parent_persistent_node_id,
9937 region_persistent_node_id,
9938 pagebase_persistent_node_id,
9939 page_id,
9940 base_page_flag,
9941 seq_nbr,
9942 ctrl_template_id,
9943 ctrl_template_ui_def_id,
9944 element_id,
9945 parent_element_id,
9946 element_type,
9947 instantiable_flag,
9948 model_ref_expl_id,
9949 element_signature_id,
9950 NAME,
9951 deleted_flag)
9952 VALUES
9953 (g_UI_Context.ui_def_id,
9954 option_node.persistent_node_id,
9955 option_node.parent_persistent_node_id,
9956 parent_ui_node.region_persistent_node_id,
9957 parent_ui_node.pagebase_persistent_node_id,
9958 parent_ui_node.page_id,
9959 NULL,
9960 parent_ui_node.seq_nbr+1,
9961 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9962 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9963 l_element_id,
9964 l_parent_element_id,
9965 G_UI_CX_BUTTON_NODE_TYPE,
9966 NULL,
9967 parent_ui_node.model_ref_expl_id,
9968 g_DRILLDOWN_B_SIGNATURE_ID,
9969 G_DRILLDOWN_TEMPLATE_NAME||' - '||l_element_id,
9970 G_MARK_TO_ADD);
9971
9972 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9973
9974 INSERT INTO CZ_UI_ACTIONS
9975 (
9976 ui_action_id
9977 ,ui_def_id
9978 ,source_page_id
9979 ,context_component_id
9980 ,element_id
9981 ,render_condition_id
9982 ,ui_action_type
9983 ,target_ui_def_id
9984 ,target_persistent_node_id
9985 ,target_node_path
9986 ,target_page_set_id
9987 ,target_page_id
9988 ,target_url
9989 ,frame_name
9990 ,target_anchor
9991 ,seeded_flag
9992 ,cx_command_name
9993 ,window_parameters
9994 ,target_window_type
9995 ,target_window_name
9996 ,target_expl_node_id
9997 ,deleted_flag
9998 )
9999 VALUES
10000 (
10001 l_ui_action_id
10002 ,g_UI_Context.ui_def_id
10003 ,parent_ui_node.page_id
10004 ,option_node.persistent_node_id
10005 ,l_element_id
10006 ,NULL
10007 ,G_CX_BUTTON_ACTION_TYPE
10008 ,NULL
10009 ,NULL
10010 ,NULL
10011 ,NULL
10012 ,NULL
10013 ,NULL
10014 ,NULL
10015 ,NULL
10016 ,'0'
10017 ,i.data_value
10018 ,NULL
10019 ,NULL
10020 ,NULL
10021 ,NULL
10022 ,G_NO_FLAG
10023 );
10024
10025 mark_UI_Page_As_Refreshed(parent_ui_node.page_id, g_UI_Context.ui_def_id);
10026 END IF; -- end of IF find_CX_On_UI_Page
10027
10028 END LOOP; -- end of loop with index i
10029
10030 END LOOP; -- end of loop with index parent_ui_node
10031
10032 END LOOP; -- end of loop with index option_node
10033
10034 END handle_CXs_For_nonUINodes;
10035
10036
10037 FUNCTION disabled_for_refresh(p_page_element IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) RETURN BOOLEAN
10038 IS
10039 l_dummy VARCHAR2(1);
10040 BEGIN
10041
10042 SELECT '1' INTO l_dummy
10043 FROM DUAL
10044 WHERE '1' IN (SELECT suppress_refresh_flag
10045 FROM cz_ui_page_elements
10046 START WITH ui_def_Id = p_page_element.ui_def_id
10047 AND page_id = p_page_element.page_id
10048 AND element_id = p_page_element.element_id
10049 CONNECT BY PRIOR parent_element_id IS NOT NULL
10050 AND prior suppress_refresh_flag = G_NO_FLAG
10051 AND ui_def_Id = p_page_element.ui_def_id
10052 AND page_id = p_page_element.page_id
10053 AND prior parent_element_id = element_id);
10054 RETURN TRUE;
10055 EXCEPTION
10056 WHEN NO_DATA_FOUND THEN
10057 RETURN FALSE;
10058 END disabled_for_refresh;
10059
10060 --
10061 -- handle CX for those nodes which have no corresponding
10062 -- records in table CZ_UI_PAGE_ELEMENTS
10063 --
10064 PROCEDURE handle_CXs IS
10065
10066 l_ui_intl_text_id CZ_INTL_TEXTS.intl_text_id%TYPE;
10067 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10068 l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10069 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
10070 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
10071 l_invalid_flag VARCHAR2(1);
10072
10073 BEGIN
10074
10075
10076 FOR i in (SELECT DISTINCT page_id
10077 FROM cz_ui_page_elements
10078 WHERE ui_def_Id = g_UI_Context.ui_def_id
10079 AND element_type = G_UI_CX_BUTTON_NODE_TYPE
10080 AND deleted_flag = G_NO_FLAG)
10081 LOOP
10082 --DEBUG('asp: Marking page ' || i.page_id || ', ' || g_UI_Context.ui_def_id || ' for refresh ');
10083 mark_UI_Page_As_Refreshed(i.page_id, g_UI_Context.ui_def_id);
10084 END LOOP;
10085
10086
10087 FOR i in (SELECT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME,
10088 (SELECT persistent_node_id
10089 FROM CZ_PS_NODES
10090 WHERE devl_project_id = g_UI_Context.devl_project_id
10091 AND ps_node_id = a.component_id) persistent_node_Id
10092 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
10093 WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
10094 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
10095 b.rule_id=a.rule_id AND
10096 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
10097 b.data_value IS NOT NULL AND
10098 b.last_update_date > g_UI_Context.UI_TIMESTAMP_REFRESH)
10099 LOOP
10100 BEGIN
10101
10102 SELECT e.element_id INTO l_element_id
10103 FROM CZ_UI_PAGE_ELEMENTS e
10104 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10105 persistent_node_id = i.persistent_node_id AND
10106 element_type = G_UI_CX_BUTTON_NODE_TYPE AND
10107 deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
10108 EXISTS (SELECT NULL FROM CZ_UI_ACTIONS a
10109 WHERE a.ui_def_id = e.ui_def_id AND
10110 a.source_page_id = e.page_id AND
10111 a.element_id = e.element_id AND
10112 a.deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
10113 a.cx_command_name = i.data_value);
10114 EXCEPTION
10115 WHEN NO_DATA_FOUND THEN
10116 -- No button for the action; Create one
10117 FOR j in (SELECT *
10118 FROM CZ_UI_PAGE_ELEMENTS e
10119 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10120 persistent_node_id = i.persistent_node_id AND
10121 deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE))
10122 LOOP
10123 IF NOT disabled_for_refresh(j) THEN
10124 l_ps_node := get_Model_Node_By_Persist_id(i.persistent_node_id, g_UI_Context.devl_project_id);
10125 add_CX_button(l_ps_node, j);
10126 EXIT;
10127 END IF;
10128 END LOOP;
10129 END;
10130 END LOOP;
10131 END handle_CXs;
10132
10133 --
10134 -- create single UI element
10135 --
10136 FUNCTION create_UI_Element(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10137 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10138 p_insert_index IN NUMBER DEFAULT -1)
10139 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10140
10141 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10142 l_node_exists_in_ui VARCHAR2(1);
10143 l_counter NUMBER;
10144 l_parent_seq_nbr NUMBER;
10145 l_max_prev_seq_nbr NUMBER;
10146
10147 BEGIN
10148
10149 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10150 RETURN l_ui_node;
10151 END IF;
10152
10153 BEGIN
10154 SELECT G_YES_FLAG INTO l_node_exists_in_ui FROM dual
10155 WHERE EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
10156 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10157 page_id=p_parent_ui_node.page_id AND
10158 parent_element_id=p_parent_ui_node.element_id AND
10159 persistent_node_id=p_node.persistent_node_id AND
10160 element_type IS NULL AND deleted_flag=G_NO_FLAG);
10161 RETURN l_ui_node;
10162 EXCEPTION
10163 WHEN NO_DATA_FOUND THEN
10164 NULL;
10165 END;
10166
10167 l_ui_node.ui_def_id := p_parent_ui_node.ui_def_id;
10168 l_ui_node.persistent_node_id := p_node.persistent_node_id;
10169 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
10170
10171 l_ui_node.region_persistent_node_id := p_parent_ui_node.region_persistent_node_id;
10172 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
10173 l_ui_node.page_id := p_parent_ui_node.page_id;
10174
10175 IF p_insert_index > 0 THEN
10176 l_max_prev_seq_nbr := p_insert_index-1;
10177 l_ui_node.seq_nbr := p_insert_index;
10178 ELSE
10179 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
10180 START WITH ui_def_id=g_UI_Context.ui_def_id AND
10181 page_id=p_parent_ui_node.page_id AND
10182 element_id=p_parent_ui_node.element_id AND
10183 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10184 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10185 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10186 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10187 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10188 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10189
10190 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
10191 END IF;
10192
10193 UPDATE CZ_UI_PAGE_ELEMENTS
10194 SET seq_nbr=seq_nbr+1
10195 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10196 page_id=p_parent_ui_node.page_id AND
10197 seq_nbr>l_max_prev_seq_nbr AND
10198 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10199
10200 l_ui_node.element_id := get_Element_Id();
10201
10202 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
10203
10204 l_ui_node.ctrl_template_id := p_node.template_id;
10205 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
10206
10207 l_ui_node.element_type := G_UI_REGULAR_NODE_TYPE;
10208
10209 IF p_node.detailed_type_id=CZ_TYPES.UNON_COUNT_FEATURE_TYPEID THEN
10210 l_ui_node.element_type := G_UNON_COUNT_FEATURE_TYPEID;
10211 ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE_TYPEID THEN
10212 l_ui_node.element_type := G_UCOUNT_FEATURE_TYPEID;
10213 ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE01_TYPEID THEN
10214 l_ui_node.element_type := G_UCOUNT_FEATURE01_TYPEID;
10215 ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_FEATURE_TYPEID THEN
10216 l_ui_node.element_type := G_UMINMAX_FEATURE_TYPEID;
10217 ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
10218 l_ui_node.element_type := G_UMINMAX_CONNECTOR_TYPEID;
10219 ELSE
10220 l_ui_node.element_type := G_UI_REGULAR_NODE_TYPE;
10221 END IF;
10222
10223 l_ui_node.instantiable_flag := p_node.instantiable_flag;
10224
10225 IF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
10226 IF (p_node.maximum=1 AND p_node.minimum=0) THEN
10227 l_ui_node.instantiable_flag := G_OPTIONAL_INST_TYPE;
10228 ELSE
10229 l_ui_node.instantiable_flag := G_MINMAX_INST_TYPE;
10230 END IF;
10231 END IF;
10232
10233 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
10234 p_ps_node_id => p_node.ps_node_id,
10235 p_component_id => p_node.component_id,
10236 p_ps_node_type => p_node.ps_node_type);
10237 l_ui_node.element_signature_id := p_node.root_element_signature_id;
10238 l_ui_node.deleted_flag := G_MARK_TO_ADD;
10239
10240 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10241 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10242 page_id=l_ui_node.page_id AND
10243 ctrl_template_id=l_ui_node.ctrl_template_id AND
10244 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10245
10246 l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
10247
10248 --DEBUG('asp:Inserting ' || l_ui_node.element_id || ' at seq ' || l_ui_node.seq_nbr);
10249
10250 INSERT INTO CZ_UI_PAGE_ELEMENTS
10251 (ui_def_id,
10252 persistent_node_id,
10253 parent_persistent_node_id,
10254 region_persistent_node_id,
10255 pagebase_persistent_node_id,
10256 page_id,
10257 seq_nbr,
10258 ctrl_template_id,
10259 element_id,
10260 parent_element_id,
10261 element_type,
10262 instantiable_flag,
10263 ctrl_template_ui_def_id,
10264 model_ref_expl_id,
10265 element_signature_id,
10266 name,
10267 deleted_flag)
10268 VALUES
10269 (l_ui_node.ui_def_id,
10270 l_ui_node.persistent_node_id,
10271 l_ui_node.parent_persistent_node_id,
10272 l_ui_node.region_persistent_node_id,
10273 l_ui_node.pagebase_persistent_node_id,
10274 l_ui_node.page_id,
10275 l_ui_node.seq_nbr,
10276 l_ui_node.ctrl_template_id,
10277 l_ui_node.element_id,
10278 l_ui_node.parent_element_id,
10279 l_ui_node.element_type,
10280 l_ui_node.instantiable_flag,
10281 l_ui_node.ctrl_template_ui_def_id,
10282 l_ui_node.model_ref_expl_id,
10283 l_ui_node.element_signature_id,
10284 l_ui_node.name,
10285 l_ui_node.deleted_flag);
10286
10287 --
10288 -- mark UI Page as refreshed
10289 --
10290 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
10291 add_CX_Button(p_node => p_node,
10292 p_ui_node => l_ui_node);
10293
10294 RETURN l_ui_node;
10295
10296 END create_UI_Element;
10297
10298 --
10299 -- add Instance Management Controls
10300 --
10301 PROCEDURE add_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10302 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10303 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
10304
10305 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10306 l_element_type CZ_UI_PAGE_ELEMENTS.element_type%TYPE;
10307 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10308 l_parent_seq_nbr NUMBER;
10309 l_seq_nbr NUMBER;
10310 l_counter NUMBER;
10311 l_max_prev_seq_nbr NUMBER;
10312
10313 BEGIN
10314
10315 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10316 RETURN;
10317 END IF;
10318
10319 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
10320 START WITH ui_def_id=g_UI_Context.ui_def_id AND
10321 page_id=p_parent_ui_node.page_id AND
10322 element_id=p_parent_ui_node.element_id AND
10323 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10324 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10325 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10326 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10327 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10328 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10329
10330 l_seq_nbr := l_max_prev_seq_nbr + 1;
10331
10332 UPDATE CZ_UI_PAGE_ELEMENTS
10333 SET seq_nbr=seq_nbr+1
10334 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10335 page_id=p_parent_ui_node.page_id AND
10336 seq_nbr>l_max_prev_seq_nbr AND
10337 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10338
10339 IF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
10340 l_element_type := G_UI_NONBOMADDINST_NODE_TYPE;
10341 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
10342 l_element_type := G_UI_BOMADDINST_NODE_TYPE;
10343 ELSE
10344 NULL;
10345 END IF;
10346
10347 l_element_id := get_Element_Id();
10348
10349 l_ui_node_name := get_UI_Node_Name(p_page_id => p_parent_ui_node.page_id,
10350 p_template_id => p_node.template_id,
10351 p_template_name => p_node.template_name);
10352
10353 INSERT INTO CZ_UI_PAGE_ELEMENTS
10354 (ui_def_id,
10355 persistent_node_id,
10356 parent_persistent_node_id,
10357 region_persistent_node_id,
10358 pagebase_persistent_node_id,
10359 page_id,
10360 seq_nbr,
10361 ctrl_template_id,
10362 element_id,
10363 parent_element_id,
10364 element_type,
10365 instantiable_flag,
10366 ctrl_template_ui_def_id,
10367 model_ref_expl_id,
10368 element_signature_id,
10369 name,
10370 deleted_flag)
10371 VALUES
10372 (p_ui_node.ui_def_id,
10373 p_ui_node.persistent_node_id,
10374 p_ui_node.parent_persistent_node_id,
10375 p_parent_ui_node.region_persistent_node_id,
10376 p_parent_ui_node.pagebase_persistent_node_id,
10377 p_parent_ui_node.page_id,
10378 l_seq_nbr,
10379 p_node.template_id,
10380 l_element_id,
10381 p_parent_ui_node.element_id,
10382 l_element_type,
10383 p_ui_node.instantiable_flag,
10384 p_node.template_ui_def_id,
10385 p_ui_node.model_ref_expl_id,
10386 p_node.root_element_signature_id,
10387 l_ui_node_name,
10388 G_MARK_DO_NOT_REFRESH);
10389
10390 -- delete drilldown associated with the same persistent_node_id
10391 --
10392 UPDATE CZ_UI_PAGE_ELEMENTS
10393 SET deleted_flag=G_MARK_TO_DELETE
10394 WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
10395 persistent_node_id=p_ui_node.persistent_node_id AND
10396 element_type=G_UI_PAGEDRILLDOWN_NODE_TYPE AND
10397 deleted_flag=G_NO_FLAG;
10398
10399 mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10400
10401 END add_Instance_Controls;
10402
10403 --
10404 -- create Drilldown button
10405 --
10406 PROCEDURE create_Drilldown_Button(p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10407 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10408 p_page_set_id IN NUMBER) IS
10409
10410 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10411 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
10412 l_seq_nbr CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
10413 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10414
10415 BEGIN
10416
10417 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10418 RETURN;
10419 END IF;
10420
10421 l_seq_nbr := get_Last_Seq_Nbr(p_parent_ui_node.element_id)+1;
10422
10423 l_element_id := get_Element_Id();
10424
10425 g_ELEMENT_COUNTER := g_ELEMENT_COUNTER + 1;
10426
10427 l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
10428
10429 IF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_IMAGE_TEMPLATE_ID THEN
10430 l_ui_node_name := 'Drilldown Image - '||TO_CHAR(l_seq_nbr);
10431 ELSIF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_LABEL_TEMPLATE_ID THEN
10432 l_ui_node_name := 'Drilldown Label - '||TO_CHAR(l_seq_nbr);
10433 ELSE
10434 l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
10435 END IF;
10436
10437 INSERT INTO CZ_UI_PAGE_ELEMENTS
10438 (ui_def_id,
10439 persistent_node_id,
10440 parent_persistent_node_id,
10441 region_persistent_node_id,
10442 pagebase_persistent_node_id,
10443 page_id,
10444 seq_nbr,
10445 ctrl_template_id,
10446 element_id,
10447 parent_element_id,
10448 element_type,
10449 instantiable_flag,
10450 ctrl_template_ui_def_id,
10451 model_ref_expl_id,
10452 name,
10453 element_signature_id,
10454 deleted_flag)
10455 VALUES
10456 (p_parent_ui_node.ui_def_id,
10457 p_ui_node.persistent_node_id,
10458 p_ui_node.parent_persistent_node_id,
10459 p_parent_ui_node.region_persistent_node_id,
10460 p_parent_ui_node.pagebase_persistent_node_id,
10461 p_parent_ui_node.page_id,
10462 l_seq_nbr,
10463 g_DRILLDOWN_TEMPLATE_ID,
10464 l_element_id,
10465 p_parent_ui_node.element_id,
10466 G_UI_PAGEDRILLDOWN_NODE_TYPE,
10467 NULL,
10468 G_GLOBAL_TEMPLATES_UI_DEF_ID,
10469 NULL,
10470 l_ui_node_name,
10471 g_DRILLDOWN_ELEM_SIGNATURE_ID,
10472 G_MARK_TO_ADD);
10473
10474 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
10475 INSERT INTO CZ_UI_ACTIONS
10476 (ui_action_id,
10477 ui_def_id,
10478 source_page_id,
10479 context_component_id,
10480 element_id,
10481 ui_action_type,
10482 target_ui_def_id,
10483 target_persistent_node_id,
10484 target_node_path,
10485 target_page_set_id,
10486 target_page_id,
10487 target_expl_node_id,
10488 seeded_flag,
10489 deleted_flag)
10490 VALUES
10491 (l_ui_action_id,
10492 p_parent_ui_node.ui_def_id,
10493 p_parent_ui_node.page_id,
10494 p_parent_ui_node.region_persistent_node_id,
10495 l_element_id,
10496 G_ACTION_CONFIGURE_SUBCOMP,
10497 NULL,
10498 p_ui_node.persistent_node_id,
10499 TO_CHAR(p_ui_node.persistent_node_id),
10500 p_page_set_id,
10501 p_ui_node.page_id,
10502 p_ui_node.model_ref_expl_id,
10503 G_NO_FLAG,
10504 G_NO_FLAG);
10505
10506 mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10507
10508 END create_Drilldown_Button;
10509
10510 --
10511 -- check : does this BOM node contain child BOM nodes
10512 --
10513 FUNCTION contains_BOM_Nodes(p_ps_node_id IN NUMBER)
10514 RETURN BOOLEAN IS
10515 l_ps_node_type NUMBER;
10516 BEGIN
10517 BEGIN
10518 -- Handle No data Found Exeption BUG 11712366
10519 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10520 WHERE ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG;
10521 EXCEPTION
10522 WHEN NO_DATA_FOUND THEN
10523 RETURN FALSE;
10524 END;
10525
10526 IF l_ps_node_type=G_REFERENCE_TYPE THEN
10527 RETURN TRUE;
10528 END IF;
10529
10530 FOR i IN (SELECT DISTINCT ps_node_type,reference_id FROM CZ_PS_NODES
10531 WHERE parent_id=p_ps_node_id AND
10532 deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG AND
10533 (ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE,G_BOM_STANDART_ITEM_TYPE) OR
10534 ps_node_type=G_REFERENCE_TYPE))
10535 LOOP
10536 IF i.ps_node_type=G_REFERENCE_TYPE THEN
10537 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10538 WHERE ps_node_id=i.reference_id;
10539 IF l_ps_node_type=G_BOM_MODEL_TYPE THEN
10540 RETURN TRUE;
10541 END IF;
10542 ELSE
10543 RETURN TRUE;
10544 END IF;
10545 END LOOP;
10546 RETURN FALSE;
10547 END contains_BOM_Nodes;
10548
10549 PROCEDURE add_BOM_Node
10550 (
10551 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10552 p_page_id IN NUMBER,
10553 p_pagebase_expl_node_id IN NUMBER,
10554 p_parent_element_id IN VARCHAR2,
10555 p_pagebase_persistent_node_id IN NUMBER,
10556 p_check_child_bom_nodes IN VARCHAR2 DEFAULT NULL) IS
10557
10558 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10559 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10560 BEGIN
10561
10562 IF p_check_child_bom_nodes IS NULL OR p_check_child_bom_nodes=G_YES_FLAG THEN
10563 IF NOT(contains_BOM_Nodes(p_node.ps_node_id)) THEN
10564 RETURN;
10565 END IF;
10566 END IF;
10567
10568 l_bom_element_id := get_Element_Id();
10569
10570 l_ui_node_name := p_node.template_name||' - 1';
10571
10572 --DEBUG('asp:Inserting BOM Node ' || l_bom_element_id|| ' at seq ' || 1);
10573 --
10574 -- shift all UI elements down , because BOM table will have seq_nbr=1
10575 --
10576 UPDATE CZ_UI_PAGE_ELEMENTS
10577 SET seq_nbr=seq_nbr+1
10578 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id AND
10579 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
10580
10581
10582 INSERT INTO CZ_UI_PAGE_ELEMENTS
10583 (ui_def_id,
10584 persistent_node_id,
10585 parent_persistent_node_id,
10586 region_persistent_node_id,
10587 pagebase_persistent_node_id,
10588 page_id,
10589 seq_nbr,
10590 ctrl_template_id,
10591 element_id,
10592 parent_element_id,
10593 element_type,
10594 instantiable_flag,
10595 ctrl_template_ui_def_id,
10596 model_ref_expl_id,
10597 element_signature_id,
10598 name,
10599 deleted_flag)
10600 VALUES
10601 (g_UI_Context.ui_def_id,
10602 p_node.persistent_node_id,
10603 p_node.parent_persistent_node_id,
10604 p_node.persistent_node_id,
10605 p_pagebase_persistent_node_id,
10606 p_page_id,
10607 1,
10608 p_node.template_id,
10609 l_bom_element_id,
10610 p_parent_element_id,
10611 G_UI_BOMADDINST_NODE_TYPE,
10612 p_node.instantiable_flag,
10613 p_node.template_ui_def_id,
10614 p_pagebase_expl_node_id,
10615 p_node.root_element_signature_id,
10616 l_ui_node_name,
10617 G_MARK_TO_ADD);
10618
10619 mark_UI_Page_As_Refreshed(p_page_id, g_UI_Context.ui_def_id);
10620
10621 END add_BOM_Node;
10622
10623 --
10624 -- get Parent Page Data ( page_set_id and page_id )
10625 --
10626 PROCEDURE get_Parent_Page_Data
10627 (
10628 p_parent_persistent_node_id IN NUMBER,
10629 p_parent_page_id IN NUMBER,
10630 x_page_set_id OUT NOCOPY NUMBER,
10631 x_page_id OUT NOCOPY NUMBER,
10632 x_parent_page_set_type OUT NOCOPY NUMBER,
10633 x_parent_page_ref_id OUT NOCOPY NUMBER,
10634 x_parent_node_depth OUT NOCOPY NUMBER
10635 ) IS
10636
10637 BEGIN
10638
10639 IF p_parent_persistent_node_id IS NOT NULL THEN
10640
10641 IF p_parent_page_id IS NULL THEN
10642
10643 SELECT MIN(page_id)
10644 INTO x_page_id
10645 FROM CZ_UI_PAGES
10646 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10647 persistent_node_id = p_parent_persistent_node_id AND
10648 NVL(split_seq_nbr,1)=1 AND
10649 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
10650
10651 IF x_page_id IS NULL THEN
10652 NULL;
10653 ELSE
10654 SELECT page_set_id INTO x_page_set_id
10655 FROM CZ_UI_PAGES
10656 WHERE page_id=x_page_id AND
10657 ui_def_id = g_UI_Context.ui_def_id;
10658 END IF;
10659
10660 ELSE
10661
10662 x_page_id := p_parent_page_id;
10663
10664 SELECT page_set_id INTO x_page_set_id
10665 FROM CZ_UI_PAGES
10666 WHERE page_id=p_parent_page_id AND
10667 ui_def_id = g_UI_Context.ui_def_id;
10668
10669 END IF;
10670
10671 BEGIN
10672
10673 SELECT MIN(page_ref_id)
10674 INTO x_parent_page_ref_id
10675 FROM CZ_UI_PAGE_REFS
10676 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10677 NVL(page_set_id,-1)=NVL(x_page_set_id,-1) AND
10678 target_page_id=x_page_id AND deleted_flag=G_NO_FLAG;
10679
10680 SELECT node_depth,page_ref_type INTO x_parent_node_depth, x_parent_page_set_type
10681 FROM CZ_UI_PAGE_REFS
10682 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10683 page_ref_id=x_parent_page_ref_id;
10684 EXCEPTION
10685 WHEN NO_DATA_FOUND THEN
10686 IF x_page_set_id IS NOT NULL THEN
10687 SELECT page_set_type INTO x_parent_page_set_type FROM CZ_UI_PAGE_SETS
10688 WHERE ui_def_id = g_UI_Context.ui_def_id AND page_set_id=x_page_set_id;
10689 END IF;
10690 x_parent_node_depth := 1;
10691 END;
10692
10693 ELSE
10694
10695 x_page_set_id := NULL;
10696 x_page_id := NULL;
10697 x_parent_page_ref_id := NULL;
10698 x_parent_node_depth := 1;
10699 x_parent_page_set_type := NULL;
10700
10701 END IF;
10702
10703 END get_Parent_Page_Data;
10704
10705
10706 FUNCTION get_new_page_ref_seq(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10707 p_page_set_id IN NUMBER,
10708 p_parent_page_ref_id NUMBER) RETURN NUMBER IS
10709
10710 l_seq_nbr NUMBER;
10711
10712 BEGIN
10713
10714 --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name);
10715
10716 IF NOT g_using_new_UI_refresh THEN
10717 SELECT COUNT(*)+1 INTO l_seq_nbr
10718 FROM CZ_UI_PAGE_REFS
10719 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10720 page_set_id = p_page_set_id AND
10721 parent_page_ref_id=p_parent_page_ref_id AND
10722 deleted_flag=G_NO_FLAG;
10723
10724 RETURN l_seq_nbr;
10725 END IF;
10726
10727 IF p_node.tree_seq = 1 THEN
10728 RETURN 1;
10729 ELSE
10730 BEGIN
10731 --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name || ', tree_seq ' || p_node.tree_seq);
10732 FOR i IN 1..p_node.tree_seq-1
10733 LOOP
10734 FOR j in (SELECT persistent_node_id
10735 FROM CZ_PS_NODES
10736 WHERE devl_project_id = g_UI_Context.devl_project_id
10737 AND parent_id = p_node.parent_id
10738 AND tree_seq = p_node.tree_seq-i
10739 AND deleted_flag = G_NO_FLAG)
10740 LOOP
10741 --DEBUG('asp: predecessor persistent_node_id = ' || l_predecessor_persistent_id);
10742
10743 SELECT NVL(max(seq_nbr), 0) INTO l_seq_nbr
10744 FROM CZ_UI_PAGE_REFS
10745 WHERE ui_def_id = g_UI_Context.ui_def_id
10746 AND page_set_id = p_page_set_id
10747 AND parent_page_ref_id = p_parent_page_ref_id
10748 AND target_persistent_node_id = j.persistent_node_id
10749 AND deleted_flag = G_NO_FLAG;
10750
10751 --DEBUG('asp: max predecessorseq_nbr = ' || l_seq_nbr);
10752
10753 IF l_seq_nbr > 0 THEN
10754 l_seq_nbr := l_seq_nbr + 1;
10755 RETURN l_seq_nbr;
10756 END IF;
10757 END LOOP;
10758 END LOOP;
10759
10760 -- node of the predecesors found in cz_ui_page_refs
10761 RETURN 1;
10762
10763 EXCEPTION
10764 WHEN NO_DATA_FOUND THEN
10765 -- seq_nbrs in cz_ps_nodes are not correct
10766 SELECT NVL(count(*), 0) + 1 INTO l_seq_nbr
10767 FROM CZ_UI_PAGE_REFS
10768 WHERE ui_def_id = g_UI_Context.ui_def_Id
10769 AND page_set_id = p_page_set_id
10770 AND parent_page_ref_id = p_parent_page_ref_id
10771 AND deleted_flag = G_NO_FLAG;
10772
10773 RETURN l_seq_nbr;
10774 END;
10775 END IF;
10776
10777 END get_new_page_ref_seq;
10778
10779 --
10780 -- create new UI page
10781 --
10782 FUNCTION create_UI_Page(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10783 x_page_set_id OUT NOCOPY NUMBER,
10784 x_page_set_type OUT NOCOPY NUMBER,
10785 x_page_ref_id OUT NOCOPY NUMBER,
10786 p_parent_page_id IN NUMBER DEFAULT NULL)
10787 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10788
10789 l_page_node CZ_UI_PAGES%ROWTYPE;
10790 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10791 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10792 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10793 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10794 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
10795 l_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
10796 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
10797 l_last_page_id CZ_UI_PAGES.page_id%TYPE;
10798 l_parent_page_id CZ_UI_PAGES.page_id%TYPE;
10799 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
10800 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10801 l_ref_pagebase_path CZ_UI_PAGE_REFS.target_path%TYPE;
10802 l_parent_ui_page_node CZ_UI_PAGES%ROWTYPE;
10803 l_ui_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
10804 l_parent_page_persistent_id NUMBER;
10805 l_page_counter NUMBER;
10806 l_pagebase_expl_node_id NUMBER;
10807 l_is_inst_node BOOLEAN := FALSE;
10808 l_is_drilldown_node BOOLEAN := FALSE;
10809 l_create_page_ref BOOLEAN := TRUE;
10810 l_is_page BOOLEAN := TRUE;
10811
10812 BEGIN
10813
10814 l_is_page := is_UI_Page(p_node, l_is_drilldown_node);
10815
10816 IF l_is_page=FALSE THEN
10817 RETURN l_page_ui_node ;
10818 END IF;
10819
10820 IF g_UI_Context.control_layout=1 THEN
10821 G_CONTAINER_TEMPLATE_ID := G_2COLS_CONTAINER_TEMPLATE_ID;
10822 ELSIF g_UI_Context.control_layout=2 THEN
10823 G_CONTAINER_TEMPLATE_ID := G_3COLS_CONTAINER_TEMPLATE_ID;
10824 END IF;
10825
10826 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) OR
10827 p_node.virtual_flag=G_NO_FLAG THEN
10828
10829 l_is_inst_node := TRUE;
10830
10831 END IF;
10832
10833 l_pagebase_expl_node_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
10834 p_ps_node_id => p_node.ps_node_id,
10835 p_component_id => p_node.component_id,
10836 p_ps_node_type => p_node.ps_node_type);
10837
10838 -- In cases where a node is to added to a region because of
10839 -- max_siblings test, the parent UI node may not be bound to the parent
10840 -- of the new ps node. In such a case, the parent_page_id passed in
10841 -- may not be that of the parent_ps_node. So we pass in a NULL p_parent_page_id to
10842 -- get_Parent_page_data so that the right parent_page_id is found and the new
10843 -- page is added under the correct parent in page refs
10844
10845 l_parent_page_id := p_parent_page_id;
10846 l_parent_page_persistent_id := p_node.parent_persistent_node_id;
10847
10848 IF l_parent_page_id IS NOT NULL THEN
10849 BEGIN
10850
10851 SELECT persistent_node_id INTO l_parent_page_persistent_id
10852 FROM CZ_UI_PAGES
10853 WHERE ui_Def_id = g_UI_Context.ui_def_id
10854 AND page_id = l_parent_page_id;
10855
10856 IF NOT l_parent_page_persistent_id = p_node.parent_persistent_node_id THEN
10857 l_parent_page_id := NULL;
10858 END IF;
10859 EXCEPTION
10860 WHEN NO_DATA_FOUND THEN
10861 l_parent_page_id := NULL;
10862 END;
10863 END IF;
10864
10865 get_Parent_Page_Data(p_parent_persistent_node_id => l_parent_page_persistent_id,
10866 p_parent_page_id => l_parent_page_id,
10867 x_page_set_id => l_page_set_id,
10868 x_page_id => l_last_page_id,
10869 x_parent_page_set_type => l_page_set_type,
10870 x_parent_page_ref_id => l_parent_page_ref_id,
10871 x_parent_node_depth => l_node_depth);
10872
10873 l_node_depth := l_node_depth + 1;
10874 IF l_page_set_type IS NULL THEN
10875 l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
10876 END IF;
10877
10878 --
10879 -- if it is root model node or nonvirtual model node
10880 -- then create new Page Set
10881 --
10882 -- create a new Page Set
10883 -- List of enumerated Page Set types :
10884 -- 1 - PAGE_FLOW
10885 -- 2 - SINGLE_LEVEL_MENU
10886 -- 3 - MULTI_LEVEL_MENU
10887 -- 4 - MODEL_TREE_MENU
10888 --
10889 IF (p_node.parent_id IS NULL OR
10890 (p_node.virtual_flag=G_NO_FLAG AND
10891 g_UI_Context.PRIMARY_NAVIGATION NOT IN (G_MODEL_TREE_MENU))) AND
10892 g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_SINGLE_PAGE) THEN
10893
10894 create_Page_Set(p_ui_def_id => g_UI_Context.ui_def_id,
10895 p_page_set_type => l_page_set_type,
10896 p_persistent_node_id => p_node.persistent_node_id,
10897 p_model_ref_expl_id => l_pagebase_expl_node_id,
10898 x_page_set_id => l_page_set_id);
10899
10900 l_node_depth := 1;
10901 l_seq_nbr := 1;
10902 l_parent_page_ref_id := NULL;
10903
10904 END IF;
10905
10906 --
10907 -- get num of this page in this UI
10908 --
10909 l_page_counter := get_Page_Counter() + 1;
10910
10911 l_page_node.page_id := allocateId('CZ_UI_PAGES_S');
10912 l_page_node.ui_def_id := g_UI_Context.ui_def_id;
10913 l_page_node.NAME := 'Page-'||TO_CHAR(l_page_counter);
10914 l_page_node.persistent_node_id := p_node.persistent_node_id;
10915 l_page_node.jrad_doc := generate_JRAD_Page_Name(l_page_counter);
10916
10917 IF l_is_drilldown_node OR g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE)THEN
10918 l_page_node.page_set_id := NULL;
10919 ELSE
10920 l_page_node.page_set_id := l_page_set_id;
10921 END IF;
10922
10923 l_page_node.split_seq_nbr := 1;
10924 l_page_node.caption_source := G_DEFAULT_CAPTION_RULE_ID;
10925
10926 l_page_node.pagebase_path := get_Page_Path(p_node.ps_node_id);
10927
10928 l_page_node.pagebase_expl_node_id := l_pagebase_expl_node_id;
10929 l_page_node.seeded_flag := G_NO_FLAG;
10930 l_page_node.deleted_flag := G_MARK_TO_ADD;
10931
10932 INSERT INTO CZ_UI_PAGES
10933 (page_id,
10934 ui_def_id,
10935 NAME,
10936 persistent_node_id,
10937 jrad_doc,
10938 page_set_id,
10939 split_seq_nbr,
10940 caption_source,
10941 pagebase_path,
10942 pagebase_expl_node_id,
10943 page_rev_nbr,
10944 seeded_flag,
10945 page_status_template_id,
10946 page_status_templ_uidef_id,
10947 caption_rule_id,
10948 deleted_flag)
10949 VALUES
10950 (l_page_node.page_id ,
10951 l_page_node.ui_def_id,
10952 l_page_node.NAME,
10953 l_page_node.persistent_node_id,
10954 l_page_node.jrad_doc,
10955 l_page_node.page_set_id,
10956 l_page_node.split_seq_nbr,
10957 l_page_node.caption_source,
10958 l_page_node.pagebase_path,
10959 l_page_node.pagebase_expl_node_id,
10960 1,
10961 l_page_node.seeded_flag,
10962 g_PAGE_STATUS_TEMPLATE_ID,
10963 G_GLOBAL_TEMPLATES_UI_DEF_ID,
10964 NULL,
10965 l_page_node.deleted_flag);
10966
10967 --
10968 -- add new UI page to cache
10969 --
10970 g_ui_pages_tbl(l_page_node.page_id) := l_page_node;
10971
10972 l_page_ui_node.ui_def_id := g_UI_Context.ui_def_id;
10973 l_page_ui_node.persistent_node_id := p_node.persistent_node_id;
10974 l_page_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
10975 l_page_ui_node.region_persistent_node_id := p_node.persistent_node_id;
10976 l_page_ui_node.pagebase_persistent_node_id := p_node.persistent_node_id;
10977 l_page_ui_node.page_id := l_page_node.page_id;
10978 l_page_ui_node.seq_nbr := 0;
10979 l_page_ui_node.ctrl_template_id := G_CONTAINER_TEMPLATE_ID;
10980 l_page_ui_node.element_id := get_Element_Id();
10981 l_page_ui_node.parent_element_id := NULL;
10982 l_page_ui_node.element_type := G_UI_PAGE_NODE_TYPE;
10983 l_page_ui_node.instantiable_flag := p_node.instantiable_flag;
10984 l_page_ui_node.ctrl_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
10985 l_page_ui_node.model_ref_expl_id := l_page_node.pagebase_expl_node_id;
10986 l_page_ui_node.base_page_flag := G_YES_FLAG;
10987
10988 l_page_ui_node.deleted_flag := G_MARK_TO_ADD;
10989
10990 g_ELEMENT_COUNTER := 0;
10991 l_page_ui_node.name := 'Page Region - 1';
10992
10993 INSERT INTO CZ_UI_PAGE_ELEMENTS
10994 (ui_def_id,
10995 persistent_node_id,
10996 parent_persistent_node_id,
10997 region_persistent_node_id,
10998 pagebase_persistent_node_id,
10999 page_id,
11000 seq_nbr,
11001 ctrl_template_id,
11002 element_id,
11003 parent_element_id,
11004 element_type,
11005 instantiable_flag,
11006 ctrl_template_ui_def_id,
11007 model_ref_expl_id,
11008 base_page_flag,
11009 element_signature_id,
11010 name,
11011 deleted_flag)
11012 VALUES
11013 (l_page_ui_node.ui_def_id,
11014 l_page_ui_node.persistent_node_id,
11015 l_page_ui_node.parent_persistent_node_id,
11016 l_page_ui_node.region_persistent_node_id,
11017 l_page_ui_node.pagebase_persistent_node_id,
11018 l_page_ui_node.page_id,
11019 l_page_ui_node.seq_nbr,
11020 l_page_ui_node.ctrl_template_id,
11021 l_page_ui_node.element_id,
11022 l_page_ui_node.parent_element_id,
11023 l_page_ui_node.element_type,
11024 l_page_ui_node.instantiable_flag,
11025 l_page_ui_node.ctrl_template_ui_def_id,
11026 l_page_ui_node.model_ref_expl_id,
11027 l_page_ui_node.base_page_flag,
11028 6004,
11029 l_page_ui_node.name,
11030 l_page_ui_node.deleted_flag);
11031
11032 IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) AND
11033 NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
11034
11035 -- AND contains_BOM_Nodes(p_node) THEN -- related to bug #3622010
11036
11037 add_BOM_Node(p_node => p_node,
11038 p_page_id => l_page_ui_node.page_id,
11039 p_pagebase_expl_node_id => l_page_node.pagebase_expl_node_id,
11040 p_parent_element_id => l_page_ui_node.element_id,
11041 p_pagebase_persistent_node_id => l_page_ui_node.pagebase_persistent_node_id);
11042
11043 END IF;
11044
11045 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
11046 add_CX_Button(p_node => p_node,
11047 p_ui_node => l_page_ui_node);
11048 END IF;
11049
11050 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
11051 FOR i IN(SELECT *
11052 FROM CZ_UI_PAGE_ELEMENTS
11053 WHERE ui_def_id=l_page_ui_node.ui_def_id AND
11054 page_id=l_last_page_id AND
11055 persistent_node_id=l_page_ui_node.parent_persistent_node_id AND
11056 element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
11057 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
11058 LOOP
11059 IF NVL(i.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11060 IF l_is_inst_node THEN
11061 add_Instance_Controls(p_ui_node => l_page_ui_node,
11062 p_parent_ui_node => i,
11063 p_node => p_node);
11064 END IF;
11065 IF l_is_drilldown_node AND l_is_inst_node=FALSE THEN
11066 create_Drilldown_Button(p_parent_ui_node => i,
11067 p_ui_node => l_page_ui_node,
11068 p_page_set_id => l_page_set_id);
11069 END IF;
11070 END IF;
11071 END LOOP;
11072 END IF;
11073 --
11074 -- at this point UI page is already created ,but
11075 -- is not attached to any Page Sets yet
11076 --
11077
11078 IF l_is_drilldown_node=FALSE THEN
11079
11080 FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11081 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11082 page_set_id=l_page_set_id AND
11083 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11084 LOOP
11085
11086 /******** attach new UI Page to Page Set *********************/
11087 BEGIN
11088
11089 --
11090 -- create a new record for this UI page in CZ_UI_PAGE_REFS
11091 --
11092 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11093
11094 l_ref_pagebase_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
11095
11096 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11097
11098 SELECT COUNT(*)+1 INTO l_seq_nbr
11099 FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11100 deleted_flag=G_NO_FLAG;
11101
11102 ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11103
11104
11105 l_seq_nbr := get_new_page_ref_seq(p_node, l_page_set_id, l_parent_page_ref_id);
11106
11107 UPDATE CZ_UI_PAGE_REFS
11108 SET seq_nbr = seq_nbr + 1
11109 WHERE ui_def_id = g_UI_Context.ui_def_id
11110 AND page_set_id = l_page_set_id
11111 AND parent_page_ref_id = l_parent_page_ref_id
11112 AND seq_nbr >= l_seq_nbr
11113 AND deleted_flag = G_NO_FLAG;
11114
11115 ELSE
11116 IF l_seq_nbr IS NULL THEN
11117 l_seq_nbr :=p_node.tree_seq;
11118 END IF;
11119 END IF;
11120
11121 INSERT INTO CZ_UI_PAGE_REFS
11122 (ui_def_id,
11123 page_set_id,
11124 page_ref_id,
11125 parent_page_ref_id,
11126 seq_nbr,
11127 node_depth,
11128 condition_id,
11129 NAME,
11130 caption_source,
11131 target_persistent_node_id,
11132 target_path,
11133 target_ui_def_id,
11134 target_page_set_id,
11135 target_page_id,
11136 modified_flags,
11137 path_to_prev_page,
11138 path_to_next_page,
11139 page_ref_type,
11140 target_expl_node_id,
11141 caption_rule_id,
11142 deleted_flag)
11143 VALUES
11144 (g_UI_Context.ui_def_id,
11145 l_page_set_id,
11146 l_page_ref_id,
11147 l_parent_page_ref_id,
11148 l_seq_nbr,
11149 l_node_depth,
11150 NULL,
11151 p_node.name,
11152 G_DEFAULT_CAPTION_RULE_ID,
11153 p_node.persistent_node_id,
11154 l_ref_pagebase_path,
11155 NULL,
11156 NULL,
11157 l_page_ui_node.page_id,
11158 0,
11159 NULL,
11160 NULL,
11161 l_page_set_type,
11162 l_page_node.pagebase_expl_node_id,
11163 NULL,
11164 G_NO_FLAG);
11165
11166 EXCEPTION
11167 WHEN OTHERS THEN
11168 DEBUG('create_UI_Page() : '||SQLERRM);
11169 NULL;
11170 END;
11171
11172 /******** end of attaching to Page Set *********************/
11173
11174 x_page_set_id := l_page_set_id;
11175 x_page_set_type := l_page_set_type;
11176 x_page_ref_id := l_page_ref_id;
11177 END LOOP;
11178
11179 END IF;
11180
11181 RETURN l_page_ui_node;
11182
11183 END create_UI_Page;
11184
11185 --
11186 -- create nested Region
11187 --
11188 FUNCTION create_UI_Region(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11189 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11190 p_insert_index IN NUMBER DEFAULT -1)
11191 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
11192
11193 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
11194 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
11195 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
11196 l_counter NUMBER;
11197 l_parent_seq_nbr NUMBER;
11198 l_last_seq_nbr NUMBER;
11199 l_prev_seq_nbr NUMBER;
11200 l_max_prev_seq_nbr NUMBER;
11201 l_child_count NUMBER;
11202 l_page_id NUMBER;
11203
11204 BEGIN
11205
11206 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
11207 RETURN l_ui_node;
11208 END IF;
11209
11210 -- do not create UI region if already exists UI page with the same persistent_node_id
11211 BEGIN
11212 SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
11213 WHERE ui_def_id=g_UI_CONTEXT.ui_def_id AND persistent_node_id=p_node.persistent_node_id AND
11214 deleted_flag NOT IN (G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG) AND rownum<2;
11215 RETURN l_ui_node;
11216 EXCEPTION
11217 WHEN NO_DATA_FOUND THEN
11218 NULL;
11219 END;
11220 l_ui_node.ui_def_id := g_UI_Context.ui_def_id;
11221 l_ui_node.persistent_node_id := p_node.persistent_node_id;
11222 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
11223 l_ui_node.region_persistent_node_id := p_node.persistent_node_id;
11224 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.persistent_node_id;
11225 l_ui_node.page_id := p_parent_ui_node.page_id;
11226
11227 IF p_insert_index = -1 THEN
11228 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
11229 START WITH ui_def_id=g_UI_Context.ui_def_id AND
11230 page_id=p_parent_ui_node.page_id AND
11231 element_id=p_parent_ui_node.element_id AND
11232 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
11233 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11234 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
11235 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
11236 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11237 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11238 ELSE
11239 l_max_prev_seq_nbr := p_insert_index-1;
11240 END IF;
11241
11242 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
11243
11244 UPDATE CZ_UI_PAGE_ELEMENTS
11245 SET seq_nbr=seq_nbr+1
11246 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11247 page_id=p_parent_ui_node.page_id AND
11248 seq_nbr>l_max_prev_seq_nbr AND
11249 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11250
11251 l_ui_node.element_id := get_Element_Id();
11252
11253 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
11254
11255 l_ui_node.element_type := G_UI_REGION_NODE_TYPE;
11256 l_ui_node.instantiable_flag := p_node.instantiable_flag;
11257 l_ui_node.ctrl_template_id := G_NSTD_CONTAINER_TEMPLATE_ID;
11258 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
11259 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
11260 p_ps_node_id => p_node.ps_node_id,
11261 p_component_id => p_node.component_id,
11262 p_ps_node_type => p_node.ps_node_type);
11263 l_ui_node.element_signature_id := 6007;
11264 l_ui_node.deleted_flag := G_MARK_TO_ADD;
11265
11266 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
11267 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11268 page_id=l_ui_node.page_id AND
11269 ctrl_template_id=l_ui_node.ctrl_template_id AND
11270 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11271
11272 l_ui_node.name :='Nested Region - '||TO_CHAR(l_counter);
11273
11274 INSERT INTO CZ_UI_PAGE_ELEMENTS
11275 (ui_def_id,
11276 persistent_node_id,
11277 parent_persistent_node_id,
11278 region_persistent_node_id,
11279 pagebase_persistent_node_id,
11280 page_id,
11281 seq_nbr,
11282 ctrl_template_id,
11283 element_id,
11284 parent_element_id,
11285 element_type,
11286 instantiable_flag,
11287 ctrl_template_ui_def_id,
11288 model_ref_expl_id,
11289 element_signature_id,
11290 name,
11291 deleted_flag)
11292 VALUES
11293 (l_ui_node.ui_def_id,
11294 l_ui_node.persistent_node_id,
11295 l_ui_node.parent_persistent_node_id,
11296 l_ui_node.region_persistent_node_id,
11297 l_ui_node.pagebase_persistent_node_id,
11298 l_ui_node.page_id,
11299 l_ui_node.seq_nbr,
11300 l_ui_node.ctrl_template_id,
11301 l_ui_node.element_id,
11302 l_ui_node.parent_element_id,
11303 l_ui_node.element_type,
11304 l_ui_node.instantiable_flag,
11305 l_ui_node.ctrl_template_ui_def_id,
11306 l_ui_node.model_ref_expl_id,
11307 l_ui_node.element_signature_id,
11308 l_ui_node.name,
11309 l_ui_node.deleted_flag);
11310
11311 --
11312 -- add UI Elements node to cache
11313 --
11314 g_ui_page_elements_tbl(TO_NUMBER(l_ui_node.element_id)) := l_ui_node;
11315
11316 IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
11317 add_BOM_Node(p_node => p_node,
11318 p_page_id => l_ui_node.page_id,
11319 p_pagebase_expl_node_id => l_ui_node.model_ref_expl_id,
11320 p_parent_element_id => l_ui_node.element_id,
11321 p_pagebase_persistent_node_id => l_ui_node.pagebase_persistent_node_id);
11322
11323 END IF;
11324
11325 --
11326 -- mark UI Page as refreshed
11327 --
11328 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11329 add_CX_Button(p_node => p_node,
11330 p_ui_node => l_ui_node);
11331
11332 RETURN l_ui_node;
11333
11334 END create_UI_Region;
11335
11336 --
11337 -- create new UI Reference
11338 --
11339 FUNCTION create_UI_Reference(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11340 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
11341 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
11342
11343 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
11344 l_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
11345 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
11346 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11347 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
11348 l_max_seq_nbr CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
11349 l_ps_node_type CZ_PS_NODES.ps_node_type%TYPE;
11350 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
11351 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
11352 l_counter NUMBER;
11353 l_persistent_node_id NUMBER;
11354 l_seq_nbr NUMBER;
11355 l_max_prev_seq_nbr NUMBER;
11356
11357 BEGIN
11358
11359 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
11360 RETURN l_ui_node;
11361 END IF;
11362
11363 --
11364 -- get UI Def data of referenced UI
11365 --
11366 l_target_ui_def_node := get_Target_UI_Context(p_ui_def_node => g_UI_Context,
11367 p_reference_id => p_node.reference_id);
11368
11369 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
11370 p_ps_node_id => p_node.ps_node_id,
11371 p_component_id => p_node.component_id,
11372 p_ps_node_type => p_node.ps_node_type);
11373
11374 l_ui_node.ui_def_id := p_parent_ui_node.ui_def_id;
11375 l_ui_node.persistent_node_id := p_node.persistent_node_id;
11376 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
11377 l_ui_node.region_persistent_node_id := p_parent_ui_node.region_persistent_node_id;
11378 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
11379 l_ui_node.page_id := p_parent_ui_node.page_id;
11380
11381
11382 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
11383 START WITH ui_def_id=g_UI_Context.ui_def_id AND
11384 page_id=p_parent_ui_node.page_id AND
11385 element_id=p_parent_ui_node.element_id AND
11386 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
11387 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11388 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
11389 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
11390 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11391 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11392
11393 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
11394
11395 UPDATE CZ_UI_PAGE_ELEMENTS
11396 SET seq_nbr=seq_nbr+1
11397 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11398 page_id=p_parent_ui_node.page_id AND
11399 seq_nbr>l_max_prev_seq_nbr AND
11400 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11401
11402
11403 l_ui_node.ctrl_template_id := p_node.template_id;
11404 l_ui_node.element_id := get_Element_Id();
11405 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
11406
11407 IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
11408 l_ui_node.element_type := G_UI_DRILLDOWN_NODE_TYPE;
11409 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
11410 l_ui_node.element_type := G_UI_NONBOMADDINST_NODE_TYPE;
11411 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
11412 l_ui_node.element_type := G_UI_BOMADDINST_NODE_TYPE;
11413 ELSE
11414 NULL;
11415 END IF;
11416
11417 l_ui_node.instantiable_flag := p_node.instantiable_flag;
11418 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
11419 l_ui_node.element_signature_id := p_node.root_element_signature_id;
11420 l_ui_node.deleted_flag := G_MARK_TO_ADD;
11421
11422 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
11423 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11424 page_id=l_ui_node.page_id AND
11425 ctrl_template_id=l_ui_node.ctrl_template_id AND
11426 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11427
11428 l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
11429
11430 --
11431 -- special handling for BOM referencies
11432 --
11433
11434 IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
11435 BEGIN
11436
11437 SELECT NVL(MAX(seq_nbr),0) INTO l_max_seq_nbr
11438 FROM CZ_UI_PAGE_ELEMENTS
11439 WHERE ui_def_id=l_ui_node.ui_def_id
11440 AND parent_element_id=l_ui_node.parent_element_id
11441 AND deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD)
11442 AND element_type IN(G_UI_BOMADDINST_NODE_TYPE);
11443
11444 SELECT persistent_node_id INTO l_persistent_node_id
11445 FROM CZ_UI_PAGE_ELEMENTS
11446 WHERE ui_def_id=l_ui_node.ui_def_id AND
11447 parent_element_id=l_ui_node.parent_element_id AND
11448 seq_nbr=l_max_seq_nbr AND
11449 ROWNUM<2;
11450
11451 l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id,g_UI_COntext.devl_project_id);
11452
11453 SELECT ps_node_type INTO l_ps_node_type
11454 FROM CZ_PS_NODES
11455 WHERE devl_project_id=p_node.reference_id AND
11456 parent_id IS NULL AND
11457 deleted_flag=G_NO_FLAG;
11458
11459 IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
11460 (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
11461 l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
11462 l_ui_node.ctrl_template_id := NULL;
11463 l_ui_node.ctrl_template_ui_def_id := NULL;
11464 END IF;
11465
11466 EXCEPTION
11467 WHEN OTHERS THEN
11468 DEBUG('create_UI_Reference() : '||SQLERRM);
11469 END;
11470 END IF;
11471
11472 --
11473 -- model nodes must have associated record in CZ_UI_PAGE_ELEMENTS
11474 --
11475 INSERT INTO CZ_UI_PAGE_ELEMENTS
11476 (ui_def_id,
11477 persistent_node_id,
11478 parent_persistent_node_id,
11479 region_persistent_node_id,
11480 pagebase_persistent_node_id,
11481 page_id,
11482 seq_nbr,
11483 ctrl_template_id,
11484 element_id,
11485 parent_element_id,
11486 element_type,
11487 instantiable_flag,
11488 ctrl_template_ui_def_id,
11489 model_ref_expl_id,
11490 element_signature_id,
11491 name,
11492 deleted_flag)
11493 VALUES
11494 (l_ui_node.ui_def_id,
11495 l_ui_node.persistent_node_id,
11496 l_ui_node.parent_persistent_node_id,
11497 l_ui_node.region_persistent_node_id,
11498 l_ui_node.pagebase_persistent_node_id,
11499 l_ui_node.page_id,
11500 l_ui_node.seq_nbr,
11501 l_ui_node.ctrl_template_id,
11502 l_ui_node.element_id,
11503 l_ui_node.parent_element_id,
11504 l_ui_node.element_type,
11505 l_ui_node.instantiable_flag,
11506 l_ui_node.ctrl_template_ui_def_id,
11507 l_ui_node.model_ref_expl_id,
11508 l_ui_node.element_signature_id,
11509 l_ui_node.name,
11510 l_ui_node.deleted_flag);
11511
11512 BEGIN
11513
11514 UPDATE CZ_UI_REFS
11515 SET deleted_flag=G_NO_FLAG
11516 WHERE
11517 ui_def_id = l_ui_node.ui_def_id AND
11518 ref_persistent_node_id = l_ui_node.persistent_node_id;
11519
11520 IF SQL%ROWCOUNT=0 THEN
11521 INSERT INTO CZ_UI_REFS
11522 (ui_def_id,
11523 ref_ui_def_id,
11524 ref_persistent_node_id,
11525 model_ref_expl_id,
11526 deleted_flag)
11527 VALUES
11528 (l_ui_node.ui_def_id,
11529 l_target_ui_def_node.ui_def_id,
11530 l_ui_node.persistent_node_id,
11531 l_ui_node.model_ref_expl_id,
11532 G_NO_FLAG);
11533 END IF;
11534
11535 EXCEPTION
11536 WHEN OTHERS THEN
11537 NULL;
11538 END;
11539
11540 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
11541 INSERT INTO CZ_UI_ACTIONS
11542 (ui_action_id,
11543 ui_def_id,
11544 source_page_id,
11545 context_component_id,
11546 element_id,
11547 ui_action_type,
11548 target_ui_def_id,
11549 target_persistent_node_id,
11550 target_node_path,
11551 target_page_set_id,
11552 target_page_id,
11553 target_expl_node_id,
11554 seeded_flag,
11555 deleted_flag)
11556 VALUES
11557 (l_ui_action_id,
11558 l_ui_node.ui_def_id,
11559 l_ui_node.page_id,
11560 l_ui_node.region_persistent_node_id,
11561 l_ui_node.element_id,
11562 G_ACTION_CONFIGURE_SUBCOMP,
11563 l_target_ui_def_node.ui_def_id,
11564 p_node.persistent_node_id,
11565 TO_CHAR(p_node.persistent_node_id),
11566 l_target_ui_def_node.page_set_id,
11567 l_target_ui_def_node.start_page_id,
11568 l_ui_node.model_ref_expl_id,
11569 G_NO_FLAG,
11570 G_NO_FLAG);
11571
11572 add_CX_Button(p_node => p_node,
11573 p_ui_node => l_ui_node);
11574
11575 --
11576 -- mark UI Page as refreshed
11577 --
11578 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11579
11580 IF NOT(l_target_ui_def_node.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
11581 g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU) THEN
11582 RETURN l_ui_node;
11583 END IF;
11584
11585 BEGIN
11586 l_page_ref_node := get_UI_Page_Ref_Node(p_ui_node => p_parent_ui_node);
11587 EXCEPTION
11588 WHEN NO_DATA_FOUND THEN
11589 RETURN l_ui_node;
11590 END;
11591
11592 FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11593 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11594 page_set_id=l_page_ref_node.page_set_id AND
11595 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11596 LOOP
11597
11598 --
11599 -- create a new record for this UI page in CZ_UI_PAGE_REFS
11600 --
11601 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11602
11603 IF l_target_ui_def_node.start_page_id=-1 THEN
11604
11605 SELECT MIN(page_id) INTO l_target_ui_def_node.start_page_id
11606 FROM CZ_UI_PAGES
11607 WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND
11608 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
11609
11610 SELECT MIN(page_set_id) INTO l_target_ui_def_node.page_set_id
11611 FROM CZ_UI_PAGE_SETS
11612 WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND deleted_flag=G_NO_FLAG;
11613
11614 END IF;
11615
11616 l_target_path := get_Page_Path(p_node.ps_node_id,l_page_ref_node.page_set_id);
11617
11618 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11619 SELECT COUNT(*)+1 INTO l_seq_nbr
11620 FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11621 deleted_flag=G_NO_FLAG;
11622 ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11623
11624 l_seq_nbr := get_new_page_ref_seq(p_node, l_page_ref_node.page_set_id, l_page_ref_node.page_ref_id);
11625
11626 UPDATE CZ_UI_PAGE_REFS
11627 SET seq_nbr = seq_nbr + 1
11628 WHERE ui_def_id = g_UI_Context.ui_def_id
11629 AND page_set_id = l_page_ref_node.page_set_id
11630 AND parent_page_ref_id = l_page_ref_node.page_ref_id
11631 AND seq_nbr >= l_seq_nbr
11632 AND deleted_flag = G_NO_FLAG;
11633 ELSE
11634 l_seq_nbr :=p_node.tree_seq;
11635 END IF;
11636
11637 INSERT INTO CZ_UI_PAGE_REFS
11638 (ui_def_id,
11639 page_set_id,
11640 page_ref_id,
11641 parent_page_ref_id,
11642 seq_nbr,
11643 node_depth,
11644 NAME,
11645 caption_source,
11646 target_persistent_node_id,
11647 target_path,
11648 target_ui_def_id,
11649 target_page_set_id,
11650 target_page_id,
11651 modified_flags,
11652 page_ref_type,
11653 target_expl_node_id,
11654 caption_rule_id,
11655 deleted_flag)
11656 VALUES
11657 (l_ui_node.ui_def_id,
11658 l_page_ref_node.page_set_id,
11659 l_page_ref_id,
11660 l_page_ref_node.page_ref_id,
11661 l_seq_nbr,
11662 l_page_ref_node.node_depth+1,
11663 p_node.NAME,
11664 G_DEFAULT_CAPTION_RULE_ID,
11665 p_node.persistent_node_id,
11666 l_target_path,
11667 l_target_ui_def_node.ui_def_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.ui_def_id,
11668 l_target_ui_def_node.page_set_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.page_set_id,
11669 l_target_ui_def_node.start_page_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.start_page_id,
11670 0,
11671 l_page_ref_node.page_ref_type,
11672 l_ui_node.model_ref_expl_id,
11673 NULL,
11674 G_NO_FLAG);
11675
11676 END LOOP;
11677
11678 RETURN l_ui_node;
11679
11680 END create_UI_Reference;
11681
11682 --
11683 -- delete UI element recursively
11684 --
11685 PROCEDURE delete_UI_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11686 p_suppress_refresh_flag IN CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE DEFAULT NULL,
11687 p_delete_in_model IN BOOLEAN DEFAULT NULL) IS
11688
11689 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11690 l_del_flag BOOLEAN := FALSE;
11691 BEGIN
11692
11693 --
11694 -- get suppress_refresh_flag flag of UI region to which this element
11695 -- belong to
11696 --
11697 IF p_suppress_refresh_flag IS NULL THEN
11698 FOR i IN (SELECT persistent_node_id,region_persistent_node_id,suppress_refresh_flag
11699 FROM CZ_UI_PAGE_ELEMENTS
11700 START WITH ui_def_id = p_ui_node.ui_def_id AND
11701 deleted_flag IN
11702 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11703 G_MARK_TO_DELETE) AND element_id = p_ui_node.element_id
11704 CONNECT BY PRIOR parent_element_id = element_id AND
11705 deleted_flag IN
11706 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11707 G_MARK_TO_DELETE) AND
11708 PRIOR deleted_flag IN
11709 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11710 G_MARK_TO_DELETE))
11711 LOOP
11712 IF i.persistent_node_id=i.region_persistent_node_id THEN
11713 l_suppress_refresh_flag := i.suppress_refresh_flag;
11714 END IF;
11715 END LOOP;
11716 ELSE
11717 IF p_suppress_refresh_flag=G_YES_FLAG THEN
11718 l_suppress_refresh_flag := p_suppress_refresh_flag;
11719 ELSE
11720 l_suppress_refresh_flag := p_ui_node.suppress_refresh_flag;
11721 END IF;
11722 END IF;
11723
11724 --
11725 -- if suppress_refresh_flag = true (G_YES_FLAG) then
11726 -- node will be deleted
11727 -- else node will be deassiated from model node
11728 --
11729 IF NVL(l_suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
11730
11731 --
11732 -- delete UI element
11733 --
11734 UPDATE CZ_UI_PAGE_ELEMENTS
11735 SET deleted_flag = G_MARK_TO_DELETE
11736 WHERE ui_def_id = p_ui_node.ui_def_id AND
11737 element_id IN
11738 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11739 START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11740 CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND ui_def_id=p_ui_node.ui_def_id AND
11741 PRIOR element_id=parent_element_id AND
11742 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11743 PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11744
11745 l_del_flag := TRUE;
11746
11747 ELSE
11748 IF p_delete_in_model THEN
11749 --
11750 -- deassociate UI element from model node
11751 --
11752 UPDATE CZ_UI_PAGE_ELEMENTS
11753 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11754 persistent_node_id = 0
11755 WHERE ui_def_id = p_ui_node.ui_def_id AND
11756 element_id IN
11757 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11758 START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11759 CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND
11760 PRIOR element_id=parent_element_id AND
11761 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11762 PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11763 l_del_flag := TRUE;
11764 END IF;
11765 END IF;
11766
11767 IF l_del_flag THEN
11768 --
11769 -- delete UI Ref from Page Sets
11770 --
11771 UPDATE CZ_UI_PAGE_REFS
11772 SET deleted_flag = G_YES_FLAG
11773 WHERE ui_def_id=p_ui_node.ui_def_id AND
11774 target_persistent_node_id=p_ui_node.persistent_node_id AND
11775 deleted_flag=G_NO_FLAG AND
11776 target_page_id NOT IN(SELECT page_id FROM CZ_UI_PAGES
11777 WHERE ui_def_id=g_UI_Context.ui_def_id);
11778
11779 IF SQL%ROWCOUNT>0 THEN
11780 --
11781 -- delete UI Ref
11782 --
11783 UPDATE CZ_UI_REFS
11784 SET deleted_flag = G_YES_FLAG
11785 WHERE ui_def_id=p_ui_node.ui_def_id AND
11786 ref_persistent_node_id=p_ui_node.persistent_node_id AND
11787 deleted_flag=G_NO_FLAG AND NOT EXISTS
11788 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11789 WHERE ui_def_id=p_ui_node.ui_def_id AND
11790 persistent_node_id=p_ui_node.persistent_node_id AND
11791 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH));
11792 END IF;
11793
11794 END IF;
11795
11796 --
11797 -- mark UI Page as refreshed
11798 --
11799 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11800
11801 END delete_UI_Element;
11802
11803 --
11804 -- remove UI Page Ref record
11805 --
11806 PROCEDURE remove_UI_Page_Ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11807
11808 l_page_ref_id NUMBER;
11809 l_parent_page_ref_id NUMBER;
11810 l_page_set_id NUMBER;
11811 l_seq_nbr NUMBER;
11812
11813 BEGIN
11814
11815 SELECT MIN(page_ref_id) INTO l_page_ref_id
11816 FROM CZ_UI_PAGE_REFS
11817 WHERE ui_def_id=p_ui_node.ui_def_id AND
11818 target_page_id=p_ui_node.page_id AND
11819 deleted_flag=G_NO_FLAG;
11820
11821 UPDATE CZ_UI_PAGE_REFS
11822 SET deleted_flag = G_YES_FLAG
11823 WHERE ui_def_id=p_ui_node.ui_def_id AND
11824 page_ref_id=l_page_ref_id
11825 RETURNING parent_page_ref_id,page_set_id,seq_nbr
11826 INTO l_parent_page_ref_id,l_page_set_id,l_seq_nbr;
11827
11828
11829 --
11830 -- update seq nbr to seq nbr - 1
11831 --
11832 UPDATE CZ_UI_PAGE_REFS
11833 SET seq_nbr = seq_nbr - 1
11834 WHERE ui_def_id=p_ui_node.ui_def_id AND
11835 page_set_id=l_page_set_id AND
11836 parent_page_ref_id = l_parent_page_ref_id AND
11837 seq_nbr > l_seq_nbr AND
11838 deleted_flag=G_NO_FLAG;
11839
11840
11841 EXCEPTION
11842 WHEN OTHERS THEN
11843 NULL;
11844 END remove_UI_Page_Ref;
11845
11846 PROCEDURE delete_Related_Buttons(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11847 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11848 BEGIN
11849
11850 FOR i IN(SELECT element_id,parent_element_id,page_id,suppress_refresh_flag
11851 FROM CZ_UI_PAGE_ELEMENTS a
11852 WHERE ui_def_id=p_ui_node.ui_def_id AND
11853 persistent_node_id=p_ui_node.persistent_node_id AND
11854 element_type IN(G_UI_BOMADDINST_NODE_TYPE,
11855 G_UI_NONBOMADDINST_NODE_TYPE,
11856 G_UI_PAGEDRILLDOWN_NODE_TYPE) AND
11857 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG))
11858 LOOP
11859
11860 IF i.parent_element_id IS NOT NULL THEN
11861 BEGIN
11862 l_suppress_refresh_flag := G_NO_FLAG;
11863 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11864 FROM CZ_UI_PAGE_ELEMENTS
11865 WHERE ui_def_id = p_ui_node.ui_def_id AND
11866 page_id = i.page_id AND
11867 element_id=i.parent_element_id;
11868 EXCEPTION
11869 WHEN NO_DATA_FOUND THEN
11870 NULL;
11871 END;
11872 END IF;
11873
11874 IF l_suppress_refresh_flag=G_YES_FLAG OR i.suppress_refresh_flag=G_YES_FLAG THEN
11875 UPDATE CZ_UI_PAGE_ELEMENTS
11876 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11877 persistent_node_id=0
11878 WHERE ui_def_id = p_ui_node.ui_def_id AND
11879 page_id = i.page_id AND
11880 element_id = i.element_id;
11881 ELSE
11882 UPDATE CZ_UI_PAGE_ELEMENTS
11883 SET deleted_flag = G_MARK_TO_DELETE
11884 WHERE ui_def_id = p_ui_node.ui_def_id AND
11885 page_id = i.page_id AND
11886 element_id = i.element_id;
11887 END IF;
11888
11889 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11890
11891 END LOOP;
11892
11893 END delete_Related_Buttons;
11894
11895 --
11896 -- delete UI container
11897 --
11898 PROCEDURE delete_UI_Container(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11899 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11900 l_element_id_tbl varchar_tbl_type;
11901 l_parent_element_id_tbl varchar_tbl_type;
11902 l_persistent_node_id_tbl number_tbl_type;
11903 l_suppress_refresh_flag_tbl varchar_tbl_type;
11904 l_page_id_tbl number_tbl_type;
11905 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11906
11907 BEGIN
11908
11909 --
11910 -- if it's a page remove page and corresponding UI Page ref record
11911 --
11912 IF p_ui_node.parent_element_id IS NULL THEN
11913
11914 SELECT element_id, parent_element_id, persistent_node_id,page_id, NVL(suppress_refresh_flag,G_NO_FLAG)
11915 BULK COLLECT INTO l_element_id_tbl, l_parent_element_id_tbl, l_persistent_node_id_tbl,
11916 l_page_id_tbl, l_suppress_refresh_flag_tbl
11917 FROM CZ_UI_PAGE_ELEMENTS
11918 WHERE ui_def_id=p_ui_node.ui_def_id AND
11919 page_id=p_ui_node.page_id AND
11920 deleted_flag NOT IN(G_YES_FLAG);
11921
11922 delete_Related_Buttons(p_ui_node);
11923
11924 --
11925 -- mark this UI Page as deleted
11926 --
11927 mark_UI_Page_As_Deleted(p_ui_node.page_id, p_ui_node.ui_def_id);
11928
11929 --
11930 -- remove corresponding UI page ref record
11931 --
11932 remove_UI_Page_Ref(p_ui_node);
11933
11934 ELSE
11935
11936 SELECT element_id,persistent_node_id,page_id, suppress_refresh_flag
11937 BULK COLLECT INTO l_element_id_tbl, l_persistent_node_id_tbl,
11938 l_page_id_tbl, l_suppress_refresh_flag_tbl
11939 FROM CZ_UI_PAGE_ELEMENTS
11940 START WITH ui_def_id=p_ui_node.ui_def_id AND
11941 page_id=p_ui_node.page_id AND
11942 element_id=p_ui_node.element_id
11943 CONNECT BY PRIOR element_id=parent_element_id AND
11944 ui_def_id=p_ui_node.ui_def_id AND PRIOR
11945 ui_def_id=p_ui_node.ui_def_id;
11946
11947 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11948
11949 END IF;
11950
11951 IF l_element_id_tbl.COUNT=0 THEN
11952 RETURN;
11953 END IF;
11954
11955 FOR i IN l_element_id_tbl.FIRST..l_element_id_tbl.LAST
11956 LOOP
11957
11958 BEGIN
11959 l_suppress_refresh_flag := G_NO_FLAG;
11960 IF l_parent_element_id_tbl(i) IS NOT NULL THEN
11961 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11962 FROM CZ_UI_PAGE_ELEMENTS
11963 WHERE ui_def_id = p_ui_node.ui_def_id AND
11964 page_id = p_ui_node.page_id AND
11965 element_id=l_parent_element_id_tbl(i);
11966 END IF;
11967 EXCEPTION
11968 WHEN NO_DATA_FOUND THEN
11969 NULL;
11970 END;
11971
11972 IF l_suppress_refresh_flag=G_YES_FLAG OR l_suppress_refresh_flag_tbl(i)=G_YES_FLAG THEN
11973 UPDATE CZ_UI_PAGE_ELEMENTS
11974 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11975 persistent_node_id=0
11976 WHERE ui_def_id = p_ui_node.ui_def_id AND
11977 page_id = p_ui_node.page_id AND
11978 element_id = l_element_id_tbl(i);
11979 ELSE
11980 UPDATE CZ_UI_PAGE_ELEMENTS
11981 SET deleted_flag = G_MARK_TO_DELETE
11982 WHERE ui_def_id = p_ui_node.ui_def_id AND
11983 page_id = p_ui_node.page_id AND
11984 element_id = l_element_id_tbl(i);
11985 END IF;
11986
11987 UPDATE CZ_UI_ACTIONS
11988 SET deleted_flag=G_YES_FLAG
11989 WHERE ui_def_id=p_ui_node.ui_def_id AND
11990 source_page_id=p_ui_node.page_id AND
11991 element_id=l_element_id_tbl(i);
11992 END LOOP;
11993
11994 END delete_UI_Container;
11995
11996 PROCEDURE handle_Deleted_Nodes(p_ui_def_id IN NUMBER) IS
11997
11998 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11999
12000 BEGIN
12001
12002 -- delete UI References
12003 UPDATE CZ_UI_PAGE_REFS uiref
12004 SET deleted_flag=G_YES_FLAG
12005 WHERE ui_def_id=p_ui_def_id AND target_ui_def_id IS NOT NULL AND
12006 NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
12007 WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
12008 WHERE b.ui_def_id=p_ui_def_id) AND
12009 persistent_node_id=uiref.target_persistent_node_id AND deleted_flag=G_NO_FLAG)
12010 AND deleted_flag=G_NO_FLAG;
12011
12012 UPDATE CZ_UI_REFS uiref
12013 SET deleted_flag=G_YES_FLAG
12014 WHERE ui_def_id=p_ui_def_id AND
12015 NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
12016 WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
12017 WHERE b.ui_def_id=p_ui_def_id) AND
12018 persistent_node_id=uiref.ref_persistent_node_id AND deleted_flag=G_NO_FLAG)
12019 AND deleted_flag=G_NO_FLAG;
12020
12021 END handle_Deleted_Nodes;
12022
12023 --
12024 -- delete UI page
12025 --
12026 PROCEDURE delete_UI_Page(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12027
12028 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
12029 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12030 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
12031 l_path_to_next_page CZ_UI_PAGE_REFS.path_to_next_page%TYPE;
12032 l_target_persistent_node_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
12033 l_target_page_id CZ_UI_PAGE_REFS.target_page_id%TYPE;
12034 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
12035 l_ui_page_node CZ_UI_PAGES%ROWTYPE;
12036 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12037
12038
12039 BEGIN
12040 --
12041 -- delete all child UI nodes
12042 --
12043 delete_UI_Container(p_ui_node);
12044
12045 END delete_UI_Page;
12046
12047 --
12048 -- delete UI region
12049 --
12050 PROCEDURE delete_UI_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12051 BEGIN
12052 delete_UI_Container(p_ui_node);
12053 END delete_UI_Region;
12054
12055
12056 PROCEDURE replace_page_ref_target_path(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12057 p_page_id IN CZ_UI_PAGES.page_id%TYPE) IS
12058
12059 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
12060 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12061 l_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12062 l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12063
12064 BEGIN
12065
12066 SELECT page_set_id,pagebase_path INTO l_page_set_id,l_old_page_path_from_root FROM CZ_UI_PAGES
12067 WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
12068
12069 l_target_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
12070 l_page_path_from_root := get_Page_Path(p_node.ps_node_id, NULL);
12071
12072 IF l_page_path_from_root <> l_old_page_path_from_root THEN
12073 UPDATE CZ_UI_PAGES
12074 SET pagebase_path=l_page_path_from_root,
12075 deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12076 WHERE page_id=p_page_id AND
12077 ui_def_id=g_UI_Context.ui_def_id AND
12078 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
12079
12080 IF SQL%ROWCOUNT>0 THEN
12081 --DEBUG('asp: updating target path 3 for page ' || p_page_id || ' to ' || l_target_path);
12082 UPDATE CZ_UI_PAGE_REFS
12083 SET target_path=l_target_path
12084 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12085 target_page_id=p_page_id;
12086 END IF;
12087 END IF;
12088
12089 END replace_page_ref_target_path;
12090
12091 PROCEDURE replace_page_ref_target_path(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12092 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12093 BEGIN
12094
12095 IF p_node.ps_node_type = G_REFERENCE_TYPE AND
12096 g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
12097
12098 FOR i in (SELECT page_set_id, page_ref_id
12099 FROM CZ_UI_PAGE_REFS
12100 WHERE ui_def_id = g_UI_Context.ui_def_id
12101 AND target_ui_def_id IS NOT NULL
12102 AND target_page_id IS NOT NULL
12103 AND target_persistent_node_id = p_node.persistent_node_id
12104 AND deleted_flag = G_NO_FLAG)
12105
12106 LOOP
12107 l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12108 --DEBUG('asp: updating target path 10 for page ref ' || i.page_ref_id || ' to ' || l_target_path);
12109 UPDATE CZ_UI_PAGE_REFS
12110 SET target_path=l_target_path
12111 WHERE ui_def_id=g_UI_Context.ui_def_id
12112 AND page_set_id = i.page_set_id
12113 AND page_ref_id = i.page_ref_id;
12114 END LOOP;
12115
12116 ELSE
12117 FOR i in (SELECT page_id
12118 FROM CZ_UI_PAGES
12119 WHERE ui_def_id = g_UI_Context.ui_def_id
12120 AND persistent_node_id = p_node.persistent_node_id
12121 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
12122 LOOP
12123 replace_page_ref_target_path(p_node, i.page_id);
12124 END LOOP;
12125 END IF;
12126 END replace_page_ref_target_path;
12127
12128
12129 PROCEDURE replace_page_ref_target_path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12130 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12131
12132 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
12133 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12134 l_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12135 l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
12136
12137 BEGIN
12138
12139 replace_page_ref_target_path(p_node, p_ui_node.page_id);
12140
12141 END replace_page_ref_target_path;
12142
12143 PROCEDURE move_page_ref(p_page_set_id IN CZ_UI_PAGE_REFS.page_set_id%TYPE,
12144 p_page_ref_id IN CZ_UI_PAGE_REFS.page_ref_id%TYPE,
12145 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12146 x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
12147
12148
12149 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
12150 l_new_parent_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
12151 l_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
12152 l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
12153
12154 BEGIN
12155
12156 x_new_parent_page_ref_id := NULL;
12157
12158
12159 IF p_page_set_id IS NOT NULL THEN
12160 SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
12161 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id;
12162 END IF;
12163
12164 BEGIN
12165 SELECT page_ref_type, node_depth
12166 INTO l_page_ref_type, l_node_depth
12167 FROM CZ_UI_PAGE_REFS
12168 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12169 page_ref_id=p_page_ref_id AND
12170 deleted_flag=G_NO_FLAG;
12171
12172 -- get new parent page ref id
12173 BEGIN
12174 SELECT MIN(page_ref_id)
12175 INTO x_new_parent_page_ref_id
12176 FROM CZ_UI_PAGE_REFS
12177 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12178 target_persistent_node_id=p_node.parent_persistent_node_id AND
12179 deleted_flag=G_NO_FLAG;
12180
12181 SELECT node_depth
12182 INTO l_new_parent_node_depth
12183 FROM CZ_UI_PAGE_REFS
12184 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12185 page_ref_id=x_new_parent_page_ref_id;
12186
12187 EXCEPTION
12188 WHEN NO_DATA_FOUND THEN
12189 NULL;
12190 END;
12191
12192 IF x_new_parent_page_ref_id IS NULL THEN -- parent node does not exists in CZ_UI_PAGE_REFS
12193
12194 IF l_page_ref_type IN (G_MODEL_TREE_MENU) AND p_node.parent_id IS NOT NULL THEN
12195 --DEBUG('asp: Deleting page_ref 5 ' || p_page_ref_id);
12196 UPDATE CZ_UI_PAGE_REFS
12197 SET deleted_flag=G_YES_FLAG
12198 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12199 page_ref_id=p_page_ref_id AND
12200 deleted_flag=G_NO_FLAG;
12201 END IF;
12202
12203 ELSE
12204
12205 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12206 --DEBUG('asp: Setting parent_page_ref_id of page ref ' || p_page_ref_id || ' to ' || x_new_parent_page_ref_id);
12207 --DEBUG('asp: Setting seq_nbr of page ref ' || p_page_ref_id || ' to ' || p_node.tree_seq);
12208 UPDATE CZ_UI_PAGE_REFS
12209 SET parent_page_ref_id = x_new_parent_page_ref_id,
12210 seq_nbr = p_node.tree_seq
12211 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12212 page_ref_id=p_page_ref_id;
12213
12214 UPDATE CZ_UI_PAGE_REFS
12215 SET node_depth = node_depth + (l_new_parent_node_depth-l_node_depth) + 1
12216 WHERE (ui_def_id,page_ref_id) IN
12217 (SELECT ui_def_id,page_ref_id FROM CZ_UI_PAGE_REFS
12218 START WITH ui_def_id=g_UI_Context.ui_def_id AND page_ref_id=p_page_ref_id
12219 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
12220 ui_def_id=g_UI_Context.ui_def_id AND PRIOR ui_def_id=g_UI_Context.ui_def_id AND
12221 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG);
12222
12223 END IF;
12224
12225 EXCEPTION
12226 WHEN OTHERS THEN
12227 NULL;
12228 END;
12229
12230 END move_page_ref;
12231
12232
12233 PROCEDURE move_page_ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12234 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12235 x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
12236
12237 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
12238 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12239
12240 BEGIN
12241
12242 BEGIN
12243
12244 SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
12245 WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
12246
12247 SELECT page_ref_id, parent_page_ref_id
12248 INTO l_page_ref_id, x_new_parent_page_ref_id
12249 FROM CZ_UI_PAGE_REFS
12250 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12251 page_set_id = l_page_set_id AND
12252 target_page_id = p_ui_node.page_id AND
12253 deleted_flag=G_NO_FLAG AND
12254 rownum < 2;
12255
12256 IF p_node.parent_persistent_node_id <> p_ui_node.parent_persistent_node_id THEN
12257 move_page_ref(l_page_set_id, l_page_ref_id, p_node, x_new_parent_page_ref_id);
12258 END IF;
12259 EXCEPTION
12260 WHEN NO_DATA_FOUND THEN
12261 NULL;
12262 END;
12263 END move_page_ref;
12264
12265 --
12266 -- change instantiability of Page
12267 --
12268 PROCEDURE check_Page_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12269 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12270
12271 l_changed_pages_tbl number_tbl_type;
12272 l_persistent_node_id_tbl number_tbl_type;
12273 l_ps_node_id_tb number_tbl_type;
12274 l_component_id_tbl number_tbl_type;
12275 l_ps_node_type_tbl number_tbl_type;
12276 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
12277 l_parent_ref_persist_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
12278 l_new_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12279 l_curr_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12280 l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
12281 l_mark_flag CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
12282 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
12283
12284 BEGIN
12285
12286 SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
12287 WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
12288
12289 IF l_page_set_id IS NOT NULL THEN
12290 SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
12291 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=l_page_set_id;
12292 END IF;
12293
12294 move_page_ref(p_ui_node, p_node, l_new_parent_page_ref_id);
12295
12296 IF p_node.parent_persistent_node_id<>p_ui_node.parent_persistent_node_id AND
12297 p_ui_node.instantiable_flag=p_node.instantiable_flag AND
12298 p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE,G_MANDATORY_INST_TYPE) THEN
12299
12300 FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
12301 WHERE ui_def_id=p_ui_node.ui_def_id AND
12302 persistent_node_id=p_ui_node.parent_persistent_node_id AND
12303 ((region_persistent_node_id=persistent_node_id OR
12304 pagebase_persistent_node_id=persistent_node_id) AND
12305 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12306 ,G_NSTD_CONTAINER_TEMPLATE_ID
12307 ,G_2COLS_CONTAINER_TEMPLATE_ID
12308 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12309 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12310 LOOP
12311 IF i.suppress_refresh_flag=G_YES_FLAG THEN
12312 UPDATE CZ_UI_PAGE_ELEMENTS
12313 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
12314 persistent_node_id=0
12315 WHERE ui_def_id=p_ui_node.ui_def_id AND
12316 page_id=i.page_id AND
12317 persistent_node_id=p_ui_node.persistent_node_id AND
12318 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
12319 G_UI_BOMADDINST_NODE_TYPE,
12320 G_UI_PAGEDRILLDOWN_NODE_TYPE);
12321 ELSE
12322 UPDATE CZ_UI_PAGE_ELEMENTS
12323 SET deleted_flag=G_MARK_TO_DELETE
12324 WHERE ui_def_id=p_ui_node.ui_def_id AND
12325 page_id=i.page_id AND
12326 persistent_node_id=p_ui_node.persistent_node_id AND
12327 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
12328 G_UI_BOMADDINST_NODE_TYPE,
12329 G_UI_PAGEDRILLDOWN_NODE_TYPE);
12330 END IF;
12331
12332 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
12333
12334 END LOOP;
12335
12336 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12337 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12338 persistent_node_id=p_node.parent_persistent_node_id AND
12339 ((region_persistent_node_id=persistent_node_id OR
12340 pagebase_persistent_node_id=persistent_node_id) AND
12341 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12342 ,G_NSTD_CONTAINER_TEMPLATE_ID
12343 ,G_2COLS_CONTAINER_TEMPLATE_ID
12344 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12345 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12346 LOOP
12347 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12348 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) THEN
12349 --
12350 -- add new Instance Management COntrol to the parent UI Page
12351 --
12352 add_Instance_Controls(p_ui_node => p_ui_node,
12353 p_parent_ui_node => parent_ui_node,
12354 p_node => p_node);
12355 ELSE -- MANDATORY
12356 IF l_new_parent_page_ref_id IS NULL THEN
12357 create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
12358 p_ui_node => p_ui_node,
12359 p_page_set_id => l_page_set_id);
12360 END IF;
12361 END IF;
12362 END IF;
12363 END LOOP;
12364
12365 END IF; -- end of IF p_node.parent_persistent_node_id<> ...
12366
12367 --
12368 -- (n,m)/(0,1) => (1,1)
12369 --
12370 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12371 p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12372
12373 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12374
12375 --
12376 -- remove all Instance Management Controls with a given
12377 -- persistent_node_id = p_ui_node.persistent_node_id
12378 --
12379 remove_Instance_Controls(p_ui_node);
12380
12381 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE,G_SUBTABS) OR
12382 l_new_parent_page_ref_id IS NULL THEN
12383
12384 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12385 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12386 persistent_node_id=p_node.parent_persistent_node_id AND
12387 (region_persistent_node_id=persistent_node_id OR
12388 pagebase_persistent_node_id=persistent_node_id) AND
12389 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12390 ,G_NSTD_CONTAINER_TEMPLATE_ID
12391 ,G_2COLS_CONTAINER_TEMPLATE_ID
12392 ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
12393 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12394 LOOP
12395 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12396 create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
12397 p_ui_node => p_ui_node,
12398 p_page_set_id => l_page_set_id);
12399 END IF;
12400 END LOOP;
12401
12402 END IF;
12403
12404 --
12405 -- if navigation style is not Dynamic Tree Menu then
12406 -- merge parent and child Page Flows
12407 --
12408 IF g_UI_Context.PRIMARY_NAVIGATION<>G_MODEL_TREE_MENU AND l_page_set_id IS NOT NULL AND
12409 NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12410 merge_Page_Flows(p_ui_node);
12411 END IF;
12412
12413 END IF;
12414
12415 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12416 p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12417 p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12418
12419 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12420
12421 --
12422 -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12423 -- CZ_PS_NODES.instantiable_flag
12424 --
12425 FOR n IN(SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS a
12426 WHERE ui_def_id=p_ui_node.ui_def_id AND
12427 persistent_node_id=p_ui_node.persistent_node_id AND
12428 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12429 deleted_flag=G_NO_FLAG AND NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
12430 EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
12431 WHERE ui_def_id=p_ui_node.ui_def_id AND
12432 page_id=a.page_id AND
12433 element_id=a.parent_element_id AND
12434 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
12435 )
12436 LOOP
12437
12438 l_ui_node_name := get_UI_Node_Name(p_page_id => n.page_id,
12439 p_template_id => p_node.template_id,
12440 p_template_name => p_node.template_name);
12441
12442 UPDATE CZ_UI_PAGE_ELEMENTS a
12443 SET ctrl_template_id = p_node.template_id,
12444 ctrl_template_ui_def_id = p_node.template_ui_def_id,
12445 instantiable_flag = p_node.instantiable_flag,
12446 name=l_ui_node_name,
12447 deleted_flag=G_MARK_TO_REFRESH
12448 WHERE ui_def_id=n.ui_def_id AND
12449 page_id=n.page_id AND
12450 element_id=n.element_id;
12451
12452 IF SQL%ROWCOUNT > 0 THEN
12453 l_changed_pages_tbl(l_changed_pages_tbl.COUNT+1) := n.page_id;
12454 END IF;
12455 END LOOP;
12456
12457 IF l_changed_pages_tbl.COUNT>0 THEN
12458 FOR i IN l_changed_pages_tbl.First..l_changed_pages_tbl.Last
12459 LOOP
12460 mark_UI_Page_As_Refreshed(l_changed_pages_tbl(i), g_UI_Context.ui_def_id);
12461 END LOOP;
12462 END IF;
12463
12464 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS a
12465 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12466 persistent_node_id=p_node.parent_persistent_node_id AND
12467 (region_persistent_node_id=persistent_node_id OR
12468 pagebase_persistent_node_id=persistent_node_id) AND
12469 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
12470 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
12471 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12472 ,G_NSTD_CONTAINER_TEMPLATE_ID
12473 ,G_2COLS_CONTAINER_TEMPLATE_ID
12474 ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
12475 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS b
12476 WHERE b.ui_def_id=g_UI_Context.ui_def_id AND
12477 b.page_id=a.page_id AND
12478 b.region_persistent_node_id=a.region_persistent_node_id AND
12479 b.persistent_node_id=p_ui_node.persistent_node_id AND
12480 b.element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12481 b.deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG))
12482 )
12483 LOOP
12484 --
12485 -- add new Instance Management Control to the parent UI Page
12486 --
12487 add_Instance_Controls(p_ui_node => p_ui_node,
12488 p_parent_ui_node => parent_ui_node,
12489 p_node => p_node);
12490 END LOOP;
12491
12492 END IF;
12493
12494 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12495 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12496
12497 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12498
12499 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12500 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12501 persistent_node_id=p_node.parent_persistent_node_id AND
12502 ((region_persistent_node_id=persistent_node_id OR
12503 pagebase_persistent_node_id=persistent_node_id) AND
12504 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12505 ,G_NSTD_CONTAINER_TEMPLATE_ID
12506 ,G_2COLS_CONTAINER_TEMPLATE_ID
12507 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12508 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12509 LOOP
12510 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12511 --
12512 -- add new Instance Management COntrol to the parent UI Page
12513 --
12514 add_Instance_Controls(p_ui_node => p_ui_node,
12515 p_parent_ui_node => parent_ui_node,
12516 p_node => p_node);
12517 END IF;
12518 END LOOP;
12519
12520 IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) AND l_page_set_id IS NOT NULL AND
12521 NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12522 split_Page_Flow(p_ui_node);
12523 END IF;
12524
12525 END IF;
12526
12527 --
12528 -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12529 -- CZ_PS_NODES.instantiable_flag
12530 --
12531 UPDATE CZ_UI_PAGE_ELEMENTS
12532 SET instantiable_flag = p_node.instantiable_flag,
12533 parent_persistent_node_id=p_node.parent_persistent_node_id
12534 WHERE ui_def_id = p_ui_node.ui_def_id AND
12535 persistent_node_id = p_ui_node.persistent_node_id AND
12536 page_Id = p_ui_node.page_id; --vsingava IM-ER
12537
12538
12539 replace_page_ref_target_path(p_ui_node, p_node);
12540
12541 END check_Page_Changes;
12542
12543 --
12544 -- change instantiability of Page
12545 --
12546 PROCEDURE check_Reference_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12547 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12548 l_refresh_ui_page BOOLEAN:=FALSE;
12549 l_persistent_node_id NUMBER;
12550 l_max_seq_nbr NUMBER;
12551 l_ps_node_type NUMBER;
12552 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12553 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12554 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
12555 l_template_id NUMBER;
12556 l_template_ui_def_id NUMBER;
12557
12558 BEGIN
12559
12560 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12561 p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12562
12563 --jonatara:bug6439536
12564 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12565
12566 l_template_id := p_node.template_id;
12567 l_template_ui_def_id := p_node.template_ui_def_id;
12568
12569 BEGIN
12570
12571 SELECT ps_node_type INTO l_ps_node_type
12572 FROM CZ_PS_NODES
12573 WHERE devl_project_id=p_node.reference_id AND
12574 parent_id IS NULL AND
12575 deleted_flag=G_NO_FLAG;
12576
12577 FOR i IN(SELECT persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
12578 WHERE ui_def_id=p_ui_node.ui_def_id
12579 AND parent_element_id=p_ui_node.parent_element_id
12580 AND persistent_node_id<>p_ui_node.persistent_node_id AND
12581 deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD))
12582 LOOP
12583 l_ps_node := get_Model_Node_By_Persist_Id(i.persistent_node_id,g_UI_COntext.devl_project_id);
12584
12585 IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12586 (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
12587 l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
12588 l_template_id := NULL;
12589 l_template_ui_def_id := NULL;
12590 EXIT;
12591 END IF;
12592
12593 END LOOP;
12594
12595 EXCEPTION
12596 WHEN OTHERS THEN
12597 DEBUG('check_Reference_Changes() : '||SQLERRM);
12598 END;
12599
12600 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12601 p_template_id => l_template_id,
12602 p_template_name => p_node.template_name);
12603
12604 UPDATE CZ_UI_PAGE_ELEMENTS
12605 SET ctrl_template_id = l_template_id,
12606 ctrl_template_ui_def_id = l_template_ui_def_id,
12607 element_type = G_UI_DRILLDOWN_NODE_TYPE,
12608 instantiable_flag = p_node.instantiable_flag,
12609 name=l_ui_node_name,
12610 deleted_flag=G_MARK_TO_REFRESH
12611 WHERE ui_def_id=p_ui_node.ui_def_id AND
12612 persistent_node_id=p_ui_node.persistent_node_id AND
12613 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12614 deleted_flag=G_NO_FLAG AND
12615 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12616
12617 l_refresh_ui_page := TRUE;
12618
12619 END IF;
12620
12621 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12622 p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12623 p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12624
12625 --jonatara:bug6439536
12626 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12627
12628 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12629 p_template_id => l_template_id,
12630 p_template_name => p_node.template_name);
12631
12632 --
12633 -- synchronize UI template with actual detailed node type
12634 --
12635 UPDATE CZ_UI_PAGE_ELEMENTS
12636 SET ctrl_template_id = p_node.template_id,
12637 ctrl_template_ui_def_id = p_node.template_ui_def_id,
12638 instantiable_flag = p_node.instantiable_flag,
12639 name=l_ui_node_name,
12640 deleted_flag=G_MARK_TO_REFRESH
12641 WHERE ui_def_id=p_ui_node.ui_def_id AND
12642 persistent_node_id=p_ui_node.persistent_node_id AND
12643 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12644 deleted_flag=G_NO_FLAG AND
12645 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12646
12647 IF SQL%ROWCOUNT>0 THEN
12648 l_refresh_ui_page := TRUE;
12649 END IF;
12650
12651 END IF;
12652
12653 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12654 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12655
12656 --jonatara:bug6439536
12657 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12658
12659 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12660 p_template_id => l_template_id,
12661 p_template_name => p_node.template_name);
12662
12663 --
12664 -- synchronize UI template with actual detailed node type
12665 --
12666 UPDATE CZ_UI_PAGE_ELEMENTS
12667 SET ctrl_template_id = p_node.template_id,
12668 ctrl_template_ui_def_id = p_node.template_ui_def_id,
12669 instantiable_flag = p_node.instantiable_flag,
12670 element_type = G_UI_NONBOMADDINST_NODE_TYPE,
12671 name=l_ui_node_name,
12672 deleted_flag=DECODE(NVL(ctrl_template_id,-1),-1,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12673 WHERE ui_def_id=p_ui_node.ui_def_id AND
12674 page_id=p_ui_node.page_id AND
12675 element_id=p_ui_node.element_id AND
12676 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12677 IF SQL%ROWCOUNT>0 THEN
12678 l_refresh_ui_page := TRUE;
12679 END IF;
12680 END IF;
12681
12682 IF l_refresh_ui_page THEN
12683 UPDATE CZ_UI_PAGES
12684 SET deleted_flag=G_MARK_TO_REFRESH,
12685 page_rev_nbr = page_rev_nbr + 1
12686 WHERE ui_def_id=p_ui_node.ui_def_id AND
12687 page_id=p_ui_node.page_id;
12688 END IF;
12689
12690 UPDATE CZ_UI_PAGE_ELEMENTS
12691 SET instantiable_flag = p_node.instantiable_flag
12692 WHERE ui_def_id = p_ui_node.ui_def_id AND
12693 persistent_node_id = p_ui_node.persistent_node_id AND
12694 instantiable_flag <> p_node.instantiable_flag;
12695
12696 FOR i IN(SELECT page_set_id
12697 FROM CZ_UI_PAGE_REFS
12698 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12699 target_persistent_node_id=p_ui_node.persistent_node_id AND
12700 deleted_flag=G_NO_FLAG)
12701 LOOP
12702 l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12703 UPDATE CZ_UI_PAGE_REFS
12704 SET target_path=l_target_path
12705 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12706 target_persistent_node_id=p_ui_node.persistent_node_id AND
12707 deleted_flag=G_NO_FLAG AND
12708 target_path<>l_target_path;
12709 END LOOP;
12710
12711 END check_Reference_Changes;
12712
12713
12714 PROCEDURE check_Connector_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12715 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12716 l_refresh_ui_page BOOLEAN:=FALSE;
12717 l_persistent_node_id NUMBER;
12718 l_max_seq_nbr NUMBER;
12719 l_ps_node_type NUMBER;
12720 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12721 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12722 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
12723 l_instantiable_flag CZ_UI_PAGE_ELEMENTS.instantiable_flag%TYPE;
12724 l_template_id NUMBER;
12725 l_template_ui_def_id NUMBER;
12726
12727 BEGIN
12728
12729 IF NVL(p_ui_node.instantiable_flag, '*') <> NVL(p_node.instantiable_flag, '*') THEN
12730
12731 l_template_id := p_node.template_id;
12732 l_template_ui_def_id := p_node.template_ui_def_id;
12733
12734 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12735 p_template_id => l_template_id,
12736 p_template_name => p_node.template_name);
12737
12738 IF (p_node.maximum=1 AND p_node.minimum=1) THEN
12739 l_instantiable_flag := G_MANDATORY_INST_TYPE;
12740 ELSIF (p_node.maximum=1 AND p_node.minimum=0) THEN
12741 l_instantiable_flag := G_OPTIONAL_INST_TYPE;
12742 ELSE
12743 l_instantiable_flag := G_MINMAX_INST_TYPE;
12744 END IF;
12745
12746 UPDATE CZ_UI_PAGE_ELEMENTS
12747 SET ctrl_template_id = l_template_id,
12748 ctrl_template_ui_def_id = l_template_ui_def_id,
12749 instantiable_flag = l_instantiable_flag,
12750 name=l_ui_node_name,
12751 deleted_flag=G_MARK_TO_REFRESH
12752 WHERE ui_def_id=p_ui_node.ui_def_id AND
12753 persistent_node_id=p_ui_node.persistent_node_id AND
12754 deleted_flag=G_NO_FLAG AND
12755 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12756
12757 IF SQL%ROWCOUNT > 0 THEN
12758 UPDATE CZ_UI_PAGES
12759 SET deleted_flag=G_MARK_TO_REFRESH,
12760 page_rev_nbr = page_rev_nbr + 1
12761 WHERE ui_def_id=p_ui_node.ui_def_id AND
12762 page_id=p_ui_node.page_id;
12763 END IF;
12764
12765 END IF;
12766
12767 END check_Connector_Changes;
12768
12769 --
12770 -- change instantiability of UI region
12771 --
12772 PROCEDURE check_Region_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12773 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12774
12775 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12776 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
12777 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12778 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
12779
12780 BEGIN
12781
12782 IF (p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12783 OR p_node.virtual_flag=G_NO_FLAG) AND
12784 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE
12785 AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12786
12787 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12788
12789 l_page_ui_node := create_UI_Page(p_node => p_node,
12790 x_page_set_id => l_page_set_id,
12791 x_page_set_type => l_page_set_type,
12792 x_page_ref_id => l_page_ref_id,
12793 p_parent_page_id => p_ui_node.page_id);
12794
12795 UPDATE CZ_UI_PAGE_ELEMENTS
12796 SET deleted_flag=G_MARK_TO_DELETE
12797 WHERE ui_def_id=p_ui_node.ui_def_id AND
12798 page_id=p_ui_node.page_id AND
12799 element_id=p_ui_node.element_id;
12800
12801 UPDATE CZ_UI_PAGE_ELEMENTS
12802 SET page_id = l_page_ui_node.page_id,
12803 pagebase_persistent_node_id = l_page_ui_node.persistent_node_id,
12804 deleted_flag=G_MARK_TO_ADD
12805 WHERE (ui_def_id,page_id,element_id) IN
12806 (SELECT ui_def_id,page_id,element_id FROM
12807 CZ_UI_PAGE_ELEMENTS
12808 START WITH ui_def_id=p_ui_node.ui_def_id AND
12809 page_id=p_ui_node.page_id AND
12810 element_id=p_ui_node.element_id
12811 CONNECT BY
12812 PRIOR ui_def_id=p_ui_node.ui_def_id AND
12813 PRIOR page_id=p_ui_node.page_id AND
12814 PRIOR element_id=parent_element_id AND
12815 PRIOR deleted_flag <> G_YES_FLAG AND
12816 ui_def_id=p_ui_node.ui_def_id AND
12817 page_id=p_ui_node.page_id AND
12818 deleted_flag <> G_YES_FLAG)
12819 AND element_id <> p_ui_node.element_id;
12820
12821 UPDATE CZ_UI_PAGE_ELEMENTS
12822 SET parent_element_id=l_page_ui_node.element_id
12823 WHERE ui_def_id=p_ui_node.ui_def_id AND
12824 page_id=l_page_ui_node.page_id AND
12825 parent_element_id=p_ui_node.element_id;
12826
12827 --vsingava IM-ER
12828 ELSIF (p_node.instantiable_flag = G_MANDATORY_INST_TYPE AND p_ui_node.instantiable_flag IN (G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12829 AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG) THEN
12830
12831 -- We have an element that is not an Instance Management Table but bound to a previously Instantiable Component
12832 -- This element could contain an Instance List Region. So let's refresh it.
12833 -- Mark the page for refresh, we will handle the Instace List while refreshing model_paths
12834 DEBUG('Found region ' || p_ui_node.element_id || ' that is bound to a previously instantiable node');
12835 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
12836
12837 END IF;
12838
12839 END check_Region_Changes;
12840
12841 --
12842 -- add new UI node
12843 --
12844 PROCEDURE add_New_UI_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12845 p_insert_index IN NUMBER DEFAULT -1,
12846 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12847 p_suppress_refresh_flag IN VARCHAR2,
12848 x_new_ui_pages_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
12849 x_new_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12850
12851 l_old_page_id NUMBER;
12852 l_page_set_id NUMBER;
12853 l_page_set_type NUMBER;
12854 l_page_ref_id NUMBER;
12855 l_drilldown BOOLEAN;
12856
12857 BEGIN
12858
12859 IF p_model_node.ui_omit=G_YES_FLAG THEN
12860 RETURN;
12861 END IF;
12862
12863 -- it must be a new UI page
12864 IF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12865 G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12866 is_UI_Page(p_node => p_model_node,
12867 x_drilldown => l_drilldown) THEN
12868
12869 BEGIN
12870 SELECT page_id INTO l_old_page_id FROM CZ_UI_PAGES
12871 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12872 persistent_node_id=p_model_node.persistent_node_id AND
12873 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
12874 rownum<2;
12875 EXCEPTION
12876 WHEN OTHERS THEN
12877 -- create new UI page
12878 x_new_ui_node := create_UI_Page(p_node => p_model_node,
12879 x_page_set_id => l_page_set_id,
12880 x_page_set_type => l_page_set_type,
12881 x_page_ref_id => l_page_ref_id,
12882 p_parent_page_id => p_ui_node.page_id);
12883
12884 x_new_ui_pages_tbl(x_new_ui_pages_tbl.COUNT+1) := x_new_ui_node;
12885 END;
12886
12887 -- it must be UI Region
12888 ELSIF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12889 G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12890 x_new_ui_node := create_UI_Region(p_node => p_model_node,
12891 p_parent_ui_node => p_ui_node,
12892 p_insert_index => p_insert_index);
12893 --
12894 -- it must be UI Reference
12895 --
12896 ELSIF p_model_node.ps_node_type = G_REFERENCE_TYPE AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12897 x_new_ui_node := create_UI_Reference(p_node => p_model_node,
12898 p_parent_ui_node => p_ui_node);
12899 --
12900 -- other UI elements
12901 --
12902 ELSE
12903 IF p_model_node.ps_node_type NOT IN (G_OPTION_TYPE,G_BOM_STANDART_ITEM_TYPE) AND
12904 NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12905 x_new_ui_node := create_UI_Element(p_node => p_model_node,
12906 p_parent_ui_node => p_ui_node,
12907 p_insert_index => p_insert_index);
12908 END IF;
12909 END IF; -- end of IF is_UI_Page()
12910
12911 END;
12912
12913 --
12914 -- check UI Node changes
12915 --
12916 PROCEDURE check_UI_Node_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12917 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12918
12919 l_ui_layout_ui_style CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12920 l_model_layout_ui_style CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12921 l_feature_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12922 l_under_root_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12923 l_max_seq_nbr NUMBER;
12924
12925 CURSOR l_ui_bom_tab_cur IS
12926 SELECT * FROM CZ_UI_PAGE_ELEMENTS
12927 WHERE ui_def_id=p_ui_node.ui_def_id AND
12928 parent_element_id=p_ui_node.element_id AND
12929 persistent_node_id=p_model_node.persistent_node_id AND
12930 element_type=G_UI_BOMADDINST_NODE_TYPE AND
12931 deleted_flag NOT IN(G_YES_FLAG);
12932
12933 BEGIN
12934 --
12935 -- refresh expl ids in UI tables
12936 --
12937 sync_Expl_Ids(p_model_node,p_ui_node);
12938
12939 IF p_model_node.ps_node_type in(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12940 p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12941 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12942
12943 IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12944 --
12945 -- check for BOM control associated with the same model node
12946 -- as UI page
12947 --
12948 BEGIN
12949 OPEN l_ui_bom_tab_cur;
12950
12951 LOOP
12952 FETCH l_ui_bom_tab_cur INTO l_under_root_ui_node;
12953 EXIT WHEN l_ui_bom_tab_cur%NOTFOUND;
12954
12955 IF l_under_root_ui_node.deleted_flag <> G_LIMBO_FLAG AND
12956 l_under_root_ui_node.ctrl_template_id IS NOT NULL AND
12957 l_under_root_ui_node.ctrl_template_id <> p_model_node.template_id AND
12958 NVL(l_under_root_ui_node.suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
12959
12960 replace_Template_Id(p_ui_node => l_under_root_ui_node,
12961 p_model_node => p_model_node);
12962 END IF;
12963
12964 END LOOP;
12965
12966 IF l_ui_bom_tab_cur%ROWCOUNT=0 THEN
12967 add_BOM_Node(p_node => p_model_node,
12968 p_page_id => p_ui_node.page_id,
12969 p_pagebase_expl_node_id => p_ui_node.model_ref_expl_id,
12970 p_parent_element_id => p_ui_node.element_id,
12971 p_pagebase_persistent_node_id => p_ui_node.pagebase_persistent_node_id);
12972 END IF;
12973
12974 CLOSE l_ui_bom_tab_cur;
12975
12976 END;
12977
12978 ELSE -- else for IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12979
12980 IF p_ui_node.ctrl_template_id <> p_model_node.template_id THEN
12981 replace_Template_Id(p_ui_node => p_ui_node,
12982 p_model_node => p_model_node);
12983 END IF;
12984
12985 END IF;
12986
12987 END IF;
12988
12989 IF p_ui_node.pagebase_persistent_node_id=p_ui_node.persistent_node_id THEN
12990
12991 --
12992 -- check changes of this UI page
12993 --
12994 check_Page_Changes(p_ui_node => p_ui_node,
12995 p_node => p_model_node);
12996
12997 ELSIF p_ui_node.pagebase_persistent_node_id<>p_ui_node.persistent_node_id AND
12998 p_ui_node.region_persistent_node_id=p_ui_node.persistent_node_id AND
12999 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13000
13001 --
13002 -- check changes of this reference
13003 --
13004 check_Region_Changes(p_ui_node => p_ui_node,
13005 p_node => p_model_node);
13006
13007 ELSIF p_model_node.ps_node_type=G_REFERENCE_TYPE AND
13008 p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
13009
13010 --
13011 -- check changes of this reference
13012 --
13013 check_Reference_Changes(p_ui_node => p_ui_node,
13014 p_node => p_model_node);
13015
13016 ELSIF p_model_node.ps_node_type=G_CONNECTOR_TYPE AND
13017 p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
13018
13019 --
13020 -- check changes of this reference
13021 --
13022 check_Connector_Changes(p_ui_node => p_ui_node,
13023 p_node => p_model_node);
13024
13025 ELSIF p_model_node.ps_node_type=G_FEATURE_TYPE AND
13026 p_model_node.feature_type=0 AND
13027 p_model_node.template_id <> p_ui_node.ctrl_template_id AND
13028 (g_using_new_UI_refresh OR p_model_node.detailed_type_id<>p_ui_node.element_type) AND
13029 p_model_node.template_id IS NOT NULL AND
13030 p_ui_node.ctrl_template_id IS NOT NULL AND
13031 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13032
13033 BEGIN
13034
13035 IF g_using_new_UI_refresh THEN
13036 replace_Template_Id(p_ui_node => p_ui_node,
13037 p_model_node => p_model_node);
13038 ELSE
13039 SELECT layout_ui_style INTO l_ui_layout_ui_style
13040 FROM CZ_UI_TEMPLATES
13041 WHERE template_id=p_ui_node.ctrl_template_id AND
13042 ui_def_id=p_ui_node.ctrl_template_ui_def_id;
13043
13044 SELECT layout_ui_style INTO l_model_layout_ui_style
13045 FROM CZ_UI_TEMPLATES
13046 WHERE template_id=p_model_node.template_id AND
13047 ui_def_id=p_model_node.template_ui_def_id;
13048
13049 IF l_ui_layout_ui_style=l_model_layout_ui_style THEN
13050 --
13051 -- replace Feature template
13052 --
13053 replace_Template_Id(p_ui_node => p_ui_node,
13054 p_model_node => p_model_node);
13055 ELSE
13056
13057 BEGIN
13058 SELECT NVL(MAX(seq_nbr),0)+1 INTO l_max_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
13059 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13060 page_id=p_ui_node.page_id AND
13061 parent_element_id IS NOT NULL AND
13062 (ctrl_template_id,ctrl_template_ui_def_id) IN
13063 (SELECT ctrl_template_id,ctrl_template_ui_def_id FROM
13064 CZ_UI_TEMPLATES WHERE deleted_flag=G_NO_FLAG AND
13065 layout_ui_style=l_ui_layout_ui_style);
13066 EXCEPTION
13067 WHEN OTHERS THEN
13068 l_max_seq_nbr := 1;
13069 END;
13070
13071 IF l_max_seq_nbr = 1 THEN
13072
13073 --
13074 -- replace Feature template
13075 --
13076 replace_Template_Id(p_ui_node => p_ui_node,
13077 p_model_node => p_model_node);
13078
13079 ELSE
13080
13081 UPDATE CZ_UI_PAGE_ELEMENTS
13082 SET deleted_flag=G_MARK_TO_DELETE
13083 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13084 page_id=p_ui_node.page_id AND
13085 element_id=p_ui_node.element_id;
13086
13087 UPDATE CZ_UI_PAGES
13088 SET deleted_flag=G_MARK_TO_REFRESH,
13089 page_rev_nbr=page_rev_nbr+1
13090 WHERE page_id=p_ui_node.page_id AND
13091 ui_def_id=g_UI_Context.ui_def_id;
13092
13093 l_feature_element_id := get_Element_Id();
13094
13095 INSERT INTO CZ_UI_PAGE_ELEMENTS
13096 (
13097 UI_DEF_ID
13098 ,PAGE_ID
13099 ,PERSISTENT_NODE_ID
13100 ,ELEMENT_ID
13101 ,PARENT_PERSISTENT_NODE_ID
13102 ,REGION_PERSISTENT_NODE_ID
13103 ,PAGEBASE_PERSISTENT_NODE_ID
13104 ,CTRL_TEMPLATE_ID
13105 ,BASE_PAGE_FLAG
13106 ,INSTANTIABLE_FLAG
13107 ,SEQ_NBR
13108 ,DELETED_FLAG
13109 ,CTRL_TEMPLATE_UI_DEF_ID
13110 ,MODEL_REF_EXPL_ID
13111 ,PARENT_ELEMENT_ID
13112 ,ELEMENT_TYPE
13113 ,NAME
13114 ,ELEMENT_SIGNATURE_ID
13115 ,SUPPRESS_REFRESH_FLAG
13116 )
13117 SELECT
13118 UI_DEF_ID
13119 ,PAGE_ID
13120 ,PERSISTENT_NODE_ID
13121 ,l_feature_element_id
13122 ,PARENT_PERSISTENT_NODE_ID
13123 ,REGION_PERSISTENT_NODE_ID
13124 ,PAGEBASE_PERSISTENT_NODE_ID
13125 ,p_model_node.template_id
13126 ,BASE_PAGE_FLAG
13127 ,INSTANTIABLE_FLAG
13128 ,l_max_seq_nbr
13129 ,G_MARK_TO_ADD
13130 ,p_model_node.template_ui_def_id
13131 ,MODEL_REF_EXPL_ID
13132 ,PARENT_ELEMENT_ID
13133 ,ELEMENT_TYPE
13134 ,NAME
13135 ,ELEMENT_SIGNATURE_ID
13136 ,SUPPRESS_REFRESH_FLAG
13137 FROM CZ_UI_PAGE_ELEMENTS
13138 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13139 page_id=p_ui_node.page_id AND
13140 element_id=p_ui_node.element_id;
13141
13142 UPDATE CZ_UI_PAGE_ELEMENTS
13143 SET parent_element_id=l_feature_element_id
13144 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13145 page_id=p_ui_node.page_id AND
13146 parent_element_id=p_ui_node.element_id;
13147
13148 END IF; -- end of IF l_max_seq_nbr = 1
13149 END IF; -- end of IF l_ui_layout_ui_style=l_model_layout_ui_style
13150 END IF;
13151 END;
13152
13153 ELSE --vsingava IM-ER
13154 IF (p_model_node.instantiable_flag = G_MANDATORY_INST_TYPE AND p_ui_node.instantiable_flag IN (G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
13155 AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG) THEN
13156
13157 -- We have an element that is not an Instance Management Table but bound to a previously Instantiable Component
13158 -- This element could contain an Instance List Region. So let's refresh it.
13159 -- Mark the page for refresh, we will handle the Instace List while refreshing model_paths
13160 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
13161 END IF;
13162
13163 END IF; -- end of IF p_ui_node.pagebase_persistent_node_id...
13164
13165 --
13166 -- add a new CX to an existing UI node
13167 -- if there is such CX
13168 --
13169 IF get_CX_Button_Status(p_ui_node)=G_CX_VALID THEN
13170
13171 add_CX_Button(p_node => p_model_node,
13172 p_ui_node => p_ui_node);
13173 END IF;
13174
13175 END check_UI_Node_Changes;
13176
13177 --
13178 -- create new split UI Page
13179 --
13180 FUNCTION clone_UI_Page(p_page_id IN NUMBER)
13181 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
13182
13183 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
13184 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13185 l_split_seq_nbr CZ_UI_PAGES.split_seq_nbr%TYPE;
13186 l_page_id CZ_UI_PAGES.page_id%TYPE;
13187 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
13188 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
13189 l_caption_text_id NUMBER;
13190 l_caption CZ_INTL_TEXTS.text_str%TYPE;
13191
13192 BEGIN
13193
13194 --
13195 -- get num of this page in this UI
13196 --
13197 l_split_seq_nbr := get_Last_Split_Page_Nbr(p_page_id) + 1;
13198
13199
13200 l_caption := G_UMPERS||G_CAPTION_RULE_TOKENNAME||' ('||TO_CHAR(l_split_seq_nbr)||')';
13201
13202 l_caption_text_id := allocateId('CZ_INTL_TEXTS_S');
13203
13204 l_element_id := get_Element_Id();
13205 l_page_id := allocateId('CZ_UI_PAGES_S');
13206
13207 INSERT INTO CZ_INTL_TEXTS
13208 (
13209 INTL_TEXT_ID
13210 ,TEXT_STR
13211 ,DELETED_FLAG
13212 ,SEEDED_FLAG
13213 ,UI_DEF_ID
13214 ,MODEL_ID
13215 ,UI_PAGE_ID
13216 ,UI_PAGE_ELEMENT_ID
13217 )
13218 VALUES
13219 (
13220 l_caption_text_id
13221 ,l_caption
13222 ,G_NO_FLAG
13223 ,G_NO_FLAG
13224 ,g_UI_Context.ui_def_id
13225 ,g_UI_Context.devl_project_id
13226 ,l_page_id
13227 ,NULL
13228 );
13229
13230 INSERT INTO CZ_UI_PAGES
13231 (page_id,
13232 ui_def_id,
13233 NAME,
13234 persistent_node_id,
13235 jrad_doc,
13236 page_set_id,
13237 split_seq_nbr,
13238 caption_source,
13239 caption_text_id,
13240 PERSISTENT_CAPTION_TEXT_ID,
13241 pagebase_path,
13242 pagebase_expl_node_id,
13243 page_rev_nbr,
13244 seeded_flag,
13245 DESC_TEXT,
13246 PAGE_STATUS_TEMPLATE_ID,
13247 PAGE_STATUS_TEMPL_UIDEF_ID,
13248 CAPTION_RULE_ID,
13249 OUTER_TEMPLATE_USAGE,
13250 OUTER_PAGE_TEMPLATE_ID,
13251 OUTER_PAGE_TEMPL_UIDEF_ID,
13252 DISPLAY_CONDITION_ID,
13253 DISPLAY_CONDITION_COMP,
13254 DISPLAY_CONDITION_VALUE,
13255 ENABLED_CONDITION_ID,
13256 ENABLED_CONDITION_COMP,
13257 ENABLED_CONDITION_VALUE,
13258 EMPTY_PAGE_FLAG,
13259 SUPPRESS_REFRESH_FLAG,
13260 deleted_flag)
13261 SELECT
13262 l_page_id,
13263 ui_def_id,
13264 name||' ('||TO_CHAR(l_split_seq_nbr)||')',
13265 persistent_node_id,
13266 jrad_doc||'_'||TO_CHAR(l_split_seq_nbr),
13267 page_set_id,
13268 l_split_seq_nbr,
13269 caption_source,
13270 l_caption_text_id,
13271 l_caption_text_id,
13272 pagebase_path,
13273 pagebase_expl_node_id,
13274 1,
13275 seeded_flag,
13276 DESC_TEXT,
13277 PAGE_STATUS_TEMPLATE_ID,
13278 PAGE_STATUS_TEMPL_UIDEF_ID,
13279 CAPTION_RULE_ID,
13280 OUTER_TEMPLATE_USAGE,
13281 OUTER_PAGE_TEMPLATE_ID,
13282 OUTER_PAGE_TEMPL_UIDEF_ID,
13283 DISPLAY_CONDITION_ID,
13284 DISPLAY_CONDITION_COMP,
13285 DISPLAY_CONDITION_VALUE,
13286 ENABLED_CONDITION_ID,
13287 ENABLED_CONDITION_COMP,
13288 ENABLED_CONDITION_VALUE,
13289 EMPTY_PAGE_FLAG,
13290 SUPPRESS_REFRESH_FLAG,
13291 G_MARK_TO_ADD
13292 FROM CZ_UI_PAGES
13293 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13294 page_id=p_page_id;
13295
13296 SELECT * INTO l_ui_node
13297 FROM CZ_UI_PAGE_ELEMENTS
13298 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13299 page_id=p_page_id AND
13300 parent_element_id IS NULL AND
13301 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
13302
13303 l_ui_node.element_id := l_element_id;
13304 l_ui_node.page_id := l_page_id;
13305 l_ui_node.name := l_ui_node.name||' - '||l_element_id;
13306 l_ui_node.deleted_flag := G_MARK_TO_ADD;
13307
13308 INSERT INTO CZ_UI_PAGE_ELEMENTS
13309 (ui_def_id,
13310 persistent_node_id,
13311 parent_persistent_node_id,
13312 region_persistent_node_id,
13313 pagebase_persistent_node_id,
13314 page_id,
13315 seq_nbr,
13316 ctrl_template_id,
13317 element_id,
13318 parent_element_id,
13319 element_type,
13320 instantiable_flag,
13321 ctrl_template_ui_def_id,
13322 model_ref_expl_id,
13323 base_page_flag,
13324 element_signature_id,
13325 name,
13326 deleted_flag)
13327 VALUES
13328 (l_ui_node.ui_def_id,
13329 l_ui_node.persistent_node_id,
13330 l_ui_node.parent_persistent_node_id,
13331 l_ui_node.region_persistent_node_id,
13332 l_ui_node.pagebase_persistent_node_id,
13333 l_ui_node.page_id,
13334 l_ui_node.seq_nbr,
13335 l_ui_node.ctrl_template_id,
13336 l_ui_node.element_id,
13337 l_ui_node.parent_element_id,
13338 l_ui_node.element_type,
13339 l_ui_node.instantiable_flag,
13340 l_ui_node.ctrl_template_ui_def_id,
13341 l_ui_node.model_ref_expl_id,
13342 l_ui_node.base_page_flag,
13343 l_ui_node.element_signature_id,
13344 l_ui_node.name,
13345 l_ui_node.deleted_flag);
13346
13347 SELECT NVL(MAX(seq_nbr),0) INTO l_seq_nbr
13348 FROM CZ_UI_PAGE_REFS
13349 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13350 target_persistent_node_id=l_ui_node.persistent_node_id AND
13351 deleted_flag=G_NO_FLAG;
13352
13353 UPDATE CZ_UI_PAGE_REFS
13354 SET seq_nbr=seq_nbr+1
13355 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13356 parent_page_ref_id = (SELECT parent_page_ref_id
13357 FROM CZ_UI_PAGE_REFS
13358 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13359 target_page_id=p_page_id AND
13360 deleted_flag=G_NO_FLAG) AND
13361 seq_nbr > l_seq_nbr AND
13362 deleted_flag=G_NO_FLAG;
13363
13364 l_seq_nbr := l_seq_nbr + 1;
13365
13366 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13367 INSERT INTO CZ_UI_PAGE_REFS
13368 (ui_def_id,
13369 page_set_id,
13370 page_ref_id,
13371 parent_page_ref_id,
13372 seq_nbr,
13373 node_depth,
13374 condition_id,
13375 NAME,
13376 caption_source,
13377 caption_text_id,
13378 target_persistent_node_id,
13379 target_path,
13380 target_ui_def_id,
13381 target_page_set_id,
13382 target_page_id,
13383 modified_flags,
13384 path_to_prev_page,
13385 path_to_next_page,
13386 page_ref_type,
13387 target_expl_node_id,
13388 deleted_flag)
13389 SELECT
13390 ui_def_id,
13391 page_set_id,
13392 l_page_ref_id,
13393 parent_page_ref_id,
13394 l_seq_nbr,
13395 node_depth,
13396 condition_id,
13397 NAME||' ('||TO_CHAR(l_split_seq_nbr)||')',
13398 caption_source,
13399 l_caption_text_id,
13400 target_persistent_node_id,
13401 target_path,
13402 target_ui_def_id,
13403 target_page_set_id,
13404 l_page_id,
13405 modified_flags,
13406 NULL,
13407 path_to_next_page,
13408 page_ref_type,
13409 target_expl_node_id,
13410 deleted_flag
13411 FROM CZ_UI_PAGE_REFS
13412 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13413 target_page_id=p_page_id AND
13414 deleted_flag=G_NO_FLAG;
13415
13416 RETURN l_ui_node;
13417
13418 END clone_UI_Page;
13419
13420 PROCEDURE collect_UI_Elements
13421 (p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13422 p_max_controls_per_page IN NUMBER,
13423 x_new_pages_tbl OUT NOCOPY number_tbl_type,
13424 x_elements_tbl OUT NOCOPY ui_page_elements_tbl_type,
13425 x_new_parent_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13426
13427 l_ui_page_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13428 l_counter NUMBER:=0;
13429
13430 BEGIN
13431
13432 l_ui_page_node := p_ui_page_node;
13433
13434 FOR k IN(SELECT page_id,TO_NUMBER(element_id) AS element_id,
13435 TO_NUMBER(parent_element_id) AS parent_element_id,seq_nbr
13436 FROM CZ_UI_PAGE_ELEMENTS
13437 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13438 page_id = p_ui_page_node.page_id AND
13439 parent_element_id IS NOT NULL AND
13440 element_type <> G_UI_REGION_NODE_TYPE AND
13441 ctrl_template_id IS NOT NULL
13442 AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH)
13443 ORDER BY seq_nbr)
13444 LOOP
13445 --
13446 -- increase counter of nodes on the page ( initial l_counter must be 0 )
13447 --
13448 l_counter:=l_counter+1;
13449 --
13450 -- compare previous page and page created in this loop
13451 --
13452 IF (l_counter > p_max_controls_per_page) THEN
13453 l_ui_page_node := clone_UI_Page(k.page_id);
13454 l_counter := 1;
13455 x_new_pages_tbl(l_ui_page_node.page_id) := l_ui_page_node.pagebase_persistent_node_id;
13456 END IF;
13457
13458 IF l_ui_page_node.page_id <> p_ui_page_node.page_id THEN
13459 x_elements_tbl(k.element_id) := l_ui_page_node;
13460 IF k.parent_element_id = p_ui_page_node.element_id THEN
13461 x_new_parent_elements_tbl(k.element_id) := l_ui_page_node.element_id;
13462 END IF;
13463 END IF;
13464
13465 END LOOP;
13466
13467 END collect_UI_Elements;
13468
13469 PROCEDURE handle_Direct_Child_Nodes
13470 (p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13471 p_elements_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
13472 p_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13473
13474 l_current_element_id NUMBER;
13475
13476 BEGIN
13477
13478 l_current_element_id := p_elements_tbl.First;
13479 LOOP
13480 IF l_current_element_id IS NULL THEN
13481 EXIT;
13482 END IF;
13483
13484 UPDATE CZ_UI_PAGE_ELEMENTS
13485 SET page_id = p_elements_tbl(l_current_element_id).page_id
13486 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13487 page_id = p_ui_page_node.page_id AND
13488 element_id = TO_CHAR(l_current_element_id);
13489
13490 IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13491 UPDATE CZ_UI_PAGE_ELEMENTS
13492 SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13493 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13494 page_id = p_ui_page_node.page_id AND
13495 element_id = TO_CHAR(l_current_element_id);
13496 END IF;
13497
13498 UPDATE CZ_UI_ACTIONS
13499 SET source_page_id=p_elements_tbl(l_current_element_id).page_id
13500 WHERE ui_def_id=p_ui_page_node.ui_def_id AND
13501 source_page_id= p_ui_page_node.page_id AND
13502 element_id=TO_CHAR(l_current_element_id);
13503
13504 l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13505 END LOOP;
13506
13507 l_current_element_id := p_elements_tbl.First;
13508 LOOP
13509 IF l_current_element_id IS NULL THEN
13510 EXIT;
13511 END IF;
13512
13513 IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13514 UPDATE CZ_UI_PAGE_ELEMENTS
13515 SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13516 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13517 page_id = p_elements_tbl(l_current_element_id).page_id AND
13518 element_id = TO_CHAR(l_current_element_id);
13519 END IF;
13520
13521 l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13522 END LOOP;
13523
13524 END handle_Direct_Child_Nodes;
13525
13526 PROCEDURE collect_Old_Nodes
13527 (
13528 p_ui_def_id IN NUMBER,
13529 p_new_page_id IN NUMBER,
13530 x_nested_page_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13531
13532 BEGIN
13533
13534 FOR i IN(SELECT DISTINCT parent_element_id FROM CZ_UI_PAGE_ELEMENTS a
13535 WHERE ui_def_id = p_ui_def_id AND
13536 page_id = p_new_page_id AND
13537 parent_element_id IS NOT NULL AND
13538 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13539 WHERE ui_def_id = p_ui_def_id AND
13540 page_id = p_new_page_id AND
13541 element_id=a.parent_element_id))
13542 LOOP
13543 x_nested_page_elements_tbl(x_nested_page_elements_tbl.COUNT+1) := i.parent_element_id;
13544 END LOOP;
13545
13546 END collect_Old_Nodes;
13547
13548 PROCEDURE collect_New_Nested_Regions
13549 (p_ui_def_id IN NUMBER,
13550 p_page_id IN NUMBER,
13551 p_element_id IN VARCHAR2,
13552 px_rgn_new_elements_tbl IN OUT NOCOPY varchar_tbl_type,
13553 px_rgn_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13554
13555 l_new_element_id VARCHAR2(255);
13556 l_num_element_id NUMBER;
13557
13558 BEGIN
13559
13560 FOR i IN(SELECT element_id,parent_element_id,element_type FROM CZ_UI_PAGE_ELEMENTS
13561 START WITH ui_def_id = p_ui_def_id AND
13562 page_id= p_page_id AND
13563 element_id=p_element_id
13564 CONNECT BY PRIOR ui_def_id = p_ui_def_id AND
13565 ui_def_id = p_ui_def_id AND
13566 PRIOR page_id= p_page_id AND page_id= p_page_id AND
13567 PRIOR parent_element_id=element_id)
13568 LOOP
13569 l_num_element_id := TO_NUMBER(i.element_id);
13570 IF i.parent_element_id IS NOT NULL AND i.element_type=G_UI_REGION_NODE_TYPE AND
13571 NOT(px_rgn_new_elements_tbl.EXISTS(l_num_element_id)) THEN
13572 l_new_element_id := get_Element_Id();
13573 px_rgn_new_elements_tbl(l_num_element_id) := l_new_element_id;
13574 px_rgn_parent_elements_tbl(l_num_element_id) := i.parent_element_id;
13575 END IF;
13576 END LOOP;
13577
13578 END collect_New_Nested_Regions;
13579
13580
13581 PROCEDURE reconstruct_Nested_Regions
13582 (
13583 p_ui_def_id IN NUMBER,
13584 p_page_id IN NUMBER,
13585 p_new_pages_tbl IN number_tbl_type
13586 ) IS
13587
13588 l_nested_rgn_elements_tbl varchar_tbl_type;
13589 l_rgn_subtree_tbl varchar_tbl_type;
13590 l_parent_elements_tbl varchar_tbl_type;
13591 l_new_page_id NUMBER;
13592 l_new_element_id VARCHAR2(255);
13593 l_new_parent_element_id VARCHAR2(255);
13594 l_old_element_id NUMBER;
13595 l_page_root_element_id VARCHAR2(255);
13596
13597 BEGIN
13598
13599 l_new_page_id := p_new_pages_tbl.First;
13600 LOOP
13601 IF l_new_page_id IS NULL THEN
13602 EXIT;
13603 END IF;
13604
13605 l_nested_rgn_elements_tbl.DELETE;
13606
13607 SELECT element_id INTO l_page_root_element_id FROM CZ_UI_PAGE_ELEMENTS
13608 WHERE ui_def_id=p_ui_def_id AND
13609 page_id=l_new_page_id AND
13610 parent_element_id IS NULL AND
13611 deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE);
13612
13613 collect_Old_Nodes(p_ui_def_id => p_ui_def_id,
13614 p_new_page_id => l_new_page_id,
13615 x_nested_page_elements_tbl => l_nested_rgn_elements_tbl);
13616
13617 IF l_nested_rgn_elements_tbl.COUNT > 0 THEN
13618
13619 FOR i IN l_nested_rgn_elements_tbl.First..l_nested_rgn_elements_tbl.Last
13620 LOOP
13621 collect_New_Nested_Regions(p_ui_def_id => p_ui_def_id,
13622 p_page_id => p_page_id,
13623 p_element_id => l_nested_rgn_elements_tbl(i),
13624 px_rgn_new_elements_tbl => l_rgn_subtree_tbl,
13625 px_rgn_parent_elements_tbl => l_parent_elements_tbl );
13626 END LOOP;
13627
13628 END IF;
13629
13630 IF l_rgn_subtree_tbl.COUNT > 0 THEN
13631
13632 l_old_element_id := l_rgn_subtree_tbl.First;
13633 LOOP
13634 IF l_old_element_id IS NULL THEN
13635 EXIT;
13636 END IF;
13637
13638 l_new_element_id := l_rgn_subtree_tbl(l_old_element_id);
13639 IF l_rgn_subtree_tbl.EXISTS(TO_NUMBER(l_parent_elements_tbl(l_old_element_id))) THEN
13640 l_new_parent_element_id := l_rgn_subtree_tbl(TO_NUMBER(l_parent_elements_tbl(l_old_element_id)));
13641 ELSE
13642 l_new_parent_element_id := l_page_root_element_id;
13643 END IF;
13644 INSERT INTO CZ_UI_PAGE_ELEMENTS
13645 (UI_DEF_ID
13646 ,PAGE_ID
13647 ,PERSISTENT_NODE_ID
13648 ,ELEMENT_ID
13649 ,PARENT_ELEMENT_ID
13650 ,PARENT_PERSISTENT_NODE_ID
13651 ,REGION_PERSISTENT_NODE_ID
13652 ,PAGEBASE_PERSISTENT_NODE_ID
13653 ,CTRL_TEMPLATE_ID
13654 ,BASE_PAGE_FLAG
13655 ,INSTANTIABLE_FLAG
13656 ,SEQ_NBR
13657 ,DELETED_FLAG
13658 ,CTRL_TEMPLATE_UI_DEF_ID
13659 ,MODEL_REF_EXPL_ID
13660 ,ELEMENT_TYPE
13661 ,NAME
13662 ,ELEMENT_SIGNATURE_ID
13663 ,SUPPRESS_REFRESH_FLAG)
13664 SELECT
13665 UI_DEF_ID
13666 ,l_new_page_id
13667 ,PERSISTENT_NODE_ID
13668 ,l_new_element_id
13669 ,l_new_parent_element_id
13670 ,PARENT_PERSISTENT_NODE_ID
13671 ,REGION_PERSISTENT_NODE_ID
13672 ,pagebase_persistent_node_id
13673 ,CTRL_TEMPLATE_ID
13674 ,BASE_PAGE_FLAG
13675 ,INSTANTIABLE_FLAG
13676 ,SEQ_NBR
13677 ,DELETED_FLAG
13678 ,CTRL_TEMPLATE_UI_DEF_ID
13679 ,MODEL_REF_EXPL_ID
13680 ,ELEMENT_TYPE
13681 ,NAME
13682 ,ELEMENT_SIGNATURE_ID
13683 ,SUPPRESS_REFRESH_FLAG
13684 FROM CZ_UI_PAGE_ELEMENTS
13685 WHERE ui_def_id=p_ui_def_id AND
13686 page_id=p_page_id AND
13687 element_id=TO_CHAR(l_old_element_id);
13688
13689 UPDATE CZ_UI_PAGE_ELEMENTS
13690 SET parent_element_id=l_new_element_id
13691 WHERE ui_def_id=p_ui_def_id AND
13692 page_id=l_new_page_id AND
13693 parent_element_id=TO_CHAR(l_old_element_id);
13694
13695 l_old_element_id := l_rgn_subtree_tbl.NEXT(l_old_element_id);
13696 END LOOP;
13697
13698 END IF; -- end of IF l_rgn_subtree_tbl.COUNT > 0 THEN
13699
13700 l_new_page_id := p_new_pages_tbl.NEXT(l_new_page_id);
13701
13702 END LOOP; -- end of loop through p_new_pages_tbl
13703
13704 END reconstruct_Nested_Regions;
13705
13706 --
13707 -- split a single Page
13708 -- Parameters :
13709 -- p_ui_node - identifies UI node of page
13710 --
13711 PROCEDURE split_Page(p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13712 p_max_controls_per_page IN NUMBER ) IS
13713
13714 l_elements_tbl ui_page_elements_tbl_type;
13715 l_new_pages_tbl number_tbl_type;
13716 l_parent_elements_tbl varchar_tbl_type;
13717
13718 BEGIN
13719
13720 IF p_ui_page_node.suppress_refresh_flag=G_YES_FLAG THEN
13721 RETURN;
13722 END IF;
13723
13724 SAVEPOINT split_Page_Point;
13725
13726 collect_UI_Elements(p_ui_page_node => p_ui_page_node,
13727 p_max_controls_per_page => p_max_controls_per_page,
13728 x_new_pages_tbl => l_new_pages_tbl,
13729 x_elements_tbl => l_elements_tbl,
13730 x_new_parent_elements_tbl => l_parent_elements_tbl);
13731
13732 handle_Direct_Child_Nodes(p_ui_page_node => p_ui_page_node,
13733 p_elements_tbl => l_elements_tbl,
13734 p_parent_elements_tbl => l_parent_elements_tbl);
13735
13736 reconstruct_Nested_Regions(p_ui_def_id => p_ui_page_node.ui_def_id,
13737 p_page_id => p_ui_page_node.page_id,
13738 p_new_pages_tbl => l_new_pages_tbl);
13739 EXCEPTION
13740 WHEN OTHERS THEN
13741 ROLLBACK TO split_Page_Point;
13742 DEBUG('split_Page() : fatal error "'||SQLERRM||'"');
13743 END split_Page;
13744
13745 --
13746 -- split UI pages if they must be split
13747 --
13748 PROCEDURE split_Pages IS
13749
13750 l_num_if_roots NUMBER;
13751 l_target_persistent_node_id NUMBER;
13752 l_page_set_id NUMBER;
13753 l_page_set_type NUMBER;
13754 l_page_ref_id NUMBER;
13755 l_max_controls_per_page NUMBER;
13756
13757 BEGIN
13758
13759 IF g_UI_Context.control_layout IN(1,2) THEN
13760 l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS*(g_UI_Context.control_layout+1);
13761 ELSE
13762 l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS;
13763 END IF;
13764
13765 --
13766 -- split UI Pages
13767 --
13768 FOR i IN (SELECT *
13769 FROM CZ_UI_PAGE_ELEMENTS
13770 WHERE ui_def_id = g_UI_Context.ui_def_id AND
13771 parent_element_id IS NULL AND
13772 persistent_node_id=pagebase_persistent_node_id AND
13773 NVL(suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG AND
13774 deleted_flag IN (G_MARK_TO_ADD))
13775 LOOP
13776 split_Page(i, l_max_controls_per_page);
13777 END LOOP;
13778
13779 IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU THEN
13780 SELECT COUNT(*) INTO l_num_if_roots FROM CZ_UI_PAGE_REFS
13781 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13782 AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13783 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13784 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13785 IF l_num_if_roots > 1 THEN
13786
13787 SELECT target_persistent_node_id,page_set_id,page_ref_type
13788 INTO l_target_persistent_node_id,l_page_set_id,l_page_set_type
13789 FROM CZ_UI_PAGE_REFS
13790 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13791 AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13792 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13793 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG AND rownum<2;
13794
13795 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13796
13797 INSERT INTO CZ_UI_PAGE_REFS
13798 (ui_def_id,
13799 page_set_id,
13800 page_ref_id,
13801 parent_page_ref_id,
13802 seq_nbr,
13803 node_depth,
13804 condition_id,
13805 NAME,
13806 caption_source,
13807 target_persistent_node_id,
13808 target_path,
13809 target_ui_def_id,
13810 target_page_set_id,
13811 target_page_id,
13812 modified_flags,
13813 path_to_prev_page,
13814 path_to_next_page,
13815 page_ref_type,
13816 target_expl_node_id,
13817 caption_rule_id,
13818 deleted_flag)
13819 VALUES
13820 (g_UI_Context.ui_def_id,
13821 l_page_set_id,
13822 l_page_ref_id,
13823 NULL,
13824 0,
13825 0,
13826 NULL,
13827 'Root',
13828 G_DEFAULT_CAPTION_RULE_ID,
13829 l_target_persistent_node_id,
13830 NULL,
13831 NULL,
13832 NULL,
13833 NULL,
13834 0,
13835 NULL,
13836 NULL,
13837 l_page_set_type,
13838 NULL,
13839 NULL,
13840 G_NO_FLAG);
13841
13842 UPDATE CZ_UI_PAGE_REFS
13843 SET parent_page_ref_id=l_page_ref_id
13844 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL AND
13845 target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13846 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13847 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13848
13849 END IF;
13850 END IF;
13851
13852 END split_Pages;
13853
13854 --
13855 -- reorder UI elements on UI page in case of Single Page
13856 --
13857 PROCEDURE set_UI_Page_Elements_Order(p_page_id IN NUMBER) IS
13858 l_counter NUMBER:=0;
13859
13860 PROCEDURE set_UI_Order_(p_element_id IN VARCHAR2) IS
13861 BEGIN
13862 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13863 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13864 page_id=p_page_id AND
13865 parent_element_id=p_element_id AND
13866 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13867 LOOP
13868 l_counter := l_counter + 1;
13869 UPDATE CZ_UI_PAGE_ELEMENTS
13870 SET seq_nbr = l_counter
13871 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13872 element_id=i.element_id;
13873 set_UI_Order_(i.element_id);
13874 END LOOP;
13875 END set_UI_Order_;
13876
13877 BEGIN
13878 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13879 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13880 page_id=p_page_id AND
13881 parent_element_id IS NULL AND
13882 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13883 LOOP
13884 set_UI_Order_(i.element_id);
13885 END LOOP;
13886 END set_UI_Page_Elements_Order;
13887
13888 --
13889 -- set ordering for UI elements on UI pages
13890 --
13891 PROCEDURE handle_UI_Page_Elements_Order IS
13892 BEGIN
13893 FOR i IN(SELECT page_id FROM CZ_UI_PAGES a
13894 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13895 page_set_id IN
13896 (SELECT page_set_id FROM CZ_UI_PAGE_SETS
13897 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13898 page_set_id=a.page_set_id AND
13899 page_set_type=G_SINGLE_PAGE AND
13900 deleted_flag=G_NO_FLAG) AND
13901 NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
13902 deleted_flag=G_NO_FLAG)
13903 LOOP
13904 set_UI_Page_Elements_Order(i.page_id);
13905 END LOOP;
13906 END handle_UI_Page_Elements_Order;
13907
13908 --
13909 -- reorder UI elements on UI page in case of Single Page
13910 --
13911 PROCEDURE handle_Page_Flows IS
13912
13913 l_xmldoc xmldom.DOMDocument;
13914 l_counter NUMBER:=0;
13915 l_seq_nbr NUMBER;
13916 l_show_train BOOLEAN := FALSE;
13917 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
13918 l_page_ref_id NUMBER;
13919
13920 PROCEDURE set_Page_Flow_(p_page_ref_id IN VARCHAR2) IS
13921 BEGIN
13922 FOR i IN(SELECT page_ref_id,target_page_id,empty_page_flag,
13923 NVL(modified_flags,0) AS modified_flags FROM CZ_UI_PAGE_REFS
13924 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13925 parent_page_ref_id=p_page_ref_id AND
13926 target_page_id IN
13927 (SELECT page_id FROM CZ_UI_PAGES
13928 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13929 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,
13930 G_MARK_TO_REFRESH))
13931 AND
13932 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13933 LOOP
13934 l_counter := l_counter + 1;
13935
13936 IF i.modified_flags = 0 THEN
13937 UPDATE CZ_UI_PAGE_REFS
13938 SET seq_nbr = l_counter
13939 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13940 page_ref_id=i.page_ref_id;
13941 END IF;
13942
13943 set_Page_Flow_(i.page_ref_id);
13944 END LOOP;
13945 END set_Page_Flow_;
13946
13947 BEGIN
13948
13949 FOR n IN(SELECT page_set_id
13950 FROM CZ_UI_PAGE_SETS
13951 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13952 page_set_type IN(G_PAGE_FLOW,G_SUBTABS) AND
13953 deleted_flag=G_NO_FLAG)
13954 LOOP
13955 l_counter := 0;
13956 FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13957 NVL(modified_flags,0) AS MODIFIED_FLAGS FROM CZ_UI_PAGE_REFS
13958 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13959 parent_page_ref_id IS NULL AND
13960 page_set_id=n.page_set_id AND
13961 target_page_id IN
13962 (SELECT page_id FROM CZ_UI_PAGES
13963 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13964 page_set_id=n.page_set_id AND
13965 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13966 G_NO_FLAG)) AND
13967 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13968 LOOP
13969 -- Find the first unmodifid page ref. This is basically the first page ref
13970 -- generated by UiGen. Once we have this, we recursively set the seq_nbrs
13971 -- by traversing the page_refs structure in depth first order.
13972 IF m.MODIFIED_FLAGS = 0 THEN
13973 IF l_counter=0 THEN
13974 l_page_ref_id := m.page_ref_id;
13975 END IF;
13976 END IF;
13977 l_counter := l_counter + 1;
13978 END LOOP; -- loop with m index
13979
13980 set_Page_Flow_(l_page_ref_id);
13981
13982 END LOOP; -- loop with n index
13983
13984
13985 FOR n IN(SELECT page_set_id,persistent_node_id,pagebase_expl_node_id
13986 FROM CZ_UI_PAGE_SETS
13987 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13988 deleted_flag=G_NO_FLAG)
13989 LOOP
13990
13991 FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13992 target_persistent_node_id, target_expl_node_id
13993 FROM CZ_UI_PAGE_REFS
13994 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13995 parent_page_ref_id IS NULL AND
13996 page_set_id=n.page_set_id AND
13997 target_page_id IN
13998 (SELECT page_id FROM CZ_UI_PAGES
13999 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14000 page_set_id=n.page_set_id AND
14001 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
14002 G_NO_FLAG)) AND
14003 deleted_flag=G_NO_FLAG)
14004 LOOP
14005
14006 l_target_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => n.pagebase_expl_node_id,
14007 p_base_pers_id => n.persistent_node_id,
14008 p_node_expl_id => m.target_expl_node_id,
14009 p_node_pers_id => m.target_persistent_node_id);
14010 IF l_target_path IS NULL THEN
14011 l_target_path := '.';
14012 END IF;
14013
14014 UPDATE CZ_UI_PAGE_REFS
14015 SET target_path=l_target_path
14016 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14017 page_set_id=n.page_set_id AND
14018 target_persistent_node_id=m.target_persistent_node_id AND
14019 target_path<>l_target_path AND
14020 deleted_flag=G_NO_FLAG;
14021 END LOOP;
14022
14023 END LOOP;
14024 END handle_Page_Flows;
14025
14026 --
14027 -- get child UI Nodes
14028 --
14029 PROCEDURE get_Child_UI_Nodes
14030 (
14031 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14032 p_child_nodes_tbl IN OUT NOCOPY model_nodes_tbl_type,
14033 x_ui_nodes_tbl OUT NOCOPY ui_page_elements_tbl_type,
14034 p_suppress_refresh_flag IN VARCHAR2
14035 ) IS
14036 l_delete_in_model BOOLEAN;
14037 l_ps_node_type NUMBER;
14038 BEGIN
14039
14040 IF p_parent_ui_node.parent_persistent_node_id IS NULL AND
14041 p_parent_ui_node.parent_element_id IS NULL AND
14042 NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
14043
14044 IF get_CX_Button_Status(p_parent_ui_node)=G_CX_VALID THEN
14045
14046 add_CX_Button(p_node => get_Model_Node_By_Persist_Id(p_parent_ui_node.persistent_node_id,
14047 g_UI_Context.devl_project_id),
14048 p_ui_node => p_parent_ui_node);
14049
14050 END IF;
14051
14052 END IF;
14053
14054 FOR i IN (SELECT *
14055 FROM CZ_UI_PAGE_ELEMENTS
14056 WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
14057 page_id=p_parent_ui_node.page_id AND
14058 parent_element_id=p_parent_ui_node.element_id AND
14059 deleted_flag IN (G_NO_FLAG,
14060 G_MARK_TO_ADD,
14061 G_MARK_TO_REFRESH,
14062 G_MARK_TO_DELETE))
14063 LOOP
14064 IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
14065 BEGIN
14066 l_ps_node_type := NULL;
14067 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
14068 WHERE devl_project_id=g_UI_Context.devl_project_id AND
14069 persistent_node_id=i.persistent_node_id;
14070 EXCEPTION
14071 WHEN NO_DATA_FOUND THEN
14072 NULL;
14073 END;
14074 END IF;
14075
14076 l_delete_in_model := TRUE;
14077 FOR h IN(SELECT NULL FROM CZ_PS_NODES
14078 WHERE devl_project_id=g_UI_Context.devl_project_id AND
14079 persistent_node_id=i.persistent_node_id AND
14080 deleted_flag=G_NO_FLAG)
14081 LOOP
14082 l_delete_in_model := FALSE;
14083 END LOOP;
14084
14085 IF NVL(i.element_type,0) NOT IN(G_UI_BOMADDINST_NODE_TYPE,
14086 G_UI_NONBOMADDINST_NODE_TYPE,
14087 G_UI_PAGEDRILLDOWN_NODE_TYPE,
14088 G_UI_CX_BUTTON_NODE_TYPE)
14089 OR (is_UI_Reference(i) AND NVL(i.element_type,0)<>G_UI_CX_BUTTON_NODE_TYPE) THEN
14090 IF i.persistent_node_id IS NOT NULL THEN
14091 x_ui_nodes_tbl(i.persistent_node_id) := i;
14092 END IF;
14093
14094 END IF;
14095
14096 IF NOT(p_child_nodes_tbl.EXISTS(i.persistent_node_id))
14097 AND i.persistent_node_id<>p_parent_ui_node.persistent_node_id AND
14098 NOT( NVL(i.element_type,0)=G_UI_CX_BUTTON_NODE_TYPE AND l_ps_node_type IN(G_BOM_STANDART_ITEM_TYPE,G_OPTION_TYPE))
14099 THEN
14100
14101 IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
14102 --
14103 -- delete UI page or deassociate UI page from model nodes
14104 --
14105 delete_UI_Page(i);
14106
14107 ELSIF i.region_persistent_node_id=i.persistent_node_id AND
14108 i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
14109 --
14110 -- delete UI region or deassociate UI region from model nodes
14111 --
14112 delete_UI_Region(i);
14113
14114 ELSE -- regular UI element
14115 --
14116 -- delete UI element or deassociate UI element from model nodes
14117 --
14118 delete_UI_Element(i, p_suppress_refresh_flag, l_delete_in_model);
14119
14120 END IF;
14121 END IF;
14122
14123 IF i.deleted_flag=G_MARK_TO_DELETE THEN
14124 p_child_nodes_tbl.DELETE(i.persistent_node_id);
14125 END IF;
14126
14127 END LOOP;
14128
14129 END get_Child_UI_Nodes;
14130
14131 --
14132 -- delete child UI nodes
14133 --
14134 PROCEDURE delete_UI_Nodes
14135 (
14136 p_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
14137 px_ui_nodes_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
14138 p_suppress_refresh_flag IN VARCHAR2
14139 ) IS
14140
14141 l_current_ui_index NUMBER;
14142 l_current_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14143
14144 BEGIN
14145
14146
14147 IF px_ui_nodes_tbl.COUNT=0 THEN
14148 RETURN;
14149 END IF;
14150
14151 l_current_ui_index := px_ui_nodes_tbl.First;
14152 LOOP
14153
14154 IF l_current_ui_index IS NULL THEN
14155 EXIT;
14156 END IF;
14157
14158 l_current_ui_node := px_ui_nodes_tbl(l_current_ui_index);
14159
14160 IF l_current_ui_node.persistent_node_id IS NOT NULL AND
14161 NOT(p_nodes_tbl.EXISTS(l_current_ui_node.persistent_node_id)) THEN
14162
14163 IF l_current_ui_node.pagebase_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI page
14164 --
14165 -- delete UI page or deassociate UI page from model nodes
14166 --
14167 delete_UI_Page(l_current_ui_node);
14168
14169 ELSIF l_current_ui_node.pagebase_persistent_node_id<>l_current_ui_node.persistent_node_id AND
14170 l_current_ui_node.region_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI region
14171 --
14172 -- delete UI region or deassociate UI region from model nodes
14173 --
14174 delete_UI_Region(l_current_ui_node);
14175
14176 ELSE -- regular UI element
14177 --
14178 -- delete UI element or deassociate UI element from model nodes
14179 --
14180 delete_UI_Element(l_current_ui_node, p_suppress_refresh_flag);
14181
14182 END IF;
14183
14184 END IF;
14185
14186 IF l_current_ui_node.deleted_flag=G_MARK_TO_DELETE THEN
14187 px_ui_nodes_tbl.DELETE(l_current_ui_node.persistent_node_id);
14188 END IF;
14189
14190 l_current_ui_index := px_ui_nodes_tbl.NEXT(l_current_ui_index);
14191 END LOOP;
14192
14193 END delete_UI_Nodes;
14194
14195 PROCEDURE exist_On_Split_Pages(p_current_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE, -->>>
14196 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14197 px_page_split_seq_nbr OUT NOCOPY NUMBER,
14198 l_exist_on_split_pages_flag OUT NOCOPY VARCHAR2) IS
14199
14200 l_page_persistent_node_id NUMBER;
14201 l_flag VARCHAR2(1);
14202
14203 BEGIN
14204
14205 l_exist_on_split_pages_flag := G_NO_FLAG;
14206
14207 SELECT persistent_node_id,split_seq_nbr
14208 INTO l_page_persistent_node_id, px_page_split_seq_nbr FROM CZ_UI_PAGES
14209 WHERE page_id=p_parent_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
14210
14211 IF px_page_split_seq_nbr=1 THEN
14212 SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
14213 WHERE EXISTS
14214 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
14215 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
14216 WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
14217 split_seq_nbr>1 AND deleted_flag NOT IN(G_YES_FLAG)) AND
14218 persistent_node_id=p_current_model_node.persistent_node_id AND
14219 deleted_flag NOT IN(G_YES_FLAG));
14220 ELSIF px_page_split_seq_nbr>1 THEN
14221 SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
14222 WHERE EXISTS
14223 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
14224 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
14225 WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
14226 split_seq_nbr<>px_page_split_seq_nbr AND deleted_flag NOT IN(G_YES_FLAG)) AND
14227 persistent_node_id=p_current_model_node.persistent_node_id AND
14228 deleted_flag NOT IN(G_YES_FLAG));
14229 END IF;
14230
14231 EXCEPTION
14232 WHEN NO_DATA_FOUND THEN
14233 l_exist_on_split_pages_flag := G_NO_FLAG;
14234 END exist_On_Split_Pages;
14235
14236 --
14237 -- refresh given UI element recursively
14238 --
14239 PROCEDURE refresh_UI_Subtree(p_element_id IN VARCHAR2,
14240 p_page_id IN NUMBER,
14241 p_suppress_refresh_flag IN VARCHAR2 DEFAULT NULL) IS
14242
14243 l_nodes_tbl model_nodes_tbl_type;
14244 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14245 l_non_del_child_nodes_tbl model_nodes_tbl_type;
14246 l_ui_nodes_tbl ui_page_elements_tbl_type;
14247 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
14248 l_next_level_ui_page_idx VARCHAR2(15);
14249 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
14250 l_element_id_tbl varchar_tbl_type;
14251 l_page_id_tbl number_tbl_type;
14252 l_suppress_refresh_flag_tbl varchar_tbl_type;
14253
14254 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14255 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14256 l_new_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14257 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14258 l_current_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14259 l_seq_nbr NUMBER;
14260 l_max_split_nbr NUMBER;
14261 l_page_split_seq_nbr NUMBER;
14262 l_exist_on_split_pages_flag VARCHAR2(1);
14263
14264 BEGIN
14265 --
14266 -- get UI data of current UI element
14267 --
14268 l_ui_node := get_UI_Element(p_element_id,p_page_id);
14269
14270 IF l_ui_node.persistent_node_id IS NULL THEN
14271 GOTO NEXT_LEVEL;
14272 END IF;
14273
14274 --
14275 -- get ps_node_id of curren model node ( <-> model node associated with the current UI element )
14276 --
14277 l_ps_node := get_Model_Node_By_Persist_Id(l_ui_node.persistent_node_id,
14278 g_UI_Context.devl_project_id);
14279
14280 IF l_ps_node.deleted_flag=G_YES_FLAG OR l_ps_node.ps_node_id IS NULL OR
14281 l_ps_node.ui_omit=G_YES_FLAG THEN
14282 IF l_ui_node.pagebase_persistent_node_id=l_ui_node.persistent_node_id THEN -- UI page
14283 --
14284 -- delete UI page or deassociate UI page from model nodes
14285 --
14286 delete_UI_Page(l_ui_node);
14287
14288 ELSIF l_ui_node.region_persistent_node_id=l_ui_node.persistent_node_id AND
14289 l_ui_node.pagebase_persistent_node_id<>l_ui_node.persistent_node_id THEN -- UI region
14290 --
14291 -- delete UI region or deassociate UI region from model nodes
14292 --
14293 delete_UI_Region(l_ui_node);
14294
14295 ELSE -- regular UI element
14296 --
14297 -- delete UI element or deassociate UI element from model nodes
14298 --
14299 delete_UI_Element(l_ui_node,p_suppress_refresh_flag, TRUE);
14300
14301 END IF;
14302 RETURN;
14303 END IF;
14304
14305 --
14306 -- get child nodes of current model node
14307 --
14308 get_Child_Nodes(l_ps_node.ps_node_id,
14309 g_UI_Context.show_all_nodes_flag,
14310 l_seq_nodes_tbl,
14311 l_nodes_tbl,
14312 l_non_del_child_nodes_tbl);
14313
14314 --
14315 -- set suppress_refresh_flag flag for current UI element
14316 --
14317 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14318 l_suppress_refresh_flag := G_YES_FLAG;
14319 ELSE
14320 IF p_suppress_refresh_flag IS NULL THEN
14321 l_suppress_refresh_flag := l_ui_node.suppress_refresh_flag;
14322 ELSE
14323 l_suppress_refresh_flag := p_suppress_refresh_flag;
14324 END IF;
14325 END IF;
14326
14327 --
14328 -- get child nodes of UI node l_ui_node
14329 --
14330 get_Child_UI_Nodes(p_parent_ui_node => l_ui_node,
14331 p_child_nodes_tbl => l_nodes_tbl,
14332 x_ui_nodes_tbl => l_ui_nodes_tbl,
14333 p_suppress_refresh_flag => l_suppress_refresh_flag);
14334
14335 --
14336 -- check root of subtree
14337 --
14338 IF l_ui_node.parent_element_id IS NULL THEN
14339 check_UI_Node_Changes(l_ui_node, l_ps_node);
14340 END IF;
14341
14342 l_seq_nbr := l_seq_nodes_tbl.First;
14343 LOOP
14344
14345 IF l_seq_nbr IS NULL THEN
14346 EXIT;
14347 END IF;
14348
14349 l_current_model_node := l_seq_nodes_tbl(l_seq_nbr);
14350
14351 -- node does not exist in UI on the same level as in Model tree
14352 IF NOT(l_ui_nodes_tbl.EXISTS(l_current_model_node.persistent_node_id)) THEN
14353
14354 l_max_split_nbr := get_Last_Split_Page_Nbr(p_page_id);
14355
14356 IF (l_max_split_nbr > 1) THEN -- case when page was split
14357
14358 exist_On_Split_Pages(l_current_model_node, l_ui_node,
14359 l_page_split_seq_nbr, l_exist_on_split_pages_flag);
14360
14361 IF l_exist_on_split_pages_flag=G_NO_FLAG AND
14362 l_page_split_seq_nbr=l_max_split_nbr THEN
14363 --
14364 -- add new UI Node
14365 --
14366 add_New_UI_Node(p_ui_node => l_ui_node,
14367 p_model_node => l_current_model_node,
14368 p_suppress_refresh_flag => l_suppress_refresh_flag,
14369 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
14370 x_new_ui_node => l_new_ui_node);
14371 END IF;
14372 ELSE
14373 --
14374 -- add new UI Node
14375 --
14376 add_New_UI_Node(p_ui_node => l_ui_node,
14377 p_model_node => l_current_model_node,
14378 p_suppress_refresh_flag => l_suppress_refresh_flag,
14379 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
14380 x_new_ui_node => l_new_ui_node);
14381 END IF;
14382
14383 ELSE -- UI element exists ,but associated model node was changed
14384 --
14385 -- check UI node changes
14386 --
14387 check_UI_Node_Changes(l_ui_nodes_tbl(l_current_model_node.persistent_node_id), l_current_model_node);
14388
14389 END IF; -- end of IF NOT(l_nodes_tbl.EXISTS(i.persistent_node_id))
14390
14391 l_seq_nbr := l_seq_nodes_tbl.NEXT(l_seq_nbr);
14392
14393 END LOOP;
14394
14395 << NEXT_LEVEL >>
14396
14397 l_element_id_tbl.DELETE;
14398 l_page_id_tbl.DELETE;
14399 l_suppress_refresh_flag_tbl.DELETE;
14400
14401 --
14402 -- handle next level of UI tree ( recursion )
14403 --
14404 SELECT element_id, page_id, suppress_refresh_flag
14405 BULK COLLECT INTO l_element_id_tbl, l_page_id_tbl, l_suppress_refresh_flag_tbl
14406 FROM CZ_UI_PAGE_ELEMENTS
14407 WHERE ui_def_id = g_UI_Context.ui_def_id AND
14408 page_id=p_page_id AND
14409 parent_element_id = l_ui_node.element_id AND
14410 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14411 (element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE));
14412
14413 IF l_element_id_tbl.COUNT > 0 THEN
14414 FOR k IN l_element_id_tbl.First..l_element_id_tbl.Last
14415 LOOP
14416 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14417 l_suppress_refresh_flag := G_YES_FLAG;
14418 ELSE
14419 l_suppress_refresh_flag := NVL(l_suppress_refresh_flag_tbl(k),l_suppress_refresh_flag);
14420 END IF;
14421
14422 refresh_UI_Subtree(p_element_id => l_element_id_tbl(k),
14423 p_page_id => l_page_id_tbl(k),
14424 p_suppress_refresh_flag => l_suppress_refresh_flag);
14425
14426 END LOOP;
14427 END IF;
14428 --kdande; Bug 6875560; 20-Mar-2008; Modified the PLSQL table FOR LOOP to
14429 --simple LOOP to get the indexes as the index is a VARCHAR2 column
14430 IF l_next_level_ui_pages_tbl.COUNT > 0 THEN
14431 l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.FIRST;
14432 LOOP
14433 EXIT WHEN l_next_level_ui_page_idx IS NULL;
14434 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
14435 l_suppress_refresh_flag := G_YES_FLAG;
14436 ELSE
14437 l_suppress_refresh_flag := NVL(l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).suppress_refresh_flag,l_suppress_refresh_flag);
14438 END IF;
14439 refresh_UI_Subtree(p_element_id => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).element_id,
14440 p_page_id => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).page_id,
14441 p_suppress_refresh_flag => l_suppress_refresh_flag);
14442 l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.NEXT(l_next_level_ui_page_idx);
14443 END LOOP;
14444 END IF;
14445
14446 END refresh_UI_Subtree;
14447
14448 --
14449 -- return TRUE if UI page with page_id=p_page_id is empty
14450 -- else return FALSE
14451 --
14452 FUNCTION is_Empty_Page(p_page_id IN NUMBER)
14453 RETURN BOOLEAN IS
14454 l_flag VARCHAR2(1);
14455 BEGIN
14456 SELECT G_YES_FLAG INTO l_flag
14457 FROM CZ_UI_PAGE_ELEMENTS
14458 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14459 page_id=p_page_id AND
14460 parent_element_id IS NOT NULL AND
14461 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
14462 rownum<2;
14463 RETURN FALSE;
14464 EXCEPTION
14465 WHEN NO_DATA_FOUND THEN
14466 RETURN TRUE;
14467 END is_Empty_Page;
14468
14469 --
14470 -- perform a special handling for empty UI pages :
14471 -- set CZ_UI_PAGE_REF.target_page_id=NULL for those UI pages
14472 -- which are empty UI pages
14473 --
14474 PROCEDURE handle_Empty_Pages IS
14475
14476 l_empty_page BOOLEAN;
14477
14478 BEGIN
14479
14480 --
14481 -- exlude from UI Page Refs those UI pages
14482 -- which have no UI content in it
14483 --
14484 FOR i IN(SELECT page_ref_id,
14485 target_page_id,target_persistent_node_id,
14486 NVL(empty_page_flag,G_NO_FLAG) AS empty_page_flag FROM CZ_UI_PAGE_REFS
14487 WHERE ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG AND
14488 target_page_id IN(SELECT page_id FROM CZ_UI_PAGES
14489 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14490 NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
14491 deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD) ))
14492 LOOP
14493
14494 -- check page - is it empty or no ?
14495 l_empty_page := is_Empty_Page(i.target_page_id);
14496
14497 IF NVL(i.empty_page_flag,G_NO_FLAG)=G_NO_FLAG AND l_empty_page THEN
14498
14499 UPDATE CZ_UI_PAGE_REFS
14500 SET empty_page_flag=G_YES_FLAG
14501 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14502 page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14503
14504 IF SQL%ROWCOUNT>0 THEN
14505 UPDATE CZ_UI_PAGES
14506 SET empty_page_flag=G_YES_FLAG
14507 WHERE page_id=i.target_page_id AND
14508 ui_def_id=g_UI_Context.ui_def_id;
14509 END IF;
14510
14511 ELSIF i.empty_page_flag=G_YES_FLAG AND l_empty_page=FALSE THEN
14512
14513 UPDATE CZ_UI_PAGE_REFS
14514 SET empty_page_flag=G_NO_FLAG
14515 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14516 page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14517
14518 IF SQL%ROWCOUNT>0 THEN
14519 UPDATE CZ_UI_PAGES
14520 SET empty_page_flag=G_NO_FLAG
14521 WHERE page_id=i.target_page_id AND
14522 ui_def_id=g_UI_Context.ui_def_id;
14523 END IF;
14524
14525 END IF;
14526
14527 END LOOP;
14528
14529 END handle_Empty_Pages;
14530
14531 PROCEDURE set_SLMenu_Order(p_page_set_id IN NUMBER) IS
14532
14533 l_counter NUMBER:=0;
14534 l_split_seq_nbr NUMBER;
14535
14536 PROCEDURE set_Page_Ref_Order_(p_page_ref_id IN VARCHAR2) IS
14537 BEGIN
14538 FOR i IN(SELECT page_ref_id FROM CZ_UI_PAGE_REFS a
14539 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14540 parent_page_ref_id=p_page_ref_id AND
14541 EXISTS
14542 (SELECT NULL FROM CZ_UI_PAGES
14543 WHERE page_id=a.target_page_id AND ui_def_id=g_UI_Context.ui_def_id) AND
14544 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG) ORDER BY seq_nbr)
14545 LOOP
14546 l_counter := l_counter + 1;
14547 UPDATE CZ_UI_PAGE_REFS
14548 SET seq_nbr = l_counter
14549 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14550 page_ref_id=i.page_ref_id;
14551 set_Page_Ref_Order_(i.page_ref_id);
14552 END LOOP;
14553 END set_Page_Ref_Order_;
14554
14555 BEGIN
14556 FOR i IN(SELECT page_ref_id,target_page_id,target_persistent_node_id FROM CZ_UI_PAGE_REFS
14557 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14558 page_set_id=p_page_set_id AND
14559 parent_page_ref_id IS NULL AND
14560 deleted_flag=G_NO_FLAG)
14561 LOOP
14562 SELECT NVL(split_seq_nbr,1) INTO l_split_seq_nbr
14563 FROM CZ_UI_PAGES
14564 WHERE page_id=i.target_page_id AND
14565 ui_def_id=g_UI_Context.ui_def_id;
14566
14567 IF l_split_seq_nbr > 1 THEN
14568 UPDATE CZ_UI_PAGE_REFS
14569 SET seq_nbr = l_split_seq_nbr
14570 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14571 page_ref_id=i.page_ref_id;
14572 l_counter := l_split_seq_nbr;
14573 ELSE
14574 UPDATE CZ_UI_PAGE_REFS
14575 SET seq_nbr = 1
14576 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14577 page_ref_id=i.page_ref_id;
14578 SELECT MAX(split_seq_nbr) INTO l_counter FROM CZ_UI_PAGES
14579 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14580 persistent_node_id=i.target_persistent_node_id AND
14581 deleted_flag IN (G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG);
14582 END IF;
14583
14584 set_Page_Ref_Order_(i.page_ref_id);
14585 END LOOP;
14586 END set_SLMenu_Order;
14587
14588 --
14589 -- set ordering for UI elements on UI pages
14590 --
14591 PROCEDURE handle_SLMenu_Order IS
14592 BEGIN
14593 FOR i IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
14594 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14595 page_set_type=G_SINGLE_LEVEL_MENU AND
14596 deleted_flag=G_NO_FLAG)
14597 LOOP
14598 set_SLMenu_Order(i.page_set_id);
14599 END LOOP;
14600 END handle_SLMenu_Order;
14601
14602 --vsingava IM-ER
14603 -- Finds an Instance List containing the xml node passed in and returns its AMN
14604 -- This function also checks the node passed in itself i.e. if the node passed in is
14605 -- an Instance List, then the function will return its AMN
14606 FUNCTION getInstanceListAMN(p_ui_def_id IN CZ_UI_DEFS.ui_def_Id%TYPE,
14607 p_page_id IN CZ_UI_PAGES.page_id%TYPE,
14608 p_xml_node IN xmldom.DOMNode) RETURN expl_node_persistent_id_pair
14609 IS
14610
14611 l_node xmldom.DOMNode;
14612 l_user_attribute4_value VARCHAR2(2000);
14613 l_user_attribute1_value VARCHAR2(2000);
14614 l_layout_region_type VARCHAR2(255);
14615 l_id_pair expl_node_persistent_id_pair;
14616 l_element_with_AMN CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14617
14618 BEGIN
14619
14620 l_node := p_xml_node;
14621
14622 WHILE NOT xmldom.isNull(l_node)
14623 LOOP
14624 l_user_attribute4_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
14625 IF l_user_attribute4_value IS NOT NULL THEN
14626 l_layout_region_type := get_User_Attribute(l_user_attribute4_value, 'layoutRegionType');
14627 IF l_layout_region_type = '6078' THEN
14628 -- We have a page include region
14629 l_user_attribute1_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
14630 IF (l_user_attribute1_value IS NOT NULL AND l_user_attribute1_value <> 'model_path=%modelPath') THEN
14631 l_element_with_AMN := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
14632 ELSE
14633 l_element_with_AMN := find_AMN_Element_Above(l_node);
14634 END IF;
14635
14636 SELECT persistent_node_id, model_ref_expl_id
14637 INTO l_id_pair.persistent_node_id, l_id_pair.expl_node_id
14638 FROM cz_ui_page_elements
14639 WHERE ui_def_Id = p_ui_def_id
14640 AND page_Id = p_page_id
14641 AND element_Id = l_element_with_AMN;
14642
14643
14644 return l_id_pair;
14645 END IF;
14646 END IF;
14647 l_node := xmldom.getParentNode(l_node);
14648 END LOOP;
14649
14650 RETURN l_id_pair;
14651
14652 END getInstanceListAMN;
14653
14654 -- Finds an Instance List enclosing the xml node passed in and returns its AMN
14655 -- This function does not check the node passed in itself. It starts checking from
14656 -- its parent
14657 FUNCTION getEnclosingInstanceListAMN(p_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14658 p_xml_node xmldom.DOMNode) RETURN expl_node_persistent_id_pair
14659 IS
14660
14661 l_node xmldom.DOMNode;
14662 l_user_attribute4_value VARCHAR2(2000);
14663 l_user_attribute1_value VARCHAR2(2000);
14664 l_layout_region_type VARCHAR2(255);
14665 l_id_pair expl_node_persistent_id_pair;
14666 l_element_with_AMN CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14667
14668 BEGIN
14669
14670 l_node := xmldom.getParentNode(p_xml_node);
14671
14672 RETURN getInstanceListAMN(p_ui_element.ui_def_id, p_ui_element.page_id, l_node);
14673
14674 END getEnclosingInstanceListAMN;
14675
14676 PROCEDURE check_Boundaries IS
14677 l_node_is_reachable NUMBER := -1;
14678 l_has_unreach BOOLEAN := FALSE;
14679 l_xml_doc xmldom.DOMDocument;
14680 l_xml_node xmldom.DOMNode;
14681 l_null_xml_doc xmldom.DOMDocument;
14682 l_instance_list_amn expl_node_persistent_id_pair;
14683
14684 BEGIN
14685 FOR i IN(SELECT page_id,pagebase_expl_node_id, jrad_doc FROM CZ_UI_PAGES --vsingava IM-ER
14686 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14687 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14688 LOOP
14689
14690 l_xml_doc := l_null_xml_doc;
14691
14692 FOR k IN(SELECT *
14693 FROM CZ_UI_PAGE_ELEMENTS
14694 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14695 page_id=i.page_id AND
14696 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14697 LOOP
14698 BEGIN
14699 l_instance_list_amn.persistent_node_id := NULL;
14700
14701 l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(i.pagebase_expl_node_id,
14702 k.model_ref_expl_id,
14703 k.persistent_node_id);
14704 IF l_node_is_reachable=0 THEN
14705
14706 IF ( xmldom.isNull(l_xml_doc) ) THEN
14707 l_xml_doc := parse_JRAD_Document(i.jrad_doc);
14708 END IF;
14709
14710 l_xml_node := find_XML_Node_By_Attribute(l_xml_doc, G_ID_ATTRIBUTE, k.element_id);
14711
14712 l_instance_list_amn := getEnclosingInstanceListAMN(k, l_xml_node);
14713
14714 IF l_instance_list_amn.persistent_node_id IS NULL THEN
14715 l_has_unreach := TRUE;
14716 add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
14717 p_token_name => 'PICKEDNODENAME',
14718 p_token_value => k.name,
14719 p_fatal_error => TRUE);
14720 END IF;
14721 END IF;
14722 EXCEPTION
14723 WHEN OTHERS THEN
14724 NULL;
14725 END;
14726 END LOOP;
14727 END LOOP;
14728
14729 IF l_has_unreach THEN
14730 RAISE UNREACH_UI_NODE;
14731 END IF;
14732 END check_Boundaries;
14733
14734
14735 -- Gets the UI Node for the parent of this PsNode
14736 --
14737 PROCEDURE get_parent_ui_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14738 p_ord_siblings IN model_nodes_tbl_type,
14739 p_ps_node_index IN NUMBER,
14740 x_parent_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14741 x_insert_index OUT NOCOPY NUMBER,
14742 x_refresh_enabled_parent_found OUT NOCOPY BOOLEAN,
14743 x_atleast_one_parent_found OUT NOCOPY BOOLEAN) IS
14744
14745 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14746 l_predecessor CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14747 l_successor CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14748 l_pred_persistent_node_id NUMBER := NULL;
14749 l_succ_persistent_node_id NUMBER := NULL;
14750 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14751 l_parent_element_id NUMBER;
14752 l_page_id NUMBER;
14753 l_added BOOLEAN;
14754
14755 BEGIN
14756
14757 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14758
14759 DEBUG('asp:Find parent ' || p_ps_node_index || 'siblings count = ' || p_ord_siblings.COUNT);
14760
14761 l_added := FALSE;
14762
14763 IF p_ps_node_index > 1 THEN
14764 l_predecessor := p_ord_siblings(p_ps_node_index-1);
14765 l_pred_persistent_node_id := l_predecessor.persistent_node_id;
14766 END IF;
14767
14768 IF p_ps_node_index > 0 AND p_ps_node_index < p_ord_siblings.COUNT THEN
14769 FOR i in p_ps_node_index+1..p_ord_siblings.COUNT
14770 LOOP
14771 IF p_ord_siblings(i).deleted_flag = G_NO_FLAG AND p_ord_siblings(i).creation_date < g_UI_Context.ui_timestamp_refresh THEN
14772 l_successor := p_ord_siblings(i);
14773 l_succ_persistent_node_id := l_successor.persistent_node_id;
14774 EXIT;
14775 END IF;
14776 END LOOP;
14777 END IF;
14778
14779 x_refresh_enabled_parent_found := FALSE;
14780 x_atleast_one_parent_found := FALSE;
14781
14782 -- First find all regions that are bound to the parent of this PS Node and
14783 -- contain the predecessor and successor of this node.
14784
14785 IF l_pred_persistent_node_id IS NOT NULL AND l_succ_persistent_node_id IS NOT NULL THEN
14786 FOR i IN (SELECT *
14787 FROM CZ_UI_PAGE_ELEMENTS pe1
14788 WHERE ui_def_Id = g_UI_Context.ui_def_id
14789 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14790 AND persistent_node_id = l_pred_persistent_node_id
14791 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14792 AND parent_element_id IS NOT NULL
14793 AND EXISTS ( SELECT 1
14794 FROM CZ_UI_PAGE_ELEMENTS pe2
14795 WHERE ui_def_Id = g_UI_Context.ui_def_id
14796 AND pe2.page_id = pe1.page_id
14797 AND pe2.parent_element_id = pe1.parent_element_id
14798 AND pe2.persistent_node_id = l_succ_persistent_node_id
14799 AND pe2.seq_nbr = pe1.seq_nbr + 1
14800 AND deleted_flag = G_NO_FLAG
14801 ))
14802 LOOP
14803
14804 DEBUG('asp:Found parent with both siblings ' || i.parent_element_id);
14805 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14806 x_atleast_one_parent_found := TRUE;
14807 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14808 x_insert_index := i.seq_nbr + 1;
14809 x_refresh_enabled_parent_found := TRUE;
14810 EXIT;
14811 END IF;
14812 END LOOP;
14813 END IF;
14814
14815 -- Now find all regions that are bound to the parent of this PS Node and contain
14816 -- the predecessor of this node
14817
14818
14819 IF l_pred_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14820 FOR i IN (SELECT *
14821 FROM CZ_UI_PAGE_ELEMENTS pe1
14822 WHERE ui_def_Id = g_UI_Context.ui_def_id
14823 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14824 AND persistent_node_id = l_pred_persistent_node_id
14825 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14826 AND parent_element_id IS NOT NULL)
14827 LOOP
14828 DEBUG('asp:Found parent with predecessor ' || i.parent_element_id || ' page_id ' || i.page_id);
14829 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14830 x_atleast_one_parent_found := TRUE;
14831 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14832 x_insert_index := i.seq_nbr + 1;
14833 x_refresh_enabled_parent_found := TRUE;
14834 EXIT;
14835 END IF;
14836 END LOOP;
14837 END IF;
14838
14839
14840 -- Now find all regions that are bound to the parent of this PS Node and contain the
14841 -- successor od this node
14842
14843 IF l_succ_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14844
14845 FOR i IN (SELECT *
14846 FROM CZ_UI_PAGE_ELEMENTS pe1
14847 WHERE ui_def_Id = g_UI_Context.ui_def_id
14848 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14849 AND persistent_node_id = l_succ_persistent_node_id
14850 AND deleted_flag = G_NO_FLAG
14851 AND parent_element_id IS NOT NULL)
14852 LOOP
14853 DEBUG('asp:Found parent with successor ' || i.parent_element_id || ' i.seq_nbr = ' || i.seq_nbr);
14854 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14855 x_atleast_one_parent_found := TRUE;
14856 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14857 x_insert_index := i.seq_nbr;
14858 x_refresh_enabled_parent_found := TRUE;
14859 EXIT;
14860 END IF;
14861 END LOOP;
14862
14863 END IF;
14864
14865
14866 -- we still haven't managed to add UI for the node. We will now look for a region
14867 -- containing the max number of siblings of this node
14868
14869 IF NOT x_refresh_enabled_parent_found THEN
14870
14871 l_parent_element_id := NULL;
14872 l_page_id := NULL;
14873
14874 FOR i IN (SELECT parent_element_id, page_id, count(parent_element_id) max_count
14875 FROM CZ_UI_PAGE_ELEMENTS pe
14876 WHERE ui_def_Id = g_UI_Context.ui_def_id
14877 AND parent_persistent_node_id = l_parent_ps_node.persistent_node_id
14878 AND pagebase_persistent_node_id <> persistent_node_id
14879 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14880 AND parent_element_id IS NOT NULL
14881 AND NOT (p_ps_node.ps_node_type <> G_BOM_OPTION_CLASS_TYPE
14882 AND ((SELECT NVL(ps_node_type,G_UNDEFINED_DATA_TYPE)
14883 FROM CZ_PS_NODES
14884 WHERE devl_project_id = p_ps_node.devl_project_id
14885 AND persistent_node_id = pe.persistent_node_id) = G_BOM_OPTION_CLASS_TYPE))
14886 GROUP BY parent_element_id, page_id
14887 ORDER BY count(parent_element_id) DESC)
14888 LOOP
14889 DEBUG('asp:Found parent with max siblings ' || i.parent_element_id || ', page_id ' || i.page_id);
14890 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14891 DEBUG('asp:Got the parent node ');
14892 x_atleast_one_parent_found := TRUE;
14893 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14894 x_insert_index := -1;
14895 x_refresh_enabled_parent_found := TRUE;
14896 EXIT;
14897 END IF;
14898 END LOOP;
14899
14900 --DEBUG('asp:Before finding region bound to parent node ');
14901
14902 END IF;
14903
14904 IF NOT x_refresh_enabled_parent_found THEN
14905
14906 FOR j IN (SELECT *
14907 FROM CZ_UI_PAGE_ELEMENTS
14908 WHERE ui_def_id = g_UI_Context.ui_def_id AND
14909 persistent_node_Id = l_parent_ps_node.persistent_node_id AND
14910 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14911 element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE))
14912 LOOP
14913 DEBUG('asp:Found parent with no siblings ' || j.element_id);
14914 x_parent_ui_node := get_UI_Element(j.element_id, j.page_id);
14915 x_atleast_one_parent_found := TRUE;
14916 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14917 x_insert_index := -1;
14918 x_refresh_enabled_parent_found := TRUE;
14919 EXIT;
14920 END IF;
14921 END LOOP;
14922 END IF;
14923 END get_parent_ui_node;
14924
14925
14926 -- Determines if UI should be added for this ps node.
14927 -- Determines the place (l_parent_ui_node) under which to
14928 -- add UI for this node and add the UI if required
14929
14930 PROCEDURE add_ui_for_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14931 p_ord_siblings IN model_nodes_tbl_type,
14932 p_ps_node_index IN NUMBER DEFAULT NULL,
14933 x_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
14934
14935 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14936 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14937 l_temp_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14938 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
14939 l_insert_index NUMBER;
14940 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14941 l_parent_node_found BOOLEAN;
14942 l_atleast_one_parent_found BOOLEAN;
14943 l_nodes_tbl model_nodes_tbl_type;
14944 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14945 l_non_del_child_nodes_tbl model_nodes_tbl_type;
14946
14947 BEGIN
14948
14949 l_parent_node_found := FALSE;
14950
14951 IF p_ps_node.parent_id IS NOT NULL THEN
14952 -- Find the parent under which to add UI for this node
14953 get_parent_ui_node(p_ps_node,
14954 p_ord_siblings,
14955 p_ps_node_index,
14956 l_parent_ui_node,
14957 l_insert_index,
14958 l_parent_node_found,
14959 l_atleast_one_parent_found);
14960 END IF;
14961
14962
14963 IF l_parent_node_found OR p_ps_node.parent_id IS NULL THEN
14964 add_New_UI_Node(p_ui_node => l_parent_ui_node,
14965 p_insert_index => l_insert_index,
14966 p_model_node => p_ps_node,
14967 p_suppress_refresh_flag => G_NO_FLAG,
14968 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
14969 x_new_ui_node => x_ui_node);
14970
14971 ELSIF NOT l_atleast_one_parent_found THEN
14972
14973 -- We did not find any parent node. So the parent was probably deleted
14974 -- Lets try and add the parent back and then add UI for this node.
14975 -- add_ui_for_ancestors_recursively(p_ps_node, l_new_ui_node);
14976
14977 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14978
14979
14980 get_Child_Nodes(l_parent_ps_node.parent_id,
14981 G_YES_FLAG, -- get all the nodes
14982 l_seq_nodes_tbl,
14983 l_nodes_tbl,
14984 l_non_del_child_nodes_tbl,
14985 G_YES_FLAG);
14986
14987 add_ui_for_node(l_parent_ps_node,
14988 l_non_del_child_nodes_tbl,
14989 l_parent_ps_node.tree_seq,
14990 x_ui_node);
14991
14992 IF x_ui_node.element_id IS NOT NULL THEN
14993
14994 l_temp_ui_node := x_ui_node;
14995
14996 add_New_UI_Node(p_ui_node => l_temp_ui_node,
14997 p_insert_index => -1,
14998 p_model_node => p_ps_node,
14999 p_suppress_refresh_flag => G_NO_FLAG,
15000 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
15001 x_new_ui_node => x_ui_node);
15002 END IF;
15003
15004 ELSE
15005 -- We found atleast one parent. It was probably disabled for refresh
15006 -- So we will not add any content for the new node
15007 NULL;
15008
15009 END IF;
15010
15011 END add_ui_for_node;
15012
15013
15014 PROCEDURE propogate_ps_node_remove(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
15015
15016 l_new_parent_persistent_id NUMBER;
15017 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15018
15019 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15020 l_insert_index NUMBER;
15021 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15022 l_parent_node_found BOOLEAN;
15023
15024 BEGIN
15025
15026 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
15027
15028 --DEBUG('asp:Deleting UI for ps node ' || p_ps_node.name);
15029
15030 FOR i IN (SELECT *
15031 FROM CZ_UI_PAGE_ELEMENTS pe
15032 WHERE ui_def_Id = g_UI_Context.ui_def_id
15033 AND persistent_node_id = p_ps_node.persistent_node_id
15034 AND deleted_flag = G_NO_FLAG)
15035 LOOP
15036 IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
15037 --
15038 -- delete UI page or deassociate UI page from model nodes
15039 --
15040 delete_UI_Page(i);
15041
15042 ELSIF i.region_persistent_node_id=i.persistent_node_id AND
15043
15044 i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
15045 --
15046 -- delete UI region or deassociate UI region from model nodes
15047 --
15048 delete_UI_Region(i);
15049
15050 ELSE -- regular UI element
15051 --
15052 -- delete UI element or deassociate UI element from model nodes
15053 --
15054 l_suppress_refresh_flag := G_NO_FLAG;
15055
15056 IF disabled_for_refresh(i) THEN
15057 l_suppress_refresh_flag := G_YES_FLAG;
15058 END IF;
15059
15060 --DEBUG('asp:Delete element ' || i.element_id);
15061 delete_UI_Element(i, l_suppress_refresh_flag, TRUE);
15062
15063 END IF;
15064
15065 END LOOP;
15066 END;
15067
15068
15069 PROCEDURE propogate_ps_node_move(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15070 p_ord_siblings IN model_nodes_tbl_type,
15071 p_ps_node_index IN NUMBER DEFAULT NULL,
15072 x_model_ref_expl_id_changed OUT NOCOPY VARCHAR2) IS
15073
15074 l_new_parent_persistent_id NUMBER;
15075 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15076
15077 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15078 l_insert_index NUMBER;
15079 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15080 l_parent_node_found BOOLEAN;
15081 l_diff NUMBER;
15082 l_max_prev_seq_nbr NUMBER;
15083 l_max_src_seq_nbr NUMBER;
15084 l_src_range NUMBER;
15085 l_atleast_one_parent_found BOOLEAN;
15086 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
15087 l_pagebase_expl_node_id CZ_UI_PAGES.pagebase_expl_node_id%TYPE;
15088 l_node_is_reachable NUMBER := -1;
15089 l_model_ref_expl_id NUMBER;
15090 l_count NUMBER;
15091
15092 BEGIN
15093
15094 x_model_ref_expl_id_changed := 'U'; -- Unknown
15095
15096 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
15097
15098 IF p_ps_node.ps_node_type = G_REFERENCE_TYPE AND
15099 g_UI_Context.primary_navigation = G_MODEL_TREE_MENU AND
15100 g_UI_Context.page_set_id IS NOT NULL THEN
15101
15102 -- This is a reference node and it has been moved. Reference nodes will not have pages
15103 -- in this UI which are in the tree. So have to deal with page_refs for references
15104 -- explicitly
15105 FOR i in (SELECT *
15106 FROM CZ_UI_PAGE_REFS
15107 WHERE ui_def_id = g_UI_Context.ui_def_id
15108 AND page_set_id = g_UI_Context.page_set_id
15109 AND target_ui_def_id IS NOT NULL
15110 AND target_persistent_node_id = p_ps_node.persistent_node_id)
15111 LOOP
15112 move_page_ref(i.page_set_id, i.page_ref_id, p_ps_node, l_parent_page_ref_id);
15113 replace_page_ref_target_path(p_ps_node);
15114 END LOOP;
15115
15116 END IF;
15117
15118 FOR i IN (SELECT *
15119 FROM CZ_UI_PAGE_ELEMENTS pe
15120 WHERE ui_def_Id = g_UI_Context.ui_def_id
15121 AND persistent_node_id = p_ps_node.persistent_node_id
15122 AND region_persistent_node_id <> l_parent_ps_node.persistent_node_id
15123 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_DELETE))
15124 LOOP
15125
15126 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
15127 p_ps_node_id => p_ps_node.ps_node_id,
15128 p_component_id => p_ps_node.component_id,
15129 p_ps_node_type => p_ps_node.ps_node_type);
15130
15131 -- This piece of code determines if the model_ref_expl_id of this page_element is
15132 -- different from the current explosion_id of the PS Node. If information is then
15133 -- used later to fix the explosion_ids
15134 IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
15135 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15136 x_model_ref_expl_id_changed := G_YES_FLAG;
15137 ELSE
15138 x_model_ref_expl_id_changed := G_NO_FLAG;
15139 END IF;
15140 END IF;
15141
15142 -- Developer writes element_type 521 (UI Region) for the root_region of a user created page
15143 -- UI Gen/ Refresh writes element_type 520 (UI Page) for the same region. So we cannot reply only
15144 -- on element_type to determine if the page element is for the root region of the page
15145 -- Hence we check for parent_element_id also
15146 IF ( (i.element_type IS NOT NULL AND i.element_type = G_UI_PAGE_NODE_TYPE) OR i.parent_element_id IS NULL ) THEN
15147
15148 -- If the node is a page node then we dont try to move the node to another page
15149 -- but we do have to fix the path of the page and the associated page ref
15150
15151 move_page_ref(i, p_ps_node, l_parent_page_ref_id);
15152 replace_page_ref_target_path(i, p_ps_node);
15153
15154
15155 ELSE
15156 --DEBUG('asp:Found UI for moved PS node ' || p_ps_node.name || ', element_id ' || i.element_id);
15157 -- Determine if this needs to be moved
15158
15159 l_parent_node_found := FALSE;
15160
15161 -- Find the parent under which to add UI for this node
15162 get_parent_ui_node(p_ps_node,
15163 p_ord_siblings,
15164 p_ps_node_index,
15165 l_parent_ui_node,
15166 l_insert_index,
15167 l_parent_node_found,
15168 l_atleast_one_parent_found);
15169
15170 IF l_parent_node_found THEN
15171
15172 g_tgt_pg_to_src_pg_map(l_parent_ui_node.page_id)(TO_NUMBER(i.element_id)) := i.page_id;
15173 g_elements_to_move(i.page_id)(TO_NUMBER(i.element_id)) := TO_NUMBER(i.element_id);
15174
15175 IF l_insert_index > 0 THEN
15176 l_max_prev_seq_nbr := l_insert_index-1;
15177 ELSE
15178 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
15179 START WITH ui_def_id=g_UI_Context.ui_def_id AND
15180 page_id=l_parent_ui_node.page_id AND
15181 element_id=l_parent_ui_node.element_id AND
15182 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
15183 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
15184 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= l_parent_ui_node.page_id AND
15185 page_id=l_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
15186 PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
15187 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15188
15189 l_insert_index := l_max_prev_seq_nbr + 1;
15190 END IF;
15191
15192 SELECT NVL(MAX(seq_nbr),0), NVL(COUNT(seq_nbr), 0) INTO l_max_src_seq_nbr, l_count FROM CZ_UI_PAGE_ELEMENTS
15193 START WITH ui_def_id=g_UI_Context.ui_def_id AND
15194 page_id=i.page_id AND
15195 element_id=i.element_id AND
15196 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
15197 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
15198 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= i.page_id
15199 AND page_id=i.page_id AND PRIOR element_id=parent_element_id AND
15200 PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
15201 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15202
15203 l_src_range := l_max_src_seq_nbr - i.seq_nbr + 1;
15204
15205 -- move the elements after the insert point by adding the range value computed above
15206 UPDATE CZ_UI_PAGE_ELEMENTS
15207 SET seq_nbr=seq_nbr+l_src_range
15208 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15209 page_id=l_parent_ui_node.page_id AND
15210 seq_nbr>l_max_prev_seq_nbr AND
15211 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
15212
15213 l_diff := l_insert_index - i.seq_nbr;
15214
15215 UPDATE CZ_UI_PAGE_ELEMENTS
15216 SET seq_nbr=seq_nbr + l_diff,
15217 page_id=l_parent_ui_node.page_id,
15218 pagebase_persistent_node_id=l_parent_ui_node.pagebase_persistent_node_id,
15219 deleted_flag=DECODE(deleted_flag, G_MARK_TO_DELETE, G_NO_FLAG, deleted_flag)
15220 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15221 page_id=i.page_id AND
15222 seq_nbr >= i.seq_nbr AND
15223 seq_nbr <= l_max_src_seq_nbr AND
15224 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
15225
15226 IF i.deleted_flag <> G_MARK_TO_DELETE THEN
15227 UPDATE CZ_UI_PAGE_ELEMENTS
15228 SET seq_nbr=seq_nbr - l_count
15229 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15230 page_id=i.page_id AND
15231 seq_nbr > l_max_src_seq_nbr AND
15232 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
15233 END IF;
15234
15235 UPDATE CZ_UI_PAGE_ELEMENTS
15236 SET parent_element_id = l_parent_ui_node.element_id,
15237 parent_persistent_node_id = l_parent_ps_node.persistent_node_id,
15238 region_persistent_node_id = l_parent_ui_node.persistent_node_id,
15239 deleted_flag = G_MARK_TO_MOVE
15240 WHERE ui_def_id = i.ui_def_id AND
15241 page_Id = l_parent_ui_node.page_Id AND
15242 element_id = i.element_id;
15243
15244
15245 mark_UI_Page_As_Refreshed(l_parent_ui_node.page_id, l_parent_ui_node.ui_def_id);
15246
15247 -- update the page_rev_nbr of the other (source) page
15248 UPDATE CZ_UI_PAGES
15249 SET page_rev_nbr=page_rev_nbr+1
15250 WHERE page_id=i.page_id AND ui_def_id=i.ui_def_id;
15251
15252 ELSE -- If parent_node not found
15253 -- We cannot move this node to another region since we have not found any such
15254 -- region which can hold this node
15255 -- So we will try and keep this node where it is. We will however have to
15256 -- update the model_path of this control and all controls under it.
15257 -- So lets just mark this node for refresh and let the second pass do the model_path
15258 -- update
15259
15260
15261
15262 SELECT pagebase_expl_node_id INTO l_pagebase_expl_node_id
15263 FROM CZ_UI_PAGES
15264 WHERE ui_def_id=g_UI_Context.ui_def_id
15265 AND page_id = i.page_id
15266 AND deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
15267
15268
15269 DEBUG('asp: calling in_boundary l_pagebase_expl_node_id: ' || l_pagebase_expl_node_id || ', l_model_ref_expl_id: ' || l_model_ref_expl_id || ', i.persistent_node_id' || i.persistent_node_id);
15270
15271 l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(l_pagebase_expl_node_id,
15272 l_model_ref_expl_id,
15273 i.persistent_node_id);
15274
15275 DEBUG('asp: l_node_is_reachable = ' || l_node_is_reachable);
15276
15277 IF l_node_is_reachable=0 THEN
15278 -- The PS node associated to this control is not reachable from the current page
15279 -- So we have to disassociate this UI controls from the PS Node
15280
15281 DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Disassociating from PS Node');
15282
15283 UPDATE CZ_UI_PAGE_ELEMENTS
15284 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
15285 persistent_node_id = 0
15286 WHERE ui_def_id = i.ui_def_id
15287 AND page_id = i.page_id
15288 AND element_id IN
15289 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
15290 START WITH ui_def_id=i.ui_def_id
15291 AND page_id=i.page_id
15292 AND element_id=i.element_id
15293 CONNECT BY PRIOR ui_def_id=i.ui_def_id AND
15294 page_id = i.page_id AND
15295 PRIOR element_id=parent_element_id AND
15296 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_MOVE));
15297 ELSE
15298 -- Mark the node for G_MARK_TO_REFRESH so that the second pass will
15299 -- change the model_path. This may not be necessary. Marking the page for
15300 -- refresh might be enough.
15301
15302 DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Marking it for refresh');
15303
15304 UPDATE CZ_UI_PAGE_ELEMENTS
15305 SET deleted_flag = G_MARK_TO_REFRESH
15306 WHERE ui_def_id = i.ui_def_id
15307 AND page_id = i.page_id
15308 AND element_id = i.element_id
15309 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH);
15310 END IF;
15311
15312 mark_UI_Page_As_Refreshed(i.page_id, i.ui_def_id);
15313
15314 END IF;
15315 END IF;
15316 END LOOP;
15317 END propogate_ps_node_move;
15318
15319 PROCEDURE propogate_ps_node_type_changes(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15320 x_model_ref_expl_id_changed OUT NOCOPY VARCHAR) IS
15321
15322 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15323 l_model_ref_expl_id NUMBER;
15324
15325 BEGIN
15326
15327 x_model_ref_expl_id_changed := 'U'; -- Unknown
15328
15329 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
15330 p_ps_node_id => p_ps_node.ps_node_id,
15331 p_component_id => p_ps_node.component_id,
15332 p_ps_node_type => p_ps_node.ps_node_type);
15333 FOR i IN (SELECT *
15334 FROM CZ_UI_PAGE_ELEMENTS pe
15335 WHERE ui_def_Id = g_UI_Context.ui_def_id
15336 AND persistent_node_id = p_ps_node.persistent_node_id
15337 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_MOVE))
15338 LOOP
15339
15340
15341 -- This piece of code determines if the model_ref_expl_id of this page_element is
15342 -- different from the current explosion_id of the PS Node. If information is then
15343 -- used later to fix the explosion_ids
15344 IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
15345 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15346 x_model_ref_expl_id_changed := G_YES_FLAG;
15347 ELSE
15348 x_model_ref_expl_id_changed := G_NO_FLAG;
15349 END IF;
15350 END IF;
15351
15352 l_ui_node := get_UI_Element(i.element_id, i.page_id);
15353 check_UI_Node_Changes(l_ui_node, p_ps_node);
15354
15355 END LOOP;
15356
15357 END propogate_ps_node_type_changes;
15358
15359
15360 FUNCTION ui_node_exits(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) RETURN BOOLEAN IS
15361
15362 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15363
15364 BEGIN
15365
15366 SELECT element_id into l_element_id FROM CZ_UI_PAGE_ELEMENTS
15367 WHERE ui_def_id=g_UI_Context.ui_def_id
15368 AND persistent_node_id=p_ps_node.persistent_node_id
15369 AND deleted_flag=G_NO_FLAG and rownum < 2;
15370 -- need to return the element_id instead
15371 RETURN TRUE;
15372 EXCEPTION
15373 WHEN NO_DATA_FOUND THEN
15374 RETURN FALSE;
15375
15376 END ui_node_exits;
15377
15378 PROCEDURE reorder_tree_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
15379
15380 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
15381 l_page_ref CZ_UI_PAGE_REFS%ROWTYPE;
15382
15383 l_old_seq_nbr NUMBER;
15384 l_new_seq_nbr NUMBER;
15385 l_count NUMBER;
15386 l_diff NUMBER;
15387 l_range_min NUMBER;
15388 l_range_max NUMBER;
15389
15390 BEGIN
15391
15392 IF g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
15393 l_page_set_id := g_UI_Context.page_set_id;
15394
15395 BEGIN
15396
15397 SELECT min(seq_nbr), count(*) INTO l_old_seq_nbr, l_count
15398 FROM CZ_UI_PAGE_REFS
15399 WHERE ui_def_id = g_UI_Context.ui_def_id
15400 AND page_set_id = l_page_set_id
15401 AND target_persistent_node_id = p_ps_node.persistent_node_id
15402 AND deleted_flag = G_NO_FLAG;
15403
15404 SELECT * INTO l_page_ref
15405 FROM CZ_UI_PAGE_REFS
15406 WHERE ui_def_id = g_UI_Context.ui_def_id
15407 AND page_set_id = l_page_set_id
15408 AND target_persistent_node_id = p_ps_node.persistent_node_id
15409 AND deleted_flag = G_NO_FLAG
15410 AND seq_nbr = l_old_seq_nbr
15411 AND rownum < 2;
15412
15413 l_new_seq_nbr := get_new_page_ref_seq(p_ps_node, l_page_ref.page_set_id, l_page_ref.parent_page_ref_id);
15414
15415 --DEBUG('asp: reordering tree node ' || p_ps_node.name || ', new seq is ' || l_new_seq_nbr);
15416
15417 IF l_new_seq_nbr = l_old_seq_nbr THEN
15418 --DEBUG('asp: new seq_nbr same as old one');
15419 RETURN;
15420 END IF;
15421
15422 IF l_new_seq_nbr > l_old_seq_nbr THEN
15423 l_range_max := l_new_seq_nbr - 1;
15424 l_range_min := l_old_seq_nbr + l_count;
15425 l_new_seq_nbr := l_new_seq_nbr - l_count;
15426 ELSE
15427 l_count := -l_count;
15428 l_range_min := l_new_seq_nbr;
15429 l_range_max := l_old_seq_nbr -1;
15430 END IF;
15431
15432 --DEBUG('asp: l_range_min: ' || l_range_min || ', l_range_max ' || l_range_max);
15433
15434 UPDATE CZ_UI_PAGE_REFS
15435 SET seq_nbr = seq_nbr - l_count
15436 WHERE ui_def_id = g_UI_Context.ui_def_id
15437 AND page_set_id = l_page_set_id
15438 AND parent_page_ref_id = l_page_ref.parent_page_ref_id
15439 AND target_persistent_node_id <> p_ps_node.persistent_node_id
15440 AND deleted_flag = G_NO_FLAG
15441 AND seq_nbr between l_range_min and l_range_max;
15442
15443 l_diff := l_new_seq_nbr - l_old_seq_nbr;
15444
15445 UPDATE CZ_UI_PAGE_REFS
15446 SET seq_nbr = seq_nbr + l_diff
15447 WHERE ui_def_id = g_UI_Context.ui_def_id
15448 AND page_set_id = l_page_set_id
15449 AND parent_page_ref_id = l_page_ref.parent_page_ref_id
15450 AND target_persistent_node_id = p_ps_node.persistent_node_id
15451 AND deleted_flag = G_NO_FLAG;
15452
15453 EXCEPTION
15454 WHEN NO_DATA_FOUND THEN
15455 NULL;
15456 END;
15457
15458 END IF;
15459
15460 END reorder_tree_node;
15461
15462 PROCEDURE fix_model_ref_expl_ids(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15463 x_model_ref_expl_changed OUT NOCOPY VARCHAR2) IS
15464 l_model_ref_expl_id NUMBER;
15465
15466 BEGIN
15467
15468
15469 x_model_ref_expl_changed := 'U';
15470
15471 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
15472 p_ps_node_id => p_ps_node.ps_node_id,
15473 p_component_id => p_ps_node.component_id,
15474 p_ps_node_type => p_ps_node.ps_node_type);
15475
15476 FOR i in (SELECT *
15477 FROM CZ_UI_PAGE_ELEMENTS
15478 WHERE ui_def_id = g_UI_Context.ui_def_id
15479 AND persistent_node_id = p_ps_node.persistent_node_id
15480 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
15481 LOOP
15482
15483 IF x_model_ref_expl_changed <> G_YES_FLAG THEN
15484 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
15485 x_model_ref_expl_changed := G_YES_FLAG;
15486 ELSE
15487 x_model_ref_expl_changed := G_NO_FLAG;
15488 END IF;
15489 END IF;
15490
15491 sync_expl_ids(p_ps_node, i, l_model_ref_expl_id);
15492
15493 END LOOP;
15494
15495 IF x_model_ref_expl_changed = 'U' THEN
15496 x_model_ref_expl_changed := G_YES_FLAG;
15497 END IF;
15498
15499 END fix_model_ref_expl_ids;
15500
15501 PROCEDURE propogate_changes_to_UI(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
15502 p_ord_siblings IN model_nodes_tbl_type,
15503 p_ps_node_index IN NUMBER DEFAULT NULL,
15504 p_add_remove_flag IN VARCHAR2 DEFAULT G_EXISTS_FLAG,
15505 p_add_remove_timestamp IN DATE DEFAULT NULL,
15506 p_ancestor_moved IN BOOLEAN DEFAULT FALSE,
15507 p_model_ref_expl_changed IN VARCHAR2) IS
15508
15509 l_added_ui BOOLEAN;
15510 l_removed_ui BOOLEAN;
15511
15512 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15513 l_nodes_tbl model_nodes_tbl_type;
15514 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15515 l_non_del_child_nodes_tbl model_nodes_tbl_type;
15516 l_new_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15517
15518 l_timestamp_add DATE;
15519 l_timestamp_remove DATE;
15520 l_add_remove_flag VARCHAR2(1);
15521 l_add_remove_timestamp DATE;
15522 l_ps_node_index NUMBER;
15523 l_moved_flag BOOLEAN;
15524 l_model_ref_expl_changed1 VARCHAR2(1) := 'U';
15525 l_model_ref_expl_changed2 VARCHAR2(1) := 'U';
15526 l_check_for_bom_table BOOLEAN;
15527
15528 l_bom_table_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15529 l_page_id NUMBER;
15530
15531 l_bom_parent_element CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15532 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15533
15534 BEGIN
15535
15536 l_added_ui := FALSE;
15537 l_removed_ui := FALSE;
15538
15539 l_add_remove_flag := G_EXISTS_FLAG;
15540 l_add_remove_timestamp := p_add_remove_timestamp;
15541
15542 l_timestamp_add := NVL(p_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH);
15543 l_timestamp_remove := NVL(p_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH);
15544
15545 IF p_add_remove_flag = G_ADDED_FLAG THEN
15546 IF p_add_remove_timestamp > l_timestamp_add THEN
15547 l_timestamp_add := p_add_remove_timestamp;
15548 END IF;
15549 ELSIF p_add_remove_flag = G_REMOVED_FLAG THEN
15550 IF p_add_remove_timestamp > l_timestamp_remove THEN
15551 l_timestamp_remove := p_add_remove_timestamp;
15552 END IF;
15553 END IF;
15554
15555 IF l_timestamp_add > g_UI_Context.UI_TIMESTAMP_REFRESH
15556 OR l_timestamp_remove > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15557
15558 --DEBUG('asp:Handling PS Node ' || p_ps_node.name);
15559 --DEBUG('asp:asp:UI_TIMESTAMP_ADD ' || p_ps_node.UI_TIMESTAMP_ADD);
15560 --DEBUG('asp:UI_TIMESTAMP_REMOVE ' || p_ps_node.UI_TIMESTAMP_REMOVE);
15561 --DEBUG('asp:UI_TIMESTAMP_MOVE ' || p_ps_node.UI_TIMESTAMP_MOVE);
15562 --DEBUG('asp:UI_TIMESTAMP_CHANGETYPE ' || p_ps_node.UI_TIMESTAMP_CHANGETYPE);
15563 --DEBUG('asp:');
15564
15565 IF l_timestamp_add > l_timestamp_remove
15566 AND p_ps_node.ui_omit <> G_YES_FLAG
15567 AND p_ps_node.deleted_flag = G_NO_FLAG THEN
15568 -- We need to add UI for this if not already present
15569 IF NOT ui_node_exits( p_ps_node ) THEN
15570 add_ui_for_node(p_ps_node, p_ord_siblings, p_ps_node_index, l_new_ui_node);
15571 l_add_remove_flag := G_ADDED_FLAG;
15572 l_add_remove_timestamp := l_timestamp_add;
15573 l_added_ui := TRUE;
15574 END IF;
15575 ELSE
15576 IF l_timestamp_remove > l_timestamp_add THEN
15577 -- We need to delete UI structure for this if present
15578 IF ui_node_exits( p_ps_node ) THEN
15579 propogate_ps_node_remove(p_ps_node);
15580 l_add_remove_flag := G_REMOVED_FLAG;
15581 l_add_remove_timestamp := l_timestamp_remove;
15582 l_removed_ui := TRUE;
15583 END IF;
15584 END IF;
15585 END IF;
15586
15587 END IF; -- end of (ADD, REMOVE) > REFRESH
15588
15589 -- If the UI was added, in the above code, then it would have been added in the
15590 -- a place according to the latest position of the model node and with a template
15591 -- compatible with the latest type of the model node. Hence we dont need to process
15592 -- for move or changetype events
15593 -- If the UI was deleted in the above code, there there is nothing to move or
15594 -- change type of
15595 IF p_ps_node.deleted_flag = G_NO_FLAG AND NOT ( l_added_ui OR l_removed_ui ) THEN
15596
15597 IF NVL(p_ps_node.UI_TIMESTAMP_MOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15598 propogate_ps_node_move( p_ps_node, p_ord_siblings, p_ps_node_index, l_model_ref_expl_changed1 );
15599 l_moved_flag := TRUE;
15600 ELSE
15601 IF p_ancestor_moved THEN
15602 l_moved_flag := TRUE;
15603 replace_page_ref_target_path( p_ps_node );
15604 END IF;
15605 IF NVL(p_ps_node.UI_TIMESTAMP_REORDER, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15606 reorder_tree_node(p_ps_node);
15607 END IF;
15608 END IF;
15609
15610 IF NVL(p_ps_node.UI_TIMESTAMP_CHANGETYPE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15611 propogate_ps_node_type_changes( p_ps_node, l_model_ref_expl_changed2);
15612 END IF;
15613
15614 IF l_model_ref_expl_changed1 = G_YES_FLAG OR
15615 l_model_ref_expl_changed2 = G_YES_FLAG OR
15616 (l_model_ref_expl_changed1 = 'U' AND l_model_ref_expl_changed2 = 'U' AND p_model_ref_expl_changed = G_YES_FLAG) THEN
15617
15618 fix_model_ref_expl_ids(p_ps_node, l_model_ref_expl_changed1);
15619 ELSE
15620 l_model_ref_expl_changed1 := G_NO_FLAG;
15621 END IF;
15622 END IF;
15623
15624 get_Child_Nodes(p_ps_node.ps_node_id,
15625 G_YES_FLAG, -- get all the nodes
15626 l_seq_nodes_tbl,
15627 l_nodes_tbl,
15628 l_non_del_child_nodes_tbl,
15629 G_YES_FLAG);
15630
15631 --DEBUG('asp:Child count ' || l_seq_nodes_tbl.COUNT);
15632 IF l_seq_nodes_tbl.COUNT > 0 THEN
15633 l_ps_node_index := 0;
15634
15635 l_check_for_bom_table := FALSE;
15636 -- If the parent node passed in to this procedure, is an BOM OC or a BOM Model
15637 -- and we did not add or remove a UI element for this BOM in this session
15638 -- then we need to check if any if a table for this OC/Model needs to be there in the UI
15639 -- based on new/ deleted Std items/ OCs
15640 IF (l_add_remove_flag = G_EXISTS_FLAG AND (p_ps_node.ps_node_type = G_BOM_OPTION_CLASS_TYPE OR
15641 p_ps_node.ps_node_type = G_BOM_MODEL_TYPE) ) THEN
15642
15643 l_check_for_bom_table := TRUE;
15644
15645 BEGIN
15646 SELECT element_id, page_Id INTO l_bom_table_id, l_page_id
15647 FROM cz_ui_page_elements
15648 WHERE ui_def_Id = g_UI_Context.ui_def_id
15649 AND persistent_node_id = p_ps_node.persistent_node_id
15650 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH)
15651 AND element_type = G_UI_BOMADDINST_NODE_TYPE
15652 AND rownum < 2;
15653 EXCEPTION
15654 WHEN NO_DATA_FOUND THEN
15655 l_bom_table_id := NULL;
15656 END;
15657 END IF;
15658
15659 FOR i IN 1..l_seq_nodes_tbl.COUNT
15660 LOOP
15661 l_ps_node := l_seq_nodes_tbl(i);
15662 IF l_ps_node.deleted_flag = G_NO_FLAG THEN
15663 l_ps_node_index := l_ps_node_index + 1;
15664 END IF;
15665 IF( l_check_for_bom_table ) THEN
15666
15667 -- We need to process Standard Items because we may need to add/ delete a BOM table
15668 -- if a Standard Item was added/ removed
15669 -- We go to add the table only when we have not made the decision based on a prior Standard Item/ Option Class
15670 -- or BOM Reference under this BOM. We also skip addition/ removal of the table if
15671 -- l_add_remove_flag = G_EXISTS_FLAG which implies that the BOM table for the parent was not added or removed
15672 -- in this refresh session. The G_EXISTS_FLAG is slightly misleading in the sense that it gives one the impression
15673 -- that UI Node for the Model node exists. G_EXISTS_FLAG simply means that the UI for the Model node was neither added
15674 -- nor removed during this refresh session
15675 IF( l_bom_table_id IS NOT NULL ) THEN
15676
15677 IF( NVL(l_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15678
15679 -- mark the flag so that we dont do the same for other children
15680 l_check_for_bom_table := FALSE;
15681
15682 IF NOT(contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15683 UPDATE CZ_UI_PAGE_ELEMENTS
15684 SET deleted_flag=G_MARK_TO_DELETE
15685 WHERE ui_def_id=g_UI_Context.ui_def_id
15686 AND page_id = l_page_id
15687 AND element_Id = l_bom_table_id;
15688
15689 mark_UI_Page_As_Refreshed(l_page_id, g_UI_Context.ui_def_id);
15690
15691 END IF;
15692 END IF;
15693 ELSE
15694 IF( NVL(l_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15695 IF (contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15696 --
15697 -- Add bom table here
15698 --
15699 FOR m IN(SELECT page_id, pagebase_expl_node_id FROM CZ_UI_PAGES
15700 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15701 deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH) AND
15702 persistent_node_id = p_ps_node.persistent_node_id)
15703 LOOP
15704 SELECT element_id, suppress_refresh_flag
15705 INTO l_bom_parent_element, l_suppress_refresh_flag
15706 FROM CZ_UI_PAGE_ELEMENTS
15707 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=m.page_id AND
15708 parent_element_id IS NULL AND persistent_node_id=p_ps_node.persistent_node_id AND
15709 pagebase_persistent_node_id=region_persistent_node_id AND
15710 pagebase_persistent_node_id=p_ps_node.persistent_node_id AND
15711 deleted_flag=G_NO_FLAG;
15712
15713 IF NVL(l_suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
15714 add_BOM_Node
15715 (p_node => p_ps_node,
15716 p_page_id => m.page_id,
15717 p_pagebase_expl_node_id => m.pagebase_expl_node_id,
15718 p_parent_element_id => l_bom_parent_element,
15719 p_pagebase_persistent_node_id => p_ps_node.persistent_node_id,
15720 p_check_child_bom_nodes => G_NO_FLAG );
15721 END IF;
15722 END LOOP;
15723
15724 -- mark the flag so that we dont do the same for other children
15725 l_check_for_bom_table := FALSE;
15726 END IF;
15727 END IF;
15728 END IF;
15729 END IF;
15730
15731 IF l_ps_node.ps_node_type NOT IN (G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) THEN
15732 propogate_changes_to_UI(l_ps_node, l_non_del_child_nodes_tbl, l_ps_node_index, l_add_remove_flag, l_add_remove_timestamp, l_moved_flag, l_model_ref_expl_changed1);
15733 END IF;
15734 END LOOP;
15735 END IF;
15736
15737 END propogate_changes_to_UI;
15738
15739
15740 PROCEDURE refresh_UI_new(p_ui_timestamp_refresh IN DATE) IS
15741
15742 l_root_persistent_node_id NUMBER;
15743 l_nodes_tbl model_nodes_tbl_type;
15744 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15745 l_non_del_child_nodes_tbl model_nodes_tbl_type;
15746 l_ui_nodes_tbl ui_page_elements_tbl_type;
15747 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
15748
15749 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15750 l_empty_siblings_tbl model_nodes_tbl_type;
15751
15752 BEGIN
15753
15754 -- start with the root of the model
15755 l_root_persistent_node_id := get_Root_Persistent_Node_Id();
15756 l_ps_node := get_Model_Node_By_Persist_Id(l_root_persistent_node_id,
15757 g_UI_Context.devl_project_id);
15758
15759 get_Child_Nodes(l_ps_node.ps_node_id,
15760 G_YES_FLAG, -- get all the nodes
15761 l_seq_nodes_tbl,
15762 l_nodes_tbl,
15763 l_non_del_child_nodes_tbl,
15764 G_YES_FLAG);
15765
15766 --DEBUG('asp:Last UI Refresh done at ' || p_ui_timestamp_refresh);
15767 propogate_changes_to_UI(l_ps_node, l_empty_siblings_tbl, -1, G_EXISTS_FLAG, p_ui_timestamp_refresh, FALSE, G_NO_FLAG);
15768
15769
15770 END refresh_UI_new;
15771
15772 --
15773 -- check for UI nodes which have AMNs from referenced models
15774 -- and if there are some such UI nodes then mark corresponding UI pages
15775 -- as MARK_TO_REFRESH
15776 --
15777 PROCEDURE check_Ref_AMNs IS
15778
15779 TYPE xml_dom_docs_tbl_type IS TABLE OF xmldom.DOMDocument INDEX BY VARCHAR2(255);
15780 l_doc_cache_tbl xml_dom_docs_tbl_type;
15781 l_expl_id NUMBER;
15782 l_node_is_reachable NUMBER := -1;
15783 l_has_unreach BOOLEAN := FALSE;
15784 l_xml_doc xmldom.DOMDocument;
15785 l_xml_node xmldom.DOMNode;
15786 l_null_xml_doc xmldom.DOMDocument;
15787 l_instance_list_amn expl_node_persistent_id_pair;
15788 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15789
15790 BEGIN
15791
15792 FOR t IN (SELECT ps_node_id,persistent_node_id as psnode_persistent_node_id,ps_node_type,component_id
15793 FROM CZ_PS_NODES psnode
15794 START WITH psnode.devl_project_id IN
15795 (SELECT refexpl.component_id FROM CZ_MODEL_REF_EXPLS refexpl
15796 WHERE refexpl.model_id=g_UI_Context.devl_project_id AND
15797 refexpl.ps_node_type=G_REFERENCE_TYPE AND refexpl.deleted_flag='0') AND
15798 psnode.deleted_flag='0' AND
15799 ( psnode.ui_timestamp_move > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date) OR
15800 psnode.ui_timestamp_changetype > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date) )
15801 CONNECT BY PRIOR ps_node_id=parent_id AND deleted_flag='0'
15802 )
15803 LOOP
15804
15805 SELECT MIN(model_ref_expl_id) INTO l_expl_id FROM CZ_MODEL_REF_EXPLS
15806 WHERE model_id=g_UI_Context.devl_project_id AND deleted_flag='0' AND
15807 ((t.ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND component_id=t.component_id) OR
15808 (t.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND referring_node_id=t.ps_node_id));
15809
15810 FOR upgel IN(SELECT b.*,a.pagebase_expl_node_id,a.jrad_doc FROM CZ_UI_PAGES a,CZ_UI_PAGE_ELEMENTS b
15811 WHERE a.ui_def_id=g_UI_Context.ui_def_id AND b.ui_def_id=g_UI_Context.ui_def_id AND
15812 a.deleted_flag IN(G_MARK_TO_ADD, G_MARK_TO_REFRESH, G_NO_FLAG) AND
15813 a.page_id=b.page_id AND
15814 b.persistent_node_id = t.psnode_persistent_node_id)
15815 LOOP
15816
15817 UPDATE CZ_UI_PAGE_ELEMENTS
15818 SET model_ref_expl_id=l_expl_id
15819 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15820 page_id=upgel.page_id AND
15821 persistent_node_id=t.psnode_persistent_node_id AND
15822 model_ref_expl_id<>l_expl_id;
15823
15824 UPDATE CZ_UI_PAGES
15825 SET pagebase_expl_node_id=l_expl_id
15826 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15827 page_id=upgel.page_id AND
15828 persistent_node_id=t.psnode_persistent_node_id AND
15829 pagebase_expl_node_id<>l_expl_id;
15830
15831 UPDATE CZ_UI_PAGE_SETS
15832 SET pagebase_expl_node_id=l_expl_id
15833 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15834 persistent_node_id=t.psnode_persistent_node_id AND
15835 pagebase_expl_node_id<>l_expl_id;
15836
15837 UPDATE CZ_UI_PAGE_REFS
15838 SET target_expl_node_id=l_expl_id
15839 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15840 target_persistent_node_id=t.psnode_persistent_node_id AND
15841 target_expl_node_id<>l_expl_id;
15842
15843 UPDATE CZ_UI_ACTIONS
15844 SET target_expl_node_id=l_expl_id
15845 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15846 target_persistent_node_id=t.psnode_persistent_node_id AND
15847 target_expl_node_id<>l_expl_id;
15848
15849 IF upgel.deleted_flag=G_NO_FLAG THEN
15850 UPDATE CZ_UI_PAGES
15851 SET deleted_flag=G_MARK_TO_REFRESH
15852 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15853 page_id=upgel.page_id AND
15854 deleted_flag=G_NO_FLAG;
15855 END IF;
15856
15857 l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(upgel.pagebase_expl_node_id,
15858 l_expl_id,
15859 t.psnode_persistent_node_id);
15860 IF l_node_is_reachable=0 THEN
15861 IF l_doc_cache_tbl.EXISTS(upgel.jrad_doc) THEN
15862 l_xml_doc := l_doc_cache_tbl(upgel.jrad_doc);
15863 ELSE
15864 l_xml_doc := parse_JRAD_Document(upgel.jrad_doc);
15865 END IF;
15866
15867 l_xml_node := find_XML_Node_By_Attribute(l_xml_doc, G_ID_ATTRIBUTE, upgel.element_id);
15868
15869 SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
15870 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15871 page_id=upgel.page_id AND
15872 element_id=upgel.element_id;
15873
15874 l_instance_list_amn := getEnclosingInstanceListAMN(l_ui_node, l_xml_node);
15875
15876 IF l_instance_list_amn.persistent_node_id IS NULL THEN
15877 l_has_unreach := TRUE;
15878 add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
15879 p_token_name => 'PICKEDNODENAME',
15880 p_token_value => upgel.name,
15881 p_fatal_error => TRUE);
15882 END IF;
15883 END IF;
15884 END LOOP;
15885 END LOOP;
15886
15887 IF l_has_unreach THEN
15888 RAISE UNREACH_UI_NODE;
15889 END IF;
15890
15891 END check_Ref_AMNs;
15892
15893 --
15894 -- populate UI tables
15895 --
15896 PROCEDURE populate_UI_Structures IS
15897 l_num_if_roots NUMBER;
15898 l_target_persistent_node_id NUMBER;
15899 l_page_set_id NUMBER;
15900 l_page_set_type NUMBER;
15901 l_page_ref_id NUMBER;
15902 l_ui_timestamp_refresh DATE;
15903 BEGIN
15904
15905 IF NVL(g_UI_Context.suppress_refresh_flag, G_NO_FLAG)=G_YES_FLAG THEN
15906 RETURN;
15907 END IF;
15908 /*
15909 FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15910 WHERE devl_project_id=g_UI_Context.devl_project_id AND
15911 ps_node_type IN(258,259,436,437) AND
15912 deleted_flag=G_YES_FLAG AND EXISTS(SELECT NULL
15913 FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15914 persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15915 LOOP
15916 UPDATE CZ_PS_NODES
15917 SET deleted_flag=G_YES_FLAG
15918 WHERE ps_node_id IN
15919 (SELECT ps_node_id FROM CZ_PS_NODES
15920 START WITH ps_node_id=i.ps_node_id
15921 CONNECT BY PRIOR ps_node_id=parent_id);
15922 END LOOP;
15923
15924 FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15925 WHERE devl_project_id=g_UI_Context.devl_project_id AND
15926 ps_node_type IN(258,259,436,437) AND ui_omit=G_YES_FLAG AND
15927 deleted_flag=G_NO_FLAG AND EXISTS(SELECT NULL
15928 FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15929 persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15930 LOOP
15931 UPDATE CZ_PS_NODES
15932 SET deleted_flag=G_YES_FLAG
15933 WHERE ps_node_id IN
15934 (SELECT ps_node_id FROM CZ_PS_NODES
15935 START WITH ps_node_id=i.ps_node_id
15936 CONNECT BY PRIOR ps_node_id=parent_id);
15937 END LOOP;
15938 */
15939 --
15940 -- refresh all UI elements associated with root of model tree
15941 --
15942 l_ui_timestamp_refresh := g_UI_Context.UI_TIMESTAMP_REFRESH;
15943
15944 g_using_new_UI_refresh := FALSE;
15945
15946 IF l_ui_timestamp_refresh IS NULL THEN
15947
15948 FOR i IN (SELECT ui_def_id, element_id,page_id, suppress_refresh_flag
15949 FROM CZ_UI_PAGE_ELEMENTS
15950 WHERE ui_def_id = g_UI_Context.ui_def_id AND
15951 parent_element_id IS NULL AND
15952 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
15953 LOOP
15954
15955 refresh_UI_Subtree(p_element_id => i.element_id,
15956 p_page_id => i.page_id,
15957 p_suppress_refresh_flag => i.suppress_refresh_flag);
15958 END LOOP;
15959 handle_CXs_For_nonUINodes();
15960 ELSE
15961 g_using_new_UI_refresh := TRUE;
15962 refresh_UI_new(l_ui_timestamp_refresh);
15963 handle_CXs();
15964 END IF;
15965
15966 handle_Deleted_Nodes(g_UI_Context.ui_def_id);
15967
15968 -- set correct order for UI elements
15969 handle_UI_Page_Elements_Order();
15970
15971 -- split UI Pages
15972 split_Pages();
15973
15974 -- handle empty UI Pages
15975 handle_Empty_Pages();
15976
15977 -- set data for Page Sets
15978 handle_Page_Flows();
15979
15980 handle_SLMenu_Order();
15981
15982 IF g_check_boundaries_tbl.EXISTS(g_UI_Context.ui_def_id) THEN
15983 check_Boundaries();
15984 END IF;
15985
15986 check_Ref_AMNs();
15987 END populate_UI_Structures;
15988
15989
15990 PROCEDURE backup_nodes_to_move(p_page_id IN NUMBER) IS
15991
15992 l_node_ids_table number_tbl_type;
15993 l_id NUMBER;
15994 l_parent_node xmldom.DOMNode;
15995 l_node xmldom.DOMNode;
15996
15997 BEGIN
15998
15999 IF g_elements_to_move.EXISTS(p_page_Id) THEN
16000 l_node_ids_table := g_elements_to_move(p_page_Id);
16001 IF l_node_ids_table.COUNT > 0 THEN
16002 l_id := l_node_ids_table.FIRST;
16003 WHILE l_id IS NOT NULL
16004 LOOP
16005 DEBUG('asp: Backing up nested element_id ' || l_id || ' on page ' || l_node_ids_table(l_id));
16006 IF g_dom_elements_tbl.EXISTS(l_id) THEN
16007 l_node := g_dom_elements_tbl(l_id);
16008 g_dom_elements_to_move(l_id) := l_node;
16009 l_parent_node:=xmldom.getParentNode(l_node);
16010 l_node:=xmldom.removeChild(l_parent_node, l_node);
16011 END IF;
16012 -- ELSE the node has already been moved
16013 l_id := l_node_ids_table.NEXT(l_id);
16014 END LOOP;
16015 END IF;
16016 END IF;
16017
16018 END backup_nodes_to_move;
16019
16020 --
16021 -- delete UI XML elements from UI page
16022 --
16023 PROCEDURE delete_UIXML_Elements(p_page_id IN NUMBER,
16024 p_xml_doc xmldom.DOMDocument) IS
16025
16026 l_deleted_nodes_tbl varchar2_tbl_type;
16027 l_node xmldom.DOMNode;
16028 l_out_node xmldom.DOMNode;
16029 l_parent_node xmldom.DOMNode;
16030 l_nodeslist xmldom.DOMNodeList;
16031 l_length NUMBER;
16032 l_element_id VARCHAR2(255);
16033 l_deleted_nodes_exist BOOLEAN := FALSE;
16034 l_deassociated_nodes_exist BOOLEAN := FALSE;
16035
16036 BEGIN
16037
16038 backup_nodes_to_move(p_page_id);
16039 FOR i IN(SELECT element_id,deleted_flag FROM CZ_UI_PAGE_ELEMENTS
16040 WHERE ui_def_id= g_UI_Context.ui_def_id AND
16041 page_id=p_page_id AND
16042 deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_DEASSOCIATE))
16043 LOOP
16044 BEGIN
16045 l_deleted_nodes_tbl(i.element_id) := i.deleted_flag;
16046 EXCEPTION
16047 WHEN OTHERS THEN
16048 NULL;
16049 END;
16050 END LOOP;
16051
16052 --
16053 -- here we don't need to know about hierachy of nodes
16054 -- so we just need to get list of all nodes of XML subtree
16055 --
16056 l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
16057 l_length := xmldom.getLength(l_nodeslist);
16058
16059 --
16060 -- delete XML elements
16061 --
16062 FOR i IN 0..l_length-1
16063 LOOP
16064 l_node := xmldom.item(l_nodeslist, i);
16065 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16066 BEGIN
16067 IF l_deleted_nodes_tbl.EXISTS(l_element_id) THEN
16068
16069 IF l_deleted_nodes_tbl(l_element_id)=G_MARK_TO_DELETE THEN
16070 l_parent_node:=xmldom.getParentNode(l_node);
16071 l_out_node:=xmldom.removeChild(l_parent_node,l_node);
16072 l_deleted_nodes_exist := TRUE;
16073 ELSE -- deassociate this node
16074 set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
16075 set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
16076 l_deassociated_nodes_exist := TRUE;
16077 END IF;
16078 END IF;
16079 EXCEPTION
16080 WHEN OTHERS THEN
16081 NULL;
16082 END;
16083 END LOOP;
16084
16085 --
16086 -- mark elements as already deleted,
16087 -- update revision of deleted UI page
16088 --
16089 IF l_deleted_nodes_exist THEN
16090
16091 refresh_UI_Node_Marks(p_page_id => p_page_id,
16092 p_hmode => G_DELETE_ELEMENTS);
16093 END IF;
16094
16095 IF l_deassociated_nodes_exist THEN
16096 UPDATE CZ_UI_PAGE_ELEMENTS
16097 SET deleted_flag=G_NO_FLAG
16098 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16099 page_id=p_page_id AND
16100 deleted_flag=G_MARK_TO_DEASSOCIATE;
16101 IF SQL%ROWCOUNT>0 THEN
16102 UPDATE CZ_UI_PAGES
16103 SET page_rev_nbr=page_rev_nbr+1
16104 WHERE page_id=p_page_id AND
16105 ui_def_id=g_UI_Context.ui_def_id;
16106 END IF;
16107 END IF;
16108 END delete_UIXML_Elements;
16109
16110 --
16111 -- delete UI XML page
16112 --
16113 PROCEDURE delete_UIXML_Page(p_page_id IN NUMBER,
16114 p_jrad_doc IN VARCHAR2) IS
16115
16116 l_subtree_doc xmldom.DOMDocument;
16117
16118 BEGIN
16119 BEGIN
16120 IF g_elements_to_move.EXISTS(p_page_Id) THEN
16121 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
16122
16123 IF xmldom.isNull(l_subtree_doc) THEN
16124 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16125 p_token_name => 'UI_TEMPLATE',
16126 p_token_value => p_jrad_doc,
16127 p_fatal_error => TRUE);
16128 RAISE WRONG_UI_TEMPLATE;
16129 END IF;
16130
16131 init_Page_View_Counters(l_subtree_doc);
16132 backup_nodes_to_move(p_page_Id);
16133 ELSE
16134 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
16135 IF xmldom.isNull(l_subtree_doc) THEN
16136 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16137 p_token_name => 'UI_TEMPLATE',
16138 p_token_value => p_jrad_doc,
16139 p_fatal_error => TRUE);
16140 RAISE WRONG_UI_TEMPLATE;
16141 ELSE
16142 UPDATE CZ_UI_PAGE_ELEMENTS
16143 SET deleted_flag=G_MARK_TO_DELETE
16144 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16145 page_id=p_page_id AND
16146 deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG);
16147 END IF;
16148 init_Page_View_Counters(l_subtree_doc);
16149 END IF;
16150
16151 --
16152 -- delete JRAD XML elements that marked to be deleted
16153 --
16154 delete_UIXML_Elements(p_page_id => p_page_id,
16155 p_xml_doc => l_subtree_doc);
16156
16157 EXCEPTION
16158 WHEN OTHERS THEN
16159 DEBUG('delete_UIXML_Page() : '||SQLERRM);
16160 END;
16161
16162 BEGIN
16163 jdr_docbuilder.deleteDocument(p_jrad_doc);
16164 EXCEPTION
16165 WHEN OTHERS THEN
16166 DEBUG('delete_UIXML_Page() : '||SQLERRM);
16167 END;
16168
16169 --
16170 -- mark elements and page as already deleted,
16171 --
16172 refresh_UI_Node_Marks(p_page_id => p_page_id,
16173 p_hmode => G_DELETE_PAGE);
16174
16175 END delete_UIXML_Page;
16176
16177 --
16178 -- refresh CXs on UI Page
16179 --
16180 PROCEDURE refresh_CXs_On_UI_Page
16181 (p_ui_page_id NUMBER,
16182 p_subtree_doc xmldom.DOMDocument) IS
16183
16184 l_node xmldom.DOMNode;
16185 l_parent_node xmldom.DOMNode;
16186 l_out_node xmldom.DOMNode;
16187 l_nodeslist xmldom.DOMNodeList;
16188 l_length NUMBER;
16189 l_element_id NUMBER;
16190 l_attribute_value VARCHAR2(32000);
16191 l_cx_elements_tbl varchar_tbl_type;
16192 l_suppress_refresh_tbl varchar_tbl_type;
16193 l_suppress_el_flag_tbl varchar_tbl_type;
16194 l_delete_node BOOLEAN := FALSE;
16195 l_deassociate_cx BOOLEAN := FALSE;
16196 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
16197
16198 BEGIN
16199 FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
16200 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16201 page_id=p_ui_page_id AND
16202 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16203 deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH))
16204 LOOP
16205 l_element_id := TO_NUMBER(i.element_id);
16206 l_cx_elements_tbl(l_element_id) := get_CX_Button_Status(i);
16207 l_suppress_el_flag_tbl(l_element_id) := NVL(i.suppress_refresh_flag, G_NO_FLAG);
16208 -- check suppress_refresh_flag of its container
16209 l_suppress_refresh_flag := G_NO_FLAG;
16210 IF i.parent_element_id IS NOT NULL THEN
16211 BEGIN
16212 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
16213 FROM CZ_UI_PAGE_ELEMENTS
16214 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16215 page_id=p_ui_page_id AND
16216 element_id=i.parent_element_id;
16217 END;
16218 END IF;
16219 l_suppress_refresh_tbl(l_element_id) := l_suppress_refresh_flag;
16220 END LOOP;
16221
16222 --
16223 -- here we don't need to know about hierachy of nodes
16224 -- so we just need to get list of all nodes of XML subtree
16225 --
16226 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
16227 l_length := xmldom.getLength(l_nodeslist);
16228
16229 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
16230
16231 --
16232 -- scan subtree and substitute macros "%" to real values
16233 --
16234 FOR i IN 0 .. l_length - 1
16235 LOOP
16236 l_delete_node := FALSE;
16237 l_deassociate_cx := FALSE;
16238 l_node := xmldom.item(l_nodeslist, i);
16239 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE );
16240 l_element_id := NULL;
16241 BEGIN
16242 l_element_id := TO_NUMBER(l_attribute_value);
16243 IF l_cx_elements_tbl.EXISTS(l_element_id) THEN
16244
16245 IF l_cx_elements_tbl(l_element_id) IN (G_CX_VALID) AND
16246 l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
16247 l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
16248 set_Attribute(xmldom.makeElement(l_node), 'rendered', 'true');
16249 ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_INVALID) AND
16250 l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
16251 l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
16252 set_Attribute(xmldom.makeElement(l_node), 'rendered', 'false');
16253 ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_MUST_BE_DELETED) THEN
16254 l_delete_node := TRUE;
16255 IF l_suppress_refresh_tbl(l_element_id)=G_YES_FLAG OR
16256 l_suppress_el_flag_tbl(l_element_id)=G_YES_FLAG THEN
16257 l_deassociate_cx := TRUE;
16258 END IF;
16259 END IF;
16260 END IF;
16261 EXCEPTION
16262 WHEN OTHERS THEN
16263 NULL;
16264 END;
16265
16266 IF l_delete_node THEN
16267 IF l_deassociate_cx THEN
16268 set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
16269 set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
16270
16271 UPDATE CZ_UI_PAGE_ELEMENTS
16272 SET persistent_node_id=0
16273 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16274 page_id=p_ui_page_id AND
16275 element_id=l_attribute_value;
16276 ELSE
16277 l_parent_node:=xmldom.getParentNode(l_node);
16278 l_out_node:=xmldom.removeChild(l_parent_node,l_node);
16279 UPDATE CZ_UI_PAGE_ELEMENTS
16280 SET deleted_flag=G_YES_FLAG
16281 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16282 page_id=p_ui_page_id AND
16283 element_id=l_attribute_value;
16284 END IF;
16285 END IF;
16286
16287 END LOOP;
16288
16289 UPDATE CZ_UI_PAGES
16290 SET page_rev_nbr=page_rev_nbr+1
16291 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16292 page_id=p_ui_page_id;
16293
16294 END refresh_CXs_On_UI_Page;
16295
16296 --
16297 -- populate cache of xml nodes for a given XML page
16298 --
16299 PROCEDURE cache_UI_Page(p_xml_doc xmldom.DOMDocument) IS
16300 l_node xmldom.DOMNode;
16301 l_nodeslist xmldom.DOMNodeList;
16302 l_empty_xml_node xmldom.DOMNode;
16303 l_length NUMBER;
16304 l_attribute_value VARCHAR2(32000);
16305
16306 BEGIN
16307
16308 g_page_elements_tbl.DELETE;
16309
16310 l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
16311 l_length := xmldom.getLength(l_nodeslist);
16312
16313 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
16314
16315 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16316
16317 IF l_attribute_value IS NOT NULL THEN
16318 g_page_elements_tbl(l_attribute_value) := l_node;
16319 END IF;
16320
16321 FOR i IN 0 .. l_length - 1
16322 LOOP
16323 l_node := xmldom.item(l_nodeslist, i);
16324
16325 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
16326
16327 IF l_attribute_value IS NOT NULL THEN
16328 g_page_elements_tbl(l_attribute_value) := l_node;
16329 END IF;
16330
16331 END LOOP;
16332
16333 END cache_UI_Page;
16334
16335 --
16336 -- refresh UI XML page
16337 --
16338 PROCEDURE refresh_UIXML_Page(p_page_id IN NUMBER) IS
16339
16340 l_subtree_doc xmldom.DOMDocument;
16341 l_xml_root_node xmldom.DOMNode;
16342 l_xml_uicontent_node xmldom.DOMNode;
16343 l_xml_node_to_refresh xmldom.DOMNode;
16344 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16345 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
16346 l_col_number NUMBER := 0;
16347
16348 PROCEDURE create_Next_XML_Level(p_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16349 p_parent_xml_node xmldom.DOMNode) IS
16350
16351 l_new_xml_node xmldom.DOMNode;
16352 l_new_opt_xml_node xmldom.DOMNode;
16353 l_xml_node_to_replace xmldom.DOMNode;
16354 l_opt_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
16355 l_element_type NUMBER;
16356
16357 BEGIN
16358 --
16359 -- get child UI nodes
16360 --
16361 FOR i IN (SELECT *
16362 FROM CZ_UI_PAGE_ELEMENTS a
16363 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16364 page_id = p_page_id AND
16365 parent_element_id = p_ui_node.element_id
16366 -- parent_persistent_node_id = p_ui_node.persistent_node_id
16367 ORDER BY seq_nbr)
16368 LOOP
16369 IF i.deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH) THEN
16370 IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
16371 NOT(NVL(p_ui_node.instantiable_flag, G_MANDATORY_INST_TYPE) IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
16372 p_ui_node.element_type=G_UI_REGION_NODE_TYPE) THEN
16373
16374 IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
16375
16376 --
16377 -- create new JRAD region
16378 --
16379 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
16380 p_parent_xml_node => p_parent_xml_node);
16381
16382 ELSE -- this is regular UI element
16383
16384 --
16385 -- create new JRAD element
16386 --
16387 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16388 p_parent_xml_node => p_parent_xml_node);
16389
16390 END IF; -- end of IF i.element_type=G_UI_REGION_NODE_TYPE ...
16391
16392 ELSE -- p_ui_node is not a UI container
16393 -- CXs can be attached to Options/BOM Standart Items
16394 IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
16395 l_opt_model_node := get_Model_Node_By_Persist_Id(i.persistent_node_id, g_UI_Context.devl_project_id);
16396 IF l_opt_model_node.ps_node_type IN(G_OPTION_TYPE) THEN
16397 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16398 p_parent_xml_node => xmldom.getParentNode(p_parent_xml_node));
16399
16400 END IF;
16401 END IF;
16402 END IF; -- end of IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) ...
16403
16404 ELSIF i.deleted_flag IN(G_MARK_TO_REFRESH) THEN
16405
16406 l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc ,
16407 p_attribute_name => G_ID_ATTRIBUTE,
16408 p_attribute_value => i.element_id);
16409
16410 IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
16411
16412 --
16413 -- create new JRAD element
16414 --
16415 l_new_xml_node := replace_UIXML_Element(p_ui_node => i,
16416 p_parent_xml_node => p_parent_xml_node,
16417 p_xml_node_to_replace => l_xml_node_to_replace);
16418 END IF;
16419
16420 ELSIF i.deleted_flag = G_MARK_TO_MOVE THEN
16421 l_new_xml_node := move_XML_Node(p_ui_node => i,
16422 p_parent_xml_node => p_parent_xml_node);
16423
16424 ELSIF i.deleted_flag IN(G_YES_FLAG, G_LIMBO_FLAG) THEN
16425 NULL; -- do not refresh deleted UI nodes
16426
16427 ELSE
16428 l_new_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc ,
16429 p_attribute_name => G_ID_ATTRIBUTE,
16430 p_attribute_value => i.element_id);
16431 END IF;
16432
16433 create_Next_XML_Level(i, l_new_xml_node);
16434
16435 END LOOP;
16436
16437 END create_Next_XML_Level;
16438
16439 PROCEDURE refresh_UI_Node(p_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16440 p_xml_parent_node xmldom.DOMNode) IS
16441
16442 l_xml_node_to_replace xmldom.DOMNode;
16443 l_new_xml_node xmldom.DOMNode;
16444
16445 BEGIN
16446
16447 FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
16448 WHERE ui_def_id=p_page_ui_node.ui_def_id
16449 AND parent_element_id=p_page_ui_node.element_id
16450 AND persistent_node_id=p_page_ui_node.persistent_node_id
16451 AND (element_type IS NULL OR element_type <> G_UI_CX_BUTTON_NODE_TYPE)
16452 AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH))
16453 LOOP
16454 IF i.deleted_flag=G_MARK_TO_REFRESH THEN
16455 BEGIN
16456 l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc,
16457 p_attribute_name => G_ID_ATTRIBUTE,
16458 p_attribute_value => i.element_id);
16459
16460
16461 IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
16462 --
16463 -- create new JRAD element
16464 --
16465 l_xml_uicontent_node := replace_UIXML_Element(p_ui_node => i,
16466 p_parent_xml_node => p_xml_parent_node,
16467 p_xml_node_to_replace => l_xml_node_to_replace);
16468 END IF;
16469
16470 EXCEPTION
16471 WHEN OTHERS THEN
16472 --
16473 -- this is not critical error message
16474 --
16475 DEBUG('refresh_UIXML_Page() : '||SQLERRM);
16476 RAISE;
16477 END;
16478
16479 END IF;
16480 END LOOP;
16481 END refresh_UI_Node;
16482
16483 BEGIN
16484
16485 -- first delete the cache of dom elements
16486 g_dom_elements_tbl.DELETE;
16487
16488 SELECT *
16489 INTO l_page_ui_node
16490 FROM CZ_UI_PAGE_ELEMENTS
16491 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16492 page_id = p_page_id AND
16493 parent_element_id IS NULL AND
16494 -- element_type=G_UI_PAGE_NODE_TYPE AND
16495 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH);
16496
16497 IF l_page_ui_node.ctrl_template_id IN(G_2COLS_CONTAINER_TEMPLATE_ID,
16498 G_3COLS_CONTAINER_TEMPLATE_ID) THEN
16499
16500 IF l_page_ui_node.ctrl_template_id = G_2COLS_CONTAINER_TEMPLATE_ID THEN
16501 IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
16502 l_col_number := 1;
16503 ELSE
16504 l_col_number :=2;
16505 END IF;
16506 END IF;
16507
16508 IF l_page_ui_node.ctrl_template_id = G_3COLS_CONTAINER_TEMPLATE_ID THEN
16509 IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
16510 l_col_number := 1;
16511 ELSIF g_Num_Elements_On_Page > g_Elements_Per_Column AND
16512 g_Num_Elements_On_Page <= 2*g_Elements_Per_Column THEN
16513 l_col_number := 2;
16514 ELSE
16515 l_col_number := 3;
16516 END IF;
16517 END IF;
16518 ELSE
16519 l_col_number := 0;
16520 END IF;
16521
16522 SELECT jrad_doc INTO l_jrad_doc
16523 FROM CZ_UI_PAGES
16524 WHERE ui_def_id= g_UI_Context.ui_def_id AND
16525 page_id=p_page_id;
16526
16527 --
16528 -- parse document(template) which is going to be nested element
16529 --
16530 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16531
16532 --
16533 -- cache xml nodes of this UI page
16534 --
16535 cache_UI_Page(l_subtree_doc);
16536
16537 IF xmldom.isNull(l_subtree_doc) THEN
16538 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16539 p_token_name => 'UI_TEMPLATE',
16540 p_token_value => l_jrad_doc,
16541 p_fatal_error => TRUE);
16542 RAISE WRONG_UI_TEMPLATE;
16543 END IF;
16544
16545 init_Page_View_Counters(l_subtree_doc);
16546
16547 --
16548 -- delete JRAD XML elements that marked to be deleted
16549 --
16550 delete_UIXML_Elements(p_page_id => p_page_id,
16551 p_xml_doc => l_subtree_doc);
16552
16553 --
16554 -- get subdocument's root node
16555 --
16556 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16557
16558 IF l_col_number = 0 THEN
16559 l_xml_uicontent_node := getUIContents(l_xml_root_node);
16560 ELSE
16561 l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, l_col_number);
16562 END IF;
16563
16564 refresh_UI_Node(l_page_ui_node, l_xml_uicontent_node);
16565
16566 create_Next_XML_Level(l_page_ui_node,
16567 l_xml_uicontent_node);
16568 --
16569 -- refresh CXs on the current UI page
16570 --
16571 refresh_CXs_On_UI_Page(p_ui_page_id => p_page_id ,
16572 p_subtree_doc => l_subtree_doc);
16573
16574 refresh_All_Model_Paths(l_subtree_doc, p_page_id);
16575
16576 --
16577 -- save XML page in JRAD repository
16578 --
16579 Save_Document(l_subtree_doc, l_jrad_doc);
16580
16581 --
16582 -- mark elements and page as already refreshed
16583 --
16584 refresh_UI_Node_Marks(p_page_id => p_page_id,
16585 p_hmode => G_REFRESH_PAGE);
16586
16587 END refresh_UIXML_Page;
16588
16589 --
16590 -- create UI XML page
16591 --
16592 PROCEDURE create_UIXML_Page(p_page_id IN NUMBER,
16593 p_jrad_doc IN VARCHAR2) IS
16594
16595 l_subtree_doc xmldom.DOMDocument;
16596 l_xml_root_node xmldom.DOMNode;
16597 l_xml_uicontent_node xmldom.DOMNode;
16598 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16599 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
16600 l_sub_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
16601 l_curr_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
16602 l_child_nodes_tbl xmldom.DOMNodeList;
16603 l_xml_node xmldom.DOMNode;
16604 l_length NUMBER;
16605 l_col_number NUMBER;
16606
16607 PROCEDURE create_Next_XML_Level(p_element_id NUMBER,
16608 p_parent_xml_node xmldom.DOMNode) IS
16609 l_new_xml_node xmldom.DOMNode;
16610 BEGIN
16611
16612 --
16613 -- get child UI nodes
16614 --
16615 FOR i IN (SELECT *
16616 FROM CZ_UI_PAGE_ELEMENTS
16617 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16618 page_id = p_page_id AND
16619 parent_element_id = p_element_id AND
16620 ctrl_template_id IS NOT NULL AND
16621 deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH,G_MARK_TO_MOVE)
16622 ORDER BY seq_nbr)
16623 LOOP
16624 IF i.deleted_Flag = G_MARK_TO_MOVE THEN
16625 l_new_xml_node := move_XML_Node(p_ui_node => i,
16626 p_parent_xml_node => p_parent_xml_node);
16627 ELSE
16628 IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
16629
16630 IF g_UI_Context.control_layout=1 THEN
16631 IF i.seq_nbr <= g_Elements_Per_Column THEN
16632 l_col_number := 1;
16633 ELSE
16634 l_col_number := 2;
16635 END IF;
16636 END IF;
16637
16638 IF g_UI_Context.control_layout=2 THEN
16639 IF i.seq_nbr <= g_Elements_Per_Column THEN
16640 l_col_number := 1;
16641 ELSIF i.seq_nbr > g_Elements_Per_Column AND
16642 i.seq_nbr <= 2*g_Elements_Per_Column THEN
16643 l_col_number := 2;
16644 ELSE
16645 l_col_number := 3;
16646 END IF;
16647 END IF;
16648
16649 IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16650 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
16651 p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16652 ELSE
16653 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
16654 p_parent_xml_node => p_parent_xml_node);
16655 END IF;
16656
16657 ELSE -- this is regular UI element
16658
16659 IF g_UI_Context.control_layout=1 THEN
16660 IF i.seq_nbr <= g_Elements_Per_Column THEN
16661 l_col_number := 1;
16662 ELSE
16663 l_col_number :=2;
16664 END IF;
16665 END IF;
16666
16667 IF g_UI_Context.control_layout=2 THEN
16668 IF i.seq_nbr <= g_Elements_Per_Column THEN
16669 l_col_number := 1;
16670 ELSIF i.seq_nbr > g_Elements_Per_Column AND
16671 i.seq_nbr <= 2*g_Elements_Per_Column THEN
16672 l_col_number := 2;
16673 ELSE
16674 l_col_number := 3;
16675 END IF;
16676 END IF;
16677
16678 IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16679
16680 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16681 p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16682 ELSE
16683
16684 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16685 p_parent_xml_node => p_parent_xml_node);
16686 END IF;
16687 END IF;
16688 END IF;
16689
16690 create_Next_XML_Level(i.element_id, l_new_xml_node);
16691
16692 END LOOP;
16693
16694 END create_Next_XML_Level;
16695
16696 BEGIN
16697
16698 init_Page_View_Counters();
16699
16700 l_col_number := 0;
16701
16702 IF g_UI_Context.control_layout IN(1,2) THEN
16703 l_col_number := 1;
16704 END IF;
16705
16706 SELECT *
16707 INTO l_page_ui_node
16708 FROM CZ_UI_PAGE_ELEMENTS
16709 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16710 page_id = p_page_id AND
16711 persistent_node_id = pagebase_persistent_node_id AND
16712 parent_element_id IS NULL AND
16713 element_type=G_UI_PAGE_NODE_TYPE AND
16714 deleted_flag = G_MARK_TO_ADD;
16715
16716 l_jrad_doc := get_JRAD_Name(p_template_id => l_page_ui_node.ctrl_template_id);
16717
16718 --
16719 -- parse document(template) which is going to be nested element
16720 --
16721 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16722
16723 IF xmldom.isNull(l_subtree_doc) THEN
16724 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16725 p_token_name => 'UI_TEMPLATE',
16726 p_token_value => l_jrad_doc,
16727 p_fatal_error => TRUE);
16728 RAISE WRONG_UI_TEMPLATE;
16729 END IF;
16730
16731 --
16732 -- get subdocument's root node
16733 --
16734 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16735
16736 --
16737 -- remove common attributes of container and subtree
16738 --
16739 remove_TopLevel_Attributes(l_xml_root_node);
16740
16741 --
16742 -- set Attributes for this subtree = Template
16743 --
16744 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
16745 p_ui_node => l_page_ui_node);
16746
16747 IF g_UI_Context.control_layout=0 THEN
16748 l_xml_uicontent_node := getUIContents(l_xml_root_node);
16749 ELSE
16750 l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, 1);
16751 END IF;
16752
16753 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
16754
16755 --
16756 -- we need to get length of array of child nodes
16757 -- to go through the array in loop
16758 --
16759 l_length := xmldom.getLength(l_child_nodes_tbl);
16760 FOR k IN 0..l_length-1
16761 LOOP
16762 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
16763
16764 l_curr_element_id := get_Attribute_Value(l_xml_node,
16765 G_ID_ATTRIBUTE);
16766 IF l_curr_element_id IS NOT NULL AND k > 0 THEN
16767 l_sub_element_id := get_Element_Id();
16768
16769 --
16770 -- set JRAD id of element
16771 --
16772 set_Attribute(l_xml_node,
16773 G_ID_ATTRIBUTE,
16774 REPLACE(REPLACE(l_curr_element_id||'_'||l_sub_element_id,'_czt','_czn'),'_czc','_czn'));
16775 END IF;
16776 END LOOP;
16777
16778 create_Next_XML_Level(l_page_ui_node.element_id,
16779 l_xml_uicontent_node);
16780
16781 --
16782 -- save XML page in JRAD repository
16783 --
16784 Save_Document(l_subtree_doc, p_jrad_doc);
16785
16786 --
16787 -- update page status and page_rev_nbr
16788 -- page_rev_nbr=1 because this is first creation
16789 -- mark elements and page as already refreshed
16790 --
16791 refresh_UI_Node_Marks(p_page_id => p_page_id,
16792 p_hmode => G_NEW_PAGE);
16793
16794 END create_UIXML_Page;
16795
16796 --
16797 -- handle UI XML pages of given UI
16798 -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16799 --
16800 PROCEDURE handle_JRAD_Page(p_page_id IN NUMBER,
16801 p_page_jrad_doc IN VARCHAR2,
16802 p_page_status IN VARCHAR2) IS
16803
16804 l_num_elements_on_page NUMBER;
16805
16806 BEGIN
16807
16808 IF g_UI_Context.control_layout IN(1,2) THEN
16809 SELECT COUNT(element_id) INTO g_Num_Elements_On_Page
16810 FROM CZ_UI_PAGE_ELEMENTS
16811 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16812 page_id=p_page_id AND
16813 (element_type IS NULL OR ctrl_template_id IS NOT NULL) AND
16814 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
16815 g_Elements_Per_Column := FLOOR(g_Num_Elements_On_Page/(g_UI_Context.control_layout+1));
16816 END IF;
16817
16818 --
16819 -- delete JRAD document associated with the page
16820 --
16821 IF p_page_status = G_MARK_TO_DELETE THEN
16822 delete_UIXML_Page(p_page_id, p_page_jrad_doc);
16823 END IF;
16824
16825 --
16826 -- create JRAD page
16827 --
16828 IF p_page_status = G_MARK_TO_ADD THEN
16829 create_UIXML_Page(p_page_id, p_page_jrad_doc);
16830 --
16831 -- translate the current JRAD page
16832 --
16833 translate_JRAD_Doc(p_page_jrad_doc);
16834 END IF;
16835
16836 --
16837 -- refresh JRAD page
16838 --
16839 IF p_page_status = G_MARK_TO_REFRESH THEN
16840
16841 refresh_UIXML_Page(p_page_id);
16842 --
16843 -- translate the current JRAD page
16844 --
16845 translate_JRAD_Doc(p_page_jrad_doc);
16846 END IF;
16847
16848 END handle_JRAD_Page;
16849
16850 --
16851 -- handle UI XML pages of given UI
16852 -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16853 --
16854 PROCEDURE handle_JRAD_Pages IS
16855 BEGIN
16856 FOR i IN (SELECT page_id, jrad_doc, deleted_flag
16857 FROM CZ_UI_PAGES
16858 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16859 deleted_flag <> G_YES_FLAG)
16860 LOOP
16861 IF i.deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_ADD,
16862 G_MARK_TO_REFRESH,G_MARK_TO_DEASSOCIATE) THEN
16863 --
16864 -- handle the current JRAD page
16865 --
16866 handle_JRAD_Page(p_page_id => i.page_id,
16867 p_page_jrad_doc => i.jrad_doc,
16868 p_page_status => i.deleted_flag);
16869 ELSE
16870 FOR n IN(SELECT G_YES_FLAG FROM CZ_UI_PAGE_ELEMENTS
16871 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=i.page_id AND
16872 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16873 deleted_flag=G_NO_FLAG AND rownum<2)
16874 LOOP
16875 --
16876 -- handle the current JRAD page
16877 --
16878 handle_JRAD_Page(p_page_id => i.page_id,
16879 p_page_jrad_doc => i.jrad_doc,
16880 p_page_status => G_MARK_TO_REFRESH);
16881
16882 END LOOP;
16883 END IF;
16884 END LOOP;
16885 END handle_JRAD_Pages;
16886
16887 -- Check if a PIR's target page reachable
16888 -- p_pagebase_expl_id,p_node_expl_id and p_node_persistent_id are a PIR element's
16889 -- pagebase_expl_id, model_ref_expl_id and persistent_node_id
16890 -- p_ui_def_id parent ui if the PIR's AMN is the child model's root node, child ui otherwise
16891 FUNCTION target_page_reachable(p_base_expl_id IN NUMBER,
16892 p_node_expl_id IN NUMBER,
16893 p_node_persistent_id IN NUMBER,
16894 p_ui_def_id IN NUMBER)
16895 RETURN BOOLEAN
16896 IS
16897 l_instantiable_flag cz_ps_nodes.INSTANTIABLE_FLAG%TYPE;
16898 BEGIN
16899 IF CZ_DEVELOPER_UTILS_PVT.in_boundary
16900 (p_base_expl_id, p_node_expl_id, p_node_persistent_id) = 0 THEN
16901 RETURN FALSE;
16902 ELSE
16903 SELECT instantiable_flag INTO l_instantiable_flag
16904 FROM cz_ps_nodes
16905 WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16906 WHERE ui_def_id = p_ui_def_id) AND
16907 persistent_node_id = p_node_persistent_id;
16908 RETURN (l_instantiable_flag IS NULL OR
16909 l_instantiable_flag NOT IN (G_OPTIONAL_INST_TYPE, G_MINMAX_INST_TYPE));
16910 END IF;
16911 END target_page_reachable;
16912
16913 FUNCTION get_page_name(p_ui_def_id IN NUMBER, p_page_id IN NUMBER)
16914 RETURN VARCHAR2
16915 IS
16916 l_name CZ_UI_PAGES.NAME%TYPE;
16917 BEGIN
16918 SELECT NVL(name, to_char(page_id)) INTO l_name
16919 FROM cz_ui_pages
16920 WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16921 RETURN l_name;
16922 END get_page_name;
16923
16924 PROCEDURE handle_page_include_regions
16925 IS
16926 l_ui_def_map number_tbl_type;
16927 l_ui_def_id NUMBER;
16928 l_pagebase_expl_id NUMBER;
16929 l_xmldoc xmldom.DOMDocument;
16930 l_dom_node xmldom.DOMNode;
16931 l_current_relative_path VARCHAR2(32000);
16932 l_new_relative_path VARCHAR2(32000);
16933 l_flag INTEGER;
16934 l_resave_doc_flag INTEGER;
16935 l_target_persistent_node_id NUMBER;
16936
16937 FUNCTION get_ui_name(p_ui_def_id IN NUMBER)
16938 RETURN VARCHAR2 IS
16939 l_name CZ_UI_DEFS.NAME%TYPE;
16940 BEGIN
16941 SELECT name INTO l_name
16942 FROM cz_ui_defs
16943 WHERE ui_def_id = p_ui_def_id;
16944 RETURN l_name;
16945 END;
16946
16947 FUNCTION get_model_name(p_ui_def_id IN NUMBER)
16948 RETURN VARCHAR2 IS
16949 l_name CZ_DEVL_PROJECTS.NAME%TYPE;
16950 BEGIN
16951 SELECT name INTO l_name
16952 FROM cz_devl_projects
16953 WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16954 WHERE ui_def_id = p_ui_def_id);
16955 RETURN l_name;
16956 END;
16957
16958 PROCEDURE remove_target_page(p_ui_def_id IN NUMBER
16959 ,p_page_id IN NUMBER
16960 ,p_element_id IN VARCHAR2)
16961 IS
16962 BEGIN
16963 UPDATE CZ_UI_PAGE_ELEMENTS
16964 SET target_page_ui_def_id = NULL, target_page_id = NULL
16965 WHERE ui_def_id = p_ui_def_id AND
16966 page_id = p_page_id AND element_id = p_element_id;
16967
16968 UPDATE CZ_UI_PAGES
16969 SET page_rev_nbr = page_rev_nbr + 1
16970 WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16971 END remove_target_page;
16972 --vsingava IM-ER
16973 PROCEDURE handle_page_include_region(p_element CZ_UI_PAGE_ELEMENTS%ROWTYPE,
16974 p_base_persistent_node_Id NUMBER,
16975 p_base_expl_Id NUMBER)
16976 IS
16977
16978 l_target_persistent_node_id NUMBER;
16979 l_name CZ_UI_PAGES.name%TYPE;
16980 l_page_Id CZ_UI_PAGES.page_Id%TYPE;
16981 l_ui_def_id NUMBER;
16982 l_instance_list_amn expl_node_persistent_id_pair;
16983 l_reachable BOOLEAN;
16984 l_base_expl_id NUMBER;
16985 l_base_persistent_node_id NUMBER;
16986
16987 BEGIN
16988 DEBUG('Now processing PIR ' || p_element.NAME);
16989 --RETURN;
16990 DEBUG('After return Now processing PIR ' || p_element.NAME);
16991 l_target_persistent_node_id := NULL;
16992 l_base_expl_id := p_base_expl_Id;
16993 l_base_persistent_node_id := p_base_persistent_node_Id;
16994
16995 BEGIN
16996 SELECT persistent_node_id, name, page_Id INTO l_target_persistent_node_id, l_name, l_page_Id
16997 FROM cz_ui_pages
16998 WHERE ui_def_id = p_element.target_page_ui_def_id AND
16999 page_id = p_element.target_page_id AND deleted_flag <> '1';
17000 EXCEPTION
17001 -- target page not exist
17002 WHEN NO_DATA_FOUND THEN
17003 -- l_target_persistent_node_id := NULL;
17004 remove_target_page(p_element.ui_def_id, p_element.page_id, p_element.element_id);
17005
17006 DEBUG('Removing PIR ' || p_element.NAME || ' because target page is deleted.');
17007
17008 IF p_element.ui_Def_Id = g_ui_context.ui_def_Id THEN
17009 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
17010 p_token_name1 => 'REGION_NAME',
17011 p_token_value1 => NVL(p_element.NAME, p_element.element_id),
17012 p_token_name2 => 'PAGE_NAME',
17013 p_token_value2 => get_page_name(p_element.ui_def_id,p_element.page_id),
17014 p_fatal_error => FALSE);
17015 RETURN;
17016 ELSE
17017 add_Error_Message(p_message_name => 'CZ_UIGEN_DEL_PAGEINCL_TARGET',
17018 p_token_name1 => 'PAGE_NAME',
17019 p_token_value1 => NVL(l_name, l_page_id),
17020 p_token_name2 => 'ELEMENT_NAME',
17021 p_token_value2 => p_element.name,
17022 p_token_name3 => 'REF_PAGE_NAME',
17023 p_token_value3 => get_page_name(p_element.ui_def_id,p_element.page_id),
17024 p_token_name4 => 'MODEL_NAME',
17025 p_token_value4 => get_model_name(p_element.ui_def_id),
17026 p_token_name5 => 'UI_NAME',
17027 p_token_value5 => get_ui_name(p_element.ui_def_id),
17028 p_fatal_error => FALSE);
17029 RETURN;
17030 END IF;
17031 END;
17032
17033 -- target page exists. is it reachable ?
17034 IF l_target_persistent_node_id IS NOT NULL THEN
17035
17036 IF p_element.persistent_node_id = l_target_persistent_node_id THEN
17037 l_ui_def_id := p_element.target_page_ui_def_id;
17038 ELSE
17039 l_ui_def_id := p_element.ui_def_id; -- AMN is the root node of child model
17040 END IF;
17041
17042 IF NOT target_page_reachable(p_base_expl_Id,
17043 p_element.model_ref_expl_id,
17044 p_element.persistent_node_id,
17045 l_ui_def_id) THEN
17046 DEBUG('PIR ' || p_element.NAME || ' not reachable from page base');
17047 l_reachable := FALSE;
17048 l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, p_element.element_id);
17049
17050 DEBUG('before l_base_expl_id= ' || l_base_expl_id);
17051 DEBUG('before l_base_persistent_node_id= ' || l_base_persistent_node_id);
17052
17053 l_instance_list_amn := getEnclosingInstanceListAMN(p_element, l_dom_node);
17054
17055
17056
17057 IF l_instance_list_amn.persistent_node_Id IS NOT NULL THEN
17058 DEBUG('PIR ' || p_element.NAME || ' enclosed in an Instance List');
17059
17060 l_base_expl_id := l_instance_list_amn.expl_node_id;
17061 l_base_persistent_node_id := l_instance_list_amn.persistent_node_id;
17062
17063 DEBUG('after l_base_expl_id= ' || l_base_expl_id);
17064 DEBUG('after l_base_persistent_node_id= ' || l_base_persistent_node_id);
17065
17066 DEBUG('Enclosing Instance List AMN = (' || l_base_expl_id || ', ' || l_base_persistent_node_id || ')');
17067
17068 -- The PIR is under and Instance list region. So the PIR could still be reachable
17069 IF target_page_reachable(l_base_expl_id,
17070 p_element.model_ref_expl_id,
17071 p_element.persistent_node_id,
17072 l_ui_def_id) THEN
17073 DEBUG('PIR ' || p_element.NAME || ' reachable from instance list AMN');
17074 l_reachable := TRUE;
17075 END IF;
17076 END IF;
17077
17078 IF NOT l_reachable THEN
17079 DEBUG('Removing PIR ' || p_element.NAME || ' because target page is not reachable.');
17080 remove_target_page(p_element.ui_def_id, p_element.page_id, p_element.element_id);
17081
17082
17083 IF p_element.ui_Def_Id = g_ui_context.ui_def_Id THEN
17084
17085 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
17086 p_token_name1 => 'REGION_NAME',
17087 p_token_value1 => NVL(p_element.NAME, p_element.element_id),
17088 p_token_name2 => 'PAGE_NAME',
17089 p_token_value2 => get_page_name(p_element.ui_def_id,p_element.page_id),
17090 p_fatal_error => FALSE);
17091 RETURN;
17092 ELSE
17093 add_Error_Message(p_message_name => 'CZ_UIGEN_REFUI_TARGET_PG_REACH',
17094 p_token_name1 => 'PAGE_NAME', -- name of the target page
17095 p_token_value1 => NVL(l_name, l_page_id),
17096 p_token_name2 => 'ELEMENT_NAME', -- name of the PIR element
17097 p_token_value2 => p_element.name,
17098 p_token_name3 => 'REF_PAGE_NAME', -- page that contains the PIR
17099 p_token_value3 => get_page_name(p_element.ui_def_id, p_element.page_id),
17100 p_token_name4 => 'UI_NAME',
17101 p_token_value4 => get_ui_name(p_element.ui_def_id),
17102 p_token_name5 => 'MODEL_NAME',
17103 p_token_value5 => get_model_name(p_element.ui_def_id),
17104 p_fatal_error => FALSE);
17105 RETURN;
17106 END IF;
17107 END IF; -- not reachable
17108 END IF;
17109 END IF;
17110
17111 l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, p_element.element_id);
17112
17113 l_current_relative_path := get_attribute_value(l_dom_node, G_USER_ATTRIBUTE1_NAME);
17114 DEBUG('Current Relative path=' || l_current_relative_path);
17115 DEBUG('l_base_expl_id= ' || l_base_expl_id);
17116 DEBUG('l_base_persistent_node_id= ' || l_base_persistent_node_id);
17117 DEBUG('p_element.model_ref_expl_id= ' || p_element.model_ref_expl_id);
17118 DEBUG('p_element.persistent_node_id= ' || p_element.persistent_node_id);
17119
17120 l_new_relative_path := 'model_path=' || CZ_DEVELOPER_UTILS_PVT.runtime_relative_path
17121 (l_base_expl_id,
17122 l_base_persistent_node_id,
17123 p_element.model_ref_expl_id,
17124 p_element.persistent_node_id);
17125 DEBUG('New Relative path=' || l_new_relative_path);
17126 IF l_current_relative_path <> l_new_relative_path THEN
17127 IF l_ui_def_id = g_UI_Context.ui_def_id THEN
17128 set_attribute(l_dom_node,
17129 G_USER_ATTRIBUTE1_NAME,
17130 l_new_relative_path);
17131 l_resave_doc_flag := 1; -- save doc
17132 ELSE
17133 UPDATE cz_ui_defs
17134 SET ui_status = 'NEED_REFRESH'
17135 WHERE ui_def_id = l_ui_def_id;
17136 l_flag := 0; -- goto next ui
17137 END IF;
17138 END IF;
17139
17140 END handle_page_include_region;
17141
17142 BEGIN
17143
17144
17145 l_ui_def_map(g_UI_Context.ui_def_id) := g_UI_Context.ui_def_id;
17146
17147 --
17148 -- Find all Page Include Regions which point to UI pages in the current UI
17149 --
17150 FOR i IN (SELECT a.deleted_flag AS page_deleted_flag, a.page_id AS page_id,
17151 a.name AS name, a.persistent_node_id AS target_persistent_node_id,
17152 b.ui_def_id AS ref_ui_def_id, b.page_id AS ref_page_id,
17153 b.name AS ref_element_name, b.element_id AS ref_element_id,
17154 b.persistent_node_id as persistent_node_id,
17155 b.model_ref_expl_id as expl_node_id
17156 FROM CZ_UI_PAGES a, CZ_UI_PAGE_ELEMENTS b
17157 WHERE a.ui_def_id = g_UI_Context.ui_def_id AND
17158 b.element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17159 b.deleted_flag = G_NO_FLAG AND
17160 a.ui_def_id = b.target_page_ui_def_id AND
17161 a.page_id = b.target_page_id)
17162 LOOP
17163 l_ui_def_map(i.ref_ui_def_id) := i.ref_ui_def_id;
17164 END LOOP;
17165
17166 -- Recalculate relative paths for Page Include Regions. If the newly calculated path
17167 -- of a PIR element is different from the current one in xml doc, update the path
17168 -- in xml doc if the UI is the one in processing, mark the UI as must be refreshed
17169 -- if it is not the UI in refreshing.
17170 l_ui_def_id := l_ui_def_map.FIRST;
17171 WHILE l_ui_def_id IS NOT NULL
17172 LOOP
17173 l_flag := 1;
17174 FOR i IN (SELECT page_id, jrad_doc, pagebase_expl_node_id, persistent_node_id
17175 FROM CZ_UI_PAGES pg
17176 WHERE ui_def_id = l_ui_def_id AND deleted_flag = '0'
17177 AND EXISTS (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
17178 WHERE ui_def_id = pg.ui_def_id AND page_id = pg.page_id AND
17179 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17180 target_page_ui_def_id IS NOT NULL AND
17181 target_page_id IS NOT NULL AND deleted_flag='0'))
17182 LOOP
17183 EXIT WHEN l_flag = 0;
17184 l_xmldoc := parse_JRAD_Document(i.jrad_doc);
17185 l_resave_doc_flag := 0;
17186
17187 FOR j IN (SELECT * FROM CZ_UI_PAGE_ELEMENTS
17188 WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id AND
17189 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17190 deleted_flag='0')
17191 LOOP
17192 EXIT WHEN l_flag <> 1;
17193 handle_page_include_region(j, i.persistent_node_id, i.pagebase_expl_node_id);
17194 END LOOP;
17195
17196 IF l_resave_doc_flag = 1 THEN
17197 UPDATE CZ_UI_PAGES
17198 SET page_rev_nbr = page_rev_nbr + 1
17199 WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id;
17200
17201 save_document(l_xmldoc, i.jrad_doc);
17202 END IF;
17203 END LOOP;
17204
17205 l_ui_def_id := l_ui_def_map.NEXT(l_ui_def_id);
17206 END LOOP;
17207 END handle_page_include_regions;
17208
17209 --
17210 -- main internal procedure to create/refresh UI
17211 --
17212 PROCEDURE construct_Single_UI(p_ui_def_id IN NUMBER,
17213 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17214 l_locked_entities_tbl cz_security_pvt.number_type_tbl;
17215 l_templates_id_tbl number_tbl_type;
17216 BEGIN
17217
17218 --
17219 -- set current UI context
17220 --
17221 set_UI_Context(p_ui_def_id);
17222
17223 --
17224 -- lock global UI Templates which are used by inline copy
17225 --
17226 lock_UI_Templates(p_model_id => g_UI_Context.devl_project_id,
17227 p_ui_def_id => g_UI_Context.from_master_template_id);
17228
17229 IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_STRUCTURE THEN
17230
17231 set_UI_Global_Entities();
17232
17233 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
17234
17235 -- populate cache
17236 populate_Cache;
17237
17238 -- update the UI_TIMESTAMP_REFRESH date on the UI
17239 UPDATE cz_ui_defs
17240 SET UI_TIMESTAMP_REFRESH = SYSDATE
17241 WHERE ui_def_id = p_ui_def_id;
17242
17243 -- populate CZ UI structures first
17244 populate_UI_Structures();
17245
17246 END IF;
17247
17248 END IF;
17249
17250 IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_XML THEN
17251 --
17252 -- generate/refresh UI Pages of current UI
17253 --
17254 handle_JRAD_Pages();
17255 END IF;
17256
17257 unlock_UI_Templates();
17258
17259 --
17260 -- mark UI as processed
17261 --
17262 mark_UI(p_ui_def_id, G_PROCESSED_UI_STATUS);
17263
17264 EXCEPTION
17265 WHEN OTHERS THEN
17266 DEBUG(SQLERRM);
17267 --
17268 -- unlock global UI Templates which are used by inline copy
17269 --
17270 unlock_UI_Templates();
17271 RAISE;
17272 END construct_Single_UI;
17273
17274 --
17275 -- internal procedure to create/refresh UI
17276 --
17277 PROCEDURE handle_UIs(p_ui_def_id IN NUMBER,
17278 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17279 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
17280 l_ui_def_id NUMBER;
17281 l_ref_persistent_node_id NUMBER;
17282 l_init_ui_def_id NUMBER;
17283 BEGIN
17284
17285 DEBUG('construct Single UI : ',p_ui_def_id);
17286
17287 --
17288 -- handle root UI
17289 --
17290 construct_Single_UI(p_ui_def_id, p_handling_mode);
17291
17292 validate_UI_Conditions(p_ui_def_id => p_ui_def_id,
17293 p_is_parser_open => G_YES_FLAG);
17294
17295 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_YES_FLAG
17296 OR NVL(g_UI_Context.empty_ui_flag,G_NO_FLAG)=G_YES_FLAG THEN
17297
17298 FOR i IN(SELECT * FROM CZ_MODEL_REF_EXPLS
17299 WHERE model_id=g_UI_Context.devl_project_id AND
17300 ps_node_type=G_REFERENCE_TYPE AND deleted_flag='0')
17301 LOOP
17302 BEGIN
17303 SELECT NVL(MAX(ui_def_id),0) INTO l_ui_def_id
17304 FROM CZ_UI_DEFS
17305 WHERE devl_project_id=i.component_id AND
17306 ui_style=G_OA_STYLE_UI AND
17307 deleted_flag='0';
17308
17309 IF l_ui_def_id=0 THEN
17310 l_init_ui_def_id := g_UI_Context.ui_def_id;
17311 l_target_ui_def_node := create_UI_Context(p_model_id => i.component_id,
17312 p_master_template_id => g_UI_Context.from_master_template_id,
17313 p_show_all_nodes => g_UI_Context.show_all_nodes_flag,
17314 p_create_empty_ui => '1');
17315 l_ui_def_id := l_target_ui_def_node.ui_def_id;
17316 set_UI_Context(l_init_ui_def_id);
17317 END IF;
17318
17319 SELECT persistent_node_id INTO l_ref_persistent_node_id
17320 FROM CZ_PS_NODES
17321 WHERE devl_project_id=g_UI_Context.devl_project_id AND
17322 ps_node_id=i.referring_node_id AND
17323 deleted_flag=G_NO_FLAG;
17324
17325 BEGIN
17326 INSERT INTO CZ_UI_REFS
17327 (ui_def_id,
17328 ref_ui_def_id,
17329 ref_persistent_node_id,
17330 model_ref_expl_id,
17331 deleted_flag)
17332 VALUES
17333 (g_UI_Context.ui_def_id,
17334 l_ui_def_id,
17335 l_ref_persistent_node_id,
17336 i.model_ref_expl_id,
17337 G_NO_FLAG);
17338 EXCEPTION
17339 WHEN OTHERS THEN
17340 NULL;
17341 END;
17342 EXCEPTION
17343 WHEN OTHERS THEN
17344 NULL;
17345 END;
17346 END LOOP;
17347
17348 END IF;
17349
17350 --
17351 -- table CZ_UI_REFS is populated in procedure construct_Single_UI()
17352 -- ( in this approach UI can have a more referenced UIs than Model Tree )
17353 --
17354 FOR i IN (SELECT DISTINCT ref_ui_def_id
17355 FROM CZ_UI_REFS
17356 WHERE ui_def_id = p_ui_def_id AND
17357 deleted_flag = G_NO_FLAG)
17358 LOOP
17359 --
17360 -- construct UIs of referenced models
17361 --
17362 handle_UIs(i.ref_ui_def_id, p_handling_mode);
17363 END LOOP;
17364
17365 END handle_UIs;
17366
17367 --
17368 -- main internal procedure to create/refresh UI
17369 -- this procedure is invoked only once during UI Generation/UI Refresh
17370 --
17371 PROCEDURE construct_UI(p_ui_def_id IN NUMBER,
17372 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
17373 BEGIN
17374 --
17375 -- initialize XML parser
17376 --
17377 OPEN_Parser();
17378 --
17379 -- handle root UI and all referenced UIs
17380 --
17381 handle_UIs(p_ui_def_id, p_handling_mode);
17382 --
17383 -- close XML parser
17384 --
17385 CLOSE_Parser();
17386
17387 set_UI_Context(p_ui_def_id);
17388
17389 OPEN_Parser();
17390 handle_page_include_regions;
17391 CLOSE_Parser();
17392 END construct_UI;
17393
17394 --
17395 -- create a new UI for a given model
17396 -- Parameters :
17397 -- p_model_id - identifies Model
17398 -- p_master_template_id - identifies UI Master Template
17399 -- px_ui_def_id - Id of a new UI
17400 -- x_return_status - status string
17401 -- x_msg_count - number of error messages
17402 -- x_msg_data - string which contains error messages
17403 --
17404 PROCEDURE create_UI(p_model_id IN NUMBER, -- identifies Model
17405 p_master_template_id IN NUMBER DEFAULT NULL, -- identifies UI Master Template
17406 p_ui_name IN VARCHAR2 DEFAULT NULL,
17407 p_description IN VARCHAR2 DEFAULT NULL,
17408 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
17409 p_create_empty_ui IN VARCHAR2 DEFAULT NULL,
17410 x_ui_def_id OUT NOCOPY NUMBER, -- Id of a new UI
17411 x_return_status OUT NOCOPY VARCHAR2,
17412 x_msg_count OUT NOCOPY NUMBER,
17413 x_msg_data OUT NOCOPY VARCHAR2) IS
17414
17415 l_ui_context CZ_UI_DEFS%ROWTYPE;
17416 l_locked_models cz_security_pvt.number_type_tbl;
17417
17418 BEGIN
17419
17420 --
17421 -- initialize FND variables/packages
17422 --
17423 Initialize(x_return_status,x_msg_count,x_msg_data);
17424
17425 --
17426 -- get UI context
17427 -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
17428 --
17429 l_ui_context := create_UI_Context(p_model_id => p_model_id,
17430 p_master_template_id => p_master_template_id,
17431 p_ui_name => p_ui_name,
17432 p_description => p_description,
17433 p_show_all_nodes => p_show_all_nodes,
17434 p_create_empty_ui => p_create_empty_ui);
17435 --
17436 -- set ui_def_id of root UI ( UI that is generated for model with model_id=p_model_id )
17437 --
17438 x_ui_def_id := l_ui_context.ui_def_id;
17439
17440 lock_Model(p_model_id, l_locked_models);
17441
17442 --
17443 -- generate a new UI for the current UI context
17444 --
17445 construct_UI(l_ui_context.ui_def_id);
17446
17447 IF p_create_empty_ui IS NOT NULL AND p_create_empty_ui = '1' THEN
17448
17449 UPDATE CZ_UI_DEFS
17450 SET suppress_refresh_flag = G_NO_FLAG
17451 WHERE ui_def_id = x_ui_def_id and deleted_flag = G_NO_FLAG;
17452
17453 UPDATE CZ_UI_DEFS
17454 SET suppress_refresh_flag = G_NO_FLAG
17455 WHERE ui_def_Id IN (
17456 SELECT ref_ui_def_Id
17457 FROM CZ_UI_REFS
17458 START WITH ui_def_id = x_ui_def_id
17459 AND deleted_flag = G_NO_FLAG
17460 CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG)
17461 AND deleted_flag = G_NO_FLAG;
17462 END IF;
17463
17464 IF g_MSG_COUNT>0 THEN
17465 x_return_status := G_RETURN_STATUS;
17466 x_msg_count := g_MSG_COUNT;
17467 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17468 END IF;
17469
17470 unlock_model(l_locked_models);
17471
17472 EXCEPTION
17473 WHEN FAILED_TO_LOCK_MODEL THEN
17474 x_return_status := FND_API.G_RET_STS_ERROR;
17475 x_msg_count := 1;
17476 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17477 DEBUG(x_msg_data);
17478 WHEN WRONG_UI_TEMPLATE THEN
17479 x_return_status := FND_API.G_RET_STS_ERROR;
17480 x_msg_count := g_MSG_COUNT;
17481 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17482 DEBUG(x_msg_data);
17483 WHEN WRONG_EXT_PS_TYPE THEN
17484 x_return_status := FND_API.G_RET_STS_ERROR;
17485 x_msg_count := 1;
17486 x_msg_data := 'Internal Error : extended ps node type of node with ps_node_id='||
17487 TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
17488 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17489 DEBUG(x_msg_data);
17490 WHEN UNREACH_UI_NODE THEN
17491 x_return_status := FND_API.G_RET_STS_ERROR;
17492 x_msg_count := g_MSG_COUNT;
17493 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17494 DEBUG(x_msg_data);
17495 WHEN OTHERS THEN
17496 x_return_status := FND_API.G_RET_STS_ERROR;
17497 x_msg_count := g_MSG_COUNT;
17498 IF g_MSG_COUNT>0 THEN
17499 x_msg_count := g_MSG_COUNT;
17500 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17501 ELSE
17502 x_msg_count := 1;
17503 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
17504 END IF;
17505 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17506 DEBUG(x_msg_data);
17507 END create_UI;
17508
17509 --bug14029835, Procedure added for log messages
17510 PROCEDURE log_message( p_caller IN VARCHAR2 DEFAULT NULL,
17511 p_message IN VARCHAR2
17512 ) IS
17513 BEGIN
17514
17515 INSERT INTO CZ_DB_LOGS( LOGTIME , CALLER, MESSAGE )
17516 VALUES ( SYSDATE , p_caller , p_message );
17517
17518 EXCEPTION
17519 WHEN OTHERS THEN
17520 NULL;
17521 END log_message;
17522
17523 --bug14029835 , Added procedure that checks the data in cz_ui_page_elements, cz_ui_pages
17524 -- cz_ui_page_refs, cz_ui_page_sets , cz_ui_actions with cz_model_ref_Expls table.
17525 -- Logically deletes the invalid elements.
17526 PROCEDURE delete_Invalid_UI_Elements(p_ui_def_id IN NUMBER) IS
17527
17528 BEGIN
17529
17530 FOR uiDefCur IN (SELECT ref_ui_def_id FROM (SELECT DISTINCT ref_ui_def_id
17531 FROM CZ_UI_REFS
17532 START WITH ui_def_id = p_ui_def_id AND deleted_flag = G_NO_FLAG
17533 CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG AND PRIOR deleted_flag = G_NO_FLAG
17534 UNION SELECT ui_def_id FROM CZ_UI_DEFS uiDef WHERE uiDef.ui_def_id = p_ui_def_id AND uiDef.ui_style = G_OA_STYLE_UI AND deleted_flag = G_NO_FLAG )
17535
17536 )
17537 LOOP
17538
17539
17540 -- Verify for cz_ui_pages.pagebase_expl_node_id
17541 FOR uiPages IN (SELECT uipg.page_id,uipg.pagebase_expl_node_id FROM CZ_UI_PAGES uipg
17542 WHERE deleted_flag = G_NO_FLAG AND ui_def_id = uiDefCur.ref_ui_def_id
17543 AND uipg.pagebase_expl_node_id IS NOT NULL
17544 AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17545 WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = uipg.pagebase_expl_node_id
17546 )
17547 )
17548 LOOP
17549
17550 log_message( 'UI_REFRESH' , 'UPDATE deleted_flag of CZ_UI_PAGES where pagebase_expl_node_id : ' || uiPages.pagebase_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17551
17552 UPDATE CZ_UI_PAGES
17553 SET deleted_flag = G_YES_FLAG
17554 WHERE pagebase_expl_node_id = uiPages.pagebase_expl_node_id
17555 AND page_id = uiPages.page_id
17556 AND ui_def_id = uiDefCur.ref_ui_def_id;
17557 END LOOP; --uiPages
17558
17559
17560 -- Verify for cz_ui_page_refs.target_expl_node_id
17561 FOR pageRefs IN (SELECT pgref.page_ref_id,pgref.target_expl_node_id FROM CZ_UI_PAGE_REFS pgref
17562 WHERE pgref.deleted_flag = G_NO_FLAG AND pgref.ui_def_id = uiDefCur.ref_ui_def_id
17563 AND pgref.target_expl_node_id IS NOT NULL
17564 AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17565 WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pgref.target_expl_node_id
17566 )
17567 )
17568 LOOP
17569
17570 log_message( 'UI_REFRESH' , 'UPDATE deleted_flag of CZ_UI_PAGE_REFS where target_expl_node_id : ' || pageRefs.target_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17571
17572 UPDATE CZ_UI_PAGE_REFS
17573 SET deleted_flag = G_YES_FLAG
17574 WHERE target_expl_node_id = pageRefs.target_expl_node_id
17575 AND page_ref_id = pageRefs.page_ref_id
17576 AND ui_def_id = uiDefCur.ref_ui_def_id;
17577 END LOOP; --pageRefs
17578
17579
17580 -- Verify for cz_ui_page_sets.pagebase_expl_node_id
17581 FOR pageSets IN (SELECT pgset.page_set_id,pgset.pagebase_expl_node_id FROM CZ_UI_PAGE_SETS pgset
17582 WHERE pgset.deleted_flag = G_NO_FLAG AND pgset.ui_def_id = uiDefCur.ref_ui_def_id
17583 AND pgset.pagebase_expl_node_id IS NOT NULL
17584 AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17585 WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pgset.pagebase_expl_node_id
17586 )
17587 )
17588 LOOP
17589
17590 log_message( 'UI_REFRESH' , 'UPDATE deleted_flag of CZ_UI_PAGE_SETS where pagebase_expl_node_id : ' || pageSets.pagebase_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17591
17592 UPDATE CZ_UI_PAGE_SETS
17593 SET deleted_flag = G_YES_FLAG
17594 WHERE pagebase_expl_node_id = pageSets.pagebase_expl_node_id
17595 AND page_set_id = pageSets.page_set_id
17596 AND ui_def_id = uiDefCur.ref_ui_def_id;
17597 END LOOP; --pageRefs
17598
17599 -- Verify for cz_ui_page_elements.model_ref_expl_id
17600 FOR uiPges IN (SELECT element_id,model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS pge
17601 WHERE pge.deleted_flag = G_NO_FLAG AND pge.ui_def_id = uiDefCur.ref_ui_def_id
17602 AND pge.model_ref_expl_id IS NOT NULL
17603 AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17604 WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = pge.model_ref_expl_id
17605 )
17606 )
17607 LOOP
17608
17609 log_message( 'UI_REFRESH' , 'UPDATE deleted_flag of CZ_UI_PAGE_ELEMENTS where model_ref_expl_id : ' || uiPges.model_ref_expl_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17610
17611 UPDATE CZ_UI_PAGE_ELEMENTS
17612 SET deleted_flag = G_YES_FLAG
17613 WHERE model_ref_expl_id = uiPges.model_ref_expl_id
17614 AND element_id = uiPges.element_id
17615 AND ui_def_id = uiDefCur.ref_ui_def_id;
17616
17617 END LOOP; --uiPges
17618
17619
17620 -- Verify for cz_ui_actions.target_expl_node_id
17621 FOR uiActs IN (SELECT uiact.ui_action_id,uiact.target_expl_node_id FROM CZ_UI_ACTIONS uiact
17622 WHERE uiact.deleted_flag = G_NO_FLAG AND uiact.ui_def_id = uiDefCur.ref_ui_def_id
17623 AND uiact.target_expl_node_id IS NOT NULL
17624 AND NOT EXISTS (SELECT 1 FROM CZ_MODEL_REF_EXPLS
17625 WHERE deleted_flag = G_NO_FLAG AND model_ref_expl_id = uiact.target_expl_node_id
17626 )
17627 )
17628 LOOP
17629
17630
17631 log_message( 'UI_REFRESH' , 'UPDATE deleted_flag of CZ_UI_ACTIONS where target_expl_node_id : ' || uiActs.target_expl_node_id || ' and ui_def_id : '|| uiDefCur.ref_ui_def_id);
17632
17633 UPDATE CZ_UI_ACTIONS
17634 SET deleted_flag = G_YES_FLAG
17635 WHERE target_expl_node_id = uiActs.target_expl_node_id
17636 AND ui_action_id = uiActs.ui_action_id
17637 AND ui_def_id = uiDefCur.ref_ui_def_id;
17638 END LOOP; --uiActs
17639
17640 END LOOP; -- uiDefCur
17641
17642 END delete_Invalid_UI_Elements;
17643
17644 --
17645 -- refresh a given UI
17646 -- Parameters :
17647 -- p_ui_def_id - identifies UI
17648 -- x_return_status - status string
17649 -- x_msg_count - number of error messages
17650 -- x_msg_data - string which contains error messages
17651 --
17652 PROCEDURE refresh_UI(p_ui_def_id IN NUMBER,
17653 x_return_status OUT NOCOPY VARCHAR2,
17654 x_msg_count OUT NOCOPY NUMBER,
17655 x_msg_data OUT NOCOPY VARCHAR2) IS
17656
17657 l_ui_context CZ_UI_DEFS%ROWTYPE;
17658 BEGIN
17659 --
17660 -- initialize FND variables/packages
17661 --
17662 Initialize(x_return_status,x_msg_count,x_msg_data);
17663
17664 --
17665 -- get UI context
17666 --
17667 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
17668
17669 --
17670 -- if p_create_empty_ui = G_NO_FLAG ( ='1') then do generate/refresh UI
17671 --
17672 IF NVL(l_ui_context.suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
17673
17674 -- refresh model_path for all nodes on refreshed UI page
17675 g_REFRESH_MODEL_PATH := TRUE;
17676
17677 --
17678 -- refresh UI
17679 --
17680 construct_UI(p_ui_def_id);
17681
17682 --bug14029835, procedure which deletes the invalid ui elements in the UI related tables
17683 delete_Invalid_UI_Elements(p_ui_def_id);
17684 END IF;
17685
17686 IF g_MSG_COUNT>0 THEN
17687 x_return_status := G_RETURN_STATUS;
17688 x_msg_count := g_MSG_COUNT;
17689 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17690 END IF;
17691
17692 EXCEPTION
17693 WHEN FAILED_TO_LOCK_MODEL THEN
17694 x_return_status := FND_API.G_RET_STS_ERROR;
17695 x_msg_count := 1;
17696 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17697 DEBUG(x_msg_data);
17698 WHEN WRONG_UI_TO_REFRESH THEN
17699 x_return_status := FND_API.G_RET_STS_ERROR;
17700 x_msg_count := 1;
17701 x_msg_data := 'Internal Error : Wrong UI to refresh.';
17702 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
17703 DEBUG(x_msg_data);
17704 WHEN WRONG_UI_TEMPLATE THEN
17705 x_return_status := FND_API.G_RET_STS_ERROR;
17706 x_msg_count := g_MSG_COUNT;
17707 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17708 DEBUG(x_msg_data);
17709 WHEN WRONG_EXT_PS_TYPE THEN
17710 x_return_status := FND_API.G_RET_STS_ERROR;
17711 x_msg_count := 1;
17712 x_msg_data := 'Internal Error : extended ps node type of node with ps_node_id='||
17713 TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
17714 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
17715 DEBUG(x_msg_data);
17716 WHEN UNREACH_UI_NODE THEN
17717 x_return_status := FND_API.G_RET_STS_ERROR;
17718 x_msg_count := g_MSG_COUNT;
17719 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17720 DEBUG(x_msg_data);
17721 WHEN OTHERS THEN
17722 x_return_status := FND_API.G_RET_STS_ERROR;
17723 x_msg_count := g_MSG_COUNT;
17724 IF g_MSG_COUNT>0 THEN
17725 x_msg_count := g_MSG_COUNT;
17726 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
17727 ELSE
17728 x_msg_count := 1;
17729 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
17730 END IF;
17731 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
17732 DEBUG(x_msg_data);
17733 END refresh_UI;
17734
17735 --
17736 -- delete records which correspond with user attributes
17737 --
17738 PROCEDURE delete_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
17739 p_ui_def_id NUMBER,
17740 p_template_id NUMBER DEFAULT NULL,
17741 p_template_ui_def_id NUMBER DEFAULT NULL) IS
17742
17743 l_user_attribute_value VARCHAR2(4000);
17744 l_persistent_id NUMBER;
17745
17746 BEGIN
17747
17748 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17749 IF l_user_attribute_value IS NOT NULL THEN
17750
17751 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,'actionId'));
17752 IF l_persistent_id IS NOT NULL THEN
17753 UPDATE CZ_UI_ACTIONS
17754 SET deleted_flag=G_YES_FLAG
17755 WHERE ui_def_id=p_ui_def_id AND
17756 ui_action_id=l_persistent_id AND
17757 seeded_flag=G_NO_FLAG;
17758
17759 IF p_template_id IS NOT NULL THEN
17760 UPDATE CZ_UI_TEMPLATE_ELEMENTS
17761 SET deleted_flag=G_YES_FLAG
17762 WHERE template_id=p_template_id AND
17763 ui_def_id=p_template_ui_def_id AND
17764 element_id=l_persistent_id AND
17765 element_type IN(552) AND
17766 seeded_flag=G_NO_FLAG AND
17767 deleted_flag=G_NO_FLAG;
17768 END IF;
17769 END IF;
17770
17771 FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
17772 LOOP
17773 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_condition_attr_tbl(i)));
17774 IF l_persistent_id IS NOT NULL THEN
17775 UPDATE CZ_RULES
17776 SET deleted_flag = G_YES_FLAG
17777 WHERE persistent_rule_id = l_persistent_id
17778 AND ui_def_id = p_ui_def_id
17779 AND seeded_flag = G_NO_FLAG;
17780
17781 IF p_template_id IS NOT NULL THEN
17782 UPDATE CZ_UI_TEMPLATE_ELEMENTS
17783 SET deleted_flag=G_YES_FLAG
17784 WHERE template_id=p_template_id AND
17785 ui_def_id=p_template_ui_def_id AND
17786 element_id=l_persistent_id AND
17787 element_type IN(33,34) AND
17788 seeded_flag=G_NO_FLAG AND
17789 deleted_flag=G_NO_FLAG;
17790 END IF;
17791 END IF;
17792 END LOOP;
17793
17794 FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
17795 LOOP
17796 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_caption_attr_tbl(i)));
17797 IF l_persistent_id IS NOT NULL THEN
17798 UPDATE CZ_LOCALIZED_TEXTS
17799 SET deleted_flag=G_YES_FLAG
17800 WHERE persistent_intl_text_id=l_persistent_id AND
17801 ui_def_id=p_ui_def_id AND
17802 seeded_flag=G_NO_FLAG;
17803
17804 IF p_template_id IS NOT NULL THEN
17805 UPDATE CZ_UI_TEMPLATE_ELEMENTS
17806 SET deleted_flag=G_YES_FLAG
17807 WHERE template_id=p_template_id AND
17808 ui_def_id=p_template_ui_def_id AND
17809 element_id=l_persistent_id AND
17810 element_type IN(8) AND
17811 seeded_flag=G_NO_FLAG AND
17812 deleted_flag=G_NO_FLAG;
17813 END IF;
17814 END IF;
17815 END LOOP;
17816
17817 END IF;
17818 END delete_User_Attr_For_Node;
17819
17820 PROCEDURE copy_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
17821 p_source_ui_def_id NUMBER,
17822 p_target_ui_def_id NUMBER,
17823 p_source_ui_page_id NUMBER,
17824 p_target_ui_page_id NUMBER,
17825 p_target_model_path VARCHAR2,
17826 p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
17827
17828 l_user_attribute_value VARCHAR2(4000);
17829 l_new_element_id VARCHAR2(255);
17830 l_target_model_path VARCHAR2(4000);
17831 l_name VARCHAR2(4000);
17832 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
17833 l_model_ref_expl_id NUMBER;
17834 l_num_copy NUMBER;
17835 l_id NUMBER;
17836
17837 BEGIN
17838
17839 set_UI_Context(p_target_ui_def_id);
17840
17841 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17842
17843 IF l_user_attribute_value IS NOT NULL THEN
17844 BEGIN
17845 l_id := TO_NUMBER(l_user_attribute_value);
17846
17847 l_new_element_id := p_new_element_id_arr_tbl(l_id);
17848
17849 set_Attribute(p_xml_node,
17850 G_ID_ATTRIBUTE,
17851 l_new_element_id);
17852
17853 g_handled_attr_id_tbl(l_new_element_id) := l_id;
17854
17855 EXCEPTION
17856 WHEN OTHERS THEN
17857 DEBUG('copy_User_Attr_For_Node() : '||SQLERRM);
17858 IF NOT(g_handled_attr_id_tbl.EXISTS(l_id)) THEN
17859 set_Attribute(p_xml_node,
17860 G_ID_ATTRIBUTE,
17861 l_user_attribute_value||'_'||get_Element_Id());
17862 END IF;
17863 END;
17864
17865 END IF;
17866
17867 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17868
17869 IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17870
17871 SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17872 WHERE ui_def_id=p_target_ui_def_id AND
17873 page_id=p_target_ui_page_id AND
17874 element_id=l_new_element_id;
17875 SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17876 WHERE ui_def_id=l_ui_node.ui_def_id AND page_id=l_ui_node.page_id AND
17877 parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17878 l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17879 p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17880 p_node_expl_id => l_ui_node.model_ref_expl_id,
17881 p_node_pers_id => l_ui_node.persistent_node_id);
17882 IF l_target_model_path IS NULL THEN
17883 l_target_model_path := '.';
17884 END IF;
17885
17886 set_Attribute(p_xml_node,
17887 G_USER_ATTRIBUTE1_NAME,
17888 'model_path='||l_target_model_path);
17889
17890 END IF;
17891
17892 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17893
17894 IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17895
17896 handle_User_Attributes
17897 (px_user_attribute_value => l_user_attribute_value,
17898 p_source_ui_def_id => p_source_ui_def_id,
17899 p_source_ui_page_id => p_source_ui_page_id,
17900 p_target_ui_def_id => p_target_ui_def_id,
17901 p_target_ui_page_id => p_target_ui_page_id,
17902 p_new_element_id => l_new_element_id,
17903 p_xml_node => p_xml_node);
17904
17905 set_Attribute(p_xml_node,
17906 G_USER_ATTRIBUTE3_NAME,
17907 l_user_attribute_value);
17908 END IF;
17909
17910 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17911
17912 IF l_user_attribute_value IS NOT NULL THEN
17913
17914 l_name := get_User_Attribute(l_user_attribute_value ,'name');
17915
17916 SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17917 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17918 name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17919
17920 l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17921
17922 set_User_Attribute(p_cz_attribute_name => 'name',
17923 p_cz_attribute_value => l_name,
17924 px_xml_attribute_value => l_user_attribute_value);
17925
17926 set_Attribute(p_xml_node,
17927 G_USER_ATTRIBUTE4_NAME,
17928 l_user_attribute_value);
17929 END IF;
17930
17931 IF l_new_element_id IS NOT NULL THEN
17932 UPDATE CZ_UI_PAGE_ELEMENTS
17933 SET name=l_name
17934 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17935 element_id = l_new_element_id;
17936 END IF;
17937
17938 END copy_User_Attr_For_Node;
17939
17940 --
17941 -- copy records which correspond to user attributes
17942 --
17943 PROCEDURE copy_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
17944 p_source_ui_def_id NUMBER,
17945 p_target_ui_def_id NUMBER,
17946 p_source_template_id NUMBER DEFAULT NULL,
17947 p_target_template_id NUMBER DEFAULT NULL) IS
17948
17949 l_user_attribute_value VARCHAR2(4000);
17950 l_new_element_id VARCHAR2(255);
17951 l_id NUMBER;
17952 l_name VARCHAR2(4000);
17953 l_num_copy NUMBER;
17954
17955 BEGIN
17956
17957 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17958
17959 IF l_user_attribute_value IS NOT NULL THEN
17960
17961 l_new_element_id := '_czc'||get_Element_Id(); -- fix for bug #3975276
17962 set_Attribute(p_xml_node,
17963 G_ID_ATTRIBUTE,
17964 l_new_element_id);
17965
17966 END IF;
17967
17968 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17969
17970 IF l_user_attribute_value IS NOT NULL THEN
17971 handle_User_Attributes
17972 (px_user_attribute_value => l_user_attribute_value,
17973 p_source_ui_def_id => p_source_ui_def_id,
17974 p_source_ui_page_id => 0, -- fix for bug #3975276
17975 p_target_ui_def_id => p_target_ui_def_id,
17976 p_target_ui_page_id => 0, -- fix for bug #3975276
17977 p_new_element_id => l_new_element_id,
17978 p_source_template_id => p_source_template_id,
17979 p_target_template_id => p_target_template_id,
17980 p_xml_node => p_xml_node);
17981
17982 set_Attribute(p_xml_node,
17983 G_USER_ATTRIBUTE3_NAME,
17984 l_user_attribute_value);
17985 END IF;
17986
17987 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17988
17989 IF l_user_attribute_value IS NOT NULL THEN
17990
17991 l_name := get_User_Attribute(l_user_attribute_value ,'name');
17992
17993 IF l_new_element_id IS NOT NULL THEN
17994 l_name := l_name||' - '||l_new_element_id;
17995 END IF;
17996
17997 set_User_Attribute(p_cz_attribute_name => 'name',
17998 p_cz_attribute_value => l_name,
17999 px_xml_attribute_value => l_user_attribute_value);
18000
18001 set_Attribute(p_xml_node,
18002 G_USER_ATTRIBUTE4_NAME,
18003 l_user_attribute_value);
18004 END IF;
18005
18006 END copy_User_Attr_For_Node;
18007
18008 --
18009 -- delete records which corresponds with user attributes
18010 --
18011 PROCEDURE delete_User_Attributes(p_xml_node xmldom.DOMNode,
18012 p_ui_def_id NUMBER,
18013 p_template_id NUMBER DEFAULT NULL,
18014 p_template_ui_def_id NUMBER DEFAULT NULL) IS
18015
18016
18017 l_child_nodes_tbl xmldom.DOMNodeList;
18018 l_child_xml_node xmldom.DOMNode;
18019 l_length NUMBER;
18020
18021 BEGIN
18022
18023 IF xmldom.IsNull(p_xml_node) THEN
18024 RETURN;
18025 END IF;
18026
18027 delete_User_Attr_For_Node(p_xml_node,p_ui_def_id,
18028 p_template_id, p_template_ui_def_id);
18029
18030 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18031 l_length := xmldom.getLength(l_child_nodes_tbl);
18032
18033 FOR k IN 0 .. l_length - 1
18034 LOOP
18035 --
18036 -- get next child DOM node
18037 --
18038 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18039
18040 delete_User_Attr_For_Node(l_child_xml_node,p_ui_def_id,
18041 p_template_id, p_template_ui_def_id);
18042
18043 delete_User_Attributes(l_child_xml_node,p_ui_def_id,
18044 p_template_id, p_template_ui_def_id);
18045
18046 END LOOP;
18047
18048 END delete_User_Attributes;
18049
18050 --
18051 -- copy records which corresponds with user attributes
18052 --
18053 PROCEDURE copy_User_Attributes(p_xml_node xmldom.DOMNode,
18054 p_source_ui_def_id NUMBER,
18055 p_target_ui_def_id NUMBER,
18056 p_source_ui_page_id NUMBER,
18057 p_target_ui_page_id NUMBER,
18058 p_target_model_path VARCHAR2,
18059 p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
18060
18061 l_child_nodes_tbl xmldom.DOMNodeList;
18062 l_child_xml_node xmldom.DOMNode;
18063 l_length NUMBER;
18064
18065 BEGIN
18066
18067 copy_User_Attr_For_Node(p_xml_node => p_xml_node,
18068 p_source_ui_def_id => p_source_ui_def_id,
18069 p_target_ui_def_id => p_target_ui_def_id,
18070 p_source_ui_page_id => p_source_ui_page_id,
18071 p_target_ui_page_id => p_target_ui_page_id,
18072 p_target_model_path => p_target_model_path,
18073 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18074
18075 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18076 l_length := xmldom.getLength(l_child_nodes_tbl);
18077
18078 FOR k IN 0 .. l_length - 1
18079 LOOP
18080 --
18081 -- get next child DOM node
18082 --
18083 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18084
18085 copy_User_Attr_For_Node(p_xml_node => l_child_xml_node,
18086 p_source_ui_def_id => p_source_ui_def_id,
18087 p_target_ui_def_id => p_target_ui_def_id,
18088 p_source_ui_page_id => p_source_ui_page_id,
18089 p_target_ui_page_id => p_target_ui_page_id,
18090 p_target_model_path => p_target_model_path,
18091 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18092
18093 copy_User_Attributes(p_xml_node => l_child_xml_node,
18094 p_source_ui_def_id => p_source_ui_def_id,
18095 p_target_ui_def_id => p_target_ui_def_id,
18096 p_source_ui_page_id => p_source_ui_page_id,
18097 p_target_ui_page_id => p_target_ui_page_id,
18098 p_target_model_path => p_target_model_path,
18099 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
18100
18101 END LOOP;
18102
18103 EXCEPTION
18104 WHEN OTHERS THEN
18105 DEBUG('copy_User_Attributes() : '||SQLERRM);
18106
18107 END copy_User_Attributes;
18108
18109 PROCEDURE validate_Copied_PIR(p_ui_def_id IN NUMBER, p_page_id IN NUMBER) IS
18110 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
18111 l_element_id_tbl varchar_tbl_type;
18112 l_name_tbl varchar_tbl_type;
18113 l_target_page_ui_def_id_tbl number_tbl_type;
18114 l_target_page_id_tbl number_tbl_type;
18115 l_ui_name CZ_UI_DEFS.name%TYPE;
18116 l_page_name CZ_UI_PAGES.name%TYPE;
18117 l_pagebase_expl_id NUMBER;
18118 l_ui_def_id NUMBER;
18119 l_target_persistent_node_id NUMBER;
18120
18121 BEGIN
18122
18123 UPDATE CZ_UI_PAGE_ELEMENTS
18124 SET target_page_ui_def_id=NULL,
18125 target_page_id=NULL
18126 WHERE ui_def_id=p_ui_def_id AND
18127 page_id=p_page_id AND
18128 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
18129 deleted_flag='0' AND target_page_ui_def_id IS NOT NULL AND
18130 target_page_id IS NOT NULL AND
18131 target_page_ui_def_id NOT IN (SELECT ref_ui_def_id FROM CZ_UI_REFS WHERE ui_def_id=p_ui_def_id AND
18132 deleted_flag='0')
18133 RETURNING element_id,name,target_page_id,target_page_ui_def_id
18134 BULK COLLECT INTO l_element_id_tbl,l_name_tbl,l_target_page_id_tbl,l_target_page_ui_def_id_tbl;
18135
18136 IF l_name_tbl.COUNT>0 THEN
18137 FOR i IN l_name_tbl.First..l_name_tbl.Last
18138 LOOP
18139 SELECT name INTO l_page_name FROM CZ_UI_PAGES
18140 WHERE page_id=l_target_page_id_tbl(i) AND ui_def_id=l_target_page_ui_def_id_tbl(i);
18141 SELECT name INTO l_ui_name FROM CZ_UI_DEFS WHERE ui_def_id=l_target_page_ui_def_id_tbl(i);
18142 add_Error_Message(p_message_name => 'CZ_CP_PIR_REF_UI_NOT_IN_CHAIN',
18143 p_token_name1 => 'RGNNAME',
18144 p_token_value1 => NVL(l_name_tbl(i), l_element_id_tbl(i)),
18145 p_token_name2 => 'PAGENAME',
18146 p_token_value2 => l_page_name,
18147 p_token_name3 => 'UINAME',
18148 p_token_value3 => l_ui_name,
18149 p_fatal_error => FALSE);
18150 END LOOP;
18151 END IF;
18152
18153 --
18154 -- Find all Page Include Regions of current UI
18155 --
18156 FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
18157 model_ref_expl_id, persistent_node_id, name
18158 FROM CZ_UI_PAGE_ELEMENTS
18159 WHERE ui_def_id = p_ui_def_id AND page_id=p_page_id AND
18160 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
18161 target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
18162 deleted_flag = '0')
18163 LOOP
18164 -- target page exists?
18165 l_target_persistent_node_id := NULL;
18166 BEGIN
18167 SELECT persistent_node_id INTO l_target_persistent_node_id
18168 FROM cz_ui_pages
18169 WHERE ui_def_id = i.target_page_ui_def_id AND
18170 page_id = i.target_page_id AND deleted_flag <> '1';
18171 EXCEPTION
18172 -- target page not exist
18173 WHEN NO_DATA_FOUND THEN
18174 -- l_target_persistent_node_id := NULL;
18175 UPDATE CZ_UI_PAGE_ELEMENTS
18176 SET target_page_ui_def_id = NULL, target_page_id = NULL
18177 WHERE ui_def_id = p_ui_def_id AND
18178 page_id = i.page_id AND element_id = i.element_id;
18179
18180 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
18181 p_token_name1 => 'REGION_NAME',
18182 p_token_value1 => NVL(i.NAME, i.element_id),
18183 p_token_name2 => 'PAGE_NAME',
18184 p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
18185 p_fatal_error => FALSE);
18186 END;
18187
18188 -- target page exists. check if reachable
18189 IF l_target_persistent_node_id IS NOT NULL THEN
18190 SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
18191 FROM cz_ui_pages
18192 WHERE ui_def_id = p_ui_def_id AND
18193 page_id = i.page_id;
18194
18195 IF i.persistent_node_id = l_target_persistent_node_id THEN
18196 l_ui_def_id := i.target_page_ui_def_id;
18197 ELSE
18198 l_ui_def_id := p_ui_def_id;
18199 END IF;
18200
18201 IF NOT target_page_reachable(l_pagebase_expl_id,
18202 i.model_ref_expl_id,
18203 i.persistent_node_id,
18204 l_ui_def_id) THEN
18205 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
18206 p_token_name1 => 'REGION_NAME',
18207 p_token_value1 => NVL(i.NAME, i.element_id),
18208 p_token_name2 => 'PAGE_NAME',
18209 p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
18210 p_fatal_error => FALSE);
18211 UPDATE CZ_UI_PAGE_ELEMENTS
18212 SET target_page_ui_def_id = NULL, target_page_id = NULL
18213 WHERE ui_def_id = p_ui_def_id AND
18214 page_id = i.page_id AND element_id = i.element_id;
18215 END IF;
18216 END IF;
18217 END LOOP;
18218
18219 END validate_Copied_PIR;
18220
18221 PROCEDURE copy_Tree_Level(p_xml_node xmldom.DOMNode,
18222 p_source_ui_def_id NUMBER,
18223 p_target_ui_def_id NUMBER,
18224 p_source_ui_page_id NUMBER,
18225 p_target_ui_page_id NUMBER,
18226 p_parent_element_id VARCHAR2,
18227 p_target_parent_element_id VARCHAR2,
18228 p_pagebase_persistent_node_id NUMBER,
18229 p_base_persistent_node_Id NUMBER,
18230 p_base_expl_node_id NUMBER,
18231 x_new_element_id IN OUT NOCOPY VARCHAR2,
18232 p_copy_as_ui_page IN BOOLEAN,
18233 p_source_jrad_doc IN VARCHAR2,
18234 p_target_jrad_doc IN VARCHAR2,
18235 p_amn_parent_element_id IN VARCHAR2,
18236 p_is_instance_list_child IN BOOLEAN DEFAULT FALSE) IS
18237
18238 l_child_nodes_tbl xmldom.DOMNodeList;
18239 l_child_xml_node xmldom.DOMNode;
18240 l_parent_xml_node xmldom.DOMNode;
18241 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
18242
18243 l_user_attribute_value VARCHAR2(4000);
18244 l_user_attribute3_value VARCHAR2(4000);
18245
18246 l_switcher_casename VARCHAR2(255);
18247
18248 l_target_model_path VARCHAR2(255);
18249 l_current_element_id VARCHAR2(255);
18250 l_amn_parent_element_id VARCHAR2(255);
18251 l_new_element_id VARCHAR2(255);
18252 l_parent_element_id VARCHAR2(255);
18253 l_name VARCHAR2(255);
18254 l_view_name VARCHAR2(255);
18255 l_children_view_name VARCHAR2(255);
18256 l_ancestor_node VARCHAR2(255);
18257 l_hgrid_element_id VARCHAR2(255);
18258 l_case_node_id VARCHAR2(255);
18259 l_case_node_name VARCHAR2(255);
18260 l_switcher_element_id VARCHAR2(255);
18261 l_case_new_node_id VARCHAR2(255);
18262 l_case_new_node_name VARCHAR2(255);
18263 l_old_ui_switcher_id VARCHAR2(255);
18264 l_layout_node_id VARCHAR2(255);
18265 l_layout_node_name VARCHAR2(255);
18266 l_layout_new_node_id VARCHAR2(255);
18267 l_layout_new_node_name VARCHAR2(255);
18268 l_temp_str VARCHAR2(255);
18269 l_instr_ind NUMBER;
18270 l_view_counter NUMBER;
18271 l_num_copy NUMBER;
18272 l_ui_action_id NUMBER;
18273 l_length NUMBER;
18274 l_ind NUMBER;
18275 l_id NUMBER;
18276 l_temp_ind NUMBER;
18277 l_ui_page_elements_exists BOOLEAN := FALSE;
18278 l_base_expl_node_id NUMBER;
18279 l_base_persistent_node_id NUMBER;
18280 l_amn_expl_node_id NUMBER;
18281 l_amn_persistent_node_id NUMBER;
18282 l_layout_region_type VARCHAR2(20);
18283
18284 BEGIN
18285
18286 l_base_expl_node_id := p_base_expl_node_id;
18287 l_base_persistent_node_id := p_base_persistent_node_Id;
18288
18289 l_ancestor_node := get_Attribute_Value(p_xml_node,
18290 'ancestorNode');
18291 IF l_ancestor_node IS NOT NULL THEN
18292
18293 l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
18294 IF NOT(xmldom.IsNull(p_xml_node)) THEN
18295 l_ancestor_node := p_target_jrad_doc||'.'||l_hgrid_element_id;
18296
18297 set_Attribute(p_xml_node,
18298 'ancestorNode',
18299 l_ancestor_node);
18300 END IF;
18301 END IF;
18302
18303 IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
18304
18305 handle_UI_CASE_Id(p_xml_node);
18306
18307 l_switcher_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:switcher');
18308
18309 l_case_node_id := get_Attribute_Value(p_xml_node,
18310 'name');
18311
18312
18313 l_instr_ind := 0;
18314
18315 FOR i IN 1..LENGTH(l_case_node_id)
18316 LOOP
18317 IF SUBSTR(l_case_node_id,i,1)='_' THEN
18318 l_instr_ind := i;
18319 END IF;
18320 END LOOP;
18321
18322 IF l_case_node_id IS NOT NULL THEN
18323 l_old_ui_switcher_id := SUBSTR(l_case_node_id,1,l_instr_ind-1);
18324 l_case_new_node_id := REPLACE(l_case_node_id,
18325 l_old_ui_switcher_id,
18326 l_switcher_element_id);
18327 set_Attribute(p_xml_node,
18328 'name',
18329 l_case_new_node_id);
18330 END IF;
18331
18332 END IF;
18333
18334 IF xmldom.getNodeName(p_xml_node)='oa:stackLayout' THEN
18335
18336 l_parent_xml_node := xmldom.getParentNode(p_xml_node);
18337
18338 IF NOT(xmldom.IsNull(l_parent_xml_node)) THEN
18339
18340 IF xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
18341
18342 l_layout_new_node_id := get_Attribute_Value(l_parent_xml_node,'name');
18343 set_Attribute(p_xml_node,
18344 G_ID_ATTRIBUTE,
18345 l_layout_new_node_id);
18346
18347 END IF; -- end of IF xmldom.getNodeName(l_parent_xml_node)='ui:case'
18348
18349 END IF; -- end of IF NOT(xmldom.IsNull(l_parent_xml_node))
18350
18351 END IF; -- end of IF xmldom.getNodeName(p_xml_node)='oa:stackLayout'
18352
18353 IF l_layout_new_node_id IS NULL THEN
18354 l_current_element_id := get_Attribute_Value(p_xml_node,
18355 G_ID_ATTRIBUTE);
18356
18357 IF l_current_element_id IS NOT NULL THEN
18358 l_new_element_id := get_Element_Id();
18359 END IF;
18360
18361 END IF;
18362
18363 FOR i IN(SELECT parent_element_id FROM CZ_UI_PAGE_ELEMENTS
18364 WHERE ui_def_id=p_source_ui_def_id AND
18365 page_id=p_source_ui_page_id AND
18366 element_id=l_current_element_id)
18367 LOOP
18368 l_ui_page_elements_exists := TRUE;
18369 IF x_new_element_id IS NULL THEN
18370 x_new_element_id := l_new_element_id;
18371 END IF;
18372 END LOOP;
18373
18374 l_amn_parent_element_id := p_amn_parent_element_id;
18375 IF l_ui_page_elements_exists THEN
18376 l_parent_element_id := l_amn_parent_element_id;
18377 l_amn_parent_element_id := l_new_element_id;
18378 ELSIF p_parent_element_id IS NULL THEN
18379 l_parent_element_id := p_target_parent_element_id;
18380 ELSE
18381 l_parent_element_id := p_parent_element_id;
18382 END IF;
18383
18384 IF l_ui_page_elements_exists THEN
18385 INSERT INTO CZ_UI_PAGE_ELEMENTS
18386 (ui_def_id,
18387 persistent_node_id,
18388 parent_persistent_node_id,
18389 region_persistent_node_id,
18390 pagebase_persistent_node_id,
18391 page_id,
18392 seq_nbr,
18393 ctrl_template_id,
18394 element_id,
18395 parent_element_id,
18396 element_type,
18397 instantiable_flag,
18398 ctrl_template_ui_def_id,
18399 model_ref_expl_id,
18400 element_signature_id,
18401 name,
18402 suppress_refresh_flag,
18403 deleted_flag,
18404 target_page_ui_def_id,
18405 target_page_id)
18406 SELECT
18407 p_target_ui_def_id,
18408 persistent_node_id,
18409 parent_persistent_node_id,
18410 region_persistent_node_id,
18411 p_pagebase_persistent_node_id,
18412 p_target_ui_page_id,
18413 seq_nbr,
18414 ctrl_template_id,
18415 l_new_element_id,
18416 l_parent_element_id,
18417 element_type,
18418 instantiable_flag,
18419 ctrl_template_ui_def_id,
18420 model_ref_expl_id,
18421 element_signature_id,
18422 name,
18423 suppress_refresh_flag,
18424 deleted_flag,
18425 target_page_ui_def_id,
18426 target_page_id
18427 FROM CZ_UI_PAGE_ELEMENTS
18428 WHERE ui_def_id=p_source_ui_def_id AND
18429 page_id=p_source_ui_page_id AND
18430 element_id=l_current_element_id;
18431
18432 -- set JRAD Id of current XML node to new value
18433 set_Attribute(p_xml_node,
18434 G_ID_ATTRIBUTE,
18435 l_new_element_id);
18436 g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
18437
18438 END IF;
18439
18440 -----------------------------------------------------
18441
18442 IF l_current_element_id IS NOT NULL THEN
18443 -- set JRAD Id of current XML node to new value
18444 set_Attribute(p_xml_node,
18445 G_ID_ATTRIBUTE,
18446 l_new_element_id);
18447 g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
18448
18449 IF x_new_element_id IS NULL THEN
18450 x_new_element_id := l_new_element_id;
18451 END IF;
18452
18453 IF xmldom.getNodeName(p_xml_node)='oa:switcher' THEN
18454
18455 l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18456
18457 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
18458
18459 l_switcher_casename := REPLACE(l_switcher_casename,l_current_element_id, l_new_element_id);
18460 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
18461 p_cz_attribute_value => l_switcher_casename,
18462 px_xml_attribute_value => l_user_attribute3_value);
18463
18464 set_Attribute(p_xml_node,
18465 G_USER_ATTRIBUTE3_NAME,
18466 l_user_attribute3_value);
18467 END IF;
18468
18469 END IF;
18470
18471 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18472
18473 IF l_user_attribute_value IS NOT NULL THEN
18474
18475 l_amn_expl_node_id := NULL;
18476 l_amn_persistent_node_id := NULL;
18477
18478 IF p_copy_as_ui_page=FALSE AND p_is_instance_list_child THEN
18479
18480 -- This is a child if an Instance List. We need to pass the AMN of the Instance List
18481 -- and the AMN of the UI Element to handle_User_attributes so that actions and conditions
18482 -- will have correct paths
18483
18484 SELECT persistent_node_id, model_ref_expl_id
18485 INTO l_amn_persistent_node_id, l_amn_expl_node_id
18486 FROM cz_ui_page_elements
18487 WHERE ui_Def_id = p_target_ui_def_id
18488 AND page_Id = p_target_ui_page_id
18489 AND element_id = l_amn_parent_element_id;
18490
18491 handle_User_Attributes
18492 (px_user_attribute_value => l_user_attribute_value,
18493 p_source_ui_def_id => p_source_ui_def_id,
18494 p_source_ui_page_id => p_source_ui_page_id,
18495 p_target_ui_def_id => p_target_ui_def_id,
18496 p_target_ui_page_id => p_target_ui_page_id,
18497 p_new_element_id => l_new_element_id,
18498 p_il_persistent_node_id => l_base_persistent_node_id,
18499 p_il_expl_node_id => l_base_expl_node_id,
18500 p_amn_persistent_node_id => l_amn_persistent_node_id,
18501 p_amn_expl_node_id => l_amn_expl_node_id,
18502 p_xml_node => p_xml_node);
18503
18504 ELSE
18505 handle_User_Attributes
18506 (px_user_attribute_value => l_user_attribute_value,
18507 p_source_ui_def_id => p_source_ui_def_id,
18508 p_source_ui_page_id => p_source_ui_page_id,
18509 p_target_ui_def_id => p_target_ui_def_id,
18510 p_target_ui_page_id => p_target_ui_page_id,
18511 p_new_element_id => l_new_element_id,
18512 p_xml_node => p_xml_node);
18513 END IF;
18514
18515
18516
18517 set_Attribute(p_xml_node,
18518 G_USER_ATTRIBUTE3_NAME,
18519 l_user_attribute_value);
18520
18521 END IF;
18522
18523 IF p_copy_as_ui_page=FALSE THEN
18524
18525 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
18526
18527 IF l_user_attribute_value IS NOT NULL AND l_ui_page_elements_exists THEN
18528
18529 SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
18530 WHERE ui_def_id=p_target_ui_def_id AND
18531 page_id=p_target_ui_page_id AND
18532 element_id=l_new_element_id;
18533
18534 l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_base_expl_node_id,
18535 p_base_pers_id => l_base_persistent_node_id,
18536 p_node_expl_id => l_ui_node.model_ref_expl_id,
18537 p_node_pers_id => l_ui_node.persistent_node_id);
18538
18539 IF l_target_model_path IS NULL THEN
18540 l_target_model_path := '.';
18541 END IF;
18542
18543 set_Attribute(p_xml_node,
18544 G_USER_ATTRIBUTE1_NAME,
18545 'model_path='||l_target_model_path);
18546
18547 END IF;
18548
18549 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
18550
18551 IF l_user_attribute_value IS NOT NULL THEN
18552
18553 SELECT COUNT(element_id) INTO l_view_counter
18554 FROM CZ_UI_PAGE_ELEMENTS
18555 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18556 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
18557
18558 l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
18559
18560 IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
18561 l_ind := INSTR(l_view_name, '_');
18562 l_view_name := SUBSTR(l_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter);
18563 set_User_Attribute(p_cz_attribute_name => 'nodeView',
18564 p_cz_attribute_value => l_view_name,
18565 px_xml_attribute_value => l_user_attribute_value);
18566
18567 l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
18568 IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
18569
18570 l_ind := INSTR(l_children_view_name, '_');
18571 l_children_view_name := SUBSTR(l_children_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter)||'_children';
18572
18573 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
18574 p_cz_attribute_value => l_children_view_name,
18575 px_xml_attribute_value => l_user_attribute_value);
18576 END IF;
18577 set_Attribute(p_xml_node,
18578 G_USER_ATTRIBUTE3_NAME,
18579 l_user_attribute_value);
18580 END IF;
18581 END IF;
18582
18583 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
18584
18585 IF l_user_attribute_value IS NOT NULL THEN
18586
18587 -- Check if this element is an Instance List, if it is then we need to alter the base AMN
18588 -- for other nodes in its subtree
18589 l_layout_region_type := get_User_Attribute(l_user_attribute_value, 'layoutRegionType');
18590 IF l_layout_region_type = '6078' THEN
18591 -- This node is an instance list. So we need to use the AMN of the Instance List as the base AMN
18592 -- for computing paths for elements within this subtree
18593
18594 SELECT persistent_node_id, model_ref_expl_id
18595 INTO l_base_persistent_node_id, l_base_expl_node_id
18596 FROM cz_ui_page_elements
18597 WHERE ui_Def_id = p_target_ui_Def_id
18598 AND page_Id = p_target_ui_page_id
18599 AND element_Id = l_amn_parent_element_id;
18600 END IF;
18601
18602 l_name := get_User_Attribute(l_user_attribute_value ,'name');
18603
18604 SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
18605 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18606 name like l_name||'%' AND deleted_flag=G_NO_FLAG;
18607
18608 l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
18609
18610 set_User_Attribute(p_cz_attribute_name => 'name',
18611 p_cz_attribute_value => l_name,
18612 px_xml_attribute_value => l_user_attribute_value);
18613
18614 set_Attribute(p_xml_node,
18615 G_USER_ATTRIBUTE4_NAME,
18616 l_user_attribute_value);
18617 END IF;
18618
18619 IF l_new_element_id IS NOT NULL THEN
18620 UPDATE CZ_UI_PAGE_ELEMENTS
18621 SET name=l_name
18622 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
18623 element_id = l_new_element_id;
18624 END IF;
18625
18626 END IF; -- end of IF p_copy_as_ui_page=FALSE
18627
18628 -----------------------------------------------------
18629
18630 IF l_current_element_id IS NULL THEN
18631 l_current_element_id := p_parent_element_id;
18632 END IF;
18633
18634 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18635 l_length := xmldom.getLength(l_child_nodes_tbl);
18636
18637 FOR k IN 0 .. l_length - 1
18638 LOOP
18639 --
18640 -- get next child DOM node
18641 --
18642 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18643
18644 copy_Tree_Level(p_xml_node => l_child_xml_node,
18645 p_source_ui_def_id => p_source_ui_def_id,
18646 p_target_ui_def_id => p_target_ui_def_id,
18647 p_source_ui_page_id => p_source_ui_page_id,
18648 p_target_ui_page_id => p_target_ui_page_id,
18649 p_parent_element_id => l_current_element_id,
18650 p_target_parent_element_id => p_target_parent_element_id,
18651 p_pagebase_persistent_node_id => p_pagebase_persistent_node_id,
18652 p_base_persistent_node_id => l_base_persistent_node_id,
18653 p_base_expl_node_id => l_base_expl_node_id,
18654 x_new_element_id => x_new_element_id,
18655 p_copy_as_ui_page => p_copy_as_ui_page,
18656 p_source_jrad_doc => p_source_jrad_doc,
18657 p_target_jrad_doc => p_target_jrad_doc,
18658 p_amn_parent_element_id => l_amn_parent_element_id,
18659 p_is_instance_list_child => p_is_instance_list_child);
18660
18661 END LOOP;
18662
18663 END copy_Tree_Level;
18664
18665 --
18666 -- copy records which corresponds with user attributes
18667 --
18668 PROCEDURE copy_User_Attributes(p_xml_node xmldom.DOMNode,
18669 p_source_ui_def_id NUMBER,
18670 p_target_ui_def_id NUMBER,
18671 p_source_template_id NUMBER DEFAULT NULL,
18672 p_target_template_id NUMBER DEFAULT NULL) IS
18673
18674 l_child_nodes_tbl xmldom.DOMNodeList;
18675 l_child_xml_node xmldom.DOMNode;
18676 l_length NUMBER;
18677
18678 BEGIN
18679 copy_User_Attr_For_Node(p_xml_node => p_xml_node,
18680 p_source_ui_def_id => p_source_ui_def_id,
18681 p_target_ui_def_id => p_target_ui_def_id,
18682 p_source_template_id=> p_source_template_id,
18683 p_target_template_id=> p_target_template_id);
18684
18685 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
18686 l_length := xmldom.getLength(l_child_nodes_tbl);
18687
18688 FOR k IN 0 .. l_length - 1
18689 LOOP
18690 --
18691 -- get next child DOM node
18692 --
18693 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
18694
18695 copy_User_Attr_For_Node(p_xml_node => l_child_xml_node,
18696 p_source_ui_def_id => p_source_ui_def_id,
18697 p_target_ui_def_id => p_target_ui_def_id,
18698 p_source_template_id=> p_source_template_id,
18699 p_target_template_id=> p_target_template_id);
18700
18701 copy_User_Attributes(p_xml_node => l_child_xml_node,
18702 p_source_ui_def_id => p_source_ui_def_id,
18703 p_target_ui_def_id => p_target_ui_def_id,
18704 p_source_template_id=> p_source_template_id,
18705 p_target_template_id=> p_target_template_id);
18706 END LOOP;
18707
18708 EXCEPTION
18709 WHEN OTHERS THEN
18710 DEBUG('copy_User_Attributes() : '||SQLERRM);
18711 END copy_User_Attributes;
18712
18713 --
18714 -- This procedure sets/propogates deleted_flag='1' from a given UI element to its subtree in CZ_UI_PAGE_ELEMENTS table.
18715 -- Also the procedure parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18716 -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18717 -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'.
18718 -- If parameter p_delete_xml = '1' then it also deletes a corresponding XML elements.
18719 --
18720 PROCEDURE delete_UI_Subtree(p_ui_def_id IN NUMBER,
18721 p_ui_page_id IN NUMBER,
18722 p_element_id IN VARCHAR2,
18723 p_delete_xml IN VARCHAR2,
18724 x_return_status OUT NOCOPY VARCHAR2,
18725 x_msg_count OUT NOCOPY NUMBER,
18726 x_msg_data OUT NOCOPY VARCHAR2) IS
18727
18728 l_xmldoc xmldom.DOMDocument;
18729 l_xml_node xmldom.DOMNode;
18730 l_element_id_tbl varchar_tbl_type;
18731 l_out_node xmldom.DOMNode;
18732 l_parent_node xmldom.DOMNode;
18733 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
18734 l_parent_element_id CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
18735 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18736 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
18737 l_ui_context CZ_UI_DEFS%ROWTYPE;
18738 l_condition_id NUMBER;
18739 l_caption_text_id NUMBER;
18740 l_caption_rule_id NUMBER;
18741 l_display_condition_id NUMBER;
18742 l_enabled_condition_id NUMBER;
18743
18744 BEGIN
18745
18746 --
18747 -- initialize FND variables/packages
18748 --
18749 Initialize(x_return_status,x_msg_count,x_msg_data);
18750
18751 --
18752 -- get UI context
18753 --
18754 g_ui_def_nodes_tbl.DELETE;
18755 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
18756
18757 --
18758 -- propogate deleted_flag in UI subtree
18759 --
18760 UPDATE CZ_UI_PAGE_ELEMENTS
18761 SET deleted_flag=G_LIMBO_FLAG
18762 WHERE (ui_def_id,page_id,element_id) IN
18763 (SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS
18764 START WITH ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND element_id=p_element_id
18765 CONNECT BY PRIOR ui_def_id=p_ui_def_id AND
18766 PRIOR page_id=p_ui_page_id AND page_id=p_ui_page_id AND
18767 PRIOR element_id=parent_element_id AND
18768 PRIOR ui_def_id=p_ui_def_id AND ui_def_id=p_ui_def_id AND
18769 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
18770 RETURNING element_id
18771 BULK COLLECT INTO l_element_id_tbl;
18772
18773 IF l_element_id_tbl.COUNT=0 THEN
18774 RETURN;
18775 END IF;
18776
18777 SELECT parent_element_id
18778 INTO l_parent_element_id
18779 FROM CZ_UI_PAGE_ELEMENTS
18780 WHERE ui_def_id=p_ui_def_id AND
18781 page_id=p_ui_page_id AND
18782 element_id=p_element_id;
18783
18784 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
18785 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
18786
18787 IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN -- this is UI page ( and it should be deleted )
18788
18789 FOR i IN(SELECT page_ref_id,page_ref_type,page_set_id,condition_id,caption_text_id,caption_rule_id
18790 FROM CZ_UI_PAGE_REFS
18791 WHERE ui_def_id=p_ui_def_id AND target_page_id=p_ui_page_id AND deleted_flag=G_NO_FLAG)
18792 LOOP
18793
18794 UPDATE CZ_LOCALIZED_TEXTS
18795 SET deleted_flag=G_YES_FLAG
18796 WHERE persistent_intl_text_id=i.caption_text_id AND
18797 ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18798
18799 UPDATE CZ_RULES
18800 SET deleted_flag=G_YES_FLAG
18801 WHERE persistent_rule_id IN(i.condition_id,i.caption_rule_id) AND
18802 ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18803
18804 IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
18805 UPDATE CZ_UI_PAGE_REFS
18806 SET deleted_flag=G_YES_FLAG
18807 WHERE ui_def_id=p_ui_def_id
18808 AND deleted_flag=G_NO_FLAG
18809 AND (ui_def_id,page_ref_id,page_set_id) IN
18810 (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
18811 START WITH a.ui_def_id=p_ui_def_id AND
18812 a.page_ref_id=i.page_ref_id
18813 CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
18814 a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
18815 PRIOR a.ui_def_id=p_ui_def_id AND
18816 a.page_set_id=i.page_set_id AND
18817 PRIOR a.page_set_id=i.page_set_id);
18818 ELSE
18819 UPDATE CZ_UI_PAGE_REFS
18820 SET deleted_flag=G_YES_FLAG
18821 WHERE ui_def_id=p_ui_def_id AND page_ref_id=i.page_ref_id;
18822 END IF;
18823
18824 END LOOP;
18825
18826 --
18827 -- set data for Page Sets
18828 --
18829 handle_Page_Flows();
18830
18831 UPDATE CZ_UI_PAGES
18832 SET deleted_flag=G_YES_FLAG
18833 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG
18834 RETURNING caption_text_id,caption_rule_id,display_condition_id,enabled_condition_id
18835 INTO l_caption_text_id,l_caption_rule_id,l_display_condition_id,l_enabled_condition_id;
18836
18837 UPDATE CZ_LOCALIZED_TEXTS
18838 SET deleted_flag=G_YES_FLAG
18839 WHERE intl_text_id=l_caption_text_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
18840
18841 UPDATE CZ_RULES
18842 SET deleted_flag=G_YES_FLAG
18843 WHERE rule_id IN(l_display_condition_id,l_caption_rule_id,l_enabled_condition_id)
18844 AND seeded_flag=G_NO_FLAG;
18845
18846 END IF;
18847
18848 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18849 UPDATE CZ_UI_ACTIONS
18850 SET deleted_flag=G_YES_FLAG
18851 WHERE ui_def_id=p_ui_def_id AND
18852 source_page_id=p_ui_page_id AND
18853 element_id=l_element_id_tbl(i) AND deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18854
18855 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18856 UPDATE CZ_RULES
18857 SET deleted_flag=G_YES_FLAG
18858 WHERE ui_def_id=p_ui_def_id AND
18859 ui_page_id=p_ui_page_id AND
18860 ui_page_element_id=l_element_id_tbl(i) AND
18861 deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18862
18863 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
18864 UPDATE CZ_LOCALIZED_TEXTS
18865 SET deleted_flag=G_YES_FLAG
18866 WHERE ui_def_id=p_ui_def_id AND
18867 ui_page_id=p_ui_page_id AND
18868 ui_page_element_id=l_element_id_tbl(i) AND
18869 deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
18870
18871 --
18872 -- open XML parser
18873 --
18874 Open_Parser();
18875
18876 --
18877 -- create UI Template in JRAD repository
18878 --
18879 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18880
18881 IF xmldom.isNull(l_xmldoc) THEN
18882 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18883 p_token_name => 'UI_TEMPLATE',
18884 p_token_value => l_jrad_doc,
18885 p_fatal_error => TRUE);
18886 RAISE WRONG_UI_TEMPLATE;
18887 END IF;
18888
18889 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
18890 p_attribute_name => G_ID_ATTRIBUTE,
18891 p_attribute_value => p_element_id);
18892 --
18893 -- delete user attributes from the list of attrributes to delete
18894 --
18895 delete_User_Attributes(l_xml_node, p_ui_def_id);
18896
18897 IF p_delete_xml=G_YES_FLAG THEN
18898 IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN
18899 jdr_docbuilder.deleteDocument(l_jrad_doc);
18900 ELSE
18901 l_parent_node:=xmldom.getParentNode(l_xml_node);
18902 l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
18903 Save_Document(p_xml_doc => l_xmldoc,
18904 p_doc_name => l_jrad_doc);
18905 END IF;
18906
18907 UPDATE CZ_UI_PAGES
18908 SET page_rev_nbr=page_rev_nbr+1
18909 WHERE ui_def_id=p_ui_def_id AND
18910 page_id=p_ui_page_id;
18911
18912 END IF;
18913
18914 --
18915 -- close XML parser
18916 --
18917 Close_Parser();
18918
18919
18920 EXCEPTION
18921 WHEN WRONG_UI_TEMPLATE THEN
18922 x_return_status := FND_API.G_RET_STS_ERROR;
18923 x_msg_count := g_MSG_COUNT;
18924 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18925 --DEBUG(x_msg_data);
18926 WHEN OTHERS THEN
18927 x_return_status := FND_API.G_RET_STS_ERROR;
18928 x_msg_count := 1;
18929 x_msg_data := SQLERRM;
18930 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
18931 --DEBUG(x_msg_data);
18932 END delete_UI_Subtree;
18933
18934 --
18935 -- This procedure sets/propogates deleted_flag='1' from a given UI page to all related UI entities which belong to this page,
18936 -- parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18937 -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18938 -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0' and deletes the corresponding XML/JRAD document.
18939 --
18940 PROCEDURE delete_UI_Page(p_ui_def_id IN NUMBER, -- ui_def_id of UI
18941 p_ui_page_id IN NUMBER, -- page_id of
18942 -- UI page which needs
18943 -- to be deleted.
18944 x_return_status OUT NOCOPY VARCHAR2,-- status string
18945 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18946 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18947 ) IS
18948
18949 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18950
18951 BEGIN
18952
18953 --
18954 -- initialize FND variables/packages
18955 --
18956 Initialize(x_return_status,x_msg_count,x_msg_data);
18957
18958 --
18959 -- get element_id of root element of UI page
18960 --
18961 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
18962 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
18963 parent_element_id IS NULL AND deleted_flag=G_NO_FLAG)
18964 LOOP
18965 --
18966 -- delete UI elements of this UI page starting with
18967 -- the root element
18968 --
18969 delete_UI_Subtree(p_ui_def_id => p_ui_def_id,
18970 p_ui_page_id => p_ui_page_id,
18971 p_element_id => i.element_id,
18972 p_delete_xml => G_YES_FLAG,
18973 x_return_status => x_return_status,
18974 x_msg_count => x_msg_count,
18975 x_msg_data => x_msg_data);
18976 END LOOP;
18977
18978 -- handle page include region
18979 UPDATE cz_ui_page_elements
18980 SET target_page_ui_def_id = NULL, target_page_id = NULL
18981 WHERE target_page_ui_def_id = p_ui_def_id AND target_page_id = p_ui_page_id AND
18982 deleted_flag = '0' AND element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
18983 EXCEPTION
18984 WHEN OTHERS THEN
18985 x_return_status := FND_API.G_RET_STS_ERROR;
18986 x_msg_count := 1;
18987 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18988 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page', x_msg_data);
18989 DEBUG(x_msg_data);
18990 END delete_UI_Page;
18991
18992 --
18993 -- This procedure sets/propogates deleted_flag='1' from a given Page Ref record specified by parameter p_page_ref_id.
18994 -- a target UI pages are not deleted.
18995 --
18996 PROCEDURE delete_UI_Page_Ref(p_ui_def_id IN NUMBER, -- ui_def_id of UI
18997 p_page_ref_id IN NUMBER, -- page_ref_id of
18998 -- Menu/Page Flow link which needs
18999 -- to be deleted.
19000 x_return_status OUT NOCOPY VARCHAR2,-- status string
19001 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19002 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19003 ) IS
19004
19005 l_parent_page_ref_id CZ_UI_PAGE_REFS.parent_page_ref_id%TYPE;
19006 l_ui_context CZ_UI_DEFS%ROWTYPE;
19007 l_page_id CZ_UI_PAGES.page_id%TYPE;
19008 l_page_set_id CZ_UI_PAGES.page_set_id%TYPE;
19009 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
19010
19011 BEGIN
19012
19013 --
19014 -- initialize FND variables/packages
19015 --
19016 Initialize(x_return_status,x_msg_count,x_msg_data);
19017
19018 g_ui_def_nodes_tbl.DELETE;
19019
19020 --
19021 -- get UI context
19022 --
19023 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
19024
19025 SELECT page_set_id, page_ref_type
19026 INTO l_page_set_id, l_page_ref_type
19027 FROM CZ_UI_PAGE_REFS
19028 WHERE ui_def_id=p_ui_def_id AND page_ref_id=p_page_ref_id
19029 AND deleted_flag=G_NO_FLAG;
19030
19031 IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
19032 UPDATE CZ_UI_PAGE_REFS
19033 SET deleted_flag=G_YES_FLAG
19034 WHERE ui_def_id=p_ui_def_id
19035 AND deleted_flag=G_NO_FLAG
19036 AND (ui_def_id,page_ref_id,page_set_id) IN
19037 (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
19038 START WITH a.ui_def_id=p_ui_def_id AND
19039 a.page_ref_id=p_page_ref_id
19040 CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
19041 a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
19042 PRIOR a.ui_def_id=p_ui_def_id AND
19043 a.page_set_id=l_page_set_id AND
19044 PRIOR a.page_set_id=l_page_set_id);
19045 ELSE
19046 UPDATE CZ_UI_PAGE_REFS
19047 SET deleted_flag=G_YES_FLAG
19048 WHERE ui_def_id=p_ui_def_id
19049 AND page_ref_id=p_page_ref_id;
19050 END IF;
19051
19052 --
19053 -- null out CZ_UI_PAGES.page_set_id for those UI pages in this UI
19054 -- which have no corresponding records in CZ_UI_PAGE_REFS
19055 --
19056 UPDATE CZ_UI_PAGES a
19057 SET page_set_id=NULL
19058 WHERE ui_def_id=p_ui_def_id AND page_set_id IS NOT NULL AND
19059 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_REFS b
19060 WHERE b.ui_def_id=p_ui_def_id AND target_page_id=a.page_id AND
19061 deleted_flag='0');
19062
19063 IF l_page_ref_type IN( G_PAGE_FLOW, G_SUBTABS) THEN
19064 --
19065 -- set data for Page Sets
19066 --
19067 handle_Page_Flows();
19068 END IF;
19069
19070 EXCEPTION
19071 WHEN OTHERS THEN
19072 x_return_status := FND_API.G_RET_STS_ERROR;
19073 x_msg_count := 1;
19074 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19075 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page_Ref', x_msg_data);
19076 DEBUG(x_msg_data);
19077 END delete_UI_Page_Ref;
19078
19079 --
19080 -- For a given Local Template specified by parameters p_template_id and p_ui_def_id this procedure performs a soft deletion
19081 -- ( sets deleted_flag='1' ) of corresponding CZ_UI_TEMPLATES record and deletes the corresponding JRAD/XML document.
19082 -- It parses the corresponding XML to collect all caption intl_text_ids and UI Condition Ids and performs soft
19083 -- Delete of corresponding records in CZ_LOCALIZED_TEXTS
19084 -- and CZ_RULES which have seeded_flag='0'
19085 --
19086 PROCEDURE delete_Local_Template(p_template_ui_def_id IN NUMBER, -- ui_def_id of UI
19087 p_template_id IN NUMBER, -- template_id of
19088 -- Local UI Template which needs
19089 -- to be deleted.
19090 x_return_status OUT NOCOPY VARCHAR2,-- status string
19091 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19092 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19093 ) IS
19094
19095 l_xmldoc xmldom.DOMDocument;
19096 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19097
19098 BEGIN
19099
19100 --
19101 -- initialize FND variables/packages
19102 --
19103 Initialize(x_return_status,x_msg_count,x_msg_data);
19104
19105 FOR i IN(SELECT 'x' FROM CZ_MODEL_PUBLICATIONS
19106 WHERE object_id=p_template_id AND object_type='UIT' AND
19107 deleted_flag='0' AND rownum<2)
19108 LOOP
19109 RETURN;
19110 END LOOP;
19111
19112 --
19113 -- get full JRAD path of the given UI template
19114 --
19115 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
19116 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19117
19118 --
19119 -- open XML parser
19120 --
19121 Open_Parser();
19122
19123 --
19124 -- create UI Template in JRAD repository
19125 --
19126 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19127
19128 IF xmldom.isNull(l_xmldoc) THEN
19129 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19130 p_token_name => 'UI_TEMPLATE',
19131 p_token_value => l_jrad_doc,
19132 p_fatal_error => TRUE);
19133 RAISE WRONG_UI_TEMPLATE;
19134 END IF;
19135
19136 --
19137 -- delete user attributes from the list of attrributes to delete
19138 --
19139 delete_User_Attributes(xmldom.makeNode(l_xmldoc),p_template_ui_def_id,
19140 p_template_id, p_template_ui_def_id);
19141
19142 jdr_docbuilder.deleteDocument(l_jrad_doc);
19143
19144 --
19145 -- close XML parser
19146 --
19147 Close_Parser();
19148
19149 DELETE FROM CZ_UI_TEMPLATES
19150 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id
19151 AND seeded_flag=G_NO_FLAG;
19152
19153 DELETE FROM CZ_UI_REF_TEMPLATES
19154 WHERE template_ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19155
19156 UPDATE CZ_UI_TEMPLATE_ELEMENTS
19157 SET deleted_flag=G_YES_FLAG
19158 WHERE template_id=p_template_ui_def_id AND
19159 deleted_flag=G_NO_FLAG;
19160
19161 EXCEPTION
19162 WHEN WRONG_UI_TEMPLATE THEN
19163 x_return_status := FND_API.G_RET_STS_ERROR;
19164 x_msg_count := g_MSG_COUNT;
19165 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19166 DEBUG(x_msg_data);
19167 WHEN OTHERS THEN
19168 x_return_status := FND_API.G_RET_STS_ERROR;
19169 x_msg_count := 1;
19170 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19171 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template', x_msg_data);
19172 DEBUG('delete_Local_Template() : '||x_msg_data);
19173 END delete_Local_Template;
19174
19175 --
19176 -- This procedure deletes subtree identified by p_element_id of UI Local Template.
19177 -- Follows the same rules as deleting an element in a page.
19178 --
19179 PROCEDURE delete_Local_Template_Elem(p_template_ui_def_id IN NUMBER, -- ui_def_id of UI
19180 p_template_id IN NUMBER, -- template_id of
19181 p_element_id IN VARCHAR2, -- element_id of Element to delete
19182 x_return_status OUT NOCOPY VARCHAR2,-- status string
19183 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19184 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19185 ) IS
19186
19187 l_xmldoc xmldom.DOMDocument;
19188 l_out_node xmldom.DOMNode;
19189 l_parent_node xmldom.DOMNode;
19190 l_xml_node xmldom.DOMNode;
19191 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19192 l_needs_to_be_unlocked BOOLEAN;
19193
19194 BEGIN
19195
19196 --
19197 -- lock source UI Template
19198 --
19199 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19200
19201 --
19202 -- initialize FND variables/packages
19203 --
19204 Initialize(x_return_status,x_msg_count,x_msg_data);
19205
19206 --
19207 -- get full JRAD path of the given UI template
19208 --
19209 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
19210 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19211
19212 --
19213 -- open XML parser
19214 --
19215 Open_Parser();
19216
19217 --
19218 -- create UI Template in JRAD repository
19219 --
19220 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19221
19222 IF xmldom.isNull(l_xmldoc) THEN
19223 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19224 p_token_name => 'UI_TEMPLATE',
19225 p_token_value => l_jrad_doc,
19226 p_fatal_error => TRUE);
19227 RAISE WRONG_UI_TEMPLATE;
19228 END IF;
19229
19230 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
19231 p_attribute_name => G_ID_ATTRIBUTE,
19232 p_attribute_value => p_element_id);
19233
19234 IF xmldom.isNull(l_xml_node) THEN
19235 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
19236 p_attribute_name => 'caseId',
19237 p_attribute_value => p_element_id,
19238 p_in_user_attributes => G_YES_FLAG );
19239
19240 IF xmldom.isNull(l_xml_node) THEN
19241 x_return_status := FND_API.G_RET_STS_ERROR;
19242 x_msg_count := 1;
19243 x_msg_data := 'Element with element_id="'||p_element_id||'" does exist.';
19244 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', 'Element with element_id="'||
19245 p_element_id||'" does exist.');
19246 DEBUG('delete_Local_Template_Elem() : '||'Element with element_id="'||
19247 p_element_id||'" does exist.');
19248 RETURN;
19249 END IF;
19250 END IF;
19251
19252 --
19253 -- delete user attributes from the list of attrributes to delete
19254 --
19255 delete_User_Attributes(l_xml_node, p_template_ui_def_id,
19256 p_template_id, p_template_ui_def_id);
19257
19258 --
19259 -- remove XML subtree
19260 --
19261 l_parent_node:=xmldom.getParentNode(l_xml_node);
19262 l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
19263
19264
19265 refresh_Templ_Ref_Counts(l_xmldoc, p_template_ui_def_id, p_template_id);
19266
19267 --
19268 -- save XML in JRAD repository
19269 --
19270 Save_Document(p_xml_doc => l_xmldoc,
19271 p_doc_name => l_jrad_doc);
19272
19273 --
19274 -- close XML parser
19275 --
19276 Close_Parser();
19277
19278 /* *** changes for build 21p *** */
19279
19280 UPDATE CZ_UI_TEMPLATES
19281 SET template_rev_nbr=NVL(template_rev_nbr,0)+1
19282 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19283
19284 --
19285 -- unlock source UI Template
19286 --
19287 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19288
19289 EXCEPTION
19290 WHEN WRONG_UI_TEMPLATE THEN
19291 x_return_status := FND_API.G_RET_STS_ERROR;
19292 x_msg_count := g_MSG_COUNT;
19293 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19294 DEBUG(x_msg_data);
19295 --
19296 -- unlock source UI Template
19297 --
19298 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19299
19300 WHEN OTHERS THEN
19301 x_return_status := FND_API.G_RET_STS_ERROR;
19302 x_msg_count := 1;
19303 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19304 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', x_msg_data);
19305 DEBUG('delete_Local_Template_Elem() : '||x_msg_data);
19306 --
19307 -- unlock source UI Template
19308 --
19309 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19310
19311 END delete_Local_Template_Elem;
19312
19313 --
19314 -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
19315 -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element and p_target_ui_def_id.
19316 -- For all caption intl_text_ids, UI condtion rules ids from the source page a new copies will be created for use in the copied page.
19317 -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
19318 PROCEDURE copy_UI_Subtree(p_source_ui_def_id IN NUMBER, -- ui_def_id of source UI
19319 p_source_element_id IN VARCHAR2, -- element_id of
19320 -- UI element which needs
19321 -- to be copied ( source element )
19322 p_source_ui_page_id IN NUMBER, -- page_id of UI page to which source element belongs to
19323 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19324 p_target_ui_page_id IN NUMBER, -- page_id of target UI page
19325 p_target_parent_element_id IN VARCHAR2, -- element_id of
19326 -- new parent UI element
19327 p_source_xml_node xmldom.DOMNode,
19328 p_target_xml_node xmldom.DOMNode,
19329 p_target_xmldoc xmldom.DOMDocument,
19330 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of copied UI element
19331 x_new_xml_node OUT NOCOPY xmldom.DOMNode
19332 ) IS
19333
19334 l_target_xmldoc xmldom.DOMDocument;
19335 l_new_xml_root_node xmldom.DOMNode;
19336 l_target_uicont_xml_node xmldom.DOMNode;
19337 l_stacklayout_node xmldom.DOMNode;
19338 l_stacklayout_uicont_xml_node xmldom.DOMNode;
19339 l_xml_uicont_node xmldom.DOMNode;
19340 l_xml_new_node xmldom.DOMNode;
19341 l_amn_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19342 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19343 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19344 l_pagebase_persistent_node_id NUMBER;
19345 l_pagebase_expl_node_id NUMBER;
19346 l_length NUMBER;
19347 l_base_persistent_node_id NUMBER;
19348 l_base_expl_node_id NUMBER;
19349 l_instance_list_AMN expl_node_persistent_id_pair;
19350 l_is_instance_list_child BOOLEAN := FALSE;
19351 l_xml_temp_node xmldom.DOMNode;
19352
19353 BEGIN
19354
19355
19356 g_handled_attr_id_tbl.DELETE;
19357
19358 --
19359 -- get jrad_doc of source UI page to which this UI element belongs to
19360 --
19361 SELECT jrad_doc
19362 INTO l_source_jrad_doc FROM CZ_UI_PAGES
19363 WHERE page_id=p_source_ui_page_id AND
19364 ui_def_id=p_source_ui_def_id;
19365
19366 SELECT jrad_doc, persistent_node_id, pagebase_expl_node_id
19367 INTO l_target_jrad_doc, l_pagebase_persistent_node_id, l_pagebase_expl_node_id
19368 FROM CZ_UI_PAGES
19369 WHERE page_id=p_target_ui_page_id AND
19370 ui_def_id=p_target_ui_def_id;
19371
19372
19373 BEGIN
19374 SELECT element_id INTO l_amn_parent_element_id
19375 FROM CZ_UI_PAGE_ELEMENTS
19376 WHERE ui_def_id=p_target_ui_def_id AND
19377 page_id=p_target_ui_page_id AND
19378 element_id=p_target_parent_element_id;
19379 EXCEPTION
19380 WHEN NO_DATA_FOUND THEN
19381 l_amn_parent_element_id := find_AMN_Element_Above(p_target_xml_node);
19382 END;
19383
19384 l_target_uicont_xml_node := getUIContents(p_target_xml_node, G_YES_FLAG);
19385 IF xmldom.IsNull(l_target_uicont_xml_node) THEN
19386 l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19387 l_target_uicont_xml_node := xmldom.appendChild(p_target_xml_node,
19388 l_xml_temp_node);
19389 END IF;
19390
19391 --
19392 -- returns cloned DOM subtree
19393 --
19394 --l_new_xml_root_node := xmldom.cloneNode(p_source_xml_node, TRUE);
19395 l_new_xml_root_node := cloneNode(p_source_xml_node, l_target_uicont_xml_node);
19396
19397 l_base_persistent_node_id := l_pagebase_persistent_node_id;
19398 l_base_expl_node_Id := l_pagebase_expl_node_id;
19399
19400 l_instance_list_AMN := getInstanceListAMN(p_target_ui_def_id, p_target_ui_page_id, p_target_xml_node);
19401
19402
19403 IF l_instance_list_AMN.persistent_node_id IS NOT NULL THEN
19404 -- There is an Instance List containing this element. We need to use the AMN of the Instance List
19405 -- as the base AMN for the the subtree being copied
19406 DEBUG('Target node is contained in an Instance List. So passing the AMN of the Instance List as the base AMN');
19407 l_base_persistent_node_id := l_instance_list_AMN.persistent_node_id;
19408 l_base_expl_node_Id := l_instance_list_AMN.expl_node_id;
19409 l_is_instance_list_child := TRUE;
19410 END IF;
19411
19412 copy_Tree_Level(p_xml_node => l_new_xml_root_node,
19413 p_source_ui_def_id => p_source_ui_def_id,
19414 p_target_ui_def_id => p_target_ui_def_id,
19415 p_source_ui_page_id => p_source_ui_page_id,
19416 p_target_ui_page_id => p_target_ui_page_id,
19417 p_parent_element_id => NULL,
19418 p_target_parent_element_id => p_target_parent_element_id,
19419 p_pagebase_persistent_node_id => l_pagebase_persistent_node_id,
19420 p_base_persistent_node_id => l_base_persistent_node_id,
19421 p_base_expl_node_id => l_base_expl_node_Id,
19422 x_new_element_id => x_new_element_id,
19423 p_copy_as_ui_page => FALSE,
19424 p_source_jrad_doc => l_source_jrad_doc,
19425 p_target_jrad_doc => l_target_jrad_doc,
19426 p_amn_parent_element_id => l_amn_parent_element_id,
19427 p_is_instance_list_child => l_is_instance_list_child);
19428
19429 validate_Copied_PIR(p_target_ui_def_id, p_target_ui_page_id);
19430
19431 IF xmldom.getNodeName(p_source_xml_node)='ui:case' AND xmldom.getNodeName(p_target_xml_node)='oa:switcher' THEN
19432
19433 x_new_xml_node := xmldom.appendChild(p_target_xml_node,
19434 l_new_xml_root_node);
19435
19436 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(p_target_xml_node)<>'ui:case' THEN
19437 l_xml_new_node := xmldom.makeNode(xmldom.createElement(p_target_xmldoc, 'ui:contents'));
19438
19439 l_xml_uicont_node := xmldom.appendChild(p_target_xml_node,
19440 l_xml_new_node);
19441 x_new_xml_node := xmldom.appendChild(l_xml_uicont_node,
19442 l_new_xml_root_node);
19443 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(p_target_xml_node)='ui:case' THEN
19444
19445 l_stacklayout_node := findChildXMLTag(p_target_xml_node, 'oa:stackLayout');
19446 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19447
19448 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19449
19450 l_xml_new_node := xmldom.makeNode(xmldom.createElement(p_target_xmldoc, 'ui:contents'));
19451 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19452 l_xml_new_node);
19453 x_new_xml_node := xmldom.appendChild(l_xml_uicont_node,
19454 l_new_xml_root_node);
19455
19456 ELSE
19457
19458 x_new_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19459 l_new_xml_root_node);
19460 END IF;
19461 ELSE
19462 x_new_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19463 l_new_xml_root_node);
19464 END IF;
19465
19466 Save_Document(p_xml_doc => p_target_xmldoc,
19467 p_doc_name => l_target_jrad_doc);
19468
19469 UPDATE CZ_UI_PAGES
19470 SET page_rev_nbr=page_rev_nbr+1,
19471 empty_page_flag = G_NO_FLAG
19472 WHERE page_id=p_target_ui_page_id AND
19473 ui_def_id=p_target_ui_def_id;
19474
19475 UPDATE CZ_UI_PAGE_REFS
19476 SET empty_page_flag = G_NO_FLAG
19477 WHERE target_page_id=p_target_ui_page_id AND
19478 ui_def_id=p_target_ui_def_id AND
19479 deleted_flag = G_NO_FLAG AND
19480 empty_page_flag = G_YES_FLAG;
19481
19482
19483 END copy_UI_Subtree;
19484
19485 --
19486 -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
19487 -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element and p_target_ui_def_id.
19488 -- For all caption intl_text_ids, UI condtion rules ids from the source page a new copies will be created for use in the copied page.
19489 -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
19490 PROCEDURE copy_UI_Subtree(p_source_ui_def_id IN NUMBER, -- ui_def_id of source UI
19491 p_source_element_id IN VARCHAR2, -- element_id of
19492 -- UI element which needs
19493 -- to be copied ( source element )
19494 p_source_ui_page_id IN NUMBER, -- page_id of UI page to which source element belongs to
19495 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19496 p_target_ui_page_id IN NUMBER, -- page_id of target UI page
19497 p_target_parent_element_id IN VARCHAR2, -- element_id of
19498 -- new parent UI element
19499 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of copied UI element
19500 x_return_status OUT NOCOPY VARCHAR2,-- status string
19501 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19502 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19503 ) IS
19504
19505 l_source_xmldoc xmldom.DOMDocument;
19506 l_target_xmldoc xmldom.DOMDocument;
19507 l_source_xml_node xmldom.DOMNode;
19508 l_target_xml_node xmldom.DOMNode;
19509 l_new_xml_root_node xmldom.DOMNode;
19510 l_new_xml_node xmldom.DOMNode;
19511 l_out_xml_node xmldom.DOMNode;
19512 l_target_uicont_xml_node xmldom.DOMNode;
19513 l_stacklayout_node xmldom.DOMNode;
19514 l_stacklayout_uicont_xml_node xmldom.DOMNode;
19515 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19516 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19517 l_xml_uicont_node xmldom.DOMNode;
19518 l_xml_new_node xmldom.DOMNode;
19519 l_amn_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19520 l_new_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
19521 l_pagebase_persistent_node_id NUMBER;
19522 l_length NUMBER;
19523 l_caseid_to_copy BOOLEAN;
19524
19525 BEGIN
19526
19527 --
19528 -- initialize FND variables/packages
19529 --
19530 Initialize(x_return_status,x_msg_count,x_msg_data);
19531
19532 set_Local_UI_Context(p_target_ui_def_id);
19533
19534 --
19535 -- get jrad_doc of source UI page to which this UI element belongs to
19536 --
19537 SELECT jrad_doc
19538 INTO l_source_jrad_doc FROM CZ_UI_PAGES
19539 WHERE page_id=p_source_ui_page_id AND
19540 ui_def_id=p_source_ui_def_id;
19541
19542 --
19543 -- get jrad_doc of source UI page to which this UI element belongs to
19544 --
19545 SELECT jrad_doc,persistent_node_id
19546 INTO l_target_jrad_doc, l_pagebase_persistent_node_id
19547 FROM CZ_UI_PAGES
19548 WHERE page_id=p_target_ui_page_id AND
19549 ui_def_id=p_target_ui_def_id;
19550
19551 --
19552 -- open XML parser
19553 --
19554 Open_Parser();
19555
19556 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19557
19558 IF xmldom.isNull(l_source_xmldoc) THEN
19559 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19560 p_token_name => 'UI_TEMPLATE',
19561 p_token_value => l_source_jrad_doc,
19562 p_fatal_error => TRUE);
19563 RAISE WRONG_UI_TEMPLATE;
19564 END IF;
19565
19566 --
19567 -- create UI Template in JRAD repository
19568 --
19569 l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
19570
19571 IF xmldom.isNull(l_target_xmldoc) THEN
19572 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19573 p_token_name => 'UI_TEMPLATE',
19574 p_token_value => l_target_jrad_doc,
19575 p_fatal_error => TRUE);
19576 RAISE WRONG_UI_TEMPLATE;
19577 END IF;
19578
19579 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
19580 p_attribute_name => G_ID_ATTRIBUTE,
19581 p_attribute_value => p_source_element_id);
19582
19583 IF xmldom.IsNull(l_source_xml_node) THEN
19584 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
19585 p_attribute_name => 'caseId',
19586 p_attribute_value => p_source_element_id,
19587 p_in_user_attributes => G_YES_FLAG);
19588 l_caseid_to_copy := TRUE;
19589 END IF;
19590
19591 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
19592 p_attribute_name => G_ID_ATTRIBUTE,
19593 p_attribute_value => p_target_parent_element_id);
19594 IF xmldom.IsNull(l_target_xml_node) THEN
19595 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
19596 p_attribute_name => 'caseId',
19597 p_attribute_value => p_target_parent_element_id,
19598 p_in_user_attributes => G_YES_FLAG);
19599 END IF;
19600
19601
19602 copy_UI_Subtree(p_source_ui_def_id => p_source_ui_def_id,
19603 p_source_element_id => p_source_element_id,
19604 p_source_ui_page_id => p_source_ui_page_id,
19605 p_target_ui_def_id => p_target_ui_def_id,
19606 p_target_ui_page_id => p_target_ui_page_id,
19607 p_target_parent_element_id => p_target_parent_element_id,
19608 p_source_xml_node => l_source_xml_node,
19609 p_target_xml_node => l_target_xml_node,
19610 p_target_xmldoc => l_target_xmldoc,
19611 x_new_element_id => l_new_element_id,
19612 x_new_xml_node => l_new_xml_node);
19613
19614 x_new_element_id := l_new_element_id;
19615 --
19616 -- close XML parser
19617 --
19618 Close_Parser();
19619
19620
19621 IF g_MSG_COUNT>0 THEN
19622 x_return_status := FND_API.G_RET_STS_SUCCESS;
19623 x_msg_count := g_MSG_COUNT;
19624 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19625 END IF;
19626
19627
19628 EXCEPTION
19629 WHEN WRONG_UI_TEMPLATE THEN
19630 x_return_status := FND_API.G_RET_STS_ERROR;
19631 x_msg_count := g_MSG_COUNT;
19632 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19633 DEBUG(x_msg_data);
19634 WHEN OTHERS THEN
19635 x_return_status := FND_API.G_RET_STS_ERROR;
19636 x_msg_count := 1;
19637 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19638 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Subtree', x_msg_data);
19639 DEBUG('copy_UI_Subtree() : '||x_msg_data);
19640 END copy_UI_Subtree;
19641
19642 --
19643 --
19644 -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
19645 -- a source UI page except corresponding UI Page Refs records.
19646 -- For all caption intl_text_ids, UI condtion rules ids from the source page which have seeded_flag='0', a new copies will be created for use in the copied page.
19647 --
19648 PROCEDURE copy_UI_Page (p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
19649 p_source_ui_page_id IN NUMBER, -- page_id of
19650 -- UI page which needs
19651 -- to be copied
19652 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19653 p_source_xmldoc xmldom.DOMDocument,
19654 x_new_ui_page_id OUT NOCOPY NUMBER,-- page_id of copied UI page
19655 x_new_jrad_doc OUT NOCOPY VARCHAR2
19656 ) IS
19657
19658 l_source_xml_node xmldom.DOMNode;
19659 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19660 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19661 l_element_id_tbl number_tbl_type;
19662 l_parent_element_id_tbl number_tbl_type;
19663 l_element_id_arr_tbl number_tbl_type;
19664 l_new_element_id_arr_tbl number_tbl_type;
19665 l_seq_nbr_tbl number_tbl_type;
19666 l_seq_nbr_arr_tbl number_tbl_type;
19667 l_source_element_id VARCHAR2(255);
19668 l_new_element_id VARCHAR2(255);
19669 l_caption_text_id NUMBER;
19670 l_ui_action_id NUMBER;
19671 l_display_condition_id NUMBER;
19672 l_enabled_condition_id NUMBER;
19673 l_current_element_id NUMBER;
19674 l_persistent_node_id NUMBER;
19675 l_pagebase_expl_node_id NUMBER;
19676 l_caption_rule_id NUMBER;
19677 l_new_parent_element_id NUMBER;
19678 l_copy_nbr NUMBER;
19679
19680 BEGIN
19681
19682 SELECT element_id INTO l_source_element_id
19683 FROM CZ_UI_PAGE_ELEMENTS
19684 WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
19685 parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
19686
19687 --
19688 -- get jrad_doc of source UI page to which this UI element belongs to
19689 --
19690 SELECT jrad_doc,persistent_node_id, pagebase_expl_node_id
19691 INTO l_source_jrad_doc,l_persistent_node_id, l_pagebase_expl_node_id
19692 FROM CZ_UI_PAGES
19693 WHERE ui_def_id=p_source_ui_def_id AND
19694 page_id=p_source_ui_page_id;
19695
19696 SELECT COUNT(*) INTO l_copy_nbr FROM CZ_UI_PAGES
19697 WHERE ui_def_id=p_target_ui_def_id AND
19698 persistent_node_id=l_persistent_node_id;
19699
19700 l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
19701 TO_CHAR(p_target_ui_def_id) || '/' ||
19702 get_Short_JRAD_Name(l_source_jrad_doc)||'_'||TO_CHAR(l_copy_nbr);
19703
19704 l_target_jrad_doc := REPLACE(l_target_jrad_doc,'_'||TO_CHAR(p_source_ui_def_id)||'_',
19705 '_'||TO_CHAR(p_target_ui_def_id)||'_');
19706
19707 x_new_jrad_doc := l_target_jrad_doc;
19708
19709 FOR i IN(SELECT * FROM CZ_UI_PAGES
19710 WHERE ui_def_id=p_source_ui_def_id AND
19711 page_id=p_source_ui_page_id)
19712 LOOP
19713
19714 x_new_ui_page_id := allocateId('CZ_UI_PAGES_S');
19715
19716 l_caption_text_id := copy_Intl_Text(i.caption_text_id, p_target_ui_def_id, NULL, NULL);
19717
19718 copy_UI_Rule( i.caption_rule_id, l_caption_rule_id,
19719 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19720
19721 copy_UI_Rule( i.display_condition_id, l_display_condition_id,
19722 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19723
19724 copy_UI_Rule( i.enabled_condition_id, l_enabled_condition_id,
19725 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
19726
19727 INSERT INTO CZ_UI_PAGES
19728 (
19729 PAGE_ID
19730 ,UI_DEF_ID
19731 ,PERSISTENT_NODE_ID
19732 ,JRAD_DOC
19733 ,PAGEBASE_PATH
19734 ,PAGE_SET_ID
19735 ,SPLIT_SEQ_NBR
19736 ,CAPTION_SOURCE
19737 ,CAPTION_TEXT_ID
19738 ,PERSISTENT_CAPTION_TEXT_ID
19739 ,PROPERTY_ID
19740 ,DELETED_FLAG
19741 ,SEEDED_FLAG
19742 ,PAGEBASE_EXPL_NODE_ID
19743 ,suppress_refresh_flag
19744 ,PAGE_REV_NBR
19745 ,NAME
19746 ,DESC_TEXT
19747 ,PAGE_STATUS_TEMPLATE_ID
19748 ,PAGE_STATUS_TEMPL_UIDEF_ID
19749 ,CAPTION_RULE_ID
19750 ,PAGE_STATUS_TEMPLATE_USAGE
19751 ,OUTER_TEMPLATE_USAGE
19752 ,OUTER_PAGE_TEMPLATE_ID
19753 ,OUTER_PAGE_TEMPL_UIDEF_ID
19754 ,DISPLAY_CONDITION_ID
19755 ,DISPLAY_CONDITION_COMP
19756 ,DISPLAY_CONDITION_VALUE
19757 ,ENABLED_CONDITION_ID
19758 ,ENABLED_CONDITION_COMP
19759 ,ENABLED_CONDITION_VALUE
19760 )
19761 VALUES
19762 (
19763 x_new_ui_page_id
19764 ,p_target_ui_def_id
19765 ,i.PERSISTENT_NODE_ID
19766 ,l_target_jrad_doc
19767 ,i.PAGEBASE_PATH
19768 ,NULL
19769 ,1
19770 ,i.CAPTION_SOURCE
19771 ,l_caption_text_id
19772 ,i.PERSISTENT_CAPTION_TEXT_ID
19773 ,i.PROPERTY_ID
19774 ,i.DELETED_FLAG
19775 ,i.SEEDED_FLAG
19776 ,i.PAGEBASE_EXPL_NODE_ID
19777 ,i.suppress_refresh_flag
19778 ,0
19779 ,i.NAME||'_'||TO_CHAR(l_copy_nbr)
19780 ,i.DESC_TEXT
19781 ,i.PAGE_STATUS_TEMPLATE_ID
19782 ,i.PAGE_STATUS_TEMPL_UIDEF_ID
19783 ,l_caption_rule_id
19784 ,i.PAGE_STATUS_TEMPLATE_USAGE
19785 ,i.OUTER_TEMPLATE_USAGE
19786 ,i.OUTER_PAGE_TEMPLATE_ID
19787 ,i.OUTER_PAGE_TEMPL_UIDEF_ID
19788 ,l_display_condition_id
19789 ,i.DISPLAY_CONDITION_COMP
19790 ,i.DISPLAY_CONDITION_VALUE
19791 ,l_enabled_condition_id
19792 ,i.ENABLED_CONDITION_COMP
19793 ,i.ENABLED_CONDITION_VALUE
19794 );
19795 END LOOP;
19796
19797 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => p_source_xmldoc,
19798 p_attribute_name => G_ID_ATTRIBUTE,
19799 p_attribute_value => l_source_element_id);
19800
19801 l_source_xml_node := xmldom.cloneNode(l_source_xml_node, TRUE);
19802
19803 -- We are copying an entire page. We start off with the pagebase as the base AMN
19804 -- for computing paths (p_base_persistent_node_id, p_base_expl_node_id)
19805 -- If while copying the tree, we encounter an Instance List Region, we will change
19806 -- the base AMN to the AMN of the Instance List for nodes under the Instance List
19807 copy_Tree_Level(p_xml_node => l_source_xml_node,
19808 p_source_ui_def_id => p_source_ui_def_id,
19809 p_target_ui_def_id => p_target_ui_def_id,
19810 p_source_ui_page_id => p_source_ui_page_id,
19811 p_target_ui_page_id => x_new_ui_page_id,
19812 p_parent_element_id => NULL,
19813 p_target_parent_element_id => NULL,
19814 p_pagebase_persistent_node_id => l_persistent_node_id,
19815 p_base_persistent_node_id => l_persistent_node_id, -- see comment above
19816 p_base_expl_node_id => l_pagebase_expl_node_id, -- see comment above
19817 x_new_element_id => l_new_element_id,
19818 p_copy_as_ui_page => TRUE,
19819 p_source_jrad_doc => l_source_jrad_doc,
19820 p_target_jrad_doc => l_target_jrad_doc,
19821 p_amn_parent_element_id => NULL);
19822
19823 validate_Copied_PIR(p_target_ui_def_id, x_new_ui_page_id);
19824
19825 Save_As_Document(p_xml_root_node => l_source_xml_node,
19826 p_doc_name => l_target_jrad_doc);
19827
19828 END copy_UI_Page;
19829
19830
19831 --
19832 --
19833 -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
19834 -- a source UI page except corresponding UI Page Refs records.
19835 -- For all caption intl_text_ids, UI condtion rules ids from the source page which have seeded_flag='0', a new copies will be created for use in the copied page.
19836 --
19837 PROCEDURE copy_UI_Page (p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
19838 p_source_ui_page_id IN NUMBER, -- page_id of
19839 -- UI page which needs
19840 -- to be copied
19841 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19842 x_new_ui_page_id OUT NOCOPY NUMBER,-- page_id of copied UI page
19843 x_return_status OUT NOCOPY VARCHAR2,-- status string
19844 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19845 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19846 ) IS
19847
19848 l_source_xmldoc xmldom.DOMDocument;
19849 l_source_xml_node xmldom.DOMNode;
19850 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19851 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19852 l_element_id_tbl number_tbl_type;
19853 l_parent_element_id_tbl number_tbl_type;
19854 l_element_id_arr_tbl number_tbl_type;
19855 l_new_element_id_arr_tbl number_tbl_type;
19856 l_seq_nbr_tbl number_tbl_type;
19857 l_seq_nbr_arr_tbl number_tbl_type;
19858 l_source_element_id VARCHAR2(255);
19859 l_new_element_id VARCHAR2(255);
19860 l_new_ui_page_id NUMBER;
19861 l_caption_text_id NUMBER;
19862 l_ui_action_id NUMBER;
19863 l_display_condition_id NUMBER;
19864 l_enabled_condition_id NUMBER;
19865 l_current_element_id NUMBER;
19866 l_persistent_node_id NUMBER;
19867 l_caption_rule_id NUMBER;
19868 l_new_parent_element_id NUMBER;
19869 l_copy_nbr NUMBER;
19870
19871 BEGIN
19872
19873 --
19874 -- initialize FND variables/packages
19875 --
19876 Initialize(x_return_status,x_msg_count,x_msg_data);
19877
19878 g_handled_attr_id_tbl.DELETE;
19879
19880 set_Local_UI_Context(p_target_ui_def_id);
19881
19882 SELECT element_id INTO l_source_element_id
19883 FROM CZ_UI_PAGE_ELEMENTS
19884 WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
19885 parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
19886
19887 --
19888 -- get jrad_doc of source UI page to which this UI element belongs to
19889 --
19890 SELECT jrad_doc,persistent_node_id
19891 INTO l_source_jrad_doc,l_persistent_node_id
19892 FROM CZ_UI_PAGES
19893 WHERE ui_def_id=p_source_ui_def_id AND
19894 page_id=p_source_ui_page_id;
19895
19896 --
19897 -- open XML parser
19898 --
19899 Open_Parser();
19900
19901 --
19902 -- create UI Template in JRAD repository
19903 --
19904 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19905
19906 IF xmldom.isNull(l_source_xmldoc) THEN
19907 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19908 p_token_name => 'UI_TEMPLATE',
19909 p_token_value => l_source_jrad_doc,
19910 p_fatal_error => TRUE);
19911 RAISE WRONG_UI_TEMPLATE;
19912 END IF;
19913
19914 copy_UI_Page (p_source_ui_def_id => p_source_ui_def_id,
19915 p_source_ui_page_id => p_source_ui_page_id,
19916 p_target_ui_def_id => p_target_ui_def_id,
19917 p_source_xmldoc => l_source_xmldoc,
19918 x_new_ui_page_id => l_new_ui_page_id,
19919 x_new_jrad_doc => l_target_jrad_doc);
19920
19921 x_new_ui_page_id := l_new_ui_page_id;
19922
19923 translate_JRAD_Doc(l_target_jrad_doc);
19924
19925 --
19926 -- close XML parser
19927 --
19928 Close_Parser();
19929
19930 IF g_MSG_COUNT>0 THEN
19931 x_return_status := FND_API.G_RET_STS_SUCCESS;
19932 x_msg_count := g_MSG_COUNT;
19933 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19934 END IF;
19935
19936 EXCEPTION
19937 WHEN WRONG_UI_TEMPLATE THEN
19938 x_return_status := FND_API.G_RET_STS_ERROR;
19939 x_msg_count := g_MSG_COUNT;
19940 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19941 DEBUG(x_msg_data);
19942 WHEN OTHERS THEN
19943 x_return_status := FND_API.G_RET_STS_ERROR;
19944 x_msg_count := 1;
19945 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19946 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Page', x_msg_data);
19947 DEBUG('copy_UI_Page() : '||x_msg_data);
19948
19949 END copy_UI_Page;
19950
19951 --
19952 -- This procedure sets/propogates deleted_flag='1' from a given
19953 -- Page Ref record specified by parameter p_page_ref_id.
19954 -- target UI pages are not deleted.
19955 --
19956 PROCEDURE copy_UI_Page_Ref(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
19957 p_source_page_ref_id IN NUMBER, -- page_ref_id of
19958 -- Menu/Page Flow link which needs
19959 -- to be deleted.
19960 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19961 p_target_parent_page_ref_id IN NUMBER,-- new parent page ref id
19962 x_page_ref_id OUT NOCOPY NUMBER, -- template_id of
19963 -- Local UI Template which needs
19964 -- to be copied
19965 x_return_status OUT NOCOPY VARCHAR2, -- status string
19966 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19967 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19968 ) IS
19969 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
19970 l_page_ref_id_tbl number_tbl_type;
19971 l_parent_page_ref_id_tbl number_tbl_type;
19972 l_node_depth_tbl number_tbl_type;
19973 l_seq_nbr_tbl number_tbl_type;
19974 l_page_ref_arr_tbl number_tbl_type;
19975 l_new_page_ref_arr_tbl number_tbl_type;
19976 l_seq_nbr_arr_tbl number_tbl_type;
19977 l_node_depth_arr_tbl number_tbl_type;
19978 l_target_page_set_id NUMBER;
19979 l_current_page_ref_id NUMBER;
19980 l_new_page_ref_id NUMBER;
19981 l_new_parent_page_ref_id NUMBER;
19982
19983 l_condition_id NUMBER;
19984 l_caption_rule_id NUMBER;
19985 l_target_max_seq_nbr NUMBER;
19986 l_target_node_depth NUMBER;
19987 l_caption_text_id NUMBER;
19988 l_seq_nbr NUMBER;
19989 l_node_depth NUMBER;
19990
19991 BEGIN
19992
19993 --
19994 -- initialize FND variables/packages
19995 --
19996 Initialize(x_return_status,x_msg_count,x_msg_data);
19997
19998 SELECT page_set_id,node_depth INTO l_target_page_set_id,l_target_node_depth
19999 FROM CZ_UI_PAGE_REFS
20000 WHERE ui_def_id=p_target_ui_def_id AND page_ref_id=p_target_parent_page_ref_id;
20001
20002 SELECT NVL(MAX(seq_nbr),0) INTO l_target_max_seq_nbr FROM CZ_UI_PAGE_REFS
20003 WHERE ui_def_id=p_target_ui_def_id AND deleted_flag=G_NO_FLAG;
20004
20005 SELECT page_ref_id,parent_page_ref_id,node_depth,seq_nbr
20006 BULK COLLECT INTO l_page_ref_id_tbl,l_parent_page_ref_id_tbl,l_node_depth_tbl,l_seq_nbr_tbl
20007 FROM CZ_UI_PAGE_REFS
20008 START WITH ui_def_id=p_source_ui_def_id AND page_ref_id=p_source_page_ref_id
20009 CONNECT BY PRIOR ui_def_id=p_source_ui_def_id AND
20010 ui_def_id=p_source_ui_def_id AND
20011 PRIOR page_ref_id=parent_page_ref_id AND
20012 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG;
20013
20014 IF l_page_ref_id_tbl.Count>0 THEN
20015 FOR i IN l_page_ref_id_tbl.First..l_page_ref_id_tbl.Last
20016 LOOP
20017 l_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := l_parent_page_ref_id_tbl(i);
20018 l_new_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := get_Element_Id();
20019 l_seq_nbr_arr_tbl(l_page_ref_id_tbl(i)) := l_seq_nbr_tbl(i);
20020 l_node_depth_arr_tbl(l_page_ref_id_tbl(i)) := l_node_depth_tbl(i);
20021 END LOOP;
20022 END IF;
20023
20024 l_current_page_ref_id := l_page_ref_arr_tbl.First;
20025 LOOP
20026 IF l_current_page_ref_id IS NULL THEN
20027 EXIT;
20028 END IF;
20029
20030 l_new_page_ref_id := l_page_ref_arr_tbl(l_current_page_ref_id);
20031
20032 IF l_new_page_ref_arr_tbl.EXISTS(l_new_page_ref_id) THEN
20033 l_new_parent_page_ref_id := l_new_page_ref_arr_tbl(l_new_page_ref_id);
20034 ELSE
20035 l_new_parent_page_ref_id := p_target_parent_page_ref_id;
20036 x_page_ref_id := l_new_page_ref_id;
20037 END IF;
20038
20039 FOR i IN(SELECT * FROM CZ_UI_PAGE_REFS
20040 WHERE ui_def_id=p_source_ui_def_id AND
20041 page_ref_id=l_current_page_ref_id AND
20042 deleted_flag=G_NO_FLAG)
20043 LOOP
20044
20045 l_seq_nbr := l_target_max_seq_nbr + i.SEQ_NBR;
20046 l_node_depth := l_target_node_depth - l_node_depth_tbl(1) + 1;
20047
20048 copy_UI_Rule(i.condition_id, l_condition_id,
20049 p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
20050
20051 copy_UI_Rule(i.caption_rule_id, l_caption_rule_id,
20052 p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
20053
20054 l_caption_text_id := copy_Intl_Text(l_caption_text_id, p_target_ui_def_id,
20055 NULL, NULL);
20056
20057 INSERT INTO CZ_UI_PAGE_REFS
20058 (
20059 PAGE_SET_ID
20060 ,UI_DEF_ID
20061 ,PAGE_REF_ID
20062 ,PARENT_PAGE_REF_ID
20063 ,SEQ_NBR
20064 ,NODE_DEPTH
20065 ,PAGE_REF_TYPE
20066 ,CONDITION_ID
20067 ,NAME
20068 ,CAPTION_SOURCE
20069 ,CAPTION_TEXT_ID
20070 ,PERSISTENT_CAPTION_TEXT_ID
20071 ,PROPERTY_ID
20072 ,TARGET_PERSISTENT_NODE_ID
20073 ,TARGET_PATH
20074 ,TARGET_UI_DEF_ID
20075 ,TARGET_PAGE_SET_ID
20076 ,TARGET_PAGE_ID
20077 ,MODIFIED_FLAGS
20078 ,PATH_TO_PREV_PAGE
20079 ,PATH_TO_NEXT_PAGE
20080 ,DELETED_FLAG
20081 ,CAPTION_RULE_ID
20082 ,TARGET_EXPL_NODE_ID
20083 )
20084 VALUES
20085 (
20086 l_target_page_set_id
20087 ,p_target_ui_def_id
20088 ,l_new_page_ref_id
20089 ,l_new_parent_page_ref_id
20090 ,l_seq_nbr
20091 ,l_node_depth
20092 ,i.PAGE_REF_TYPE
20093 ,l_condition_id
20094 ,i.NAME
20095 ,i.CAPTION_SOURCE
20096 ,l_caption_text_id
20097 ,i.PERSISTENT_CAPTION_TEXT_ID
20098 ,i.PROPERTY_ID
20099 ,i.TARGET_PERSISTENT_NODE_ID
20100 ,i.TARGET_PATH
20101 ,i.TARGET_UI_DEF_ID
20102 ,i.TARGET_PAGE_SET_ID
20103 ,i.TARGET_PAGE_ID
20104 ,i.MODIFIED_FLAGS
20105 ,i.PATH_TO_PREV_PAGE
20106 ,i.PATH_TO_NEXT_PAGE
20107 ,i.DELETED_FLAG
20108 ,l_caption_rule_id
20109 ,i.TARGET_EXPL_NODE_ID
20110 );
20111
20112 END LOOP;
20113
20114 l_current_page_ref_id := l_page_ref_arr_tbl.NEXT(l_current_page_ref_id);
20115 END LOOP;
20116
20117 EXCEPTION
20118 WHEN OTHERS THEN
20119 x_return_status := FND_API.G_RET_STS_ERROR;
20120 x_msg_count := 1;
20121 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20122 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
20123 DEBUG('copy_UI_Page_Ref() : '||x_msg_data);
20124 END copy_UI_Page_Ref;
20125
20126 --
20127 -- This procedure creates copies of the Local Template record and its corresponding XML Jrad document. In addition, it also
20128 -- parses the source jrad document for any caption intl_text_ids or condition rule Ids and creates copies
20129 -- the Intl_text and Rule records which have seeded_flag='0'.
20130 -- the UI Elements. The Elements could also have Associated with them which need to be copied and refered in the new copy.
20131 --
20132 PROCEDURE copy_Local_Template(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
20133 p_source_template_id IN NUMBER, -- template_id of
20134 -- Local UI Template which needs
20135 -- to be copied
20136 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
20137 x_new_template_id OUT NOCOPY NUMBER, -- template_id of
20138 -- Local UI Template which needs
20139 -- to be copied
20140 x_return_status OUT NOCOPY VARCHAR2,-- status string
20141 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20142 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20143 ) IS
20144 l_source_template_xmldoc xmldom.DOMDocument;
20145 l_template_root_xml_node xmldom.DOMNode;
20146 l_xml_node xmldom.DOMNode;
20147 l_child_nodes_tbl xmldom.DOMNodeList;
20148 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20149 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20150 l_length NUMBER;
20151 l_needs_to_be_unlocked BOOLEAN;
20152
20153 BEGIN
20154
20155 --
20156 -- lock source UI Template
20157 --
20158 lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20159
20160 --
20161 -- initialize FND variables/packages
20162 --
20163 Initialize(x_return_status,x_msg_count,x_msg_data);
20164
20165 SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
20166 WHERE ui_def_id=p_source_ui_def_id AND template_id=p_source_template_id;
20167
20168 --
20169 -- open XML parser
20170 --
20171 Open_Parser();
20172
20173 --
20174 -- create UI Template in JRAD repository
20175 --
20176 l_source_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
20177
20178 IF xmldom.isNull(l_source_template_xmldoc) THEN
20179 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20180 p_token_name => 'UI_TEMPLATE',
20181 p_token_value => l_source_jrad_doc,
20182 p_fatal_error => TRUE);
20183 RAISE WRONG_UI_TEMPLATE;
20184 END IF;
20185
20186 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_source_template_xmldoc));
20187
20188 l_child_nodes_tbl := xmldom.getElementsByTagName(l_source_template_xmldoc, '*');
20189 l_length := xmldom.getLength(l_child_nodes_tbl);
20190 IF (l_length > 0) THEN
20191 FOR k IN 0..l_length-1
20192 LOOP
20193 --
20194 -- get next child DOM node
20195 --
20196 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20197 IF k > 0 THEN
20198 --
20199 -- create a new copies for corresponding entities ( captions, rules ,... )
20200 --
20201 copy_Node_Related_Entities(p_ui_def_id => p_source_ui_def_id,
20202 p_ui_page_id => NULL,
20203 p_xml_node => l_xml_node,
20204 p_target_ui_def_id => p_target_ui_def_id);
20205 END IF;
20206 END LOOP;
20207 END IF;
20208
20209 l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
20210 TO_CHAR(p_target_ui_def_id) || '/' ||
20211 get_Short_JRAD_Name(l_source_jrad_doc);
20212
20213 Save_Document(p_xml_doc => l_source_template_xmldoc,
20214 p_doc_name => l_target_jrad_doc);
20215
20216 translate_JRAD_Doc(l_target_jrad_doc);
20217
20218 --
20219 -- close XML parser
20220 --
20221 Close_Parser();
20222
20223 x_new_template_id := allocateId('CZ_UI_TEMPLATES_S');
20224
20225 INSERT INTO CZ_UI_TEMPLATES
20226 (TEMPLATE_ID,
20227 UI_DEF_ID,
20228 TEMPLATE_NAME,
20229 TEMPLATE_TYPE,
20230 TEMPLATE_DESC,
20231 PARENT_CONTAINER_TYPE,
20232 JRAD_DOC,
20233 BUTTON_BAR_TEMPLATE_ID,
20234 MESSAGE_TYPE,
20235 MAIN_MESSAGE_ID,
20236 TITLE_ID,
20237 SEEDED_FLAG,
20238 LAYOUT_UI_STYLE,
20239 ROOT_REGION_TYPE,
20240 ROOT_ELEMENT_SIGNATURE_ID,
20241 TEMPLATE_REV_NBR,
20242 TEMPLATE_USAGE,
20243 AMN_USAGE,
20244 DELETED_FLAG)
20245 SELECT
20246 x_new_template_id ,
20247 p_target_ui_def_id,
20248 TEMPLATE_NAME,
20249 TEMPLATE_TYPE,
20250 TEMPLATE_DESC,
20251 PARENT_CONTAINER_TYPE,
20252 l_target_jrad_doc,
20253 BUTTON_BAR_TEMPLATE_ID,
20254 MESSAGE_TYPE,
20255 MAIN_MESSAGE_ID,
20256 TITLE_ID,
20257 G_NO_FLAG,
20258 LAYOUT_UI_STYLE,
20259 ROOT_REGION_TYPE,
20260 ROOT_ELEMENT_SIGNATURE_ID,
20261 TEMPLATE_REV_NBR,
20262 TEMPLATE_USAGE,
20263 AMN_USAGE,
20264 G_NO_FLAG
20265 FROM CZ_UI_TEMPLATES
20266 WHERE ui_def_id=p_source_ui_def_id AND
20267 template_id=p_source_template_id;
20268
20269 INSERT INTO CZ_UI_REF_TEMPLATES
20270 (
20271 TEMPLATE_ID
20272 ,REF_TEMPLATE_ID
20273 ,DELETED_FLAG
20274 ,TEMPLATE_UI_DEF_ID
20275 ,REF_TEMPLATE_UI_DEF_ID
20276 )
20277 SELECT
20278 x_new_template_id
20279 ,REF_TEMPLATE_ID
20280 ,DELETED_FLAG
20281 ,p_target_ui_def_id
20282 ,REF_TEMPLATE_UI_DEF_ID
20283 FROM CZ_UI_REF_TEMPLATES
20284 WHERE template_id=p_source_template_id AND
20285 template_ui_def_id=p_source_ui_def_id AND
20286 deleted_flag=G_NO_FLAG;
20287
20288 --
20289 -- unlock source UI Template
20290 --
20291 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20292
20293 EXCEPTION
20294 WHEN WRONG_UI_TEMPLATE THEN
20295 x_return_status := FND_API.G_RET_STS_ERROR;
20296 x_msg_count := g_MSG_COUNT;
20297 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20298 DEBUG(x_msg_data);
20299 --
20300 -- unlock source UI Template
20301 --
20302 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20303 WHEN OTHERS THEN
20304 x_return_status := FND_API.G_RET_STS_ERROR;
20305 x_msg_count := 1;
20306 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20307 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template', x_msg_data);
20308 DEBUG('copy_Local_Template() : '||x_msg_data);
20309 --
20310 -- unlock source UI Template
20311 --
20312 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20313 END copy_Local_Template;
20314
20315 --
20316 -- This procedure creates a new copy of JRAD document specified by parameter p_source_jrad_doc
20317 -- new copy will have full JRAD path = p_target_jrad_doc
20318 --
20319 PROCEDURE copy_JRAD_Document(p_source_jrad_doc IN VARCHAR2, -- specify source JRAD document that will be copied
20320 p_target_jrad_doc IN VARCHAR2, -- specify full JRAD path of new copy
20321 x_return_status OUT NOCOPY VARCHAR2,-- status string
20322 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20323 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20324 ) IS
20325
20326 l_source_xmldoc xmldom.DOMDocument;
20327
20328 BEGIN
20329
20330 --
20331 -- initialize FND variables/packages
20332 --
20333 Initialize(x_return_status,x_msg_count,x_msg_data);
20334
20335 --
20336 -- open XML parser
20337 --
20338 Open_Parser();
20339
20340 --
20341 -- create UI Template in JRAD repository
20342 --
20343 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => p_source_jrad_doc);
20344
20345 IF xmldom.isNull(l_source_xmldoc) THEN
20346 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20347 p_token_name => 'UI_TEMPLATE',
20348 p_token_value => p_source_jrad_doc,
20349 p_fatal_error => TRUE);
20350 RAISE WRONG_UI_TEMPLATE;
20351 END IF;
20352
20353 Save_Document(p_xml_doc => l_source_xmldoc,
20354 p_doc_name => p_target_jrad_doc);
20355
20356 translate_JRAD_Doc(p_target_jrad_doc);
20357
20358 --
20359 -- close XML parser
20360 --
20361 Close_Parser();
20362
20363 EXCEPTION
20364 WHEN WRONG_UI_TEMPLATE THEN
20365 x_return_status := FND_API.G_RET_STS_ERROR;
20366 x_msg_count := g_MSG_COUNT;
20367 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20368 DEBUG(x_msg_data);
20369 WHEN OTHERS THEN
20370 x_return_status := FND_API.G_RET_STS_ERROR;
20371 x_msg_count := 1;
20372 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20373 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_JRAD_Document', x_msg_data);
20374 DEBUG('copy_JRAD_Document() : '||x_msg_data);
20375 END copy_JRAD_Document;
20376
20377 --
20378 --vsingava bug8688987 24th Jul '09
20379 -- This procedure moves the JRAD document specified by parameter p_source_jrad_doc
20380 -- from p_source_ui_def_id to p_target_ui_def_id
20381 --
20382
20383 PROCEDURE move_JRAD_Document (p_source_jrad_doc IN VARCHAR2, -- jrad_doc of a ui page to be moved
20384 p_source_page_id IN NUMBER, -- ui page_id of the page being moved
20385 p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
20386 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
20387 x_new_jrad_doc OUT NOCOPY VARCHAR2,-- jrad_doc of moved UI page doc
20388 x_return_status OUT NOCOPY VARCHAR2,-- status string
20389 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20390 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20391 ) IS
20392 BEGIN
20393 x_new_jrad_doc := SUBSTR(p_source_jrad_doc, 1, INSTR(p_source_jrad_doc, 'ui' || p_source_ui_def_id ) + 2 + LENGTH(p_source_ui_def_id ));
20394 x_new_jrad_doc := REPLACE(x_new_jrad_doc, to_char(p_source_ui_def_id), to_char(p_target_ui_def_id)) || 'Page_' || TO_CHAR(p_source_page_id);
20395 copy_JRAD_Document(p_source_jrad_doc, x_new_jrad_doc, x_return_status, x_msg_count, x_msg_data);
20396 --delete the original document
20397 BEGIN
20398 jdr_docbuilder.deleteDocument(p_source_jrad_doc);
20399 NULL;
20400 EXCEPTION
20401 WHEN OTHERS THEN
20402 DEBUG('delete_UIXML_Page() : '||SQLERRM);
20403 END;
20404 END move_JRAD_Document;
20405
20406 --
20407 -- This procedure copies subtree of Local UI Template identified by ui_def_id=p_source_ui_def_id,
20408 -- template_id=p_source_template_id and element_id=p_source_element_id to a new place identified by
20409 -- ui_def_id=p_target_ui_def_id, template_id=p_target_template_id and
20410 -- parent_element_id=p_target_parent_element_id.
20411 --
20412 PROCEDURE copy_Local_Template_Elem(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
20413 p_source_template_id IN NUMBER, -- template_id of
20414 -- Local UI Template which needs
20415 -- to be copied
20416 p_source_element_id IN VARCHAR2,
20417 p_target_ui_def_id IN NUMBER, -- ui_def_id of UI
20418 p_target_template_id IN NUMBER, -- template_id of
20419 -- Local UI Template which needs
20420 -- to be copied
20421 p_target_parent_element_id IN VARCHAR2,
20422 x_new_element_id OUT NOCOPY VARCHAR2, -- template_id of
20423 -- Local UI Template which needs
20424 -- to be copied
20425 x_return_status OUT NOCOPY VARCHAR2,-- status string
20426 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20427 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20428 ) IS
20429
20430 l_source_xmldoc xmldom.DOMDocument;
20431 l_target_xmldoc xmldom.DOMDocument;
20432 l_source_xml_node xmldom.DOMNode;
20433 l_xml_uicont_node xmldom.DOMNode;
20434 l_xml_new_node xmldom.DOMNode;
20435 l_target_xml_node xmldom.DOMNode;
20436 l_new_xml_root_node xmldom.DOMNode;
20437 l_out_xml_node xmldom.DOMNode;
20438 l_target_uicont_xml_node xmldom.DOMNode;
20439 l_xml_temp_node xmldom.DOMNode;
20440 l_stacklayout_node xmldom.DOMNode;
20441 l_stacklayout_uicont_xml_node xmldom.DOMNode;
20442 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20443 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20444 l_needs_to_be_unlocked BOOLEAN;
20445 BEGIN
20446
20447 --
20448 -- lock source UI Template
20449 --
20450 lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20451
20452 --
20453 -- initialize FND variables/packages
20454 --
20455 Initialize(x_return_status,x_msg_count,x_msg_data);
20456
20457 SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
20458 WHERE ui_def_id=p_source_ui_def_id AND
20459 template_id=p_source_template_id;
20460
20461 SELECT jrad_doc INTO l_target_jrad_doc FROM CZ_UI_TEMPLATES
20462 WHERE ui_def_id=p_target_ui_def_id AND
20463 template_id=p_target_template_id;
20464
20465 --
20466 -- open XML parser
20467 --
20468 Open_Parser();
20469
20470 --
20471 -- create UI Template in JRAD repository
20472 --
20473 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
20474
20475 IF xmldom.isNull(l_source_xmldoc) THEN
20476 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20477 p_token_name => 'UI_TEMPLATE',
20478 p_token_value => l_source_jrad_doc,
20479 p_fatal_error => TRUE);
20480 RAISE WRONG_UI_TEMPLATE;
20481 END IF;
20482
20483 --
20484 -- create UI Template in JRAD repository
20485 --
20486 l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
20487
20488 IF xmldom.isNull(l_target_xmldoc) THEN
20489 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20490 p_token_name => 'UI_TEMPLATE',
20491 p_token_value => l_target_jrad_doc,
20492 p_fatal_error => TRUE);
20493 RAISE WRONG_UI_TEMPLATE;
20494 END IF;
20495
20496 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
20497 p_attribute_name => G_ID_ATTRIBUTE,
20498 p_attribute_value => p_source_element_id);
20499
20500 IF p_target_parent_element_id IS NULL THEN
20501 l_target_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_target_xmldoc));
20502 ELSE
20503 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
20504 p_attribute_name => G_ID_ATTRIBUTE,
20505 p_attribute_value => p_target_parent_element_id);
20506 END IF;
20507
20508 l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
20509
20510 IF xmldom.IsNull(l_target_uicont_xml_node) THEN
20511 l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20512 l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
20513 l_xml_temp_node);
20514 END IF;
20515
20516 --
20517 -- returns cloned DOM subtree
20518 --
20519 -- l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
20520 l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
20521
20522 x_new_element_id := get_Element_Id();
20523
20524 set_Attribute(l_new_xml_root_node,
20525 G_ID_ATTRIBUTE,
20526 x_new_element_id);
20527
20528 copy_User_Attributes(p_xml_node => l_new_xml_root_node,
20529 p_source_ui_def_id => p_source_ui_def_id,
20530 p_target_ui_def_id => p_target_ui_def_id,
20531 p_source_template_id => p_source_template_id,
20532 p_target_template_id => p_target_template_id);
20533
20534 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
20535 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20536
20537 l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
20538 l_xml_new_node);
20539
20540 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20541 l_new_xml_root_node);
20542
20543 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
20544 l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
20545 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
20546 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
20547
20548 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
20549 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
20550 l_xml_new_node);
20551
20552 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20553 l_new_xml_root_node);
20554
20555 ELSE
20556 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
20557 l_new_xml_root_node);
20558 END IF;
20559
20560 ELSE
20561 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20562 l_new_xml_root_node);
20563
20564 END IF;
20565
20566 refresh_Templ_Ref_Counts(l_target_xmldoc, p_target_ui_def_id, p_target_template_id);
20567
20568 Save_Document(p_xml_doc => l_target_xmldoc,
20569 p_doc_name => l_target_jrad_doc);
20570
20571 --
20572 -- close XML parser
20573 --
20574 Close_Parser();
20575
20576 /* *** changes for build 21p *** */
20577
20578 UPDATE CZ_UI_TEMPLATES
20579 SET template_rev_nbr=NVL(template_rev_nbr,0)+1
20580 WHERE ui_def_id=p_target_ui_def_id AND template_id=p_target_template_id;
20581
20582 --
20583 -- unlock source UI Template
20584 --
20585 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20586
20587 EXCEPTION
20588 WHEN WRONG_UI_TEMPLATE THEN
20589 x_return_status := FND_API.G_RET_STS_ERROR;
20590 x_msg_count := g_MSG_COUNT;
20591 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20592 DEBUG(x_msg_data);
20593 --
20594 -- unlock source UI Template
20595 --
20596 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20597
20598 WHEN OTHERS THEN
20599 x_return_status := FND_API.G_RET_STS_ERROR;
20600 x_msg_count := 1;
20601 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20602 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template_Elem', x_msg_data);
20603 DEBUG('copy_Local_Template_Elem() : '||x_msg_data);
20604 --
20605 -- unlock source UI Template
20606 --
20607 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
20608
20609 END copy_Local_Template_Elem;
20610
20611 --
20612 -- create UI Region from Template
20613 --
20614 PROCEDURE create_Region_From_Template (p_ui_def_id IN NUMBER, -- ui_def_id of UI
20615 p_template_id IN NUMBER, -- template_id of
20616 -- Local UI Template which needs
20617 -- to be copied
20618 p_template_ui_def_id IN NUMBER,
20619 p_ui_page_id IN NUMBER,
20620 p_parent_element_id IN VARCHAR2, -- ui_def_id of target UI
20621 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of new UI region
20622 x_return_status OUT NOCOPY VARCHAR2,-- status string
20623 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20624 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20625 ) IS
20626
20627 l_template_xmldoc xmldom.DOMDocument;
20628 l_xmldoc xmldom.DOMDocument;
20629 l_template_root_xml_node xmldom.DOMNode;
20630 l_parent_xml_node xmldom.DOMNode;
20631 l_out_xml_node xmldom.DOMNode;
20632 l_target_uicont_xml_node xmldom.DOMNode;
20633 l_new_xml_root_node xmldom.DOMNode;
20634 l_xml_node xmldom.DOMNode;
20635
20636 l_source_xml_node xmldom.DOMNode;
20637 l_xml_uicont_node xmldom.DOMNode;
20638 l_xml_new_node xmldom.DOMNode;
20639 l_target_xml_node xmldom.DOMNode;
20640 l_stacklayout_node xmldom.DOMNode;
20641 l_stacklayout_uicont_xml_node xmldom.DOMNode;
20642
20643 l_switcher_element_id VARCHAR2(255);
20644 l_old_ui_element_id VARCHAR2(255);
20645 l_new_ui_element_id VARCHAR2(255);
20646 l_old_switcher_xml_id VARCHAR2(255);
20647 l_user_attribute3_value VARCHAR2(4000);
20648 l_switcher_casename VARCHAR2(255);
20649 l_switcher_xml_id VARCHAR2(255);
20650 l_uicase_name VARCHAR2(255);
20651 l_child_nodes_tbl xmldom.DOMNodeList;
20652 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20653 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20654 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
20655 l_attribute_value VARCHAR2(255);
20656 l_length NUMBER;
20657 l_needs_to_be_unlocked BOOLEAN;
20658
20659 BEGIN
20660
20661 --
20662 -- lock source UI Template
20663 --
20664 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20665
20666 --
20667 -- initialize FND variables/packages
20668 --
20669 Initialize(x_return_status,x_msg_count,x_msg_data);
20670
20671 set_Local_UI_Context(p_ui_def_id);
20672
20673 --
20674 -- get full JRAD path of the given UI template
20675 --
20676 SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
20677 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
20678
20679 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES a
20680 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id;
20681
20682
20683 --
20684 -- open XML parser
20685 --
20686 Open_Parser();
20687
20688 --
20689 -- create UI Template in JRAD repository
20690 --
20691 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20692
20693 IF xmldom.isNull(l_template_xmldoc) THEN
20694 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20695 p_token_name => 'UI_TEMPLATE',
20696 p_token_value => l_template_jrad_doc,
20697 p_fatal_error => TRUE);
20698 RAISE WRONG_UI_TEMPLATE;
20699 END IF;
20700
20701 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
20702
20703 IF xmldom.isNull(l_xmldoc) THEN
20704 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20705 p_token_name => 'UI_TEMPLATE',
20706 p_token_value => l_jrad_doc,
20707 p_fatal_error => TRUE);
20708 RAISE WRONG_UI_TEMPLATE;
20709 END IF;
20710
20711 l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
20712 p_attribute_name => G_ID_ATTRIBUTE,
20713 p_attribute_value => p_parent_element_id);
20714
20715 l_ui_node := find_Parent_UI_Element(p_xml_node => l_parent_xml_node,
20716 p_ui_def_id => p_ui_def_id,
20717 p_ui_page_id => p_ui_page_id);
20718
20719 l_target_uicont_xml_node := getUIContents(l_parent_xml_node);
20720
20721 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
20722
20723 x_new_element_id := get_Element_Id();
20724
20725 set_Attribute(l_template_root_xml_node,
20726 G_ID_ATTRIBUTE,
20727 x_new_element_id);
20728
20729 handle_USER_ATTRIBUTE10(p_xml_root_node => l_template_root_xml_node,
20730 p_ui_def_id => p_ui_def_id,
20731 p_ui_page_id => p_ui_page_id,
20732 p_ui_element_id => x_new_element_id);
20733
20734 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
20735 l_length := xmldom.getLength(l_child_nodes_tbl);
20736 IF (l_length > 0) THEN
20737 FOR k IN 0..l_length-1
20738 LOOP
20739 --
20740 -- get next child DOM node
20741 --
20742 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20743
20744 handle_UI_CASE_Id(l_xml_node);
20745
20746 IF k > 0 THEN
20747 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
20748
20749 /*
20750 IF l_attribute_value IS NOT NULL THEN
20751 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,l_attribute_value||'_'||x_new_element_id);
20752 --
20753 -- create a new copies for corresponding entities ( captions, rules ,... )
20754 --
20755 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
20756 p_ui_page_id => p_ui_page_id,
20757 p_xml_node => l_xml_node);
20758 */
20759 l_parent_xml_node := xmldom.getParentNode(l_xml_node);
20760 IF l_attribute_value IS NOT NULL THEN
20761 --l_parent_xml_node := xmldom.getParentNode(l_xml_node);
20762
20763 IF xmldom.getNodeName(l_xml_node)='ui:case' OR
20764 ( NOT(xmldom.isNull(l_parent_xml_node)) AND xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
20765 xmldom.getNodeName(l_parent_xml_node)='ui:case') THEN
20766
20767 l_switcher_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:switcher');
20768
20769 l_old_ui_element_id := SUBSTR(l_attribute_value,1,INSTR(l_attribute_value, '_')-1);
20770
20771 l_new_ui_element_id := REPLACE(REPLACE(REPLACE(l_attribute_value,
20772 l_old_ui_element_id,
20773 l_switcher_element_id),'_czt','_czn'),'_czc','_czn');
20774 set_Attribute(xmldom.makeElement(l_xml_node),
20775 G_ID_ATTRIBUTE,
20776 l_new_ui_element_id);
20777
20778 IF xmldom.getNodeName(l_parent_xml_node)='oa:switcher' THEN
20779 l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
20780 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
20781 set_Attribute(xmldom.makeElement(l_xml_node),
20782 'name',
20783 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20784 END IF;
20785 --
20786 -- if current tag is <oa:stackLayout>
20787 -- then replace old id with new one
20788 --
20789
20790 IF (xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
20791 xmldom.getNodeName(l_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL
20792 THEN
20793 set_Attribute(xmldom.makeElement(l_xml_node),
20794 G_ID_ATTRIBUTE,
20795 REPLACE(REPLACE(get_Attribute_Value(l_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
20796 END IF;
20797 ELSE
20798 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
20799 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
20800 l_old_switcher_xml_id := l_attribute_value;
20801 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
20802 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
20803 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
20804 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
20805 p_cz_attribute_value => l_switcher_casename,
20806 px_xml_attribute_value => l_user_attribute3_value);
20807
20808 set_Attribute(l_xml_node,
20809 G_USER_ATTRIBUTE3_NAME,
20810 l_user_attribute3_value);
20811 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='oa:switcher'
20812 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='ui:case'
20813 --
20814 -- create a new copies for corresponding entities ( captions, rules ,... )
20815 --
20816 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
20817 p_ui_page_id => p_ui_page_id,
20818 p_xml_node => l_xml_node,
20819 p_source_ui_page_id =>0,
20820 p_source_ui_def_id =>p_template_ui_def_id);
20821
20822 ELSE --of IF l_attribute_value IS NOT NULL
20823
20824 --
20825 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
20826 --
20827
20828 IF (xmldom.getNodeName(l_xml_node)='ui:case' AND xmldom.getNodeName(l_parent_xml_node)='oa:switcher')
20829 THEN
20830 l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
20831 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
20832 set_Attribute(xmldom.makeElement(l_xml_node),
20833 'name',
20834 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20835
20836 handle_UI_CASE_Id(l_xml_node);
20837 END IF;
20838
20839 END IF; -- end of IF l_attribute_value IS NOT NULL
20840
20841 --++++++ add template references ++++++
20842 add_Extends_Refs(p_xml_node => l_xml_node,
20843 p_ui_node => l_ui_node);
20844
20845 END IF; -- end of IF k > 0
20846 END LOOP;
20847 END IF;
20848
20849 --
20850 -- returns cloned DOM subtree
20851 --
20852 -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
20853 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_target_uicont_xml_node);
20854
20855
20856 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
20857 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
20858 l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
20859 l_xml_new_node);
20860 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20861 l_new_xml_root_node);
20862
20863 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
20864
20865 l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
20866 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
20867 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
20868
20869 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
20870 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
20871 l_xml_new_node);
20872 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
20873 l_new_xml_root_node);
20874
20875 ELSE
20876 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
20877 l_new_xml_root_node);
20878 END IF;
20879
20880 ELSE
20881 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20882 l_new_xml_root_node);
20883
20884 END IF;
20885
20886 Save_Document(p_xml_doc => l_xmldoc,
20887 p_doc_name => l_jrad_doc);
20888
20889 --
20890 -- close XML parser
20891 --
20892 Close_Parser();
20893
20894 UPDATE CZ_UI_PAGES
20895 SET page_rev_nbr=page_rev_nbr+1
20896 WHERE ui_def_id=p_ui_def_id AND
20897 page_id=p_ui_page_id;
20898
20899 --
20900 -- unlock source UI Template
20901 --
20902 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20903
20904 EXCEPTION
20905 WHEN WRONG_UI_TEMPLATE THEN
20906 x_return_status := FND_API.G_RET_STS_ERROR;
20907 x_msg_count := g_MSG_COUNT;
20908 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20909 DEBUG(x_msg_data);
20910 --
20911 -- unlock source UI Template
20912 --
20913 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20914
20915 WHEN OTHERS THEN
20916 x_return_status := FND_API.G_RET_STS_ERROR;
20917 x_msg_count := 1;
20918 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20919 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_Region_From_Template', x_msg_data);
20920 DEBUG('create_Region_From_Template() : '||x_msg_data);
20921 --
20922 -- unlock source UI Template
20923 --
20924 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20925
20926 END create_Region_From_Template;
20927
20928 PROCEDURE add_Template_To_Template (p_template_id IN NUMBER,
20929 p_template_ui_def_id IN NUMBER,
20930 p_target_template_id IN NUMBER,
20931 p_target_template_ui_def_id IN NUMBER,
20932 p_parent_element_id IN VARCHAR2, -- ui_def_id of target UI
20933 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of new UI region
20934 x_return_status OUT NOCOPY VARCHAR2,-- status string
20935 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20936 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20937 ) IS
20938
20939 l_template_xmldoc xmldom.DOMDocument;
20940 l_xmldoc xmldom.DOMDocument;
20941 l_template_root_xml_node xmldom.DOMNode;
20942 l_parent_xml_node xmldom.DOMNode;
20943 l_temp_parent_xml_node xmldom.DOMNode;
20944 l_out_xml_node xmldom.DOMNode;
20945 l_target_uicont_xml_node xmldom.DOMNode;
20946 l_new_xml_root_node xmldom.DOMNode;
20947 l_xml_node xmldom.DOMNode;
20948 l_stacklayout_node xmldom.DOMNode;
20949 l_xml_new_node xmldom.DOMNode;
20950 l_xml_uicont_node xmldom.DOMNode;
20951 l_stacklayout_uicont_xml_node xmldom.DOMNode;
20952 l_xml_switcher_id VARCHAR2(255);
20953 l_switcher_element_id VARCHAR2(255);
20954 l_old_ui_element_id VARCHAR2(255);
20955 l_new_ui_element_id VARCHAR2(255);
20956 l_user_attribute3_value VARCHAR2(4000);
20957 l_switcher_casename VARCHAR2(255);
20958 l_child_nodes_tbl xmldom.DOMNodeList;
20959 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20960 l_target_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20961 l_attribute_value VARCHAR2(255);
20962 l_length NUMBER;
20963 l_needs_to_be_unlocked BOOLEAN;
20964 BEGIN
20965
20966 --
20967 -- lock source UI Template
20968 --
20969 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20970
20971 --
20972 -- initialize FND variables/packages
20973 --
20974 Initialize(x_return_status,x_msg_count,x_msg_data);
20975
20976 --
20977 -- get full JRAD path of the given UI template
20978 --
20979 SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
20980 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
20981
20982 SELECT jrad_doc INTO l_target_template_jrad_doc FROM CZ_UI_TEMPLATES
20983 WHERE ui_def_id=p_target_template_ui_def_id AND template_id=p_target_template_id;
20984
20985 --
20986 -- open XML parser
20987 --
20988 Open_Parser();
20989
20990 --
20991 -- create UI Template in JRAD repository
20992 --
20993 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20994
20995 IF xmldom.isNull(l_template_xmldoc) THEN
20996 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20997 p_token_name => 'UI_TEMPLATE',
20998 p_token_value => l_template_jrad_doc,
20999 p_fatal_error => TRUE);
21000
21001 RAISE WRONG_UI_TEMPLATE;
21002 END IF;
21003
21004 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_template_jrad_doc);
21005
21006 IF xmldom.isNull(l_xmldoc) THEN
21007 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21008 p_token_name => 'UI_TEMPLATE',
21009 p_token_value => l_template_jrad_doc,
21010 p_fatal_error => TRUE);
21011 RAISE WRONG_UI_TEMPLATE;
21012 END IF;
21013
21014 IF p_parent_element_id IS NULL THEN
21015 l_parent_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_xmldoc));
21016 ELSE
21017 l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
21018 p_attribute_name => G_ID_ATTRIBUTE,
21019 p_attribute_value => p_parent_element_id);
21020 END IF;
21021
21022 l_target_uicont_xml_node := getUIContents(l_parent_xml_node,G_YES_FLAG);
21023
21024 l_template_root_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
21025
21026 x_new_element_id := get_Element_Id();
21027
21028 l_new_ui_element_id := x_new_element_id;
21029
21030 set_Attribute(l_template_root_xml_node,
21031 G_ID_ATTRIBUTE,
21032 x_new_element_id);
21033
21034 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
21035 l_length := xmldom.getLength(l_child_nodes_tbl);
21036 IF (l_length > 0) THEN
21037 FOR k IN 0..l_length-1
21038 LOOP
21039 --
21040 -- get next child DOM node
21041 --
21042 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
21043
21044 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
21045 l_new_ui_element_id := l_attribute_value||'_'||x_new_element_id;
21046
21047 handle_Special_XMLCases(p_xml_node => l_xml_node,
21048 p_old_xml_node_id => l_attribute_value,
21049 p_new_xml_node_id => l_new_ui_element_id,
21050 p_jrad_doc => l_template_jrad_doc,
21051 px_xml_switcher_id => l_xml_switcher_id,
21052 p_inline_copy_mode => G_INLINE_COPY_TMPL);
21053
21054
21055 IF k > 0 THEN
21056
21057 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
21058
21059 IF l_user_attribute3_value IS NOT NULL THEN
21060
21061 handle_Template_Attributes
21062 (px_user_attribute_value => l_user_attribute3_value,
21063 p_new_element_id => l_new_ui_element_id,
21064 p_source_ui_def_id => p_template_ui_def_id,
21065 p_source_template_id => p_template_id,
21066 p_target_ui_def_id => p_target_template_ui_def_id,
21067 p_target_template_id => p_target_template_id,
21068 p_xml_node => l_xml_node);
21069
21070 set_Attribute(l_xml_node,
21071 G_USER_ATTRIBUTE3_NAME,
21072 l_user_attribute3_value);
21073
21074 END IF; -- end of IF l_attribute_value IS NOT NULL
21075
21076 END IF; -- end of IF k > 0
21077 END LOOP;
21078 END IF;
21079
21080 --
21081 -- remove common attributes of container and subtree
21082 --
21083 remove_TopLevel_Attributes(l_template_root_xml_node);
21084
21085
21086 --
21087 -- returns cloned DOM subtree
21088 --
21089 -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
21090 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_parent_xml_node);
21091
21092
21093 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
21094 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
21095 l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
21096 l_xml_new_node);
21097 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
21098 l_new_xml_root_node);
21099 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
21100 l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
21101 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
21102 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
21103
21104 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
21105 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
21106 l_xml_new_node);
21107 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
21108 l_new_xml_root_node);
21109
21110 ELSE
21111 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
21112 l_new_xml_root_node);
21113 END IF;
21114
21115 ELSE
21116 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
21117 l_new_xml_root_node);
21118 END IF;
21119
21120 refresh_Templ_Ref_Counts(l_xmldoc, p_target_template_ui_def_id, p_target_template_id);
21121
21122 Save_Document(p_xml_doc => l_xmldoc,
21123 p_doc_name => l_target_template_jrad_doc);
21124
21125 --
21126 -- close XML parser
21127 --
21128 Close_Parser();
21129
21130 UPDATE CZ_UI_TEMPLATES
21131 SET template_rev_nbr=template_rev_nbr+1
21132 WHERE template_id=p_target_template_id AND
21133 ui_def_id=p_target_template_ui_def_id;
21134
21135 --
21136 -- unlock source UI Template
21137 --
21138 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21139
21140 EXCEPTION
21141 WHEN WRONG_UI_TEMPLATE THEN
21142 x_return_status := FND_API.G_RET_STS_ERROR;
21143 x_msg_count := g_MSG_COUNT;
21144 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
21145 DEBUG(x_msg_data);
21146 --
21147 -- unlock source UI Template
21148 --
21149 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21150
21151 WHEN OTHERS THEN
21152 x_return_status := FND_API.G_RET_STS_ERROR;
21153 x_msg_count := 1;
21154 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21155 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'add_Template_To_Template', x_msg_data);
21156 DEBUG('create_Region_From_Template() : '||x_msg_data);
21157 --
21158 -- unlock source UI Template
21159 --
21160 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
21161
21162 END add_Template_To_Template;
21163
21164 --
21165 -- create UI Region from Template
21166 -- This procedure works for both UI pages and UI templates
21167 -- Developer calls this procedure for converting UI template reference
21168 -- within either UI page or UI template
21169 -- If p_ui_def_id = 0 then this is a template case and template_id is passed to p_ui_page_id
21170 -- interface needs to be changed if we implement local UI templates, since the code uses ui_def_id = 0
21171 -- to tell when it is working with templates
21172 --
21173 PROCEDURE convert_Template_Reference (p_ui_def_id IN NUMBER,
21174 p_ui_page_id IN NUMBER,
21175 p_element_id IN VARCHAR2,
21176 x_return_status OUT NOCOPY VARCHAR2,-- status string
21177 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
21178 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
21179 ) IS
21180
21181 l_template_xmldoc xmldom.DOMDocument;
21182 l_xmldoc xmldom.DOMDocument;
21183 l_template_root_xml_node xmldom.DOMNode;
21184 l_out_xml_node xmldom.DOMNode;
21185 l_curr_parent_xml_node xmldom.DOMNode;
21186 l_new_xml_root_node xmldom.DOMNode;
21187 l_xml_node xmldom.DOMNode;
21188 l_root_xml_node xmldom.DOMNode;
21189 l_parent_xml_node xmldom.DOMNode;
21190 l_child_nodes_tbl xmldom.DOMNodeList;
21191 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
21192 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
21193 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
21194 l_node_map_tbl xmldom.DOMNamedNodeMap;
21195 l_node_attr xmldom.DOMNode;
21196 l_prev_xml_node xmldom.DOMNode;
21197 l_root_attr_names_tbl varchar_tbl_type;
21198 l_root_attr_values_tbl varchar_tbl_type;
21199
21200 l_root_element_signature_id NUMBER;
21201 l_attr_value VARCHAR2(32000);
21202 l_attribute_value VARCHAR2(32000);
21203 l_user4_attribute_value VARCHAR2(32000);
21204 l_new_id_attribute VARCHAR2(32000);
21205 l_new_attribute_value VARCHAR2(32000);
21206 l_switcher_element_id VARCHAR2(4000);
21207 l_old_ui_element_id VARCHAR2(4000);
21208 l_new_ui_element_id VARCHAR2(4000);
21209 l_old_switcher_xml_id VARCHAR2(4000);
21210 l_switcher_casename VARCHAR2(4000);
21211 l_xml_node_name VARCHAR2(4000);
21212 l_switcher_xml_id VARCHAR2(4000);
21213 l_uicase_name VARCHAR2(4000);
21214 l_hgrid_element_id VARCHAR2(4000);
21215 l_ancestor_node VARCHAR2(4000);
21216 l_user_attribute3_value VARCHAR2(32000);
21217 l_extends_attribute VARCHAR2(255);
21218 l_id_attribute VARCHAR2(255);
21219 l_ref_template_id NUMBER;
21220 l_target_ref_count NUMBER;
21221 l_ref_count NUMBER;
21222 l_length NUMBER;
21223 l_index NUMBER;
21224
21225 BEGIN
21226
21227 set_Local_UI_Context(p_ui_def_id);
21228
21229 --
21230 -- initialize FND variables/packages
21231 --
21232 Initialize(x_return_status,x_msg_count,x_msg_data);
21233
21234 IF (p_ui_def_id=0) THEN
21235 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
21236 WHERE template_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
21237 ELSE
21238 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
21239 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
21240
21241 END IF;
21242
21243 --
21244 -- open XML parser
21245 --
21246 Open_Parser();
21247
21248 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
21249
21250 IF xmldom.isNull(l_xmldoc) THEN
21251 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21252 p_token_name => 'UI_TEMPLATE',
21253 p_token_value => l_jrad_doc,
21254 p_fatal_error => TRUE);
21255 RAISE WRONG_UI_TEMPLATE;
21256 END IF;
21257
21258 l_root_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
21259 p_attribute_name => G_ID_ATTRIBUTE,
21260 p_attribute_value => p_element_id);
21261
21262 l_id_attribute := get_Attribute_Value(l_root_xml_node,
21263 G_ID_ATTRIBUTE);
21264
21265 IF p_ui_def_id<>0 THEN
21266
21267 l_ui_node := find_Parent_UI_Element(p_xml_node => l_root_xml_node,
21268 p_ui_def_id => p_ui_def_id,
21269 p_ui_page_id => p_ui_page_id);
21270
21271 IF l_ui_node.persistent_node_id IS NULL OR l_ui_node.persistent_node_id=0 THEN
21272 l_ui_node.element_id := l_ui_node.parent_element_id;
21273 UPDATE CZ_UI_PAGE_ELEMENTS
21274 SET deleted_flag=G_YES_FLAG
21275 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
21276 element_id=p_element_id;
21277 ELSE
21278 l_ui_node.element_id := p_element_id;
21279 END IF;
21280
21281 END IF;
21282
21283 l_new_id_attribute := get_Element_Id();
21284
21285 l_extends_attribute := get_Attribute_Value(l_root_xml_node,
21286 'extends');
21287 BEGIN
21288 SELECT template_id, jrad_doc, root_element_signature_id
21289 INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id
21290 FROM CZ_UI_TEMPLATES
21291 WHERE ui_def_id=p_ui_def_id AND jrad_doc=l_extends_attribute AND
21292 deleted_flag=G_NO_FLAG;
21293 EXCEPTION
21294 WHEN NO_DATA_FOUND THEN
21295 SELECT template_id, jrad_doc, root_element_signature_id
21296 INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id FROM CZ_UI_TEMPLATES
21297 WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
21298 jrad_doc=l_extends_attribute AND
21299 deleted_flag=G_NO_FLAG;
21300 END;
21301
21302
21303 IF p_ui_def_id = 0 THEN
21304 SELECT ref_count
21305 INTO l_ref_count
21306 FROM CZ_UI_REF_TEMPLATES
21307 WHERE template_id=p_ui_page_id AND
21308 ref_template_id=l_ref_template_id AND
21309 deleted_flag=G_NO_FLAG;
21310
21311 IF l_ref_count=1 THEN
21312 DELETE FROM CZ_UI_REF_TEMPLATES
21313 WHERE template_id=p_ui_page_id AND
21314 ref_template_id=l_ref_template_id AND
21315 deleted_flag=G_NO_FLAG;
21316 ELSIF l_ref_count>1 THEN
21317 UPDATE CZ_UI_REF_TEMPLATES
21318 SET ref_count = ref_count-1
21319 WHERE template_id=p_ui_page_id AND
21320 ref_template_id=l_ref_template_id AND
21321 deleted_flag=G_NO_FLAG;
21322 END IF;
21323
21324 FOR reft IN (SELECT * FROM CZ_UI_REF_TEMPLATES
21325 WHERE template_id=l_ref_template_id AND
21326 deleted_flag=G_NO_FLAG)
21327 LOOP
21328
21329 SELECT NVL(MAX(ref_count),0) INTO l_target_ref_count FROM CZ_UI_REF_TEMPLATES
21330 WHERE template_id=p_ui_page_id AND
21331 ref_template_id=reft.ref_template_id AND
21332 deleted_flag=G_NO_FLAG;
21333
21334 IF l_target_ref_count=0 THEN
21335
21336 INSERT INTO CZ_UI_REF_TEMPLATES
21337 (
21338 TEMPLATE_ID
21339 ,REF_TEMPLATE_ID
21340 ,DELETED_FLAG
21341 ,TEMPLATE_UI_DEF_ID
21342 ,REF_TEMPLATE_UI_DEF_ID
21343 ,SEEDED_FLAG
21344 ,REF_TEMPL_SEEDED_FLAG
21345 ,REF_COUNT
21346 )
21347 VALUES
21348 (
21349 p_ui_page_id
21350 ,reft.ref_template_id
21351 ,G_NO_FLAG
21352 ,p_ui_def_id
21353 ,reft.REF_TEMPLATE_UI_DEF_ID
21354 ,G_NO_FLAG
21355 ,reft.REF_TEMPL_SEEDED_FLAG
21356 ,reft.ref_count
21357 );
21358
21359 ELSE
21360
21361 UPDATE CZ_UI_REF_TEMPLATES
21362 SET ref_count=ref_count+l_target_ref_count
21363 WHERE template_id=p_ui_page_id AND
21364 ref_template_id=reft.ref_template_id AND
21365 deleted_flag=G_NO_FLAG;
21366
21367 END IF;
21368
21369 END LOOP;
21370
21371 END IF;
21372
21373
21374 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
21375
21376 IF xmldom.isNull(l_template_xmldoc) THEN
21377 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
21378 p_token_name => 'UI_TEMPLATE',
21379 p_token_value => l_template_jrad_doc,
21380 p_fatal_error => TRUE);
21381 RAISE WRONG_UI_TEMPLATE;
21382 END IF;
21383
21384 l_parent_xml_node := xmldom.getParentNode(l_root_xml_node);
21385 l_prev_xml_node := xmldom.getNextSibling(l_root_xml_node);
21386
21387 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
21388
21389 l_node_map_tbl := xmldom.getAttributes(l_root_xml_node);
21390 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
21391 l_length := xmldom.getLength(l_node_map_tbl);
21392 --
21393 -- loop through attributes
21394 --
21395 FOR i IN 0 .. l_length - 1
21396 LOOP
21397 l_node_attr := xmldom.item(l_node_map_tbl, i);
21398 IF xmldom.getNodeName(l_node_attr) <> 'extends' THEN
21399 l_index := l_root_attr_names_tbl.COUNT + 1;
21400 l_root_attr_names_tbl(l_index) := xmldom.getNodeName(l_node_attr);
21401 l_root_attr_values_tbl(l_index):= xmldom.getNodeValue(l_node_attr);
21402 END IF;
21403 END LOOP;
21404 END IF;
21405
21406 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
21407 l_length := xmldom.getLength(l_child_nodes_tbl);
21408 IF (l_length > 0) THEN
21409 FOR k IN 0..l_length-1
21410 LOOP
21411 --
21412 -- get next child DOM node
21413 --
21414 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
21415 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
21416
21417 IF k > 0 THEN
21418
21419 l_xml_node_name := xmldom.getNodeName(l_xml_node);
21420
21421 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
21422
21423 IF l_attribute_value IS NOT NULL THEN --???
21424 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,l_new_id_attribute);
21425 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
21426 END IF;
21427
21428 l_ancestor_node := get_Attribute_Value(l_xml_node,
21429 'ancestorNode');
21430 IF l_ancestor_node IS NOT NULL THEN
21431
21432 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
21433 IF NOT(xmldom.IsNull(l_xml_node)) THEN
21434 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
21435
21436 set_Attribute(l_xml_node,
21437 'ancestorNode',
21438 l_ancestor_node);
21439 END IF;
21440 END IF;
21441
21442 --
21443 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
21444 --
21445 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
21446 l_old_switcher_xml_id := l_attribute_value;
21447 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
21448 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
21449 l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
21450 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
21451 p_cz_attribute_value => l_switcher_casename,
21452 px_xml_attribute_value => l_user_attribute3_value);
21453
21454 set_Attribute(l_xml_node,
21455 G_USER_ATTRIBUTE3_NAME,
21456 l_user_attribute3_value);
21457 END IF;
21458
21459 --
21460 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
21461 --
21462 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
21463 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
21464 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
21465 set_Attribute(xmldom.makeElement(l_xml_node),
21466 'name',
21467 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
21468 handle_UI_CASE_Id(l_xml_node);
21469 END IF;
21470
21471 --
21472 -- if current tag is <oa:stackLayout>
21473 -- then replace old id with new one
21474 --
21475 IF (l_xml_node_name='oa:stackLayout' AND
21476 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
21477 set_Attribute(xmldom.makeElement(l_xml_node),
21478 G_ID_ATTRIBUTE,
21479 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
21480 END IF;
21481
21482 IF l_attribute_value IS NOT NULL THEN
21483 --
21484 -- create a new copies for corresponding entities ( captions, rules ,... )
21485 --
21486 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
21487 p_ui_page_id => p_ui_page_id,
21488 p_xml_node => l_xml_node,
21489 p_source_ui_page_id =>0,
21490 p_source_ui_def_id =>0);
21491 END IF;
21492
21493 IF p_ui_def_id <> 0 THEN
21494 --++++++ add template references ++++++
21495 add_Extends_Refs(p_xml_node => l_xml_node,
21496 p_ui_node => l_ui_node);
21497 END IF;
21498
21499 END IF; -- end of IF k > 0 THEN
21500 END LOOP; -- end of FOR k IN 0..l_length-1
21501 END IF; -- end of IF (l_length > 0) THEN
21502
21503 l_out_xml_node:=xmldom.removeChild(l_parent_xml_node,l_root_xml_node);
21504
21505 --
21506 -- remove common attributes of container and subtree
21507 --
21508 remove_TopLevel_Attributes(l_template_root_xml_node);
21509
21510 --
21511 -- returns cloned DOM subtree
21512 --
21513 --l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
21514 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_root_xml_node);
21515
21516 l_out_xml_node := insert_before(l_parent_xml_node,l_new_xml_root_node,l_prev_xml_node);
21517
21518
21519 IF l_root_attr_names_tbl.COUNT > 0 THEN
21520 FOR i IN l_root_attr_names_tbl.First..l_root_attr_names_tbl.Last
21521 LOOP
21522 IF l_root_attr_names_tbl(i)=G_USER_ATTRIBUTE4_NAME THEN
21523 l_user4_attribute_value := l_root_attr_values_tbl(i);
21524 set_User_Attribute(p_cz_attribute_name => 'elementType',
21525 p_cz_attribute_value => l_root_element_signature_id,
21526 px_xml_attribute_value => l_user4_attribute_value);
21527 set_Attribute(l_out_xml_node, G_USER_ATTRIBUTE4_NAME, l_user4_attribute_value);
21528 ELSE
21529 set_Attribute(l_out_xml_node, l_root_attr_names_tbl(i), l_root_attr_values_tbl(i));
21530 END IF;
21531
21532 END LOOP;
21533 END IF;
21534
21535 handle_USER_ATTRIBUTE10(p_xml_root_node => l_out_xml_node,
21536 p_ui_def_id => p_ui_def_id,
21537 p_ui_page_id => p_ui_page_id,
21538 p_ui_element_id => p_element_id);
21539
21540
21541 IF p_ui_def_id=0 THEN
21542 refresh_Templ_Ref_Counts(l_xmldoc, 0, p_ui_page_id);
21543 END IF;
21544
21545 Save_Document(p_xml_doc => l_xmldoc,
21546 p_doc_name => l_jrad_doc);
21547
21548 --
21549 -- close XML parser
21550 --
21551 Close_Parser();
21552
21553 if (p_ui_def_id=0)
21554 then
21555 UPDATE CZ_UI_TEMPLATES
21556 SET TEMPLATE_REV_NBR=TEMPLATE_REV_NBR+1
21557 WHERE ui_def_id=p_ui_def_id AND
21558 template_id=p_ui_page_id;
21559 else
21560 UPDATE CZ_UI_PAGES
21561 SET page_rev_nbr=page_rev_nbr+1
21562 WHERE ui_def_id=p_ui_def_id AND
21563 page_id=p_ui_page_id;
21564 end if;
21565
21566 EXCEPTION
21567 WHEN WRONG_UI_TEMPLATE THEN
21568 x_return_status := FND_API.G_RET_STS_ERROR;
21569 x_msg_count := g_MSG_COUNT;
21570 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
21571 DEBUG(x_msg_data);
21572 WHEN OTHERS THEN
21573 x_return_status := FND_API.G_RET_STS_ERROR;
21574 x_msg_count := 1;
21575 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21576 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'convert_Template_Reference', x_msg_data);
21577 DEBUG('convert_Template_Reference() : '||x_msg_data);
21578 END convert_Template_Reference;
21579
21580 --
21581 -- check UI condition
21582 --
21583 PROCEDURE validate_UI_Condition(p_ui_def_id IN NUMBER,
21584 p_rule_id IN NUMBER,
21585 p_rule_type IN NUMBER,
21586 p_page_id IN NUMBER,
21587 p_element_id IN VARCHAR2,
21588 p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
21589
21590 l_element_path VARCHAR2(32000);
21591 l_run_id NUMBER;
21592
21593 BEGIN
21594
21595 CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => p_rule_id,
21596 p_name => NULL,
21597 x_run_id => l_run_id);
21598
21599 IF l_run_id > 0 THEN
21600 l_element_path := get_Element_XML_Path(p_ui_def_id => p_ui_def_id,
21601 p_page_id => p_page_id,
21602 p_element_id => p_element_id,
21603 p_is_parser_open => p_is_parser_open);
21604
21605 IF p_rule_type=33 AND l_element_path IS NOT NULL THEN
21606 add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
21607 p_token_name => 'UIELEMENTPATH',
21608 p_token_value => l_element_path,
21609 p_fatal_error => TRUE);
21610 ELSIF p_rule_type=34 AND l_element_path IS NOT NULL THEN
21611 add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
21612 p_token_name => 'UIELEMENTPATH',
21613 p_token_value => l_element_path,
21614 p_fatal_error => TRUE);
21615 ELSE
21616 NULL;
21617 END IF;
21618
21619 END IF;
21620
21621 END validate_UI_Condition;
21622
21623 --
21624 -- check UI conditions
21625 --
21626 PROCEDURE validate_UI_Conditions(p_ui_def_id IN NUMBER,
21627 p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
21628
21629 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
21630 l_page_id CZ_UI_PAGES.page_id%TYPE;
21631
21632 BEGIN
21633 FOR i IN(SELECT rule_id,ui_page_id,ui_page_element_id,rule_type FROM CZ_RULES a
21634 WHERE ui_def_id=p_ui_def_id AND
21635 deleted_flag=G_NO_FLAG AND disabled_flag=G_NO_FLAG)
21636 LOOP
21637
21638 BEGIN
21639
21640 IF i.ui_page_element_id IS NOT NULL AND i.ui_page_element_id<>'0' THEN
21641 SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
21642 WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
21643 element_id=i.ui_page_element_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
21644 ELSIF (i.ui_page_element_id IS NULL OR i.ui_page_element_id='0') AND
21645 (i.ui_page_id IS NOT NULL AND i.ui_page_id<>0) THEN
21646 SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
21647 WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
21648 parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE) AND rownum<2;
21649 SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
21650 WHERE page_id=i.ui_page_id AND ui_def_id=p_ui_def_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
21651 END IF;
21652
21653 validate_UI_Condition(p_ui_def_id,i.rule_id,i.rule_type, i.ui_page_id,i.ui_page_element_id, p_is_parser_open);
21654 EXCEPTION
21655 WHEN NO_DATA_FOUND THEN
21656 NULL; -- ignore corrupted UI rules
21657 END;
21658 END LOOP;
21659 END validate_UI_Conditions;
21660
21661 --
21662 -- update UI Reference when target ui_def_id is changed
21663 -- ( it is called by Developer )
21664 --
21665 PROCEDURE update_UI_Reference
21666 (
21667 p_ui_def_id IN NUMBER,
21668 p_ref_persistent_node_id IN NUMBER,
21669 p_new_target_ui_def_id IN NUMBER,
21670 x_return_status OUT NOCOPY VARCHAR2,-- status string
21671 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
21672 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
21673 ) IS
21674
21675 l_target_primary_navigation CZ_UI_DEFS.primary_navigation%TYPE;
21676 l_target_page_set_id CZ_UI_DEFS.page_set_id%TYPE;
21677 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
21678 l_ref_pagebase_path CZ_UI_PAGE_REFS.target_path%TYPE;
21679 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
21680 l_reference_name CZ_UI_PAGE_REFS.name%TYPE;
21681 l_ref_parent_persist_node_id NUMBER;
21682 l_ref_ps_node_id NUMBER;
21683 l_ref_parent_id NUMBER;
21684 l_page_set_type NUMBER;
21685 l_expl_node_id NUMBER;
21686 l_node_depth NUMBER;
21687 l_old_child_ui_def_id NUMBER;
21688
21689 BEGIN
21690
21691 --
21692 -- initialize FND variables/packages
21693 --
21694 Initialize(x_return_status,x_msg_count,x_msg_data);
21695
21696 --
21697 -- get primary_navigation, page_set_id of target UI
21698 --
21699 SELECT primary_navigation, page_set_id
21700 INTO l_target_primary_navigation, l_target_page_set_id
21701 FROM CZ_UI_DEFS
21702 WHERE ui_def_id=p_new_target_ui_def_id;
21703
21704 IF l_target_primary_navigation <> G_MODEL_TREE_MENU THEN
21705
21706 --
21707 -- if target primary_navigation <> G_MODEL_TREE_MENU ( Dynamic Tree Menu )
21708 -- then delete a corresponding CZ_UI_PAGE_REFS record from source UI
21709 -- ( CZ_UI_PAGE_REFS.target_persistent_node_id=p_ref_persistent_node_id )
21710 --
21711 UPDATE CZ_UI_PAGE_REFS
21712 SET deleted_flag=G_YES_FLAG
21713 WHERE ui_def_id=p_ui_def_id AND
21714 target_persistent_node_id=p_ref_persistent_node_id AND
21715 deleted_flag=G_NO_FLAG;
21716
21717 ELSE -- if target primary_navigation = G_MODEL_TREE_MENU
21718
21719 set_UI_Context(p_ui_def_id);
21720
21721 SELECT ps_node_id,parent_id,name
21722 INTO l_ref_ps_node_id,l_ref_parent_id,l_reference_name
21723 FROM CZ_PS_NODES
21724 WHERE devl_project_id=g_UI_Context.devl_project_id AND
21725 persistent_node_id=p_ref_persistent_node_id AND
21726 deleted_flag=G_NO_FLAG;
21727
21728 SELECT persistent_node_id
21729 INTO l_ref_parent_persist_node_id
21730 FROM CZ_PS_NODES
21731 WHERE ps_node_id=l_ref_parent_id AND
21732 deleted_flag=G_NO_FLAG;
21733
21734 FOR i IN(SELECT page_ref_id,node_depth,page_set_id,page_ref_type, seq_nbr
21735 FROM CZ_UI_PAGE_REFS
21736 WHERE ui_def_id=p_ui_def_id AND
21737 target_persistent_node_id=l_ref_parent_persist_node_id AND
21738 page_ref_type=G_MODEL_TREE_MENU AND
21739 deleted_flag=G_NO_FLAG)
21740 LOOP
21741 -- skip this block for Root record in split pages case to avoid data corruption
21742 IF (i.node_depth <> 0 AND i.seq_nbr <> 0) THEN
21743 --
21744 -- update target_ui_def_id and target_page_set_id
21745 --
21746 UPDATE CZ_UI_PAGE_REFS
21747 SET target_ui_def_id=p_new_target_ui_def_id,
21748 target_page_set_id=l_target_page_set_id
21749 WHERE ui_def_id=p_ui_def_id AND
21750 parent_page_ref_id=i.page_ref_id AND
21751 target_persistent_node_id=p_ref_persistent_node_id AND
21752 deleted_flag=G_NO_FLAG;
21753
21754 IF SQL%ROWCOUNT=0 THEN
21755
21756 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
21757
21758 l_ref_pagebase_path := get_Page_Path(l_ref_ps_node_id, i.page_set_id);
21759
21760 SELECT NVL(MAX(seq_nbr),0)+1 INTO l_seq_nbr
21761 FROM CZ_UI_PAGE_REFS
21762 WHERE ui_def_id=p_ui_def_id AND
21763 parent_page_ref_id=i.page_ref_id AND
21764 deleted_flag=G_NO_FLAG;
21765
21766 SELECT MIN(model_ref_expl_id) INTO l_expl_node_id FROM CZ_MODEL_REF_EXPLS
21767 WHERE model_id=g_UI_Context.devl_project_id AND
21768 referring_node_id=p_ref_persistent_node_id AND
21769 deleted_flag=G_NO_FLAG;
21770
21771 INSERT INTO CZ_UI_PAGE_REFS
21772 (ui_def_id,
21773 page_set_id,
21774 page_ref_id,
21775 parent_page_ref_id,
21776 seq_nbr,
21777 node_depth,
21778 condition_id,
21779 NAME,
21780 caption_source,
21781 target_persistent_node_id,
21782 target_path,
21783 target_ui_def_id,
21784 target_page_set_id,
21785 target_page_id,
21786 modified_flags,
21787 path_to_prev_page,
21788 path_to_next_page,
21789 page_ref_type,
21790 target_expl_node_id,
21791 caption_rule_id,
21792 deleted_flag)
21793 VALUES
21794 (p_ui_def_id,
21795 i.page_set_id,
21796 l_page_ref_id,
21797 i.page_ref_id,
21798 l_seq_nbr,
21799 i.node_depth+1,
21800 NULL,
21801 l_reference_name,
21802 G_DEFAULT_CAPTION_RULE_ID,
21803 p_ref_persistent_node_id,
21804 l_ref_pagebase_path,
21805 p_new_target_ui_def_id,
21806 l_target_page_set_id,
21807 NULL,
21808 0,
21809 NULL,
21810 NULL,
21811 i.page_ref_type,
21812 l_expl_node_id,
21813 NULL,
21814 G_NO_FLAG);
21815 END IF; -- end of IF SQL%ROWCOUNT=0
21816 END IF; -- end of IF i.node_depth<>0 and i.seq_nbr<>0
21817 END LOOP;
21818
21819 END IF; -- end of IF l_target_primary_navigation <> G_MODEL_TREE_MENU
21820
21821 -- handle page include region
21822 -- Note the link to the old target child ui is still there at this point
21823 SELECT ref_ui_def_id INTO l_old_child_ui_def_id
21824 FROM cz_ui_refs
21825 WHERE ui_def_id = p_ui_def_id AND ref_persistent_node_id = p_ref_persistent_node_id;
21826
21827 UPDATE cz_ui_page_elements
21828 SET target_page_ui_def_id = NULL, target_page_id = NULL
21829 WHERE deleted_flag = '0' AND target_page_ui_def_id = l_old_child_ui_def_id AND
21830 target_page_id IN (SELECT page_id FROM cz_ui_pages
21831 WHERE ui_def_id = l_old_child_ui_def_id AND deleted_flag = '0') AND
21832 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
21833
21834 EXCEPTION
21835 WHEN OTHERS THEN
21836 x_return_status := FND_API.G_RET_STS_ERROR;
21837 x_msg_count := 1;
21838 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
21839 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'update_UI_Reference', x_msg_data);
21840 DEBUG('update_UI_Reference() : '||x_msg_data);
21841
21842 END update_UI_Reference;
21843
21844 ------------------------------------------------------------------------------
21845 ------------- some procedures for fast access to UI Generation ---------------
21846 ------------------------------------------------------------------------------
21847
21848 PROCEDURE cui(p_model_id IN NUMBER,
21849 p_master_template_id IN NUMBER DEFAULT NULL,
21850 p_ui_name IN VARCHAR2 DEFAULT NULL,
21851 p_description IN VARCHAR2 DEFAULT NULL,
21852 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
21853 p_create_empty_ui IN VARCHAR2 DEFAULT NULL,
21854 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
21855
21856 l_ui_context CZ_UI_DEFS%ROWTYPE;
21857 l_return_status VARCHAR2(255);
21858 l_msg_count NUMBER;
21859 l_msg_data VARCHAR2(255);
21860
21861 BEGIN
21862
21863 Initialize(l_return_status,l_msg_count,l_msg_data);
21864
21865 g_Use_Cache := FALSE;
21866
21867 --
21868 -- get UI context
21869 -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
21870 --
21871 l_ui_context := create_UI_Context(p_model_id => p_model_id,
21872 p_master_template_id => p_master_template_id,
21873 p_ui_name => p_ui_name,
21874 p_description => p_description,
21875 p_show_all_nodes => p_show_all_nodes,
21876 p_create_empty_ui => p_create_empty_ui);
21877
21878 --
21879 -- generate a new UI for the current UI context
21880 --
21881 construct_UI(l_ui_context.ui_def_id, p_handling_mode);
21882
21883 DEBUG('New UI has been generated : ui_def_id = '||TO_CHAR(l_ui_context.ui_def_id));
21884
21885 END cui;
21886
21887 PROCEDURE rui(p_ui_def_id IN NUMBER,
21888 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
21889
21890 l_ui_context CZ_UI_DEFS%ROWTYPE;
21891 l_return_status VARCHAR2(255);
21892 l_msg_count NUMBER;
21893 l_msg_data VARCHAR2(255);
21894
21895 BEGIN
21896
21897 Initialize(l_return_status,l_msg_count,l_msg_data);
21898
21899 --
21900 -- get UI context
21901 --
21902 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
21903
21904 --
21905 -- refresh UI
21906 --
21907 construct_UI(p_ui_def_id, p_handling_mode);
21908
21909 DEBUG('UI has been refreshed ...');
21910
21911 END rui;
21912
21913 BEGIN
21914 DECLARE
21915 l_status VARCHAR2(255);
21916 l_industry VARCHAR2(255);
21917 l_oracle_schema VARCHAR2(255);
21918 l_ret BOOLEAN;
21919 BEGIN
21920 l_ret := FND_INSTALLATION.GET_APP_INFO(APPLICATION_SHORT_NAME => 'CZ',
21921 STATUS => l_status,
21922 INDUSTRY => l_industry,
21923 ORACLE_SCHEMA => l_oracle_schema);
21924
21925 g_UINodeINCREMENT := get_Seq_Inc('CZ_UI_PAGE_ELEMENTS_S', l_oracle_schema);
21926 g_PageRefINCREMENT := get_Seq_Inc('CZ_UI_PAGE_REFS_S', l_oracle_schema);
21927 g_PageINCREMENT := get_Seq_Inc('CZ_UI_PAGES_S', l_oracle_schema);
21928 g_PageSetINCREMENT := get_Seq_Inc('CZ_UI_PAGE_SETS_S', l_oracle_schema);
21929 g_UIActionINCREMENT := get_Seq_Inc('CZ_UI_ACTIONS_S', l_oracle_schema);
21930
21931 SELECT template_name
21932 INTO G_DRILLDOWN_TEMPLATE_NAME
21933 FROM CZ_UI_TEMPLATES
21934 WHERE template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
21935 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
21936 END;
21937
21938 END CZ_UIOA_PVT;