[Home] [Help]
PACKAGE BODY: APPS.CZ_UIOA_PVT
Source
1 PACKAGE BODY CZ_UIOA_PVT AS
2 /* $Header: czuioab.pls 120.78.12010000.3 2009/03/02 13:53:56 jonatara ship $ */
3
4 G_GEN_VERSION CONSTANT VARCHAR2(25) :='11.5.20';
5 G_GEN_HEADER CONSTANT VARCHAR2(100) :='$Header: czuioab.pls 120.78.12010000.3 2009/03/02 13:53:56 jonatara 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 -------------------------------------------------------------------
453
454 --
455 -- section for a different DEBUG procedures
456 --
457 PROCEDURE DEBUG(p_str IN VARCHAR2) IS
458 BEGIN
459 --DBMS_OUTPUT.PUT_LINE(p_str);
460 NULL;
461 END DEBUG;
462
463 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN VARCHAR2) IS
464 BEGIN
465 DEBUG(p_var_name || ' = ' || p_var_value);
466 END DEBUG;
467
468 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN NUMBER) IS
469 BEGIN
470 DEBUG(p_var_name || ' = ' || TO_CHAR(p_var_value));
471 END DEBUG;
472
473 PROCEDURE DEBUG(p_var_name IN VARCHAR2, p_var_value IN DATE) IS
474 BEGIN
475 DEBUG(p_var_name || ' = ' ||
476 TO_CHAR(p_var_value, 'DD-MM-YYYY HH24:MI:SS'));
477 END DEBUG;
478
479 PROCEDURE dump_Error_Stack(p_prefix IN VARCHAR2) IS
480 l_msg_count NUMBER;
481 l_msg_data VARCHAR2(4000);
482 l_msg_index number;
483 BEGIN
484 DEBUG('------------ Start of '||p_prefix||' ----------------');
485 l_msg_index := 1;
486 l_msg_count := fnd_msg_pub.COUNT_MSG();
487 DEBUG(p_prefix||' '||TO_CHAR(l_msg_count)||' error messages .');
488 WHILE l_msg_count > 0 LOOP
489 l_msg_data := fnd_msg_pub.GET(l_msg_index,fnd_api.g_false);
490 DEBUG(p_prefix||l_msg_data);
491 l_msg_index := l_msg_index + 1;
492 l_msg_count := l_msg_count - 1;
493 END LOOP;
494 DEBUG('------------ End of '||p_prefix||' ----------------');
495 END dump_Error_Stack;
496
497 PROCEDURE lock_Model(p_model_id IN NUMBER,
498 p_locked_entities_tbl OUT NOCOPY cz_security_pvt.number_type_tbl) IS
499 PRAGMA AUTONOMOUS_TRANSACTION;
500 l_lock_status VARCHAR2(255);
501 l_msg_count NUMBER;
502 l_msg_data VARCHAR2(4000);
503 BEGIN
504
505 cz_security_pvt.lock_model(1.0,p_model_id,FND_API.G_TRUE,FND_API.G_FALSE,
506 p_locked_entities_tbl,
507 l_lock_status,l_msg_count,l_msg_data);
508 COMMIT;
509 IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
510 RAISE FAILED_TO_LOCK_MODEL;
511 END IF;
512 END lock_Model;
513
514 PROCEDURE unlock_Model(p_locked_entities_tbl IN cz_security_pvt.number_type_tbl) IS
515 PRAGMA AUTONOMOUS_TRANSACTION;
516 l_lock_status VARCHAR2(255);
517 l_msg_count NUMBER;
518 l_msg_data VARCHAR2(4000);
519 BEGIN
520 cz_security_pvt.unlock_model(p_api_version => 1.0,
521 p_models_to_unlock => p_locked_entities_tbl,
522 p_commit_flag => FND_API.G_FALSE,
523 p_init_msg_list => FND_API.G_FALSE,
524 x_return_status => l_lock_status,
525 x_msg_count => l_msg_count,
526 x_msg_data => l_msg_data);
527 COMMIT;
528 END unlock_Model;
529
530 FUNCTION is_Used_By_Reference(p_detailed_type_id IN NUMBER,
531 p_ctrl_template_id IN NUMBER)
532 RETURN BOOLEAN IS
533 BEGIN
534
535 IF ((p_detailed_type_id IN
536 (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID
537 ,CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID
538 ,CZ_TYPES.UMINMAX_COMPONENT_TYPEID
539 ,CZ_TYPES.UNON_COUNT_FEATURE_TYPEID
540 ,CZ_TYPES.UCOUNT_FEATURE_TYPEID
541 ,CZ_TYPES.UCOUNT_FEATURE01_TYPEID
542 ,CZ_TYPES.UMINMAX_FEATURE_TYPEID
543 ,CZ_TYPES.UINTEGER_FEATURE_TYPEID
544 ,CZ_TYPES.UDECIMAL_FEATURE_TYPEID
545 ,CZ_TYPES.UBOOLEAN_FEATURE_TYPEID
546 ,CZ_TYPES.UTEXT_FEATURE_TYPEID
547 ,CZ_TYPES.UTOTAL_TYPEID
548 ,CZ_TYPES.URESOURCE_TYPEID
549 ,CZ_TYPES.UCONNECTOR_TYPEID,CZ_TYPES.UMINMAX_CONNECTOR)
550 AND g_UI_Context.CTRLTEMPLUSE_NONBOM=G_TEMPLATE_USE_BY_REFERENCE)
551 OR
552 (p_detailed_type_id IN
553 (CZ_TYPES.UMANDATORY_REF_TYPEID
554 ,CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
555 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
556 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
557 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
558 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
559 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
560 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
561 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
562 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
563 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID)
564 AND g_UI_Context.CTRLTEMPLUSE_BOM=G_TEMPLATE_USE_BY_REFERENCE)) AND
565 p_ctrl_template_id NOT IN(G_DRILLDOWN_IMAGE_TEMPLATE_ID,G_DRILLDOWN_LABEL_TEMPLATE_ID,
566 G_DRILLDOWN_BUTTON_TEMPLATE_ID) THEN
567 RETURN TRUE;
568 END IF;
569
570 RETURN FALSE;
571
572 END is_Used_By_Reference;
573
574 PROCEDURE lock_UI_Template(p_template_id IN NUMBER,
575 p_template_ui_def_id IN NUMBER DEFAULT NULL,
576 px_needs_to_be_unlocked OUT NOCOPY BOOLEAN) IS
577 PRAGMA AUTONOMOUS_TRANSACTION;
578
579 l_templates_to_lock_tbl cz_security_pvt.number_type_tbl;
580 l_locked_templates_tbl cz_security_pvt.number_type_tbl;
581 l_seeded_flag CZ_UI_TEMPLATES.seeded_flag%TYPE;
582 l_lock_status VARCHAR2(255);
583 l_msg_count NUMBER;
584 l_msg_data VARCHAR2(4000);
585
586 BEGIN
587 IF p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
588 p_template_ui_def_id IS NULL THEN
589 SELECT seeded_flag INTO l_seeded_flag FROM CZ_UI_TEMPLATES
590 WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
591 IF l_seeded_flag=G_YES_FLAG THEN
592 RETURN;
593 END IF;
594 l_templates_to_lock_tbl(1) := p_template_id;
595 cz_security_pvt.lock_template(p_api_version => 1.0,
596 p_templates_to_lock => l_templates_to_lock_tbl,
597 p_commit_flag => FND_API.G_FALSE,
598 p_init_msg_list => FND_API.G_FALSE,
599 x_locked_templates => l_locked_templates_tbl,
600 x_return_status => l_lock_status,
601 x_msg_count => l_msg_count,
602 x_msg_data => l_msg_data);
603 COMMIT;
604
605 IF (l_lock_status <> FND_API.G_RET_STS_SUCCESS) THEN
606 RAISE FAILED_TO_LOCK_TEMPLATE;
607 END IF;
608 IF l_locked_templates_tbl.COUNT>0 THEN
609 px_needs_to_be_unlocked := TRUE;
610 ELSE
611 px_needs_to_be_unlocked := FALSE;
612 END IF;
613 END IF;
614 END lock_UI_Template;
615
616 PROCEDURE unlock_UI_Template(p_template_id IN NUMBER,
617 p_template_ui_def_id IN NUMBER DEFAULT NULL,
618 p_needs_to_be_unlocked IN BOOLEAN) IS
619 PRAGMA AUTONOMOUS_TRANSACTION;
620 l_templates_to_unlock_tbl cz_security_pvt.number_type_tbl;
621 l_lock_status VARCHAR2(255);
622 l_msg_count NUMBER;
623 l_msg_data VARCHAR2(4000);
624 BEGIN
625 IF (p_template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID OR
626 p_template_ui_def_id IS NULL) AND p_needs_to_be_unlocked THEN
627 l_templates_to_unlock_tbl(1) := p_template_id;
628 cz_security_pvt.unlock_template(p_api_version => 1.0,
629 p_templates_to_unlock => l_templates_to_unlock_tbl,
630 p_commit_flag => FND_API.G_FALSE,
631 p_init_msg_list => FND_API.G_FALSE,
632 x_return_status => l_lock_status,
633 x_msg_count => l_msg_count,
634 x_msg_data => l_msg_data);
635 COMMIT;
636 END IF;
637 END unlock_UI_Template;
638
639 --
640 -- lock all global UI templates for a given model_id and ui_def_id
641 -- array x_templates_id_tbl will contain locked UI templates
642 --
643 PROCEDURE lock_UI_Templates(p_model_id IN NUMBER,
644 p_ui_def_id IN NUMBER) IS
645 l_needs_to_be_unlocked BOOLEAN;
646
647 l_lock_status VARCHAR2(255);
648 l_msg_count NUMBER;
649 l_msg_data VARCHAR2(4000);
650 l_msg_index number;
651 BEGIN
652 FOR i IN(SELECT DISTINCT template_id, detailed_type_id
653 FROM CZ_UITEMPLS_FOR_PSNODES_V
654 WHERE devl_project_id=p_model_id AND
655 ui_def_id=p_ui_def_id AND
656 template_ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
657 deleted_flag = G_NO_FLAG)
658 LOOP
659 IF is_Used_By_Reference(i.detailed_type_id, i.template_id)=FALSE AND
660 NOT(g_locked_templates_id_tbl.EXISTS(i.template_id)) THEN
661
662 BEGIN
663 --
664 -- lock current UI Template
665 --
666 lock_UI_Template( i.template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID, l_needs_to_be_unlocked);
667 --
668 -- collect only those UI templates
669 -- which really have been locked
670 --
671 IF l_needs_to_be_unlocked THEN
672 g_locked_templates_id_tbl(i.template_id) := i.template_id;
673 END IF;
674 EXCEPTION
675 WHEN FAILED_TO_LOCK_TEMPLATE THEN
676 DEBUG('Failed to lock UI Template with template_id=', i.template_id);
677 g_MSG_COUNT := fnd_msg_pub.COUNT_MSG();
678 END;
679
680 END IF;
681
682 END LOOP;
683
684 END lock_UI_Templates;
685
686 --
687 -- unlock global UI templates specified by array x_templates_id_tbl
688 --
689 PROCEDURE unlock_UI_Templates IS
690 l_index NUMBER;
691 BEGIN
692
693 IF g_locked_templates_id_tbl.Count>0 THEN
694
695 l_index := g_locked_templates_id_tbl.First;
696
697 LOOP
698 IF l_index IS NULL THEN
699 EXIT;
700 END IF;
701
702 DEBUG('UI Template to unlock : ',g_locked_templates_id_tbl(l_index));
703 --
704 -- unlock current UI Template
705 --
706 unlock_UI_Template( g_locked_templates_id_tbl(l_index), G_GLOBAL_TEMPLATES_UI_DEF_ID, TRUE);
707 l_index := g_locked_templates_id_tbl.NEXT(l_index);
708 END LOOP;
709
710 END IF;
711
712 END unlock_UI_Templates;
713
714 --
715 -- initialize sequences to use in UI Generation/UI Refresh
716 --
717 PROCEDURE Initialize_Sequences IS
718 BEGIN
719
720 SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currentUINode FROM dual;
721 g_currUISeqVal := g_currentUINode;
722
723 SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currentPageRef FROM dual;
724 g_currPageRefSeqVal := g_currentPageRef;
725
726 SELECT CZ_UI_PAGES_S.nextval INTO g_currentPage FROM dual;
727 g_currPageSeqVal := g_currentPage;
728
729 SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currentPageSet FROM dual;
730 g_currPageSetSeqVal := g_currentPageSet;
731
732 SELECT CZ_UI_ACTIONS_S.nextval INTO g_currentUIAction FROM dual;
733 g_currUIActionSeqVal := g_currentUIAction;
734
735 END Initialize_Sequences;
736
737 --
738 -- initialize FND variables/packages
739 --
740 PROCEDURE Initialize(x_return_status OUT NOCOPY VARCHAR2,
741 x_msg_count OUT NOCOPY NUMBER,
742 x_msg_data OUT NOCOPY VARCHAR2) IS
743 BEGIN
744 g_MSG_COUNT := 0 ;
745 fnd_msg_pub.initialize;
746 x_return_status := FND_API.G_RET_STS_SUCCESS;
747 x_msg_count := 0;
748 x_msg_data := NULL;
749 Initialize_Sequences();
750 g_ui_def_nodes_tbl.DELETE;
751 g_ui_pages_counter_tbl.DELETE;
752 g_root_persist_id_tbl.DELETE;
753 g_local_ui_context.DELETE;
754 g_check_boundaries_tbl.DELETE;
755 g_locked_templates_id_tbl.DELETE;
756 g_elements_to_move.DELETE;
757 g_dom_elements_to_move.DELETE;
758 g_tgt_pg_to_src_pg_map.DELETE;
759 END Initialize;
760
761 --
762 -- add FND error message
763 --
764 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
765 p_fatal_error IN BOOLEAN) IS
766
767 BEGIN
768 FND_MESSAGE.SET_NAME('CZ', p_message_name);
769 IF p_fatal_error THEN
770 FND_MSG_PUB.ADD;
771 ELSE
772 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
773 END IF;
774 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
775 p_data => g_MSG_DATA);
776 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
777 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
778 ELSE
779 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
780 END IF;
781
782 END add_Error_Message;
783
784 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
785 p_token_name IN VARCHAR2,
786 p_token_value IN VARCHAR2,
787 p_fatal_error IN BOOLEAN) IS
788
789 BEGIN
790 FND_MESSAGE.SET_NAME('CZ', p_message_name);
791 IF p_token_name IS NOT NULL THEN
792 FND_MESSAGE.SET_TOKEN(p_token_name, p_token_value);
793 END IF;
794 IF p_fatal_error THEN
795 FND_MSG_PUB.ADD;
796 ELSE
797 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
798 END IF;
799 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
800 p_data => g_MSG_DATA);
801 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
802 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
803 ELSE
804 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
805 END IF;
806 END add_Error_Message;
807
808 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
809 p_token_name1 IN VARCHAR2,
810 p_token_value1 IN VARCHAR2,
811 p_token_name2 IN VARCHAR2,
812 p_token_value2 IN VARCHAR,
813 p_fatal_error IN BOOLEAN) IS
814
815 BEGIN
816 FND_MESSAGE.SET_NAME('CZ', p_message_name);
817 IF p_token_name1 IS NOT NULL THEN
818 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
819 END IF;
820
821 IF p_token_name2 IS NOT NULL THEN
822 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
823 END IF;
824
825 IF p_fatal_error THEN
826 FND_MSG_PUB.ADD;
827 ELSE
828 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
829 END IF;
830
831 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
832 p_data => g_MSG_DATA);
833 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
834 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
835 ELSE
836 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
837 END IF;
838 END add_Error_Message;
839
840 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
841 p_token_name1 IN VARCHAR2,
842 p_token_value1 IN VARCHAR2,
843 p_token_name2 IN VARCHAR2,
844 p_token_value2 IN VARCHAR,
845 p_token_name3 IN VARCHAR2,
846 p_token_value3 IN VARCHAR,
847 p_fatal_error IN BOOLEAN) IS
848
849 BEGIN
850 FND_MESSAGE.SET_NAME('CZ', p_message_name);
851 IF p_token_name1 IS NOT NULL THEN
852 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
853 END IF;
854
855 IF p_token_name2 IS NOT NULL THEN
856 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
857 END IF;
858
859 IF p_token_name3 IS NOT NULL THEN
860 FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
861 END IF;
862
863 IF p_fatal_error THEN
864 FND_MSG_PUB.ADD;
865 ELSE
866 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
867 END IF;
868
869 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
870 p_data => g_MSG_DATA);
871 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
872 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
873 ELSE
874 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
875 END IF;
876 END add_Error_Message;
877
878 PROCEDURE add_Error_Message(p_message_name IN VARCHAR2,
879 p_token_name1 IN VARCHAR2,
880 p_token_value1 IN VARCHAR2,
881 p_token_name2 IN VARCHAR2,
882 p_token_value2 IN VARCHAR,
883 p_token_name3 IN VARCHAR2,
884 p_token_value3 IN VARCHAR,
885 p_token_name4 IN VARCHAR2,
886 p_token_value4 IN VARCHAR,
887 p_token_name5 IN VARCHAR2,
888 p_token_value5 IN VARCHAR,
889 p_fatal_error IN BOOLEAN) IS
890
891 BEGIN
892 FND_MESSAGE.SET_NAME('CZ', p_message_name);
893 IF p_token_name1 IS NOT NULL THEN
894 FND_MESSAGE.SET_TOKEN(p_token_name1, p_token_value1);
895 END IF;
896
897 IF p_token_name2 IS NOT NULL THEN
898 FND_MESSAGE.SET_TOKEN(p_token_name2, p_token_value2);
899 END IF;
900
901 IF p_token_name3 IS NOT NULL THEN
902 FND_MESSAGE.SET_TOKEN(p_token_name3, p_token_value3);
903 END IF;
904
905 IF p_token_name4 IS NOT NULL THEN
906 FND_MESSAGE.SET_TOKEN(p_token_name4, p_token_value4);
907 END IF;
908
909 IF p_token_name5 IS NOT NULL THEN
910 FND_MESSAGE.SET_TOKEN(p_token_name5, p_token_value5);
911 END IF;
912
913 IF p_fatal_error THEN
914 FND_MSG_PUB.ADD;
915 ELSE
916 fnd_msg_pub.add_detail(p_message_type => FND_MSG_PUB.G_WARNING_MSG);
917 END IF;
918
919 FND_MSG_PUB.count_and_get(p_count => g_MSG_COUNT,
920 p_data => g_MSG_DATA);
921 IF p_fatal_error OR g_RETURN_STATUS=FND_API.G_RET_STS_ERROR THEN
922 g_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
923 ELSE
924 g_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
925 END IF;
926 END add_Error_Message;
927
928 --
929 -- return increment of sequence p_sequence_name which
930 -- is under schema p_sequence_owner
931 --
932 FUNCTION get_Seq_Inc(p_sequence_name IN VARCHAR2,
933 p_sequence_owner IN VARCHAR2) RETURN NUMBER IS
934 l_seq_increment NUMBER;
935 BEGIN
936 SELECT increment_by INTO l_seq_increment
937 FROM all_sequences
938 WHERE sequence_owner=p_sequence_owner AND
939 sequence_name=p_sequence_name;
940 RETURN l_seq_increment;
941 END get_Seq_Inc;
942
943 --
944 -- open XML parser
945 --
946 PROCEDURE Open_Parser IS
947 BEGIN
948 --
949 -- create a new XML parser ( global )
950 --
951 g_PARSER := xmlparser.newParser;
952 END Open_Parser;
953
954 --
955 -- close XML parser
956 --
957 PROCEDURE Close_Parser IS
958 BEGIN
959 --
960 -- close XML parser ( global )
961 --
962 xmlparser.freeParser(g_PARSER);
963 EXCEPTION
964 WHEN OTHERS THEN
965 IF SQLCODE='-20103' THEN
966 NULL;
967 ELSE
968 DEBUG('Close_Parser() : XML Parser can not be closed : '||SQLERRM);
969 RAISE;
970 END IF;
971 END Close_Parser;
972
973 FUNCTION cloneNode(p_source_xml_node xmldom.DOMNode, p_target_subtree_xml_node xmldom.DOMNode) RETURN xmldom.DOMNode IS
974
975 l_xmldoc xmldom.DOMDocument;
976
977 BEGIN
978
979 l_xmldoc := xmldom.getOwnerDocument(p_target_subtree_xml_node);
980
981 BEGIN
982
983 CZ_UIOA_PVT.g_temp_xmldoc := l_xmldoc;
984 CZ_UIOA_PVT.g_temp_source_xml_node := p_source_xml_node;
985
986 EXECUTE IMMEDIATE
987 'BEGIN ' ||
988 ' CZ_UIOA_PVT.g_temp_xml_node := XMLDOM.importNode(CZ_UIOA_PVT.g_temp_xmldoc, CZ_UIOA_PVT.g_temp_source_xml_node, TRUE); ' ||
989 'END;';
990
991 RETURN CZ_UIOA_PVT.g_temp_xml_node;
992
993 EXCEPTION
994 WHEN OTHERS THEN
995 IF SQLCODE=-6550 THEN -- there is no function importNode() in XMLDOM
996 RETURN xmldom.cloneNode(p_source_xml_node, TRUE);
997 ELSE
998 RAISE;
999 END IF;
1000 END;
1001
1002 END cloneNode;
1003
1004 --
1005 -- generate NEW ID FROM a given sequence
1006 -- Parameters : p_sequence_name - name of DB sequence
1007 -- Return : next id from sequence
1008 --
1009 FUNCTION allocateId(p_sequence_name IN VARCHAR2) RETURN NUMBER IS
1010 l_id NUMBER;
1011 BEGIN
1012 IF p_sequence_name='CZ_UI_PAGE_ELEMENTS_S' THEN
1013 IF g_currentUINode<g_currUISeqVal+g_UINodeINCREMENT-1 THEN
1014 g_currentUINode := g_currentUINode+1;
1015 ELSE
1016 SELECT CZ_UI_PAGE_ELEMENTS_S.nextval INTO g_currUISeqVal FROM dual;
1017 g_currentUINode := g_currUISeqVal;
1018 END IF;
1019 RETURN g_currentUINode;
1020 ELSIF p_sequence_name='CZ_UI_PAGE_REFS_S' THEN
1021 IF g_currentPageRef<g_currPageRefSeqVal+g_PageRefINCREMENT-1 THEN
1022 g_currentPageRef := g_currentPageRef+1;
1023 ELSE
1024 SELECT CZ_UI_PAGE_REFS_S.nextval INTO g_currPageRefSeqVal FROM dual;
1025 g_currentPageRef := g_currPageRefSeqVal;
1026 END IF;
1027 RETURN g_currentPageRef;
1028 ELSIF p_sequence_name='CZ_UI_PAGES_S' THEN
1029 IF g_currentPage<g_currPageSeqVal+g_PageINCREMENT-1 THEN
1030 g_currentPage := g_currentPage+1;
1031 ELSE
1032 SELECT CZ_UI_PAGES_S.nextval INTO g_currPageSeqVal FROM dual;
1033 g_currentPage := g_currPageSeqVal;
1034 END IF;
1035 RETURN g_currentPage;
1036 ELSIF p_sequence_name='CZ_UI_PAGE_SETS_S' THEN
1037 IF g_currentPageSet<g_currPageSetSeqVal+g_PageSetINCREMENT-1 THEN
1038 g_currentPageSet := g_currentPageSet+1;
1039 ELSE
1040 SELECT CZ_UI_PAGE_SETS_S.nextval INTO g_currPageSetSeqVal FROM dual;
1041 g_currentPageSet := g_currPageSetSeqVal;
1042 END IF;
1043 RETURN g_currentPageSet;
1044 ELSIF p_sequence_name='CZ_UI_ACTIONS_S' THEN
1045 IF g_currentUIAction<g_currUIActionSeqVal+g_UIActionINCREMENT-1 THEN
1046 g_currentUIAction := g_currentUIAction+1;
1047 ELSE
1048 SELECT CZ_UI_ACTIONS_S.nextval INTO g_currUIActionSeqVal FROM dual;
1049 g_currentUIAction := g_currUIActionSeqVal;
1050 END IF;
1051 RETURN g_currentUIAction;
1052 ELSIF p_sequence_name='CZ_INTL_TEXTS_S' THEN
1053 IF g_currentIntlText<g_currIntlTextSeqVal+g_IntlTextINCREMENT-1 THEN
1054 g_currentIntlText := g_currentIntlText+1;
1055 ELSE
1056 SELECT CZ_INTL_TEXTS_S.nextval INTO g_currIntlTextSeqVal FROM dual;
1057 g_currentIntlText := g_currIntlTextSeqVal;
1058 END IF;
1059 RETURN g_currentIntlText;
1060 ELSE
1061 EXECUTE IMMEDIATE 'SELECT ' || p_sequence_name || '.NEXTVAL FROM dual' INTO l_id;
1062 RETURN l_id;
1063 END IF;
1064
1065 EXCEPTION
1066 WHEN OTHERS THEN
1067 IF SQLCODE='-2289' THEN
1068 DEBUG('allocateId() : sequence '||p_sequence_name||' does not exist.');
1069 ELSE
1070 DEBUG('Sequence '||p_sequence_name||' can not be handled.');
1071 END IF;
1072 RAISE;
1073 END allocateId;
1074
1075 PROCEDURE set_Local_UI_Context(p_ui_def_id IN NUMBER) IS
1076 BEGIN
1077 IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1078 SELECT * INTO g_local_ui_context(p_ui_def_id) FROM CZ_UI_DEFS
1079 WHERE ui_def_id=p_ui_def_id;
1080 END IF;
1081 END set_Local_UI_Context;
1082
1083 FUNCTION get_Local_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1084 BEGIN
1085 IF NOT(g_local_ui_context.EXISTS(p_ui_def_id)) THEN
1086 SELECT * INTO g_local_ui_context(p_ui_def_id)
1087 FROM CZ_UI_DEFS
1088 WHERE ui_def_id=p_ui_def_id;
1089 END IF;
1090 RETURN g_local_ui_context(p_ui_def_id);
1091 END get_Local_UI_Context;
1092
1093 --
1094 -- return new element_id
1095 --
1096 FUNCTION get_Element_Id RETURN VARCHAR2 IS
1097 BEGIN
1098 RETURN TO_CHAR(allocateId('CZ_UI_PAGE_ELEMENTS_S'));
1099 END get_Element_Id;
1100
1101 --
1102 -- mark UI page as deleted
1103 --
1104 PROCEDURE mark_UI_Page_As_Refreshed(p_page_id IN NUMBER,
1105 p_ui_def_id IN NUMBER) IS
1106 BEGIN
1107 UPDATE CZ_UI_PAGES
1108 SET deleted_flag = DECODE(deleted_flag,G_MARK_TO_ADD,
1109 G_MARK_TO_ADD,G_MARK_TO_REFRESH),
1110 page_rev_nbr=page_rev_nbr+1
1111 WHERE page_id=p_page_id AND
1112 ui_def_id=p_ui_def_id AND
1113 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1114 END mark_UI_Page_As_Refreshed;
1115
1116 --
1117 -- mark UI page as deleted
1118 --
1119 PROCEDURE mark_UI_Page_As_Deleted(p_page_id IN NUMBER,
1120 p_ui_def_id IN NUMBER) IS
1121 BEGIN
1122 UPDATE CZ_UI_PAGES
1123 SET deleted_flag = G_MARK_TO_DELETE
1124 WHERE page_id=p_page_id AND
1125 ui_def_id=p_ui_def_id;
1126 END mark_UI_Page_As_Deleted;
1127
1128 --
1129 -- mark UI as UI with errors
1130 --
1131 PROCEDURE mark_UI(p_ui_def_id IN NUMBER,
1132 p_ui_status IN VARCHAR2) IS
1133 BEGIN
1134 UPDATE CZ_UI_DEFS
1135 SET ui_status=p_ui_status
1136 WHERE ui_def_id=p_ui_def_id;
1137 END mark_UI;
1138
1139 --
1140 -- refresh UI node marks
1141 --
1142 PROCEDURE refresh_UI_Node_Marks(p_page_id IN NUMBER,
1143 p_hmode IN NUMBER) IS
1144 BEGIN
1145
1146 IF p_hmode = G_DELETE_PAGE THEN
1147
1148 UPDATE CZ_UI_PAGES
1149 SET page_rev_nbr = page_rev_nbr + 1,
1150 deleted_flag = G_YES_FLAG
1151 WHERE page_id = p_page_id AND
1152 ui_def_id = g_UI_Context.ui_def_id;
1153 --
1154 -- mark elements as already deleted
1155 --
1156 UPDATE CZ_UI_PAGE_ELEMENTS
1157 SET deleted_flag=G_YES_FLAG
1158 WHERE ui_def_id= g_UI_Context.ui_def_id AND
1159 page_id=p_page_id;
1160
1161 ELSIF p_hmode = G_DELETE_ELEMENTS THEN
1162 --
1163 -- mark elements as already deleted
1164 --
1165 UPDATE CZ_UI_PAGE_ELEMENTS
1166 SET deleted_flag=G_YES_FLAG
1167 WHERE ui_def_id= g_UI_Context.ui_def_id AND
1168 page_id=p_page_id AND
1169 deleted_flag IN(G_MARK_TO_DELETE);
1170
1171 IF SQL%ROWCOUNT>0 THEN
1172 --
1173 -- update revision of deleted UI page
1174 --
1175 UPDATE CZ_UI_PAGES
1176 SET page_rev_nbr = page_rev_nbr + 1
1177 WHERE page_id = p_page_id AND
1178 ui_def_id = g_UI_Context.ui_def_id;
1179 END IF;
1180
1181 ELSIF p_hmode = G_REFRESH_PAGE THEN
1182
1183 --
1184 -- update page status and page_rev_nbr
1185 -- page_rev_nbr=1 because this is first creation
1186 --
1187 UPDATE CZ_UI_PAGES
1188 SET page_rev_nbr = page_rev_nbr+1,
1189 deleted_flag = G_NO_FLAG
1190 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1191 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1192
1193 UPDATE CZ_UI_PAGE_ELEMENTS
1194 SET deleted_flag = G_NO_FLAG
1195 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1196 page_id = p_page_id AND
1197 deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1198
1199 ELSIF p_hmode = G_NEW_PAGE THEN
1200
1201 UPDATE CZ_UI_PAGES
1202 SET page_rev_nbr = 1,
1203 deleted_flag = G_NO_FLAG
1204 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1205 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH);
1206
1207 UPDATE CZ_UI_PAGE_ELEMENTS
1208 SET deleted_flag = G_NO_FLAG
1209 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1210 page_id = p_page_id AND
1211 deleted_flag NOT IN(G_NO_FLAG,G_YES_FLAG,G_LIMBO_FLAG);
1212 ELSE
1213 NULL;
1214 /*
1215 UPDATE CZ_UI_PAGES
1216 SET deleted_flag = G_NO_FLAG
1217 WHERE page_id = p_page_id AND ui_def_id = g_UI_Context.ui_def_id AND
1218 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1219
1220 UPDATE CZ_UI_PAGE_ELEMENTS
1221 SET deleted_flag = G_NO_FLAG
1222 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1223 page_id = p_page_id AND
1224 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1225 */
1226 END IF;
1227
1228 END refresh_UI_Node_Marks;
1229
1230
1231 --
1232 -- get and save Transalations for a given JRAD document
1233 --
1234 PROCEDURE translate_JRAD_Doc(p_jrad_doc_name IN VARCHAR2) IS
1235 BEGIN
1236 jdr_docbuilder.refresh;
1237
1238 g_jrad_trans_list := jdr_utils.getTranslations(p_jrad_doc_name);
1239
1240 IF g_jrad_trans_list IS NOT NULL THEN
1241 jdr_utils.saveTranslations(p_jrad_doc_name,g_jrad_trans_list);
1242 END IF;
1243 END translate_JRAD_Doc;
1244
1245 --
1246 -- returns viewname given the prefix
1247 --
1248 FUNCTION get_next_view_name(p_view_name_prefix IN VARCHAR) RETURN VARCHAR2 IS
1249
1250 BEGIN
1251
1252 IF p_view_name_prefix='COMP' THEN
1253 g_mandatory_comp_counter := g_mandatory_comp_counter+1;
1254 RETURN p_view_name_prefix || '_' || g_mandatory_comp_counter;
1255 ELSIF p_view_name_prefix='SIM' THEN
1256 g_optional_ref_counter := g_optional_ref_counter+1;
1257 RETURN p_view_name_prefix || '_' || g_optional_ref_counter;
1258 ELSIF p_view_name_prefix='CS' THEN
1259 g_minmax_ref_counter := g_minmax_ref_counter+1;
1260 RETURN p_view_name_prefix || '_' || g_minmax_ref_counter;
1261 ELSIF p_view_name_prefix='OF' THEN
1262 g_of_feature_counter := g_of_feature_counter+1;
1263 RETURN p_view_name_prefix || '_' || g_of_feature_counter;
1264 ELSIF p_view_name_prefix='IF' THEN
1265 g_if_feature_counter := g_if_feature_counter+1;
1266 RETURN p_view_name_prefix || '_' || g_if_feature_counter;
1267 ELSIF p_view_name_prefix='DF' THEN
1268 g_df_feature_counter := g_df_feature_counter+1;
1269 RETURN p_view_name_prefix || '_' || g_df_feature_counter;
1270 ELSIF p_view_name_prefix='BF' THEN
1271 g_bf_feature_counter := g_bf_feature_counter+1;
1272 RETURN p_view_name_prefix || '_' || g_bf_feature_counter;
1273 ELSIF p_view_name_prefix='TF' THEN
1274 g_tf_feature_counter := g_tf_feature_counter+1;
1275 RETURN p_view_name_prefix || '_' || g_tf_feature_counter;
1276 ELSIF p_view_name_prefix='TOT' THEN
1277 g_tot_feature_counter := g_tot_feature_counter+1;
1278 RETURN p_view_name_prefix || '_' || g_tot_feature_counter;
1279 ELSIF p_view_name_prefix='RSC' THEN
1280 g_rsc_feature_counter := g_rsc_feature_counter+1;
1281 RETURN p_view_name_prefix || '_' || g_rsc_feature_counter;
1282 ELSIF p_view_name_prefix='ITOT' THEN
1283 g_itot_feature_counter := g_itot_feature_counter+1;
1284 RETURN p_view_name_prefix || '_' || g_itot_feature_counter;
1285 ELSIF p_view_name_prefix='IRSC' THEN
1286 g_irsc_feature_counter := g_irsc_feature_counter+1;
1287 RETURN p_view_name_prefix || '_' || g_irsc_feature_counter;
1288 ELSIF p_view_name_prefix='REF' THEN
1289 g_mandatory_ref_counter := g_mandatory_ref_counter+1;
1290 RETURN p_view_name_prefix || '_' || g_mandatory_ref_counter;
1291 ELSIF p_view_name_prefix='CON' THEN
1292 g_connector_counter := g_connector_counter+1;
1293 RETURN p_view_name_prefix || '_' || g_connector_counter;
1294 ELSIF p_view_name_prefix='BOMM' THEN
1295 g_bomm_counter := g_bomm_counter+1;
1296 RETURN p_view_name_prefix || '_' || g_bomm_counter;
1297 ELSIF p_view_name_prefix='OPT' THEN
1298 g_opt_counter := g_opt_counter+1;
1299 RETURN p_view_name_prefix || '_' || g_opt_counter;
1300 END IF;
1301 END get_next_view_name;
1302
1303 --
1304 -- return name of node type
1305 --
1306 FUNCTION get_View_Name(p_ui_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
1307 x_has_children OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
1308 l_view_name VARCHAR2(255);
1309 BEGIN
1310 x_has_children := G_NO_FLAG;
1311
1312 IF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_COMPONENT_TYPEID) THEN
1313
1314 g_mandatory_comp_counter := g_mandatory_comp_counter + 1;
1315 l_view_name := 'COMP_' ||
1316 TO_CHAR(g_mandatory_comp_counter);
1317 x_has_children := G_YES_FLAG;
1318
1319 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID) THEN
1320
1321 g_optional_ref_counter := g_optional_ref_counter + 1;
1322 l_view_name := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1323 -- x_has_children := G_YES_FLAG; -- Shantaram's requitement 08/04/2004
1324
1325 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
1326
1327 g_minmax_ref_counter := g_minmax_ref_counter + 1;
1328 l_view_name := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1329 x_has_children := G_YES_FLAG;
1330
1331 ELSIF p_ui_node.detailed_type_id IN
1332 (CZ_TYPES.UNON_COUNT_FEATURE_TYPEID, CZ_TYPES.UCOUNT_FEATURE_TYPEID,
1333 CZ_TYPES.UCOUNT_FEATURE01_TYPEID, CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
1334
1335 g_of_feature_counter := g_of_feature_counter + 1;
1336 l_view_name := 'OF_' || TO_CHAR(g_of_feature_counter);
1337 x_has_children := G_YES_FLAG;
1338
1339 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UINTEGER_FEATURE_TYPEID) THEN
1340
1341 g_if_feature_counter := g_if_feature_counter + 1;
1342 l_view_name := 'IF_' || TO_CHAR(g_if_feature_counter);
1343
1344 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UDECIMAL_FEATURE_TYPEID) THEN
1345
1346 g_df_feature_counter := g_df_feature_counter + 1;
1347 l_view_name := 'DF_' || TO_CHAR(g_df_feature_counter);
1348
1349 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UBOOLEAN_FEATURE_TYPEID) THEN
1350
1351 g_bf_feature_counter := g_bf_feature_counter + 1;
1352 l_view_name := 'BF_' || TO_CHAR(g_bf_feature_counter);
1353
1354 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UTEXT_FEATURE_TYPEID) THEN
1355
1356 g_tf_feature_counter := g_tf_feature_counter + 1;
1357 l_view_name := 'TF_' || TO_CHAR(g_tf_feature_counter);
1358
1359 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
1360
1361 g_tot_feature_counter := g_tot_feature_counter + 1;
1362 l_view_name := 'TOT_' || TO_CHAR(g_tot_feature_counter);
1363
1364 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
1365
1366 g_rsc_feature_counter := g_rsc_feature_counter + 1;
1367 l_view_name := 'RSC_' || TO_CHAR(g_rsc_feature_counter);
1368
1369 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
1370
1371 g_itot_feature_counter := g_itot_feature_counter + 1;
1372 l_view_name := 'ITOT_' || TO_CHAR(g_itot_feature_counter);
1373
1374 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
1375
1376 g_irsc_feature_counter := g_irsc_feature_counter + 1;
1377 l_view_name := 'IRSC_' || TO_CHAR(g_irsc_feature_counter);
1378
1379 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
1380
1381 g_mandatory_ref_counter := g_mandatory_ref_counter + 1;
1382 l_view_name := 'REF_' || TO_CHAR(g_mandatory_ref_counter);
1383
1384 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID) THEN
1385
1386 g_optional_ref_counter := g_optional_ref_counter + 1;
1387 l_view_name := 'SIM_' || TO_CHAR(g_optional_ref_counter);
1388 --x_has_children := G_YES_FLAG; -- Shantaram's requitement 09/01/2004
1389 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
1390
1391 g_minmax_ref_counter := g_minmax_ref_counter + 1;
1392 l_view_name := 'CS_' || TO_CHAR(g_minmax_ref_counter);
1393 x_has_children := G_YES_FLAG;
1394 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UCONNECTOR_TYPEID) THEN
1395
1396 g_connector_counter := g_connector_counter + 1;
1397 l_view_name := 'CON_' || TO_CHAR(g_connector_counter);
1398
1399 ELSIF p_ui_node.detailed_type_id IN (CZ_TYPES.UMINMAX_CONNECTOR) THEN
1400
1401 g_connector_counter := g_connector_counter + 1;
1402 l_view_name := 'CON_' || TO_CHAR(g_connector_counter);
1403 x_has_children := G_YES_FLAG;
1404 ELSIF p_ui_node.detailed_type_id IN
1405 (CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
1406 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
1407 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
1408 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
1409 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
1410 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
1411 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
1412 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
1413
1414 g_bomm_counter := g_bomm_counter + 1;
1415 l_view_name := 'BOMM_' || TO_CHAR(g_bomm_counter);
1416 x_has_children := G_YES_FLAG;
1417
1418 ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UBOM_STANDART_ITEM_TYPEID THEN
1419 g_bomm_counter := g_bomm_counter + 1;
1420 l_view_name := 'BOMM_' || TO_CHAR(g_bomm_counter);
1421
1422 ELSIF p_ui_node.detailed_type_id=CZ_TYPES.UOPTION_TYPEID THEN
1423 g_opt_counter := g_opt_counter + 1;
1424 l_view_name := 'OPT_' || TO_CHAR(g_opt_counter);
1425
1426 ELSE
1427 NULL;
1428 END IF;
1429
1430 RETURN l_view_name;
1431 END get_View_Name;
1432
1433 --
1434 -- return COUNT ( of UI pages of a given UI) + 1
1435 --
1436 FUNCTION get_Page_Counter RETURN NUMBER IS
1437 l_page_counter NUMBER;
1438 BEGIN
1439 --
1440 -- if it is cached then get it from cache
1441 --
1442 SELECT COUNT(page_id)
1443 INTO l_page_counter
1444 FROM CZ_UI_PAGES
1445 WHERE ui_def_id = g_UI_Context.ui_def_id;
1446
1447 RETURN l_page_counter;
1448
1449 END get_Page_Counter;
1450
1451 --
1452 -- construct JRAD Page/Region name based on ui_def_id and page_id
1453 -- Parameters : p_page_id - identifies UI page ( -> CZ_UI_PAGES.page_id )
1454 -- Return : JRAD Page/Region name
1455 --
1456 FUNCTION generate_JRAD_Page_Name(p_page_counter IN NUMBER)
1457 RETURN VARCHAR2 IS
1458
1459 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
1460 l_counter NUMBER;
1461
1462 BEGIN
1463
1464 --
1465 -- generate Page Name based on l_master_template_node.ui_def_id ( global variable - scope is "current UI" )
1466 -- and g_PAGE_COUNTER ( global variable - scope is "current UI" )
1467 --
1468 l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
1469 TO_CHAR(g_UI_Context.ui_def_id) || '/Page_' ||TO_CHAR(g_UI_Context.ui_def_id)||'_'||
1470 TO_CHAR(p_page_counter);
1471
1472 SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1473 WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1474
1475 IF l_counter>0 THEN
1476 l_counter:=l_counter+1;
1477 l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1478
1479 LOOP
1480 SELECT COUNT(*) INTO l_counter FROM CZ_UI_PAGES
1481 WHERE ui_def_id=g_UI_Context.ui_def_id AND jrad_doc=l_jrad_doc;
1482 IF l_counter=0 THEN
1483 EXIT;
1484 ELSE
1485 l_counter:=l_counter+1;
1486 l_jrad_doc := l_jrad_doc||'_'||TO_CHAR(l_counter);
1487 END IF;
1488 END LOOP;
1489 END IF;
1490
1491 RETURN l_jrad_doc;
1492 END generate_JRAD_Page_Name;
1493
1494 --
1495 -- get short JRAD name
1496 --
1497 FUNCTION get_Short_JRAD_Name(p_full_jrad_name IN VARCHAR2)
1498 RETURN VARCHAR2 IS
1499 l_str VARCHAR2(4000);
1500 l_num NUMBER;
1501 BEGIN
1502 l_str := p_full_jrad_name;
1503
1504 LOOP
1505 l_num := INSTR(l_str,'/');
1506 IF l_num > 0 THEN
1507 l_str := SUBSTR(l_str,l_num+1);
1508 IF l_str IS NULL THEN
1509 EXIT;
1510 END IF;
1511 ELSE
1512 EXIT;
1513 END IF;
1514 END LOOP;
1515 RETURN l_str;
1516 END get_Short_JRAD_Name;
1517
1518 --
1519 -- return CZ_UI_DEFS data of Master Template Settings
1520 --
1521 FUNCTION get_UI_Def_Node(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
1522 BEGIN
1523 --
1524 -- if cache contains given ui_def_id then get it from cache
1525 --
1526 IF NOT(g_ui_def_nodes_tbl.EXISTS(p_ui_def_id)) THEN
1527 SELECT * INTO g_ui_def_nodes_tbl(p_ui_def_id)
1528 FROM CZ_UI_DEFS
1529 WHERE ui_def_id = p_ui_def_id;
1530 END IF;
1531 RETURN g_ui_def_nodes_tbl(p_ui_def_id);
1532 END get_UI_Def_Node;
1533
1534 --
1535 -- return data for model node with ps_node_id = p_ps_node_id
1536 -- ( private )
1537 -- Parameters :
1538 -- p_ps_node_id - identifies node in Model tree
1539 --
1540 FUNCTION get_Model_Node(p_ps_node_id IN NUMBER)
1541 RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1542 BEGIN
1543 -- if cache is populated then get it from cache
1544 IF NOT(g_model_nodes_tbl.EXISTS(p_ps_node_id)) THEN
1545 SELECT DISTINCT *
1546 INTO g_model_nodes_tbl(p_ps_node_id)
1547 FROM CZ_UITEMPLS_FOR_PSNODES_V
1548 WHERE ps_node_id = p_ps_node_id AND
1549 ui_def_id=g_UI_Context.from_master_template_id AND
1550 deleted_flag = G_NO_FLAG;
1551
1552 ---Bug6406709
1553 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
1554 g_model_nodes_tbl(p_ps_node_id).ui_omit := G_NO_FLAG;
1555 END IF;
1556
1557 g_ps_node_persist_id_tbl(g_model_nodes_tbl(p_ps_node_id).persistent_node_id) := p_ps_node_id;
1558 END IF;
1559 RETURN g_model_nodes_tbl(p_ps_node_id);
1560 END get_Model_Node;
1561
1562 --
1563 -- get persistent_node_id of root node
1564 --
1565 FUNCTION get_Root_Persistent_Node_Id
1566 RETURN NUMBER IS
1567 BEGIN
1568 -- if cache is populated then get it from cache
1569 IF NOT(g_root_persist_id_tbl.EXISTS(g_UI_Context.devl_project_id)) THEN
1570 IF g_model_nodes_tbl.EXISTS(g_UI_Context.devl_project_id) THEN
1571 g_root_persist_id_tbl(g_UI_Context.devl_project_id) := g_model_nodes_tbl(g_UI_Context.devl_project_id).persistent_node_id;
1572 ELSE
1573 SELECT persistent_node_id
1574 INTO g_root_persist_id_tbl(g_UI_Context.devl_project_id)
1575 FROM CZ_PS_NODES
1576 WHERE devl_project_id=g_UI_Context.devl_project_id AND
1577 parent_id IS NULL AND
1578 deleted_flag=G_NO_FLAG;
1579 END IF;
1580 END IF;
1581 RETURN g_root_persist_id_tbl(g_UI_Context.devl_project_id);
1582 END get_Root_Persistent_Node_Id;
1583
1584 --
1585 -- return data for model node with a given persistent node id
1586 -- ( private )
1587 -- Parameters :
1588 -- p_persistent_node_id - persistent id of model node
1589 -- p_model_id - identifies model
1590 -- p_ui_def_id - identifies UI Master Template Setting
1591 --
1592 FUNCTION get_Model_Node_By_Persist_Id(p_persistent_node_id IN NUMBER,
1593 p_model_id IN NUMBER)
1594 RETURN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE IS
1595 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1596 l_ps_node_id NUMBER;
1597 BEGIN
1598 -- if cache is populated then get it from cache
1599 SELECT DISTINCT *
1600 INTO l_node
1601 FROM CZ_UITEMPLS_FOR_PSNODES_V
1602 WHERE devl_project_id = p_model_id AND
1603 persistent_node_id = p_persistent_node_id AND
1604 ui_def_id=g_UI_Context.from_master_template_id AND
1605 deleted_flag = G_NO_FLAG;
1606
1607 ---Bug6406709
1608 IF l_node.ui_omit = G_YES_FLAG AND g_UI_Context.show_all_nodes_flag = G_YES_FLAG THEN
1609 l_node.ui_omit := G_NO_FLAG;
1610 END IF;
1611
1612 RETURN l_node;
1613 EXCEPTION
1614 WHEN OTHERS THEN
1615 RETURN l_node;
1616 END get_Model_Node_By_Persist_Id;
1617
1618 --
1619 -- return data for model node with ps_node_id = p_ps_node_id
1620 -- ( private )
1621 --
1622 PROCEDURE get_Child_Nodes(p_ps_node_id IN NUMBER,
1623 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
1624 x_seq_nodes_tbl OUT NOCOPY ui_page_el_int_tbl_type, -- fix for bug 6837809 : skudryav 28-Mar-2008
1625 x_child_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
1626 x_non_deleted_child_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
1627 p_include_deleted_nodes IN VARCHAR2 DEFAULT G_NO_FLAG) IS
1628
1629 l_current_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
1630 l_ps_node_id NUMBER;
1631
1632 BEGIN
1633
1634 IF g_Use_Cache AND g_model_nodes_tbl.EXISTS(p_ps_node_id) THEN
1635 l_ps_node_id := g_model_nodes_tbl.First;
1636 LOOP
1637 IF l_ps_node_id IS NULL THEN
1638 EXIT;
1639 END IF;
1640 l_current_model_node := g_model_nodes_tbl(l_ps_node_id);
1641 IF l_current_model_node.parent_id=p_ps_node_id THEN
1642 IF (l_current_model_node.ui_omit=G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) THEN
1643 x_child_nodes_tbl(l_current_model_node.persistent_node_id) := l_current_model_node;
1644 x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := l_current_model_node;
1645 END IF;
1646 IF l_current_model_node.deleted_flag = G_NO_FLAG THEN
1647 x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := l_current_model_node;
1648 END IF;
1649 END IF;
1650
1651 l_ps_node_id := g_model_nodes_tbl.NEXT(l_ps_node_id);
1652 END LOOP;
1653
1654 ELSE -- cache is not used
1655
1656 FOR i IN (SELECT DISTINCT *
1657 FROM CZ_UITEMPLS_FOR_PSNODES_V
1658 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
1659 parent_id = p_ps_node_id AND
1660 (ui_omit = G_NO_FLAG OR p_show_all_nodes = G_YES_FLAG) AND
1661 (p_include_deleted_nodes = G_YES_FLAG OR deleted_flag = G_NO_FLAG)
1662 ORDER BY tree_seq)
1663 LOOP
1664 IF i.deleted_flag = G_NO_FLAG AND i.detailed_type_id=G_UNDEFINED_DATA_TYPE THEN
1665 g_WRONG_PS_NODE_ID := i.ps_node_id;
1666 DEBUG('get_Child_Nodes() error message : node with ps_node_id='||TO_CHAR(i.ps_node_id)||
1667 ' has undefined detailed type.');
1668 RAISE WRONG_EXT_PS_TYPE;
1669 END IF;
1670
1671 ---Bug6406709
1672 IF i.ui_omit = G_YES_FLAG AND p_show_all_nodes = G_YES_FLAG THEN
1673 i.ui_omit := G_NO_FLAG;
1674 END IF;
1675
1676 x_child_nodes_tbl(i.persistent_node_id) := i;
1677 x_seq_nodes_tbl(x_seq_nodes_tbl.COUNT+1) := i;
1678
1679 IF i.deleted_flag = G_NO_FLAG THEN
1680 x_non_deleted_child_nodes_tbl(x_non_deleted_child_nodes_tbl.COUNT+1) := i;
1681 END IF;
1682 END LOOP;
1683 END IF;
1684 END get_Child_Nodes;
1685
1686 --
1687 -- return expl data for model node with ps_node_id = p_ps_node_id
1688 -- ( private )
1689 --
1690 FUNCTION get_Expl_Id(p_model_id IN NUMBER,
1691 p_ps_node_id IN NUMBER,
1692 p_component_id IN NUMBER,
1693 p_ps_node_type IN NUMBER) RETURN NUMBER IS
1694
1695 l_model_ref_expl_id CZ_MODEL_REF_EXPLS.model_ref_expl_id%TYPE;
1696
1697 BEGIN
1698
1699 IF p_ps_node_id IS NOT NULL AND (p_component_id IS NULL OR p_component_id=0) THEN
1700 DEBUG('Wrong data in CZ_PS_NODES. Node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1701 ' has invalid component_id='||TO_CHAR(p_component_id));
1702 RETURN 0;
1703 END IF;
1704
1705 --
1706 -- if cache is populated then get it from cache
1707 --
1708 IF g_ref_expls_tbl.EXISTS(p_ps_node_id) THEN
1709 l_model_ref_expl_id := g_ref_expls_tbl(p_ps_node_id);
1710 ELSE
1711
1712 IF p_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND g_ref_expls_tbl.EXISTS(p_component_id) THEN
1713 l_model_ref_expl_id := g_ref_expls_tbl(p_component_id);
1714 g_ref_expls_tbl(p_ps_node_id) := l_model_ref_expl_id;
1715 ELSE
1716 IF p_ps_node_type IN (G_REFERENCE_TYPE, G_CONNECTOR_TYPE) THEN
1717 SELECT MIN(model_ref_expl_id)
1718 INTO l_model_ref_expl_id
1719 FROM CZ_MODEL_REF_EXPLS a
1720 WHERE model_id = p_model_id AND
1721 referring_node_id = p_ps_node_id AND
1722 deleted_flag = G_NO_FLAG;
1723 ELSE
1724 SELECT MIN(model_ref_expl_id)
1725 INTO l_model_ref_expl_id
1726 FROM CZ_MODEL_REF_EXPLS
1727 WHERE model_id = p_model_id AND
1728 component_id = p_component_id AND
1729 referring_node_id IS NULL AND
1730 deleted_flag = G_NO_FLAG;
1731 END IF;
1732 END IF;
1733
1734 END IF;
1735
1736 RETURN l_model_ref_expl_id;
1737
1738 EXCEPTION
1739 WHEN OTHERS THEN
1740 DEBUG('get_Expl_Id() node with ps_node_id='||TO_CHAR(p_ps_node_id)||
1741 ' can not be handled : '||SQLERRM);
1742 RETURN 0;
1743 END get_Expl_Id;
1744
1745 --
1746 -- return UI page node
1747 --
1748 FUNCTION get_UI_Page_Node(p_page_id IN NUMBER)
1749 RETURN CZ_UI_PAGES%ROWTYPE IS
1750 l_page_node CZ_UI_PAGES%ROWTYPE;
1751 BEGIN
1752 SELECT * INTO l_page_node
1753 FROM CZ_UI_PAGES
1754 WHERE page_id=p_page_id AND
1755 ui_def_id=g_UI_Context.ui_def_id;
1756 RETURN l_page_node;
1757 END get_UI_Page_Node;
1758
1759 --
1760 -- return UI element with element_id = p_element_id
1761 --
1762 FUNCTION get_UI_Element(p_element_id IN VARCHAR2,
1763 p_page_id IN NUMBER)
1764 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
1765 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
1766 BEGIN
1767 SELECT *
1768 INTO l_ui_node
1769 FROM CZ_UI_PAGE_ELEMENTS
1770 WHERE ui_def_id = g_UI_Context.ui_def_id AND
1771 page_id=p_page_id AND
1772 element_id = p_element_id;
1773 RETURN l_ui_node;
1774 END get_UI_Element;
1775
1776 --
1777 -- return UI element with element_id = p_element_id
1778 --
1779 FUNCTION get_Page_Set(p_page_set_id IN NUMBER)
1780 RETURN CZ_UI_PAGE_SETS%ROWTYPE IS
1781 l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
1782 BEGIN
1783 SELECT *
1784 INTO l_page_set_node
1785 FROM CZ_UI_PAGE_SETS
1786 WHERE page_set_id = p_page_set_id AND
1787 ui_def_id=g_UI_Context.ui_def_id;
1788 RETURN l_page_set_node;
1789 END get_Page_Set;
1790
1791 FUNCTION get_UI_Node_Name(p_page_id IN NUMBER,
1792 p_template_id IN NUMBER,
1793 p_template_name IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
1794
1795 l_counter NUMBER;
1796 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
1797
1798 BEGIN
1799
1800 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
1801 WHERE ui_def_id=g_UI_Context.ui_def_id AND
1802 page_id=p_page_id AND
1803 ctrl_template_id=p_template_id AND
1804 deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
1805
1806 IF p_template_name IS NULL THEN
1807 BEGIN
1808 SELECT template_name||' - '||TO_CHAR(l_counter)
1809 INTO l_ui_node_name
1810 FROM CZ_UI_TEMPLATES
1811 WHERE template_id=p_template_id AND
1812 ui_def_id=g_UI_Context.ui_def_id;
1813 EXCEPTION
1814 WHEN NO_DATA_FOUND THEN
1815 SELECT template_name||' - '||TO_CHAR(l_counter)
1816 INTO l_ui_node_name
1817 FROM CZ_UI_TEMPLATES
1818 WHERE template_id=p_template_id AND
1819 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1820 END;
1821 ELSE
1822 l_ui_node_name := p_template_name||' - '||TO_CHAR(l_counter);
1823 END IF;
1824
1825 RETURN l_ui_node_name;
1826 END get_UI_Node_Name;
1827
1828 --
1829 -- return full JRAD name of UI template
1830 --
1831 FUNCTION get_JRAD_Name(p_template_id IN NUMBER,
1832 p_template_ui_def_id IN NUMBER DEFAULT NULL)
1833 RETURN VARCHAR2 IS
1834
1835 BEGIN
1836 --
1837 -- if it is in cache get it from cache
1838 --
1839 IF g_template_jrad_name_tbl.EXISTS(p_template_id)
1840 AND p_template_ui_def_id IS NOT NULL THEN
1841 RETURN g_template_jrad_name_tbl(p_template_id);
1842 ELSE
1843 IF p_template_ui_def_id IS NOT NULL THEN
1844 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1845 FROM CZ_UI_TEMPLATES
1846 WHERE template_id=p_template_id AND
1847 ui_def_id=p_template_ui_def_id;
1848 ELSE
1849 BEGIN
1850 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1851 FROM CZ_UI_TEMPLATES
1852 WHERE template_id=p_template_id AND
1853 ui_def_id=g_UI_Context.ui_def_id;
1854 EXCEPTION
1855 WHEN OTHERS THEN
1856 SELECT jrad_doc INTO g_template_jrad_name_tbl(p_template_id)
1857 FROM CZ_UI_TEMPLATES
1858 WHERE template_id=p_template_id AND
1859 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
1860 END;
1861 END IF;
1862 END IF;
1863 RETURN g_template_jrad_name_tbl(p_template_id);
1864 END get_JRAD_Name;
1865
1866 --
1867 -- get UI Action Id associated with a given ui node
1868 --
1869 FUNCTION get_UI_Action_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
1870 RETURN NUMBER IS
1871 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
1872 BEGIN
1873 SELECT ui_action_id
1874 INTO l_ui_action_id
1875 FROM CZ_UI_ACTIONS
1876 WHERE ui_def_id = p_ui_node.ui_def_id AND
1877 source_page_id=p_ui_node.page_id AND
1878 element_id = p_ui_node.element_id AND
1879 deleted_flag=G_NO_FLAG;
1880 RETURN l_ui_action_id;
1881 END get_UI_Action_Id;
1882
1883 --
1884 -- copy CZ_INTL_TEXTS record
1885 --
1886 FUNCTION copy_Intl_Text(p_intl_text_id IN NUMBER,
1887 p_target_ui_def_id IN NUMBER,
1888 p_page_id IN NUMBER,
1889 p_element_id IN NUMBER) RETURN NUMBER IS
1890
1891 l_ui_intl_text_id NUMBER;
1892 l_model_id NUMBER;
1893 l_seeded_flag VARCHAR2(1);
1894
1895 BEGIN
1896
1897 IF p_intl_text_id IS NULL OR p_intl_text_id=0 THEN
1898 RETURN p_intl_text_id;
1899 ELSE
1900 SELECT seeded_flag INTO l_seeded_flag FROM CZ_INTL_TEXTS
1901 WHERE intl_text_id=p_intl_text_id;
1902 END IF;
1903
1904 IF l_seeded_flag='0' OR l_seeded_flag IS NULL THEN
1905 IF p_target_ui_def_id IS NOT NULL AND p_target_ui_def_id<>0 THEN
1906 SELECT NVL(devl_project_id,0) INTO l_model_id FROM CZ_UI_DEFS
1907 WHERE ui_def_id=p_target_ui_def_id;
1908 END IF;
1909 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
1910
1911 INSERT INTO CZ_INTL_TEXTS
1912 (INTL_TEXT_ID,
1913 TEXT_STR,
1914 DELETED_FLAG,
1915 SEEDED_FLAG,
1916 UI_DEF_ID,
1917 MODEL_ID,
1918 UI_PAGE_ID,
1919 UI_PAGE_ELEMENT_ID
1920 )
1921 SELECT
1922 l_ui_intl_text_id,
1923 text_str,
1924 G_NO_FLAG,
1925 G_NO_FLAG,
1926 p_target_ui_def_id,
1927 l_model_id,
1928 p_page_id,
1929 p_element_id
1930 FROM CZ_INTL_TEXTS
1931 WHERE intl_text_id=p_intl_text_id;
1932 RETURN l_ui_intl_text_id;
1933 ELSE
1934 RETURN p_intl_text_id;
1935 END IF;
1936 END copy_Intl_Text;
1937
1938 --
1939 -- refresh UI Images in UI based on data from Master Template
1940 --
1941 PROCEDURE refresh_UI_Images(p_ui_def_id IN NUMBER, p_master_template_id IN NUMBER) IS
1942 BEGIN
1943
1944 INSERT INTO CZ_UI_IMAGES
1945 (UI_DEF_ID
1946 ,MASTER_TEMPLATE_FLAG
1947 ,IMAGE_USAGE_CODE
1948 ,IMAGE_FILE
1949 ,DELETED_FLAG
1950 ,SEEDED_FLAG
1951 ,ENTITY_CODE,
1952 LAST_UPDATE_LOGIN)
1953 SELECT
1954 p_ui_def_id
1955 ,G_NO_FLAG
1956 ,IMAGE_USAGE_CODE
1957 ,IMAGE_FILE
1958 ,DELETED_FLAG
1959 ,G_NO_FLAG
1960 ,ENTITY_CODE
1961 ,-UID
1962 FROM CZ_UI_IMAGES a
1963 WHERE ui_def_id=p_master_template_id
1964 AND deleted_flag=G_NO_FLAG AND
1965 NOT EXISTS(SELECT NULL FROM CZ_UI_IMAGES
1966 WHERE ui_def_id=p_ui_def_id AND
1967 IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
1968 ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG);
1969 /*
1970 UPDATE CZ_UI_IMAGES a
1971 SET IMAGE_FILE=(SELECT IMAGE_FILE FROM CZ_UI_IMAGES
1972 WHERE ui_def_id=p_master_template_id AND
1973 IMAGE_USAGE_CODE=a.IMAGE_USAGE_CODE AND
1974 ENTITY_CODE=a.ENTITY_CODE AND deleted_flag=G_NO_FLAG )
1975 WHERE ui_def_id=p_ui_def_id AND deleted_flag=G_NO_FLAG;
1976 */
1977 END refresh_UI_Images;
1978
1979 PROCEDURE refresh_Cont_Templs
1980 (p_content_type IN NUMBER,
1981 p_master_template_id IN NUMBER,
1982 p_ui_def_id IN NUMBER,
1983 p_create_cont_entry IN BOOLEAN) IS
1984
1985 l_template_ui_def_id NUMBER;
1986
1987 BEGIN
1988
1989 IF p_create_cont_entry THEN
1990 l_template_ui_def_id := g_UI_Context.ui_def_id;
1991 ELSE
1992 l_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
1993 END IF;
1994 FOR h IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
1995 WHERE ui_def_id = p_master_template_id AND
1996 content_type=p_content_type AND
1997 deleted_flag=G_NO_FLAG)
1998 LOOP
1999 BEGIN
2000 INSERT INTO CZ_UI_CONT_TYPE_TEMPLS
2001 (ui_def_id,
2002 content_type,
2003 template_id,
2004 master_template_flag,
2005 seeded_flag,
2006 template_ui_def_id,
2007 deleted_flag)
2008 VALUES(
2009 p_ui_def_id,
2010 h.content_type,
2011 h.template_id,
2012 G_NO_FLAG,
2013 G_NO_FLAG,
2014 l_template_ui_def_id,
2015 G_NO_FLAG);
2016 --
2017 -- populate cache of UI Templates
2018 --
2019 g_template_id_tbl(h.content_type) := h.template_id;
2020 g_template_ui_def_id_tbl(h.content_type) := l_template_ui_def_id;
2021
2022 EXCEPTION
2023 WHEN OTHERS THEN
2024 DEBUG(SQLERRM);
2025 END;
2026 END LOOP;
2027 END refresh_Cont_Templs;
2028
2029 PROCEDURE save_Template_As_Local
2030 (p_template_id IN NUMBER,
2031 p_ui_def_id IN NUMBER) IS
2032
2033 l_xmldoc xmldom.DOMDocument;
2034 l_jrad_doc VARCHAR2(4000);
2035 l_template_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
2036
2037 BEGIN
2038
2039 l_template_jrad_doc := get_JRAD_Name(p_template_id, G_GLOBAL_TEMPLATES_UI_DEF_ID);
2040
2041 l_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
2042 TO_CHAR(p_ui_def_id) || '/' ||
2043 get_Short_JRAD_Name(l_template_jrad_doc);
2044 BEGIN
2045
2046 --
2047 -- create UI Template in JRAD repository
2048 --
2049 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
2050
2051 IF xmldom.isNull(l_xmldoc) THEN
2052 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2053 p_token_name => 'UI_TEMPLATE',
2054 p_token_value => l_template_jrad_doc,
2055 p_fatal_error => TRUE);
2056 RAISE WRONG_UI_TEMPLATE;
2057 END IF;
2058
2059 Save_Document(p_xml_doc => l_xmldoc,
2060 p_doc_name => l_jrad_doc);
2061
2062 EXCEPTION
2063 WHEN OTHERS THEN
2064 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
2065 p_token_name => 'UI_TEMPLATE',
2066 p_token_value => l_template_jrad_doc,
2067 p_fatal_error => TRUE);
2068 RAISE WRONG_UI_TEMPLATE;
2069 END;
2070
2071 BEGIN
2072 INSERT INTO CZ_UI_TEMPLATES
2073 (TEMPLATE_ID,
2074 UI_DEF_ID,
2075 TEMPLATE_NAME,
2076 TEMPLATE_TYPE,
2077 TEMPLATE_DESC,
2078 PARENT_CONTAINER_TYPE,
2079 JRAD_DOC,
2080 BUTTON_BAR_TEMPLATE_ID,
2081 MESSAGE_TYPE,
2082 MAIN_MESSAGE_ID,
2083 TITLE_ID,
2084 SEEDED_FLAG,
2085 LAYOUT_UI_STYLE,
2086 ROOT_REGION_TYPE,
2087 ROOT_ELEMENT_SIGNATURE_ID,
2088 BUTTON_BAR_TEMPL_UIDEF_ID,
2089 TEMPLATE_USAGE,
2090 AMN_USAGE,
2091 DELETED_FLAG)
2092 SELECT
2093 template_id,
2094 g_UI_Context.ui_def_id,
2095 TEMPLATE_NAME,
2096 TEMPLATE_TYPE,
2097 TEMPLATE_DESC,
2098 PARENT_CONTAINER_TYPE,
2099 l_jrad_doc,
2100 BUTTON_BAR_TEMPLATE_ID,
2101 MESSAGE_TYPE,
2102 MAIN_MESSAGE_ID,
2103 TITLE_ID,
2104 G_NO_FLAG,
2105 LAYOUT_UI_STYLE,
2106 ROOT_REGION_TYPE,
2107 ROOT_ELEMENT_SIGNATURE_ID,
2108 BUTTON_BAR_TEMPL_UIDEF_ID,
2109 TEMPLATE_USAGE,
2110 AMN_USAGE,
2111 G_NO_FLAG
2112 FROM CZ_UI_TEMPLATES
2113 WHERE template_id=p_template_id AND ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
2114
2115 g_template_jrad_name_tbl(p_template_id) := l_jrad_doc;
2116
2117 EXCEPTION
2118 WHEN OTHERS THEN
2119 DEBUG('save_Template_As_Local() : '||SQLERRM);
2120 END;
2121
2122 END save_Template_As_Local;
2123
2124 --
2125 -- check : should new Content type record be added ?
2126 --
2127 FUNCTION must_Add_Content_Type_Record(p_content_type IN NUMBER,
2128 p_it_is_in_model IN BOOLEAN) RETURN BOOLEAN IS
2129
2130 BEGIN
2131
2132 IF p_content_type IN(CZ_TYPES.UMANDATORY_COMPONENT_TYPEID,
2133 CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,
2134 CZ_TYPES.UMINMAX_COMPONENT_TYPEID,
2135 CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
2136 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
2137 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
2138 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
2139 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
2140 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
2141 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
2142 CZ_TYPES.UTEXT_FEATURE_TYPEID,
2143 CZ_TYPES.UTOTAL_TYPEID,
2144 CZ_TYPES.URESOURCE_TYPEID,
2145 CZ_TYPES.UMANDATORY_REF_TYPEID,
2146 CZ_TYPES.UCONNECTOR_TYPEID) THEN
2147
2148 IF g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY
2149 AND p_it_is_in_model THEN
2150
2151 RETURN TRUE;
2152
2153 ELSE
2154
2155 RETURN FALSE;
2156
2157 END IF;
2158
2159
2160 ELSIF p_content_type IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID
2161 ,CZ_TYPES.UMINMAX_BOM_REF_TYPEID
2162 ,CZ_TYPES.UBOM_NSTBOM_NQMTX_TYPEID
2163 ,CZ_TYPES.UBOM_NSTBOM_NQNMTX_TYPEID
2164 ,CZ_TYPES.UBOM_NSTBOM_QNMTX_TYPEID
2165 ,CZ_TYPES.UBOM_NSTBOM_QMTX_TYPEID
2166 ,CZ_TYPES.UBOM_STIO_NQMTX_TYPEID
2167 ,CZ_TYPES.UBOM_STIO_NQNMTX_TYPEID
2168 ,CZ_TYPES.UBOM_STIO_QNMTX_TYPEID
2169 ,CZ_TYPES.UBOM_STIO_QMTX_TYPEID) THEN
2170
2171 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY
2172 AND p_it_is_in_model THEN
2173
2174 RETURN TRUE;
2175
2176 ELSE
2177
2178 RETURN FALSE;
2179
2180 END IF;
2181
2182 ELSIF (g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2183 p_content_type IN(G_MSGTEMP_RQDMSG_OVRCTRDIC
2184 ,G_MSGTEMP_RQDMSG_NOVRCTRDIC
2185 ,G_MSGTEMP_RQDMSG_INVLDINP
2186 ,G_MSGTEMP_RQDMSG_FATERR)) OR
2187 (g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY AND
2188 p_content_type IN(G_MSGTEMP_OPTMSG_VLDNOTIF
2189 ,G_MSGTEMP_OPTMSG_CNFRMSAVFIN
2190 ,G_MSGTEMP_OPTMSG_CNFRMCANCEL
2191 ,G_MSGTEMP_OPTMSG_CNFRMDELINST
2192 ,G_MSGTEMP_OPTMSG_CNFRMLDINST
2193 ,G_MSGTEMP_OPTMSG_CNFRMEDINST
2194 ,G_MSGTEMP_OPTMSG_QRYDELINST)) OR
2195 (g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY AND
2196 p_content_type IN(G_UTILTEMP_BB_NSTXN
2197 ,G_UTILTEMP_BB_BASICTXN
2198 ,G_UTILTEMP_BB_2PGNVG
2199 ,G_UTILTEMP_BB_NPGNVG)) OR
2200 (g_UI_Context.CTRLTEMPLATEUSE_UTILITYPAGE = G_TEMPLATE_USE_LOCAL_COPY AND
2201 p_content_type IN(G_UTILTEMP_PAGLAY_PGSTA
2202 ,G_UTILTEMP_BB_PRVWPG
2203 ,G_UTILTEMP_UPT_CFGPRV
2204 ,G_UTILTEMP_UPT_CXNCHO)) THEN
2205
2206 RETURN TRUE;
2207
2208 END IF;
2209
2210 RETURN FALSE;
2211
2212 END must_Add_Content_Type_Record;
2213
2214 --
2215 -- create local UI templates
2216 --
2217 PROCEDURE create_Local_UI_Templates IS
2218
2219 l_handled_templates_tbl number_tbl_type;
2220 l_detailed_type_id_tbl number_tbl_type;
2221 l_template_rec CZ_UI_TEMPLATES%ROWTYPE;
2222 l_jrad_doc VARCHAR2(4000);
2223 l_template_ui_def_id NUMBER := G_GLOBAL_TEMPLATES_UI_DEF_ID;
2224 l_create_cont_entry BOOLEAN := FALSE;
2225
2226 BEGIN
2227
2228 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2229 g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY OR
2230 g_UI_Context.CTRLTEMPLUSE_OPTMSG = G_TEMPLATE_USE_LOCAL_COPY OR
2231 g_UI_Context.CTRLTEMPLUSE_COMMON = G_TEMPLATE_USE_LOCAL_COPY OR
2232 g_UI_Context.CTRLTEMPLUSE_REQDMSG = G_TEMPLATE_USE_LOCAL_COPY THEN
2233
2234 --
2235 -- open XML parser
2236 --
2237 Open_Parser;
2238 END IF;
2239
2240 --
2241 -- refresh UI Images in UI based on data from Master Template
2242 --
2243
2244 refresh_UI_Images(p_ui_def_id => g_UI_Context.ui_def_id,
2245 p_master_template_id => g_UI_Context.from_master_template_id);
2246
2247 IF g_UI_Context.CTRLTEMPLUSE_BOM = G_TEMPLATE_USE_LOCAL_COPY OR
2248 g_UI_Context.CTRLTEMPLUSE_NONBOM = G_TEMPLATE_USE_LOCAL_COPY THEN
2249
2250 FOR m IN(SELECT DISTINCT detailed_type_id
2251 FROM CZ_UITEMPLS_FOR_PSNODES_V
2252 WHERE devl_project_id=g_UI_Context.devl_project_id AND
2253 ui_def_id=g_UI_Context.from_master_template_id AND
2254 deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG)
2255 LOOP
2256 l_detailed_type_id_tbl(m.detailed_type_id) := m.detailed_type_id;
2257 END LOOP;
2258
2259 END IF;
2260
2261 FOR k IN(SELECT * FROM CZ_UI_CONT_TYPE_TEMPLS
2262 WHERE ui_def_id = g_UI_Context.from_master_template_id AND
2263 deleted_flag = G_NO_FLAG)
2264 LOOP
2265
2266 IF k.content_type = G_PAGE_STATUS_CONTENT_TYPE THEN
2267 g_PAGE_STATUS_TEMPLATE_ID := k.template_id;
2268 END IF;
2269
2270 l_create_cont_entry := must_Add_Content_Type_Record(k.content_type,
2271 l_detailed_type_id_tbl.EXISTS(k.content_type));
2272
2273 IF l_create_cont_entry THEN
2274
2275 save_Template_As_Local(p_template_id => k.template_id,
2276 p_ui_def_id => g_UI_Context.ui_def_id);
2277
2278 refresh_Cont_Templs(p_content_type => k.content_type,
2279 p_master_template_id => g_UI_Context.from_master_template_id,
2280 p_ui_def_id => g_UI_Context.ui_def_id,
2281 p_create_cont_entry => TRUE);
2282
2283 ELSE
2284 IF NOT(l_detailed_type_id_tbl.EXISTS(k.content_type)) THEN
2285 refresh_Cont_Templs(p_content_type => k.content_type,
2286 p_master_template_id => g_UI_Context.from_master_template_id,
2287 p_ui_def_id => g_UI_Context.ui_def_id,
2288 p_create_cont_entry => FALSE);
2289 END IF;
2290
2291 END IF;
2292
2293 END LOOP;
2294
2295 SELECT template_id INTO g_DRILLDOWN_TEMPLATE_ID
2296 FROM CZ_UI_CONT_TYPE_TEMPLS
2297 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
2298 content_type=2151 AND deleted_flag=G_NO_FLAG;
2299
2300 -- close XML parser
2301 Close_Parser;
2302
2303 -- reopen XML parser
2304 Open_Parser;
2305
2306 END create_Local_UI_Templates;
2307
2308 --
2309 -- return page_ref node of nearest page
2310 --
2311 FUNCTION get_UI_Page_Ref_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2312 RETURN CZ_UI_PAGE_REFS%ROWTYPE IS
2313
2314 l_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
2315
2316 BEGIN
2317
2318 IF p_ui_node.page_id IS NULL THEN
2319 RETURN l_page_ref_node;
2320 END IF;
2321
2322 SELECT *
2323 INTO l_page_ref_node
2324 FROM CZ_UI_PAGE_REFS a
2325 WHERE ui_def_id = p_ui_node.ui_def_id AND
2326 (target_page_id,page_set_id) IN
2327 (SELECT page_id,NVL(page_set_id,a.page_set_id) FROM CZ_UI_PAGES
2328 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id AND
2329 deleted_flag NOT IN(G_YES_FLAG)) AND
2330 deleted_flag = G_NO_FLAG;
2331
2332 RETURN l_page_ref_node;
2333
2334 END get_UI_Page_Ref_Node;
2335
2336 --
2337 -- the function returns a Model Path
2338 -- for a given persistent_node_id
2339 --
2340 FUNCTION get_Page_Path(p_ps_node_id IN NUMBER,
2341 p_page_set_id IN NUMBER DEFAULT NULL) RETURN VARCHAR2 IS
2342
2343 l_model_path VARCHAR2(32000);
2344 l_persistent_node_id NUMBER;
2345 l_parent_id NUMBER;
2346 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
2347 l_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
2348 l_seq_nbr NUMBER;
2349 l_node_depth NUMBER;
2350
2351 BEGIN
2352
2353 IF p_page_set_id IS NOT NULL THEN
2354
2355 l_page_set_node := get_Page_Set(p_page_set_id);
2356
2357 IF l_page_set_node.persistent_node_id IS NOT NULL THEN
2358 l_persistent_node_id := l_page_set_node.persistent_node_id;
2359 ELSE
2360 BEGIN
2361 SELECT MIN(node_depth) INTO l_node_depth FROM CZ_UI_PAGE_REFS
2362 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2363 AND deleted_flag=G_NO_FLAG;
2364
2365 SELECT MIN(SEQ_NBR) INTO l_seq_nbr FROM CZ_UI_PAGE_REFS
2366 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2367 AND node_depth=l_node_depth AND deleted_flag=G_NO_FLAG;
2368
2369 SELECT DISTINCT target_persistent_node_id INTO l_persistent_node_id
2370 FROM CZ_UI_PAGE_REFS
2371 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id
2372 AND seq_nbr=l_seq_nbr AND
2373 target_persistent_node_id NOT IN
2374 (SELECT ref_persistent_node_id FROM CZ_UI_REFS WHERE
2375 ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG) AND
2376 rownum<2;
2377 EXCEPTION
2378 WHEN OTHERS THEN
2379 RETURN '.';
2380 END;
2381 END IF;
2382
2383 l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id, g_UI_Context.devl_project_id);
2384
2385 END IF;
2386
2387 SELECT parent_id INTO l_parent_id FROM CZ_PS_NODES
2388 WHERE ps_node_id=p_ps_node_id;
2389
2390 IF l_parent_id IS NULL THEN
2391 RETURN '.';
2392 END IF;
2393
2394 IF p_page_set_id IS NULL THEN
2395 FOR i IN(SELECT persistent_node_id, parent_id FROM CZ_PS_NODES
2396 START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2397 CONNECT BY PRIOR parent_id=ps_node_id AND
2398 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2399 LOOP
2400 IF l_model_path IS NULL THEN
2401 l_model_path:=TO_CHAR(i.persistent_node_id);
2402 ELSIF i.parent_id IS NOT NULL THEN
2403 l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2404 ELSE
2405 NULL;
2406 END IF;
2407 END LOOP;
2408
2409 RETURN l_model_path;
2410
2411 ELSE
2412
2413 FOR i IN(SELECT ps_node_id,persistent_node_id, parent_id FROM CZ_PS_NODES
2414 START WITH ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG
2415 CONNECT BY PRIOR parent_id=ps_node_id AND
2416 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
2417 LOOP
2418 IF i.ps_node_id = l_ps_node.ps_node_id THEN
2419 EXIT;
2420 END IF;
2421 IF l_model_path IS NULL THEN
2422 l_model_path:=TO_CHAR(i.persistent_node_id);
2423 ELSIF i.parent_id IS NOT NULL THEN
2424 l_model_path:=TO_CHAR(i.persistent_node_id)||'.'||l_model_path;
2425 ELSE
2426 NULL;
2427 END IF;
2428 END LOOP;
2429
2430 IF l_model_path IS NULL THEN
2431 l_model_path := '.';
2432 END IF;
2433
2434 RETURN l_model_path;
2435
2436
2437 END IF;
2438 END get_Page_Path;
2439
2440 --
2441 -- the function retrurns a Model Path
2442 -- for a given persistent_node_id
2443 --
2444 FUNCTION get_Model_Path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2445 RETURN VARCHAR2 IS
2446
2447 l_page_path VARCHAR2(32000) := '';
2448 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2449
2450 PROCEDURE construct_Path(p_current_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2451 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
2452 BEGIN
2453
2454 IF p_current_ui_node.pagebase_persistent_node_id <>
2455 p_current_ui_node.persistent_node_id THEN
2456
2457 l_ui_node := get_UI_Element(p_element_id => p_current_ui_node.parent_element_id,
2458 p_page_id => p_current_ui_node.page_id);
2459
2460 IF l_ui_node.pagebase_persistent_node_id = l_ui_node.persistent_node_id OR
2461 l_ui_node.parent_element_id IS NULL THEN
2462 RETURN;
2463 ELSE
2464 IF l_ui_node.persistent_node_id IS NOT NULL AND
2465 p_current_ui_node.persistent_node_id <> l_ui_node.persistent_node_id THEN
2466
2467 l_page_path := TO_CHAR(l_ui_node.persistent_node_id) || '.' ||
2468 l_page_path;
2469 END IF;
2470 construct_Path(l_ui_node);
2471 END IF;
2472 ELSE
2473 RETURN;
2474 END IF;
2475 END construct_Path;
2476
2477 BEGIN
2478
2479 IF p_ui_node.persistent_node_id=0 THEN
2480 RETURN '*';
2481 END IF;
2482
2483 IF p_ui_node.parent_element_id IS NULL THEN
2484 RETURN '.';
2485 ELSE
2486
2487 BEGIN
2488 l_parent_ui_node := get_UI_Element(p_ui_node.parent_element_id, p_ui_node.page_id);
2489
2490 EXCEPTION
2491 WHEN NO_DATA_FOUND THEN
2492 RETURN '.';
2493 END;
2494
2495 IF l_parent_ui_node.parent_element_id IS NULL AND
2496 l_parent_ui_node.persistent_node_id=p_ui_node.persistent_node_id THEN
2497 RETURN '.';
2498 END IF;
2499
2500 l_page_path := TO_CHAR(p_ui_node.persistent_node_id);
2501
2502 construct_Path(p_ui_node);
2503 END IF;
2504 RETURN l_page_path;
2505 END get_Model_Path;
2506
2507 --
2508 -- return COUNT ( of UI page sets of a given UI) + 1
2509 --
2510 FUNCTION get_Page_Set_Counter RETURN NUMBER IS
2511 l_page_counter NUMBER;
2512 BEGIN
2513 SELECT COUNT(*)
2514 INTO l_page_counter
2515 FROM CZ_UI_PAGE_SETS
2516 WHERE ui_def_id = g_UI_Context.ui_def_id AND
2517 deleted_flag=G_NO_FLAG;
2518 RETURN l_page_counter;
2519 END get_Page_Set_Counter;
2520
2521 --
2522 -- return COUNT ( of UI pages of a given UI) + 1
2523 --
2524 FUNCTION get_Last_Seq_Nbr(p_parent_element_id IN VARCHAR2) RETURN NUMBER IS
2525 l_seq_nbr NUMBER;
2526 l_num_element_id NUMBER;
2527 l_parent_seq_nbr NUMBER;
2528 BEGIN
2529 SELECT NVL(MAX(seq_nbr),0)
2530 INTO l_seq_nbr
2531 FROM CZ_UI_PAGE_ELEMENTS
2532 WHERE ui_def_id=g_UI_Context.ui_def_id AND
2533 parent_element_id=p_parent_element_id AND
2534 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2535 RETURN l_seq_nbr;
2536 END get_Last_Seq_Nbr;
2537
2538 --
2539 -- return COUNT ( of UI pages of a given UI) + 1
2540 --
2541 FUNCTION get_Last_Split_Page_Nbr(p_page_id IN NUMBER) RETURN NUMBER IS
2542 l_split_seq_nbr NUMBER;
2543 BEGIN
2544 SELECT NVL(MAX(split_seq_nbr),0)
2545 INTO l_split_seq_nbr
2546 FROM CZ_UI_PAGES
2547 WHERE ui_def_id=g_UI_Context.ui_def_id AND
2548 persistent_node_id IN
2549 (SELECT persistent_node_id FROM CZ_UI_PAGES
2550 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id);
2551 RETURN l_split_seq_nbr;
2552 END get_Last_Split_Page_Nbr;
2553
2554 --
2555 -- return COUNT ( of UI pages of a given UI) + 1
2556 --
2557 FUNCTION get_Num_Elements_On_Page(p_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2558 RETURN NUMBER IS
2559 l_counter NUMBER;
2560 BEGIN
2561 SELECT COUNT(element_id)
2562 INTO l_counter
2563 FROM CZ_UI_PAGE_ELEMENTS
2564 WHERE ui_def_id=p_page_node.ui_def_id AND
2565 page_id=p_page_node.page_id AND ctrl_template_id IS NOT NULL AND
2566 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
2567 RETURN l_counter;
2568 END get_Num_Elements_On_Page;
2569
2570 --
2571 -- create new Page Set
2572 --
2573 PROCEDURE create_Page_Set
2574 (
2575 p_ui_def_id IN NUMBER,
2576 p_page_set_type IN NUMBER,
2577 p_persistent_node_id IN NUMBER,
2578 p_model_ref_expl_id IN NUMBER,
2579 x_page_set_id OUT NOCOPY NUMBER
2580 ) IS
2581
2582 l_ui_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
2583 l_page_set_name CZ_UI_PAGE_SETS.name%TYPE;
2584 l_root_persistent_node_id NUMBER;
2585 l_page_set_counter NUMBER;
2586
2587 BEGIN
2588
2589 IF p_page_set_type IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,
2590 G_MODEL_TREE_MENU,G_PAGE_FLOW,G_SUBTABS) THEN
2591
2592 SELECT COUNT(page_set_id)+1 INTO l_page_set_counter FROM CZ_UI_PAGE_SETS
2593 WHERE ui_def_id=p_ui_def_id AND page_set_type=p_page_set_type AND
2594 deleted_flag=G_NO_FLAG;
2595 IF p_page_set_type IN(G_PAGE_FLOW) THEN
2596 l_page_set_name := 'Page Flow - '|| TO_CHAR(l_page_set_counter);
2597 ELSIF p_page_set_type IN(G_SUBTABS) THEN
2598 l_page_set_name := 'Subtabs - '|| TO_CHAR(l_page_set_counter);
2599 ELSE
2600 l_page_set_name := 'Menu - '|| TO_CHAR(l_page_set_counter);
2601 END IF;
2602 ELSE
2603 l_page_set_counter := get_Page_Set_Counter() + 1;
2604 l_page_set_name := 'Page Set - ' || TO_CHAR(l_page_set_counter);
2605 END IF;
2606
2607 x_page_set_id := allocateId('CZ_UI_PAGE_SETS_S');
2608
2609 INSERT INTO CZ_UI_PAGE_SETS
2610 (ui_def_id,
2611 page_set_id,
2612 page_set_type,
2613 NAME,
2614 suppress_refresh_flag,
2615 train_jrad_doc,
2616 persistent_node_id,
2617 pagebase_expl_node_id,
2618 deleted_flag)
2619 VALUES
2620 (p_ui_def_id,
2621 x_page_set_id,
2622 p_page_set_type,
2623 l_page_set_name,
2624 g_suppress_refresh_flag,
2625 NULL,
2626 p_persistent_node_id,
2627 p_model_ref_expl_id,
2628 G_NO_FLAG);
2629
2630 l_ui_page_set_node.ui_def_id := p_ui_def_id;
2631 l_ui_page_set_node.page_set_id := x_page_set_id;
2632 l_ui_page_set_node.page_set_type := p_page_set_type;
2633 l_ui_page_set_node.name := l_page_set_name;
2634 l_ui_page_set_node.suppress_refresh_flag := g_suppress_refresh_flag;
2635 l_ui_page_set_node.train_jrad_doc:= NULL;
2636 l_ui_page_set_node.persistent_node_id := p_persistent_node_id;
2637 l_ui_page_set_node.pagebase_expl_node_id := p_model_ref_expl_id;
2638 l_ui_page_set_node.deleted_flag := G_NO_FLAG;
2639
2640 g_ui_page_sets_tbl(x_page_set_id) := l_ui_page_set_node;
2641
2642 END create_Page_Set;
2643
2644 --
2645 -- check : is it UI Page
2646 --
2647 FUNCTION is_UI_Page(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
2648 x_drilldown OUT NOCOPY BOOLEAN) RETURN BOOLEAN IS
2649
2650 l_root_persistent_node_id NUMBER;
2651 BEGIN
2652
2653 l_root_persistent_node_id := get_Root_Persistent_Node_Id();
2654
2655 x_drilldown := FALSE;
2656
2657 ------- Single Page --------
2658
2659
2660 -- If the navigation style is Single_Page, and pagination style is "Subsections"
2661 -- or "Single Page", then create new page for all non virtual P/C/M/OC.
2662 -- All other UI nodes will not have their own page
2663
2664 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2665 (
2666 (g_UI_Context.PAGIN_NONINST IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2667 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2668 OR
2669 (g_UI_Context.PAGIN_BOMOC IN(G_SUBSECTIONS_PG_TYPE,G_SINGLE_PG_TYPE) AND
2670 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2671 )
2672 THEN
2673
2674 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2675 RETURN TRUE;
2676 END IF;
2677
2678 RETURN FALSE;
2679 END IF;
2680
2681
2682 -- If the navigation style is "Single Page" and pagination type is "New Pages"
2683 -- then create new Pages for all P/C/M/OC but the immediate children of the root.
2684 -- The immediate children of the root will be created on the page for the root
2685 -- as subsections
2686
2687 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2688 (
2689 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2690 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2691 OR
2692 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2693 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2694 ) THEN
2695
2696 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2697 RETURN TRUE;
2698 END IF;
2699
2700 -- If this is child of the root, add it to the root page
2701
2702 IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2703 RETURN FALSE;
2704 ELSE
2705 x_drilldown := TRUE;
2706 RETURN TRUE;
2707 END IF;
2708
2709 RETURN FALSE;
2710 END IF;
2711
2712 -- If the navigation style is "Single Page" and pagination is "Drilldown Pages",
2713 -- then create new page for all non virtual nodes and virtual nodes which are not
2714 -- immediate child of the root. Immediate children of the root will have their
2715 -- UI Nodes on the page for the root
2716
2717 IF g_UI_Context.PRIMARY_NAVIGATION=G_SINGLE_PAGE AND
2718 (
2719 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2720 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2721 OR
2722 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2723 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2724 ) THEN
2725
2726 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2727 RETURN TRUE;
2728 END IF;
2729
2730 IF p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2731 RETURN FALSE;
2732 ELSE
2733 x_drilldown := TRUE;
2734 RETURN TRUE;
2735 END IF;
2736
2737 RETURN FALSE;
2738
2739 END IF;
2740
2741 ----- Page Flow -------
2742
2743 -- If the primary navigation is "Page Flow" and pagination is "Single Page",
2744 -- then create new page for root, non virtual nodes and direct children (P/C/M/OC)
2745 -- of the root. All under nodes will be created as subsections
2746
2747 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2748 (
2749 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2750 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2751 OR
2752 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2753 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2754 ) THEN
2755
2756 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2757 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2758 RETURN TRUE;
2759 END IF;
2760
2761 RETURN FALSE;
2762 END IF;
2763
2764 -- If the primary navigation is "Page Flow" and pagination is "New Pages", then
2765 -- create create new pages for all P/C/M/OC
2766
2767 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2768 (
2769 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2770 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2771 OR
2772 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2773 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2774 ) THEN
2775
2776 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2777 RETURN TRUE;
2778 END IF;
2779
2780 RETURN TRUE;
2781 END IF;
2782
2783 -- If the primary navigation is "Page Flow" and pagination is "Drilldown Pages", then
2784 -- create create new pages for all (P/C/M/OC)
2785 -- Further, drilldowns will be created for virtual P/C/M/OC that are not direct children
2786 -- of the root
2787
2788 IF g_UI_Context.PRIMARY_NAVIGATION=G_PAGE_FLOW AND
2789 (
2790 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2791 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2792 OR
2793 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2794 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2795 ) THEN
2796
2797 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2798 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2799 RETURN TRUE;
2800 END IF;
2801
2802 IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2803 x_drilldown := TRUE;
2804 END IF;
2805
2806 RETURN TRUE;
2807 END IF;
2808
2809 ----- Menu -----
2810
2811 -- If the navigation style is Side Nav or Tree and pagination type is "Single Page" or
2812 -- "Subsections" then create new pages for root and its direct children.
2813 -- For all other P/C/M/OC, if the node is non virtual then create a new Page with a
2814 -- Drilldown to it. For all other nodes no new page
2815
2816 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2817 (
2818 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2819 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2820 OR
2821 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2822 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2823 ) THEN
2824
2825 IF p_node.parent_id IS NULL OR
2826 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2827 RETURN TRUE;
2828 END IF;
2829
2830 IF p_node.virtual_flag = G_NO_FLAG THEN
2831 x_drilldown := TRUE;
2832 RETURN TRUE;
2833 END IF;
2834
2835 RETURN FALSE;
2836 END IF;
2837
2838 -- If the navigation style is "Side Menu" or "Tree", and pagination style is "New Pages"
2839 -- then create new pages for all P/C/M/OC
2840
2841 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2842 (
2843 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2844 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2845 OR
2846 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2847 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2848 ) THEN
2849
2850 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2851 RETURN TRUE;
2852 END IF;
2853
2854 RETURN TRUE;
2855 END IF;
2856
2857 -- If the navigation style is "Side Menu" or "Tree", and pagination is "Drilldown Pages", then
2858 -- create new new pages for all P/C/M/OC. Further all page for all nodes that are not
2859 -- direct children of the root, will have a Drilldown
2860
2861 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU,G_MULTI_LEVEL_MENU,G_MODEL_TREE_MENU) AND
2862 (
2863 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2864 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2865 OR
2866 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2867 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2868 ) THEN
2869
2870 IF p_node.parent_id IS NULL OR
2871 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2872 RETURN TRUE;
2873 END IF;
2874
2875 IF p_node.virtual_flag = G_NO_FLAG THEN
2876 x_drilldown := TRUE;
2877 RETURN TRUE;
2878 END IF;
2879
2880 x_drilldown := TRUE;
2881 RETURN TRUE;
2882 END IF;
2883
2884 ---- Subtabs -------
2885
2886 -- If the navigation style is "Subtabs" and pagination is "Single Page" or
2887 -- "Subsections," then create new pages for the root, non virtual nodes and
2888 -- direct P/C/M/OC children of the root.
2889
2890 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2891 (
2892 (g_UI_Context.PAGIN_NONINST IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2893 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2894 OR
2895 (g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) AND
2896 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2897 ) THEN
2898
2899 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2900 p_node.parent_persistent_node_id = l_root_persistent_node_id THEN
2901 RETURN TRUE;
2902 END IF;
2903
2904 RETURN FALSE;
2905 END IF;
2906
2907 -- If navigation style is "Subtabs" and pagination is "New Pages," then create
2908 -- new pages for all P/C/M/OC
2909
2910 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2911 (
2912 (g_UI_Context.PAGIN_NONINST = G_NEW_PAGES_PG_TYPE AND
2913 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2914 OR
2915 (g_UI_Context.PAGIN_BOMOC = G_NEW_PAGES_PG_TYPE AND
2916 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2917 ) THEN
2918
2919 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG THEN
2920 RETURN TRUE;
2921 END IF;
2922
2923 RETURN TRUE;
2924
2925 END IF;
2926
2927 -- If the navigation style is "Subtabs" and pagination is "Drilldown Pages,"
2928 -- then create new pages for all P/C/M/OC. Node not directly under the root will
2929 -- also have a drilldown
2930
2931 IF g_UI_Context.PRIMARY_NAVIGATION = G_SUBTABS AND
2932 (
2933 (g_UI_Context.PAGIN_NONINST = G_DRILLDOWN_PAGES_PG_TYPE AND
2934 p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE))
2935 OR
2936 (g_UI_Context.PAGIN_BOMOC = G_DRILLDOWN_PAGES_PG_TYPE AND
2937 p_node.ps_node_type IN (G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE))
2938 ) THEN
2939
2940 IF p_node.parent_id IS NULL OR p_node.virtual_flag = G_NO_FLAG OR
2941 p_node.parent_persistent_node_id=l_root_persistent_node_id THEN
2942 RETURN TRUE;
2943 END IF;
2944
2945 IF p_node.parent_persistent_node_id<>l_root_persistent_node_id THEN
2946 x_drilldown := TRUE;
2947 END IF;
2948
2949 RETURN TRUE;
2950 END IF;
2951
2952 -- If none of the above satisfy, then create new pages for all P/C/M/OC
2953
2954 IF p_node.ps_node_type IN (G_PRODUCT_TYPE, G_COMPONENT_TYPE,
2955 G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
2956 RETURN TRUE;
2957 ELSE
2958 RETURN FALSE;
2959 END IF;
2960 END is_UI_Page;
2961
2962 --
2963 -- check - is it UI Reference or no
2964 --
2965 FUNCTION is_UI_Reference(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
2966 RETURN BOOLEAN IS
2967 l_ui_ref_exists VARCHAR2(1);
2968 BEGIN
2969 SELECT 'x' INTO l_ui_ref_exists
2970 FROM CZ_UI_REFS
2971 WHERE ui_def_id=p_ui_node.ui_def_id AND
2972 ref_persistent_node_id=p_ui_node.persistent_node_id AND
2973 deleted_flag=G_NO_FLAG AND rownum<2;
2974 RETURN TRUE;
2975 EXCEPTION
2976 WHEN NO_DATA_FOUND THEN
2977 RETURN FALSE;
2978 END is_UI_Reference;
2979
2980 --
2981 -- remove Instance Management Controls from CZ_UI_PAGE_ELEMENTS
2982 --
2983 PROCEDURE remove_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
2984
2985 l_changed_pages_tbl number_tbl_type;
2986 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
2987 l_mark_flag CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
2988
2989 BEGIN
2990
2991 FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag
2992 FROM CZ_UI_PAGE_ELEMENTS
2993 WHERE ui_def_id=p_ui_node.ui_def_id AND
2994 persistent_node_id=p_ui_node.persistent_node_id AND
2995 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
2996 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG))
2997 LOOP
2998 IF i.suppress_refresh_flag=G_YES_FLAG THEN
2999 UPDATE CZ_UI_PAGE_ELEMENTS
3000 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3001 persistent_node_id=0
3002 WHERE ui_def_id=p_ui_node.ui_def_id AND
3003 page_id=i.page_id AND
3004 element_id=i.element_id;
3005 ELSE
3006 SELECT suppress_refresh_flag INTO l_suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
3007 WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=i.page_id AND
3008 element_id=i.parent_element_id;
3009 IF l_suppress_refresh_flag=G_YES_FLAG THEN
3010 UPDATE CZ_UI_PAGE_ELEMENTS
3011 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
3012 persistent_node_id=0
3013 WHERE ui_def_id=p_ui_node.ui_def_id AND
3014 page_id=i.page_id AND
3015 element_id=i.element_id;
3016 ELSE
3017 UPDATE CZ_UI_PAGE_ELEMENTS
3018 SET deleted_flag=G_MARK_TO_DELETE
3019 WHERE ui_def_id=p_ui_node.ui_def_id AND
3020 page_id=i.page_id AND
3021 element_id=i.element_id;
3022 END IF;
3023 END IF;
3024
3025 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
3026
3027 END LOOP;
3028
3029 END remove_Instance_Controls;
3030
3031 --
3032 -- merge two Page Flows - parent and child Page Flows into one Page Flow
3033 -- p_ui_node is a first node of child Page Flow
3034 --
3035 PROCEDURE merge_Page_Flows(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3036 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3037 l_changed_target_ids_tbl number_tbl_type;
3038 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
3039 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
3040 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3041 l_child_page_set_id NUMBER;
3042 l_child_page_ref_id NUMBER;
3043 l_parent_page_set_id NUMBER;
3044 l_parent_page_ref_id NUMBER;
3045 l_page_ref_type NUMBER;
3046
3047 BEGIN
3048 --
3049 -- get Page set id of UI node p_ui_node
3050 --
3051 BEGIN
3052 l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3053 l_child_page_set_id := l_ui_page_ref_node.page_set_id;
3054 l_child_page_ref_id := l_ui_page_ref_node.page_ref_id;
3055 EXCEPTION
3056 WHEN NO_DATA_FOUND THEN
3057 RETURN;
3058 END;
3059
3060 --
3061 -- get Page set id and page_ref_id of parent Page Flow
3062 --
3063 SELECT MIN(page_ref_id)
3064 INTO l_parent_page_ref_id
3065 FROM CZ_UI_PAGE_REFS
3066 WHERE ui_def_id=p_ui_node.ui_def_id AND
3067 target_persistent_node_id=p_ui_node.parent_persistent_node_id AND
3068 deleted_flag=G_NO_FLAG;
3069
3070 SELECT page_set_id,page_ref_type
3071 INTO l_parent_page_set_id,l_page_ref_type FROM CZ_UI_PAGE_REFS
3072 WHERE ui_def_id=p_ui_node.ui_def_id AND page_ref_id=l_parent_page_ref_id;
3073
3074 --
3075 -- attach child Page Flow to the parent Page Flow
3076 --
3077 UPDATE CZ_UI_PAGE_REFS
3078 SET parent_page_ref_id = l_parent_page_ref_id
3079 WHERE ui_def_id=p_ui_node.ui_def_id AND
3080 page_ref_id=l_child_page_ref_id;
3081
3082 UPDATE CZ_UI_PAGE_REFS
3083 SET page_set_id = l_parent_page_set_id
3084 WHERE ui_def_id=p_ui_node.ui_def_id AND
3085 target_page_id IN
3086 (SELECT target_page_id FROM CZ_UI_PAGE_REFS
3087 START WITH ui_def_id=p_ui_node.ui_def_id AND
3088 page_ref_id=l_child_page_ref_id
3089 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3090 ui_def_id=p_ui_node.ui_def_id AND
3091 page_set_id=l_child_page_set_id AND
3092 PRIOR page_set_id=l_child_page_set_id AND
3093 PRIOR ui_def_id=p_ui_node.ui_def_id AND
3094 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3095 RETURNING target_persistent_node_id BULK COLLECT INTO l_changed_target_ids_tbl;
3096
3097 IF l_changed_target_ids_tbl.COUNT>0 THEN
3098 FOR x IN l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3099 LOOP
3100 UPDATE CZ_UI_PAGES
3101 SET page_set_id=l_parent_page_set_id
3102 WHERE persistent_node_id=l_changed_target_ids_tbl(x) AND
3103 ui_def_id=p_ui_node.ui_def_id;
3104
3105 -- IF l_page_ref_type IN(G_PAGE_FLOW,G_SUBTABS) THEN
3106 l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(x), g_UI_Context.devl_project_id);
3107 l_target_path := get_Page_Path(l_model_node.ps_node_id, l_parent_page_set_id);
3108 UPDATE CZ_UI_PAGE_REFS
3109 SET target_path=l_target_path
3110 WHERE ui_def_id=p_ui_node.ui_def_id AND
3111 page_set_id=l_parent_page_set_id AND
3112 target_persistent_node_id=l_changed_target_ids_tbl(x) AND
3113 target_path<>l_target_path;
3114 -- END IF;
3115
3116 END LOOP;
3117 END IF;
3118
3119 END merge_Page_Flows;
3120
3121 --
3122 -- split one Page Flow into two Page Flows - parent and child
3123 --
3124 PROCEDURE split_Page_Flow(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3125 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3126 l_changed_target_ids_tbl number_tbl_type;
3127 l_target_page_ids_tbl number_tbl_type;
3128 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
3129 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
3130 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3131 l_page_set_type NUMBER;
3132 l_initial_page_set_id NUMBER;
3133 l_initial_page_ref_id NUMBER;
3134 l_page_set_id NUMBER;
3135
3136 BEGIN
3137
3138 --
3139 -- get Page set id of UI node p_ui_node
3140 --
3141 BEGIN
3142 l_ui_page_ref_node := get_UI_Page_Ref_Node(p_ui_node);
3143 l_initial_page_set_id := l_ui_page_ref_node.page_set_id;
3144 l_initial_page_ref_id := l_ui_page_ref_node.page_ref_id;
3145 EXCEPTION
3146 WHEN NO_DATA_FOUND THEN
3147 RETURN;
3148 END;
3149
3150 /*
3151 IF l_ui_page_ref_node.page_ref_type=G_SUBTABS THEN
3152 l_page_set_type := G_SUBTABS;
3153 ELSE
3154 l_page_set_type := G_PAGE_FLOW;
3155 END IF;
3156 */
3157
3158 IF l_page_set_type IS NULL THEN
3159 l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
3160 END IF;
3161
3162 create_Page_Set(p_ui_def_id => p_ui_node.ui_def_id,
3163 p_page_set_type => l_page_set_type,
3164 p_persistent_node_id => p_ui_node.persistent_node_id,
3165 p_model_ref_expl_id => p_ui_node.model_ref_expl_id,
3166 x_page_set_id => l_page_set_id);
3167
3168 UPDATE CZ_UI_PAGE_REFS
3169 SET target_path='.',
3170 parent_page_ref_id=NULL,
3171 node_depth=1,
3172 seq_nbr=1
3173 WHERE ui_def_id=p_ui_node.ui_def_id AND
3174 page_ref_id=l_initial_page_ref_id;
3175
3176 UPDATE CZ_UI_PAGE_REFS
3177 SET page_set_id = l_page_set_id
3178 WHERE ui_def_id=p_ui_node.ui_def_id AND
3179 target_persistent_node_id IN
3180 (SELECT target_persistent_node_id FROM CZ_UI_PAGE_REFS
3181 START WITH ui_def_id=p_ui_node.ui_def_id AND
3182 page_ref_id=l_initial_page_ref_id
3183 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
3184 ui_def_id=p_ui_node.ui_def_id AND
3185 page_set_id=l_initial_page_set_id AND
3186 PRIOR page_set_id=l_initial_page_set_id AND
3187 PRIOR ui_def_id=p_ui_node.ui_def_id AND
3188 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG)
3189 RETURNING target_page_id,target_persistent_node_id
3190 BULK COLLECT INTO l_target_page_ids_tbl,l_changed_target_ids_tbl;
3191
3192 IF l_changed_target_ids_tbl.COUNT>0 THEN
3193 FOR j in l_changed_target_ids_tbl.First..l_changed_target_ids_tbl.Last
3194 LOOP
3195 UPDATE CZ_UI_PAGES
3196 SET page_set_id=l_page_set_id
3197 WHERE page_id=l_target_page_ids_tbl(j) AND
3198 ui_def_id=p_ui_node.ui_def_id;
3199
3200 l_model_node := get_Model_Node_By_Persist_Id(l_changed_target_ids_tbl(j), g_UI_Context.devl_project_id);
3201 l_target_path := get_Page_Path(l_model_node.ps_node_id, l_page_set_id);
3202
3203 UPDATE CZ_UI_PAGE_REFS
3204 SET target_path=l_target_path
3205 WHERE ui_def_id=p_ui_node.ui_def_id AND
3206 page_set_id=l_page_set_id AND
3207 target_persistent_node_id=l_changed_target_ids_tbl(j) AND
3208 target_path<>l_target_path;
3209
3210 END LOOP;
3211 END IF;
3212
3213 END split_Page_Flow;
3214
3215 --
3216 -- check - is CX valid or no ?
3217 --
3218 FUNCTION get_CX_Button_Status(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
3219 RETURN VARCHAR2 IS
3220
3221 l_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
3222 l_ui_cx_command_name CZ_EXPRESSION_NODES.data_value%TYPE;
3223 l_undeleted_exist BOOLEAN;
3224
3225 BEGIN
3226
3227 l_model_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id, g_UI_Context.devl_project_id);
3228
3229 BEGIN
3230 SELECT cx_command_name
3231 INTO l_ui_cx_command_name
3232 FROM CZ_UI_ACTIONS
3233 WHERE ui_def_id=p_ui_node.ui_def_id AND
3234 element_id=p_ui_node.element_id AND
3235 cx_command_name IS NOT NULL AND-- fix for bug 3923033
3236 deleted_flag=G_NO_FLAG;
3237 EXCEPTION
3238 WHEN NO_DATA_FOUND THEN
3239 RETURN G_CX_VALID;
3240 END;
3241
3242 l_undeleted_exist := FALSE;
3243 FOR i IN(SELECT a.deleted_flag, a.invalid_flag, a.disabled_flag ,
3244 a.INSTANTIATION_SCOPE, b.data_value, a.name
3245 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3246 WHERE a.devl_project_id=l_model_node.devl_project_id AND
3247 a.component_id=l_model_node.ps_node_id AND
3248 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3249 a.deleted_flag=G_NO_FLAG AND
3250 b.rule_id=a.rule_id AND
3251 b.deleted_flag=G_NO_FLAG AND
3252 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3253 data_value=l_ui_cx_command_name)
3254 LOOP
3255
3256 IF i.deleted_flag=G_NO_FLAG THEN
3257 l_undeleted_exist := TRUE;
3258 END IF;
3259
3260 IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3261 i.deleted_flag=G_NO_FLAG THEN
3262 RETURN G_CX_VALID;
3263 END IF;
3264 END LOOP;
3265
3266 IF l_model_node.ps_node_type=G_REFERENCE_TYPE THEN
3267
3268 FOR i IN(SELECT a.name, a.deleted_flag, a.invalid_flag, a.disabled_flag,
3269 a.INSTANTIATION_SCOPE, b.data_value
3270 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
3271 WHERE a.devl_project_id=l_model_node.devl_project_id AND
3272 a.component_id IN
3273 (SELECT ps_node_id FROM CZ_PS_NODES
3274 WHERE devl_project_id IN
3275 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
3276 START WITH model_id=l_model_node.devl_project_id AND
3277 referring_node_id=l_model_node.ps_node_id
3278 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
3279 deleted_flag='0' AND PRIOR deleted_flag='0') AND
3280 deleted_flag='0') AND
3281 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
3282 b.rule_id=a.rule_id AND
3283 b.deleted_flag=G_NO_FLAG AND
3284 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
3285 data_value IS NOT NULL)
3286 LOOP
3287
3288 IF l_model_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
3289 i.INSTANTIATION_SCOPE=1 AND i.disabled_flag=G_NO_FLAG THEN
3290
3291 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
3292 p_token_name1 => 'EVENT_NAME',
3293 p_token_value1 => i.data_value,
3294 p_token_name2 => 'RULE_NAME',
3295 p_token_value2 => i.name,
3296 p_fatal_error => FALSE);
3297
3298
3299 RETURN G_CX_INVALID;
3300 END IF;
3301
3302 IF i.deleted_flag=G_NO_FLAG THEN
3303 l_undeleted_exist := TRUE;
3304 END IF;
3305
3306 IF i.invalid_flag=G_NO_FLAG AND i.disabled_flag=G_NO_FLAG AND
3307 i.deleted_flag=G_NO_FLAG THEN
3308 RETURN G_CX_VALID;
3309 END IF;
3310 END LOOP;
3311
3312 END IF;
3313
3314 IF l_undeleted_exist=FALSE THEN
3315 RETURN G_CX_MUST_BE_DELETED;
3316 ELSE
3317 RETURN G_CX_INVALID;
3318 END IF;
3319 END get_CX_Button_Status;
3320
3321 --
3322 -- refresh expl ids in UI tables
3323 --
3324 PROCEDURE sync_Expl_Ids(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3325 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3326 p_expl_id IN NUMBER) IS
3327
3328 BEGIN
3329
3330
3331 IF p_expl_id <> p_ui_node.model_ref_expl_id THEN
3332 UPDATE CZ_UI_PAGE_ELEMENTS
3333 SET model_ref_expl_id=p_expl_id
3334 WHERE ui_def_id=p_ui_node.ui_def_id AND
3335 page_id=p_ui_node.page_id AND
3336 element_id=p_ui_node.element_id;
3337
3338 IF p_ui_node.parent_element_id IS NULL THEN
3339 UPDATE CZ_UI_PAGES
3340 SET pagebase_expl_node_id=p_expl_id
3341 WHERE page_id=p_ui_node.page_id AND
3342 ui_def_id=p_ui_node.ui_def_id;
3343 IF SQL%ROWCOUNT>0 THEN
3344 UPDATE CZ_UI_PAGE_SETS
3345 SET pagebase_expl_node_id=p_expl_id
3346 WHERE ui_def_id=g_UI_Context.ui_def_id
3347 AND persistent_node_id=p_ui_node.persistent_node_id
3348 AND deleted_flag=G_NO_FLAG;
3349 END IF;
3350 END IF;
3351
3352 UPDATE CZ_UI_PAGE_REFS
3353 SET target_expl_node_id=p_expl_id
3354 WHERE ui_def_id=p_ui_node.ui_def_id AND
3355 target_persistent_node_id=p_node.persistent_node_id;
3356
3357 END IF;
3358 END sync_Expl_Ids;
3359
3360 --
3361 -- refresh expl ids in UI tables
3362 --
3363 PROCEDURE sync_Expl_Ids(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
3364 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
3365 l_model_ref_expl_id NUMBER;
3366 BEGIN
3367 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
3368 p_ps_node_id => p_node.ps_node_id,
3369 p_component_id => p_node.component_id,
3370 p_ps_node_type => p_node.ps_node_type);
3371 sync_Expl_Ids(p_node, p_ui_node, l_model_ref_expl_id);
3372 END;
3373
3374
3375
3376 --
3377 -- replace Template Id of UI node p_ui_node
3378 --
3379 PROCEDURE replace_Template_Id(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
3380 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
3381
3382 l_element_signature_id NUMBER;
3383 l_counter NUMBER;
3384
3385 BEGIN
3386
3387 SELECT COUNT(*)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
3388 WHERE ui_def_id=p_ui_node.ui_def_id AND
3389 page_id=p_ui_node.page_id AND
3390 element_signature_id=p_model_node.root_element_signature_id AND
3391 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG);
3392
3393 UPDATE CZ_UI_PAGE_ELEMENTS
3394 SET ctrl_template_id=p_model_node.template_id,
3395 element_signature_id=p_model_node.root_element_signature_id,
3396 deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH),
3397 name=p_model_node.template_name||' - '||l_counter
3398 WHERE ui_def_id=p_ui_node.ui_def_id AND
3399 page_id=p_ui_node.page_id AND
3400 element_id=p_ui_node.element_id;
3401
3402 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
3403
3404 END replace_Template_Id;
3405
3406 --
3407 -- remove common attributes in case when we attach template
3408 -- starting with DOM node p_node
3409 -- Parameters : p_node - identifies DOM node of subtree's root
3410 --
3411 PROCEDURE remove_TopLevel_Attributes(p_node xmldom.DOMNode) IS
3412 l_root_elem xmldom.DOMElement;
3413 BEGIN
3414 l_root_elem := xmldom.makeElement(p_node);
3415 FOR i IN g_toplevel_attr_tbl.FIRST .. g_toplevel_attr_tbl.LAST
3416 LOOP
3417 BEGIN
3418 xmldom.removeAttribute(l_root_elem, g_toplevel_attr_tbl(i));
3419 EXCEPTION
3420 WHEN OTHERS THEN
3421 NULL;
3422 END;
3423 END LOOP;
3424 END remove_TopLevel_Attributes;
3425
3426 --
3427 -- remove non user attributes from a given XML node
3428 --
3429 PROCEDURE remove_Non_User_Attributes(p_node xmldom.DOMNode) IS
3430
3431 l_root_elem xmldom.DOMElement;
3432 l_node_map_tbl xmldom.DOMNamedNodeMap;
3433 l_node_attr xmldom.DOMNode;
3434 l_attr_name VARCHAR2(32000);
3435 l_length NUMBER;
3436
3437 BEGIN
3438
3439 l_root_elem := xmldom.makeElement(p_node);
3440
3441 l_node_map_tbl := xmldom.getAttributes(p_node);
3442 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3443 l_length := xmldom.getLength(l_node_map_tbl);
3444 --
3445 -- loop through attributes
3446 --
3447 FOR i IN 0 .. l_length - 1
3448 LOOP
3449 l_node_attr := xmldom.item(l_node_map_tbl, i);
3450
3451 IF NOT(xmldom.isNull(l_node_attr)) THEN
3452 l_attr_name := xmldom.getNodeName(l_node_attr);
3453 IF (lower(l_attr_name) not like ('user:attribute%') AND
3454 lower(l_attr_name) <> G_ID_ATTRIBUTE) OR
3455 lower(l_attr_name)=G_USER_ATTRIBUTE10_NAME THEN
3456 xmldom.removeAttribute(l_root_elem, l_attr_name);
3457 END IF;
3458 END IF;
3459 END LOOP;
3460 END IF;
3461
3462 EXCEPTION
3463 WHEN OTHERS THEN
3464 DEBUG('remove_Non_User_Attributes() : '||SQLERRM);
3465 END remove_Non_User_Attributes;
3466
3467 --
3468 -- clear the cache
3469 --
3470 PROCEDURE flash_Cache IS
3471 BEGIN
3472 g_model_nodes_tbl.DELETE;
3473 g_ui_page_elements_tbl.DELETE;
3474 g_ps_node_persist_id_tbl.DELETE;
3475 g_ui_pages_tbl.DELETE;
3476 g_ui_page_refs_tbl.DELETE;
3477 g_ui_refs_tbl.DELETE;
3478 g_ui_page_sets_tbl.DELETE;
3479 g_ref_expls_tbl.DELETE;
3480 g_ui_action_ids_tbl.DELETE;
3481 END flash_Cache;
3482
3483 --
3484 -- cache Mode nodes and UI data
3485 --
3486 PROCEDURE populate_Cache IS
3487
3488 BEGIN
3489
3490 flash_Cache;
3491
3492 FOR i IN (SELECT DISTINCT *
3493 FROM CZ_UITEMPLS_FOR_PSNODES_V
3494 WHERE ui_def_id=g_UI_Context.from_master_template_id AND
3495 devl_project_id = g_UI_Context.devl_project_id)
3496 LOOP
3497 g_model_nodes_tbl(i.ps_node_id) := i;
3498 g_ps_node_persist_id_tbl(i.persistent_node_id) := i.ps_node_id;
3499 END LOOP;
3500
3501 FOR i IN(SELECT model_ref_expl_id,referring_node_id,component_id
3502 FROM CZ_MODEL_REF_EXPLS
3503 WHERE model_id=g_UI_Context.devl_project_id AND
3504 deleted_flag=G_NO_FLAG)
3505 LOOP
3506 IF i.referring_node_id IS NOT NULL THEN
3507 g_ref_expls_tbl(i.referring_node_id) := i.model_ref_expl_id;
3508 ELSE
3509 g_ref_expls_tbl(i.component_id) := i.model_ref_expl_id;
3510 END IF;
3511 END LOOP;
3512
3513 FOR i IN (SELECT *
3514 FROM CZ_UI_PAGES
3515 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3516 deleted_flag = G_NO_FLAG)
3517 LOOP
3518 g_ui_pages_tbl(i.page_id) := i;
3519
3520 IF NOT(g_ui_pages_counter_tbl.EXISTS(g_UI_Context.ui_def_id)) THEN
3521 g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := 1;
3522 ELSE
3523 g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) := g_ui_pages_counter_tbl(g_UI_Context.ui_def_id) + 1;
3524 END IF;
3525 END LOOP;
3526
3527 FOR i IN (SELECT *
3528 FROM CZ_UI_PAGE_ELEMENTS
3529 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3530 deleted_flag = G_NO_FLAG)
3531 LOOP
3532 BEGIN
3533 g_ui_page_elements_tbl(TO_NUMBER(i.element_id)) := i;
3534 EXCEPTION
3535 WHEN OTHERS THEN
3536 --
3537 -- if element_id is not a number it will not be cached
3538 --
3539 NULL;
3540 END;
3541 END LOOP;
3542
3543 FOR i IN (SELECT *
3544 FROM CZ_UI_PAGE_REFS
3545 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3546 deleted_flag = G_NO_FLAG)
3547 LOOP
3548 g_ui_page_refs_tbl(i.page_ref_id) := i;
3549 END LOOP;
3550
3551 FOR i IN (SELECT *
3552 FROM CZ_UI_PAGE_SETS
3553 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3554 deleted_flag = G_NO_FLAG)
3555 LOOP
3556 g_ui_page_sets_tbl(i.page_set_id) := i;
3557 END LOOP;
3558
3559 FOR i IN (SELECT ref_persistent_node_id
3560 FROM CZ_UI_REFS
3561 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3562 deleted_flag = G_NO_FLAG)
3563 LOOP
3564 g_ui_refs_tbl(i.ref_persistent_node_id) := i.ref_persistent_node_id;
3565 END LOOP;
3566
3567 FOR i IN (SELECT element_id, ui_action_id
3568 FROM CZ_UI_ACTIONS
3569 WHERE ui_def_id = g_UI_Context.ui_def_id AND
3570 deleted_flag = G_NO_FLAG)
3571 LOOP
3572 BEGIN
3573 g_ui_action_ids_tbl(TO_NUMBER(i.element_id)) := i.ui_action_id;
3574 EXCEPTION
3575 WHEN OTHERS THEN
3576 NULL;
3577 END;
3578 END LOOP;
3579
3580 END populate_Cache;
3581
3582 ---------------------------------------------------------------------
3583 -------------------------XML Parsing Part ---------------------------
3584 ---------------------------------------------------------------------
3585
3586 --
3587 -- returns value of a given attribute
3588 -- Parameters :
3589 -- p_node - DOM node
3590 -- p_attr_name - attribute name
3591 -- Return : attribute value as VARCHAR2 string
3592 --
3593 FUNCTION get_Attribute_Value(p_node IN xmldom.DOMNode,
3594 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3595
3596 l_node_map_tbl xmldom.DOMNamedNodeMap;
3597 l_node_attr xmldom.DOMNode;
3598 l_attr_value VARCHAR2(32000);
3599 l_length NUMBER;
3600
3601 BEGIN
3602 IF xmldom.IsNull(p_node) THEN
3603 RETURN NULL;
3604 END IF;
3605 l_node_map_tbl := xmldom.getAttributes(p_node);
3606
3607 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3608 l_length := xmldom.getLength(l_node_map_tbl);
3609 --
3610 -- loop through attributes
3611 --
3612 FOR i IN 0 .. l_length - 1
3613 LOOP
3614 l_node_attr := xmldom.item(l_node_map_tbl, i);
3615 IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3616 l_attr_value := xmldom.getNodeValue(l_node_attr);
3617 EXIT;
3618 END IF;
3619 END LOOP;
3620 END IF;
3621 RETURN l_attr_value;
3622 END get_Attribute_Value;
3623
3624 FUNCTION attribute_Value(p_node IN xmldom.DOMNode,
3625 p_attr_name IN VARCHAR2) RETURN VARCHAR2 IS
3626
3627 l_node_map_tbl xmldom.DOMNamedNodeMap;
3628 l_node_attr xmldom.DOMNode;
3629 l_attr_value VARCHAR2(32000);
3630 l_length NUMBER;
3631
3632 BEGIN
3633 l_node_map_tbl := xmldom.getAttributes(p_node);
3634 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
3635 l_length := xmldom.getLength(l_node_map_tbl);
3636 --
3637 -- loop through attributes
3638 --
3639 FOR i IN 0 .. l_length - 1
3640 LOOP
3641 l_node_attr := xmldom.item(l_node_map_tbl, i);
3642 IF xmldom.getNodeName(l_node_attr) = p_attr_name THEN
3643 l_attr_value := xmldom.getNodeValue(l_node_attr);
3644 IF l_attr_value IS NULL THEN
3645 RETURN NULL;
3646 ELSE
3647 RETURN l_attr_value;
3648 END IF;
3649 END IF;
3650 END LOOP;
3651 END IF;
3652 RETURN '*';
3653 END attribute_Value;
3654
3655 --
3656 -- return value of specified user atribute
3657 --
3658 FUNCTION get_User_Attribute(p_user_attribute_value IN VARCHAR2,
3659 p_cz_attribute_name IN VARCHAR2)
3660 RETURN VARCHAR2 IS
3661
3662 l_ind1 NUMBER;
3663 l_ind2 NUMBER;
3664 l_substr VARCHAR2(32000);
3665
3666 BEGIN
3667
3668 l_ind1 := INSTR(p_user_attribute_value,p_cz_attribute_name);
3669
3670 IF l_ind1 > 0 THEN
3671 l_substr := SUBSTR(p_user_attribute_value,l_ind1+LENGTH(p_cz_attribute_name)+LENGTH('='));
3672 l_ind2 := INSTR(l_substr, '|');
3673 IF l_ind2 > 0 THEN
3674 RETURN SUBSTR(l_substr,1,l_ind2-1);
3675 ELSE
3676 RETURN l_substr;
3677 END IF;
3678 ELSE
3679 RETURN NULL;
3680 END IF;
3681 END get_User_Attribute;
3682
3683 --
3684 -- find DOM node by persistent_node_id
3685 --
3686 FUNCTION find_XML_Node_By_Attribute(p_subtree_doc xmldom.DOMDocument,
3687 p_attribute_name IN VARCHAR2,
3688 p_attribute_value IN VARCHAR2,
3689 p_in_user_attributes IN VARCHAR2 DEFAULT NULL)
3690 RETURN xmldom.DOMNode IS
3691
3692 l_node xmldom.DOMNode;
3693 l_nodeslist xmldom.DOMNodeList;
3694 l_empty_xml_node xmldom.DOMNode;
3695 l_length NUMBER;
3696 l_attribute_value VARCHAR2(32000);
3697
3698 BEGIN
3699
3700 IF p_attribute_name=G_ID_ATTRIBUTE AND g_page_elements_tbl.EXISTS(p_attribute_value) THEN
3701 RETURN g_page_elements_tbl(p_attribute_value);
3702 END IF;
3703
3704 --
3705 -- here we don't need to know about hierachy of nodes
3706 -- so we just need to get list of all nodes of XML subtree
3707 --
3708 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
3709 l_length := xmldom.getLength(l_nodeslist);
3710
3711 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
3712
3713 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3714
3715 IF p_in_user_attributes=G_YES_FLAG THEN
3716 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3717 l_attribute_value := get_User_Attribute(l_attribute_value, p_attribute_name);
3718 ELSE
3719 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3720 END IF;
3721
3722 IF l_attribute_value = p_attribute_value THEN
3723 RETURN l_node;
3724 END IF;
3725
3726 --
3727 -- scan subtree and substitute macros "%" to real values
3728 --
3729 FOR i IN 0 .. l_length - 1
3730 LOOP
3731 l_node := xmldom.item(l_nodeslist, i);
3732
3733 IF p_in_user_attributes=G_YES_FLAG THEN
3734 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE4_NAME);
3735 l_attribute_value := get_User_Attribute(l_attribute_value, p_attribute_name);
3736 ELSE
3737 l_attribute_value := get_Attribute_Value(l_node, p_attribute_name);
3738 END IF;
3739
3740 IF l_attribute_value = p_attribute_value THEN
3741 RETURN l_node;
3742 END IF;
3743 END LOOP;
3744 RETURN l_empty_xml_node;
3745
3746 END find_XML_Node_By_Attribute;
3747
3748 --
3749 -- return DOM node of top level tag <ui:contents>
3750 -- if node does not contain p_tag node then return the node itself ( p_node )
3751 -- Parameters :
3752 -- p_node - DOM node
3753 -- Return : top level DOM node with XML tag = p_tag
3754 --
3755 FUNCTION getUIContents(p_node xmldom.DOMNode,
3756 p_return_empty_node VARCHAR2 DEFAULT NULL) RETURN xmldom.DOMNode IS
3757 l_child_nodes_tbl xmldom.DOMNodeList;
3758 l_child_xml_node xmldom.DOMNode;
3759 l_empty_xml_node xmldom.DOMNode;
3760 l_length NUMBER;
3761 BEGIN
3762 l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3763 l_length := xmldom.getLength(l_child_nodes_tbl);
3764 FOR k IN 0 .. l_length - 1
3765 LOOP
3766 --
3767 -- get next child DOM node
3768 --
3769 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3770
3771 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3772 UPPER(G_UI_CONTENTS_TAG) THEN
3773 RETURN l_child_xml_node;
3774 END IF;
3775 END LOOP;
3776
3777 IF p_return_empty_node IS NULL OR p_return_empty_node=G_NO_FLAG THEN
3778 RETURN p_node;
3779 ELSE
3780 RETURN l_empty_xml_node;
3781 END IF;
3782 END getUIContents;
3783
3784 FUNCTION findChildXMLTag(p_node xmldom.DOMNode,
3785 p_xml_tag VARCHAR2) RETURN xmldom.DOMNode IS
3786 l_child_nodes_tbl xmldom.DOMNodeList;
3787 l_child_xml_node xmldom.DOMNode;
3788 l_empty_xml_node xmldom.DOMNode;
3789 l_length NUMBER;
3790 BEGIN
3791 l_child_nodes_tbl := xmldom.getChildNodes(p_node);
3792 l_length := xmldom.getLength(l_child_nodes_tbl);
3793 FOR k IN 0 .. l_length - 1
3794 LOOP
3795 --
3796 -- get next child DOM node
3797 --
3798 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3799
3800 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3801 UPPER(p_xml_tag) THEN
3802 RETURN l_child_xml_node;
3803 END IF;
3804 END LOOP;
3805
3806 RETURN l_empty_xml_node;
3807
3808 END findChildXMLTag;
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 get_Col_UIContents(p_node xmldom.DOMNode,
3818 p_col_number NUMBER) RETURN xmldom.DOMNode IS
3819 l_child_nodes_tbl xmldom.DOMNodeList;
3820 l_child_xml_node xmldom.DOMNode;
3821 l_first_ui_contents xmldom.DOMNode;
3822 l_second_ui_contents xmldom.DOMNode;
3823 l_rowlayout xmldom.DOMNode;
3824 l_length NUMBER;
3825 l_counter NUMBER;
3826 l_id_attribute VARCHAR2(255);
3827 BEGIN
3828
3829 l_first_ui_contents := getUIContents(p_node);
3830
3831 l_child_nodes_tbl := xmldom.getChildNodes(l_first_ui_contents);
3832 l_length := xmldom.getLength(l_child_nodes_tbl);
3833 FOR k IN 0 .. l_length - 1
3834 LOOP
3835 --
3836 -- get next child DOM node
3837 --
3838 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3839
3840 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3841 UPPER('oa:rowLayout') THEN
3842
3843 l_id_attribute := get_Attribute_Value(l_child_xml_node,
3844 G_ID_ATTRIBUTE);
3845
3846 EXIT;
3847 END IF;
3848 END LOOP;
3849
3850 l_second_ui_contents := getUIContents(l_child_xml_node);
3851
3852 l_counter:= 0;
3853
3854 l_child_nodes_tbl := xmldom.getChildNodes(l_second_ui_contents);
3855 l_length := xmldom.getLength(l_child_nodes_tbl);
3856 FOR k IN 0 .. l_length - 1
3857 LOOP
3858 --
3859 -- get next child DOM node
3860 --
3861 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3862
3863 IF UPPER(xmldom.getNodeName(l_child_xml_node)) =
3864 UPPER('oa:cellFormat') THEN
3865 l_counter := l_counter + 1;
3866 IF l_counter=p_col_number THEN
3867
3868 l_id_attribute := get_Attribute_Value(l_child_xml_node,
3869 G_ID_ATTRIBUTE);
3870
3871 RETURN getUIContents(l_child_xml_node);
3872 END IF;
3873
3874 END IF;
3875 END LOOP;
3876
3877 RETURN p_node;
3878
3879 END get_Col_UIContents;
3880
3881 --
3882 -- find DOM node by persistent_node_id
3883 --
3884 FUNCTION find_Table_Of_XML_Node(p_parent_xml_node xmldom.DOMNode,
3885 p_element_id IN VARCHAR2)
3886 RETURN xmldom.DOMNode IS
3887
3888 l_child_xml_node xmldom.DOMNode;
3889 l_table_child_xml_node xmldom.DOMNode;
3890 l_empty_xml_node xmldom.DOMNode;
3891 l_uicont_xml_node xmldom.DOMNode;
3892 l_ui_contents_xml_node xmldom.DOMNode;
3893 l_child_nodes_tbl xmldom.DOMNodeList;
3894 l_table_child_nodes_tbl xmldom.DOMNodeList;
3895 l_length NUMBER;
3896 l_table_child_length NUMBER;
3897
3898 BEGIN
3899
3900 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
3901 'oa:flowLayout','oa:tableLayout') THEN
3902
3903 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
3904 ELSE
3905 l_ui_contents_xml_node := p_parent_xml_node;
3906 END IF;
3907
3908 --
3909 -- get child nodes of DOM node : p_node
3910 --
3911 l_child_nodes_tbl := xmldom.getChildNodes(l_ui_contents_xml_node);
3912
3913 --
3914 -- we need to get length of array of child nodes
3915 -- to go through the array in loop
3916 --
3917 l_length := xmldom.getLength(l_child_nodes_tbl);
3918
3919 FOR k IN 0 .. l_length - 1
3920 LOOP
3921 --
3922 -- get next child DOM node
3923 --
3924 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
3925
3926 IF (get_Attribute_Value(l_child_xml_node, G_USER_ATTRIBUTE5_NAME) = 'TABLELAYOUT_FOR_UI_GEN') THEN
3927
3928 BEGIN
3929 l_uicont_xml_node := getUIContents(l_child_xml_node);
3930
3931 l_table_child_nodes_tbl := xmldom.getChildNodes(l_uicont_xml_node);
3932 l_table_child_length := xmldom.getLength(l_table_child_nodes_tbl);
3933
3934 FOR m IN 0 .. l_table_child_length - 1
3935 LOOP
3936 l_table_child_xml_node := xmldom.item(l_table_child_nodes_tbl, m);
3937
3938 IF get_Attribute_Value(l_table_child_xml_node, G_ID_ATTRIBUTE) = p_element_id THEN
3939 RETURN l_uicont_xml_node;
3940 END IF;
3941 END LOOP;
3942 END;
3943 END IF;
3944 END LOOP;
3945 RETURN l_empty_xml_node;
3946 EXCEPTION
3947 WHEN OTHERS THEN
3948 DEBUG('find_Table_Of_XML_Node() : '||SQLERRM);
3949 RETURN l_empty_xml_node;
3950 END find_Table_Of_XML_Node;
3951
3952 --
3953 -- find a given xml tag up on the tree
3954 --
3955 FUNCTION find_Element_Id_Of_XMLTag(p_xml_node xmldom.DOMNode,
3956 p_tag_name VARCHAR2 ) RETURN VARCHAR2 IS
3957 l_node xmldom.DOMNode;
3958 l_hgrid_node xmldom.DOMNode;
3959 PROCEDURE find_hgrid(p_node xmldom.DOMNode) IS
3960 BEGIN
3961 IF xmldom.isNull(p_node) THEN
3962 RETURN;
3963 END IF;
3964 l_node := xmldom.getParentNode(p_node);
3965 IF lower(xmldom.getNodeName(l_node))=lower(p_tag_name) THEN
3966 l_hgrid_node := l_node;
3967 ELSE
3968 find_hgrid(l_node);
3969 END IF;
3970 END find_hgrid;
3971 BEGIN
3972 find_hgrid(p_xml_node);
3973 RETURN get_Attribute_Value(l_hgrid_node,
3974 G_ID_ATTRIBUTE);
3975 EXCEPTION
3976 WHEN OTHERS THEN
3977 DEBUG('find_Element_Id_Of_XMLTag() : '||SQLERRM);
3978 RETURN NULL;
3979 END find_Element_Id_Of_XMLTag;
3980
3981
3982 FUNCTION find_AMN_Element_Above(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
3983
3984 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
3985
3986 PROCEDURE AMN_Element_Above(p_node xmldom.DOMNode) IS
3987
3988 l_node xmldom.DOMNode;
3989 l_next_node xmldom.DOMNode;
3990 l_user_attribute1 VARCHAR2(32000);
3991
3992 BEGIN
3993
3994 l_node := xmldom.getParentNode(p_node);
3995
3996 IF xmldom.isNull(l_node) THEN
3997 l_element_id := get_Attribute_Value(p_node, G_ID_ATTRIBUTE);
3998 RETURN;
3999 END IF;
4000
4001 l_user_attribute1 := get_Attribute_Value(l_node, G_USER_ATTRIBUTE1_NAME);
4002
4003 IF NOT(l_user_attribute1='model_path=%modelPath' OR l_user_attribute1 IS NULL) THEN
4004
4005 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4006 RETURN;
4007
4008 ELSE
4009
4010 l_next_node := xmldom.getParentNode(l_node);
4011
4012 IF xmldom.isNull(l_next_node) THEN
4013 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4014 RETURN;
4015 ELSE
4016 AMN_Element_Above(l_node);
4017 END IF;
4018
4019 END IF;
4020
4021 END AMN_Element_Above;
4022
4023 BEGIN
4024
4025 AMN_Element_Above(p_xml_node);
4026
4027 RETURN l_element_id;
4028
4029 END find_AMN_Element_Above;
4030
4031
4032 --
4033 -- parse or export/parse JRAD document
4034 -- Parameters :
4035 -- p_doc_full_name - full JRAD name of the document
4036 --
4037 FUNCTION parse_JRAD_Document(p_doc_full_name IN VARCHAR2)
4038 RETURN xmldom.DOMDocument IS
4039
4040 l_buffer VARCHAR2(32000);
4041 l_lob_loc CLOB;
4042 l_amount BINARY_INTEGER;
4043 l_position INTEGER := 1;
4044 l_xmldoc xmldom.DOMDocument;
4045 l_exportfinished BOOLEAN;
4046
4047 BEGIN
4048
4049 DBMS_LOB.CREATETEMPORARY(l_lob_loc, TRUE);
4050 DBMS_LOB.OPEN(l_lob_loc, DBMS_LOB.LOB_READWRITE);
4051
4052 l_buffer := jdr_utils.ExportDocument(p_document => p_doc_full_name,
4053 p_exportfinished => l_exportfinished);
4054
4055 IF l_buffer IS NULL THEN
4056 RETURN l_xmldoc;
4057 END IF;
4058
4059 l_amount := LENGTH(l_buffer);
4060
4061 DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4062 l_position := l_position + l_amount;
4063
4064 IF l_exportfinished=FALSE THEN
4065 LOOP
4066 l_buffer := jdr_utils.ExportDocument(p_document => NULL,
4067 p_exportfinished => l_exportfinished);
4068
4069 IF l_buffer IS NULL THEN
4070 EXIT;
4071 END IF;
4072
4073 l_amount := LENGTH(l_buffer);
4074
4075 DBMS_LOB.WRITE(l_lob_loc, l_amount, l_position, l_buffer);
4076 l_position := l_position + l_amount;
4077
4078 IF l_buffer IS NULL OR l_exportfinished THEN
4079 EXIT;
4080 END IF;
4081 END LOOP;
4082
4083 END IF;
4084
4085 xmlparser.parseCLOB(g_PARSER, l_lob_loc);
4086
4087 l_xmldoc := xmlparser.getDocument(g_PARSER);
4088
4089 DBMS_LOB.CLOSE(l_lob_loc);
4090 DBMS_LOB.FREETEMPORARY(l_lob_loc);
4091
4092 RETURN l_xmldoc;
4093
4094 EXCEPTION
4095 WHEN OTHERS THEN
4096 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
4097 p_token_name => 'UI_TEMPLATE',
4098 p_token_value => p_doc_full_name,
4099 p_fatal_error => TRUE);
4100 RAISE WRONG_UI_TEMPLATE;
4101 END parse_JRAD_Document;
4102
4103 --
4104 -- set CZ Attributes for a given DOM node
4105 -- Parameters : p_dom_element - DOM Element which identifies DOM node
4106 -- p_attribute_name - attribute name
4107 -- p_attribute_value - attribute value
4108 --
4109 PROCEDURE set_Attribute(p_dom_element xmldom.DOMElement,
4110 p_attribute_name IN VARCHAR2,
4111 p_attribute_value IN VARCHAR2) IS
4112
4113 BEGIN
4114 xmldom.setAttribute(p_dom_element, p_attribute_name, p_attribute_value);
4115 END set_Attribute;
4116
4117 --
4118 -- set CZ Attributes for a given DOM node
4119 -- Parameters : p_dom_element - DOM Element which identifies DOM node
4120 -- p_attribute_name - attribute name
4121 -- p_attribute_value - attribute value
4122 --
4123 PROCEDURE set_Attribute(p_dom_node xmldom.DOMNode,
4124 p_attribute_name IN VARCHAR2,
4125 p_attribute_value IN VARCHAR2) IS
4126
4127 BEGIN
4128 xmldom.setAttribute(xmldom.makeElement(p_dom_node), p_attribute_name, p_attribute_value);
4129 END set_Attribute;
4130
4131 --
4132 -- set internal CZ attributes within "user:attribute1"
4133 --
4134 PROCEDURE set_User_Attribute(p_cz_attribute_name IN VARCHAR2,
4135 p_cz_attribute_value IN VARCHAR2,
4136 px_xml_attribute_value IN OUT NOCOPY VARCHAR2) IS
4137
4138 l_str VARCHAR2(4000);
4139 l_sub_str VARCHAR2(4000);
4140 l_next_equal_ind NUMBER;
4141 l_next_ind NUMBER;
4142 l_ind NUMBER;
4143
4144 BEGIN
4145
4146 --
4147 -- get string of CZ user attributes
4148 --
4149 l_str := px_xml_attribute_value;
4150 l_ind := INSTR(l_str, p_cz_attribute_name);
4151
4152 IF l_ind > 0 THEN
4153
4154 l_sub_str := SUBSTR(l_str, l_ind);
4155 l_next_ind := INSTR(l_sub_str, '|');
4156
4157 l_next_equal_ind := INSTR(l_sub_str, '=');
4158
4159 IF l_next_equal_ind > 1 THEN
4160
4161 IF l_next_ind > 0 THEN
4162 px_xml_attribute_value := SUBSTR(l_str, 1, l_ind + l_next_equal_ind - 1) ||
4163 p_cz_attribute_value || SUBSTR(l_sub_str, l_next_ind);
4164 ELSE
4165 px_xml_attribute_value := SUBSTR(l_str, 1,l_ind + l_next_equal_ind - 1) || p_cz_attribute_value;
4166 END IF;
4167
4168 END IF;
4169 ELSE
4170 NULL;
4171 END IF;
4172
4173 END set_User_Attribute;
4174
4175 --
4176 -- this procedure adds CZ_UI_PAGE_ELEMENTS records
4177 -- which correspond to first level UI template references
4178 --
4179 PROCEDURE add_Extends_Refs(p_xml_node xmldom.DOMNode,
4180 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
4181
4182 l_seq_nbr NUMBER;
4183 l_template_id NUMBER;
4184 l_template_name CZ_UI_TEMPLATES.template_name%TYPE;
4185 l_id_attribute_value CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4186 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
4187 l_extend_attr_value VARCHAR2(4000);
4188
4189 BEGIN
4190
4191 l_extend_attr_value := get_Attribute_Value(p_xml_node, 'extends');
4192
4193 IF l_extend_attr_value IS NULL THEN
4194 RETURN;
4195 END IF;
4196
4197 l_id_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4198
4199 IF l_id_attribute_value IS NULL THEN
4200 RETURN;
4201 END IF;
4202
4203 SELECT template_id,template_name INTO l_template_id,l_template_name FROM CZ_UI_TEMPLATES
4204 WHERE ui_def_id=p_ui_node.ctrl_template_ui_def_id AND
4205 jrad_doc=l_extend_attr_value AND deleted_flag=G_NO_FLAG;
4206
4207 SELECT NVL(max(seq_nbr),0)+1 INTO l_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
4208 WHERE ui_def_id=p_ui_node.ui_def_id AND
4209 page_id=p_ui_node.page_id AND
4210 parent_element_id=p_ui_node.element_id AND
4211 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
4212
4213 l_element_id := get_element_Id();
4214
4215 INSERT INTO CZ_UI_PAGE_ELEMENTS
4216 (
4217 UI_DEF_ID
4218 ,PAGE_ID
4219 ,PERSISTENT_NODE_ID
4220 ,ELEMENT_ID
4221 ,PARENT_PERSISTENT_NODE_ID
4222 ,REGION_PERSISTENT_NODE_ID
4223 ,PAGEBASE_PERSISTENT_NODE_ID
4224 ,CTRL_TEMPLATE_ID
4225 ,BASE_PAGE_FLAG
4226 ,INSTANTIABLE_FLAG
4227 ,SEQ_NBR
4228 ,DELETED_FLAG
4229 ,CTRL_TEMPLATE_UI_DEF_ID
4230 ,MODEL_REF_EXPL_ID
4231 ,SUPPRESS_REFRESH_FLAG
4232 ,PARENT_ELEMENT_ID
4233 ,ELEMENT_TYPE
4234 ,NAME
4235 ,ELEMENT_SIGNATURE_ID
4236 ,TARGET_PAGE_UI_DEF_ID
4237 ,TARGET_PAGE_ID
4238 )
4239 VALUES
4240 (
4241 p_ui_node.ui_def_id
4242 ,p_ui_node.page_id
4243 ,NULL
4244 ,l_element_id
4245 ,p_ui_node.parent_persistent_node_id
4246 ,p_ui_node.region_persistent_node_id
4247 ,p_ui_node.pagebase_persistent_node_id
4248 ,l_template_id
4249 ,'0'
4250 ,'0'
4251 ,l_seq_nbr
4252 ,G_NO_FLAG
4253 ,p_ui_node.ctrl_template_ui_def_id
4254 ,NULL
4255 ,'0'
4256 ,p_ui_node.element_id
4257 ,NULL
4258 ,l_template_name
4259 ,6011
4260 ,NULL
4261 ,NULL
4262 );
4263
4264 set_Attribute(p_xml_node, G_ID_ATTRIBUTE, l_element_id);
4265
4266 END add_Extends_Refs;
4267
4268 FUNCTION find_Parent_UI_Element
4269 (p_xml_node xmldom.DOMNode,
4270 p_ui_def_id IN NUMBER,
4271 p_ui_page_id IN NUMBER) RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
4272
4273 l_ui_element CZ_UI_PAGE_ELEMENTS%ROWTYPE;
4274
4275 PROCEDURE get_Parent_XML(p_check_xml_node xmldom.DOMNode) IS
4276
4277 l_parent_xml_node xmldom.DOMNode;
4278 l_id_attr_value VARCHAR2(32000);
4279
4280 BEGIN
4281
4282 l_id_attr_value := get_Attribute_Value(p_check_xml_node, G_ID_ATTRIBUTE);
4283
4284 IF l_id_attr_value IS NOT NULL THEN
4285
4286 BEGIN
4287 SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4288 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4289 element_id=l_id_attr_value;
4290 RETURN;
4291 EXCEPTION
4292 WHEN NO_DATA_FOUND THEN
4293 NULL;
4294 END;
4295
4296 END IF;
4297
4298 l_parent_xml_node := xmldom.getParentNode(p_check_xml_node);
4299
4300
4301 IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
4302
4303 l_id_attr_value := get_Attribute_Value(l_parent_xml_node , G_ID_ATTRIBUTE);
4304
4305
4306 IF l_id_attr_value IS NOT NULL THEN
4307
4308 BEGIN
4309 SELECT * INTO l_ui_element FROM CZ_UI_PAGE_ELEMENTS
4310 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
4311 element_id=l_id_attr_value;
4312 RETURN;
4313 EXCEPTION
4314 WHEN NO_DATA_FOUND THEN
4315 get_Parent_XML(l_parent_xml_node);
4316 END;
4317
4318 ELSE
4319 get_Parent_XML(l_parent_xml_node);
4320 END IF;
4321
4322 ELSE
4323 RETURN;
4324 END IF;
4325
4326 END get_Parent_XML;
4327
4328
4329 BEGIN
4330
4331 get_Parent_XML(p_xml_node);
4332
4333 RETURN l_ui_element;
4334
4335 END find_Parent_UI_Element;
4336
4337 --
4338 -- replace prefixes which are used by runtime caching
4339 --
4340 FUNCTION replace_Prefix(p_str IN VARCHAR2, p_inline_copy_mode IN VARCHAR2) RETURN VARCHAR2 IS
4341 BEGIN
4342 IF p_inline_copy_mode=G_INLINE_COPY_TMPL THEN
4343 RETURN REPLACE(p_str,'_czt','_czc');
4344 ELSIF p_inline_copy_mode=G_INLINE_COPY_UIPAGE THEN
4345 RETURN REPLACE(REPLACE(p_str,'_czt','_czn'), '_czc','_czn');
4346 ELSE
4347 RETURN p_str;
4348 END IF;
4349 END replace_Prefix;
4350
4351 --
4352 -- handle special cases ( like "switcher case", "ancestor node" )
4353 --
4354 PROCEDURE handle_Special_XMLCases
4355 (p_xml_node xmldom.DOMNode,
4356 p_old_xml_node_id VARCHAR2,
4357 p_new_xml_node_id VARCHAR2,
4358 p_jrad_doc VARCHAR2,
4359 px_xml_switcher_id IN OUT NOCOPY VARCHAR2,
4360 p_inline_copy_mode IN VARCHAR2) IS
4361
4362 l_curr_parent_xml_node xmldom.DOMNode;
4363 l_ancestor_node_id VARCHAR2(255);
4364 l_xml_node_name VARCHAR2(255);
4365 l_parent_xml_node_name VARCHAR2(255);
4366 l_hgrid_element_id VARCHAR2(255);
4367 l_switcher_xml_id VARCHAR2(255);
4368 l_switcher_casename VARCHAR2(255);
4369 l_uicase_name VARCHAR2(255);
4370 l_user_attribute3_value VARCHAR2(4000);
4371 l_user_attribute4_value VARCHAR2(4000);
4372
4373 BEGIN
4374
4375 l_curr_parent_xml_node := xmldom.getParentNode(p_xml_node);
4376
4377 l_xml_node_name := xmldom.getNodeName(p_xml_node);
4378 l_parent_xml_node_name := xmldom.getNodeName(l_curr_parent_xml_node);
4379
4380 l_ancestor_node_id := get_Attribute_Value(p_xml_node,
4381 'ancestorNode');
4382
4383 IF p_old_xml_node_id IS NOT NULL THEN
4384 set_Attribute(p_xml_node, G_ID_ATTRIBUTE, replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4385 END IF;
4386
4387 IF l_ancestor_node_id IS NOT NULL THEN
4388
4389 l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
4390
4391 IF NOT(xmldom.IsNull(p_xml_node)) THEN
4392
4393 l_ancestor_node_id := p_jrad_doc||'.'||l_hgrid_element_id;
4394 set_Attribute(p_xml_node,
4395 'ancestorNode',
4396 l_ancestor_node_id);
4397
4398 END IF; -- end of IF NOT(xmldom.IsNull(p_xml_node))
4399
4400 END IF; -- end of IF l_ancestor_node IS NOT NULL
4401
4402 --
4403 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
4404 --
4405 IF l_xml_node_name='oa:switcher' THEN
4406
4407 px_xml_switcher_id := p_old_xml_node_id;
4408
4409 l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4410 l_switcher_casename := get_User_Attribute(l_user_attribute3_value, 'switcherDefaultCaseName');
4411
4412 IF l_switcher_casename IS NOT NULL THEN
4413 l_switcher_casename := replace_Prefix(REPLACE(l_switcher_casename, px_xml_switcher_id, p_new_xml_node_id), p_inline_copy_mode);
4414
4415 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
4416 p_cz_attribute_value => l_switcher_casename,
4417 px_xml_attribute_value => l_user_attribute3_value);
4418
4419 set_Attribute(p_xml_node,
4420 G_USER_ATTRIBUTE3_NAME,
4421 l_user_attribute3_value);
4422
4423 END IF;
4424
4425 set_Attribute(p_xml_node,
4426 G_ID_ATTRIBUTE,
4427 replace_Prefix(p_new_xml_node_id, p_inline_copy_mode));
4428
4429 END IF; -- end of IF l_xml_node_name='oa:switcher'
4430
4431 --
4432 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
4433 --
4434 IF l_xml_node_name='ui:case' THEN
4435 IF l_parent_xml_node_name='oa:switcher' THEN
4436
4437 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
4438 l_uicase_name := get_Attribute_Value(p_xml_node, 'name');
4439
4440 set_Attribute(p_xml_node,
4441 'name',
4442 replace_Prefix(REPLACE(l_uicase_name, px_xml_switcher_id, l_switcher_xml_id), p_inline_copy_mode));
4443
4444 END IF; -- end of IF l_parent_xml_node_name='oa:switcher'
4445
4446 l_user_attribute4_value := get_Attribute_Value(p_xml_node,
4447 G_USER_ATTRIBUTE4_NAME);
4448
4449 IF l_user_attribute4_value IS NOT NULL THEN
4450 set_User_Attribute(p_cz_attribute_name => 'caseId',
4451 p_cz_attribute_value => get_Element_Id(),
4452 px_xml_attribute_value => l_user_attribute4_value);
4453
4454 set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4_value);
4455 END IF; -- end of IF l_user_attribute4 IS NOT NULL
4456
4457 END IF; -- end of IF l_xml_node_name='ui:case'
4458
4459 --
4460 -- if current tag is <oa:stackLayout>
4461 -- then replace old id with new one
4462 IF (l_xml_node_name='oa:stackLayout' AND l_parent_xml_node_name='ui:case') THEN
4463
4464 set_Attribute(p_xml_node,
4465 G_ID_ATTRIBUTE,
4466 replace_Prefix(get_Attribute_Value(l_curr_parent_xml_node, 'name'), p_inline_copy_mode));
4467
4468 END IF; -- end of IF (l_xml_node_name='oa:stackLayout' ...
4469
4470 END handle_Special_XMLCases;
4471
4472 --
4473 -- refresh Template Ref Counts
4474 --
4475 PROCEDURE refresh_Templ_Ref_Counts
4476 (p_template_xml_doc xmldom.DOMDocument,
4477 p_template_ui_def_id NUMBER,
4478 p_template_id NUMBER) IS
4479
4480 l_xml_node xmldom.DOMNode;
4481 l_child_nodes_tbl xmldom.DOMNodeList;
4482 l_extends_attribute VARCHAR2(2000);
4483 l_ref_tmpls_tbl number_tbl_type;
4484 l_ref_tmpl_seeded_flag varchar_tbl_type;
4485 l_ref_template_id NUMBER;
4486 l_seeded_flag CZ_UI_REF_TEMPLATES.ref_templ_seeded_flag%TYPE;
4487 l_template_id CZ_UI_REF_TEMPLATES.template_id%TYPE;
4488 l_length NUMBER;
4489
4490 BEGIN
4491
4492 l_child_nodes_tbl := xmldom.getElementsByTagName(p_template_xml_doc, '*');
4493 l_length := xmldom.getLength(l_child_nodes_tbl);
4494
4495 IF (l_length > 0) THEN
4496 FOR k IN 0..l_length-1
4497 LOOP
4498 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
4499 l_extends_attribute := get_Attribute_Value(l_xml_node, 'extends');
4500
4501 IF l_extends_attribute IS NOT NULL THEN
4502
4503
4504 BEGIN
4505 SELECT template_id, seeded_flag
4506 INTO l_ref_template_id, l_seeded_flag
4507 FROM CZ_UI_TEMPLATES
4508 WHERE ui_def_id=p_template_ui_def_id AND
4509 jrad_doc=l_extends_attribute AND
4510 deleted_flag=G_NO_FLAG;
4511
4512 IF l_ref_tmpls_tbl.EXISTS(l_ref_template_id) THEN
4513 l_ref_tmpls_tbl(l_ref_template_id) := l_ref_tmpls_tbl(l_ref_template_id) + 1;
4514 ELSE
4515 l_ref_tmpls_tbl(l_ref_template_id) := 1;
4516 END IF;
4517 l_ref_tmpl_seeded_flag(l_ref_template_id) := l_seeded_flag;
4518 EXCEPTION
4519 WHEN NO_DATA_FOUND THEN
4520 NULL;
4521 END;
4522
4523 END IF;
4524
4525 END LOOP;
4526 END IF;
4527
4528 FOR k IN(SELECT ref_template_id FROM CZ_UI_REF_TEMPLATES
4529 WHERE template_id=p_template_id AND
4530 template_ui_def_id=p_template_ui_def_id AND
4531 deleted_flag=G_NO_FLAG)
4532 LOOP
4533 IF NOT(l_ref_tmpls_tbl.EXISTS(k.ref_template_id)) THEN
4534 DELETE FROM CZ_UI_REF_TEMPLATES
4535 WHERE template_id=p_template_id AND
4536 template_ui_def_id=p_template_ui_def_id AND
4537 ref_template_id=k.ref_template_id;
4538 END IF;
4539 END LOOP;
4540
4541 l_template_id := l_ref_tmpls_tbl.FIRST;
4542 LOOP
4543 IF l_template_id IS NULL THEN
4544 EXIT;
4545 END IF;
4546
4547 UPDATE CZ_UI_REF_TEMPLATES
4548 SET ref_count = l_ref_tmpls_tbl(l_template_id)
4549 WHERE template_id=p_template_id AND
4550 template_ui_def_id=p_template_ui_def_id AND
4551 ref_template_id=l_template_id AND
4552 deleted_flag=G_NO_FLAG;
4553
4554 IF SQL%ROWCOUNT=0 THEN
4555 INSERT INTO CZ_UI_REF_TEMPLATES
4556 (
4557 TEMPLATE_ID
4558 ,REF_TEMPLATE_ID
4559 ,DELETED_FLAG
4560 ,TEMPLATE_UI_DEF_ID
4561 ,REF_TEMPLATE_UI_DEF_ID
4562 ,SEEDED_FLAG
4563 ,REF_TEMPL_SEEDED_FLAG
4564 ,REF_COUNT
4565 )
4566 VALUES
4567 (
4568 p_template_id
4569 ,l_template_id
4570 ,G_NO_FLAG
4571 ,p_template_ui_def_id
4572 ,p_template_ui_def_id
4573 ,G_NO_FLAG
4574 ,l_ref_tmpl_seeded_flag(l_template_id)
4575 ,l_ref_tmpls_tbl(l_template_id)
4576 );
4577 END IF;
4578
4579 l_template_id := l_ref_tmpls_tbl.NEXT(l_template_id);
4580 END LOOP;
4581
4582 END refresh_Templ_Ref_Counts;
4583
4584
4585 --
4586 -- initialize nodeView counters
4587 --
4588 PROCEDURE init_Page_View_Counters IS
4589
4590 l_view_counter NUMBER;
4591
4592 BEGIN
4593
4594 g_bomm_counter := 1;
4595 g_mandatory_comp_counter := 1;
4596
4597 g_connector_counter := 0;
4598 g_mandatory_ref_counter := 0;
4599 g_minmax_ref_counter := 0;
4600 g_optional_ref_counter := 0;
4601 g_of_feature_counter := 0;
4602 g_if_feature_counter := 0;
4603 g_df_feature_counter := 0;
4604 g_bf_feature_counter := 0;
4605 g_tf_feature_counter := 0;
4606 g_tot_feature_counter := 0;
4607 g_rsc_feature_counter := 0;
4608 g_itot_feature_counter := 0;
4609 g_irsc_feature_counter := 0;
4610 g_opt_counter := 0;
4611
4612 END init_Page_View_Counters;
4613
4614
4615 PROCEDURE init_Page_View_Counters(p_subtree_doc xmldom.DOMDocument) IS
4616
4617 l_node xmldom.DOMNode;
4618 l_nodeslist xmldom.DOMNodeList;
4619 l_empty_xml_node xmldom.DOMNode;
4620 l_length NUMBER;
4621 l_attribute_value VARCHAR2(32000);
4622 l_node_view VARCHAR2(255);
4623 l_id_attr_value VARCHAR2(255);
4624
4625 PROCEDURE set_View_Counter(p_node_view IN VARCHAR2) IS
4626 l_node_view_index NUMBER;
4627 l_underscore_pos NUMBER;
4628 l_prefix VARCHAR2(255);
4629 BEGIN
4630
4631 IF p_node_view IS NOT NULL THEN
4632
4633 l_underscore_pos := INSTR(p_node_view, '_');
4634 IF (l_underscore_pos > 1) THEN
4635 l_prefix := SUBSTR(p_node_view,1,l_underscore_pos);
4636 ELSE
4637 RETURN;
4638 END IF;
4639
4640 FOR i IN g_view_prefix_tbl.First..g_view_prefix_tbl.Last
4641 LOOP
4642
4643 IF l_prefix=g_view_prefix_tbl(i) THEN
4644
4645 l_node_view_index := TO_NUMBER(SUBSTR(p_node_view, l_underscore_pos+1));
4646
4647 IF g_view_prefix_tbl(i)='COMP_' THEN
4648 IF l_node_view_index > g_mandatory_comp_counter THEN
4649 g_mandatory_comp_counter := l_node_view_index;
4650 END IF;
4651
4652 ELSIF g_view_prefix_tbl(i)='SIM_' THEN
4653 IF l_node_view_index > g_optional_ref_counter THEN
4654 g_optional_ref_counter := l_node_view_index;
4655 END IF;
4656
4657 ELSIF g_view_prefix_tbl(i)='CS_' THEN
4658 IF l_node_view_index > g_minmax_ref_counter THEN
4659 g_minmax_ref_counter := l_node_view_index;
4660 END IF;
4661
4662 ELSIF g_view_prefix_tbl(i)='OF_' THEN
4663 IF l_node_view_index > g_of_feature_counter THEN
4664 g_of_feature_counter := l_node_view_index;
4665 END IF;
4666
4667 ELSIF g_view_prefix_tbl(i)='IF_' THEN
4668 IF l_node_view_index > g_if_feature_counter THEN
4669 g_if_feature_counter := l_node_view_index;
4670 END IF;
4671
4672 ELSIF g_view_prefix_tbl(i)='DF_' THEN
4673 IF l_node_view_index > g_df_feature_counter THEN
4674 g_df_feature_counter := l_node_view_index;
4675 END IF;
4676
4677 ELSIF g_view_prefix_tbl(i)='BF_' THEN
4678 IF l_node_view_index > g_bf_feature_counter THEN
4679 g_bf_feature_counter := l_node_view_index;
4680 END IF;
4681
4682 ELSIF g_view_prefix_tbl(i)='TF_' THEN
4683 IF l_node_view_index > g_tf_feature_counter THEN
4684 g_tf_feature_counter := l_node_view_index;
4685 END IF;
4686
4687 ELSIF g_view_prefix_tbl(i)='TOT_' THEN
4688 IF l_node_view_index > g_tot_feature_counter THEN
4689 g_tot_feature_counter := l_node_view_index;
4690 END IF;
4691
4692 ELSIF g_view_prefix_tbl(i)='RSC_' THEN
4693 IF l_node_view_index > g_rsc_feature_counter THEN
4694 g_rsc_feature_counter := l_node_view_index;
4695 END IF;
4696
4697 ELSIF g_view_prefix_tbl(i)='ITOT_' THEN
4698 IF l_node_view_index > g_itot_feature_counter THEN
4699 g_itot_feature_counter := l_node_view_index;
4700 END IF;
4701
4702 ELSIF g_view_prefix_tbl(i)='IRSC_' THEN
4703 IF l_node_view_index > g_irsc_feature_counter THEN
4704 g_irsc_feature_counter := l_node_view_index;
4705 END IF;
4706
4707
4708 ELSIF g_view_prefix_tbl(i)='REF_' THEN
4709 IF l_node_view_index > g_mandatory_ref_counter THEN
4710 g_mandatory_ref_counter := l_node_view_index;
4711 END IF;
4712
4713 ELSIF g_view_prefix_tbl(i)='CON_' THEN
4714 IF l_node_view_index > g_connector_counter THEN
4715 g_connector_counter := l_node_view_index;
4716 END IF;
4717
4718 ELSIF g_view_prefix_tbl(i)='BOMM_' THEN
4719 IF l_node_view_index > g_bomm_counter THEN
4720 g_bomm_counter := l_node_view_index;
4721 END IF;
4722
4723 ELSIF g_view_prefix_tbl(i)='OPT_' THEN
4724 IF l_node_view_index > g_opt_counter THEN
4725 g_opt_counter := l_node_view_index;
4726 END IF;
4727
4728 END IF;
4729 END IF;
4730 END LOOP;
4731
4732 END IF;
4733
4734 END set_View_Counter;
4735
4736 BEGIN
4737
4738 g_bomm_counter := 0;
4739 g_mandatory_comp_counter := 0;
4740
4741 g_connector_counter := 0;
4742 g_mandatory_ref_counter := 0;
4743 g_minmax_ref_counter := 0;
4744 g_optional_ref_counter := 0;
4745 g_of_feature_counter := 0;
4746 g_if_feature_counter := 0;
4747 g_df_feature_counter := 0;
4748 g_bf_feature_counter := 0;
4749 g_tf_feature_counter := 0;
4750 g_tot_feature_counter := 0;
4751 g_rsc_feature_counter := 0;
4752 g_itot_feature_counter := 0;
4753 g_irsc_feature_counter := 0;
4754 g_opt_counter := 0;
4755
4756 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
4757 l_length := xmldom.getLength(l_nodeslist);
4758
4759 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
4760
4761 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4762 l_node_view := get_User_Attribute(l_attribute_value, 'nodeView');
4763
4764 set_View_Counter(l_node_view);
4765
4766 FOR i IN 0 .. l_length - 1
4767 LOOP
4768 l_node := xmldom.item(l_nodeslist, i);
4769 l_attribute_value := get_Attribute_Value(l_node, G_USER_ATTRIBUTE3_NAME);
4770 l_node_view := get_User_Attribute(l_attribute_value, 'nodeView');
4771 set_View_Counter(l_node_view);
4772
4773 l_id_attr_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
4774 IF l_id_attr_value IS NOT NULL THEN
4775 BEGIN
4776 g_dom_elements_tbl(TO_NUMBER(l_id_attr_value)) := l_node;
4777 EXCEPTION
4778 WHEN OTHERS THEN
4779 --
4780 -- if element_id is not a number it will not be cached
4781 --
4782 NULL;
4783 END;
4784 END IF;
4785 END LOOP;
4786
4787 END init_Page_View_Counters;
4788
4789 PROCEDURE resolve_view_names(p_xml_node IN xmldom.DOMNode,
4790 p_ui_page_id IN NUMBER,
4791 p_counter IN OUT NOCOPY NUMBER,
4792 p_element_ids_table IN OUT NOCOPY varchar2_tbl_type) IS
4793
4794 l_view_name VARCHAR2(255);
4795 l_children_view_name VARCHAR2(255);
4796
4797 l_user_attribute VARCHAR2(32000);
4798 l_user_attribute_value VARCHAR2(32000);
4799 l_ind NUMBER;
4800 l_child_nodes_tbl xmldom.DOMNodeList;
4801 l_length NUMBER;
4802 l_child_xml_node xmldom.DOMNode;
4803 l_element_id VARCHAR2(255);
4804
4805 BEGIN
4806
4807
4808 IF p_counter = -1 THEN
4809 SELECT COUNT(element_id) INTO p_counter
4810 FROM CZ_UI_PAGE_ELEMENTS
4811 WHERE ui_def_id=g_UI_Context.ui_def_id
4812 AND page_id=p_ui_page_id AND
4813 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
4814 END IF;
4815
4816 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
4817 IF l_element_id IS NOT NULL THEN
4818 p_element_ids_table(l_element_id) := l_element_id;
4819 END IF;
4820
4821 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
4822 IF l_user_attribute_value IS NOT NULL THEN
4823
4824 l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
4825
4826 IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
4827 l_ind := INSTR(l_view_name, '_');
4828 l_view_name := SUBSTR(l_view_name,1,l_ind-1);
4829 l_view_name := get_next_view_name(l_view_name);
4830
4831 set_User_Attribute(p_cz_attribute_name => 'nodeView',
4832 p_cz_attribute_value => l_view_name,
4833 px_xml_attribute_value => l_user_attribute_value);
4834
4835 l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
4836
4837 IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
4838
4839 l_children_view_name := l_view_name || '_children';
4840 DEBUG('asp: New children view name = ' || l_children_view_name);
4841
4842 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
4843 p_cz_attribute_value => l_children_view_name,
4844 px_xml_attribute_value => l_user_attribute_value);
4845 END IF;
4846
4847 set_Attribute(p_xml_node,
4848 G_USER_ATTRIBUTE3_NAME,
4849 l_user_attribute_value);
4850 END IF;
4851 END IF;
4852
4853 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
4854 l_length := xmldom.getLength(l_child_nodes_tbl);
4855
4856 FOR k IN 0 .. l_length - 1
4857 LOOP
4858 --
4859 -- get next child DOM node
4860 --
4861 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
4862
4863 resolve_view_names(p_xml_node => l_child_xml_node,
4864 p_ui_page_id => p_ui_page_id,
4865 p_counter => p_counter,
4866 p_element_ids_table => p_element_ids_table);
4867
4868 END LOOP;
4869
4870
4871 END resolve_view_names;
4872
4873
4874 --
4875 -- set Attributes for Template
4876 --
4877 PROCEDURE set_Template_Attributes(p_xml_root_node xmldom.DOMNode,
4878 p_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
4879 p_element_signature_id NUMBER DEFAULT NULL) IS
4880
4881 l_xml_root_element_node xmldom.DOMElement := xmldom.makeElement(p_xml_root_node);
4882 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
4883 l_ui_action_id NUMBER;
4884 l_drilldown_text_id NUMBER;
4885
4886 l_view_name VARCHAR2(255);
4887 l_picklist_view_name VARCHAR2(255);
4888 l_has_children VARCHAR2(1);
4889
4890 l_model_path VARCHAR2(32000);
4891 l_user_attribute VARCHAR2(32000);
4892
4893 BEGIN
4894
4895 --
4896 -- get Model node by persistent_node_id and project_id
4897 --
4898 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,
4899 g_UI_Context.devl_project_id);
4900
4901 --
4902 -- get a corresponding view name by detailed_type_id and
4903 -- also get variable has_children
4904 --
4905 IF p_ui_node.parent_element_id IS NULL THEN
4906 IF l_node.ps_node_type IN(258,259) THEN
4907 l_view_name := 'COMP_1';
4908 ELSE
4909 l_view_name := 'BOMM_1';
4910 l_picklist_view_name := l_view_name || '_children';
4911 END IF;
4912 ELSE
4913 l_view_name := get_View_Name(l_node, l_has_children);
4914 END IF;
4915
4916 --
4917 -- UI Page or CX associated with an
4918 -- instantiable component must have nodeView='COMP_...'
4919 --
4920 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE OR
4921 p_ui_node.parent_element_id IS NULL THEN
4922 l_view_name := REPLACE(l_view_name,'CS_','COMP_');
4923 END IF;
4924
4925 IF l_has_children = G_YES_FLAG THEN
4926 l_picklist_view_name := l_view_name || '_children';
4927 END IF;
4928
4929 IF g_ref_cx_paths_tbl.EXISTS(TO_NUMBER(p_ui_node.element_id)) THEN
4930 l_model_path := g_ref_cx_paths_tbl(TO_NUMBER(p_ui_node.element_id));
4931 ELSE
4932 l_model_path := get_Model_Path(p_ui_node);
4933 END IF;
4934
4935 --
4936 -- set JRAD id of element
4937 --
4938 set_Attribute(l_xml_root_element_node,
4939 G_ID_ATTRIBUTE,
4940 p_ui_node.element_id);
4941
4942 --
4943 -- attribute1 is always used only for model_path
4944 --
4945 set_Attribute(l_xml_root_element_node,
4946 G_USER_ATTRIBUTE1_NAME,
4947 'model_path='||l_model_path);
4948
4949 IF l_model_path='*' THEN
4950 set_Attribute(l_xml_root_element_node,
4951 G_USER_ATTRIBUTE2_NAME,
4952 '0');
4953 ELSE
4954 --
4955 -- set attribute2 to persistent_node_id :
4956 -- THIS ATTRIBUTE MUST BE SET ONLY BY UI GENERATION / UI REFRESH
4957 --
4958 set_Attribute(l_xml_root_element_node,
4959 G_USER_ATTRIBUTE2_NAME,
4960 TO_CHAR(p_ui_node.persistent_node_id));
4961 END IF;
4962
4963 --
4964 -- get value of "user:attribute3"
4965 --
4966 l_user_attribute := get_Attribute_Value(p_xml_root_node,
4967 G_USER_ATTRIBUTE3_NAME);
4968
4969 IF l_user_attribute IS NOT NULL THEN
4970
4971 IF l_view_name IS NOT NULL THEN
4972 set_User_Attribute(p_cz_attribute_name => 'nodeView',
4973 p_cz_attribute_value => l_view_name,
4974 px_xml_attribute_value => l_user_attribute);
4975 END IF;
4976 IF l_picklist_view_name IS NOT NULL THEN
4977 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
4978 p_cz_attribute_value => l_picklist_view_name,
4979 px_xml_attribute_value => l_user_attribute);
4980 END IF;
4981
4982 IF INSTR(l_user_attribute, 'actionId=')>0 THEN
4983 BEGIN
4984 l_ui_action_id := get_UI_Action_Id(p_ui_node);
4985 EXCEPTION
4986 WHEN OTHERS THEN
4987 NULL;
4988 END;
4989
4990 IF l_ui_action_id IS NOT NULL THEN
4991 set_User_Attribute(p_cz_attribute_name => 'actionId',
4992 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
4993 px_xml_attribute_value => l_user_attribute);
4994 END IF;
4995
4996 END IF;
4997 /* commented out according to request from 8/12/2004
4998 set_User_Attribute(p_cz_attribute_name => 'blockSize',
4999 p_cz_attribute_value => TO_CHAR(g_UI_Context.ROWS_PER_TABLE),
5000 px_xml_attribute_value => l_user_attribute);
5001 */
5002 END IF; -- end of setting G_USER_ATTRIBUTE3_NAME
5003
5004 IF p_ui_node.element_type IN(G_UI_PAGEDRILLDOWN_NODE_TYPE,G_UI_DRILLDOWN_NODE_TYPE) THEN
5005 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
5006
5007 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
5008 g_UI_Context.ui_def_id,
5009 p_ui_node.page_id, p_ui_node.element_id);
5010
5011 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
5012 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
5013 px_xml_attribute_value => l_user_attribute);
5014
5015 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
5016 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
5017 px_xml_attribute_value => l_user_attribute);
5018
5019 END IF;
5020 --
5021 -- set "source" for image associated with a drilldown
5022 --
5023 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
5024 set_Attribute(l_xml_root_element_node,
5025 'source',
5026 g_UI_Context.DRILLDOWN_IMAGE_URL);
5027 END IF;
5028 ELSIF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
5029 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
5030 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5031 px_xml_attribute_value => l_user_attribute);
5032
5033 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
5034 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
5035 px_xml_attribute_value => l_user_attribute);
5036
5037 END IF;
5038
5039 set_Attribute(l_xml_root_element_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
5040
5041 --
5042 -- get value of "user:attribute4" which is used by Oracle Configurator Developer
5043 --
5044 l_user_attribute := get_Attribute_Value(p_xml_root_node,
5045 G_USER_ATTRIBUTE4_NAME);
5046 IF l_user_attribute IS NOT NULL THEN
5047
5048 set_User_Attribute(p_cz_attribute_name => 'name',
5049 p_cz_attribute_value => p_ui_node.name,
5050 px_xml_attribute_value => l_user_attribute);
5051
5052 IF p_element_signature_id IS NOT NULL THEN
5053 set_User_Attribute(p_cz_attribute_name => 'elementType',
5054 p_cz_attribute_value => TO_CHAR(p_element_signature_id),
5055 px_xml_attribute_value => l_user_attribute);
5056 ELSE
5057 set_User_Attribute(p_cz_attribute_name => 'elementType',
5058 p_cz_attribute_value => TO_CHAR(p_ui_node.element_signature_id),
5059 px_xml_attribute_value => l_user_attribute);
5060 END IF;
5061
5062 END IF;
5063
5064 set_Attribute(l_xml_root_element_node,
5065 G_USER_ATTRIBUTE4_NAME,
5066 l_user_attribute);
5067
5068 set_Attribute(l_xml_root_element_node,
5069 G_USER_ATTRIBUTE5_NAME,
5070 'GENERATED_BY_UI_GEN');
5071
5072 END set_Template_Attributes;
5073
5074 FUNCTION get_Element_XML_Path(p_xml_doc xmldom.DOMDocument,p_element_id VARCHAR2) RETURN VARCHAR2 IS
5075
5076 l_xml_node xmldom.DOMNode;
5077 l_element_path VARCHAR2(32000);
5078
5079 PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5080
5081 l_parent_node xmldom.DOMNode;
5082 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5083 l_user_attribute4_value VARCHAR2(32000);
5084 l_node_name VARCHAR2(32000);
5085
5086 BEGIN
5087
5088 IF xmldom.isNull(p_xml_node) THEN
5089 RETURN;
5090 END IF;
5091 l_parent_node := xmldom.getParentNode(p_xml_node);
5092 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5093
5094 IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5095
5096 l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5097 IF l_user_attribute4_value IS NOT NULL THEN
5098 l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5099
5100 IF l_element_path IS NOT NULL THEN
5101 l_element_path := l_node_name||'.'||l_element_path;
5102 ELSE
5103 l_element_path := l_node_name;
5104 END IF;
5105
5106 END IF;
5107 END IF;
5108
5109 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5110 IF NOT(xmldom.IsNull(l_parent_node)) THEN
5111 construct_XML_Path(l_parent_node);
5112 END IF;
5113 END IF;
5114
5115 END construct_XML_Path;
5116
5117 BEGIN
5118
5119 l_xml_node := find_XML_Node_By_Attribute(p_xml_doc, G_ID_ATTRIBUTE, p_element_id);
5120
5121 IF NOT(xmldom.IsNull(l_xml_node)) THEN
5122 construct_XML_Path(l_xml_node);
5123 ELSE
5124 RETURN NULL;
5125 END IF;
5126
5127 RETURN l_element_path;
5128
5129 END get_Element_XML_Path;
5130
5131 FUNCTION get_Element_XML_Path(p_xml_node xmldom.DOMNode) RETURN VARCHAR2 IS
5132
5133 l_element_path VARCHAR2(32000);
5134
5135 PROCEDURE construct_XML_Path(p_xml_node xmldom.DOMNode) IS
5136
5137 l_parent_node xmldom.DOMNode;
5138 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
5139 l_user_attribute4_value VARCHAR2(32000);
5140 l_node_name VARCHAR2(32000);
5141
5142 BEGIN
5143
5144 IF xmldom.isNull(p_xml_node) THEN
5145 RETURN;
5146 END IF;
5147 l_parent_node := xmldom.getParentNode(p_xml_node);
5148 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
5149
5150 IF l_element_id IS NOT NULL AND xmldom.getNodeName(l_parent_node)<>'#document'THEN
5151
5152 l_user_attribute4_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
5153 IF l_user_attribute4_value IS NOT NULL THEN
5154 l_node_name := get_User_Attribute(l_user_attribute4_value ,'name');
5155
5156 IF l_element_path IS NOT NULL THEN
5157 l_element_path := l_node_name||'.'||l_element_path;
5158 ELSE
5159 l_element_path := l_node_name;
5160 END IF;
5161
5162 END IF;
5163 END IF;
5164
5165 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5166 IF NOT(xmldom.IsNull(l_parent_node)) THEN
5167 construct_XML_Path(l_parent_node);
5168 END IF;
5169 END IF;
5170
5171 END construct_XML_Path;
5172
5173 BEGIN
5174
5175 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5176 construct_XML_Path(p_xml_node);
5177 ELSE
5178 RETURN NULL;
5179 END IF;
5180
5181 RETURN l_element_path;
5182 EXCEPTION
5183 WHEN OTHERS THEN
5184 DEBUG(SQLERRM);
5185 RETURN NULL;
5186 END get_Element_XML_Path;
5187
5188 --
5189 -- return path for a given UI element
5190 --
5191 FUNCTION get_Element_XML_Path(p_ui_def_id IN NUMBER,
5192 p_page_id IN NUMBER,
5193 p_element_id IN VARCHAR2,
5194 p_is_parser_open IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
5195
5196 l_xmldoc xmldom.DOMDocument;
5197 l_page_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
5198 l_ui_name CZ_UI_DEFS.name%TYPE;
5199 l_page_name CZ_UI_PAGES.name%TYPE;
5200 l_element_path VARCHAR2(32000);
5201
5202 BEGIN
5203
5204 IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5205 Open_Parser();
5206 END IF;
5207
5208 SELECT jrad_doc,name INTO l_page_jrad_doc,l_page_name FROM CZ_UI_PAGES
5209 WHERE ui_def_id=p_ui_def_id AND page_id=p_page_id;
5210
5211 --
5212 -- create UI Template in JRAD repository
5213 --
5214 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_page_jrad_doc);
5215
5216 IF xmldom.isNull(l_xmldoc) THEN
5217 -- UI page is already deleted
5218 RETURN NULL;
5219 END IF;
5220
5221 l_element_path := get_Element_XML_Path(l_xmldoc,p_element_id);
5222
5223 IF p_is_parser_open IS NULL OR p_is_parser_open='0' THEN
5224 Close_Parser();
5225 END IF;
5226
5227 SELECT name INTO l_ui_name FROM CZ_UI_DEFS
5228 WHERE ui_def_id=p_ui_def_id;
5229
5230 IF l_element_path IS NULL OR l_element_path='.' THEN
5231 l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name;
5232 ELSE
5233 l_element_path := l_ui_name||'.'||'Pages'||'.'||l_page_name||'.'||l_element_path;
5234 END IF;
5235
5236 RETURN l_element_path;
5237
5238 END get_Element_XML_Path;
5239
5240
5241 PROCEDURE copy_UI_Rule
5242 (
5243 p_rule_id IN NUMBER,
5244 x_rule_id OUT NOCOPY NUMBER,
5245 p_ui_def_id IN NUMBER,
5246 p_ui_page_id IN NUMBER,
5247 p_ui_element_id IN VARCHAR2,
5248 p_source_ui_def_id IN NUMBER,
5249 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node
5250 ) IS
5251
5252 l_return_status VARCHAR2(255);
5253 l_msg_count NUMBER;
5254 l_msg_data VARCHAR2(4000);
5255 l_run_id NUMBER;
5256 l_element_path VARCHAR2(4000);
5257 l_source_ui_def_id NUMBER;
5258 l_failure_flag NUMBER;
5259 l_cp_rule_run_id NUMBER;
5260 l_copied_rule BOOLEAN;
5261
5262 BEGIN
5263 IF p_rule_id IS NOT NULL THEN
5264
5265 IF p_source_ui_def_id IS NULL THEN
5266 l_source_ui_def_id := 0;
5267 ELSE
5268 l_source_ui_def_id := p_source_ui_def_id;
5269 END IF;
5270 FOR k IN(SELECT rule_id,rule_type,seeded_flag,devl_project_id FROM CZ_RULES
5271 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
5272 AND deleted_flag=G_NO_FLAG)
5273 LOOP
5274 l_run_id := 0; l_cp_rule_run_id := 0;
5275 l_copied_rule := FALSE;
5276
5277 IF NVL(k.seeded_flag,G_NO_FLAG)=G_NO_FLAG THEN
5278 CZ_DEVELOPER_UTILS_PVT.copy_Rule
5279 (p_rule_id => k.rule_id,
5280 p_init_msg_list => FND_API.G_FALSE,
5281 p_ui_def_id => p_ui_def_id,
5282 p_ui_page_id => p_ui_page_id,
5283 p_ui_page_element_id => p_ui_element_id,
5284 x_out_new_rule_id => x_rule_id,
5285 x_run_id => l_cp_rule_run_id,
5286 x_return_status => l_return_status,
5287 x_msg_count => l_msg_count,
5288 x_msg_data => l_msg_data);
5289
5290 l_copied_rule := TRUE;
5291 ELSE
5292 x_rule_id := k.rule_id;
5293 END IF;
5294
5295 l_failure_flag := 0;
5296 IF l_cp_rule_run_id > 0 THEN
5297 SELECT COUNT(*) INTO l_failure_flag FROM CZ_DB_LOGS WHERE run_id=l_cp_rule_run_id;
5298 END IF;
5299
5300 IF l_failure_flag=0 AND NVL(k.devl_project_id,0) NOT IN(0,1) AND l_copied_rule THEN
5301 CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => x_rule_id,
5302 p_name => NULL,
5303 x_run_id => l_run_id);
5304 END IF;
5305
5306 IF l_run_id > 0 THEN
5307 IF NOT(xmldom.IsNull(p_xml_node)) THEN
5308 l_element_path := get_Element_XML_Path(p_xml_node => p_xml_node);
5309 ELSE -- UI rule on UI page level
5310 SELECT name INTO l_element_path FROM CZ_UI_PAGES
5311 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
5312 END IF;
5313
5314 IF k.rule_type=33 THEN
5315 add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
5316 p_token_name => 'UIELEMENTPATH',
5317 p_token_value => l_element_path,
5318 p_fatal_error => TRUE);
5319 ELSIF k.rule_type=34 THEN
5320 add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
5321 p_token_name => 'UIELEMENTPATH',
5322 p_token_value => l_element_path,
5323 p_fatal_error => TRUE);
5324 ELSE
5325 NULL;
5326 END IF;
5327
5328 END IF;
5329 END LOOP;
5330 ELSE
5331 x_rule_id := NULL;
5332 END IF;
5333 END copy_UI_Rule;
5334
5335 FUNCTION get_Runtime_Relative_Path
5336 (
5337 p_model_id NUMBER,
5338 p_persistent_node_id NUMBER,
5339 p_page_id NUMBER,
5340 p_ui_node_expl_id NUMBER DEFAULT NULL
5341 ) RETURN VARCHAR2 IS
5342
5343 l_model_path VARCHAR2(32000);
5344 l_pagebase_expl_id NUMBER;
5345 l_expl_id NUMBER;
5346 l_expl_node_id NUMBER;
5347 l_ps_node_id NUMBER;
5348 l_ps_node_type NUMBER;
5349 l_component_id NUMBER;
5350 l_model_ref_expl_id NUMBER;
5351 l_pagebase_persistent_node_id NUMBER;
5352
5353 BEGIN
5354
5355 SELECT persistent_node_id,pagebase_expl_node_id
5356 INTO l_pagebase_persistent_node_id, l_pagebase_expl_id
5357 FROM CZ_UI_PAGES
5358 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id;
5359
5360 BEGIN
5361 --
5362 -- does the current node with persistent_node_id=p_persistent_node_id
5363 -- belongs to model with devl_project_id=p_model_id ?
5364 --
5365 SELECT ps_node_id,ps_node_type,component_id
5366 INTO l_ps_node_id, l_ps_node_type, l_component_id FROM CZ_PS_NODES
5367 WHERE devl_project_id=p_model_id AND
5368 persistent_node_id=p_persistent_node_id;
5369
5370 EXCEPTION
5371 WHEN NO_DATA_FOUND THEN
5372 --
5373 -- the current node with persistent_node_id=p_persistent_node_id
5374 -- does not belong to model with devl_project_id=p_model_id
5375 -- and belongs to some referenced model
5376 --
5377 NULL;
5378 END;
5379
5380 --
5381 -- AMN of UI node belongs to current model
5382 --
5383 IF l_ps_node_id IS NOT NULL THEN
5384 l_expl_id := get_Expl_Id(p_model_id => p_model_id,
5385 p_ps_node_id => l_ps_node_id,
5386 p_component_id => l_component_id,
5387 p_ps_node_type => l_ps_node_type);
5388
5389 l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pagebase_expl_id,
5390 p_base_pers_id => l_pagebase_persistent_node_id,
5391 p_node_expl_id => l_expl_id,
5392 p_node_pers_id => p_persistent_node_id);
5393 IF l_model_path IS NULL THEN
5394 l_model_path := '.';
5395 END IF;
5396
5397 RETURN l_model_path;
5398 END IF;
5399
5400 -- validation of expl_id
5401 SELECT model_ref_expl_id INTO l_model_ref_expl_id
5402 FROM CZ_MODEL_REF_EXPLS
5403 WHERE model_ref_expl_id=p_ui_node_expl_id;
5404
5405 --
5406 -- AMN of UI node belongs to referenced model
5407 --
5408
5409 FOR i IN(SELECT model_ref_expl_id,parent_expl_node_id,ps_node_type,
5410 component_id,referring_node_id
5411 FROM CZ_MODEL_REF_EXPLS
5412 START WITH model_ref_expl_id=p_ui_node_expl_id
5413 CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND
5414 deleted_flag='0')
5415 LOOP
5416 -- go up until the nearest reference
5417 IF (i.ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) OR i.parent_expl_node_id IS NULL) THEN
5418
5419 -- get ps node data for AMN of UI node
5420 SELECT ps_node_id,ps_node_type,component_id
5421 INTO l_ps_node_id, l_ps_node_type,l_component_id
5422 FROM CZ_PS_NODES
5423 WHERE devl_project_id=i.component_id AND
5424 persistent_node_id=p_persistent_node_id AND
5425 deleted_flag=G_NO_FLAG;
5426
5427 IF NOT(l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND p_ui_node_expl_id<>i.model_ref_expl_id) THEN
5428
5429 SELECT model_ref_expl_id INTO l_expl_id FROM
5430 (SELECT model_ref_expl_id,referring_node_id,component_id FROM CZ_MODEL_REF_EXPLS
5431 START WITH model_ref_expl_id=i.model_ref_expl_id
5432 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND deleted_flag='0') a
5433 WHERE (l_ps_node_type IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.referring_node_id=l_ps_node_id) OR
5434 (l_ps_node_type NOT IN(G_REFERENCE_TYPE,G_CONNECTOR_TYPE) AND a.component_id=l_component_id);
5435
5436
5437 l_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_pagebase_expl_id,
5438 p_base_pers_id => l_pagebase_persistent_node_id,
5439 p_node_expl_id => l_expl_id,
5440 p_node_pers_id => p_persistent_node_id);
5441
5442 IF l_model_path IS NULL THEN
5443 l_model_path := '.';
5444 END IF;
5445
5446 RETURN l_model_path;
5447 END IF;
5448
5449 END IF;
5450 END LOOP;
5451
5452 END get_Runtime_Relative_Path;
5453
5454 PROCEDURE handle_User_Attributes
5455 (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5456 p_source_ui_def_id IN NUMBER,
5457 p_source_ui_page_id IN NUMBER,
5458 p_target_ui_def_id IN NUMBER,
5459 p_target_ui_page_id IN NUMBER,
5460 p_new_element_id IN VARCHAR2,
5461 p_source_template_id IN NUMBER DEFAULT NULL,
5462 p_target_template_id IN NUMBER DEFAULT NULL,
5463 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5464
5465 l_cached_elems_tbl number_tbl_type;
5466 l_cached_source_elems_tbl number_tbl_type;
5467 l_counter NUMBER := 0;
5468
5469 l_id NUMBER;
5470 l_new_action_id NUMBER;
5471 l_new_rule_id NUMBER;
5472 l_new_intl_text_id NUMBER;
5473 l_ui_def_node CZ_UI_DEFS%ROWTYPE;
5474 l_prev_ui_context CZ_UI_DEFS%ROWTYPE;
5475 l_new_target_node_path CZ_UI_ACTIONS.target_node_path%TYPE;
5476
5477 BEGIN
5478
5479 IF px_user_attribute_value IS NULL THEN
5480 RETURN;
5481 END IF;
5482
5483
5484 l_ui_def_node := get_Local_UI_Context(p_target_ui_def_id);
5485 l_prev_ui_context := g_UI_Context;
5486 g_UI_Context := l_ui_def_node;
5487
5488 BEGIN
5489 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5490 EXCEPTION
5491 WHEN OTHERS THEN
5492 l_id := NULL;
5493 END;
5494
5495 IF l_id IS NOT NULL THEN
5496
5497 FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5498 WHERE ui_def_id=p_source_ui_def_id AND
5499 ui_action_id=l_id AND
5500 NVL(source_page_id,0)=NVL(p_source_ui_page_id,0)
5501 AND seeded_flag=G_NO_FLAG)
5502 LOOP
5503
5504 l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5505
5506 IF i.target_persistent_node_id IS NOT NULL THEN
5507 l_new_target_node_path := get_Runtime_Relative_Path(p_model_id => l_ui_def_node.devl_project_id,
5508 p_persistent_node_id => i.target_persistent_node_id,
5509 p_page_id => p_target_ui_page_id);
5510 ELSE
5511 l_new_target_node_path := NULL;
5512 END IF;
5513
5514 INSERT INTO CZ_UI_ACTIONS
5515 (
5516 UI_ACTION_ID
5517 ,UI_DEF_ID
5518 ,SOURCE_PAGE_ID
5519 ,CONTEXT_COMPONENT_ID
5520 ,ELEMENT_ID
5521 ,RENDER_CONDITION_ID
5522 ,UI_ACTION_TYPE
5523 ,TARGET_UI_DEF_ID
5524 ,TARGET_PERSISTENT_NODE_ID
5525 ,TARGET_NODE_PATH
5526 ,TARGET_PAGE_SET_ID
5527 ,TARGET_PAGE_ID
5528 ,TARGET_URL
5529 ,FRAME_NAME
5530 ,TARGET_ANCHOR
5531 ,DELETED_FLAG
5532 ,SEEDED_FLAG
5533 ,CX_COMMAND_NAME
5534 ,WINDOW_PARAMETERS
5535 ,TARGET_WINDOW_TYPE
5536 ,TARGET_WINDOW_NAME
5537 ,TARGET_EXPL_NODE_ID
5538 ,URL_PROPERTY_ID
5539 ,PROC_PAGE_TEMPL_UI_DEF_ID
5540 ,PAGE_TITLE_TEXT_ID
5541 ,MAIN_MESSAGE_TEXT_ID
5542 ,PROCESSING_CAPTION_TEXT_ID
5543 ,PROCESSING_PAGE_TEMPL_ID
5544 )
5545 VALUES(
5546 l_new_action_id
5547 ,p_target_ui_def_id
5548 ,p_target_ui_page_id
5549 ,i.CONTEXT_COMPONENT_ID
5550 ,p_new_element_id
5551 ,i.RENDER_CONDITION_ID
5552 ,i.UI_ACTION_TYPE
5553 ,i.TARGET_UI_DEF_ID
5554 ,i.TARGET_PERSISTENT_NODE_ID
5555 ,l_new_target_node_path
5556 ,i.TARGET_PAGE_SET_ID
5557 ,i.TARGET_PAGE_ID
5558 ,i.TARGET_URL
5559 ,i.FRAME_NAME
5560 ,i.TARGET_ANCHOR
5561 ,i.DELETED_FLAG
5562 ,'0'
5563 ,i.CX_COMMAND_NAME
5564 ,i.WINDOW_PARAMETERS
5565 ,i.TARGET_WINDOW_TYPE
5566 ,i.TARGET_WINDOW_NAME
5567 ,i.TARGET_EXPL_NODE_ID
5568 ,i.URL_PROPERTY_ID
5569 ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5570 ,i.PAGE_TITLE_TEXT_ID
5571 ,i.MAIN_MESSAGE_TEXT_ID
5572 ,i.PROCESSING_CAPTION_TEXT_ID
5573 ,i.PROCESSING_PAGE_TEMPL_ID
5574 );
5575
5576 set_User_Attribute(p_cz_attribute_name => 'actionId',
5577 p_cz_attribute_value => TO_CHAR(l_new_action_id),
5578 px_xml_attribute_value => px_user_attribute_value);
5579
5580 IF p_source_template_id IS NOT NULL THEN
5581 l_counter := l_counter + 1;
5582 l_cached_elems_tbl(l_counter) := l_new_action_id;
5583 l_cached_source_elems_tbl(l_counter) := l_id;
5584 END IF;
5585
5586 END LOOP;
5587
5588 -- set global UI context to its value before this procedure call
5589 g_UI_Context := l_prev_ui_context;
5590 END IF;
5591
5592 FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
5593 LOOP
5594 BEGIN
5595 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5596 EXCEPTION
5597 WHEN OTHERS THEN
5598 l_id := NULL;
5599 END;
5600 IF l_id IS NOT NULL THEN
5601
5602 copy_UI_Rule(l_id, l_new_rule_id,
5603 p_target_ui_def_id,p_target_ui_page_id,p_new_element_id,p_source_ui_def_id,
5604 p_xml_node);
5605
5606 IF p_source_template_id IS NOT NULL THEN
5607 l_counter := l_counter + 1;
5608 l_cached_elems_tbl(l_counter) := l_new_rule_id;
5609 l_cached_source_elems_tbl(l_counter) := l_id;
5610 END IF;
5611
5612 set_User_Attribute(p_cz_attribute_name => g_condition_attr_tbl(i),
5613 p_cz_attribute_value => TO_CHAR(l_new_rule_id),
5614 px_xml_attribute_value => px_user_attribute_value);
5615
5616 END IF;
5617 END LOOP;
5618
5619 FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
5620 LOOP
5621 BEGIN
5622 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5623 EXCEPTION
5624 WHEN OTHERS THEN
5625 l_id := NULL;
5626 END;
5627
5628 IF l_id IS NOT NULL THEN
5629
5630 l_new_intl_text_id := NULL;
5631
5632 FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5633 WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5634 AND deleted_flag=G_NO_FLAG)
5635 LOOP
5636 IF l_new_intl_text_id IS NULL THEN
5637 l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5638 END IF;
5639 INSERT INTO CZ_LOCALIZED_TEXTS
5640 (
5641 LOCALE_ID
5642 ,LOCALIZED_STR
5643 ,INTL_TEXT_ID
5644 ,DELETED_FLAG
5645 ,EFF_FROM
5646 ,EFF_TO
5647 ,SECURITY_MASK
5648 ,EFF_MASK
5649 ,CHECKOUT_USER
5650 ,ORIG_SYS_REF
5651 ,LANGUAGE
5652 ,SOURCE_LANG
5653 ,UI_DEF_ID
5654 ,MODEL_ID
5655 ,SEEDED_FLAG
5656 ,UI_PAGE_ID
5657 ,UI_PAGE_ELEMENT_ID
5658 )
5659 VALUES(
5660 k.LOCALE_ID
5661 ,k.LOCALIZED_STR
5662 ,l_new_intl_text_id
5663 ,k.DELETED_FLAG
5664 ,k.EFF_FROM
5665 ,k.EFF_TO
5666 ,k.SECURITY_MASK
5667 ,k.EFF_MASK
5668 ,k.CHECKOUT_USER
5669 ,k.ORIG_SYS_REF
5670 ,k.LANGUAGE
5671 ,k.SOURCE_LANG
5672 ,p_target_ui_def_id
5673 ,l_ui_def_node.devl_project_id
5674 ,'0'
5675 ,p_target_ui_page_id
5676 ,p_new_element_id
5677 );
5678 END LOOP;
5679
5680 IF l_new_intl_text_id IS NOT NULL THEN
5681 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5682 p_cz_attribute_value => TO_CHAR(l_new_intl_text_id),
5683 px_xml_attribute_value => px_user_attribute_value);
5684
5685 IF p_source_template_id IS NOT NULL THEN
5686 l_counter := l_counter + 1;
5687 l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5688 l_cached_source_elems_tbl(l_counter) := l_id;
5689 END IF;
5690 END IF;
5691 ELSE -- l_id is NULL
5692
5693 BEGIN
5694 l_id := g_cx_names_tbl(TO_NUMBER(p_new_element_id));
5695 EXCEPTION
5696 WHEN OTHERS THEN
5697 NULL;
5698 END;
5699
5700 IF l_id IS NOT NULL THEN
5701 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5702 p_cz_attribute_value => TO_CHAR(l_id),
5703 px_xml_attribute_value => px_user_attribute_value);
5704
5705 ELSE
5706 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5707 p_cz_attribute_value => TO_CHAR(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID),
5708 px_xml_attribute_value => px_user_attribute_value);
5709 END IF;
5710
5711 END IF;
5712 END LOOP;
5713
5714 IF l_cached_elems_tbl.COUNT > 0 THEN
5715 FOR i IN l_cached_elems_tbl.First..l_cached_elems_tbl.Last
5716 LOOP
5717
5718 INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5719 (
5720 TEMPLATE_ID
5721 ,UI_DEF_ID
5722 ,ELEMENT_TYPE
5723 ,ELEMENT_ID
5724 ,PERSISTENT_ELEMENT_ID
5725 ,DELETED_FLAG
5726 ,SEEDED_FLAG
5727 )
5728 SELECT
5729 p_target_template_id
5730 ,p_target_ui_def_id
5731 ,ELEMENT_TYPE
5732 ,l_cached_elems_tbl(i)
5733 ,l_cached_elems_tbl(i)
5734 ,G_NO_FLAG
5735 ,G_NO_FLAG
5736 FROM CZ_UI_TEMPLATE_ELEMENTS
5737 WHERE template_id=p_source_template_id AND
5738 ui_def_id=p_source_ui_def_id AND
5739 element_id=l_cached_source_elems_tbl(i) AND
5740 deleted_flag=G_NO_FLAG;
5741 END LOOP;
5742 END IF;
5743
5744 END handle_User_Attributes;
5745
5746 --
5747 -- handle user attributes in UI template
5748 --
5749 PROCEDURE handle_Template_Attributes
5750 (px_user_attribute_value IN OUT NOCOPY VARCHAR2,
5751 p_new_element_id IN VARCHAR2,
5752 p_source_ui_def_id IN NUMBER,
5753 p_source_template_id IN NUMBER,
5754 p_target_ui_def_id IN NUMBER,
5755 p_target_template_id IN NUMBER,
5756 p_xml_node IN xmldom.DOMNode DEFAULT g_Null_Xml_Node) IS
5757
5758 l_cached_elems_tbl number_tbl_type;
5759 l_cached_source_elems_tbl number_tbl_type;
5760 l_counter NUMBER := 0;
5761
5762 l_id NUMBER;
5763 l_new_action_id NUMBER;
5764 l_new_rule_id NUMBER;
5765 l_new_intl_text_id NUMBER;
5766
5767 BEGIN
5768
5769 IF px_user_attribute_value IS NULL THEN
5770 RETURN;
5771 END IF;
5772
5773 BEGIN
5774 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,'actionId'));
5775 EXCEPTION
5776 WHEN OTHERS THEN
5777 l_id := NULL;
5778 END;
5779
5780 IF l_id IS NOT NULL THEN
5781
5782 FOR i IN(SELECT * FROM CZ_UI_ACTIONS
5783 WHERE ui_action_id=l_id AND
5784 ui_def_id=p_source_ui_def_id AND
5785 source_page_id=0 AND
5786 seeded_flag=G_NO_FLAG)
5787 LOOP
5788
5789 l_new_action_id := allocateId('CZ_UI_ACTIONS_S');
5790
5791 INSERT INTO CZ_UI_ACTIONS
5792 (
5793 UI_ACTION_ID
5794 ,UI_DEF_ID
5795 ,SOURCE_PAGE_ID
5796 ,CONTEXT_COMPONENT_ID
5797 ,ELEMENT_ID
5798 ,RENDER_CONDITION_ID
5799 ,UI_ACTION_TYPE
5800 ,TARGET_UI_DEF_ID
5801 ,TARGET_PERSISTENT_NODE_ID
5802 ,TARGET_NODE_PATH
5803 ,TARGET_PAGE_SET_ID
5804 ,TARGET_PAGE_ID
5805 ,TARGET_URL
5806 ,FRAME_NAME
5807 ,TARGET_ANCHOR
5808 ,DELETED_FLAG
5809 ,SEEDED_FLAG
5810 ,CX_COMMAND_NAME
5811 ,WINDOW_PARAMETERS
5812 ,TARGET_WINDOW_TYPE
5813 ,TARGET_WINDOW_NAME
5814 ,TARGET_EXPL_NODE_ID
5815 ,URL_PROPERTY_ID
5816 ,PROC_PAGE_TEMPL_UI_DEF_ID
5817 ,PAGE_TITLE_TEXT_ID
5818 ,MAIN_MESSAGE_TEXT_ID
5819 ,PROCESSING_CAPTION_TEXT_ID
5820 ,PROCESSING_PAGE_TEMPL_ID
5821 )
5822 VALUES(
5823 l_new_action_id
5824 ,p_target_ui_def_id
5825 ,0
5826 ,i.CONTEXT_COMPONENT_ID
5827 ,p_new_element_id
5828 ,i.RENDER_CONDITION_ID
5829 ,i.UI_ACTION_TYPE
5830 ,i.TARGET_UI_DEF_ID
5831 ,i.TARGET_PERSISTENT_NODE_ID
5832 ,i.TARGET_NODE_PATH
5833 ,i.TARGET_PAGE_SET_ID
5834 ,i.TARGET_PAGE_ID
5835 ,i.TARGET_URL
5836 ,i.FRAME_NAME
5837 ,i.TARGET_ANCHOR
5838 ,i.DELETED_FLAG
5839 ,'0'
5840 ,i.CX_COMMAND_NAME
5841 ,i.WINDOW_PARAMETERS
5842 ,i.TARGET_WINDOW_TYPE
5843 ,i.TARGET_WINDOW_NAME
5844 ,i.TARGET_EXPL_NODE_ID
5845 ,i.URL_PROPERTY_ID
5846 ,i.PROC_PAGE_TEMPL_UI_DEF_ID
5847 ,i.PAGE_TITLE_TEXT_ID
5848 ,i.MAIN_MESSAGE_TEXT_ID
5849 ,i.PROCESSING_CAPTION_TEXT_ID
5850 ,i.PROCESSING_PAGE_TEMPL_ID
5851 );
5852
5853 set_User_Attribute(p_cz_attribute_name => 'actionId',
5854 p_cz_attribute_value => TO_CHAR(l_new_action_id),
5855 px_xml_attribute_value => px_user_attribute_value);
5856
5857 IF p_source_template_id IS NOT NULL THEN
5858 l_counter := l_counter + 1;
5859 l_cached_elems_tbl(l_counter) := l_new_action_id;
5860 l_cached_source_elems_tbl(l_counter) := l_id;
5861 END IF;
5862
5863 END LOOP;
5864 END IF;
5865
5866 FOR i IN g_condition_attr_tbl.FIRST..g_condition_attr_tbl.LAST
5867 LOOP
5868 BEGIN
5869 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_condition_attr_tbl(i)));
5870 EXCEPTION
5871 WHEN OTHERS THEN
5872 l_id := NULL;
5873 END;
5874 IF l_id IS NOT NULL THEN
5875 copy_UI_Rule(l_id, l_new_rule_id,0 , 0, p_new_element_id,p_source_ui_def_id, p_xml_node);
5876 IF p_source_template_id IS NOT NULL THEN
5877 l_counter := l_counter + 1;
5878 l_cached_elems_tbl(l_counter) := l_new_rule_id;
5879 l_cached_source_elems_tbl(l_counter) := l_id;
5880 END IF;
5881
5882 set_User_Attribute(p_cz_attribute_name => g_condition_attr_tbl(i),
5883 p_cz_attribute_value => TO_CHAR(l_new_rule_id),
5884 px_xml_attribute_value => px_user_attribute_value);
5885
5886 END IF;
5887 END LOOP;
5888
5889 FOR i IN g_caption_attr_tbl.FIRST..g_caption_attr_tbl.LAST
5890 LOOP
5891
5892 BEGIN
5893 l_id := TO_NUMBER(get_User_Attribute(px_user_attribute_value,g_caption_attr_tbl(i)));
5894 EXCEPTION
5895 WHEN OTHERS THEN
5896 l_id := NULL;
5897 END;
5898
5899 IF l_id IS NOT NULL THEN
5900
5901 l_new_intl_text_id := NULL;
5902
5903 FOR k IN(SELECT * FROM CZ_LOCALIZED_TEXTS
5904 WHERE intl_text_id=l_id AND seeded_flag=G_NO_FLAG
5905 AND deleted_flag=G_NO_FLAG)
5906 LOOP
5907 IF l_new_intl_text_id IS NULL THEN
5908 l_new_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
5909 END IF;
5910 INSERT INTO CZ_LOCALIZED_TEXTS
5911 (
5912 LOCALE_ID
5913 ,LOCALIZED_STR
5914 ,INTL_TEXT_ID
5915 ,DELETED_FLAG
5916 ,EFF_FROM
5917 ,EFF_TO
5918 ,SECURITY_MASK
5919 ,EFF_MASK
5920 ,CHECKOUT_USER
5921 ,ORIG_SYS_REF
5922 ,LANGUAGE
5923 ,SOURCE_LANG
5924 ,UI_DEF_ID
5925 ,MODEL_ID
5926 ,SEEDED_FLAG
5927 ,UI_PAGE_ID
5928 ,UI_PAGE_ELEMENT_ID
5929 )
5930 VALUES(
5931 k.LOCALE_ID
5932 ,k.LOCALIZED_STR
5933 ,l_new_intl_text_id
5934 ,k.DELETED_FLAG
5935 ,k.EFF_FROM
5936 ,k.EFF_TO
5937 ,k.SECURITY_MASK
5938 ,k.EFF_MASK
5939 ,k.CHECKOUT_USER
5940 ,k.ORIG_SYS_REF
5941 ,k.LANGUAGE
5942 ,k.SOURCE_LANG
5943 ,p_target_ui_def_id
5944 ,NVL(k.model_id,0)
5945 ,'0'
5946 ,0
5947 ,p_new_element_id
5948 );
5949
5950 END LOOP;
5951
5952 IF l_new_intl_text_id IS NOT NULL THEN
5953 set_User_Attribute(p_cz_attribute_name => g_caption_attr_tbl(i),
5954 p_cz_attribute_value => TO_CHAR(l_new_intl_text_id),
5955 px_xml_attribute_value => px_user_attribute_value);
5956
5957 IF p_source_template_id IS NOT NULL THEN
5958 l_counter := l_counter + 1;
5959 l_cached_elems_tbl(l_counter) := l_new_intl_text_id;
5960 l_cached_source_elems_tbl(l_counter) := l_id;
5961 END IF;
5962 END IF;
5963
5964 END IF;
5965 END LOOP;
5966
5967 IF l_cached_elems_tbl.COUNT > 0 THEN
5968 FOR i IN l_cached_elems_tbl.FIRST..l_cached_elems_tbl.LAST
5969 LOOP
5970 INSERT INTO CZ_UI_TEMPLATE_ELEMENTS
5971 (
5972 TEMPLATE_ID
5973 ,UI_DEF_ID
5974 ,ELEMENT_TYPE
5975 ,ELEMENT_ID
5976 ,PERSISTENT_ELEMENT_ID
5977 ,DELETED_FLAG
5978 ,SEEDED_FLAG
5979 )
5980 SELECT
5981 p_target_template_id
5982 ,p_target_ui_def_id
5983 ,ELEMENT_TYPE
5984 ,l_cached_elems_tbl(i)
5985 ,l_cached_elems_tbl(i)
5986 ,G_NO_FLAG
5987 ,G_NO_FLAG
5988 FROM CZ_UI_TEMPLATE_ELEMENTS
5989 WHERE template_id=p_source_template_id AND
5990 ui_def_id=p_source_ui_def_id AND
5991 element_id=l_cached_source_elems_tbl(i) AND
5992 deleted_flag=G_NO_FLAG;
5993 END LOOP;
5994 END IF;
5995
5996 END handle_Template_Attributes;
5997
5998 PROCEDURE copy_Node_Related_Entities(p_ui_def_id NUMBER,
5999 p_ui_page_id NUMBER,
6000 p_xml_node xmldom.DOMNode,
6001 p_target_ui_def_id NUMBER DEFAULT NULL,
6002 p_source_ui_page_id NUMBER DEFAULT NULL,
6003 p_source_ui_def_id NUMBER DEFAULT NULL) IS
6004
6005 l_user_attribute_value VARCHAR2(4000);
6006 l_element_id VARCHAR2(255);
6007 l_target_ui_def_id NUMBER;
6008 l_source_ui_page_id NUMBER;
6009 l_source_ui_def_id Number;
6010
6011 BEGIN
6012
6013 IF p_target_ui_def_id IS NULL THEN
6014 l_target_ui_def_id := p_ui_def_id;
6015 ELSE
6016 l_target_ui_def_id := p_target_ui_def_id;
6017 END IF;
6018
6019 IF p_source_ui_def_id IS NULL THEN
6020 l_source_ui_def_id := p_ui_def_id;
6021 ELSE
6022 l_source_ui_def_id := p_source_ui_def_id;
6023 END IF;
6024
6025 if p_source_ui_page_id IS NULL THEN
6026 l_source_ui_page_id := p_ui_page_id;
6027 ELSE
6028 l_source_ui_page_id := p_source_ui_page_id;
6029 END IF;
6030
6031 l_element_id := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
6032
6033 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
6034
6035 IF l_user_attribute_value IS NOT NULL THEN
6036 handle_User_Attributes
6037 (px_user_attribute_value => l_user_attribute_value,
6038 p_source_ui_def_id => l_source_ui_def_id,
6039 p_source_ui_page_id => l_source_ui_page_id,
6040 p_target_ui_def_id => l_target_ui_def_id,
6041 p_target_ui_page_id => p_ui_page_id,
6042 p_new_element_id => l_element_id,
6043 p_xml_node => p_xml_node);
6044
6045 set_Attribute(p_xml_node,
6046 G_USER_ATTRIBUTE3_NAME,
6047 l_user_attribute_value);
6048 END IF;
6049
6050 END copy_Node_Related_Entities;
6051
6052
6053 PROCEDURE handle_UI_CASE_Id(p_xml_node xmldom.DOMNode) IS
6054 l_user_attribute4 VARCHAR2(4000);
6055 BEGIN
6056 IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
6057
6058 l_user_attribute4 := get_Attribute_Value(p_xml_node,
6059 G_USER_ATTRIBUTE4_NAME);
6060 IF l_user_attribute4 IS NOT NULL THEN
6061 set_User_Attribute(p_cz_attribute_name => 'caseId',
6062 p_cz_attribute_value => get_Element_Id(),
6063 px_xml_attribute_value => l_user_attribute4);
6064
6065 set_Attribute(p_xml_node,G_USER_ATTRIBUTE4_NAME,l_user_attribute4);
6066
6067 END IF;
6068 END IF;
6069 END handle_UI_CASE_Id;
6070
6071 PROCEDURE handle_USER_ATTRIBUTE10
6072 (p_xml_root_node xmldom.DOMNode,
6073 p_ui_def_id NUMBER,
6074 p_ui_page_id NUMBER,
6075 p_ui_element_id VARCHAR2) IS
6076
6077 l_user_attribute3_value VARCHAR2(4000);
6078 l_user_attribute10_value VARCHAR2(4000);
6079 l_refenabledCondnId VARCHAR2(255);
6080 l_refenabledCondnComp VARCHAR2(255);
6081 l_refenabledCondnValue VARCHAR2(255);
6082 l_new_refenabledCondnId NUMBER;
6083 l_refdisplayCondnId VARCHAR2(255);
6084 l_refdisplayCondnComp VARCHAR2(255);
6085 l_refdisplayCondnValue VARCHAR2(255);
6086 l_new_refdisplayCondnId NUMBER;
6087
6088 BEGIN
6089
6090 l_user_attribute3_value := get_Attribute_Value(p_xml_root_node,
6091 G_USER_ATTRIBUTE3_NAME);
6092
6093 IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0 THEN
6094
6095 l_user_attribute10_value := get_Attribute_Value(p_xml_root_node, G_USER_ATTRIBUTE10_NAME);
6096
6097 IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0 THEN
6098 l_refenabledCondnId := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnId');
6099 l_refenabledCondnComp := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnComp');
6100 l_refenabledCondnValue := get_User_Attribute(l_user_attribute10_value, 'refenabledCondnValue');
6101
6102 copy_UI_Rule(p_rule_id => TO_NUMBER(l_refenabledCondnId),
6103 x_rule_id => l_new_refenabledCondnId,
6104 p_ui_def_id => p_ui_def_id,
6105 p_ui_page_id => p_ui_page_id,
6106 p_ui_element_id => p_ui_element_id,
6107 p_source_ui_def_id => p_ui_def_id);
6108
6109 l_user_attribute3_value := l_user_attribute3_value||'|enabledCondnId='||TO_CHAR(l_new_refenabledCondnId)||
6110 '|enabledCondnComp=' || l_refenabledCondnComp || '|enabledCondnValue='||l_refenabledCondnValue;
6111
6112 xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6113 set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6114
6115 END IF; -- end of IF INSTR(l_user_attribute10_value,'refenabledCondnId')>0
6116
6117 END IF; -- end of IF INSTR(l_user_attribute3_value,'enabledCondnId=')=0
6118
6119 IF INSTR(l_user_attribute3_value,'displayCondnId=')=0 THEN
6120 IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0 THEN
6121 l_refdisplayCondnId := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnId');
6122 l_refdisplayCondnComp := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnComp');
6123 l_refdisplayCondnValue := get_User_Attribute(l_user_attribute10_value, 'refdisplayCondnValue');
6124
6125
6126 copy_UI_Rule(p_rule_id => TO_NUMBER(l_refdisplayCondnId),
6127 x_rule_id => l_new_refdisplayCondnId,
6128 p_ui_def_id => p_ui_def_id,
6129 p_ui_page_id => p_ui_page_id,
6130 p_ui_element_id => p_ui_element_id,
6131 p_source_ui_def_id => p_ui_def_id);
6132
6133 l_user_attribute3_value := l_user_attribute3_value||'|displayCondnId='||TO_CHAR(l_new_refdisplayCondnId)||
6134 '|displayCondnComp=' || l_refdisplayCondnComp || '|displayCondnValue='||l_refdisplayCondnValue;
6135 xmldom.removeAttribute(xmldom.makeElement(p_xml_root_node), G_USER_ATTRIBUTE10_NAME);
6136 set_Attribute(p_xml_root_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute3_value);
6137
6138 END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6139
6140 END IF; -- end of IF INSTR(l_user_attribute10_value,'refdisplayCondnId')>0
6141
6142 END handle_USER_ATTRIBUTE10;
6143
6144 PROCEDURE create_wrapper_table_layout(x_xml_table_node OUT NOCOPY xmldom.DOMNode,
6145 x_xml_tabuicontent_node OUT NOCOPY xmldom.DOMNode,
6146 p_target_subtree_xml_node xmldom.DOMNode) IS
6147
6148 l_doc xmldom.DOMDocument;
6149 l_xml_table_node xmldom.DOMNode;
6150
6151 BEGIN
6152 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
6153
6154 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
6155
6156 remove_TopLevel_Attributes(l_xml_table_node);
6157
6158 --x_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
6159 x_xml_table_node := cloneNode(l_xml_table_node, p_target_subtree_xml_node);
6160
6161 set_Attribute(xmldom.makeElement(x_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
6162 set_Attribute(xmldom.makeElement(x_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
6163
6164 x_xml_tabuicontent_node := getUIContents(x_xml_table_node);
6165
6166 END create_wrapper_table_layout;
6167
6168 FUNCTION insert_before(p_parent_xml_node IN xmldom.DOMNode,
6169 p_new_xml_node IN xmldom.DOMNode,
6170 p_ref_xml_node IN xmldom.DOMNode)
6171 RETURN xmldom.DOMNode IS
6172 l_new_xml_node xmldom.DOMNode;
6173 BEGIN
6174
6175 IF xmldom.isNull(p_ref_xml_node) THEN
6176 l_new_xml_node := xmldom.appendChild(p_parent_xml_node, p_new_xml_node);
6177 ELSE
6178 l_new_xml_node := xmldom.insertBefore(p_parent_xml_node, p_new_xml_node, p_ref_xml_node);
6179 END IF;
6180
6181 return l_new_xml_node;
6182 END insert_before;
6183
6184 FUNCTION insert_node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6185 p_new_xml_node IN xmldom.DOMNode,
6186 p_parent_xml_node IN xmldom.DOMNode)
6187 RETURN xmldom.DOMNode IS
6188
6189 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6190 l_doc xmldom.DOMDocument;
6191 l_anchor_doc xmldom.DOMDocument;
6192 l_subtree_doc xmldom.DOMDocument;
6193 l_xml_root_node xmldom.DOMNode;
6194 l_new_xml_root_node xmldom.DOMNode;
6195 l_out_xml_node xmldom.DOMNode;
6196 l_xml_table_node xmldom.DOMNode;
6197 l_new_xml_table_node xmldom.DOMNode;
6198 l_xml_anchor_node xmldom.DOMNode;
6199 l_new_xml_anchor_node xmldom.DOMNode;
6200 l_xml_node xmldom.DOMNode;
6201 l_xml_tabuicontent_node xmldom.DOMNode;
6202 l_ui_contents_xml_node xmldom.DOMNode;
6203 l_prev_node xmldom.DOMNode;
6204 l_next_node xmldom.DOMNode;
6205 l_prev_node_parent xmldom.DOMNode;
6206 l_next_node_parent xmldom.DOMNode;
6207 l_prev_node_parent_ui_cnt xmldom.DOMNode;
6208 l_next_node_parent_ui_cnt xmldom.DOMNode;
6209 l_grand_parent xmldom.DOMNode;
6210 l_next_sibling_of_parent xmldom.DOMNode;
6211 l_child_nodes_tbl xmldom.DOMNodeList;
6212 l_attribute_value VARCHAR2(4000);
6213 l_attribute_source VARCHAR2(4000);
6214 l_user_attribute VARCHAR2(4000);
6215 l_user_attribute4 VARCHAR2(4000);
6216 l_prev_element_id VARCHAR2(255);
6217 l_next_element_id VARCHAR2(255);
6218 l_prev_element_template_id NUMBER;
6219 l_next_element_template_id NUMBER;
6220 l_prev_elt_lyt_ui_style VARCHAR2(1);
6221 l_next_elt_lyt_ui_style VARCHAR2(1);
6222 l_lyt_ui_style VARCHAR2(1);
6223 l_old_ui_element_id VARCHAR2(255);
6224 l_new_ui_element_id VARCHAR2(255);
6225 l_switcher_element_id VARCHAR2(255);
6226 l_user_attribute3_value VARCHAR2(4000);
6227 l_switcher_casename VARCHAR2(255);
6228 l_length NUMBER;
6229 l_ui_action_id NUMBER;
6230 l_element_signature_id NUMBER;
6231 l_wrap_it BOOLEAN;
6232 l_drilldown_text_id NUMBER;
6233 l_wrap_with_links BOOLEAN := FALSE;
6234 l_template_is_used_by_ref BOOLEAN := TRUE;
6235
6236 BEGIN
6237
6238
6239 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6240 l_new_xml_root_node := p_new_xml_node;
6241
6242 --DEBUG('asp:insert_node ' || l_node.name);
6243
6244 BEGIN
6245
6246 SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6247 FROM CZ_UI_PAGE_ELEMENTS
6248 WHERE ui_def_id=p_ui_node.ui_def_id AND
6249 page_id = p_ui_node.page_id AND
6250 parent_element_id = p_ui_node.parent_element_id AND
6251 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6252 seq_nbr = (SELECT max(seq_nbr)
6253 FROM CZ_UI_PAGE_ELEMENTS
6254 WHERE ui_def_id=p_ui_node.ui_def_id AND
6255 page_id = p_ui_node.page_id AND
6256 parent_element_id = p_ui_node.parent_element_id AND
6257 seq_nbr<p_ui_node.seq_nbr AND
6258 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6259 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6260 ctrl_template_id IS NULL) AND
6261 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6262 AND rownum < 2;
6263
6264 EXCEPTION
6265 WHEN NO_DATA_FOUND THEN
6266 NULL;
6267 END;
6268
6269 --DEBUG('asp:Here 1');
6270
6271 BEGIN
6272 SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6273 FROM CZ_UI_PAGE_ELEMENTS
6274 WHERE ui_def_id=p_ui_node.ui_def_id AND
6275 page_id = p_ui_node.page_id AND
6276 parent_element_id = p_ui_node.parent_element_id AND
6277 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6278 seq_nbr = ( SELECT min(seq_nbr)
6279 FROM CZ_UI_PAGE_ELEMENTS
6280 WHERE ui_def_id=p_ui_node.ui_def_id AND
6281 page_id = p_ui_node.page_id AND
6282 parent_element_id = p_ui_node.parent_element_id AND
6283 seq_nbr>p_ui_node.seq_nbr AND
6284 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6285 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6286 ctrl_template_id IS NULL) AND
6287 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6288 AND rownum < 2;
6289
6290 EXCEPTION
6291 WHEN NO_DATA_FOUND THEN
6292 NULL;
6293 END;
6294
6295 --DEBUG('Here 2');
6296
6297 IF l_prev_element_id IS NOT NULL THEN
6298 l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
6299
6300 l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
6301 l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
6302 BEGIN
6303 SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
6304 FROM CZ_UI_TEMPLATES
6305 WHERE template_id = l_prev_element_template_id
6306 AND ui_def_id = 0
6307 AND deleted_flag = G_NO_FLAG;
6308
6309 EXCEPTION
6310 WHEN NO_DATA_FOUND THEN
6311 NULL;
6312 END;
6313 END IF;
6314
6315 --DEBUG('Here 3');
6316
6317 IF l_next_element_id IS NOT NULL THEN
6318 l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
6319 l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
6320 l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
6321 BEGIN
6322 SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
6323 FROM CZ_UI_TEMPLATES
6324 WHERE template_id = l_next_element_template_id
6325 AND ui_def_id = 0
6326 AND deleted_flag = G_NO_FLAG;
6327
6328 EXCEPTION
6329 WHEN NO_DATA_FOUND THEN
6330 NULL;
6331 END;
6332 END IF;
6333
6334 --DEBUG('Here 4');
6335
6336 IF p_ui_node.ctrl_template_id IS NOT NULL THEN
6337
6338 SELECT layout_ui_style INTO l_lyt_ui_style
6339 FROM CZ_UI_TEMPLATES
6340 WHERE template_id = p_ui_node.ctrl_template_id
6341 AND ui_def_id = 0
6342 AND deleted_flag = G_NO_FLAG;
6343
6344 IF l_lyt_ui_style = G_LABEL_PAIR_LAYOUT_STYLE THEN
6345 l_wrap_it := TRUE;
6346 ELSE
6347 l_wrap_it := FALSE;
6348 END IF;
6349 END IF;
6350
6351 --DEBUG('Here 5');
6352
6353 IF l_prev_element_id IS NOT NULL
6354 OR l_next_element_id IS NOT NULL THEN
6355 IF l_wrap_it THEN
6356 IF l_prev_element_id IS NOT NULL AND
6357 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6358 l_next_node := xmldom.getNextSibling(l_prev_node);
6359 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6360 ELSIF l_next_element_id IS NOT NULL AND
6361 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6362 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6363 ELSE
6364 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6365 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6366 IF l_prev_element_id IS NOT NULL THEN
6367 l_next_node := xmldom.getNextSibling(l_prev_node);
6368 l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6369 ELSIF l_next_element_id IS NOT NULL THEN
6370 l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
6371 ELSE
6372 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6373 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6374 END IF;
6375 END IF;
6376 ELSE -- new element is not LABEL_DATA_PAIR
6377
6378 IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
6379 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
6380 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
6381
6382
6383 IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
6384 IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
6385 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6386 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6387 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6388 l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
6389 l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
6390 l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
6391 l_next_node := l_xml_table_node;
6392 END IF;
6393 l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
6394 ELSE
6395 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6396 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6397 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6398 END IF;
6399 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
6400 l_next_node := xmldom.getNextSibling(l_prev_node);
6401 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6402 ELSIF l_next_element_id IS NOT NULL AND
6403 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
6404 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
6405 ELSIF l_prev_element_id IS NOT NULL THEN
6406 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
6407 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
6408 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
6409 ELSE
6410 l_grand_parent := xmldom.getParentNode(l_next_node_parent);
6411 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
6412 END IF;
6413 END IF;
6414 ELSE
6415 -- If neither prev_element and next_element is found
6416 -- Insert at the end
6417 --DEBUG('asp:Append at the end');
6418
6419 IF l_wrap_it THEN
6420 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6421 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
6422 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
6423 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
6424 ELSE
6425 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
6426 l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
6427 END IF;
6428 END IF;
6429
6430 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6431 RETURN l_new_xml_root_node;
6432
6433 END insert_node;
6434
6435 FUNCTION pluck_XML_node(p_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE,
6436 p_page_id NUMBER,
6437 p_element_id VARCHAR2)
6438 RETURN xmldom.DOMNode IS
6439
6440 l_xml_node_to_pluck xmldom.DOMNode;
6441 l_parent_xml_node xmldom.DOMNode;
6442 l_subtree_doc xmldom.DOMDocument;
6443 l_element_id NUMBER;
6444
6445 BEGIN
6446
6447 l_element_id := TO_NUMBER(p_element_id);
6448
6449 IF g_dom_elements_to_move.EXISTS(l_element_id) THEN
6450 l_xml_node_to_pluck := g_dom_elements_to_move(l_element_id);
6451
6452 ELSE
6453 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
6454
6455 l_xml_node_to_pluck := find_XML_Node_By_Attribute(l_subtree_doc,
6456 G_ID_ATTRIBUTE,
6457 p_element_id,
6458 G_NO_FLAG);
6459
6460 l_parent_xml_node := xmldom.getParentNode(l_xml_node_to_pluck);
6461
6462 l_xml_node_to_pluck := xmldom.removeChild(l_parent_xml_node, l_xml_node_to_pluck);
6463
6464 Save_Document(l_subtree_doc, p_jrad_doc);
6465 END IF;
6466
6467 RETURN l_xml_node_to_pluck;
6468
6469 END pluck_XML_node;
6470
6471
6472 FUNCTION move_XML_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6473 p_parent_xml_node xmldom.DOMNode)
6474 RETURN xmldom.DOMNode IS
6475
6476 l_src_page_id NUMBER;
6477 l_xml_node_to_move xmldom.DOMNode;
6478 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
6479 l_counter NUMBER;
6480 l_element_ids_tbl varchar2_tbl_type;
6481 l_id VARCHAR2(255);
6482 l_component_id NUMBER;
6483 l_old_component_id NUMBER;
6484
6485 BEGIN
6486
6487 l_src_page_id := g_tgt_pg_to_src_pg_map(p_ui_node.page_id)(TO_NUMBER(p_ui_node.element_id));
6488
6489 SELECT jrad_doc INTO l_jrad_doc
6490 FROM CZ_UI_PAGES
6491 WHERE ui_def_id= g_UI_Context.ui_def_id AND
6492 page_id=l_src_page_id;
6493
6494 l_xml_node_to_move := pluck_XML_node(l_jrad_doc, l_src_page_id, p_ui_node.element_id);
6495 l_xml_node_to_move := cloneNode(l_xml_node_to_move, p_parent_xml_node);
6496
6497 l_counter := -1;
6498 resolve_view_names(l_xml_node_to_move, p_ui_node.page_id, l_counter, l_element_ids_tbl);
6499
6500
6501 SELECT ps_node_id INTO l_component_id
6502 FROM CZ_PS_NODES
6503 WHERE devl_project_id = g_UI_Context.devl_project_id
6504 AND persistent_node_Id = p_ui_node.pagebase_persistent_node_id;
6505
6506 SELECT ps_node_id INTO l_old_component_id
6507 FROM CZ_PS_NODES
6508 WHERE devl_project_id = g_UI_Context.devl_project_id
6509 AND persistent_node_id = (SELECT persistent_node_id
6510 FROM CZ_UI_PAGES
6511 WHERE ui_def_id = g_UI_Context.ui_Def_id
6512 AND page_id = l_src_page_id);
6513
6514
6515
6516 FOR i in (SELECT rule_id, ui_page_element_id
6517 FROM CZ_RULES
6518 WHERE devl_project_id = g_UI_Context.devl_project_id
6519 AND ui_def_id = g_UI_Context.ui_def_id
6520 AND ui_page_id = l_src_page_id
6521 AND component_id = l_old_component_id
6522 AND deleted_flag = G_NO_FLAG)
6523 LOOP
6524 DEBUG('asp: Found rule ' || i.rule_id || ', for element ' || i.ui_page_element_Id);
6525 IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6526 DEBUG('asp: Updating rule ' || i.rule_id || ' for element_id ' || i.ui_page_element_id);
6527 UPDATE CZ_RULES
6528 SET component_id = l_component_id,
6529 ui_page_id = p_ui_node.page_id
6530 WHERE devl_project_id = g_UI_Context.devl_project_id
6531 AND rule_id = i.rule_id;
6532 END IF;
6533 END LOOP;
6534
6535 FOR i in (SELECT intl_text_id, ui_page_element_id
6536 FROM CZ_INTL_TEXTS
6537 WHERE model_id = g_UI_Context.devl_project_id
6538 AND ui_def_id = g_UI_Context.ui_def_id
6539 AND ui_page_id = l_src_page_id
6540 AND deleted_flag = G_NO_FLAG)
6541 LOOP
6542 IF l_element_ids_tbl.EXISTS(i.ui_page_element_id) THEN
6543 DEBUG('asp: Updating intl_text ' || i.intl_text_id || ' for element_id ' || i.ui_page_element_id);
6544 UPDATE CZ_LOCALIZED_TEXTS
6545 SET ui_page_id = p_ui_node.page_id
6546 WHERE intl_text_id = i.intl_text_id;
6547 END IF;
6548 END LOOP;
6549 l_xml_node_to_move := insert_node(p_ui_node, l_xml_node_to_move, p_parent_xml_node);
6550
6551 RETURN l_xml_node_to_move;
6552
6553 END move_XML_Node;
6554
6555 --
6556 -- replace numeric suffix at the end of p_jrad_id with p_root_jrad_id
6557 -- if there is no numeric suffix then it just adds '_'||p_root_jrad_id to p_jrad_id
6558 -- Ex. : if p_jrad_id="_czabcd_100" and p_root_jrad_id="12345"
6559 -- then function will return "_czabcd_12345"
6560 --
6561 FUNCTION handle_JRAD_Id(p_jrad_id IN VARCHAR2,
6562 p_root_jrad_id IN VARCHAR2) RETURN VARCHAR2 IS
6563 l_ind NUMBER;
6564 l_num NUMBER;
6565 l_jrad_id VARCHAR2(4000);
6566 l_next_str VARCHAR2(4000);
6567 BEGIN
6568 l_jrad_id := p_jrad_id;
6569 l_ind := INSTR(l_jrad_id,'_');
6570 LOOP
6571 l_next_str := SUBSTR(l_jrad_id,l_ind+1);
6572 l_ind := INSTR(l_next_str,'_');
6573 IF l_ind=0 THEN
6574 BEGIN
6575 l_num := TO_NUMBER(l_next_str);
6576 l_jrad_id := REPLACE(p_jrad_id,l_next_str,p_root_jrad_id);
6577 RETURN l_jrad_id;
6578 EXCEPTION
6579 WHEN OTHERS THEN
6580 RETURN p_jrad_id||'_'||p_root_jrad_id;
6581 END;
6582 ELSE
6583 l_jrad_id:= l_next_str;
6584 END IF;
6585 END LOOP;
6586 END handle_JRAD_Id;
6587
6588 FUNCTION create_UIXML_Element_new(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
6589 p_parent_xml_node xmldom.DOMNode)
6590 RETURN xmldom.DOMNode IS
6591
6592 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
6593 l_ctrl_template_name CZ_UI_TEMPLATES.template_name%TYPE;
6594 l_doc xmldom.DOMDocument;
6595 l_anchor_doc xmldom.DOMDocument;
6596 l_subtree_doc xmldom.DOMDocument;
6597 l_xml_root_node xmldom.DOMNode;
6598 l_new_xml_root_node xmldom.DOMNode;
6599 l_out_xml_node xmldom.DOMNode;
6600 l_xml_table_node xmldom.DOMNode;
6601 l_new_xml_table_node xmldom.DOMNode;
6602 l_xml_anchor_node xmldom.DOMNode;
6603 l_new_xml_anchor_node xmldom.DOMNode;
6604 l_xml_node xmldom.DOMNode;
6605 l_xml_tabuicontent_node xmldom.DOMNode;
6606 l_ui_contents_xml_node xmldom.DOMNode;
6607 l_prev_node xmldom.DOMNode;
6608 l_next_node xmldom.DOMNode;
6609 l_prev_node_parent xmldom.DOMNode;
6610 l_next_node_parent xmldom.DOMNode;
6611 l_prev_node_parent_ui_cnt xmldom.DOMNode;
6612 l_next_node_parent_ui_cnt xmldom.DOMNode;
6613 l_grand_parent xmldom.DOMNode;
6614 l_next_sibling_of_parent xmldom.DOMNode;
6615
6616 l_curr_parent_xml_node xmldom.DOMNode;
6617 l_xml_node_name VARCHAR2(255);
6618 l_new_attribute_value VARCHAR2(255);
6619
6620 l_child_nodes_tbl xmldom.DOMNodeList;
6621 l_attribute_value VARCHAR2(4000);
6622 l_attribute_source VARCHAR2(4000);
6623 l_user_attribute VARCHAR2(4000);
6624 l_user_attribute4 VARCHAR2(4000);
6625 l_prev_element_id VARCHAR2(255);
6626 l_next_element_id VARCHAR2(255);
6627 l_jrad_doc VARCHAR2(255);
6628 l_ancestor_node VARCHAR2(255);
6629 l_hgrid_element_id VARCHAR2(255);
6630 l_old_switcher_xml_id VARCHAR2(255);
6631 l_prev_element_template_id NUMBER;
6632 l_next_element_template_id NUMBER;
6633 l_prev_elt_lyt_ui_style VARCHAR2(1);
6634 l_next_elt_lyt_ui_style VARCHAR2(1);
6635 l_old_ui_element_id VARCHAR2(255);
6636 l_new_ui_element_id VARCHAR2(255);
6637 l_switcher_element_id VARCHAR2(255);
6638 l_user_attribute3_value VARCHAR2(4000);
6639 l_switcher_casename VARCHAR2(255);
6640 l_switcher_xml_id VARCHAR2(255);
6641 l_uicase_name VARCHAR2(255);
6642 l_length NUMBER;
6643 l_ui_action_id NUMBER;
6644 l_element_signature_id NUMBER;
6645 l_wrap_it BOOLEAN;
6646 l_drilldown_text_id NUMBER;
6647 l_wrap_with_links BOOLEAN := FALSE;
6648 l_template_is_used_by_ref BOOLEAN := TRUE;
6649
6650 BEGIN
6651 --DEBUG('asp:Create UI XML Element new started...');
6652 IF p_ui_node.ctrl_template_id IS NULL THEN
6653 RETURN l_xml_node;
6654 END IF;
6655
6656 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
6657
6658 --DEBUG('asp:Create_ui_xml_new ' || l_node.name || ', element_id ' || p_ui_node.element_id);
6659
6660 l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
6661
6662 BEGIN
6663 SELECT element_id, ctrl_template_id INTO l_prev_element_id, l_prev_element_template_id
6664 FROM CZ_UI_PAGE_ELEMENTS
6665 WHERE ui_def_id=p_ui_node.ui_def_id AND
6666 page_id = p_ui_node.page_id AND
6667 parent_element_id = p_ui_node.parent_element_id AND
6668 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6669 --jonatara:bug fix7307460
6670 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6671 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL ) AND
6672 seq_nbr = (SELECT max(seq_nbr)
6673 FROM CZ_UI_PAGE_ELEMENTS
6674 WHERE ui_def_id=p_ui_node.ui_def_id AND
6675 page_id = p_ui_node.page_id AND
6676 parent_element_id = p_ui_node.parent_element_id AND
6677 seq_nbr<p_ui_node.seq_nbr AND
6678 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
6679 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6680 ctrl_template_id IS NULL) AND
6681 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6682 AND rownum < 2;
6683
6684 EXCEPTION
6685 WHEN NO_DATA_FOUND THEN
6686 NULL;
6687 END;
6688
6689 BEGIN
6690
6691 SELECT element_id, ctrl_template_id INTO l_next_element_id, l_next_element_template_id
6692 FROM CZ_UI_PAGE_ELEMENTS
6693 WHERE ui_def_id=p_ui_node.ui_def_id AND
6694 page_id = p_ui_node.page_id AND
6695 parent_element_id = p_ui_node.parent_element_id AND
6696 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE) AND
6697 --jonatara:bug fix7307460
6698 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND ctrl_template_id IS NULL) AND
6699 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL) AND
6700 seq_nbr = ( SELECT min(seq_nbr)
6701 FROM CZ_UI_PAGE_ELEMENTS
6702 WHERE ui_def_id=p_ui_node.ui_def_id AND
6703 page_id = p_ui_node.page_id AND
6704 parent_element_id = p_ui_node.parent_element_id AND
6705 seq_nbr>p_ui_node.seq_nbr AND
6706 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG, G_MARK_TO_DELETE, G_MARK_TO_ADD, G_MARK_TO_MOVE) AND
6707 NOT (element_type = G_UI_DRILLDOWN_NODE_TYPE AND
6708 ctrl_template_id IS NULL) AND
6709 NOT (element_signature_id IS NULL AND ctrl_template_id IS NULL))
6710 AND rownum < 2;
6711
6712
6713 EXCEPTION
6714 WHEN NO_DATA_FOUND THEN
6715 NULL;
6716 END;
6717
6718
6719 -- Now lets get the new element ready for insertion. Once the new node
6720 -- is ready, we will insert it int he appropriate place
6721
6722 --
6723 -- drilldowns will be handled by special way ( bug #3271034 )
6724 --
6725 IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
6726 G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
6727 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6728 l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
6729 ELSE
6730 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
6731 END IF;
6732 ELSE
6733 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
6734 END IF;
6735
6736 --
6737 -- parse document(template) which is going to be nested element
6738 --
6739 l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
6740
6741 IF xmldom.isNull(l_subtree_doc) THEN
6742 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
6743 p_token_name => 'UI_TEMPLATE',
6744 p_token_value => l_ctrl_template_name,
6745 p_fatal_error => TRUE);
6746
6747 RAISE WRONG_UI_TEMPLATE;
6748 END IF;
6749
6750 --
6751 -- get subdocument's root node
6752 --
6753 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
6754
6755 --
6756 -- remove common attributes of container and subtree
6757 --
6758 remove_TopLevel_Attributes(l_xml_root_node);
6759
6760 IF l_template_is_used_by_ref THEN
6761 l_element_signature_id := 6011;
6762 ELSE
6763 l_element_signature_id := p_ui_node.element_signature_id;
6764 END IF;
6765
6766
6767 --
6768 -- set Attributes for this subtree = Template
6769 --
6770 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
6771 p_ui_node => p_ui_node,
6772 p_element_signature_id => l_element_signature_id);
6773
6774 --
6775 -- set a special attribute "blockSize" if it is Table control
6776 --
6777 /* commented out according to request from 8/12/2004
6778 IF xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
6779 set_Attribute(l_xml_root_node,
6780 'blockSize',
6781 TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
6782 END IF;
6783 */
6784
6785 --DEBUG('Here 7');
6786 IF l_template_is_used_by_ref THEN
6787
6788 --
6789 -- returns cloned DOM subtree
6790 --
6791 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
6792 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
6793
6794 --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table');
6795 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6796 --
6797 -- remove non user attributes from top tag
6798 --
6799 remove_Non_User_Attributes(l_new_xml_root_node);
6800
6801 --
6802 -- set "extends" attribute
6803 --
6804 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
6805
6806 --
6807 -- remove content of template subtree
6808 --
6809 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
6810
6811 --
6812 -- we need to get length of array of child nodes
6813 -- to go through the array in loop
6814 --
6815 l_length := xmldom.getLength(l_child_nodes_tbl);
6816 FOR k IN 0..l_length-1
6817 LOOP
6818 --
6819 -- get next child DOM node
6820 --
6821 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
6822 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
6823 END LOOP;
6824
6825 ELSE -- use UI Template by Copy
6826
6827 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
6828
6829 l_length := xmldom.getLength(l_child_nodes_tbl);
6830 IF (l_length > 0) THEN
6831 FOR k IN 0..l_length-1
6832 LOOP
6833 --
6834 -- get next child DOM node
6835 --
6836 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
6837
6838 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
6839
6840 IF k > 0 THEN
6841 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
6842
6843 l_xml_node_name := xmldom.getNodeName(l_xml_node);
6844
6845 IF l_attribute_value IS NOT NULL THEN
6846 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
6847 l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
6848 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
6849 END IF;
6850
6851 l_ancestor_node := get_Attribute_Value(l_xml_node,
6852 'ancestorNode');
6853 IF l_ancestor_node IS NOT NULL THEN
6854
6855 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
6856 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
6857
6858 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
6859 IF NOT(xmldom.IsNull(l_xml_node)) THEN
6860 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
6861
6862 set_Attribute(l_xml_node,
6863 'ancestorNode',
6864 l_ancestor_node);
6865 END IF;
6866 END IF;
6867
6868 --
6869 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
6870 --
6871 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
6872 l_old_switcher_xml_id := l_attribute_value;
6873 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
6874 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
6875 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
6876 l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
6877 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
6878 p_cz_attribute_value => l_switcher_casename,
6879 px_xml_attribute_value => l_user_attribute3_value);
6880
6881 set_Attribute(l_xml_node,
6882 G_USER_ATTRIBUTE3_NAME,
6883 l_user_attribute3_value);
6884 END IF;
6885
6886 --
6887 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
6888 --
6889 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
6890 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
6891 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
6892 set_Attribute(xmldom.makeElement(l_xml_node),
6893 'name',
6894 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
6895 handle_UI_CASE_Id(l_xml_node);
6896 END IF;
6897
6898 --
6899 -- if current tag is <oa:stackLayout>
6900 -- then replace old id with new one
6901 --
6902 IF (l_xml_node_name='oa:stackLayout' AND
6903 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
6904 set_Attribute(xmldom.makeElement(l_xml_node),
6905 G_ID_ATTRIBUTE,
6906 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
6907 END IF;
6908
6909 IF l_attribute_value IS NOT NULL THEN
6910 --
6911 -- create a new copies for corresponding entities ( captions, rules ,... )
6912 --
6913 copy_Node_Related_Entities(p_ui_def_id => p_ui_node.ui_def_id,
6914 p_ui_page_id => p_ui_node.page_id,
6915 p_xml_node => l_xml_node);
6916 END IF;
6917
6918 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
6919 IF attribute_Value(l_xml_node, 'source') IS NULL AND
6920 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
6921 set_Attribute(l_xml_node,
6922 'source',
6923 g_UI_Context.DRILLDOWN_IMAGE_URL);
6924 END IF;
6925
6926 l_user_attribute := get_Attribute_Value(l_xml_node,
6927 G_USER_ATTRIBUTE3_NAME);
6928
6929 IF l_user_attribute IS NOT NULL THEN
6930
6931 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
6932
6933 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
6934 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
6935 px_xml_attribute_value => l_user_attribute);
6936
6937 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
6938 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
6939 px_xml_attribute_value => l_user_attribute);
6940 ELSE
6941 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
6942
6943 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
6944 g_UI_Context.ui_def_id,
6945 p_ui_node.page_id, p_ui_node.element_id);
6946
6947 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
6948 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
6949 px_xml_attribute_value => l_user_attribute);
6950
6951 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
6952 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
6953 px_xml_attribute_value => l_user_attribute);
6954
6955 END IF;
6956 END IF; -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
6957
6958 BEGIN
6959 l_ui_action_id := get_UI_Action_Id(p_ui_node);
6960 EXCEPTION
6961 WHEN OTHERS THEN
6962 NULL;
6963 END;
6964
6965 IF l_ui_action_id IS NOT NULL THEN
6966
6967 set_User_Attribute(p_cz_attribute_name => 'actionId',
6968 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
6969 px_xml_attribute_value => l_user_attribute);
6970
6971 END IF;
6972
6973 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
6974
6975 END IF; -- end of IF l_user_attribute IS NOT NULL
6976
6977 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
6978
6979 --++++++ add template references ++++++
6980 add_Extends_Refs(p_xml_node => l_xml_node,
6981 p_ui_node => p_ui_node);
6982
6983 END IF; -- end of IF k > 0 THEN
6984 END LOOP;
6985 END IF;
6986
6987 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
6988 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
6989
6990 --DEBUG('asp:Adding ' || p_ui_node.element_id || ' to table 2');
6991 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
6992 END IF;
6993
6994 -- The new element is now ready. It is
6995 -- l_new_xml_root_node, the root of the subtree to be added
6996 -- We need to add this root node to an appropriate location
6997 -- int the XML DOM.
6998
6999
7000 -- we have to decide if we want to add this new element
7001 -- after the prev element, before the next element or as the
7002 -- last element of the given parent region
7003
7004 IF l_prev_element_id IS NOT NULL THEN
7005 l_prev_node := g_dom_elements_tbl(TO_NUMBER(l_prev_element_id));
7006 l_prev_node_parent_ui_cnt := xmldom.getParentNode(l_prev_node);
7007 l_prev_node_parent := xmldom.getParentNode(l_prev_node_parent_ui_cnt);
7008 BEGIN
7009 SELECT layout_ui_style INTO l_prev_elt_lyt_ui_style
7010 FROM CZ_UI_TEMPLATES
7011 WHERE template_id = l_prev_element_template_id
7012 AND ui_def_id = 0
7013 AND deleted_flag = G_NO_FLAG;
7014
7015 EXCEPTION
7016 WHEN NO_DATA_FOUND THEN
7017 NULL;
7018 END;
7019 END IF;
7020
7021 IF l_next_element_id IS NOT NULL THEN
7022 --DEBUG('Here 8.11 ' || l_next_element_id);
7023 IF g_dom_elements_tbl.EXISTS(TO_NUMBER(l_next_element_id)) THEN
7024 l_next_node := g_dom_elements_tbl(TO_NUMBER(l_next_element_id));
7025 --DEBUG('Here 8.12');
7026 l_next_node_parent_ui_cnt := xmldom.getParentNode(l_next_node);
7027 --DEBUG('Here 8.13');
7028 l_next_node_parent := xmldom.getParentNode(l_next_node_parent_ui_cnt);
7029 --DEBUG('Here 8.14');
7030 BEGIN
7031 SELECT layout_ui_style INTO l_next_elt_lyt_ui_style
7032 FROM CZ_UI_TEMPLATES
7033 WHERE template_id = l_next_element_template_id
7034 AND ui_def_id = 0
7035 AND deleted_flag = G_NO_FLAG;
7036
7037 EXCEPTION
7038 WHEN NO_DATA_FOUND THEN
7039 NULL;
7040 END;
7041 ELSE
7042 l_next_element_id := NULL;
7043 END IF;
7044 END IF;
7045
7046 --DEBUG('Here 9' || l_node.detailed_type_id);
7047 IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7048 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7049 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7050 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7051 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7052 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7053 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7054 CZ_TYPES.UTEXT_FEATURE_TYPEID,
7055 CZ_TYPES.UTOTAL_TYPEID,
7056 CZ_TYPES.URESOURCE_TYPEID) AND
7057 NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7058
7059 --DEBUG('asp:Wrap it 1 ' || l_node.name);
7060 l_wrap_it := TRUE;
7061
7062 ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7063 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7064
7065 IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE OR
7066 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7067 l_wrap_it := FALSE;
7068
7069 ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7070 l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7071 l_wrap_it := TRUE;
7072 ELSE
7073 l_wrap_it := FALSE;
7074 END IF;
7075
7076 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7077 g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7078 l_wrap_with_links := TRUE;
7079 END IF;
7080
7081 ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7082 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7083 CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7084 l_wrap_it := FALSE;
7085 END IF;
7086
7087 IF l_prev_element_id IS NOT NULL
7088 OR l_next_element_id IS NOT NULL THEN
7089 IF l_wrap_it THEN
7090 IF l_prev_element_id IS NOT NULL AND
7091 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7092 l_next_node := xmldom.getNextSibling(l_prev_node);
7093 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7094 ELSIF l_next_element_id IS NOT NULL AND
7095 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7096 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7097 ELSE
7098 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7099 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7100 IF l_prev_element_id IS NOT NULL THEN
7101 l_next_node := xmldom.getNextSibling(l_prev_node);
7102 l_xml_table_node := insert_before(l_prev_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7103 ELSIF l_next_element_id IS NOT NULL THEN
7104 l_xml_table_node := insert_before(l_next_node_parent_ui_cnt, l_xml_table_node, l_next_node);
7105 ELSE
7106 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7107 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7108 END IF;
7109 END IF;
7110 ELSE -- new element is not LABEL_DATA_PAIR
7111
7112 IF l_prev_element_id IS NOT NULL AND l_next_element_id IS NOT NULL AND
7113 NVL(l_prev_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE AND
7114 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) = G_LABEL_PAIR_LAYOUT_STYLE THEN
7115
7116
7117 IF get_Attribute_Value(l_prev_node_parent, G_ID_ATTRIBUTE) = get_Attribute_Value(l_next_node_parent, G_ID_ATTRIBUTE) THEN
7118 IF xmldom.getNodeName(l_prev_node_parent) = 'oa:tableLayout' THEN
7119 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7120 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7121 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7122 l_xml_table_node := insert_before(l_grand_parent, l_xml_table_node, l_next_sibling_of_parent);
7123 l_next_node := xmldom.removeChild(l_prev_node_parent_ui_cnt, l_next_node);
7124 l_next_node := xmldom.appendChild(l_xml_tabuicontent_node, l_next_node);
7125 l_next_node := l_xml_table_node;
7126 END IF;
7127 l_next_node := xmldom.insertBefore(l_grand_parent, l_new_xml_root_node, l_next_node);
7128 ELSE
7129 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7130 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7131 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7132 END IF;
7133 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
7134 l_next_node := xmldom.getNextSibling(l_prev_node);
7135 l_new_xml_root_node := insert_before(l_prev_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7136 ELSIF l_next_element_id IS NOT NULL AND
7137 NVL(l_next_elt_lyt_ui_style, G_OTHER_LAYOUT_STYLE) <> G_LABEL_PAIR_LAYOUT_STYLE THEN
7138 l_new_xml_root_node := insert_before(l_next_node_parent_ui_cnt, l_new_xml_root_node, l_next_node);
7139 ELSIF l_prev_element_id IS NOT NULL THEN
7140 l_grand_parent := xmldom.getParentNode(l_prev_node_parent);
7141 l_next_sibling_of_parent := xmldom.getNextSibling(l_prev_node_parent);
7142 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_sibling_of_parent);
7143 ELSE
7144 l_grand_parent := xmldom.getParentNode(l_next_node_parent);
7145 l_new_xml_root_node := insert_before(l_grand_parent, l_new_xml_root_node, l_next_node_parent);
7146 END IF;
7147 END IF;
7148 ELSE
7149 -- If neither prev_element and next_element is found
7150 -- Insert at the end
7151 --DEBUG('asp:Append at the end');
7152
7153 IF l_wrap_it THEN
7154 --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(p_parent_xml_node));
7155 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7156 --DEBUG('Append at the end. Wrapping ' || xmldom.getNodeName(l_ui_contents_xml_node));
7157 create_wrapper_table_layout(l_xml_table_node, l_xml_tabuicontent_node, p_parent_xml_node);
7158 l_xml_table_node := xmldom.appendChild(l_ui_contents_xml_node, l_xml_table_node);
7159 l_new_xml_root_node := xmldom.appendChild(l_xml_tabuicontent_node, l_new_xml_root_node);
7160 ELSE
7161 --DEBUG('Append at the end. Not wrapping');
7162 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7163 l_new_xml_root_node := xmldom.appendChild(l_ui_contents_xml_node, l_new_xml_root_node);
7164 END IF;
7165 END IF;
7166
7167 RETURN l_new_xml_root_node;
7168
7169 END create_UIXML_Element_new;
7170
7171 --
7172 -- create new XML JRAD element
7173 --
7174 FUNCTION create_UIXML_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7175 p_parent_xml_node xmldom.DOMNode)
7176 RETURN xmldom.DOMNode IS
7177
7178 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7179 l_ctrl_template_name CZ_UI_TEMPLATES.template_name%TYPE;
7180 l_doc xmldom.DOMDocument;
7181 l_anchor_doc xmldom.DOMDocument;
7182 l_subtree_doc xmldom.DOMDocument;
7183 l_xml_root_node xmldom.DOMNode;
7184 l_new_xml_root_node xmldom.DOMNode;
7185 l_out_xml_node xmldom.DOMNode;
7186 l_xml_table_node xmldom.DOMNode;
7187 l_new_xml_table_node xmldom.DOMNode;
7188 l_xml_anchor_node xmldom.DOMNode;
7189 l_new_xml_anchor_node xmldom.DOMNode;
7190 l_xml_node xmldom.DOMNode;
7191 l_xml_tabuicontent_node xmldom.DOMNode;
7192 l_ui_contents_xml_node xmldom.DOMNode;
7193
7194 l_curr_parent_xml_node xmldom.DOMNode;
7195 l_xml_node_name VARCHAR2(255);
7196 l_new_attribute_value VARCHAR2(255);
7197
7198 l_child_nodes_tbl xmldom.DOMNodeList;
7199 l_attribute_value VARCHAR2(4000);
7200 l_attribute_source VARCHAR2(4000);
7201 l_user_attribute VARCHAR2(4000);
7202 l_user_attribute4 VARCHAR2(4000);
7203 l_jrad_doc VARCHAR2(255);
7204 l_ancestor_node VARCHAR2(255);
7205 l_hgrid_element_id VARCHAR2(255);
7206 l_prev_element_id VARCHAR2(255);
7207 l_old_ui_element_id VARCHAR2(255);
7208 l_new_ui_element_id VARCHAR2(255);
7209 l_switcher_element_id VARCHAR2(255);
7210 l_user_attribute3_value VARCHAR2(4000);
7211 l_switcher_casename VARCHAR2(255);
7212 l_old_switcher_xml_id VARCHAR2(255);
7213 l_switcher_xml_id VARCHAR2(255);
7214 l_uicase_name VARCHAR2(255);
7215 l_length NUMBER;
7216 l_ui_action_id NUMBER;
7217 l_element_signature_id NUMBER;
7218 l_non_bom_content BOOLEAN;
7219 l_wrap_it BOOLEAN;
7220 l_drilldown_text_id NUMBER;
7221 l_wrap_with_links BOOLEAN := FALSE;
7222 l_template_is_used_by_ref BOOLEAN := TRUE;
7223
7224 BEGIN
7225
7226 IF g_using_new_UI_refresh THEN
7227 RETURN create_UIXML_Element_new(p_ui_node, p_parent_xml_node);
7228 END IF;
7229
7230 IF p_ui_node.ctrl_template_id IS NULL THEN
7231 RETURN l_xml_node;
7232 END IF;
7233
7234 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7235
7236 l_template_is_used_by_ref := is_Used_By_Reference(l_node.detailed_type_id,p_ui_node.ctrl_template_id);
7237
7238 BEGIN
7239 SELECT element_id INTO l_prev_element_id
7240 FROM CZ_UI_PAGE_ELEMENTS
7241 WHERE ui_def_id=p_ui_node.ui_def_id AND
7242 parent_persistent_node_id=p_ui_node.parent_persistent_node_id AND
7243 seq_nbr=p_ui_node.seq_nbr-1 AND
7244 deleted_flag<>G_YES_FLAG;
7245
7246 l_xml_tabuicontent_node := find_Table_Of_XML_Node(p_parent_xml_node, l_prev_element_id);
7247
7248 EXCEPTION
7249 WHEN OTHERS THEN
7250 NULL;
7251 END;
7252
7253 --
7254 -- drilldowns will be handled by special way ( bug #3271034 )
7255 --
7256 IF p_ui_node.ctrl_template_id IN(G_DRILLDOWN_BUTTON_TEMPLATE_ID,G_DRILLDOWN_IMAGE_TEMPLATE_ID,
7257 G_DRILLDOWN_LABEL_TEMPLATE_ID) THEN
7258 IF g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7259 l_ctrl_template_name := get_JRAD_Name(p_template_id => G_DRILLDOWN_IMAGE_TEMPLATE_ID);
7260 ELSE
7261 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7262 END IF;
7263 ELSE
7264 l_ctrl_template_name := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7265 END IF;
7266
7267 IF l_node.detailed_type_id IN(CZ_TYPES.UNON_COUNT_FEATURE_TYPEID,
7268 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7269 CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7270 CZ_TYPES.UMINMAX_FEATURE_TYPEID,
7271 CZ_TYPES.UINTEGER_FEATURE_TYPEID,
7272 CZ_TYPES.UDECIMAL_FEATURE_TYPEID,
7273 CZ_TYPES.UBOOLEAN_FEATURE_TYPEID,
7274 CZ_TYPES.UTEXT_FEATURE_TYPEID,
7275 CZ_TYPES.UTOTAL_TYPEID,
7276 CZ_TYPES.URESOURCE_TYPEID) AND
7277 NVL(l_node.layout_ui_style,G_LABEL_PAIR_LAYOUT_STYLE) IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) THEN
7278
7279 l_non_bom_content := TRUE;
7280 l_wrap_it := TRUE;
7281
7282 --
7283 -- add TableLayout
7284 --
7285 IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7286
7287 BEGIN
7288 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7289
7290 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7291
7292 remove_TopLevel_Attributes(l_xml_table_node);
7293
7294 --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7295 l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7296
7297 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7298 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7299
7300 l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7301
7302 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7303 'oa:flowLayout','oa:tableLayout') THEN
7304
7305 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7306 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7307 ELSE
7308 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7309 END IF;
7310
7311 EXCEPTION
7312 WHEN OTHERS THEN
7313 NULL;
7314 END;
7315 END IF;
7316
7317 --
7318 -- BOM part
7319 --
7320 ELSIF l_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
7321 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7322
7323 l_non_bom_content := TRUE;
7324
7325 IF NVL(l_node.layout_ui_style,G_TABLE_LAYOUT_STYLE) = G_TABLE_LAYOUT_STYLE OR
7326 l_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7327 l_wrap_it := FALSE;
7328
7329 ELSIF l_node.layout_ui_style IN(G_LABEL_PAIR_LAYOUT_STYLE,G_WRAPPED_LAYOUT_STYLE) AND
7330 l_node.detailed_type_id NOT IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
7331 --
7332 -- add TableLayout
7333 --
7334 IF xmldom.isNull(l_xml_tabuicontent_node) THEN
7335 BEGIN
7336 l_doc := parse_JRAD_Document(G_TABLELAYOUT_TEMPLATE);
7337
7338 l_xml_table_node :=xmldom.makeNode(xmldom.getDocumentElement(l_doc));
7339
7340 remove_TopLevel_Attributes(l_xml_table_node);
7341
7342 --l_new_xml_table_node := xmldom.cloneNode(l_xml_table_node,TRUE);
7343 l_new_xml_table_node := cloneNode(l_xml_table_node, p_parent_xml_node);
7344
7345 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_ID_ATTRIBUTE,get_Element_Id());
7346 set_Attribute(xmldom.makeElement(l_new_xml_table_node),G_USER_ATTRIBUTE5_NAME,'TABLELAYOUT_FOR_UI_GEN');
7347
7348 l_xml_tabuicontent_node := getUIContents(l_new_xml_table_node);
7349
7350 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7351 'oa:flowLayout','oa:tableLayout') THEN
7352
7353 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7354
7355 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,l_new_xml_table_node);
7356 ELSE
7357 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,l_new_xml_table_node);
7358 END IF;
7359 EXCEPTION
7360 WHEN OTHERS THEN
7361 DEBUG('create_UIXML_Element : '||SQLERRM);
7362 END;
7363 END IF;
7364 l_wrap_it := TRUE;
7365 ELSE
7366 l_wrap_it := FALSE;
7367 END IF;
7368
7369 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE) OR
7370 g_UI_Context.PAGIN_BOMOC IN(G_SINGLE_PG_TYPE,G_SUBSECTIONS_PG_TYPE) THEN
7371 l_wrap_with_links := TRUE;
7372 END IF;
7373
7374 ELSIF l_node.detailed_type_id IN(CZ_TYPES.UCOUNT_FEATURE01_TYPEID,
7375 CZ_TYPES.UCOUNT_FEATURE_TYPEID,
7376 CZ_TYPES.UMINMAX_FEATURE_TYPEID) THEN
7377 l_non_bom_content := FALSE;
7378 l_wrap_it := FALSE;
7379 ELSE
7380 l_non_bom_content := FALSE;
7381 END IF;
7382
7383 --
7384 -- parse document(template) which is going to be nested element
7385 --
7386 l_subtree_doc := parse_JRAD_Document(l_ctrl_template_name);
7387
7388 IF xmldom.isNull(l_subtree_doc) THEN
7389 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7390 p_token_name => 'UI_TEMPLATE',
7391 p_token_value => l_ctrl_template_name,
7392 p_fatal_error => TRUE);
7393
7394 RAISE WRONG_UI_TEMPLATE;
7395 END IF;
7396
7397 --
7398 -- get subdocument's root node
7399 --
7400 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7401
7402 IF l_template_is_used_by_ref=FALSE THEN
7403 handle_USER_ATTRIBUTE10(p_xml_root_node => l_xml_root_node,
7404 p_ui_def_id => p_ui_node.ui_def_id,
7405 p_ui_page_id => p_ui_node.page_id,
7406 p_ui_element_id => p_ui_node.element_id);
7407 END IF;
7408
7409 --
7410 -- remove common attributes of container and subtree
7411 --
7412 remove_TopLevel_Attributes(l_xml_root_node);
7413
7414 IF l_template_is_used_by_ref THEN
7415 l_element_signature_id := 6011;
7416 ELSE
7417 l_element_signature_id := p_ui_node.element_signature_id;
7418 END IF;
7419
7420 --
7421 -- set Attributes for this subtree = Template
7422 --
7423 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7424 p_ui_node => p_ui_node,
7425 p_element_signature_id => l_element_signature_id);
7426
7427 --
7428 -- set a special attribute "blockSize" if it is Table control
7429 --
7430 /* commented out according to request from 8/12/2004
7431 IF xmldom.getNodeName(l_xml_root_node) IN('oa:table') THEN
7432 set_Attribute(l_xml_root_node,
7433 'blockSize',
7434 TO_CHAR(g_UI_Context.ROWS_PER_TABLE));
7435 END IF;
7436 */
7437 IF l_template_is_used_by_ref THEN
7438
7439 --
7440 -- returns cloned DOM subtree
7441 --
7442 -- l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7443 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7444
7445 --
7446 -- remove non user attributes from top tag
7447 --
7448 remove_Non_User_Attributes(l_new_xml_root_node);
7449
7450 --
7451 -- set "extends" attribute
7452 --
7453 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_ctrl_template_name);
7454
7455 --
7456 -- remove content of template subtree
7457 --
7458 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7459
7460 --
7461 -- we need to get length of array of child nodes
7462 -- to go through the array in loop
7463 --
7464 l_length := xmldom.getLength(l_child_nodes_tbl);
7465 FOR k IN 0..l_length-1
7466 LOOP
7467 --
7468 -- get next child DOM node
7469 --
7470 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7471 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7472 END LOOP;
7473
7474 ELSE -- use UI Template by Copy
7475
7476 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
7477
7478 l_length := xmldom.getLength(l_child_nodes_tbl);
7479 IF (l_length > 0) THEN
7480 FOR k IN 0..l_length-1
7481 LOOP
7482 --
7483 -- get next child DOM node
7484 --
7485 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7486 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
7487
7488 IF k > 0 THEN
7489 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
7490
7491 l_xml_node_name := xmldom.getNodeName(l_xml_node);
7492
7493 IF l_attribute_value IS NOT NULL THEN
7494 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
7495 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
7496 END IF;
7497
7498 l_ancestor_node := get_Attribute_Value(l_xml_node,
7499 'ancestorNode');
7500 IF l_ancestor_node IS NOT NULL THEN
7501
7502 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
7503 WHERE page_id=p_ui_node.page_id AND ui_def_id=p_ui_node.ui_def_id;
7504
7505 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
7506 IF NOT(xmldom.IsNull(l_xml_node)) THEN
7507 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
7508
7509 set_Attribute(l_xml_node,
7510 'ancestorNode',
7511 l_ancestor_node);
7512 END IF;
7513 END IF;
7514
7515 --
7516 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
7517 --
7518 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
7519 l_old_switcher_xml_id := l_attribute_value;
7520 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
7521 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
7522 l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
7523 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
7524 p_cz_attribute_value => l_switcher_casename,
7525 px_xml_attribute_value => l_user_attribute3_value);
7526
7527 set_Attribute(l_xml_node,
7528 G_USER_ATTRIBUTE3_NAME,
7529 l_user_attribute3_value);
7530 END IF;
7531
7532 --
7533 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
7534 --
7535 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
7536 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
7537 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
7538 set_Attribute(xmldom.makeElement(l_xml_node),
7539 'name',
7540 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
7541 handle_UI_CASE_Id(l_xml_node);
7542 END IF;
7543
7544 --
7545 -- if current tag is <oa:stackLayout>
7546 -- then replace old id with new one
7547 --
7548 IF (l_xml_node_name='oa:stackLayout' AND
7549 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
7550 set_Attribute(xmldom.makeElement(l_xml_node),
7551 G_ID_ATTRIBUTE,
7552 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
7553 END IF;
7554
7555 IF l_attribute_value IS NOT NULL THEN
7556 --
7557 -- create a new copies for corresponding entities ( captions, rules ,... )
7558 --
7559 copy_Node_Related_Entities(p_ui_def_id => p_ui_node.ui_def_id,
7560 p_ui_page_id => p_ui_node.page_id,
7561 p_xml_node => l_xml_node);
7562 END IF;
7563
7564 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7565 IF attribute_Value(l_xml_node, 'source') IS NULL AND
7566 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7567 set_Attribute(l_xml_node,
7568 'source',
7569 g_UI_Context.DRILLDOWN_IMAGE_URL);
7570 END IF;
7571
7572 l_user_attribute := get_Attribute_Value(l_xml_node,
7573 G_USER_ATTRIBUTE3_NAME);
7574
7575 IF l_user_attribute IS NOT NULL THEN
7576
7577 IF p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7578
7579 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7580 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7581 px_xml_attribute_value => l_user_attribute);
7582
7583 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7584 p_cz_attribute_value => TO_CHAR(g_cx_names_tbl(TO_NUMBER(p_ui_node.element_id))),
7585 px_xml_attribute_value => l_user_attribute);
7586 ELSE
7587 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7588
7589 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7590 g_UI_Context.ui_def_id,
7591 p_ui_node.page_id, p_ui_node.element_id);
7592
7593 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7594 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7595 px_xml_attribute_value => l_user_attribute);
7596
7597 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7598 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7599 px_xml_attribute_value => l_user_attribute);
7600
7601 END IF;
7602 END IF; -- end of p_ui_node.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
7603
7604 BEGIN
7605 l_ui_action_id := get_UI_Action_Id(p_ui_node);
7606 EXCEPTION
7607 WHEN OTHERS THEN
7608 NULL;
7609 END;
7610
7611 IF l_ui_action_id IS NOT NULL THEN
7612
7613 set_User_Attribute(p_cz_attribute_name => 'actionId',
7614 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
7615 px_xml_attribute_value => l_user_attribute);
7616
7617 END IF;
7618
7619 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7620
7621 END IF; -- end of IF l_user_attribute IS NOT NULL
7622
7623 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID
7624
7625 --++++++ add template references ++++++
7626 add_Extends_Refs(p_xml_node => l_xml_node,
7627 p_ui_node => p_ui_node);
7628
7629 END IF; -- end of IF k > 0 THEN
7630 END LOOP;
7631 END IF;
7632
7633 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7634 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7635
7636 END IF;
7637
7638 IF l_wrap_it THEN
7639
7640 IF l_wrap_with_links THEN
7641
7642 BEGIN
7643 l_anchor_doc := parse_JRAD_Document(G_ANCHOR_TEMPLATE);
7644
7645 l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7646
7647 remove_TopLevel_Attributes(l_xml_anchor_node);
7648
7649 --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7650 l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7651
7652 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,get_Element_Id());
7653 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'ANCHOR_GENERATED_BY_UI_GEN');
7654
7655 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7656 l_new_xml_anchor_node);
7657
7658 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7659 l_new_xml_root_node);
7660
7661 EXCEPTION
7662 WHEN OTHERS THEN
7663 DEBUG('create_UIXML_Element() : '||SQLERRM);
7664 END;
7665
7666 ELSE -- don't wrap it with rowLayout+Link
7667
7668 l_out_xml_node := xmldom.appendChild(l_xml_tabuicontent_node,
7669 l_new_xml_root_node);
7670
7671 END IF;
7672
7673 RETURN l_out_xml_node;
7674
7675 ELSE -- don't wrap with TableLayout
7676
7677 IF l_wrap_with_links THEN
7678 BEGIN
7679 l_anchor_doc := parse_JRAD_Document(G_LINK_TEMPLATE);
7680
7681 l_xml_anchor_node :=xmldom.makeNode(xmldom.getDocumentElement(l_anchor_doc));
7682
7683 remove_TopLevel_Attributes(l_xml_anchor_node);
7684
7685 --l_new_xml_anchor_node := xmldom.cloneNode(l_xml_anchor_node,TRUE);
7686 l_new_xml_anchor_node := cloneNode(l_xml_anchor_node, p_parent_xml_node);
7687
7688 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_ID_ATTRIBUTE,
7689 '_czt'||to_char(p_ui_node.persistent_node_id)); -- fix for bug #4047136
7690 set_Attribute(xmldom.makeElement(l_new_xml_anchor_node),G_USER_ATTRIBUTE5_NAME,'LINK_GENERATED_BY_UI_GEN');
7691 EXCEPTION
7692 WHEN OTHERS THEN
7693 DEBUG('create_UIXML_Element() : '||SQLERRM);
7694 END;
7695 END IF;
7696
7697 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7698 'oa:flowLayout','oa:tableLayout') THEN
7699
7700
7701 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7702
7703 IF l_wrap_with_links THEN
7704 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7705 l_new_xml_anchor_node);
7706 END IF;
7707 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7708 l_new_xml_root_node);
7709 ELSE
7710
7711 IF l_wrap_with_links THEN
7712 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7713 l_new_xml_anchor_node);
7714 END IF;
7715
7716 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7717 l_new_xml_root_node);
7718 END IF;
7719 RETURN l_out_xml_node;
7720 END IF;
7721
7722 END create_UIXML_Element;
7723
7724 --
7725 -- add new XML region
7726 --
7727 FUNCTION create_UIXML_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7728 p_parent_xml_node xmldom.DOMNode)
7729 RETURN xmldom.DOMNode IS
7730
7731 l_subtree_doc xmldom.DOMDocument;
7732 l_xml_root_node xmldom.DOMNode;
7733 l_new_xml_root_node xmldom.DOMNode;
7734 l_out_xml_node xmldom.DOMNode;
7735 l_ui_contents_xml_node xmldom.DOMNode;
7736 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
7737
7738 BEGIN
7739
7740 l_jrad_doc := get_JRAD_Name(G_NSTD_CONTAINER_TEMPLATE_ID, G_GLOBAL_TEMPLATES_UI_DEF_ID);
7741
7742 --
7743 -- parse document(template) which is going to be nested element
7744 --
7745 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
7746
7747 IF xmldom.isNull(l_subtree_doc) THEN
7748 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7749 p_token_name => 'UI_TEMPLATE',
7750 p_token_value => l_jrad_doc,
7751 p_fatal_error => TRUE);
7752 RAISE WRONG_UI_TEMPLATE;
7753 END IF;
7754
7755 --
7756 -- get subdocument's root node
7757 --
7758 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7759
7760 --
7761 -- remove common attributes of container and subtree
7762 --
7763 remove_TopLevel_Attributes(l_xml_root_node);
7764
7765 --
7766 -- set Attributes for this subtree = Template
7767 --
7768 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7769 p_ui_node => p_ui_node);
7770
7771 --
7772 -- this is a requirement from cz runtime : controllerClass must be =NULL
7773 --
7774 set_Attribute(l_xml_root_node,'controllerClass','');
7775
7776 --
7777 -- returns cloned DOM subtree
7778 --
7779 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
7780 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7781
7782 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
7783
7784 IF xmldom.getNodeName(p_parent_xml_node) IN('oa:header','oa:stackLayout',
7785 'oa:flowLayout','oa:tableLayout','oa:rowLayout') THEN
7786
7787 l_ui_contents_xml_node := getUIContents(p_parent_xml_node);
7788 l_out_xml_node := xmldom.appendChild(l_ui_contents_xml_node,
7789 l_new_xml_root_node);
7790 ELSE
7791 l_out_xml_node := xmldom.appendChild(p_parent_xml_node,
7792 l_new_xml_root_node);
7793 END IF;
7794
7795 RETURN l_out_xml_node;
7796
7797 END create_UIXML_Region;
7798
7799 --
7800 -- replace XML JRAD element
7801 --
7802 FUNCTION replace_UIXML_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
7803 p_parent_xml_node xmldom.DOMNode,
7804 p_xml_node_to_replace xmldom.DOMNode)
7805 RETURN xmldom.DOMNode IS
7806
7807 l_subtree_doc xmldom.DOMDocument;
7808 l_xml_root_node xmldom.DOMNode;
7809 l_new_xml_root_node xmldom.DOMNode;
7810 l_out_xml_node xmldom.DOMNode;
7811 l_tabxml_uicontens_node xmldom.DOMNode;
7812 l_tabxml_node xmldom.DOMNode;
7813 l_xml_node xmldom.DOMNode;
7814 l_parent_xml_node xmldom.DOMNode;
7815 l_child_nodes_tbl xmldom.DOMNodeList;
7816 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
7817 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
7818 l_user_attribute4 VARCHAR2(4000);
7819 l_user_attribute VARCHAR2(4000);
7820 l_drilldown_text_id NUMBER;
7821 l_ui_action_id NUMBER;
7822 l_length NUMBER;
7823 l_use_by_reference BOOLEAN;
7824 l_curr_parent_xml_node xmldom.DOMNode;
7825 l_attribute_value VARCHAR2(32000);
7826 l_xml_node_name VARCHAR2(4000);
7827 l_old_switcher_xml_id VARCHAR2(4000);
7828 l_user_attribute3_value VARCHAR2(32000);
7829 l_switcher_casename VARCHAR2(4000);
7830 l_new_attribute_value VARCHAR2(32000);
7831 l_switcher_xml_id VARCHAR2(4000);
7832 l_uicase_name VARCHAR2(4000);
7833
7834
7835 BEGIN
7836
7837 l_node := get_Model_Node_By_Persist_Id(p_ui_node.persistent_node_id,g_UI_Context.devl_project_id);
7838
7839 IF p_ui_node.ctrl_template_id IS NULL AND p_ui_node.element_type=G_UI_DRILLDOWN_NODE_TYPE THEN
7840 BEGIN
7841 l_new_xml_root_node := xmldom.removeChild(p_parent_xml_node,p_xml_node_to_replace);
7842 EXCEPTION
7843 WHEN OTHERS THEN
7844 l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
7845 IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
7846 l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
7847 l_new_xml_root_node := xmldom.removeChild(l_tabxml_uicontens_node,p_xml_node_to_replace);
7848 END IF;
7849 END;
7850 RETURN p_parent_xml_node;
7851 END IF;
7852
7853 l_use_by_reference := is_Used_By_Reference(p_detailed_type_id => l_node.detailed_type_id,
7854 p_ctrl_template_id => p_ui_node.ctrl_template_id);
7855
7856 l_user_attribute4 := get_Attribute_Value(p_xml_node_to_replace, G_USER_ATTRIBUTE4_NAME);
7857 l_user_attribute := get_User_Attribute(l_user_attribute4, 'elementType');
7858
7859 IF l_user_attribute IS NOT NULL AND (NOT l_user_attribute = '6011') THEN
7860 l_use_by_reference := FALSE;
7861 END IF;
7862
7863 l_jrad_doc := get_JRAD_Name(p_template_id => p_ui_node.ctrl_template_id);
7864
7865 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
7866
7867 IF xmldom.isNull(l_subtree_doc) THEN
7868 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
7869 p_token_name => 'UI_TEMPLATE',
7870 p_token_value => l_jrad_doc,
7871 p_fatal_error => TRUE);
7872 RAISE WRONG_UI_TEMPLATE;
7873 END IF;
7874
7875 --
7876 -- get subdocument's root node
7877 --
7878 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
7879
7880 --
7881 -- remove common attributes of container and subtree
7882 --
7883 remove_TopLevel_Attributes(l_xml_root_node);
7884
7885 --
7886 -- set Attributes for this subtree = Template
7887 --
7888 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
7889 p_ui_node => p_ui_node);
7890
7891 IF l_use_by_reference THEN
7892 --
7893 -- returns cloned DOM subtree
7894 --
7895 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node,TRUE);
7896 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
7897
7898
7899 --
7900 -- set "extends" attribute
7901 --
7902 xmldom.setAttribute(xmldom.makeElement(l_new_xml_root_node),'extends',l_jrad_doc);
7903
7904 l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
7905 G_USER_ATTRIBUTE4_NAME);
7906 IF l_user_attribute4 IS NOT NULL THEN
7907 set_User_Attribute(p_cz_attribute_name => 'name',
7908 p_cz_attribute_value => p_ui_node.name,
7909 px_xml_attribute_value => l_user_attribute4);
7910 IF p_ui_node.element_signature_id IS NOT NULL THEN
7911 set_User_Attribute(p_cz_attribute_name => 'elementType',
7912 p_cz_attribute_value => '6011',
7913 px_xml_attribute_value => l_user_attribute4);
7914
7915 END IF;
7916 set_Attribute(l_new_xml_root_node,
7917 G_USER_ATTRIBUTE4_NAME,
7918 l_user_attribute4);
7919
7920 END IF;
7921
7922 --
7923 -- remove content of template subtree
7924 --
7925 l_child_nodes_tbl:=xmldom.getChildNodes(l_new_xml_root_node);
7926
7927 --
7928 -- we need to get length of array of child nodes
7929 -- to go through the array in loop
7930 --
7931 l_length := xmldom.getLength(l_child_nodes_tbl);
7932 FOR k IN 0..l_length-1
7933 LOOP
7934 --
7935 -- get next child DOM node
7936 --
7937 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7938 l_out_xml_node:=xmldom.removeChild(l_new_xml_root_node,l_xml_node);
7939 END LOOP;
7940
7941 ELSE -- use by Copy
7942 l_child_nodes_tbl := xmldom.getElementsByTagName(xmldom.makeElement(l_xml_root_node), '*');
7943 l_length := xmldom.getLength(l_child_nodes_tbl);
7944 IF (l_length > 0) THEN
7945 FOR k IN 0..l_length-1
7946 LOOP
7947 --
7948 -- get next child DOM node
7949 --
7950 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
7951
7952 IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
7953
7954 IF attribute_Value(l_xml_node, 'source') IS NULL AND
7955 g_UI_Context.DRILLDOWN_IMAGE_URL IS NOT NULL THEN
7956 set_Attribute(l_xml_node,
7957 'source',
7958 g_UI_Context.DRILLDOWN_IMAGE_URL);
7959 END IF;
7960
7961 l_user_attribute := get_Attribute_Value(l_xml_node,
7962 G_USER_ATTRIBUTE3_NAME);
7963
7964 IF l_user_attribute IS NOT NULL THEN
7965
7966 IF g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID IS NOT NULL THEN
7967
7968 l_drilldown_text_id := copy_Intl_Text(g_UI_Context.DRILLDOWN_CONTROL_TEXT_ID,
7969 g_UI_Context.ui_def_id,
7970 p_ui_node.page_id, p_ui_node.element_id);
7971
7972 set_User_Attribute(p_cz_attribute_name => 'captionIntlTextId',
7973 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7974 px_xml_attribute_value => l_user_attribute);
7975
7976 set_User_Attribute(p_cz_attribute_name => 'rolloverIntlTextId',
7977 p_cz_attribute_value => TO_CHAR(l_drilldown_text_id),
7978 px_xml_attribute_value => l_user_attribute);
7979
7980 END IF;
7981
7982
7983 BEGIN
7984 l_ui_action_id := get_UI_Action_Id(p_ui_node);
7985 EXCEPTION
7986 WHEN OTHERS THEN
7987 NULL;
7988 END;
7989
7990 IF l_ui_action_id IS NOT NULL THEN
7991
7992 set_User_Attribute(p_cz_attribute_name => 'actionId',
7993 p_cz_attribute_value => TO_CHAR(l_ui_action_id),
7994 px_xml_attribute_value => l_user_attribute);
7995
7996 END IF;
7997
7998 set_Attribute(l_xml_node,G_USER_ATTRIBUTE3_NAME,l_user_attribute);
7999
8000 END IF; -- end of IF l_user_attribute IS NOT NULL
8001 END IF; -- end of IF p_ui_node.ctrl_template_id=g_DRILLDOWN_TEMPLATE_ID THEN
8002
8003 IF k > 0 THEN
8004
8005 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
8006
8007 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
8008
8009 l_xml_node_name := xmldom.getNodeName(l_xml_node);
8010
8011 IF l_attribute_value IS NOT NULL THEN
8012 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,p_ui_node.element_id);
8013 l_new_attribute_value := REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'), '_czc','_czn');
8014 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE, l_new_attribute_value);
8015 END IF;
8016
8017 --
8018 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
8019 --
8020 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
8021 l_old_switcher_xml_id := l_attribute_value;
8022 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
8023 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
8024 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value);
8025 l_switcher_casename := REPLACE(REPLACE(l_switcher_casename,'_czt','_czn'), '_czc','_czn');
8026 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
8027 p_cz_attribute_value => l_switcher_casename,
8028 px_xml_attribute_value => l_user_attribute3_value);
8029
8030 set_Attribute(l_xml_node,
8031 G_USER_ATTRIBUTE3_NAME,
8032 l_user_attribute3_value);
8033 END IF;
8034
8035 --
8036 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
8037 --
8038 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
8039 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
8040 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
8041 set_Attribute(xmldom.makeElement(l_xml_node),
8042 'name',
8043 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'), '_czc', '_czn'));
8044 handle_UI_CASE_Id(l_xml_node);
8045 END IF;
8046
8047 --
8048 -- if current tag is <oa:stackLayout>
8049 -- then replace old id with new one
8050 --
8051 IF (l_xml_node_name='oa:stackLayout' AND
8052 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
8053 set_Attribute(xmldom.makeElement(l_xml_node),
8054 G_ID_ATTRIBUTE,
8055 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
8056 END IF;
8057 END IF; -- end of IF k > 0 THEN
8058
8059 END LOOP;
8060 END IF; -- end of IF (l_length > 0) THEN
8061
8062 --l_new_xml_root_node := xmldom.cloneNode(l_xml_root_node, TRUE);
8063 l_new_xml_root_node := cloneNode(l_xml_root_node, p_parent_xml_node);
8064
8065
8066 l_user_attribute4 := get_Attribute_Value(l_new_xml_root_node,
8067 G_USER_ATTRIBUTE4_NAME);
8068 IF l_user_attribute4 IS NOT NULL THEN
8069
8070 set_User_Attribute(p_cz_attribute_name => 'name',
8071 p_cz_attribute_value => p_ui_node.name,
8072 px_xml_attribute_value => l_user_attribute4);
8073
8074 IF p_ui_node.element_signature_id IS NOT NULL THEN
8075 set_User_Attribute(p_cz_attribute_name => 'elementType',
8076 p_cz_attribute_value => TO_CHAR(p_ui_node.element_signature_id),
8077 px_xml_attribute_value => l_user_attribute4);
8078
8079 END IF;
8080
8081 set_Attribute(l_new_xml_root_node,
8082 G_USER_ATTRIBUTE4_NAME,
8083 l_user_attribute4);
8084
8085 END IF;
8086
8087 END IF; -- end of use by Copy
8088
8089 l_parent_xml_node := xmldom.getParentNode(p_xml_node_to_replace);
8090 IF g_using_new_UI_refresh THEN
8091 g_dom_elements_tbl.DELETE(TO_NUMBER(p_ui_node.element_id));
8092 g_dom_elements_tbl(TO_NUMBER(p_ui_node.element_id)) := l_new_xml_root_node;
8093 l_new_xml_root_node := xmldom.replaceChild(l_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8094 ELSE
8095 BEGIN
8096 l_new_xml_root_node := xmldom.replaceChild(p_parent_xml_node,l_new_xml_root_node, p_xml_node_to_replace);
8097 EXCEPTION
8098 WHEN OTHERS THEN
8099 l_tabxml_node := find_Table_Of_XML_Node(p_parent_xml_node, p_ui_node.element_id);
8100 IF NOT(xmldom.IsNull(l_tabxml_node)) THEN
8101 l_tabxml_uicontens_node := getUIContents(l_tabxml_node);
8102 l_new_xml_root_node := xmldom.replaceChild(l_tabxml_uicontens_node, l_new_xml_root_node, p_xml_node_to_replace);
8103 END IF;
8104 END;
8105 END IF;
8106 RETURN p_parent_xml_node;
8107
8108 EXCEPTION
8109 WHEN OTHERS THEN
8110 DEBUG('replace_UIXML_Element() : '||SQLERRM);
8111 RETURN p_parent_xml_node;
8112 END replace_UIXML_Element;
8113
8114
8115 PROCEDURE refresh_Model_Path(p_ui_element_id VARCHAR2,
8116 p_ui_page_id NUMBER,
8117 p_persistent_node_id NUMBER,
8118 p_xml_node_to_refresh xmldom.DOMNode) IS
8119
8120 l_new_model_path VARCHAR2(32000);
8121 l_current_model_path VARCHAR2(32000);
8122 l_user_attribute3 VARCHAR2(32000);
8123 l_ui_node_expl_id NUMBER;
8124 l_ui_action_id NUMBER;
8125
8126 BEGIN
8127
8128 IF p_persistent_node_id IS NOT NULL THEN
8129 --
8130 -- get value of "user:attribute1"
8131 --
8132 l_current_model_path := get_Attribute_Value(p_xml_node_to_refresh,
8133 G_USER_ATTRIBUTE1_NAME);
8134
8135 IF l_current_model_path IS NOT NULL THEN
8136
8137 SELECT model_ref_expl_id INTO l_ui_node_expl_id FROM CZ_UI_PAGE_ELEMENTS
8138 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_ui_page_id AND element_id=p_ui_element_id;
8139
8140 l_new_model_path := get_Runtime_Relative_Path(p_model_id => g_UI_Context.devl_project_id,
8141 p_persistent_node_id => p_persistent_node_id,
8142 p_page_id => p_ui_page_id,
8143 p_ui_node_expl_id => l_ui_node_expl_id);
8144
8145 IF l_new_model_path IS NOT NULL THEN
8146 --
8147 -- attribute1 is always used only for model_path
8148 --
8149 set_Attribute(p_xml_node_to_refresh,
8150 G_USER_ATTRIBUTE1_NAME,
8151 'model_path='||l_new_model_path);
8152 END IF;
8153
8154 END IF; -- end of IF l_current_model_path IS NOT NULL
8155 END IF; -- end of IF p_persistent_node_id IS NOT NULL
8156
8157 l_user_attribute3 := get_Attribute_Value(p_xml_node_to_refresh,
8158 G_USER_ATTRIBUTE3_NAME);
8159
8160 IF l_user_attribute3 IS NOT NULL THEN
8161
8162 BEGIN
8163 l_ui_action_id := TO_NUMBER(get_User_Attribute(l_user_attribute3,'actionId'));
8164 EXCEPTION
8165 WHEN OTHERS THEN
8166 l_ui_action_id := NULL;
8167 END;
8168
8169 IF l_ui_action_id IS NOT NULL THEN
8170 FOR i IN(SELECT target_persistent_node_id,target_expl_node_id FROM CZ_UI_ACTIONS
8171 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8172 source_page_id=p_ui_page_id AND
8173 element_id=p_ui_element_id AND
8174 target_node_path IS NOT NULL AND
8175 deleted_flag=G_NO_FLAG)
8176 LOOP
8177 l_new_model_path := get_Runtime_Relative_Path(p_model_id => g_UI_Context.devl_project_id,
8178 p_persistent_node_id => i.target_persistent_node_id,
8179 p_page_id => p_ui_page_id,
8180 p_ui_node_expl_id => i.target_expl_node_id);
8181
8182 IF l_new_model_path IS NOT NULL THEN
8183 UPDATE CZ_UI_ACTIONS
8184 SET target_node_path=l_new_model_path
8185 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8186 source_page_id=p_ui_page_id AND
8187 element_id=p_ui_element_id AND
8188 target_node_path<>l_new_model_path;
8189 END IF;
8190 END LOOP;
8191 END IF; -- end of IF l_action_id IS NOT NULL ...
8192
8193 END IF; -- end of IF l_user_attribute3 IS NOT NULL
8194
8195 EXCEPTION
8196 WHEN OTHERS THEN
8197 NULL;
8198 END refresh_Model_Path;
8199
8200 PROCEDURE refresh_All_Model_Paths(p_xml_doc xmldom.DOMDocument,
8201 p_page_id NUMBER) IS
8202
8203 l_node xmldom.DOMNode;
8204 l_nodeslist xmldom.DOMNodeList;
8205 l_empty_xml_node xmldom.DOMNode;
8206 l_length NUMBER;
8207 l_element_id VARCHAR2(32000);
8208 l_persistent_node_id NUMBER;
8209 l_exists_in_page_elem BOOLEAN;
8210
8211 BEGIN
8212
8213 l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
8214 l_length := xmldom.getLength(l_nodeslist);
8215
8216 --
8217 -- delete XML elements
8218 --
8219 FOR i IN 0..l_length-1
8220 LOOP
8221 l_node := xmldom.item(l_nodeslist, i);
8222 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
8223 IF l_element_id IS NOT NULL THEN
8224 BEGIN
8225 SELECT persistent_node_id INTO l_persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
8226 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8227 page_id=p_page_id AND
8228 element_id=l_element_id;
8229
8230 refresh_Model_Path(p_ui_element_id => l_element_id,
8231 p_ui_page_id => p_page_id,
8232 p_persistent_node_id => l_persistent_node_id,
8233 p_xml_node_to_refresh => l_node);
8234 EXCEPTION
8235 WHEN NO_DATA_FOUND THEN
8236 refresh_Model_Path(p_ui_element_id => l_element_id,
8237 p_ui_page_id => p_page_id,
8238 p_persistent_node_id => NULL,
8239 p_xml_node_to_refresh => l_node);
8240 END;
8241
8242 END IF;
8243
8244 END LOOP;
8245
8246 END refresh_All_Model_Paths;
8247
8248 ---------------------------------------------------------------------
8249 ------------------- JDR DOC BUILDER / XML Parsing -------------------
8250 ---------------------------------------------------------------------
8251
8252 --
8253 -- get attributes of a given DOM node
8254 -- Parameters : p_node - DOM node
8255 -- Return : array of attributes in format of attributes_tbl_type array
8256 --
8257 FUNCTION get_Attributes(p_node IN xmldom.DOMNode)
8258 RETURN attributes_tbl_type IS
8259
8260 l_attr_tbl attributes_tbl_type;
8261 l_node_map_tbl xmldom.DOMNamedNodeMap;
8262 l_node_attr xmldom.DOMNode;
8263 l_index NUMBER;
8264 l_length NUMBER;
8265
8266 BEGIN
8267 l_node_map_tbl := xmldom.getAttributes(p_node);
8268 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
8269 l_length := xmldom.getLength(l_node_map_tbl);
8270 --
8271 -- loop through attributes
8272 --
8273 l_index := 1;
8274 FOR i IN 0 .. l_length - 1
8275 LOOP
8276 l_node_attr := xmldom.item(l_node_map_tbl, i);
8277 l_attr_tbl(l_index).NAME := xmldom.getNodeName(l_node_attr);
8278 l_attr_tbl(l_index).VALUE := xmldom.getNodeValue(l_node_attr);
8279 l_index := l_index + 1;
8280 END LOOP;
8281 END IF;
8282 RETURN l_attr_tbl;
8283 END get_Attributes;
8284
8285 --
8286 -- set attributes for JRAD doc builder element p_jraddoc_node
8287 -- to attributes of DOM node p_node
8288 -- so this means that we just copy all attributes from DOM Node p_node
8289 -- to attributes of jdr_docbuilder.Element p_jraddoc_node
8290 -- it is used when DOM tree is converted to JRAD document
8291 -- Parameters : p_node - DOM node
8292 -- p_jraddoc_node - JRAD doc builder element
8293 -- Notes : it is not used in UI Generation/UI Refresh process directly
8294 --
8295 PROCEDURE set_Attributes(p_node xmldom.DOMNode,
8296 p_jraddoc_node jdr_docbuilder.Element) IS
8297
8298 l_attr_tbl attributes_tbl_type;
8299
8300 BEGIN
8301 l_attr_tbl := get_Attributes(p_node);
8302 IF l_attr_tbl.COUNT > 0 THEN
8303 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8304 LOOP
8305 jdr_docbuilder.setAttribute(p_jraddoc_node,
8306 l_attr_tbl(l).NAME,
8307 l_attr_tbl(l).VALUE);
8308 END LOOP;
8309 l_attr_tbl.DELETE;
8310 END IF;
8311 END set_Attributes;
8312
8313 --
8314 -- create JRAD element based on a given VARCHAR2 string
8315 -- which must be in the following form :
8316 -- <NS>:<Tag>
8317 -- Example : 'oa:button'
8318 --
8319 -- Parameters : p_node_name - VARCHAR2 string which contains string
8320 -- described above
8321 --
8322 FUNCTION createElement(p_node_name IN VARCHAR2)
8323 RETURN jdr_docbuilder.Element IS
8324
8325 l_ns VARCHAR2(255);
8326 l_el VARCHAR2(255);
8327
8328 BEGIN
8329 l_ns := SUBSTR(p_node_name, 1, INSTR(p_node_name, ':'));
8330 l_el := SUBSTR(p_node_name, INSTR(p_node_name, ':') + 1);
8331
8332 RETURN jdr_docbuilder.createElement(l_ns, l_el);
8333 END createElement;
8334
8335 --
8336 -- recursive procedure which
8337 -- scans DOM tree and create a corresponding JRAD document
8338 -- Parameters :
8339 -- p_nodeList - list of DOM nodes of the current level in DOM tree
8340 -- p_groupingTag - identifies XML grouping tag
8341 -- p_parent - identifes parent JRAD docbuilder element
8342 --
8343 PROCEDURE traverse_DOM_Tree(p_nodeList xmldom.DOMNodeList,
8344 p_groupingTag VARCHAR2,
8345 p_parent jdr_docbuilder.Element) IS
8346
8347 l_next_level_tbl xmldom.DOMNodeList;
8348 l_node xmldom.DOMNode;
8349 l_parent_xml_node xmldom.DOMNode;
8350 l_attr_tbl attributes_tbl_type;
8351 l_child jdr_docbuilder.Element;
8352 l_tag_name VARCHAR2(255);
8353 l_parent_tag_name VARCHAR2(255);
8354 l_grouping_tag VARCHAR2(255);
8355 l_ns VARCHAR2(255);
8356 l_gr VARCHAR2(255);
8357 l_attr_value VARCHAR2(32000);
8358 l_st VARCHAR2(1) := '';
8359 l_length NUMBER;
8360
8361 BEGIN
8362
8363 --
8364 -- now we have a DOM tree of the target JRAD document
8365 -- and we need to populate JRAD tables by using jdr_docbuilder API
8366 --
8367 l_length := xmldom.getLength(p_nodeList);
8368
8369 FOR i IN 0 .. l_length - 1
8370 LOOP
8371 l_node := xmldom.item(p_nodeList, i);
8372
8373 l_tag_name := xmldom.getNodeName(l_node);
8374
8375 l_parent_xml_node := xmldom.getParentNode(l_node);
8376
8377 IF NOT(xmldom.isNull(l_parent_xml_node)) THEN
8378 l_parent_tag_name := xmldom.getNodeName(l_parent_xml_node);
8379 END IF;
8380
8381 l_grouping_tag := '';
8382
8383 l_attr_tbl := get_Attributes(l_node);
8384
8385 IF l_attr_tbl.COUNT = 0 AND l_tag_name NOT IN('ui:firePartialAction') THEN
8386
8387 --
8388 -- this is grouping tag
8389 --
8390 l_grouping_tag := l_tag_name;
8391
8392 END IF;
8393
8394 l_st := NULL;
8395
8396 IF p_groupingTag IS NOT NULL THEN
8397
8398 l_child := createElement(l_tag_name);
8399
8400 l_st := G_YES_FLAG;
8401
8402 IF l_attr_tbl.COUNT > 0 THEN
8403 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8404 LOOP
8405 l_attr_value := l_attr_tbl(l).VALUE;
8406
8407 l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8408 l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8409 l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8410 l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8411 l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8412
8413 jdr_docbuilder.setAttribute(l_child,
8414 l_attr_tbl(l).NAME,
8415 l_attr_value);
8416 END LOOP;
8417 l_attr_tbl.DELETE;
8418 END IF; -- end of IF l_attr_tbl.COUNT > 0 THEN
8419
8420 l_ns := SUBSTR(p_groupingTag, 1, INSTR(p_groupingTag, ':'));
8421 l_gr := SUBSTR(p_groupingTag, INSTR(p_groupingTag, ':') + 1);
8422
8423 IF l_ns IS NULL THEN
8424 l_ns := 'jrad:';
8425 END IF;
8426 jdr_docbuilder.addChild(p_parent, l_ns, l_gr, l_child);
8427
8428 /* new jdr_docbuilder function */
8429
8430 ELSE
8431 IF (l_tag_name='ui:case' AND
8432 l_parent_tag_name IN('oa:switcher')) OR
8433 (l_tag_name='oa:stackLayout' AND l_parent_tag_name = 'ui:case') THEN
8434
8435 l_child := createElement(l_tag_name);
8436
8437 l_st := G_YES_FLAG;
8438 IF l_attr_tbl.COUNT > 0 THEN
8439 FOR l IN l_attr_tbl.FIRST .. l_attr_tbl.LAST
8440 LOOP
8441 l_attr_value := l_attr_tbl(l).VALUE;
8442
8443 l_attr_value := REPLACE(l_attr_value, G_UMPERS, G_UMPERS||'amp;');
8444 l_attr_value := REPLACE(l_attr_value, '<', G_UMPERS||'lt;');
8445 l_attr_value := REPLACE(l_attr_value, '>', G_UMPERS||'gt;');
8446 l_attr_value := REPLACE(l_attr_value, '"', G_UMPERS||'quot;');
8447 l_attr_value := REPLACE(l_attr_value, '''', G_UMPERS||'apos;');
8448
8449 jdr_docbuilder.setAttribute(l_child,
8450 l_attr_tbl(l).NAME,
8451 l_attr_value);
8452
8453 END LOOP;
8454 l_attr_tbl.DELETE;
8455 END IF;
8456
8457 jdr_docbuilder.addChild(p_parent, l_child);
8458
8459 END IF;
8460
8461 NULL;
8462 END IF; -- end of IF p_groupingTag IS NOT NULL THEN
8463
8464 l_next_level_tbl := xmldom.getChildNodes(l_node);
8465 IF NOT(xmldom.isNull(l_next_level_tbl)) AND
8466 xmldom.getLENGTH(l_next_level_tbl) <> 0 THEN
8467
8468 IF l_st IS NULL THEN
8469 traverse_DOM_Tree(l_next_level_tbl,
8470 l_grouping_tag,
8471 p_parent);
8472 ELSE
8473 traverse_DOM_Tree(l_next_level_tbl,
8474 l_grouping_tag,
8475 l_child);
8476 END IF;
8477 END IF;
8478
8479 END LOOP;
8480
8481 END traverse_DOM_Tree;
8482
8483 FUNCTION get_JRADNLS_Lang RETURN VARCHAR2 IS
8484 l_lang VARCHAR2(255);
8485 BEGIN
8486 SELECT ISO_LANGUAGE||'-'||
8487 ISO_TERRITORY
8488 INTO l_lang
8489 FROM FND_LANGUAGES_VL
8490 WHERE language_code=USERENV('LANG');
8491 RETURN l_lang;
8492 EXCEPTION
8493 WHEN OTHERS THEN
8494 RETURN 'EN-US';
8495 END get_JRADNLS_Lang;
8496
8497 --
8498 -- convert DOM Tree to JRAD record sets
8499 -- by ising DOM methods AND jdr_docbuilder API
8500 -- Parameters : p_jrad_doc_name - specifies full JRAD name of
8501 -- document that will be created from DOM tree
8502 -- which is identified by global DOM Document variable g_DOC
8503 --
8504 PROCEDURE convert_DOM_to_JRAD(p_doc xmldom.DOMDocument,
8505 p_jrad_doc_name IN VARCHAR2) IS
8506
8507 l_dom_root_node xmldom.DOMNode;
8508 l_topLevel jdr_docbuilder.Element;
8509 l_status PLS_INTEGER;
8510 l_lang VARCHAR2(255);
8511 BEGIN
8512
8513 g_DOC := p_doc;
8514
8515 --
8516 -- refresh global jdr_docbuilder's structures
8517 --
8518 jdr_docbuilder.refresh;
8519
8520 --
8521 -- get Document's root node
8522 --
8523 l_dom_root_node := xmldom.makeNode(xmldom.getDocumentElement(g_DOC));
8524
8525 --
8526 -- remove top level xml attributes - jdrdocbuilder always adds these attributes
8527 -- so we don't need to have a duplicates
8528 --
8529 remove_TopLevel_Attributes(l_dom_root_node);
8530
8531 l_lang := get_JRADNLS_Lang();
8532 --
8533 -- create a target JRAD document
8534 --
8535 g_JRADDOC := jdr_docbuilder.createDocument(p_jrad_doc_name, l_lang);
8536
8537 --
8538 -- create root element of the target JRAD document
8539 --
8540 l_topLevel := createElement(xmldom.getNodeName(l_dom_root_node));
8541
8542 --
8543 -- set top level attributes
8544 --
8545 set_Attributes(l_dom_root_node, l_topLevel);
8546
8547 --
8548 -- set JRAD top level node
8549 --
8550 jdr_docbuilder.setTopLevelElement(g_JRADDOC, l_topLevel);
8551
8552 --
8553 -- modify the source DOM tree and create the target JRAD document
8554 -- traverse_DOM_Tree() is recursive procedure
8555 --
8556 traverse_DOM_Tree(xmldom.getChildNodes(l_dom_root_node),
8557 '',
8558 l_topLevel);
8559
8560 --
8561 -- finally SAVE the target JRAD document
8562 --
8563 l_status := jdr_docbuilder.SAVE;
8564
8565 END convert_DOM_to_JRAD;
8566
8567 --
8568 -- save JRAD document
8569 --
8570 PROCEDURE Save_Document(p_xml_doc xmldom.DOMDocument,
8571 p_doc_name IN VARCHAR2) IS
8572 BEGIN
8573 convert_DOM_to_JRAD(p_doc => p_xml_doc, p_jrad_doc_name => p_doc_name);
8574 END Save_Document;
8575
8576 ---------------------------------------------------------------------
8577 ---------- end of JDR DOC BUILDER / XML Parsing Part ---------------
8578 ---------------------------------------------------------------------
8579
8580 PROCEDURE set_UI_Global_Entities IS
8581 BEGIN
8582
8583 IF NVL(g_UI_Context.preserve_model_hierarchy,G_YES_FLAG) = G_YES_FLAG THEN
8584 g_suppress_refresh_flag := G_NO_FLAG;
8585 ELSE
8586 g_suppress_refresh_flag := G_YES_FLAG;
8587 END IF;
8588
8589 SELECT root_element_signature_id
8590 INTO g_DRILLDOWN_ELEM_SIGNATURE_ID
8591 FROM CZ_UI_TEMPLATES
8592 WHERE template_id=g_DRILLDOWN_TEMPLATE_ID AND
8593 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
8594 deleted_flag=G_NO_FLAG;
8595
8596 IF g_DRILLDOWN_TEMPLATE_ID=G_DRILLDOWN_BUTTON_TEMPLATE_ID THEN
8597 g_DRILLDOWN_B_SIGNATURE_ID := g_DRILLDOWN_ELEM_SIGNATURE_ID;
8598 ELSE
8599 SELECT root_element_signature_id
8600 INTO g_DRILLDOWN_B_SIGNATURE_ID
8601 FROM CZ_UI_TEMPLATES
8602 WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
8603 template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
8604 deleted_flag=G_NO_FLAG;
8605 END IF;
8606
8607 SELECT TEMPLATE_TOKEN INTO G_CAPTION_RULE_TOKENNAME FROM CZ_RULES
8608 WHERE rule_id=G_DEFAULT_CAPTION_RULE_ID;
8609
8610 END set_UI_Global_Entities;
8611
8612 --
8613 -- get UI context
8614 --
8615 FUNCTION get_UI_Context(p_ui_def_id IN NUMBER) RETURN CZ_UI_DEFS%ROWTYPE IS
8616 BEGIN
8617 RETURN get_UI_Def_Node(p_ui_def_id);
8618 END get_UI_Context;
8619
8620 --
8621 -- set global UI context
8622 --
8623 PROCEDURE set_UI_Context(p_ui_def_id IN NUMBER) IS
8624 l_ui_def_id NUMBER;
8625 BEGIN
8626 l_ui_def_id := p_ui_def_id; -- this is to handle bug in 9i PL/SQL
8627 g_UI_Context := get_UI_Context(l_ui_def_id);
8628
8629 IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
8630 g_UI_Context.ROWS_PER_TABLE := 1000000;
8631 END IF;
8632
8633 IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
8634 g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
8635 END IF;
8636
8637 END set_UI_Context;
8638
8639 --
8640 -- set current global UI Context
8641 -- ( UI Generation mode )
8642 --
8643 FUNCTION create_UI_Context(p_model_id IN NUMBER,
8644 p_master_template_id IN NUMBER DEFAULT NULL,
8645 p_ui_name IN VARCHAR2 DEFAULT NULL,
8646 p_description IN VARCHAR2 DEFAULT NULL,
8647 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
8648 p_create_empty_ui IN VARCHAR2 DEFAULT NULL)
8649 RETURN CZ_UI_DEFS%ROWTYPE IS
8650
8651 l_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
8652 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
8653 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
8654 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
8655 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
8656 l_master_template_id NUMBER;
8657
8658 BEGIN
8659 l_master_template_id := p_master_template_id; -- this is to handle bug in 9i PL/SQL
8660
8661 --
8662 -- set UI context as UI Master Template Setting
8663 --
8664 set_UI_Context(l_master_template_id);
8665 g_UI_Context.from_master_template_id := l_master_template_id;
8666
8667 IF g_UI_Context.ROWS_PER_TABLE=-1 THEN
8668 g_UI_Context.ROWS_PER_TABLE := 1000000;
8669 END IF;
8670 IF g_UI_CONTEXT.PAGIN_MAXCONTROLS=-1 THEN
8671 g_UI_CONTEXT.PAGIN_MAXCONTROLS := 1000000;
8672 END IF;
8673
8674 --
8675 -- allocate a new ui_def_id for new UI
8676 --
8677 g_UI_Context.ui_def_id := allocateId('CZ_UI_DEFS_S');
8678 g_UI_Context.devl_project_id := p_model_id;
8679 g_UI_Context.component_id := p_model_id;
8680 g_UI_Context.master_template_flag := G_NO_FLAG;
8681 g_UI_Context.seeded_flag := G_NO_FLAG;
8682 g_UI_Context.ui_style := G_OA_STYLE_UI;
8683 g_UI_Context.from_master_template_id := NVL(l_master_template_id,G_DEFAULT_MASTER_TEMPLATE_ID);
8684 g_UI_Context.empty_ui_flag := NVL(p_create_empty_ui,G_NO_FLAG);
8685
8686 IF p_create_empty_ui IS NULL OR p_create_empty_ui='0' THEN
8687 g_UI_Context.suppress_refresh_flag := '0';
8688 ELSE
8689 g_UI_Context.suppress_refresh_flag := '1';
8690 END IF;
8691
8692 g_UI_Context.persistent_ui_def_id := g_UI_Context.ui_def_id;
8693 g_UI_Context.desc_text := p_description;
8694 g_UI_Context.model_timestamp := SYSDATE;
8695 g_UI_Context.ui_status := G_NEW_UI_STATUS;
8696 g_UI_Context.show_all_nodes_flag := NVL(p_show_all_nodes,G_NO_FLAG);
8697
8698 IF g_UI_Context.start_url IS NULL THEN
8699 g_UI_Context.start_url := G_DEFAULT_START_URL;
8700 END IF;
8701
8702 IF g_UI_Context.page_layout IS NULL THEN
8703 g_UI_Context.page_layout := G_DEFAULT_PAGE_LAYOUT;
8704 END IF;
8705
8706 g_ui_def_nodes_tbl(g_UI_Context.ui_def_id) := g_UI_Context;
8707
8708 --
8709 -- count number of UIs for a given model
8710 --
8711 SELECT COUNT(ui_def_id) + 1
8712 INTO g_UI_Context.tree_seq
8713 FROM CZ_UI_DEFS
8714 WHERE component_id = p_model_id AND
8715 deleted_flag = G_NO_FLAG;
8716
8717 IF p_ui_name IS NULL THEN
8718 SELECT NAME || ' User Interface (' || TO_CHAR(g_UI_Context.tree_seq) || ')'
8719 INTO g_UI_Context.NAME
8720 FROM CZ_DEVL_PROJECTS
8721 WHERE devl_project_id = p_model_id;
8722 ELSE
8723 g_UI_Context.NAME := p_ui_name;
8724 END IF;
8725
8726 set_UI_Global_Entities();
8727
8728 --
8729 -- create local UI Templates if they need to be created
8730 --
8731 create_Local_UI_Templates();
8732
8733 INSERT INTO CZ_UI_DEFS
8734 (UI_DEF_ID,
8735 DESC_TEXT,
8736 NAME,
8737 DEVL_PROJECT_ID,
8738 COMPONENT_ID,
8739 TREE_SEQ,
8740 UI_STYLE,
8741 GEN_VERSION,
8742 TREENODE_DISPLAY_SOURCE,
8743 GEN_HEADER,
8744 LOOK_AND_FEEL,
8745 CONTROLS_PER_SCREEN,
8746 PRIMARY_NAVIGATION,
8747 PERSISTENT_UI_DEF_ID,
8748 MODEL_TIMESTAMP,
8749 UI_STATUS,
8750 PAGE_SET_ID,
8751 START_PAGE_ID,
8752 ERR_RUN_ID,
8753 START_URL,
8754 PAGE_LAYOUT,
8755 PRICE_UPDATE,
8756 SEEDED_FLAG,
8757 MASTER_TEMPLATE_FLAG,
8758 PRICE_DISPLAY,
8759 FROM_MASTER_TEMPLATE_ID,
8760 PAGIN_MAXCONTROLS,
8761 PAGIN_NONINST,
8762 PAGIN_NONINST_REFCOMP,
8763 CONTROL_LAYOUT,
8764 PAGIN_DRILLDOWNCTRL,
8765 OUTER_TEMPLATE_USAGE,
8766 PAGIN_BOMOC,
8767 BOMUI_LAYOUT,
8768 BOMQTYINPUTCTRLS,
8769 CTRLTEMPLUSE_BOM,
8770 CTRLTEMPLUSE_NONBOM,
8771 NONBOM_UILAYOUT,
8772 CTRLTEMPLUSE_COMMON,
8773 CTRLTEMPLUSE_REQDMSG,
8774 CTRLTEMPLUSE_OPTMSG,
8775 MENU_CAPTION_RULE_ID,
8776 PAGE_CAPTION_RULE_ID,
8777 PRESERVE_MODEL_HIERARCHY,
8778 EMPTY_UI_FLAG,
8779 SHOW_TRAIN,
8780 PAGINATION_SLOT,
8781 DRILLDOWN_CONTROL_TEXT_ID,
8782 DRILLDOWN_IMAGE_URL,
8783 ROWS_PER_TABLE,
8784 CTRLTEMPLATEUSE_BUTTONBAR,
8785 CTRLTEMPLATEUSE_UTILITYPAGE,
8786 OPTION_SORT_SELECT_FIRST,
8787 OPTION_SORT_ORDER,
8788 OPTION_SORT_METHOD,
8789 SHOW_ALL_NODES_FLAG,
8790 PAGE_STATUS_TEMPLATE_USAGE,
8791 suppress_refresh_flag,
8792 DELETED_FLAG,
8793 UI_TIMESTAMP_REFRESH,
8794 DRILLDOWN_TX_TYPE,
8795 CONTENT_LAST_UPDATE_DATE,
8796 DISABLE_AUTOOVERRIDE_FLAG
8797 )
8798 SELECT g_UI_Context.ui_def_id,
8799 g_UI_Context.desc_text,
8800 g_UI_Context.NAME,
8801 g_UI_Context.devl_project_id,
8802 g_UI_Context.component_id,
8803 g_UI_Context.tree_seq,
8804 g_UI_Context.ui_style,
8805 G_GEN_VERSION,
8806 TREENODE_DISPLAY_SOURCE,
8807 G_GEN_HEADER,
8808 LOOK_AND_FEEL,
8809 CONTROLS_PER_SCREEN,
8810 PRIMARY_NAVIGATION,
8811 g_UI_Context.persistent_ui_def_id,
8812 g_UI_Context.model_timestamp,
8813 g_UI_Context.ui_status,
8814 g_UI_Context.page_set_id,
8815 g_UI_Context.start_page_id,
8816 g_UI_Context.err_run_id,
8817 g_UI_Context.start_url,
8818 g_UI_Context.page_layout,
8819 G_DEFAULT_PRICE_UPDATE,
8820 '0',
8821 '0',
8822 G_DEFAULT_PRICE_DISPLAY,
8823 g_UI_Context.from_master_template_id,
8824 PAGIN_MAXCONTROLS,
8825 PAGIN_NONINST,
8826 PAGIN_NONINST_REFCOMP,
8827 CONTROL_LAYOUT,
8828 PAGIN_DRILLDOWNCTRL,
8829 OUTER_TEMPLATE_USAGE,
8830 PAGIN_BOMOC,
8831 BOMUI_LAYOUT,
8832 BOMQTYINPUTCTRLS,
8833 CTRLTEMPLUSE_BOM,
8834 CTRLTEMPLUSE_NONBOM,
8835 NONBOM_UILAYOUT,
8836 CTRLTEMPLUSE_COMMON,
8837 CTRLTEMPLUSE_REQDMSG,
8838 CTRLTEMPLUSE_OPTMSG,
8839 MENU_CAPTION_RULE_ID,
8840 PAGE_CAPTION_RULE_ID,
8841 PRESERVE_MODEL_HIERARCHY,
8842 NVL(p_create_empty_ui, G_NO_FLAG),
8843 SHOW_TRAIN,
8844 PAGINATION_SLOT,
8845 DRILLDOWN_CONTROL_TEXT_ID,
8846 DRILLDOWN_IMAGE_URL,
8847 ROWS_PER_TABLE,
8848 CTRLTEMPLATEUSE_BUTTONBAR,
8849 CTRLTEMPLATEUSE_UTILITYPAGE,
8850 OPTION_SORT_SELECT_FIRST,
8851 OPTION_SORT_ORDER,
8852 OPTION_SORT_METHOD,
8853 p_show_all_nodes,
8854 PAGE_STATUS_TEMPLATE_USAGE,
8855 g_UI_Context.suppress_refresh_flag,
8856 DELETED_FLAG,
8857 SYSDATE,
8858 DRILLDOWN_TX_TYPE,
8859 CONTENT_LAST_UPDATE_DATE,
8860 DISABLE_AUTOOVERRIDE_FLAG
8861 FROM CZ_UI_DEFS
8862 WHERE ui_def_id = g_UI_Context.from_master_template_id;
8863
8864 --
8865 -- get root model node
8866 --
8867 l_node := get_Model_Node(p_model_id);
8868
8869 --
8870 -- create root UI page
8871 --
8872 l_page_ui_node := create_UI_Page(p_node => l_node,
8873 x_page_set_id => l_page_set_id,
8874 x_page_set_type => l_page_set_type,
8875 x_page_ref_id => l_page_ref_id);
8876
8877 g_UI_Context.start_page_id := l_page_ui_node.page_id;
8878 g_UI_Context.page_set_id := l_page_set_id;
8879
8880 UPDATE CZ_UI_DEFS
8881 SET start_page_id=g_UI_Context.start_page_id,
8882 page_set_id=g_UI_Context.page_set_id
8883 WHERE ui_def_id=g_UI_Context.ui_def_id;
8884
8885 RETURN g_UI_Context;
8886
8887 END create_UI_Context;
8888
8889 --
8890 -- get UI context of target UI
8891 --
8892 FUNCTION get_Target_UI_Context(p_ui_def_node IN CZ_UI_DEFS%ROWTYPE,
8893 p_reference_id IN NUMBER)
8894 RETURN CZ_UI_DEFS%ROWTYPE IS
8895 l_init_ui_def_id NUMBER;
8896 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
8897 l_old_context CZ_UI_DEFS%ROWTYPE;
8898 BEGIN
8899 l_init_ui_def_id := p_ui_def_node.ui_def_id;
8900 l_old_context := g_UI_Context;
8901
8902 SELECT *
8903 INTO l_target_ui_def_node
8904 FROM CZ_UI_DEFS
8905 WHERE ui_def_id = (SELECT MAX(ui_def_id)
8906 FROM CZ_UI_DEFS
8907 WHERE devl_project_id = p_reference_id AND
8908 ui_status IN (G_PROCESSED_UI_STATUS,G_NEW_UI_STATUS) AND
8909 deleted_flag = G_NO_FLAG);
8910
8911 /* *** bug #3848809 ***
8912 IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
8913 l_target_ui_def_node.PRIMARY_NAVIGATION <> G_MODEL_TREE_MENU THEN
8914
8915 l_target_ui_def_node := create_UI_Context(p_model_id => p_reference_id,
8916 p_master_template_id => p_ui_def_node.from_master_template_id,
8917 p_show_all_nodes => p_ui_def_node.show_all_nodes_flag,
8918 p_create_empty_ui => p_ui_def_node.empty_ui_flag);
8919 --
8920 -- set global UI context
8921 --
8922 set_UI_Context(l_init_ui_def_id);
8923
8924 RETURN l_target_ui_def_node;
8925
8926 ELSE
8927 */
8928 RETURN l_target_ui_def_node;
8929 -- END IF;
8930
8931 EXCEPTION
8932 WHEN NO_DATA_FOUND THEN
8933
8934 l_target_ui_def_node := create_UI_Context(p_model_id => p_reference_id,
8935 p_master_template_id => p_ui_def_node.from_master_template_id,
8936 p_show_all_nodes => p_ui_def_node.show_all_nodes_flag,
8937 p_create_empty_ui => p_ui_def_node.empty_ui_flag);
8938 --
8939 -- set global UI context
8940 --
8941 --set_UI_Context(l_init_ui_def_id);
8942 g_UI_Context := l_old_context;
8943
8944 RETURN l_target_ui_def_node;
8945 END get_Target_UI_Context;
8946
8947 FUNCTION find_CX_On_UI_Page(p_page_id IN NUMBER,
8948 p_component_id IN NUMBER,
8949 p_command_name IN VARCHAR2)
8950 RETURN VARCHAR2 IS
8951
8952 l_page_persistent_node_id NUMBER;
8953
8954 BEGIN
8955
8956 SELECT persistent_node_id INTO l_page_persistent_node_id
8957 FROM CZ_UI_PAGES
8958 WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
8959
8960 FOR i IN (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
8961 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8962 page_id IN(SELECT page_id FROM CZ_UI_PAGES
8963 WHERE ui_def_id=g_UI_Context.ui_def_id AND
8964 persistent_node_id=l_page_persistent_node_id AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)) AND
8965 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
8966 persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
8967 WHERE ps_node_id=p_component_id)
8968 AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
8969 LOOP
8970 FOR k IN(SELECT ui_action_id FROM CZ_UI_ACTIONS
8971 WHERE ui_def_id=g_UI_Context.ui_def_id AND element_id=i.element_id AND
8972 cx_command_name=p_command_name AND deleted_flag=G_NO_FLAG)
8973 LOOP
8974 RETURN i.element_id;
8975 END LOOP;
8976 END LOOP;
8977 -- no CX on the page
8978 RETURN G_NO_FLAG;
8979 END find_CX_On_UI_Page;
8980
8981 --
8982 -- create new CX button
8983 --
8984 PROCEDURE add_CX_Button(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
8985 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
8986
8987 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
8988 l_parent_element_id CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
8989 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
8990 l_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
8991 l_page_path VARCHAR2(32000);
8992 l_ui_intl_text_id INTEGER;
8993 l_counter INTEGER;
8994 l_new_node BOOLEAN := FALSE;
8995
8996 l_pb_model_ref_expl_id NUMBER;
8997 l_pb_persistent_node_id NUMBER;
8998 l_persistent_id NUMBER;
8999 l_ref_model_id NUMBER;
9000
9001 BEGIN
9002
9003 IF p_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9004 RETURN;
9005 END IF;
9006
9007 FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.name
9008 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9009 WHERE a.devl_project_id=p_node.devl_project_id AND
9010 a.component_id=p_node.ps_node_id AND
9011 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9012 a.deleted_flag=G_NO_FLAG AND
9013 a.disabled_flag=G_NO_FLAG AND
9014 a.invalid_flag=G_NO_FLAG AND
9015 b.rule_id=a.rule_id AND
9016 b.deleted_flag=G_NO_FLAG AND
9017 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9018 data_value IS NOT NULL)
9019 LOOP
9020 -- do not create a CX for instantiable reference with
9021 -- instantiation_scope= INSTANCE
9022 IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9023 p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9024 i.INSTANTIATION_SCOPE=1 THEN
9025 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9026 p_token_name1 => 'EVENT_NAME',
9027 p_token_value1 => i.data_value,
9028 p_token_name2 => 'RULE_NAME',
9029 p_token_value2 => i.name,
9030 p_fatal_error => FALSE);
9031 RETURN;
9032 END IF;
9033 IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9034
9035 l_element_id := get_Element_Id();
9036 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9037 INSERT INTO CZ_INTL_TEXTS
9038 (INTL_TEXT_ID,
9039 TEXT_STR,
9040 DELETED_FLAG,
9041 SEEDED_FLAG,
9042 UI_DEF_ID,
9043 MODEL_ID,
9044 UI_PAGE_ID,
9045 UI_PAGE_ELEMENT_ID
9046 )
9047 VALUES
9048 (l_ui_intl_text_id,
9049 i.data_value,
9050 G_NO_FLAG,
9051 G_NO_FLAG,
9052 g_UI_Context.ui_def_id,
9053 g_UI_Context.devl_project_id,
9054 p_ui_node.page_id,
9055 l_element_id
9056 );
9057 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9058
9059 IF p_ui_node.parent_element_id IS NULL THEN
9060 l_parent_element_id := p_ui_node.element_id;
9061 ELSE
9062 l_parent_element_id := p_ui_node.parent_element_id;
9063 END IF;
9064 l_new_node := TRUE;
9065
9066 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9067 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9068 page_id=p_ui_node.page_id AND
9069 ctrl_template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
9070 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9071
9072 l_name := G_DRILLDOWN_TEMPLATE_NAME||' - '||TO_CHAR(l_counter);
9073
9074 INSERT INTO CZ_UI_PAGE_ELEMENTS
9075 (ui_def_id,
9076 persistent_node_id,
9077 parent_persistent_node_id,
9078 region_persistent_node_id,
9079 pagebase_persistent_node_id,
9080 page_id,
9081 base_page_flag,
9082 seq_nbr,
9083 ctrl_template_id,
9084 ctrl_template_ui_def_id,
9085 element_id,
9086 parent_element_id,
9087 element_type,
9088 instantiable_flag,
9089 model_ref_expl_id,
9090 element_signature_id,
9091 name,
9092 deleted_flag)
9093 VALUES
9094 (p_ui_node.ui_def_id,
9095 p_node.persistent_node_id,
9096 p_node.parent_persistent_node_id,
9097 p_ui_node.region_persistent_node_id,
9098 p_ui_node.pagebase_persistent_node_id,
9099 p_ui_node.page_id,
9100 NULL,
9101 p_ui_node.seq_nbr+1,
9102 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9103 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9104 l_element_id,
9105 l_parent_element_id,
9106 G_UI_CX_BUTTON_NODE_TYPE,
9107 NULL,
9108 p_ui_node.model_ref_expl_id,
9109 g_DRILLDOWN_B_SIGNATURE_ID,
9110 l_name,
9111 G_MARK_TO_ADD);
9112
9113 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9114
9115 INSERT INTO CZ_UI_ACTIONS
9116 (
9117 ui_action_id
9118 ,ui_def_id
9119 ,source_page_id
9120 ,context_component_id
9121 ,element_id
9122 ,render_condition_id
9123 ,ui_action_type
9124 ,target_ui_def_id
9125 ,target_persistent_node_id
9126 ,target_node_path
9127 ,target_page_set_id
9128 ,target_page_id
9129 ,target_url
9130 ,frame_name
9131 ,target_anchor
9132 ,seeded_flag
9133 ,cx_command_name
9134 ,window_parameters
9135 ,target_window_type
9136 ,target_window_name
9137 ,target_expl_node_id
9138 ,deleted_flag
9139 )
9140 VALUES
9141 (
9142 l_ui_action_id
9143 ,p_ui_node.ui_def_id
9144 ,p_ui_node.page_id
9145 ,p_node.persistent_node_id
9146 ,l_element_id
9147 ,NULL
9148 ,G_CX_BUTTON_ACTION_TYPE
9149 ,NULL
9150 ,NULL
9151 ,NULL
9152 ,NULL
9153 ,NULL
9154 ,NULL
9155 ,NULL
9156 ,NULL
9157 ,'0'
9158 ,i.data_value
9159 ,NULL
9160 ,NULL
9161 ,NULL
9162 ,NULL
9163 ,G_NO_FLAG
9164 );
9165
9166 END IF;
9167
9168 END LOOP;
9169
9170 IF p_node.ps_node_type=G_REFERENCE_TYPE THEN
9171
9172 FOR i IN(SELECT a.model_ref_expl_id, b.data_value, a.component_id, b.expr_node_id, a.name, a.INSTANTIATION_SCOPE
9173 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9174 WHERE a.devl_project_id=p_node.devl_project_id AND
9175 a.component_id IN
9176 (SELECT ps_node_id FROM CZ_PS_NODES
9177 WHERE devl_project_id IN
9178 (SELECT DISTINCT component_id FROM CZ_MODEL_REF_EXPLS
9179 START WITH model_id=p_node.devl_project_id AND
9180 referring_node_id=p_node.ps_node_id AND
9181 deleted_flag='0'
9182 CONNECT BY PRIOR model_ref_expl_id=parent_expl_node_id AND
9183 deleted_flag='0' AND PRIOR deleted_flag='0') AND
9184 deleted_flag='0') AND
9185 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9186 a.deleted_flag=G_NO_FLAG AND
9187 a.disabled_flag=G_NO_FLAG AND
9188 a.invalid_flag=G_NO_FLAG AND
9189 b.rule_id=a.rule_id AND
9190 b.deleted_flag=G_NO_FLAG AND
9191 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9192 data_value IS NOT NULL)
9193 LOOP
9194
9195 -- do not create a CX for instantiable reference with
9196 -- instantiation_scope= INSTANCE
9197 IF p_node.ps_node_type=G_REFERENCE_TYPE AND
9198 p_node.instantiable_flag NOT IN(G_MANDATORY_INST_TYPE) AND
9199 i.INSTANTIATION_SCOPE=1 THEN
9200 add_Error_Message(p_message_name => 'CZ_CX_IS_IN_WRONG_SCOPE',
9201 p_token_name1 => 'EVENT_NAME',
9202 p_token_value1 => i.data_value,
9203 p_token_name2 => 'RULE_NAME',
9204 p_token_value2 => i.name,
9205 p_fatal_error => FALSE);
9206 RETURN;
9207 END IF;
9208
9209 IF find_CX_On_UI_Page(p_ui_node.page_id, p_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9210
9211 l_element_id := get_Element_Id();
9212 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9213 INSERT INTO CZ_INTL_TEXTS
9214 (INTL_TEXT_ID,
9215 TEXT_STR,
9216 DELETED_FLAG,
9217 SEEDED_FLAG,
9218 UI_DEF_ID,
9219 MODEL_ID,
9220 UI_PAGE_ID,
9221 UI_PAGE_ELEMENT_ID)
9222 VALUES
9223 (l_ui_intl_text_id,
9224 i.data_value,
9225 G_NO_FLAG,
9226 G_NO_FLAG,
9227 g_UI_Context.ui_def_id,
9228 g_UI_Context.devl_project_id,
9229 p_ui_node.page_id,
9230 l_element_id
9231 );
9232 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9233
9234 IF p_ui_node.parent_element_id IS NULL THEN
9235 l_parent_element_id := p_ui_node.element_id;
9236 ELSE
9237 l_parent_element_id := p_ui_node.parent_element_id;
9238 END IF;
9239
9240 l_new_node := TRUE;
9241
9242 INSERT INTO CZ_UI_PAGE_ELEMENTS
9243 (ui_def_id,
9244 persistent_node_id,
9245 parent_persistent_node_id,
9246 region_persistent_node_id,
9247 pagebase_persistent_node_id,
9248 page_id,
9249 base_page_flag,
9250 seq_nbr,
9251 ctrl_template_id,
9252 ctrl_template_ui_def_id,
9253 element_id,
9254 parent_element_id,
9255 element_type,
9256 instantiable_flag,
9257 model_ref_expl_id,
9258 element_signature_id,
9259 name,
9260 deleted_flag)
9261 VALUES
9262 (p_ui_node.ui_def_id,
9263 p_node.persistent_node_id,
9264 p_node.parent_persistent_node_id,
9265 p_ui_node.region_persistent_node_id,
9266 p_ui_node.pagebase_persistent_node_id,
9267 p_ui_node.page_id,
9268 NULL,
9269 p_ui_node.seq_nbr+1,
9270 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9271 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9272 l_element_id,
9273 l_parent_element_id,
9274 G_UI_CX_BUTTON_NODE_TYPE,
9275 NULL,
9276 p_ui_node.model_ref_expl_id,
9277 g_DRILLDOWN_B_SIGNATURE_ID,
9278 'Button - '||i.data_value,
9279 G_MARK_TO_ADD);
9280
9281 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9282
9283 INSERT INTO CZ_UI_ACTIONS
9284 (
9285 ui_action_id
9286 ,ui_def_id
9287 ,source_page_id
9288 ,context_component_id
9289 ,element_id
9290 ,render_condition_id
9291 ,ui_action_type
9292 ,target_ui_def_id
9293 ,target_persistent_node_id
9294 ,target_node_path
9295 ,target_page_set_id
9296 ,target_page_id
9297 ,target_url
9298 ,frame_name
9299 ,target_anchor
9300 ,seeded_flag
9301 ,cx_command_name
9302 ,window_parameters
9303 ,target_window_type
9304 ,target_window_name
9305 ,target_expl_node_id
9306 ,deleted_flag
9307 )
9308 VALUES
9309 (
9310 l_ui_action_id
9311 ,p_ui_node.ui_def_id
9312 ,p_ui_node.page_id
9313 ,p_node.persistent_node_id
9314 ,l_element_id
9315 ,NULL
9316 ,G_CX_BUTTON_ACTION_TYPE
9317 ,NULL
9318 ,NULL
9319 ,NULL
9320 ,NULL
9321 ,NULL
9322 ,NULL
9323 ,NULL
9324 ,NULL
9325 ,'0'
9326 ,i.data_value
9327 ,NULL
9328 ,NULL
9329 ,NULL
9330 ,NULL
9331 ,G_NO_FLAG
9332 );
9333
9334 -- find model to which model ref expl node with i.model_ref_expl_id belongs to
9335 FOR k IN(SELECT component_id, ps_node_type FROM CZ_MODEL_REF_EXPLS
9336 START WITH model_ref_expl_id=i.model_ref_expl_id
9337 CONNECT BY PRIOR parent_expl_node_id=model_ref_expl_id AND deleted_flag='0')
9338 LOOP
9339 IF k.ps_node_type = CZ_TYPES.PS_NODE_TYPE_REFERENCE THEN
9340 l_ref_model_id := k.component_id;
9341 EXIT;
9342 END IF;
9343 END LOOP;
9344
9345 -- find persistent_node_id of PS node which is used in CX binding
9346 SELECT persistent_node_id INTO l_persistent_id FROM CZ_PS_NODES
9347 WHERE devl_project_id=l_ref_model_id AND ps_node_id=i.component_id;
9348
9349 -- find model_ref_expl_id and persistent_node_id of pagebase
9350 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
9351 WHERE ui_def_id=p_ui_node.ui_def_id AND page_id=p_ui_node.page_id AND
9352 element_id=p_ui_node.parent_element_id;
9353
9354 -- save runtime relative path of CX button in associative array g_ref_cx_paths_tbl ( UI element_id <-> runtime relative path )
9355 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,
9356 p_base_pers_id => l_pb_persistent_node_id,
9357 p_node_expl_id => i.model_ref_expl_id,
9358 p_node_pers_id => l_persistent_id);
9359
9360 END IF;
9361
9362 END LOOP;
9363
9364 END IF;
9365
9366 --
9367 -- if CX button is added then mark UI page as page
9368 -- to refresh
9369 --
9370 IF l_new_node THEN
9371 --
9372 -- mark UI Page as refreshed
9373 --
9374 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
9375 END IF;
9376
9377 END add_CX_Button;
9378
9379 --
9380 -- handle CX for those nodes which have no corresponding
9381 -- records in table CZ_UI_PAGE_ELEMENTS
9382 --
9383 PROCEDURE handle_CXs_For_nonUINodes IS
9384
9385 l_ui_intl_text_id CZ_INTL_TEXTS.intl_text_id%TYPE;
9386 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9387 l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9388 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
9389
9390 BEGIN
9391
9392 FOR option_node IN(SELECT ps_node_id,persistent_node_id,
9393 parent_persistent_node_id FROM CZ_UITEMPLS_FOR_PSNODES_V a
9394 WHERE devl_project_id=g_UI_Context.devl_project_id AND
9395 ui_def_id=g_UI_Context.from_master_template_id AND
9396 ps_node_type IN(G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) AND
9397 ui_omit=G_NO_FLAG AND deleted_flag=G_NO_FLAG AND
9398 EXISTS(SELECT NULL FROM CZ_RULES
9399 WHERE devl_project_id=g_UI_Context.devl_project_id AND
9400 component_id=a.ps_node_id AND
9401 disabled_flag=G_NO_FLAG AND
9402 deleted_flag=G_NO_FLAG))
9403 LOOP
9404 FOR parent_ui_node IN(SELECT *
9405 FROM CZ_UI_PAGE_ELEMENTS
9406 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9407 persistent_node_id=option_node.parent_persistent_node_id AND
9408 deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE, G_LIMBO_FLAG))
9409 LOOP
9410
9411 FOR i IN(SELECT DISTINCT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME
9412 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9413 WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9414 a.component_id=option_node.ps_node_id AND
9415 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9416 a.deleted_flag=G_NO_FLAG AND
9417 a.disabled_flag=G_NO_FLAG AND
9418 a.invalid_flag=G_NO_FLAG AND
9419 b.rule_id=a.rule_id AND
9420 b.deleted_flag=G_NO_FLAG AND
9421 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9422 b.data_value IS NOT NULL)
9423 LOOP
9424 IF find_CX_On_UI_Page(parent_ui_node.page_id, option_node.ps_node_id, i.data_value) = G_NO_FLAG THEN
9425 l_element_id := get_Element_Id();
9426
9427 l_ui_intl_text_id := allocateId('CZ_INTL_TEXTS_S');
9428 INSERT INTO CZ_INTL_TEXTS
9429 (INTL_TEXT_ID,
9430 TEXT_STR,
9431 DELETED_FLAG,
9432 SEEDED_FLAG,
9433 UI_DEF_ID,
9434 MODEL_ID,
9435 UI_PAGE_ID,
9436 UI_PAGE_ELEMENT_ID
9437 )
9438 VALUES
9439 (l_ui_intl_text_id,
9440 i.data_value,
9441 G_NO_FLAG,
9442 G_NO_FLAG,
9443 g_UI_Context.ui_def_id,
9444 g_UI_Context.devl_project_id,
9445 parent_ui_node.page_id,
9446 l_element_id
9447 );
9448
9449 g_cx_names_tbl(TO_NUMBER(l_element_id)) := l_ui_intl_text_id;
9450 g_ref_cx_paths_tbl(TO_NUMBER(l_element_id)) := get_Model_Path(parent_ui_node)||
9451 '.'||TO_CHAR(option_node.persistent_node_id);
9452
9453 IF parent_ui_node.parent_element_id IS NULL THEN
9454 l_parent_element_id := parent_ui_node.element_id;
9455 ELSE
9456 l_parent_element_id := parent_ui_node.parent_element_id;
9457 END IF;
9458
9459 INSERT INTO CZ_UI_PAGE_ELEMENTS
9460 (ui_def_id,
9461 persistent_node_id,
9462 parent_persistent_node_id,
9463 region_persistent_node_id,
9464 pagebase_persistent_node_id,
9465 page_id,
9466 base_page_flag,
9467 seq_nbr,
9468 ctrl_template_id,
9469 ctrl_template_ui_def_id,
9470 element_id,
9471 parent_element_id,
9472 element_type,
9473 instantiable_flag,
9474 model_ref_expl_id,
9475 element_signature_id,
9476 NAME,
9477 deleted_flag)
9478 VALUES
9479 (g_UI_Context.ui_def_id,
9480 option_node.persistent_node_id,
9481 option_node.parent_persistent_node_id,
9482 parent_ui_node.region_persistent_node_id,
9483 parent_ui_node.pagebase_persistent_node_id,
9484 parent_ui_node.page_id,
9485 NULL,
9486 parent_ui_node.seq_nbr+1,
9487 G_DRILLDOWN_BUTTON_TEMPLATE_ID,
9488 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9489 l_element_id,
9490 l_parent_element_id,
9491 G_UI_CX_BUTTON_NODE_TYPE,
9492 NULL,
9493 parent_ui_node.model_ref_expl_id,
9494 g_DRILLDOWN_B_SIGNATURE_ID,
9495 G_DRILLDOWN_TEMPLATE_NAME||' - '||l_element_id,
9496 G_MARK_TO_ADD);
9497
9498 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
9499
9500 INSERT INTO CZ_UI_ACTIONS
9501 (
9502 ui_action_id
9503 ,ui_def_id
9504 ,source_page_id
9505 ,context_component_id
9506 ,element_id
9507 ,render_condition_id
9508 ,ui_action_type
9509 ,target_ui_def_id
9510 ,target_persistent_node_id
9511 ,target_node_path
9512 ,target_page_set_id
9513 ,target_page_id
9514 ,target_url
9515 ,frame_name
9516 ,target_anchor
9517 ,seeded_flag
9518 ,cx_command_name
9519 ,window_parameters
9520 ,target_window_type
9521 ,target_window_name
9522 ,target_expl_node_id
9523 ,deleted_flag
9524 )
9525 VALUES
9526 (
9527 l_ui_action_id
9528 ,g_UI_Context.ui_def_id
9529 ,parent_ui_node.page_id
9530 ,option_node.persistent_node_id
9531 ,l_element_id
9532 ,NULL
9533 ,G_CX_BUTTON_ACTION_TYPE
9534 ,NULL
9535 ,NULL
9536 ,NULL
9537 ,NULL
9538 ,NULL
9539 ,NULL
9540 ,NULL
9541 ,NULL
9542 ,'0'
9543 ,i.data_value
9544 ,NULL
9545 ,NULL
9546 ,NULL
9547 ,NULL
9548 ,G_NO_FLAG
9549 );
9550
9551 mark_UI_Page_As_Refreshed(parent_ui_node.page_id, g_UI_Context.ui_def_id);
9552 END IF; -- end of IF find_CX_On_UI_Page
9553
9554 END LOOP; -- end of loop with index i
9555
9556 END LOOP; -- end of loop with index parent_ui_node
9557
9558 END LOOP; -- end of loop with index option_node
9559
9560 END handle_CXs_For_nonUINodes;
9561
9562
9563 FUNCTION disabled_for_refresh(p_page_element IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) RETURN BOOLEAN
9564 IS
9565 l_dummy VARCHAR2(1);
9566 BEGIN
9567
9568 SELECT '1' INTO l_dummy
9569 FROM DUAL
9570 WHERE '1' IN (SELECT suppress_refresh_flag
9571 FROM cz_ui_page_elements
9572 START WITH ui_def_Id = p_page_element.ui_def_id
9573 AND page_id = p_page_element.page_id
9574 AND element_id = p_page_element.element_id
9575 CONNECT BY PRIOR parent_element_id IS NOT NULL
9576 AND prior suppress_refresh_flag = G_NO_FLAG
9577 AND ui_def_Id = p_page_element.ui_def_id
9578 AND page_id = p_page_element.page_id
9579 AND prior parent_element_id = element_id);
9580 RETURN TRUE;
9581 EXCEPTION
9582 WHEN NO_DATA_FOUND THEN
9583 RETURN FALSE;
9584 END disabled_for_refresh;
9585
9586 --
9587 -- handle CX for those nodes which have no corresponding
9588 -- records in table CZ_UI_PAGE_ELEMENTS
9589 --
9590 PROCEDURE handle_CXs IS
9591
9592 l_ui_intl_text_id CZ_INTL_TEXTS.intl_text_id%TYPE;
9593 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9594 l_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9595 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
9596 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
9597 l_invalid_flag VARCHAR2(1);
9598
9599 BEGIN
9600
9601
9602 FOR i in (SELECT DISTINCT page_id
9603 FROM cz_ui_page_elements
9604 WHERE ui_def_Id = g_UI_Context.ui_def_id
9605 AND element_type = G_UI_CX_BUTTON_NODE_TYPE
9606 AND deleted_flag = G_NO_FLAG)
9607 LOOP
9608 --DEBUG('asp: Marking page ' || i.page_id || ', ' || g_UI_Context.ui_def_id || ' for refresh ');
9609 mark_UI_Page_As_Refreshed(i.page_id, g_UI_Context.ui_def_id);
9610 END LOOP;
9611
9612
9613 FOR i in (SELECT b.data_value, b.expr_node_id, a.INSTANTIATION_SCOPE, a.NAME,
9614 (SELECT persistent_node_id
9615 FROM CZ_PS_NODES
9616 WHERE devl_project_id = g_UI_Context.devl_project_id
9617 AND ps_node_id = a.component_id) persistent_node_Id
9618 FROM CZ_RULES a, CZ_EXPRESSION_NODES b
9619 WHERE a.devl_project_id=g_UI_Context.devl_project_id AND
9620 a.rule_type=G_CZ_EXTENTSIONS_RULE_TYPE AND
9621 b.rule_id=a.rule_id AND
9622 b.argument_signature_id=G_EVENT_ON_COMMAND_SIGID AND
9623 b.data_value IS NOT NULL AND
9624 b.last_update_date > g_UI_Context.UI_TIMESTAMP_REFRESH)
9625 LOOP
9626 BEGIN
9627
9628 SELECT e.element_id INTO l_element_id
9629 FROM CZ_UI_PAGE_ELEMENTS e
9630 WHERE ui_def_id = g_UI_Context.ui_def_id AND
9631 persistent_node_id = i.persistent_node_id AND
9632 element_type = G_UI_CX_BUTTON_NODE_TYPE AND
9633 deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
9634 EXISTS (SELECT NULL FROM CZ_UI_ACTIONS a
9635 WHERE a.ui_def_id = e.ui_def_id AND
9636 a.source_page_id = e.page_id AND
9637 a.element_id = e.element_id AND
9638 a.deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE) AND
9639 a.cx_command_name = i.data_value);
9640 EXCEPTION
9641 WHEN NO_DATA_FOUND THEN
9642 -- No button for the action; Create one
9643 FOR j in (SELECT *
9644 FROM CZ_UI_PAGE_ELEMENTS e
9645 WHERE ui_def_id = g_UI_Context.ui_def_id AND
9646 persistent_node_id = i.persistent_node_id AND
9647 deleted_flag NOT IN (G_YES_FLAG, G_MARK_TO_DELETE))
9648 LOOP
9649 IF NOT disabled_for_refresh(j) THEN
9650 l_ps_node := get_Model_Node_By_Persist_id(i.persistent_node_id, g_UI_Context.devl_project_id);
9651 add_CX_button(l_ps_node, j);
9652 EXIT;
9653 END IF;
9654 END LOOP;
9655 END;
9656 END LOOP;
9657 END handle_CXs;
9658
9659 --
9660 -- create single UI element
9661 --
9662 FUNCTION create_UI_Element(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
9663 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9664 p_insert_index IN NUMBER DEFAULT -1)
9665 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
9666
9667 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
9668 l_node_exists_in_ui VARCHAR2(1);
9669 l_counter NUMBER;
9670 l_parent_seq_nbr NUMBER;
9671 l_max_prev_seq_nbr NUMBER;
9672
9673 BEGIN
9674
9675 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9676 RETURN l_ui_node;
9677 END IF;
9678
9679 BEGIN
9680 SELECT G_YES_FLAG INTO l_node_exists_in_ui FROM dual
9681 WHERE EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
9682 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9683 page_id=p_parent_ui_node.page_id AND
9684 parent_element_id=p_parent_ui_node.element_id AND
9685 persistent_node_id=p_node.persistent_node_id AND
9686 element_type IS NULL AND deleted_flag=G_NO_FLAG);
9687 RETURN l_ui_node;
9688 EXCEPTION
9689 WHEN NO_DATA_FOUND THEN
9690 NULL;
9691 END;
9692
9693 l_ui_node.ui_def_id := p_parent_ui_node.ui_def_id;
9694 l_ui_node.persistent_node_id := p_node.persistent_node_id;
9695 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
9696
9697 l_ui_node.region_persistent_node_id := p_parent_ui_node.region_persistent_node_id;
9698 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
9699 l_ui_node.page_id := p_parent_ui_node.page_id;
9700
9701 IF p_insert_index > 0 THEN
9702 l_max_prev_seq_nbr := p_insert_index-1;
9703 l_ui_node.seq_nbr := p_insert_index;
9704 ELSE
9705 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
9706 START WITH ui_def_id=g_UI_Context.ui_def_id AND
9707 page_id=p_parent_ui_node.page_id AND
9708 element_id=p_parent_ui_node.element_id AND
9709 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
9710 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
9711 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
9712 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
9713 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
9714 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9715
9716 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
9717 END IF;
9718
9719 UPDATE CZ_UI_PAGE_ELEMENTS
9720 SET seq_nbr=seq_nbr+1
9721 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9722 page_id=p_parent_ui_node.page_id AND
9723 seq_nbr>l_max_prev_seq_nbr AND
9724 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9725
9726 l_ui_node.element_id := get_Element_Id();
9727
9728 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
9729
9730 l_ui_node.ctrl_template_id := p_node.template_id;
9731 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
9732
9733 l_ui_node.element_type := G_UI_REGULAR_NODE_TYPE;
9734
9735 IF p_node.detailed_type_id=CZ_TYPES.UNON_COUNT_FEATURE_TYPEID THEN
9736 l_ui_node.element_type := G_UNON_COUNT_FEATURE_TYPEID;
9737 ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE_TYPEID THEN
9738 l_ui_node.element_type := G_UCOUNT_FEATURE_TYPEID;
9739 ELSIF p_node.detailed_type_id=CZ_TYPES.UCOUNT_FEATURE01_TYPEID THEN
9740 l_ui_node.element_type := G_UCOUNT_FEATURE01_TYPEID;
9741 ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_FEATURE_TYPEID THEN
9742 l_ui_node.element_type := G_UMINMAX_FEATURE_TYPEID;
9743 ELSIF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
9744 l_ui_node.element_type := G_UMINMAX_CONNECTOR_TYPEID;
9745 ELSE
9746 l_ui_node.element_type := G_UI_REGULAR_NODE_TYPE;
9747 END IF;
9748
9749 l_ui_node.instantiable_flag := p_node.instantiable_flag;
9750
9751 IF p_node.detailed_type_id=CZ_TYPES.UMINMAX_CONNECTOR THEN
9752 IF (p_node.maximum=1 AND p_node.minimum=0) THEN
9753 l_ui_node.instantiable_flag := G_OPTIONAL_INST_TYPE;
9754 ELSE
9755 l_ui_node.instantiable_flag := G_MINMAX_INST_TYPE;
9756 END IF;
9757 END IF;
9758
9759 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
9760 p_ps_node_id => p_node.ps_node_id,
9761 p_component_id => p_node.component_id,
9762 p_ps_node_type => p_node.ps_node_type);
9763 l_ui_node.element_signature_id := p_node.root_element_signature_id;
9764 l_ui_node.deleted_flag := G_MARK_TO_ADD;
9765
9766 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
9767 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9768 page_id=l_ui_node.page_id AND
9769 ctrl_template_id=l_ui_node.ctrl_template_id AND
9770 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9771
9772 l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
9773
9774 --DEBUG('asp:Inserting ' || l_ui_node.element_id || ' at seq ' || l_ui_node.seq_nbr);
9775
9776 INSERT INTO CZ_UI_PAGE_ELEMENTS
9777 (ui_def_id,
9778 persistent_node_id,
9779 parent_persistent_node_id,
9780 region_persistent_node_id,
9781 pagebase_persistent_node_id,
9782 page_id,
9783 seq_nbr,
9784 ctrl_template_id,
9785 element_id,
9786 parent_element_id,
9787 element_type,
9788 instantiable_flag,
9789 ctrl_template_ui_def_id,
9790 model_ref_expl_id,
9791 element_signature_id,
9792 name,
9793 deleted_flag)
9794 VALUES
9795 (l_ui_node.ui_def_id,
9796 l_ui_node.persistent_node_id,
9797 l_ui_node.parent_persistent_node_id,
9798 l_ui_node.region_persistent_node_id,
9799 l_ui_node.pagebase_persistent_node_id,
9800 l_ui_node.page_id,
9801 l_ui_node.seq_nbr,
9802 l_ui_node.ctrl_template_id,
9803 l_ui_node.element_id,
9804 l_ui_node.parent_element_id,
9805 l_ui_node.element_type,
9806 l_ui_node.instantiable_flag,
9807 l_ui_node.ctrl_template_ui_def_id,
9808 l_ui_node.model_ref_expl_id,
9809 l_ui_node.element_signature_id,
9810 l_ui_node.name,
9811 l_ui_node.deleted_flag);
9812
9813 --
9814 -- mark UI Page as refreshed
9815 --
9816 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
9817 add_CX_Button(p_node => p_node,
9818 p_ui_node => l_ui_node);
9819
9820 RETURN l_ui_node;
9821
9822 END create_UI_Element;
9823
9824 --
9825 -- add Instance Management Controls
9826 --
9827 PROCEDURE add_Instance_Controls(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9828 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9829 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
9830
9831 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9832 l_element_type CZ_UI_PAGE_ELEMENTS.element_type%TYPE;
9833 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
9834 l_parent_seq_nbr NUMBER;
9835 l_seq_nbr NUMBER;
9836 l_counter NUMBER;
9837 l_max_prev_seq_nbr NUMBER;
9838
9839 BEGIN
9840
9841 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9842 RETURN;
9843 END IF;
9844
9845 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
9846 START WITH ui_def_id=g_UI_Context.ui_def_id AND
9847 page_id=p_parent_ui_node.page_id AND
9848 element_id=p_parent_ui_node.element_id AND
9849 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
9850 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
9851 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
9852 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
9853 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
9854 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9855
9856 l_seq_nbr := l_max_prev_seq_nbr + 1;
9857
9858 UPDATE CZ_UI_PAGE_ELEMENTS
9859 SET seq_nbr=seq_nbr+1
9860 WHERE ui_def_id=g_UI_Context.ui_def_id AND
9861 page_id=p_parent_ui_node.page_id AND
9862 seq_nbr>l_max_prev_seq_nbr AND
9863 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
9864
9865 IF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
9866 l_element_type := G_UI_NONBOMADDINST_NODE_TYPE;
9867 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
9868 l_element_type := G_UI_BOMADDINST_NODE_TYPE;
9869 ELSE
9870 NULL;
9871 END IF;
9872
9873 l_element_id := get_Element_Id();
9874
9875 l_ui_node_name := get_UI_Node_Name(p_page_id => p_parent_ui_node.page_id,
9876 p_template_id => p_node.template_id,
9877 p_template_name => p_node.template_name);
9878
9879 INSERT INTO CZ_UI_PAGE_ELEMENTS
9880 (ui_def_id,
9881 persistent_node_id,
9882 parent_persistent_node_id,
9883 region_persistent_node_id,
9884 pagebase_persistent_node_id,
9885 page_id,
9886 seq_nbr,
9887 ctrl_template_id,
9888 element_id,
9889 parent_element_id,
9890 element_type,
9891 instantiable_flag,
9892 ctrl_template_ui_def_id,
9893 model_ref_expl_id,
9894 element_signature_id,
9895 name,
9896 deleted_flag)
9897 VALUES
9898 (p_ui_node.ui_def_id,
9899 p_ui_node.persistent_node_id,
9900 p_ui_node.parent_persistent_node_id,
9901 p_parent_ui_node.region_persistent_node_id,
9902 p_parent_ui_node.pagebase_persistent_node_id,
9903 p_parent_ui_node.page_id,
9904 l_seq_nbr,
9905 p_node.template_id,
9906 l_element_id,
9907 p_parent_ui_node.element_id,
9908 l_element_type,
9909 p_ui_node.instantiable_flag,
9910 p_node.template_ui_def_id,
9911 p_ui_node.model_ref_expl_id,
9912 p_node.root_element_signature_id,
9913 l_ui_node_name,
9914 G_MARK_DO_NOT_REFRESH);
9915
9916 -- delete drilldown associated with the same persistent_node_id
9917 --
9918 UPDATE CZ_UI_PAGE_ELEMENTS
9919 SET deleted_flag=G_MARK_TO_DELETE
9920 WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
9921 persistent_node_id=p_ui_node.persistent_node_id AND
9922 element_type=G_UI_PAGEDRILLDOWN_NODE_TYPE AND
9923 deleted_flag=G_NO_FLAG;
9924
9925 mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
9926
9927 END add_Instance_Controls;
9928
9929 --
9930 -- create Drilldown button
9931 --
9932 PROCEDURE create_Drilldown_Button(p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9933 p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
9934 p_page_set_id IN NUMBER) IS
9935
9936 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
9937 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
9938 l_seq_nbr CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
9939 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
9940
9941 BEGIN
9942
9943 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
9944 RETURN;
9945 END IF;
9946
9947 l_seq_nbr := get_Last_Seq_Nbr(p_parent_ui_node.element_id)+1;
9948
9949 l_element_id := get_Element_Id();
9950
9951 g_ELEMENT_COUNTER := g_ELEMENT_COUNTER + 1;
9952
9953 l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
9954
9955 IF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_IMAGE_TEMPLATE_ID THEN
9956 l_ui_node_name := 'Drilldown Image - '||TO_CHAR(l_seq_nbr);
9957 ELSIF g_DRILLDOWN_TEMPLATE_ID = G_DRILLDOWN_LABEL_TEMPLATE_ID THEN
9958 l_ui_node_name := 'Drilldown Label - '||TO_CHAR(l_seq_nbr);
9959 ELSE
9960 l_ui_node_name := 'Drilldown Button - '||TO_CHAR(l_seq_nbr);
9961 END IF;
9962
9963 INSERT INTO CZ_UI_PAGE_ELEMENTS
9964 (ui_def_id,
9965 persistent_node_id,
9966 parent_persistent_node_id,
9967 region_persistent_node_id,
9968 pagebase_persistent_node_id,
9969 page_id,
9970 seq_nbr,
9971 ctrl_template_id,
9972 element_id,
9973 parent_element_id,
9974 element_type,
9975 instantiable_flag,
9976 ctrl_template_ui_def_id,
9977 model_ref_expl_id,
9978 name,
9979 element_signature_id,
9980 deleted_flag)
9981 VALUES
9982 (p_parent_ui_node.ui_def_id,
9983 p_ui_node.persistent_node_id,
9984 p_ui_node.parent_persistent_node_id,
9985 p_parent_ui_node.region_persistent_node_id,
9986 p_parent_ui_node.pagebase_persistent_node_id,
9987 p_parent_ui_node.page_id,
9988 l_seq_nbr,
9989 g_DRILLDOWN_TEMPLATE_ID,
9990 l_element_id,
9991 p_parent_ui_node.element_id,
9992 G_UI_PAGEDRILLDOWN_NODE_TYPE,
9993 NULL,
9994 G_GLOBAL_TEMPLATES_UI_DEF_ID,
9995 NULL,
9996 l_ui_node_name,
9997 g_DRILLDOWN_ELEM_SIGNATURE_ID,
9998 G_MARK_TO_ADD);
9999
10000 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
10001 INSERT INTO CZ_UI_ACTIONS
10002 (ui_action_id,
10003 ui_def_id,
10004 source_page_id,
10005 context_component_id,
10006 element_id,
10007 ui_action_type,
10008 target_ui_def_id,
10009 target_persistent_node_id,
10010 target_node_path,
10011 target_page_set_id,
10012 target_page_id,
10013 target_expl_node_id,
10014 seeded_flag,
10015 deleted_flag)
10016 VALUES
10017 (l_ui_action_id,
10018 p_parent_ui_node.ui_def_id,
10019 p_parent_ui_node.page_id,
10020 p_parent_ui_node.region_persistent_node_id,
10021 l_element_id,
10022 G_ACTION_CONFIGURE_SUBCOMP,
10023 NULL,
10024 p_ui_node.persistent_node_id,
10025 TO_CHAR(p_ui_node.persistent_node_id),
10026 p_page_set_id,
10027 p_ui_node.page_id,
10028 p_ui_node.model_ref_expl_id,
10029 G_NO_FLAG,
10030 G_NO_FLAG);
10031
10032 mark_UI_Page_As_Refreshed(p_parent_ui_node.page_id, p_parent_ui_node.ui_def_id);
10033
10034 END create_Drilldown_Button;
10035
10036 --
10037 -- check : does this BOM node contain child BOM nodes
10038 --
10039 FUNCTION contains_BOM_Nodes(p_ps_node_id IN NUMBER)
10040 RETURN BOOLEAN IS
10041 l_ps_node_type NUMBER;
10042 BEGIN
10043
10044 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10045 WHERE ps_node_id=p_ps_node_id AND deleted_flag=G_NO_FLAG;
10046
10047 IF l_ps_node_type=G_REFERENCE_TYPE THEN
10048 RETURN TRUE;
10049 END IF;
10050
10051 FOR i IN (SELECT DISTINCT ps_node_type,reference_id FROM CZ_PS_NODES
10052 WHERE parent_id=p_ps_node_id AND
10053 deleted_flag=G_NO_FLAG AND ui_omit=G_NO_FLAG AND
10054 (ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE,G_BOM_STANDART_ITEM_TYPE) OR
10055 ps_node_type=G_REFERENCE_TYPE))
10056 LOOP
10057 IF i.ps_node_type=G_REFERENCE_TYPE THEN
10058 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
10059 WHERE ps_node_id=i.reference_id;
10060 IF l_ps_node_type=G_BOM_MODEL_TYPE THEN
10061 RETURN TRUE;
10062 END IF;
10063 ELSE
10064 RETURN TRUE;
10065 END IF;
10066 END LOOP;
10067 RETURN FALSE;
10068 END contains_BOM_Nodes;
10069
10070 PROCEDURE add_BOM_Node
10071 (
10072 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10073 p_page_id IN NUMBER,
10074 p_pagebase_expl_node_id IN NUMBER,
10075 p_parent_element_id IN VARCHAR2,
10076 p_pagebase_persistent_node_id IN NUMBER,
10077 p_check_child_bom_nodes IN VARCHAR2 DEFAULT NULL) IS
10078
10079 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10080 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10081 BEGIN
10082
10083 IF p_check_child_bom_nodes IS NULL OR p_check_child_bom_nodes=G_YES_FLAG THEN
10084 IF NOT(contains_BOM_Nodes(p_node.ps_node_id)) THEN
10085 RETURN;
10086 END IF;
10087 END IF;
10088
10089 l_bom_element_id := get_Element_Id();
10090
10091 l_ui_node_name := p_node.template_name||' - 1';
10092
10093 --DEBUG('asp:Inserting BOM Node ' || l_bom_element_id|| ' at seq ' || 1);
10094 --
10095 -- shift all UI elements down , because BOM table will have seq_nbr=1
10096 --
10097 UPDATE CZ_UI_PAGE_ELEMENTS
10098 SET seq_nbr=seq_nbr+1
10099 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=p_page_id AND
10100 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
10101
10102
10103 INSERT INTO CZ_UI_PAGE_ELEMENTS
10104 (ui_def_id,
10105 persistent_node_id,
10106 parent_persistent_node_id,
10107 region_persistent_node_id,
10108 pagebase_persistent_node_id,
10109 page_id,
10110 seq_nbr,
10111 ctrl_template_id,
10112 element_id,
10113 parent_element_id,
10114 element_type,
10115 instantiable_flag,
10116 ctrl_template_ui_def_id,
10117 model_ref_expl_id,
10118 element_signature_id,
10119 name,
10120 deleted_flag)
10121 VALUES
10122 (g_UI_Context.ui_def_id,
10123 p_node.persistent_node_id,
10124 p_node.parent_persistent_node_id,
10125 p_node.persistent_node_id,
10126 p_pagebase_persistent_node_id,
10127 p_page_id,
10128 1,
10129 p_node.template_id,
10130 l_bom_element_id,
10131 p_parent_element_id,
10132 G_UI_BOMADDINST_NODE_TYPE,
10133 p_node.instantiable_flag,
10134 p_node.template_ui_def_id,
10135 p_pagebase_expl_node_id,
10136 p_node.root_element_signature_id,
10137 l_ui_node_name,
10138 G_MARK_TO_ADD);
10139
10140 mark_UI_Page_As_Refreshed(p_page_id, g_UI_Context.ui_def_id);
10141
10142 END add_BOM_Node;
10143
10144 --
10145 -- get Parent Page Data ( page_set_id and page_id )
10146 --
10147 PROCEDURE get_Parent_Page_Data
10148 (
10149 p_parent_persistent_node_id IN NUMBER,
10150 p_parent_page_id IN NUMBER,
10151 x_page_set_id OUT NOCOPY NUMBER,
10152 x_page_id OUT NOCOPY NUMBER,
10153 x_parent_page_set_type OUT NOCOPY NUMBER,
10154 x_parent_page_ref_id OUT NOCOPY NUMBER,
10155 x_parent_node_depth OUT NOCOPY NUMBER
10156 ) IS
10157
10158 BEGIN
10159
10160 IF p_parent_persistent_node_id IS NOT NULL THEN
10161
10162 IF p_parent_page_id IS NULL THEN
10163
10164 SELECT MIN(page_id)
10165 INTO x_page_id
10166 FROM CZ_UI_PAGES
10167 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10168 persistent_node_id = p_parent_persistent_node_id AND
10169 NVL(split_seq_nbr,1)=1 AND
10170 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
10171
10172 IF x_page_id IS NULL THEN
10173 NULL;
10174 ELSE
10175 SELECT page_set_id INTO x_page_set_id
10176 FROM CZ_UI_PAGES
10177 WHERE page_id=x_page_id AND
10178 ui_def_id = g_UI_Context.ui_def_id;
10179 END IF;
10180
10181 ELSE
10182
10183 x_page_id := p_parent_page_id;
10184
10185 SELECT page_set_id INTO x_page_set_id
10186 FROM CZ_UI_PAGES
10187 WHERE page_id=p_parent_page_id AND
10188 ui_def_id = g_UI_Context.ui_def_id;
10189
10190 END IF;
10191
10192 BEGIN
10193
10194 SELECT MIN(page_ref_id)
10195 INTO x_parent_page_ref_id
10196 FROM CZ_UI_PAGE_REFS
10197 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10198 NVL(page_set_id,-1)=NVL(x_page_set_id,-1) AND
10199 target_page_id=x_page_id AND deleted_flag=G_NO_FLAG;
10200
10201 SELECT node_depth,page_ref_type INTO x_parent_node_depth, x_parent_page_set_type
10202 FROM CZ_UI_PAGE_REFS
10203 WHERE ui_def_id = g_UI_Context.ui_def_id AND
10204 page_ref_id=x_parent_page_ref_id;
10205 EXCEPTION
10206 WHEN NO_DATA_FOUND THEN
10207 IF x_page_set_id IS NOT NULL THEN
10208 SELECT page_set_type INTO x_parent_page_set_type FROM CZ_UI_PAGE_SETS
10209 WHERE ui_def_id = g_UI_Context.ui_def_id AND page_set_id=x_page_set_id;
10210 END IF;
10211 x_parent_node_depth := 1;
10212 END;
10213
10214 ELSE
10215
10216 x_page_set_id := NULL;
10217 x_page_id := NULL;
10218 x_parent_page_ref_id := NULL;
10219 x_parent_node_depth := 1;
10220 x_parent_page_set_type := NULL;
10221
10222 END IF;
10223
10224 END get_Parent_Page_Data;
10225
10226
10227 FUNCTION get_new_page_ref_seq(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10228 p_page_set_id IN NUMBER,
10229 p_parent_page_ref_id NUMBER) RETURN NUMBER IS
10230
10231 l_seq_nbr NUMBER;
10232
10233 BEGIN
10234
10235 --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name);
10236
10237 IF NOT g_using_new_UI_refresh THEN
10238 SELECT COUNT(*)+1 INTO l_seq_nbr
10239 FROM CZ_UI_PAGE_REFS
10240 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10241 page_set_id = p_page_set_id AND
10242 parent_page_ref_id=p_parent_page_ref_id AND
10243 deleted_flag=G_NO_FLAG;
10244
10245 RETURN l_seq_nbr;
10246 END IF;
10247
10248 IF p_node.tree_seq = 1 THEN
10249 RETURN 1;
10250 ELSE
10251 BEGIN
10252 --DEBUG('asp: Getting seq_nbr for ps node ' || p_node.name || ', tree_seq ' || p_node.tree_seq);
10253 FOR i IN 1..p_node.tree_seq-1
10254 LOOP
10255 FOR j in (SELECT persistent_node_id
10256 FROM CZ_PS_NODES
10257 WHERE devl_project_id = g_UI_Context.devl_project_id
10258 AND parent_id = p_node.parent_id
10259 AND tree_seq = p_node.tree_seq-i
10260 AND deleted_flag = G_NO_FLAG)
10261 LOOP
10262 --DEBUG('asp: predecessor persistent_node_id = ' || l_predecessor_persistent_id);
10263
10264 SELECT NVL(max(seq_nbr), 0) INTO l_seq_nbr
10265 FROM CZ_UI_PAGE_REFS
10266 WHERE ui_def_id = g_UI_Context.ui_def_id
10267 AND page_set_id = p_page_set_id
10268 AND parent_page_ref_id = p_parent_page_ref_id
10269 AND target_persistent_node_id = j.persistent_node_id
10270 AND deleted_flag = G_NO_FLAG;
10271
10272 --DEBUG('asp: max predecessorseq_nbr = ' || l_seq_nbr);
10273
10274 IF l_seq_nbr > 0 THEN
10275 l_seq_nbr := l_seq_nbr + 1;
10276 RETURN l_seq_nbr;
10277 END IF;
10278 END LOOP;
10279 END LOOP;
10280
10281 -- node of the predecesors found in cz_ui_page_refs
10282 RETURN 1;
10283
10284 EXCEPTION
10285 WHEN NO_DATA_FOUND THEN
10286 -- seq_nbrs in cz_ps_nodes are not correct
10287 SELECT NVL(count(*), 0) + 1 INTO l_seq_nbr
10288 FROM CZ_UI_PAGE_REFS
10289 WHERE ui_def_id = g_UI_Context.ui_def_Id
10290 AND page_set_id = p_page_set_id
10291 AND parent_page_ref_id = p_parent_page_ref_id
10292 AND deleted_flag = G_NO_FLAG;
10293
10294 RETURN l_seq_nbr;
10295 END;
10296 END IF;
10297
10298 END get_new_page_ref_seq;
10299
10300 --
10301 -- create new UI page
10302 --
10303 FUNCTION create_UI_Page(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10304 x_page_set_id OUT NOCOPY NUMBER,
10305 x_page_set_type OUT NOCOPY NUMBER,
10306 x_page_ref_id OUT NOCOPY NUMBER,
10307 p_parent_page_id IN NUMBER DEFAULT NULL)
10308 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10309
10310 l_page_node CZ_UI_PAGES%ROWTYPE;
10311 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10312 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10313 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10314 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10315 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
10316 l_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
10317 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
10318 l_last_page_id CZ_UI_PAGES.page_id%TYPE;
10319 l_parent_page_id CZ_UI_PAGES.page_id%TYPE;
10320 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
10321 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10322 l_ref_pagebase_path CZ_UI_PAGE_REFS.target_path%TYPE;
10323 l_parent_ui_page_node CZ_UI_PAGES%ROWTYPE;
10324 l_ui_page_set_node CZ_UI_PAGE_SETS%ROWTYPE;
10325 l_parent_page_persistent_id NUMBER;
10326 l_page_counter NUMBER;
10327 l_pagebase_expl_node_id NUMBER;
10328 l_is_inst_node BOOLEAN := FALSE;
10329 l_is_drilldown_node BOOLEAN := FALSE;
10330 l_create_page_ref BOOLEAN := TRUE;
10331 l_is_page BOOLEAN := TRUE;
10332
10333 BEGIN
10334
10335 l_is_page := is_UI_Page(p_node, l_is_drilldown_node);
10336
10337 IF l_is_page=FALSE THEN
10338 RETURN l_page_ui_node ;
10339 END IF;
10340
10341 IF g_UI_Context.control_layout=1 THEN
10342 G_CONTAINER_TEMPLATE_ID := G_2COLS_CONTAINER_TEMPLATE_ID;
10343 ELSIF g_UI_Context.control_layout=2 THEN
10344 G_CONTAINER_TEMPLATE_ID := G_3COLS_CONTAINER_TEMPLATE_ID;
10345 END IF;
10346
10347 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) OR
10348 p_node.virtual_flag=G_NO_FLAG THEN
10349
10350 l_is_inst_node := TRUE;
10351
10352 END IF;
10353
10354 l_pagebase_expl_node_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
10355 p_ps_node_id => p_node.ps_node_id,
10356 p_component_id => p_node.component_id,
10357 p_ps_node_type => p_node.ps_node_type);
10358
10359 -- In cases where a node is to added to a region because of
10360 -- max_siblings test, the parent UI node may not be bound to the parent
10361 -- of the new ps node. In such a case, the parent_page_id passed in
10362 -- may not be that of the parent_ps_node. So we pass in a NULL p_parent_page_id to
10363 -- get_Parent_page_data so that the right parent_page_id is found and the new
10364 -- page is added under the correct parent in page refs
10365
10366 l_parent_page_id := p_parent_page_id;
10367 l_parent_page_persistent_id := p_node.parent_persistent_node_id;
10368
10369 IF l_parent_page_id IS NOT NULL THEN
10370 BEGIN
10371
10372 SELECT persistent_node_id INTO l_parent_page_persistent_id
10373 FROM CZ_UI_PAGES
10374 WHERE ui_Def_id = g_UI_Context.ui_def_id
10375 AND page_id = l_parent_page_id;
10376
10377 IF NOT l_parent_page_persistent_id = p_node.parent_persistent_node_id THEN
10378 l_parent_page_id := NULL;
10379 END IF;
10380 EXCEPTION
10381 WHEN NO_DATA_FOUND THEN
10382 l_parent_page_id := NULL;
10383 END;
10384 END IF;
10385
10386 get_Parent_Page_Data(p_parent_persistent_node_id => l_parent_page_persistent_id,
10387 p_parent_page_id => l_parent_page_id,
10388 x_page_set_id => l_page_set_id,
10389 x_page_id => l_last_page_id,
10390 x_parent_page_set_type => l_page_set_type,
10391 x_parent_page_ref_id => l_parent_page_ref_id,
10392 x_parent_node_depth => l_node_depth);
10393
10394 l_node_depth := l_node_depth + 1;
10395 IF l_page_set_type IS NULL THEN
10396 l_page_set_type := g_UI_Context.PRIMARY_NAVIGATION;
10397 END IF;
10398
10399 --
10400 -- if it is root model node or nonvirtual model node
10401 -- then create new Page Set
10402 --
10403 -- create a new Page Set
10404 -- List of enumerated Page Set types :
10405 -- 1 - PAGE_FLOW
10406 -- 2 - SINGLE_LEVEL_MENU
10407 -- 3 - MULTI_LEVEL_MENU
10408 -- 4 - MODEL_TREE_MENU
10409 --
10410 IF (p_node.parent_id IS NULL OR
10411 (p_node.virtual_flag=G_NO_FLAG AND
10412 g_UI_Context.PRIMARY_NAVIGATION NOT IN (G_MODEL_TREE_MENU))) AND
10413 g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_SINGLE_PAGE) THEN
10414
10415 create_Page_Set(p_ui_def_id => g_UI_Context.ui_def_id,
10416 p_page_set_type => l_page_set_type,
10417 p_persistent_node_id => p_node.persistent_node_id,
10418 p_model_ref_expl_id => l_pagebase_expl_node_id,
10419 x_page_set_id => l_page_set_id);
10420
10421 l_node_depth := 1;
10422 l_seq_nbr := 1;
10423 l_parent_page_ref_id := NULL;
10424
10425 END IF;
10426
10427 --
10428 -- get num of this page in this UI
10429 --
10430 l_page_counter := get_Page_Counter() + 1;
10431
10432 l_page_node.page_id := allocateId('CZ_UI_PAGES_S');
10433 l_page_node.ui_def_id := g_UI_Context.ui_def_id;
10434 l_page_node.NAME := 'Page-'||TO_CHAR(l_page_counter);
10435 l_page_node.persistent_node_id := p_node.persistent_node_id;
10436 l_page_node.jrad_doc := generate_JRAD_Page_Name(l_page_counter);
10437
10438 IF l_is_drilldown_node OR g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE)THEN
10439 l_page_node.page_set_id := NULL;
10440 ELSE
10441 l_page_node.page_set_id := l_page_set_id;
10442 END IF;
10443
10444 l_page_node.split_seq_nbr := 1;
10445 l_page_node.caption_source := G_DEFAULT_CAPTION_RULE_ID;
10446
10447 l_page_node.pagebase_path := get_Page_Path(p_node.ps_node_id);
10448
10449 l_page_node.pagebase_expl_node_id := l_pagebase_expl_node_id;
10450 l_page_node.seeded_flag := G_NO_FLAG;
10451 l_page_node.deleted_flag := G_MARK_TO_ADD;
10452
10453 INSERT INTO CZ_UI_PAGES
10454 (page_id,
10455 ui_def_id,
10456 NAME,
10457 persistent_node_id,
10458 jrad_doc,
10459 page_set_id,
10460 split_seq_nbr,
10461 caption_source,
10462 pagebase_path,
10463 pagebase_expl_node_id,
10464 page_rev_nbr,
10465 seeded_flag,
10466 page_status_template_id,
10467 page_status_templ_uidef_id,
10468 caption_rule_id,
10469 deleted_flag)
10470 VALUES
10471 (l_page_node.page_id ,
10472 l_page_node.ui_def_id,
10473 l_page_node.NAME,
10474 l_page_node.persistent_node_id,
10475 l_page_node.jrad_doc,
10476 l_page_node.page_set_id,
10477 l_page_node.split_seq_nbr,
10478 l_page_node.caption_source,
10479 l_page_node.pagebase_path,
10480 l_page_node.pagebase_expl_node_id,
10481 1,
10482 l_page_node.seeded_flag,
10483 g_PAGE_STATUS_TEMPLATE_ID,
10484 G_GLOBAL_TEMPLATES_UI_DEF_ID,
10485 NULL,
10486 l_page_node.deleted_flag);
10487
10488 --
10489 -- add new UI page to cache
10490 --
10491 g_ui_pages_tbl(l_page_node.page_id) := l_page_node;
10492
10493 l_page_ui_node.ui_def_id := g_UI_Context.ui_def_id;
10494 l_page_ui_node.persistent_node_id := p_node.persistent_node_id;
10495 l_page_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
10496 l_page_ui_node.region_persistent_node_id := p_node.persistent_node_id;
10497 l_page_ui_node.pagebase_persistent_node_id := p_node.persistent_node_id;
10498 l_page_ui_node.page_id := l_page_node.page_id;
10499 l_page_ui_node.seq_nbr := 0;
10500 l_page_ui_node.ctrl_template_id := G_CONTAINER_TEMPLATE_ID;
10501 l_page_ui_node.element_id := get_Element_Id();
10502 l_page_ui_node.parent_element_id := NULL;
10503 l_page_ui_node.element_type := G_UI_PAGE_NODE_TYPE;
10504 l_page_ui_node.instantiable_flag := p_node.instantiable_flag;
10505 l_page_ui_node.ctrl_template_ui_def_id := G_GLOBAL_TEMPLATES_UI_DEF_ID;
10506 l_page_ui_node.model_ref_expl_id := l_page_node.pagebase_expl_node_id;
10507 l_page_ui_node.base_page_flag := G_YES_FLAG;
10508
10509 l_page_ui_node.deleted_flag := G_MARK_TO_ADD;
10510
10511 g_ELEMENT_COUNTER := 0;
10512 l_page_ui_node.name := 'Page Region - 1';
10513
10514 INSERT INTO CZ_UI_PAGE_ELEMENTS
10515 (ui_def_id,
10516 persistent_node_id,
10517 parent_persistent_node_id,
10518 region_persistent_node_id,
10519 pagebase_persistent_node_id,
10520 page_id,
10521 seq_nbr,
10522 ctrl_template_id,
10523 element_id,
10524 parent_element_id,
10525 element_type,
10526 instantiable_flag,
10527 ctrl_template_ui_def_id,
10528 model_ref_expl_id,
10529 base_page_flag,
10530 element_signature_id,
10531 name,
10532 deleted_flag)
10533 VALUES
10534 (l_page_ui_node.ui_def_id,
10535 l_page_ui_node.persistent_node_id,
10536 l_page_ui_node.parent_persistent_node_id,
10537 l_page_ui_node.region_persistent_node_id,
10538 l_page_ui_node.pagebase_persistent_node_id,
10539 l_page_ui_node.page_id,
10540 l_page_ui_node.seq_nbr,
10541 l_page_ui_node.ctrl_template_id,
10542 l_page_ui_node.element_id,
10543 l_page_ui_node.parent_element_id,
10544 l_page_ui_node.element_type,
10545 l_page_ui_node.instantiable_flag,
10546 l_page_ui_node.ctrl_template_ui_def_id,
10547 l_page_ui_node.model_ref_expl_id,
10548 l_page_ui_node.base_page_flag,
10549 6004,
10550 l_page_ui_node.name,
10551 l_page_ui_node.deleted_flag);
10552
10553 IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) AND
10554 NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
10555
10556 -- AND contains_BOM_Nodes(p_node) THEN -- related to bug #3622010
10557
10558 add_BOM_Node(p_node => p_node,
10559 p_page_id => l_page_ui_node.page_id,
10560 p_pagebase_expl_node_id => l_page_node.pagebase_expl_node_id,
10561 p_parent_element_id => l_page_ui_node.element_id,
10562 p_pagebase_persistent_node_id => l_page_ui_node.pagebase_persistent_node_id);
10563
10564 END IF;
10565
10566 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
10567 add_CX_Button(p_node => p_node,
10568 p_ui_node => l_page_ui_node);
10569 END IF;
10570
10571 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
10572 FOR i IN(SELECT *
10573 FROM CZ_UI_PAGE_ELEMENTS
10574 WHERE ui_def_id=l_page_ui_node.ui_def_id AND
10575 page_id=l_last_page_id AND
10576 persistent_node_id=l_page_ui_node.parent_persistent_node_id AND
10577 element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
10578 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
10579 LOOP
10580 IF NVL(i.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
10581 IF l_is_inst_node THEN
10582 add_Instance_Controls(p_ui_node => l_page_ui_node,
10583 p_parent_ui_node => i,
10584 p_node => p_node);
10585 END IF;
10586 IF l_is_drilldown_node AND l_is_inst_node=FALSE THEN
10587 create_Drilldown_Button(p_parent_ui_node => i,
10588 p_ui_node => l_page_ui_node,
10589 p_page_set_id => l_page_set_id);
10590 END IF;
10591 END IF;
10592 END LOOP;
10593 END IF;
10594 --
10595 -- at this point UI page is already created ,but
10596 -- is not attached to any Page Sets yet
10597 --
10598
10599 IF l_is_drilldown_node=FALSE THEN
10600
10601 FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
10602 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10603 page_set_id=l_page_set_id AND
10604 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
10605 LOOP
10606
10607 /******** attach new UI Page to Page Set *********************/
10608 BEGIN
10609
10610 --
10611 -- create a new record for this UI page in CZ_UI_PAGE_REFS
10612 --
10613 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
10614
10615 l_ref_pagebase_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
10616
10617 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
10618
10619 SELECT COUNT(*)+1 INTO l_seq_nbr
10620 FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
10621 deleted_flag=G_NO_FLAG;
10622
10623 ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
10624
10625
10626 l_seq_nbr := get_new_page_ref_seq(p_node, l_page_set_id, l_parent_page_ref_id);
10627
10628 UPDATE CZ_UI_PAGE_REFS
10629 SET seq_nbr = seq_nbr + 1
10630 WHERE ui_def_id = g_UI_Context.ui_def_id
10631 AND page_set_id = l_page_set_id
10632 AND parent_page_ref_id = l_parent_page_ref_id
10633 AND seq_nbr >= l_seq_nbr
10634 AND deleted_flag = G_NO_FLAG;
10635
10636 ELSE
10637 IF l_seq_nbr IS NULL THEN
10638 l_seq_nbr :=p_node.tree_seq;
10639 END IF;
10640 END IF;
10641
10642 INSERT INTO CZ_UI_PAGE_REFS
10643 (ui_def_id,
10644 page_set_id,
10645 page_ref_id,
10646 parent_page_ref_id,
10647 seq_nbr,
10648 node_depth,
10649 condition_id,
10650 NAME,
10651 caption_source,
10652 target_persistent_node_id,
10653 target_path,
10654 target_ui_def_id,
10655 target_page_set_id,
10656 target_page_id,
10657 modified_flags,
10658 path_to_prev_page,
10659 path_to_next_page,
10660 page_ref_type,
10661 target_expl_node_id,
10662 caption_rule_id,
10663 deleted_flag)
10664 VALUES
10665 (g_UI_Context.ui_def_id,
10666 l_page_set_id,
10667 l_page_ref_id,
10668 l_parent_page_ref_id,
10669 l_seq_nbr,
10670 l_node_depth,
10671 NULL,
10672 p_node.name,
10673 G_DEFAULT_CAPTION_RULE_ID,
10674 p_node.persistent_node_id,
10675 l_ref_pagebase_path,
10676 NULL,
10677 NULL,
10678 l_page_ui_node.page_id,
10679 0,
10680 NULL,
10681 NULL,
10682 l_page_set_type,
10683 l_page_node.pagebase_expl_node_id,
10684 NULL,
10685 G_NO_FLAG);
10686
10687 EXCEPTION
10688 WHEN OTHERS THEN
10689 DEBUG('create_UI_Page() : '||SQLERRM);
10690 NULL;
10691 END;
10692
10693 /******** end of attaching to Page Set *********************/
10694
10695 x_page_set_id := l_page_set_id;
10696 x_page_set_type := l_page_set_type;
10697 x_page_ref_id := l_page_ref_id;
10698 END LOOP;
10699
10700 END IF;
10701
10702 RETURN l_page_ui_node;
10703
10704 END create_UI_Page;
10705
10706 --
10707 -- create nested Region
10708 --
10709 FUNCTION create_UI_Region(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10710 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
10711 p_insert_index IN NUMBER DEFAULT -1)
10712 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10713
10714 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10715 l_bom_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
10716 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
10717 l_counter NUMBER;
10718 l_parent_seq_nbr NUMBER;
10719 l_last_seq_nbr NUMBER;
10720 l_prev_seq_nbr NUMBER;
10721 l_max_prev_seq_nbr NUMBER;
10722 l_child_count NUMBER;
10723 l_page_id NUMBER;
10724
10725 BEGIN
10726
10727 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10728 RETURN l_ui_node;
10729 END IF;
10730
10731 -- do not create UI region if already exists UI page with the same persistent_node_id
10732 BEGIN
10733 SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
10734 WHERE ui_def_id=g_UI_CONTEXT.ui_def_id AND persistent_node_id=p_node.persistent_node_id AND
10735 deleted_flag NOT IN (G_YES_FLAG,G_MARK_TO_DELETE, G_LIMBO_FLAG) AND rownum<2;
10736 RETURN l_ui_node;
10737 EXCEPTION
10738 WHEN NO_DATA_FOUND THEN
10739 NULL;
10740 END;
10741 l_ui_node.ui_def_id := g_UI_Context.ui_def_id;
10742 l_ui_node.persistent_node_id := p_node.persistent_node_id;
10743 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
10744 l_ui_node.region_persistent_node_id := p_node.persistent_node_id;
10745 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.persistent_node_id;
10746 l_ui_node.page_id := p_parent_ui_node.page_id;
10747
10748 IF p_insert_index = -1 THEN
10749 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
10750 START WITH ui_def_id=g_UI_Context.ui_def_id AND
10751 page_id=p_parent_ui_node.page_id AND
10752 element_id=p_parent_ui_node.element_id AND
10753 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10754 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10755 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10756 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10757 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10758 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10759 ELSE
10760 l_max_prev_seq_nbr := p_insert_index-1;
10761 END IF;
10762
10763 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
10764
10765 UPDATE CZ_UI_PAGE_ELEMENTS
10766 SET seq_nbr=seq_nbr+1
10767 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10768 page_id=p_parent_ui_node.page_id AND
10769 seq_nbr>l_max_prev_seq_nbr AND
10770 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10771
10772 l_ui_node.element_id := get_Element_Id();
10773
10774 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
10775
10776 l_ui_node.element_type := G_UI_REGION_NODE_TYPE;
10777 l_ui_node.instantiable_flag := p_node.instantiable_flag;
10778 l_ui_node.ctrl_template_id := G_NSTD_CONTAINER_TEMPLATE_ID;
10779 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
10780 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
10781 p_ps_node_id => p_node.ps_node_id,
10782 p_component_id => p_node.component_id,
10783 p_ps_node_type => p_node.ps_node_type);
10784 l_ui_node.element_signature_id := 6007;
10785 l_ui_node.deleted_flag := G_MARK_TO_ADD;
10786
10787 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10788 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10789 page_id=l_ui_node.page_id AND
10790 ctrl_template_id=l_ui_node.ctrl_template_id AND
10791 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10792
10793 l_ui_node.name :='Nested Region - '||TO_CHAR(l_counter);
10794
10795 INSERT INTO CZ_UI_PAGE_ELEMENTS
10796 (ui_def_id,
10797 persistent_node_id,
10798 parent_persistent_node_id,
10799 region_persistent_node_id,
10800 pagebase_persistent_node_id,
10801 page_id,
10802 seq_nbr,
10803 ctrl_template_id,
10804 element_id,
10805 parent_element_id,
10806 element_type,
10807 instantiable_flag,
10808 ctrl_template_ui_def_id,
10809 model_ref_expl_id,
10810 element_signature_id,
10811 name,
10812 deleted_flag)
10813 VALUES
10814 (l_ui_node.ui_def_id,
10815 l_ui_node.persistent_node_id,
10816 l_ui_node.parent_persistent_node_id,
10817 l_ui_node.region_persistent_node_id,
10818 l_ui_node.pagebase_persistent_node_id,
10819 l_ui_node.page_id,
10820 l_ui_node.seq_nbr,
10821 l_ui_node.ctrl_template_id,
10822 l_ui_node.element_id,
10823 l_ui_node.parent_element_id,
10824 l_ui_node.element_type,
10825 l_ui_node.instantiable_flag,
10826 l_ui_node.ctrl_template_ui_def_id,
10827 l_ui_node.model_ref_expl_id,
10828 l_ui_node.element_signature_id,
10829 l_ui_node.name,
10830 l_ui_node.deleted_flag);
10831
10832 --
10833 -- add UI Elements node to cache
10834 --
10835 g_ui_page_elements_tbl(TO_NUMBER(l_ui_node.element_id)) := l_ui_node;
10836
10837 IF p_node.ps_node_type IN(G_BOM_MODEL_TYPE, G_BOM_OPTION_CLASS_TYPE) THEN
10838 add_BOM_Node(p_node => p_node,
10839 p_page_id => l_ui_node.page_id,
10840 p_pagebase_expl_node_id => l_ui_node.model_ref_expl_id,
10841 p_parent_element_id => l_ui_node.element_id,
10842 p_pagebase_persistent_node_id => l_ui_node.pagebase_persistent_node_id);
10843
10844 END IF;
10845
10846 --
10847 -- mark UI Page as refreshed
10848 --
10849 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
10850 add_CX_Button(p_node => p_node,
10851 p_ui_node => l_ui_node);
10852
10853 RETURN l_ui_node;
10854
10855 END create_UI_Region;
10856
10857 --
10858 -- create new UI Reference
10859 --
10860 FUNCTION create_UI_Reference(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
10861 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE)
10862 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
10863
10864 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
10865 l_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
10866 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
10867 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
10868 l_ui_action_id CZ_UI_ACTIONS.ui_action_id%TYPE;
10869 l_max_seq_nbr CZ_UI_PAGE_ELEMENTS.seq_nbr%TYPE;
10870 l_ps_node_type CZ_PS_NODES.ps_node_type%TYPE;
10871 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
10872 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
10873 l_counter NUMBER;
10874 l_persistent_node_id NUMBER;
10875 l_seq_nbr NUMBER;
10876 l_max_prev_seq_nbr NUMBER;
10877
10878 BEGIN
10879
10880 IF p_parent_ui_node.suppress_refresh_flag=G_YES_FLAG THEN
10881 RETURN l_ui_node;
10882 END IF;
10883
10884 --
10885 -- get UI Def data of referenced UI
10886 --
10887 l_target_ui_def_node := get_Target_UI_Context(p_ui_def_node => g_UI_Context,
10888 p_reference_id => p_node.reference_id);
10889
10890 l_ui_node.model_ref_expl_id := get_Expl_Id(p_model_id => p_node.devl_project_id,
10891 p_ps_node_id => p_node.ps_node_id,
10892 p_component_id => p_node.component_id,
10893 p_ps_node_type => p_node.ps_node_type);
10894
10895 l_ui_node.ui_def_id := p_parent_ui_node.ui_def_id;
10896 l_ui_node.persistent_node_id := p_node.persistent_node_id;
10897 l_ui_node.parent_persistent_node_id := p_node.parent_persistent_node_id;
10898 l_ui_node.region_persistent_node_id := p_parent_ui_node.region_persistent_node_id;
10899 l_ui_node.pagebase_persistent_node_id := p_parent_ui_node.pagebase_persistent_node_id;
10900 l_ui_node.page_id := p_parent_ui_node.page_id;
10901
10902
10903 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
10904 START WITH ui_def_id=g_UI_Context.ui_def_id AND
10905 page_id=p_parent_ui_node.page_id AND
10906 element_id=p_parent_ui_node.element_id AND
10907 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE)
10908 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
10909 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= p_parent_ui_node.page_id
10910 AND page_id=p_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
10911 PRIOR deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
10912 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10913
10914 l_ui_node.seq_nbr := l_max_prev_seq_nbr + 1;
10915
10916 UPDATE CZ_UI_PAGE_ELEMENTS
10917 SET seq_nbr=seq_nbr+1
10918 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10919 page_id=p_parent_ui_node.page_id AND
10920 seq_nbr>l_max_prev_seq_nbr AND
10921 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10922
10923
10924 l_ui_node.ctrl_template_id := p_node.template_id;
10925 l_ui_node.element_id := get_Element_Id();
10926 l_ui_node.parent_element_id := p_parent_ui_node.element_id;
10927
10928 IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
10929 l_ui_node.element_type := G_UI_DRILLDOWN_NODE_TYPE;
10930 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_COMPONENT_TYPEID,CZ_TYPES.UMINMAX_COMPONENT_TYPEID) THEN
10931 l_ui_node.element_type := G_UI_NONBOMADDINST_NODE_TYPE;
10932 ELSIF p_node.detailed_type_id IN(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID) THEN
10933 l_ui_node.element_type := G_UI_BOMADDINST_NODE_TYPE;
10934 ELSE
10935 NULL;
10936 END IF;
10937
10938 l_ui_node.instantiable_flag := p_node.instantiable_flag;
10939 l_ui_node.ctrl_template_ui_def_id := p_node.template_ui_def_id;
10940 l_ui_node.element_signature_id := p_node.root_element_signature_id;
10941 l_ui_node.deleted_flag := G_MARK_TO_ADD;
10942
10943 SELECT COUNT(element_id)+1 INTO l_counter FROM CZ_UI_PAGE_ELEMENTS
10944 WHERE ui_def_id=g_UI_Context.ui_def_id AND
10945 page_id=l_ui_node.page_id AND
10946 ctrl_template_id=l_ui_node.ctrl_template_id AND
10947 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
10948
10949 l_ui_node.name := p_node.template_name||' - '||TO_CHAR(l_counter);
10950
10951 --
10952 -- special handling for BOM referencies
10953 --
10954
10955 IF p_node.detailed_type_id IN(CZ_TYPES.UMANDATORY_REF_TYPEID) THEN
10956 BEGIN
10957
10958 SELECT NVL(MAX(seq_nbr),0) INTO l_max_seq_nbr
10959 FROM CZ_UI_PAGE_ELEMENTS
10960 WHERE ui_def_id=l_ui_node.ui_def_id
10961 AND parent_element_id=l_ui_node.parent_element_id
10962 AND deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD)
10963 AND element_type IN(G_UI_BOMADDINST_NODE_TYPE);
10964
10965 SELECT persistent_node_id INTO l_persistent_node_id
10966 FROM CZ_UI_PAGE_ELEMENTS
10967 WHERE ui_def_id=l_ui_node.ui_def_id AND
10968 parent_element_id=l_ui_node.parent_element_id AND
10969 seq_nbr=l_max_seq_nbr AND
10970 ROWNUM<2;
10971
10972 l_ps_node := get_Model_Node_By_Persist_Id(l_persistent_node_id,g_UI_COntext.devl_project_id);
10973
10974 SELECT ps_node_type INTO l_ps_node_type
10975 FROM CZ_PS_NODES
10976 WHERE devl_project_id=p_node.reference_id AND
10977 parent_id IS NULL AND
10978 deleted_flag=G_NO_FLAG;
10979
10980 IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
10981 (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
10982 l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
10983 l_ui_node.ctrl_template_id := NULL;
10984 l_ui_node.ctrl_template_ui_def_id := NULL;
10985 END IF;
10986
10987 EXCEPTION
10988 WHEN OTHERS THEN
10989 DEBUG('create_UI_Reference() : '||SQLERRM);
10990 END;
10991 END IF;
10992
10993 --
10994 -- model nodes must have associated record in CZ_UI_PAGE_ELEMENTS
10995 --
10996 INSERT INTO CZ_UI_PAGE_ELEMENTS
10997 (ui_def_id,
10998 persistent_node_id,
10999 parent_persistent_node_id,
11000 region_persistent_node_id,
11001 pagebase_persistent_node_id,
11002 page_id,
11003 seq_nbr,
11004 ctrl_template_id,
11005 element_id,
11006 parent_element_id,
11007 element_type,
11008 instantiable_flag,
11009 ctrl_template_ui_def_id,
11010 model_ref_expl_id,
11011 element_signature_id,
11012 name,
11013 deleted_flag)
11014 VALUES
11015 (l_ui_node.ui_def_id,
11016 l_ui_node.persistent_node_id,
11017 l_ui_node.parent_persistent_node_id,
11018 l_ui_node.region_persistent_node_id,
11019 l_ui_node.pagebase_persistent_node_id,
11020 l_ui_node.page_id,
11021 l_ui_node.seq_nbr,
11022 l_ui_node.ctrl_template_id,
11023 l_ui_node.element_id,
11024 l_ui_node.parent_element_id,
11025 l_ui_node.element_type,
11026 l_ui_node.instantiable_flag,
11027 l_ui_node.ctrl_template_ui_def_id,
11028 l_ui_node.model_ref_expl_id,
11029 l_ui_node.element_signature_id,
11030 l_ui_node.name,
11031 l_ui_node.deleted_flag);
11032
11033 BEGIN
11034
11035 UPDATE CZ_UI_REFS
11036 SET deleted_flag=G_NO_FLAG
11037 WHERE
11038 ui_def_id = l_ui_node.ui_def_id AND
11039 ref_persistent_node_id = l_ui_node.persistent_node_id;
11040
11041 IF SQL%ROWCOUNT=0 THEN
11042 INSERT INTO CZ_UI_REFS
11043 (ui_def_id,
11044 ref_ui_def_id,
11045 ref_persistent_node_id,
11046 model_ref_expl_id,
11047 deleted_flag)
11048 VALUES
11049 (l_ui_node.ui_def_id,
11050 l_target_ui_def_node.ui_def_id,
11051 l_ui_node.persistent_node_id,
11052 l_ui_node.model_ref_expl_id,
11053 G_NO_FLAG);
11054 END IF;
11055
11056 EXCEPTION
11057 WHEN OTHERS THEN
11058 NULL;
11059 END;
11060
11061 l_ui_action_id := allocateId('CZ_UI_ACTIONS_S');
11062 INSERT INTO CZ_UI_ACTIONS
11063 (ui_action_id,
11064 ui_def_id,
11065 source_page_id,
11066 context_component_id,
11067 element_id,
11068 ui_action_type,
11069 target_ui_def_id,
11070 target_persistent_node_id,
11071 target_node_path,
11072 target_page_set_id,
11073 target_page_id,
11074 target_expl_node_id,
11075 seeded_flag,
11076 deleted_flag)
11077 VALUES
11078 (l_ui_action_id,
11079 l_ui_node.ui_def_id,
11080 l_ui_node.page_id,
11081 l_ui_node.region_persistent_node_id,
11082 l_ui_node.element_id,
11083 G_ACTION_CONFIGURE_SUBCOMP,
11084 l_target_ui_def_node.ui_def_id,
11085 p_node.persistent_node_id,
11086 TO_CHAR(p_node.persistent_node_id),
11087 l_target_ui_def_node.page_set_id,
11088 l_target_ui_def_node.start_page_id,
11089 l_ui_node.model_ref_expl_id,
11090 G_NO_FLAG,
11091 G_NO_FLAG);
11092
11093 add_CX_Button(p_node => p_node,
11094 p_ui_node => l_ui_node);
11095
11096 --
11097 -- mark UI Page as refreshed
11098 --
11099 mark_UI_Page_As_Refreshed(l_ui_node.page_id, l_ui_node.ui_def_id);
11100
11101 IF NOT(l_target_ui_def_node.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU AND
11102 g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU) THEN
11103 RETURN l_ui_node;
11104 END IF;
11105
11106 BEGIN
11107 l_page_ref_node := get_UI_Page_Ref_Node(p_ui_node => p_parent_ui_node);
11108 EXCEPTION
11109 WHEN NO_DATA_FOUND THEN
11110 RETURN l_ui_node;
11111 END;
11112
11113 FOR m IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
11114 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11115 page_set_id=l_page_ref_node.page_set_id AND
11116 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11117 LOOP
11118
11119 --
11120 -- create a new record for this UI page in CZ_UI_PAGE_REFS
11121 --
11122 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
11123
11124 IF l_target_ui_def_node.start_page_id=-1 THEN
11125
11126 SELECT MIN(page_id) INTO l_target_ui_def_node.start_page_id
11127 FROM CZ_UI_PAGES
11128 WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND
11129 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
11130
11131 SELECT MIN(page_set_id) INTO l_target_ui_def_node.page_set_id
11132 FROM CZ_UI_PAGE_SETS
11133 WHERE ui_def_id=l_target_ui_def_node.ui_def_id AND deleted_flag=G_NO_FLAG;
11134
11135 END IF;
11136
11137 l_target_path := get_Page_Path(p_node.ps_node_id,l_page_ref_node.page_set_id);
11138
11139 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_LEVEL_MENU) THEN
11140 SELECT COUNT(*)+1 INTO l_seq_nbr
11141 FROM CZ_UI_PAGE_REFS WHERE ui_def_id=g_UI_Context.ui_def_id AND
11142 deleted_flag=G_NO_FLAG;
11143 ELSIF g_UI_Context.PRIMARY_NAVIGATION IN(G_MODEL_TREE_MENU) THEN
11144
11145 l_seq_nbr := get_new_page_ref_seq(p_node, l_page_ref_node.page_set_id, l_page_ref_node.page_ref_id);
11146
11147 UPDATE CZ_UI_PAGE_REFS
11148 SET seq_nbr = seq_nbr + 1
11149 WHERE ui_def_id = g_UI_Context.ui_def_id
11150 AND page_set_id = l_page_ref_node.page_set_id
11151 AND parent_page_ref_id = l_page_ref_node.page_ref_id
11152 AND seq_nbr >= l_seq_nbr
11153 AND deleted_flag = G_NO_FLAG;
11154 ELSE
11155 l_seq_nbr :=p_node.tree_seq;
11156 END IF;
11157
11158 INSERT INTO CZ_UI_PAGE_REFS
11159 (ui_def_id,
11160 page_set_id,
11161 page_ref_id,
11162 parent_page_ref_id,
11163 seq_nbr,
11164 node_depth,
11165 NAME,
11166 caption_source,
11167 target_persistent_node_id,
11168 target_path,
11169 target_ui_def_id,
11170 target_page_set_id,
11171 target_page_id,
11172 modified_flags,
11173 page_ref_type,
11174 target_expl_node_id,
11175 caption_rule_id,
11176 deleted_flag)
11177 VALUES
11178 (l_ui_node.ui_def_id,
11179 l_page_ref_node.page_set_id,
11180 l_page_ref_id,
11181 l_page_ref_node.page_ref_id,
11182 l_seq_nbr,
11183 l_page_ref_node.node_depth+1,
11184 p_node.NAME,
11185 G_DEFAULT_CAPTION_RULE_ID,
11186 p_node.persistent_node_id,
11187 l_target_path,
11188 l_target_ui_def_node.ui_def_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.ui_def_id,
11189 l_target_ui_def_node.page_set_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.page_set_id,
11190 l_target_ui_def_node.start_page_id, --NULL, -- request from Alok -- old code l_target_ui_def_node.start_page_id,
11191 0,
11192 l_page_ref_node.page_ref_type,
11193 l_ui_node.model_ref_expl_id,
11194 NULL,
11195 G_NO_FLAG);
11196
11197 END LOOP;
11198
11199 RETURN l_ui_node;
11200
11201 END create_UI_Reference;
11202
11203 --
11204 -- delete UI element recursively
11205 --
11206 PROCEDURE delete_UI_Element(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11207 p_suppress_refresh_flag IN CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE DEFAULT NULL,
11208 p_delete_in_model IN BOOLEAN DEFAULT NULL) IS
11209
11210 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11211 l_del_flag BOOLEAN := FALSE;
11212 BEGIN
11213
11214 --
11215 -- get suppress_refresh_flag flag of UI region to which this element
11216 -- belong to
11217 --
11218 IF p_suppress_refresh_flag IS NULL THEN
11219 FOR i IN (SELECT persistent_node_id,region_persistent_node_id,suppress_refresh_flag
11220 FROM CZ_UI_PAGE_ELEMENTS
11221 START WITH ui_def_id = p_ui_node.ui_def_id AND
11222 deleted_flag IN
11223 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11224 G_MARK_TO_DELETE) AND element_id = p_ui_node.element_id
11225 CONNECT BY PRIOR parent_element_id = element_id AND
11226 deleted_flag IN
11227 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11228 G_MARK_TO_DELETE) AND
11229 PRIOR deleted_flag IN
11230 (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,
11231 G_MARK_TO_DELETE))
11232 LOOP
11233 IF i.persistent_node_id=i.region_persistent_node_id THEN
11234 l_suppress_refresh_flag := i.suppress_refresh_flag;
11235 END IF;
11236 END LOOP;
11237 ELSE
11238 IF p_suppress_refresh_flag=G_YES_FLAG THEN
11239 l_suppress_refresh_flag := p_suppress_refresh_flag;
11240 ELSE
11241 l_suppress_refresh_flag := p_ui_node.suppress_refresh_flag;
11242 END IF;
11243 END IF;
11244
11245 --
11246 -- if suppress_refresh_flag = true (G_YES_FLAG) then
11247 -- node will be deleted
11248 -- else node will be deassiated from model node
11249 --
11250 IF NVL(l_suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
11251
11252 --
11253 -- delete UI element
11254 --
11255 UPDATE CZ_UI_PAGE_ELEMENTS
11256 SET deleted_flag = G_MARK_TO_DELETE
11257 WHERE ui_def_id = p_ui_node.ui_def_id AND
11258 element_id IN
11259 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11260 START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11261 CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND ui_def_id=p_ui_node.ui_def_id AND
11262 PRIOR element_id=parent_element_id AND
11263 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11264 PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11265
11266 l_del_flag := TRUE;
11267
11268 ELSE
11269 IF p_delete_in_model THEN
11270 --
11271 -- deassociate UI element from model node
11272 --
11273 UPDATE CZ_UI_PAGE_ELEMENTS
11274 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11275 persistent_node_id = 0
11276 WHERE ui_def_id = p_ui_node.ui_def_id AND
11277 element_id IN
11278 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
11279 START WITH ui_def_id=p_ui_node.ui_def_id AND element_id=p_ui_node.element_id
11280 CONNECT BY PRIOR ui_def_id=p_ui_node.ui_def_id AND
11281 PRIOR element_id=parent_element_id AND
11282 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE) AND
11283 PRIOR deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_DELETE));
11284 l_del_flag := TRUE;
11285 END IF;
11286 END IF;
11287
11288 IF l_del_flag THEN
11289 --
11290 -- delete UI Ref from Page Sets
11291 --
11292 UPDATE CZ_UI_PAGE_REFS
11293 SET deleted_flag = G_YES_FLAG
11294 WHERE ui_def_id=p_ui_node.ui_def_id AND
11295 target_persistent_node_id=p_ui_node.persistent_node_id AND
11296 deleted_flag=G_NO_FLAG AND
11297 target_page_id NOT IN(SELECT page_id FROM CZ_UI_PAGES
11298 WHERE ui_def_id=g_UI_Context.ui_def_id);
11299
11300 IF SQL%ROWCOUNT>0 THEN
11301 --
11302 -- delete UI Ref
11303 --
11304 UPDATE CZ_UI_REFS
11305 SET deleted_flag = G_YES_FLAG
11306 WHERE ui_def_id=p_ui_node.ui_def_id AND
11307 ref_persistent_node_id=p_ui_node.persistent_node_id AND
11308 deleted_flag=G_NO_FLAG AND NOT EXISTS
11309 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11310 WHERE ui_def_id=p_ui_node.ui_def_id AND
11311 persistent_node_id=p_ui_node.persistent_node_id AND
11312 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH));
11313 END IF;
11314
11315 END IF;
11316
11317 --
11318 -- mark UI Page as refreshed
11319 --
11320 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11321
11322 END delete_UI_Element;
11323
11324 --
11325 -- remove UI Page Ref record
11326 --
11327 PROCEDURE remove_UI_Page_Ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11328
11329 l_page_ref_id NUMBER;
11330 l_parent_page_ref_id NUMBER;
11331 l_page_set_id NUMBER;
11332 l_seq_nbr NUMBER;
11333
11334 BEGIN
11335
11336 SELECT MIN(page_ref_id) INTO l_page_ref_id
11337 FROM CZ_UI_PAGE_REFS
11338 WHERE ui_def_id=p_ui_node.ui_def_id AND
11339 target_page_id=p_ui_node.page_id AND
11340 deleted_flag=G_NO_FLAG;
11341
11342 UPDATE CZ_UI_PAGE_REFS
11343 SET deleted_flag = G_YES_FLAG
11344 WHERE ui_def_id=p_ui_node.ui_def_id AND
11345 page_ref_id=l_page_ref_id
11346 RETURNING parent_page_ref_id,page_set_id,seq_nbr
11347 INTO l_parent_page_ref_id,l_page_set_id,l_seq_nbr;
11348
11349
11350 --
11351 -- update seq nbr to seq nbr - 1
11352 --
11353 UPDATE CZ_UI_PAGE_REFS
11354 SET seq_nbr = seq_nbr - 1
11355 WHERE ui_def_id=p_ui_node.ui_def_id AND
11356 page_set_id=l_page_set_id AND
11357 parent_page_ref_id = l_parent_page_ref_id AND
11358 seq_nbr > l_seq_nbr AND
11359 deleted_flag=G_NO_FLAG;
11360
11361
11362 EXCEPTION
11363 WHEN OTHERS THEN
11364 NULL;
11365 END remove_UI_Page_Ref;
11366
11367 PROCEDURE delete_Related_Buttons(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11368 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11369 BEGIN
11370
11371 FOR i IN(SELECT element_id,parent_element_id,page_id,suppress_refresh_flag
11372 FROM CZ_UI_PAGE_ELEMENTS a
11373 WHERE ui_def_id=p_ui_node.ui_def_id AND
11374 persistent_node_id=p_ui_node.persistent_node_id AND
11375 element_type IN(G_UI_BOMADDINST_NODE_TYPE,
11376 G_UI_NONBOMADDINST_NODE_TYPE,
11377 G_UI_PAGEDRILLDOWN_NODE_TYPE) AND
11378 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG))
11379 LOOP
11380
11381 IF i.parent_element_id IS NOT NULL THEN
11382 BEGIN
11383 l_suppress_refresh_flag := G_NO_FLAG;
11384 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11385 FROM CZ_UI_PAGE_ELEMENTS
11386 WHERE ui_def_id = p_ui_node.ui_def_id AND
11387 page_id = i.page_id AND
11388 element_id=i.parent_element_id;
11389 EXCEPTION
11390 WHEN NO_DATA_FOUND THEN
11391 NULL;
11392 END;
11393 END IF;
11394
11395 IF l_suppress_refresh_flag=G_YES_FLAG OR i.suppress_refresh_flag=G_YES_FLAG THEN
11396 UPDATE CZ_UI_PAGE_ELEMENTS
11397 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11398 persistent_node_id=0
11399 WHERE ui_def_id = p_ui_node.ui_def_id AND
11400 page_id = i.page_id AND
11401 element_id = i.element_id;
11402 ELSE
11403 UPDATE CZ_UI_PAGE_ELEMENTS
11404 SET deleted_flag = G_MARK_TO_DELETE
11405 WHERE ui_def_id = p_ui_node.ui_def_id AND
11406 page_id = i.page_id AND
11407 element_id = i.element_id;
11408 END IF;
11409
11410 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11411
11412 END LOOP;
11413
11414 END delete_Related_Buttons;
11415
11416 --
11417 -- delete UI container
11418 --
11419 PROCEDURE delete_UI_Container(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11420 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
11421 l_element_id_tbl varchar_tbl_type;
11422 l_parent_element_id_tbl varchar_tbl_type;
11423 l_persistent_node_id_tbl number_tbl_type;
11424 l_suppress_refresh_flag_tbl varchar_tbl_type;
11425 l_page_id_tbl number_tbl_type;
11426 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11427
11428 BEGIN
11429
11430 --
11431 -- if it's a page remove page and corresponding UI Page ref record
11432 --
11433 IF p_ui_node.parent_element_id IS NULL THEN
11434
11435 SELECT element_id, parent_element_id, persistent_node_id,page_id, NVL(suppress_refresh_flag,G_NO_FLAG)
11436 BULK COLLECT INTO l_element_id_tbl, l_parent_element_id_tbl, l_persistent_node_id_tbl,
11437 l_page_id_tbl, l_suppress_refresh_flag_tbl
11438 FROM CZ_UI_PAGE_ELEMENTS
11439 WHERE ui_def_id=p_ui_node.ui_def_id AND
11440 page_id=p_ui_node.page_id AND
11441 deleted_flag NOT IN(G_YES_FLAG);
11442
11443 delete_Related_Buttons(p_ui_node);
11444
11445 --
11446 -- mark this UI Page as deleted
11447 --
11448 mark_UI_Page_As_Deleted(p_ui_node.page_id, p_ui_node.ui_def_id);
11449
11450 --
11451 -- remove corresponding UI page ref record
11452 --
11453 remove_UI_Page_Ref(p_ui_node);
11454
11455 ELSE
11456
11457 SELECT element_id,persistent_node_id,page_id, suppress_refresh_flag
11458 BULK COLLECT INTO l_element_id_tbl, l_persistent_node_id_tbl,
11459 l_page_id_tbl, l_suppress_refresh_flag_tbl
11460 FROM CZ_UI_PAGE_ELEMENTS
11461 START WITH ui_def_id=p_ui_node.ui_def_id AND
11462 page_id=p_ui_node.page_id AND
11463 element_id=p_ui_node.element_id
11464 CONNECT BY PRIOR element_id=parent_element_id AND
11465 ui_def_id=p_ui_node.ui_def_id AND PRIOR
11466 ui_def_id=p_ui_node.ui_def_id;
11467
11468 mark_UI_Page_As_Refreshed(p_ui_node.page_id, p_ui_node.ui_def_id);
11469
11470 END IF;
11471
11472 IF l_element_id_tbl.COUNT=0 THEN
11473 RETURN;
11474 END IF;
11475
11476 FOR i IN l_element_id_tbl.FIRST..l_element_id_tbl.LAST
11477 LOOP
11478
11479 BEGIN
11480 l_suppress_refresh_flag := G_NO_FLAG;
11481 IF l_parent_element_id_tbl(i) IS NOT NULL THEN
11482 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
11483 FROM CZ_UI_PAGE_ELEMENTS
11484 WHERE ui_def_id = p_ui_node.ui_def_id AND
11485 page_id = p_ui_node.page_id AND
11486 element_id=l_parent_element_id_tbl(i);
11487 END IF;
11488 EXCEPTION
11489 WHEN NO_DATA_FOUND THEN
11490 NULL;
11491 END;
11492
11493 IF l_suppress_refresh_flag=G_YES_FLAG OR l_suppress_refresh_flag_tbl(i)=G_YES_FLAG THEN
11494 UPDATE CZ_UI_PAGE_ELEMENTS
11495 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
11496 persistent_node_id=0
11497 WHERE ui_def_id = p_ui_node.ui_def_id AND
11498 page_id = p_ui_node.page_id AND
11499 element_id = l_element_id_tbl(i);
11500 ELSE
11501 UPDATE CZ_UI_PAGE_ELEMENTS
11502 SET deleted_flag = G_MARK_TO_DELETE
11503 WHERE ui_def_id = p_ui_node.ui_def_id AND
11504 page_id = p_ui_node.page_id AND
11505 element_id = l_element_id_tbl(i);
11506 END IF;
11507
11508 UPDATE CZ_UI_ACTIONS
11509 SET deleted_flag=G_YES_FLAG
11510 WHERE ui_def_id=p_ui_node.ui_def_id AND
11511 source_page_id=p_ui_node.page_id AND
11512 element_id=l_element_id_tbl(i);
11513 END LOOP;
11514
11515 END delete_UI_Container;
11516
11517 PROCEDURE handle_Deleted_Nodes(p_ui_def_id IN NUMBER) IS
11518
11519 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
11520
11521 BEGIN
11522
11523 -- delete UI References
11524 UPDATE CZ_UI_PAGE_REFS uiref
11525 SET deleted_flag=G_YES_FLAG
11526 WHERE ui_def_id=p_ui_def_id AND target_ui_def_id IS NOT NULL AND
11527 NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
11528 WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
11529 WHERE b.ui_def_id=p_ui_def_id) AND
11530 persistent_node_id=uiref.target_persistent_node_id AND deleted_flag=G_NO_FLAG)
11531 AND deleted_flag=G_NO_FLAG;
11532
11533 UPDATE CZ_UI_REFS uiref
11534 SET deleted_flag=G_YES_FLAG
11535 WHERE ui_def_id=p_ui_def_id AND
11536 NOT EXISTS(SELECT NULL FROM CZ_PS_NODES a
11537 WHERE a.devl_project_id=(SELECT b.devl_project_id FROM CZ_UI_DEFS b
11538 WHERE b.ui_def_id=p_ui_def_id) AND
11539 persistent_node_id=uiref.ref_persistent_node_id AND deleted_flag=G_NO_FLAG)
11540 AND deleted_flag=G_NO_FLAG;
11541
11542 END handle_Deleted_Nodes;
11543
11544 --
11545 -- delete UI page
11546 --
11547 PROCEDURE delete_UI_Page(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11548
11549 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
11550 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11551 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
11552 l_path_to_next_page CZ_UI_PAGE_REFS.path_to_next_page%TYPE;
11553 l_target_persistent_node_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
11554 l_target_page_id CZ_UI_PAGE_REFS.target_page_id%TYPE;
11555 l_ui_page_ref_node CZ_UI_PAGE_REFS%ROWTYPE;
11556 l_ui_page_node CZ_UI_PAGES%ROWTYPE;
11557 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11558
11559
11560 BEGIN
11561 --
11562 -- delete all child UI nodes
11563 --
11564 delete_UI_Container(p_ui_node);
11565
11566 END delete_UI_Page;
11567
11568 --
11569 -- delete UI region
11570 --
11571 PROCEDURE delete_UI_Region(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
11572 BEGIN
11573 delete_UI_Container(p_ui_node);
11574 END delete_UI_Region;
11575
11576
11577 PROCEDURE replace_page_ref_target_path(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11578 p_page_id IN CZ_UI_PAGES.page_id%TYPE) IS
11579
11580 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
11581 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
11582 l_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11583 l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11584
11585 BEGIN
11586
11587 SELECT page_set_id,pagebase_path INTO l_page_set_id,l_old_page_path_from_root FROM CZ_UI_PAGES
11588 WHERE page_id=p_page_id AND ui_def_id=g_UI_Context.ui_def_id;
11589
11590 l_target_path := get_Page_Path(p_node.ps_node_id, l_page_set_id);
11591 l_page_path_from_root := get_Page_Path(p_node.ps_node_id, NULL);
11592
11593 IF l_page_path_from_root <> l_old_page_path_from_root THEN
11594 UPDATE CZ_UI_PAGES
11595 SET pagebase_path=l_page_path_from_root,
11596 deleted_flag=DECODE(deleted_flag,G_MARK_TO_ADD,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
11597 WHERE page_id=p_page_id AND
11598 ui_def_id=g_UI_Context.ui_def_id AND
11599 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
11600
11601 IF SQL%ROWCOUNT>0 THEN
11602 --DEBUG('asp: updating target path 3 for page ' || p_page_id || ' to ' || l_target_path);
11603 UPDATE CZ_UI_PAGE_REFS
11604 SET target_path=l_target_path
11605 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11606 target_page_id=p_page_id;
11607 END IF;
11608 END IF;
11609
11610 END replace_page_ref_target_path;
11611
11612 PROCEDURE replace_page_ref_target_path(p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11613 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
11614 BEGIN
11615
11616 IF p_node.ps_node_type = G_REFERENCE_TYPE AND
11617 g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
11618
11619 FOR i in (SELECT page_set_id, page_ref_id
11620 FROM CZ_UI_PAGE_REFS
11621 WHERE ui_def_id = g_UI_Context.ui_def_id
11622 AND target_ui_def_id IS NOT NULL
11623 AND target_page_id IS NOT NULL
11624 AND target_persistent_node_id = p_node.persistent_node_id
11625 AND deleted_flag = G_NO_FLAG)
11626
11627 LOOP
11628 l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
11629 --DEBUG('asp: updating target path 10 for page ref ' || i.page_ref_id || ' to ' || l_target_path);
11630 UPDATE CZ_UI_PAGE_REFS
11631 SET target_path=l_target_path
11632 WHERE ui_def_id=g_UI_Context.ui_def_id
11633 AND page_set_id = i.page_set_id
11634 AND page_ref_id = i.page_ref_id;
11635 END LOOP;
11636
11637 ELSE
11638 FOR i in (SELECT page_id
11639 FROM CZ_UI_PAGES
11640 WHERE ui_def_id = g_UI_Context.ui_def_id
11641 AND persistent_node_id = p_node.persistent_node_id
11642 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
11643 LOOP
11644 replace_page_ref_target_path(p_node, i.page_id);
11645 END LOOP;
11646 END IF;
11647 END replace_page_ref_target_path;
11648
11649
11650 PROCEDURE replace_page_ref_target_path(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11651 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11652
11653 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
11654 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
11655 l_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11656 l_old_page_path_from_root CZ_UI_PAGE_REFS.target_path%TYPE;
11657
11658 BEGIN
11659
11660 replace_page_ref_target_path(p_node, p_ui_node.page_id);
11661
11662 END replace_page_ref_target_path;
11663
11664 PROCEDURE move_page_ref(p_page_set_id IN CZ_UI_PAGE_REFS.page_set_id%TYPE,
11665 p_page_ref_id IN CZ_UI_PAGE_REFS.page_ref_id%TYPE,
11666 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11667 x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
11668
11669
11670 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
11671 l_new_parent_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
11672 l_node_depth CZ_UI_PAGE_REFS.node_depth%TYPE;
11673 l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
11674
11675 BEGIN
11676
11677 x_new_parent_page_ref_id := NULL;
11678
11679
11680 IF p_page_set_id IS NOT NULL THEN
11681 SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
11682 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=p_page_set_id;
11683 END IF;
11684
11685 BEGIN
11686 SELECT page_ref_type, node_depth
11687 INTO l_page_ref_type, l_node_depth
11688 FROM CZ_UI_PAGE_REFS
11689 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11690 page_ref_id=p_page_ref_id AND
11691 deleted_flag=G_NO_FLAG;
11692
11693 -- get new parent page ref id
11694 BEGIN
11695 SELECT MIN(page_ref_id)
11696 INTO x_new_parent_page_ref_id
11697 FROM CZ_UI_PAGE_REFS
11698 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11699 target_persistent_node_id=p_node.parent_persistent_node_id AND
11700 deleted_flag=G_NO_FLAG;
11701
11702 SELECT node_depth
11703 INTO l_new_parent_node_depth
11704 FROM CZ_UI_PAGE_REFS
11705 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11706 page_ref_id=x_new_parent_page_ref_id;
11707
11708 EXCEPTION
11709 WHEN NO_DATA_FOUND THEN
11710 NULL;
11711 END;
11712
11713 IF x_new_parent_page_ref_id IS NULL THEN -- parent node does not exists in CZ_UI_PAGE_REFS
11714
11715 IF l_page_ref_type IN (G_MODEL_TREE_MENU) AND p_node.parent_id IS NOT NULL THEN
11716 --DEBUG('asp: Deleting page_ref 5 ' || p_page_ref_id);
11717 UPDATE CZ_UI_PAGE_REFS
11718 SET deleted_flag=G_YES_FLAG
11719 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11720 page_ref_id=p_page_ref_id AND
11721 deleted_flag=G_NO_FLAG;
11722 END IF;
11723
11724 ELSE
11725
11726 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11727 --DEBUG('asp: Setting parent_page_ref_id of page ref ' || p_page_ref_id || ' to ' || x_new_parent_page_ref_id);
11728 --DEBUG('asp: Setting seq_nbr of page ref ' || p_page_ref_id || ' to ' || p_node.tree_seq);
11729 UPDATE CZ_UI_PAGE_REFS
11730 SET parent_page_ref_id = x_new_parent_page_ref_id,
11731 seq_nbr = p_node.tree_seq
11732 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11733 page_ref_id=p_page_ref_id;
11734
11735 UPDATE CZ_UI_PAGE_REFS
11736 SET node_depth = node_depth + (l_new_parent_node_depth-l_node_depth) + 1
11737 WHERE (ui_def_id,page_ref_id) IN
11738 (SELECT ui_def_id,page_ref_id FROM CZ_UI_PAGE_REFS
11739 START WITH ui_def_id=g_UI_Context.ui_def_id AND page_ref_id=p_page_ref_id
11740 CONNECT BY PRIOR page_ref_id=parent_page_ref_id AND
11741 ui_def_id=g_UI_Context.ui_def_id AND PRIOR ui_def_id=g_UI_Context.ui_def_id AND
11742 deleted_flag=G_NO_FLAG AND PRIOR deleted_flag=G_NO_FLAG);
11743
11744 END IF;
11745
11746 EXCEPTION
11747 WHEN OTHERS THEN
11748 NULL;
11749 END;
11750
11751 END move_page_ref;
11752
11753
11754 PROCEDURE move_page_ref(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11755 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
11756 x_new_parent_page_ref_id OUT NOCOPY CZ_UI_PAGE_REFS.page_ref_id%TYPE) IS
11757
11758 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
11759 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11760
11761 BEGIN
11762
11763 BEGIN
11764
11765 SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
11766 WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
11767
11768 SELECT page_ref_id, parent_page_ref_id
11769 INTO l_page_ref_id, x_new_parent_page_ref_id
11770 FROM CZ_UI_PAGE_REFS
11771 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11772 page_set_id = l_page_set_id AND
11773 target_page_id = p_ui_node.page_id AND
11774 deleted_flag=G_NO_FLAG AND
11775 rownum < 2;
11776
11777 IF p_node.parent_persistent_node_id <> p_ui_node.parent_persistent_node_id THEN
11778 move_page_ref(l_page_set_id, l_page_ref_id, p_node, x_new_parent_page_ref_id);
11779 END IF;
11780 EXCEPTION
11781 WHEN NO_DATA_FOUND THEN
11782 NULL;
11783 END;
11784 END move_page_ref;
11785
11786 --
11787 -- change instantiability of Page
11788 --
11789 PROCEDURE check_Page_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
11790 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
11791
11792 l_changed_pages_tbl number_tbl_type;
11793 l_persistent_node_id_tbl number_tbl_type;
11794 l_ps_node_id_tb number_tbl_type;
11795 l_component_id_tbl number_tbl_type;
11796 l_ps_node_type_tbl number_tbl_type;
11797 l_page_set_id CZ_UI_PAGE_REFS.page_set_id%TYPE;
11798 l_parent_ref_persist_id CZ_UI_PAGE_REFS.target_persistent_node_id%TYPE;
11799 l_new_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
11800 l_curr_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
11801 l_page_set_suppress_flag CZ_UI_PAGE_SETS.suppress_refresh_flag%TYPE;
11802 l_mark_flag CZ_UI_PAGE_ELEMENTS.deleted_flag%TYPE;
11803 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
11804
11805 BEGIN
11806
11807 SELECT page_set_id INTO l_page_set_id FROM CZ_UI_PAGES
11808 WHERE page_id=p_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
11809
11810 IF l_page_set_id IS NOT NULL THEN
11811 SELECT suppress_refresh_flag INTO l_page_set_suppress_flag FROM CZ_UI_PAGE_SETS
11812 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_set_id=l_page_set_id;
11813 END IF;
11814
11815 move_page_ref(p_ui_node, p_node, l_new_parent_page_ref_id);
11816
11817 IF p_node.parent_persistent_node_id<>p_ui_node.parent_persistent_node_id AND
11818 p_ui_node.instantiable_flag=p_node.instantiable_flag AND
11819 p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE,G_MANDATORY_INST_TYPE) THEN
11820
11821 FOR i IN(SELECT page_id,element_id,parent_element_id,suppress_refresh_flag FROM CZ_UI_PAGE_ELEMENTS
11822 WHERE ui_def_id=p_ui_node.ui_def_id AND
11823 persistent_node_id=p_ui_node.parent_persistent_node_id AND
11824 ((region_persistent_node_id=persistent_node_id OR
11825 pagebase_persistent_node_id=persistent_node_id) AND
11826 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11827 ,G_NSTD_CONTAINER_TEMPLATE_ID
11828 ,G_2COLS_CONTAINER_TEMPLATE_ID
11829 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
11830 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11831 LOOP
11832 IF i.suppress_refresh_flag=G_YES_FLAG THEN
11833 UPDATE CZ_UI_PAGE_ELEMENTS
11834 SET deleted_flag=G_MARK_TO_DEASSOCIATE,
11835 persistent_node_id=0
11836 WHERE ui_def_id=p_ui_node.ui_def_id AND
11837 page_id=i.page_id AND
11838 persistent_node_id=p_ui_node.persistent_node_id AND
11839 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
11840 G_UI_BOMADDINST_NODE_TYPE,
11841 G_UI_PAGEDRILLDOWN_NODE_TYPE);
11842 ELSE
11843 UPDATE CZ_UI_PAGE_ELEMENTS
11844 SET deleted_flag=G_MARK_TO_DELETE
11845 WHERE ui_def_id=p_ui_node.ui_def_id AND
11846 page_id=i.page_id AND
11847 persistent_node_id=p_ui_node.persistent_node_id AND
11848 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,
11849 G_UI_BOMADDINST_NODE_TYPE,
11850 G_UI_PAGEDRILLDOWN_NODE_TYPE);
11851 END IF;
11852
11853 mark_UI_Page_As_Refreshed(i.page_id, p_ui_node.ui_def_id);
11854
11855 END LOOP;
11856
11857 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
11858 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11859 persistent_node_id=p_node.parent_persistent_node_id AND
11860 ((region_persistent_node_id=persistent_node_id OR
11861 pagebase_persistent_node_id=persistent_node_id) AND
11862 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11863 ,G_NSTD_CONTAINER_TEMPLATE_ID
11864 ,G_2COLS_CONTAINER_TEMPLATE_ID
11865 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
11866 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11867 LOOP
11868 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11869 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) THEN
11870 --
11871 -- add new Instance Management COntrol to the parent UI Page
11872 --
11873 add_Instance_Controls(p_ui_node => p_ui_node,
11874 p_parent_ui_node => parent_ui_node,
11875 p_node => p_node);
11876 ELSE -- MANDATORY
11877 IF l_new_parent_page_ref_id IS NULL THEN
11878 create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
11879 p_ui_node => p_ui_node,
11880 p_page_set_id => l_page_set_id);
11881 END IF;
11882 END IF;
11883 END IF;
11884 END LOOP;
11885
11886 END IF; -- end of IF p_node.parent_persistent_node_id<> ...
11887
11888 --
11889 -- (n,m)/(0,1) => (1,1)
11890 --
11891 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11892 p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
11893
11894 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11895
11896 --
11897 -- remove all Instance Management Controls with a given
11898 -- persistent_node_id = p_ui_node.persistent_node_id
11899 --
11900 remove_Instance_Controls(p_ui_node);
11901
11902 IF g_UI_Context.PRIMARY_NAVIGATION IN(G_SINGLE_PAGE,G_SUBTABS) OR
11903 l_new_parent_page_ref_id IS NULL THEN
11904
11905 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
11906 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11907 persistent_node_id=p_node.parent_persistent_node_id AND
11908 (region_persistent_node_id=persistent_node_id OR
11909 pagebase_persistent_node_id=persistent_node_id) AND
11910 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11911 ,G_NSTD_CONTAINER_TEMPLATE_ID
11912 ,G_2COLS_CONTAINER_TEMPLATE_ID
11913 ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
11914 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
11915 LOOP
11916 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
11917 create_Drilldown_Button(p_parent_ui_node => parent_ui_node,
11918 p_ui_node => p_ui_node,
11919 p_page_set_id => l_page_set_id);
11920 END IF;
11921 END LOOP;
11922
11923 END IF;
11924
11925 --
11926 -- if navigation style is not Dynamic Tree Menu then
11927 -- merge parent and child Page Flows
11928 --
11929 IF g_UI_Context.PRIMARY_NAVIGATION<>G_MODEL_TREE_MENU AND l_page_set_id IS NOT NULL AND
11930 NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
11931 merge_Page_Flows(p_ui_node);
11932 END IF;
11933
11934 END IF;
11935
11936 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11937 p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
11938 p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
11939
11940 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
11941
11942 --
11943 -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
11944 -- CZ_PS_NODES.instantiable_flag
11945 --
11946 FOR n IN(SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS a
11947 WHERE ui_def_id=p_ui_node.ui_def_id AND
11948 persistent_node_id=p_ui_node.persistent_node_id AND
11949 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
11950 deleted_flag=G_NO_FLAG AND NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
11951 EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
11952 WHERE ui_def_id=p_ui_node.ui_def_id AND
11953 page_id=a.page_id AND
11954 element_id=a.parent_element_id AND
11955 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG)
11956 )
11957 LOOP
11958
11959 l_ui_node_name := get_UI_Node_Name(p_page_id => n.page_id,
11960 p_template_id => p_node.template_id,
11961 p_template_name => p_node.template_name);
11962
11963 UPDATE CZ_UI_PAGE_ELEMENTS a
11964 SET ctrl_template_id = p_node.template_id,
11965 ctrl_template_ui_def_id = p_node.template_ui_def_id,
11966 instantiable_flag = p_node.instantiable_flag,
11967 name=l_ui_node_name,
11968 deleted_flag=G_MARK_TO_REFRESH
11969 WHERE ui_def_id=n.ui_def_id AND
11970 page_id=n.page_id AND
11971 element_id=n.element_id;
11972
11973 IF SQL%ROWCOUNT > 0 THEN
11974 l_changed_pages_tbl(l_changed_pages_tbl.COUNT+1) := n.page_id;
11975 END IF;
11976 END LOOP;
11977
11978 IF l_changed_pages_tbl.COUNT>0 THEN
11979 FOR i IN l_changed_pages_tbl.First..l_changed_pages_tbl.Last
11980 LOOP
11981 mark_UI_Page_As_Refreshed(l_changed_pages_tbl(i), g_UI_Context.ui_def_id);
11982 END LOOP;
11983 END IF;
11984
11985 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS a
11986 WHERE ui_def_id=g_UI_Context.ui_def_id AND
11987 persistent_node_id=p_node.parent_persistent_node_id AND
11988 (region_persistent_node_id=persistent_node_id OR
11989 pagebase_persistent_node_id=persistent_node_id) AND
11990 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
11991 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG AND
11992 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
11993 ,G_NSTD_CONTAINER_TEMPLATE_ID
11994 ,G_2COLS_CONTAINER_TEMPLATE_ID
11995 ,G_3COLS_CONTAINER_TEMPLATE_ID) AND
11996 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS b
11997 WHERE b.ui_def_id=g_UI_Context.ui_def_id AND
11998 b.page_id=a.page_id AND
11999 b.region_persistent_node_id=a.region_persistent_node_id AND
12000 b.persistent_node_id=p_ui_node.persistent_node_id AND
12001 b.element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12002 b.deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG))
12003 )
12004 LOOP
12005 --
12006 -- add new Instance Management Control to the parent UI Page
12007 --
12008 add_Instance_Controls(p_ui_node => p_ui_node,
12009 p_parent_ui_node => parent_ui_node,
12010 p_node => p_node);
12011 END LOOP;
12012
12013 END IF;
12014
12015 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12016 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12017
12018 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12019
12020 FOR parent_ui_node IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
12021 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12022 persistent_node_id=p_node.parent_persistent_node_id AND
12023 ((region_persistent_node_id=persistent_node_id OR
12024 pagebase_persistent_node_id=persistent_node_id) AND
12025 ctrl_template_id IN( G_CONTAINER_TEMPLATE_ID
12026 ,G_NSTD_CONTAINER_TEMPLATE_ID
12027 ,G_2COLS_CONTAINER_TEMPLATE_ID
12028 ,G_3COLS_CONTAINER_TEMPLATE_ID)) AND
12029 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE))
12030 LOOP
12031 IF NVL(parent_ui_node.suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG THEN
12032 --
12033 -- add new Instance Management COntrol to the parent UI Page
12034 --
12035 add_Instance_Controls(p_ui_node => p_ui_node,
12036 p_parent_ui_node => parent_ui_node,
12037 p_node => p_node);
12038 END IF;
12039 END LOOP;
12040
12041 IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) AND l_page_set_id IS NOT NULL AND
12042 NVL(l_page_set_suppress_flag,G_NO_FLAG)=G_NO_FLAG THEN
12043 split_Page_Flow(p_ui_node);
12044 END IF;
12045
12046 END IF;
12047
12048 --
12049 -- synchronize CZ_UI_PAGE_ELEMENTS.instantiable_flag with
12050 -- CZ_PS_NODES.instantiable_flag
12051 --
12052 UPDATE CZ_UI_PAGE_ELEMENTS
12053 SET instantiable_flag = p_node.instantiable_flag,
12054 parent_persistent_node_id=p_node.parent_persistent_node_id
12055 WHERE ui_def_id = p_ui_node.ui_def_id AND
12056 persistent_node_id = p_ui_node.persistent_node_id;
12057
12058
12059 replace_page_ref_target_path(p_ui_node, p_node);
12060
12061 END check_Page_Changes;
12062
12063 --
12064 -- change instantiability of Page
12065 --
12066 PROCEDURE check_Reference_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12067 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12068 l_refresh_ui_page BOOLEAN:=FALSE;
12069 l_persistent_node_id NUMBER;
12070 l_max_seq_nbr NUMBER;
12071 l_ps_node_type NUMBER;
12072 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12073 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12074 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
12075 l_template_id NUMBER;
12076 l_template_ui_def_id NUMBER;
12077
12078 BEGIN
12079
12080 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12081 p_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12082
12083 --jonatara:bug6439536
12084 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12085
12086 l_template_id := p_node.template_id;
12087 l_template_ui_def_id := p_node.template_ui_def_id;
12088
12089 BEGIN
12090
12091 SELECT ps_node_type INTO l_ps_node_type
12092 FROM CZ_PS_NODES
12093 WHERE devl_project_id=p_node.reference_id AND
12094 parent_id IS NULL AND
12095 deleted_flag=G_NO_FLAG;
12096
12097 FOR i IN(SELECT persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
12098 WHERE ui_def_id=p_ui_node.ui_def_id
12099 AND parent_element_id=p_ui_node.parent_element_id
12100 AND persistent_node_id<>p_ui_node.persistent_node_id AND
12101 deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD))
12102 LOOP
12103 l_ps_node := get_Model_Node_By_Persist_Id(i.persistent_node_id,g_UI_COntext.devl_project_id);
12104
12105 IF l_ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12106 (l_ps_node.ps_node_type IN(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) OR
12107 l_ps_node.detailed_type_id in(CZ_TYPES.UOPTIONAL_BOM_REF_TYPEID,CZ_TYPES.UMINMAX_BOM_REF_TYPEID)) THEN
12108 l_template_id := NULL;
12109 l_template_ui_def_id := NULL;
12110 EXIT;
12111 END IF;
12112
12113 END LOOP;
12114
12115 EXCEPTION
12116 WHEN OTHERS THEN
12117 DEBUG('check_Reference_Changes() : '||SQLERRM);
12118 END;
12119
12120 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12121 p_template_id => l_template_id,
12122 p_template_name => p_node.template_name);
12123
12124 UPDATE CZ_UI_PAGE_ELEMENTS
12125 SET ctrl_template_id = l_template_id,
12126 ctrl_template_ui_def_id = l_template_ui_def_id,
12127 element_type = G_UI_DRILLDOWN_NODE_TYPE,
12128 instantiable_flag = p_node.instantiable_flag,
12129 name=l_ui_node_name,
12130 deleted_flag=G_MARK_TO_REFRESH
12131 WHERE ui_def_id=p_ui_node.ui_def_id AND
12132 persistent_node_id=p_ui_node.persistent_node_id AND
12133 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12134 deleted_flag=G_NO_FLAG AND
12135 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12136
12137 l_refresh_ui_page := TRUE;
12138
12139 END IF;
12140
12141 IF p_ui_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12142 p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12143 p_ui_node.instantiable_flag <> p_node.instantiable_flag THEN
12144
12145 --jonatara:bug6439536
12146 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12147
12148 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12149 p_template_id => l_template_id,
12150 p_template_name => p_node.template_name);
12151
12152 --
12153 -- synchronize UI template with actual detailed node type
12154 --
12155 UPDATE CZ_UI_PAGE_ELEMENTS
12156 SET ctrl_template_id = p_node.template_id,
12157 ctrl_template_ui_def_id = p_node.template_ui_def_id,
12158 instantiable_flag = p_node.instantiable_flag,
12159 name=l_ui_node_name,
12160 deleted_flag=G_MARK_TO_REFRESH
12161 WHERE ui_def_id=p_ui_node.ui_def_id AND
12162 persistent_node_id=p_ui_node.persistent_node_id AND
12163 element_type IN(G_UI_NONBOMADDINST_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12164 deleted_flag=G_NO_FLAG AND
12165 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12166
12167 IF SQL%ROWCOUNT>0 THEN
12168 l_refresh_ui_page := TRUE;
12169 END IF;
12170
12171 END IF;
12172
12173 IF p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
12174 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE THEN
12175
12176 --jonatara:bug6439536
12177 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12178
12179 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12180 p_template_id => l_template_id,
12181 p_template_name => p_node.template_name);
12182
12183 --
12184 -- synchronize UI template with actual detailed node type
12185 --
12186 UPDATE CZ_UI_PAGE_ELEMENTS
12187 SET ctrl_template_id = p_node.template_id,
12188 ctrl_template_ui_def_id = p_node.template_ui_def_id,
12189 instantiable_flag = p_node.instantiable_flag,
12190 element_type = G_UI_NONBOMADDINST_NODE_TYPE,
12191 name=l_ui_node_name,
12192 deleted_flag=DECODE(NVL(ctrl_template_id,-1),-1,G_MARK_TO_ADD,G_MARK_TO_REFRESH)
12193 WHERE ui_def_id=p_ui_node.ui_def_id AND
12194 page_id=p_ui_node.page_id AND
12195 element_id=p_ui_node.element_id AND
12196 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12197 IF SQL%ROWCOUNT>0 THEN
12198 l_refresh_ui_page := TRUE;
12199 END IF;
12200 END IF;
12201
12202 IF l_refresh_ui_page THEN
12203 UPDATE CZ_UI_PAGES
12204 SET deleted_flag=G_MARK_TO_REFRESH,
12205 page_rev_nbr = page_rev_nbr + 1
12206 WHERE ui_def_id=p_ui_node.ui_def_id AND
12207 page_id=p_ui_node.page_id;
12208 END IF;
12209
12210 UPDATE CZ_UI_PAGE_ELEMENTS
12211 SET instantiable_flag = p_node.instantiable_flag
12212 WHERE ui_def_id = p_ui_node.ui_def_id AND
12213 persistent_node_id = p_ui_node.persistent_node_id AND
12214 instantiable_flag <> p_node.instantiable_flag;
12215
12216 FOR i IN(SELECT page_set_id
12217 FROM CZ_UI_PAGE_REFS
12218 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12219 target_persistent_node_id=p_ui_node.persistent_node_id AND
12220 deleted_flag=G_NO_FLAG)
12221 LOOP
12222 l_target_path := get_Page_Path(p_node.ps_node_id, i.page_set_id);
12223 UPDATE CZ_UI_PAGE_REFS
12224 SET target_path=l_target_path
12225 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12226 target_persistent_node_id=p_ui_node.persistent_node_id AND
12227 deleted_flag=G_NO_FLAG AND
12228 target_path<>l_target_path;
12229 END LOOP;
12230
12231 END check_Reference_Changes;
12232
12233
12234 PROCEDURE check_Connector_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12235 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12236 l_refresh_ui_page BOOLEAN:=FALSE;
12237 l_persistent_node_id NUMBER;
12238 l_max_seq_nbr NUMBER;
12239 l_ps_node_type NUMBER;
12240 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
12241 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
12242 l_ui_node_name CZ_UI_PAGE_ELEMENTS.name%TYPE;
12243 l_instantiable_flag CZ_UI_PAGE_ELEMENTS.instantiable_flag%TYPE;
12244 l_template_id NUMBER;
12245 l_template_ui_def_id NUMBER;
12246
12247 BEGIN
12248
12249 IF NVL(p_ui_node.instantiable_flag, '*') <> NVL(p_node.instantiable_flag, '*') THEN
12250
12251 l_template_id := p_node.template_id;
12252 l_template_ui_def_id := p_node.template_ui_def_id;
12253
12254 l_ui_node_name := get_UI_Node_Name(p_page_id => p_ui_node.page_id,
12255 p_template_id => l_template_id,
12256 p_template_name => p_node.template_name);
12257
12258 IF (p_node.maximum=1 AND p_node.minimum=1) THEN
12259 l_instantiable_flag := G_MANDATORY_INST_TYPE;
12260 ELSIF (p_node.maximum=1 AND p_node.minimum=0) THEN
12261 l_instantiable_flag := G_OPTIONAL_INST_TYPE;
12262 ELSE
12263 l_instantiable_flag := G_MINMAX_INST_TYPE;
12264 END IF;
12265
12266 UPDATE CZ_UI_PAGE_ELEMENTS
12267 SET ctrl_template_id = l_template_id,
12268 ctrl_template_ui_def_id = l_template_ui_def_id,
12269 instantiable_flag = l_instantiable_flag,
12270 name=l_ui_node_name,
12271 deleted_flag=G_MARK_TO_REFRESH
12272 WHERE ui_def_id=p_ui_node.ui_def_id AND
12273 persistent_node_id=p_ui_node.persistent_node_id AND
12274 deleted_flag=G_NO_FLAG AND
12275 NVL(suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG;
12276
12277 IF SQL%ROWCOUNT > 0 THEN
12278 UPDATE CZ_UI_PAGES
12279 SET deleted_flag=G_MARK_TO_REFRESH,
12280 page_rev_nbr = page_rev_nbr + 1
12281 WHERE ui_def_id=p_ui_node.ui_def_id AND
12282 page_id=p_ui_node.page_id;
12283 END IF;
12284
12285 END IF;
12286
12287 END check_Connector_Changes;
12288
12289 --
12290 -- change instantiability of UI region
12291 --
12292 PROCEDURE check_Region_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12293 p_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12294
12295 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12296 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
12297 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12298 l_page_set_type CZ_UI_PAGE_SETS.page_set_type%TYPE;
12299
12300 BEGIN
12301
12302 IF (p_node.instantiable_flag IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE)
12303 OR p_node.virtual_flag=G_NO_FLAG) AND
12304 p_ui_node.instantiable_flag=G_MANDATORY_INST_TYPE
12305 AND NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12306
12307 g_check_boundaries_tbl(g_UI_Context.ui_def_id) := G_YES_FLAG;
12308
12309 l_page_ui_node := create_UI_Page(p_node => p_node,
12310 x_page_set_id => l_page_set_id,
12311 x_page_set_type => l_page_set_type,
12312 x_page_ref_id => l_page_ref_id,
12313 p_parent_page_id => p_ui_node.page_id);
12314
12315 UPDATE CZ_UI_PAGE_ELEMENTS
12316 SET deleted_flag=G_MARK_TO_DELETE
12317 WHERE ui_def_id=p_ui_node.ui_def_id AND
12318 page_id=p_ui_node.page_id AND
12319 element_id=p_ui_node.element_id;
12320
12321 UPDATE CZ_UI_PAGE_ELEMENTS
12322 SET page_id = l_page_ui_node.page_id,
12323 pagebase_persistent_node_id = l_page_ui_node.persistent_node_id,
12324 deleted_flag=G_MARK_TO_ADD
12325 WHERE (ui_def_id,page_id,element_id) IN
12326 (SELECT ui_def_id,page_id,element_id FROM
12327 CZ_UI_PAGE_ELEMENTS
12328 START WITH ui_def_id=p_ui_node.ui_def_id AND
12329 page_id=p_ui_node.page_id AND
12330 element_id=p_ui_node.element_id
12331 CONNECT BY
12332 PRIOR ui_def_id=p_ui_node.ui_def_id AND
12333 PRIOR page_id=p_ui_node.page_id AND
12334 PRIOR element_id=parent_element_id AND
12335 PRIOR deleted_flag <> G_YES_FLAG AND
12336 ui_def_id=p_ui_node.ui_def_id AND
12337 page_id=p_ui_node.page_id AND
12338 deleted_flag <> G_YES_FLAG)
12339 AND element_id <> p_ui_node.element_id;
12340
12341 UPDATE CZ_UI_PAGE_ELEMENTS
12342 SET parent_element_id=l_page_ui_node.element_id
12343 WHERE ui_def_id=p_ui_node.ui_def_id AND
12344 page_id=l_page_ui_node.page_id AND
12345 parent_element_id=p_ui_node.element_id;
12346
12347 /*
12348 IF g_UI_Context.PRIMARY_NAVIGATION NOT IN(G_MODEL_TREE_MENU) THEN
12349 split_Page_Flow(l_page_ui_node);
12350 END IF;
12351 */
12352 /*
12353 BEGIN
12354 g_moved_content_tbl(to_number(p_ui_node.element_id)) := l_page_ui_node.page_id;
12355 EXCEPTION
12356 WHEN OTHERS THEN
12357 NULL;
12358 END;
12359 */
12360 END IF;
12361
12362 END check_Region_Changes;
12363
12364 --
12365 -- add new UI node
12366 --
12367 PROCEDURE add_New_UI_Node(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12368 p_insert_index IN NUMBER DEFAULT -1,
12369 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
12370 p_suppress_refresh_flag IN VARCHAR2,
12371 x_new_ui_pages_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
12372 x_new_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
12373
12374 l_old_page_id NUMBER;
12375 l_page_set_id NUMBER;
12376 l_page_set_type NUMBER;
12377 l_page_ref_id NUMBER;
12378 l_drilldown BOOLEAN;
12379
12380 BEGIN
12381
12382 IF p_model_node.ui_omit=G_YES_FLAG THEN
12383 RETURN;
12384 END IF;
12385
12386 -- it must be a new UI page
12387 IF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12388 G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12389 is_UI_Page(p_node => p_model_node,
12390 x_drilldown => l_drilldown) THEN
12391
12392 BEGIN
12393 SELECT page_id INTO l_old_page_id FROM CZ_UI_PAGES
12394 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12395 persistent_node_id=p_model_node.persistent_node_id AND
12396 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
12397 rownum<2;
12398 EXCEPTION
12399 WHEN OTHERS THEN
12400 -- create new UI page
12401 x_new_ui_node := create_UI_Page(p_node => p_model_node,
12402 x_page_set_id => l_page_set_id,
12403 x_page_set_type => l_page_set_type,
12404 x_page_ref_id => l_page_ref_id,
12405 p_parent_page_id => p_ui_node.page_id);
12406
12407 x_new_ui_pages_tbl(x_new_ui_pages_tbl.COUNT+1) := x_new_ui_node;
12408 END;
12409
12410 -- it must be UI Region
12411 ELSIF p_model_node.ps_node_type IN(G_PRODUCT_TYPE,G_COMPONENT_TYPE,
12412 G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12413 x_new_ui_node := create_UI_Region(p_node => p_model_node,
12414 p_parent_ui_node => p_ui_node,
12415 p_insert_index => p_insert_index);
12416 --
12417 -- it must be UI Reference
12418 --
12419 ELSIF p_model_node.ps_node_type = G_REFERENCE_TYPE AND NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12420 x_new_ui_node := create_UI_Reference(p_node => p_model_node,
12421 p_parent_ui_node => p_ui_node);
12422 --
12423 -- other UI elements
12424 --
12425 ELSE
12426 IF NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12427 x_new_ui_node := create_UI_Element(p_node => p_model_node,
12428 p_parent_ui_node => p_ui_node,
12429 p_insert_index => p_insert_index);
12430 END IF;
12431 END IF; -- end of IF is_UI_Page()
12432
12433 END;
12434
12435 --
12436 -- check UI Node changes
12437 --
12438 PROCEDURE check_UI_Node_Changes(p_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12439 p_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
12440
12441 l_ui_layout_ui_style CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12442 l_model_layout_ui_style CZ_UI_TEMPLATES.layout_ui_style%TYPE;
12443 l_feature_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12444 l_under_root_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12445 l_max_seq_nbr NUMBER;
12446
12447 CURSOR l_ui_bom_tab_cur IS
12448 SELECT * FROM CZ_UI_PAGE_ELEMENTS
12449 WHERE ui_def_id=p_ui_node.ui_def_id AND
12450 parent_element_id=p_ui_node.element_id AND
12451 persistent_node_id=p_model_node.persistent_node_id AND
12452 element_type=G_UI_BOMADDINST_NODE_TYPE AND
12453 deleted_flag NOT IN(G_YES_FLAG);
12454
12455 BEGIN
12456 --
12457 -- refresh expl ids in UI tables
12458 --
12459 sync_Expl_Ids(p_model_node,p_ui_node);
12460
12461 IF p_model_node.ps_node_type in(G_BOM_MODEL_TYPE,G_BOM_OPTION_CLASS_TYPE) AND
12462 p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_BOMADDINST_NODE_TYPE) AND
12463 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12464
12465 IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12466 --
12467 -- check for BOM control associated with the same model node
12468 -- as UI page
12469 --
12470 BEGIN
12471 OPEN l_ui_bom_tab_cur;
12472
12473 LOOP
12474 FETCH l_ui_bom_tab_cur INTO l_under_root_ui_node;
12475 EXIT WHEN l_ui_bom_tab_cur%NOTFOUND;
12476
12477 IF l_under_root_ui_node.deleted_flag <> G_LIMBO_FLAG AND
12478 l_under_root_ui_node.ctrl_template_id IS NOT NULL AND
12479 l_under_root_ui_node.ctrl_template_id <> p_model_node.template_id AND
12480 NVL(l_under_root_ui_node.suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
12481
12482 replace_Template_Id(p_ui_node => l_under_root_ui_node,
12483 p_model_node => p_model_node);
12484 END IF;
12485
12486 END LOOP;
12487
12488 IF l_ui_bom_tab_cur%ROWCOUNT=0 THEN
12489 add_BOM_Node(p_node => p_model_node,
12490 p_page_id => p_ui_node.page_id,
12491 p_pagebase_expl_node_id => p_ui_node.model_ref_expl_id,
12492 p_parent_element_id => p_ui_node.element_id,
12493 p_pagebase_persistent_node_id => p_ui_node.pagebase_persistent_node_id);
12494 END IF;
12495
12496 CLOSE l_ui_bom_tab_cur;
12497
12498 END;
12499
12500 ELSE -- else for IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE) THEN
12501
12502 IF p_ui_node.ctrl_template_id <> p_model_node.template_id THEN
12503 replace_Template_Id(p_ui_node => p_ui_node,
12504 p_model_node => p_model_node);
12505 END IF;
12506
12507 END IF;
12508
12509 END IF;
12510
12511 IF p_ui_node.pagebase_persistent_node_id=p_ui_node.persistent_node_id THEN
12512
12513 --
12514 -- check changes of this UI page
12515 --
12516 check_Page_Changes(p_ui_node => p_ui_node,
12517 p_node => p_model_node);
12518
12519 ELSIF p_ui_node.pagebase_persistent_node_id<>p_ui_node.persistent_node_id AND
12520 p_ui_node.region_persistent_node_id=p_ui_node.persistent_node_id AND
12521 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12522
12523 --
12524 -- check changes of this reference
12525 --
12526 check_Region_Changes(p_ui_node => p_ui_node,
12527 p_node => p_model_node);
12528
12529 ELSIF p_model_node.ps_node_type=G_REFERENCE_TYPE AND
12530 p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
12531
12532 --
12533 -- check changes of this reference
12534 --
12535 check_Reference_Changes(p_ui_node => p_ui_node,
12536 p_node => p_model_node);
12537
12538 ELSIF p_model_node.ps_node_type=G_CONNECTOR_TYPE AND
12539 p_model_node.persistent_node_id=p_ui_node.persistent_node_id THEN
12540
12541 --
12542 -- check changes of this reference
12543 --
12544 check_Connector_Changes(p_ui_node => p_ui_node,
12545 p_node => p_model_node);
12546
12547 ELSIF p_model_node.ps_node_type=G_FEATURE_TYPE AND
12548 p_model_node.feature_type=0 AND
12549 p_model_node.template_id <> p_ui_node.ctrl_template_id AND
12550 (g_using_new_UI_refresh OR p_model_node.detailed_type_id<>p_ui_node.element_type) AND
12551 p_model_node.template_id IS NOT NULL AND
12552 p_ui_node.ctrl_template_id IS NOT NULL AND
12553 NVL(p_ui_node.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
12554
12555 BEGIN
12556
12557 IF g_using_new_UI_refresh THEN
12558 replace_Template_Id(p_ui_node => p_ui_node,
12559 p_model_node => p_model_node);
12560 ELSE
12561 SELECT layout_ui_style INTO l_ui_layout_ui_style
12562 FROM CZ_UI_TEMPLATES
12563 WHERE template_id=p_ui_node.ctrl_template_id AND
12564 ui_def_id=p_ui_node.ctrl_template_ui_def_id;
12565
12566 SELECT layout_ui_style INTO l_model_layout_ui_style
12567 FROM CZ_UI_TEMPLATES
12568 WHERE template_id=p_model_node.template_id AND
12569 ui_def_id=p_model_node.template_ui_def_id;
12570
12571 IF l_ui_layout_ui_style=l_model_layout_ui_style THEN
12572 --
12573 -- replace Feature template
12574 --
12575 replace_Template_Id(p_ui_node => p_ui_node,
12576 p_model_node => p_model_node);
12577 ELSE
12578
12579 BEGIN
12580 SELECT NVL(MAX(seq_nbr),0)+1 INTO l_max_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
12581 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12582 page_id=p_ui_node.page_id AND
12583 parent_element_id IS NOT NULL AND
12584 (ctrl_template_id,ctrl_template_ui_def_id) IN
12585 (SELECT ctrl_template_id,ctrl_template_ui_def_id FROM
12586 CZ_UI_TEMPLATES WHERE deleted_flag=G_NO_FLAG AND
12587 layout_ui_style=l_ui_layout_ui_style);
12588 EXCEPTION
12589 WHEN OTHERS THEN
12590 l_max_seq_nbr := 1;
12591 END;
12592
12593 IF l_max_seq_nbr = 1 THEN
12594
12595 --
12596 -- replace Feature template
12597 --
12598 replace_Template_Id(p_ui_node => p_ui_node,
12599 p_model_node => p_model_node);
12600
12601 ELSE
12602
12603 UPDATE CZ_UI_PAGE_ELEMENTS
12604 SET deleted_flag=G_MARK_TO_DELETE
12605 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12606 page_id=p_ui_node.page_id AND
12607 element_id=p_ui_node.element_id;
12608
12609 UPDATE CZ_UI_PAGES
12610 SET deleted_flag=G_MARK_TO_REFRESH,
12611 page_rev_nbr=page_rev_nbr+1
12612 WHERE page_id=p_ui_node.page_id AND
12613 ui_def_id=g_UI_Context.ui_def_id;
12614
12615 l_feature_element_id := get_Element_Id();
12616
12617 INSERT INTO CZ_UI_PAGE_ELEMENTS
12618 (
12619 UI_DEF_ID
12620 ,PAGE_ID
12621 ,PERSISTENT_NODE_ID
12622 ,ELEMENT_ID
12623 ,PARENT_PERSISTENT_NODE_ID
12624 ,REGION_PERSISTENT_NODE_ID
12625 ,PAGEBASE_PERSISTENT_NODE_ID
12626 ,CTRL_TEMPLATE_ID
12627 ,BASE_PAGE_FLAG
12628 ,INSTANTIABLE_FLAG
12629 ,SEQ_NBR
12630 ,DELETED_FLAG
12631 ,CTRL_TEMPLATE_UI_DEF_ID
12632 ,MODEL_REF_EXPL_ID
12633 ,PARENT_ELEMENT_ID
12634 ,ELEMENT_TYPE
12635 ,NAME
12636 ,ELEMENT_SIGNATURE_ID
12637 ,SUPPRESS_REFRESH_FLAG
12638 )
12639 SELECT
12640 UI_DEF_ID
12641 ,PAGE_ID
12642 ,PERSISTENT_NODE_ID
12643 ,l_feature_element_id
12644 ,PARENT_PERSISTENT_NODE_ID
12645 ,REGION_PERSISTENT_NODE_ID
12646 ,PAGEBASE_PERSISTENT_NODE_ID
12647 ,p_model_node.template_id
12648 ,BASE_PAGE_FLAG
12649 ,INSTANTIABLE_FLAG
12650 ,l_max_seq_nbr
12651 ,G_MARK_TO_ADD
12652 ,p_model_node.template_ui_def_id
12653 ,MODEL_REF_EXPL_ID
12654 ,PARENT_ELEMENT_ID
12655 ,ELEMENT_TYPE
12656 ,NAME
12657 ,ELEMENT_SIGNATURE_ID
12658 ,SUPPRESS_REFRESH_FLAG
12659 FROM CZ_UI_PAGE_ELEMENTS
12660 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12661 page_id=p_ui_node.page_id AND
12662 element_id=p_ui_node.element_id;
12663
12664 UPDATE CZ_UI_PAGE_ELEMENTS
12665 SET parent_element_id=l_feature_element_id
12666 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12667 page_id=p_ui_node.page_id AND
12668 parent_element_id=p_ui_node.element_id;
12669
12670 END IF; -- end of IF l_max_seq_nbr = 1
12671 END IF; -- end of IF l_ui_layout_ui_style=l_model_layout_ui_style
12672 END IF;
12673 END;
12674
12675 ELSE
12676
12677 NULL;
12678
12679 END IF; -- end of IF p_ui_node.pagebase_persistent_node_id...
12680
12681 --
12682 -- add a new CX to an existing UI node
12683 -- if there is such CX
12684 --
12685 IF get_CX_Button_Status(p_ui_node)=G_CX_VALID THEN
12686
12687 add_CX_Button(p_node => p_model_node,
12688 p_ui_node => p_ui_node);
12689 END IF;
12690
12691 END check_UI_Node_Changes;
12692
12693 --
12694 -- create new split UI Page
12695 --
12696 FUNCTION clone_UI_Page(p_page_id IN NUMBER)
12697 RETURN CZ_UI_PAGE_ELEMENTS%ROWTYPE IS
12698
12699 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
12700 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12701 l_split_seq_nbr CZ_UI_PAGES.split_seq_nbr%TYPE;
12702 l_page_id CZ_UI_PAGES.page_id%TYPE;
12703 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
12704 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
12705 l_caption_text_id NUMBER;
12706 l_caption CZ_INTL_TEXTS.text_str%TYPE;
12707
12708 BEGIN
12709
12710 --
12711 -- get num of this page in this UI
12712 --
12713 l_split_seq_nbr := get_Last_Split_Page_Nbr(p_page_id) + 1;
12714
12715
12716 l_caption := G_UMPERS||G_CAPTION_RULE_TOKENNAME||' ('||TO_CHAR(l_split_seq_nbr)||')';
12717
12718 l_caption_text_id := allocateId('CZ_INTL_TEXTS_S');
12719
12720 l_element_id := get_Element_Id();
12721 l_page_id := allocateId('CZ_UI_PAGES_S');
12722
12723 INSERT INTO CZ_INTL_TEXTS
12724 (
12725 INTL_TEXT_ID
12726 ,TEXT_STR
12727 ,DELETED_FLAG
12728 ,SEEDED_FLAG
12729 ,UI_DEF_ID
12730 ,MODEL_ID
12731 ,UI_PAGE_ID
12732 ,UI_PAGE_ELEMENT_ID
12733 )
12734 VALUES
12735 (
12736 l_caption_text_id
12737 ,l_caption
12738 ,G_NO_FLAG
12739 ,G_NO_FLAG
12740 ,g_UI_Context.ui_def_id
12741 ,g_UI_Context.devl_project_id
12742 ,l_page_id
12743 ,NULL
12744 );
12745
12746 INSERT INTO CZ_UI_PAGES
12747 (page_id,
12748 ui_def_id,
12749 NAME,
12750 persistent_node_id,
12751 jrad_doc,
12752 page_set_id,
12753 split_seq_nbr,
12754 caption_source,
12755 caption_text_id,
12756 PERSISTENT_CAPTION_TEXT_ID,
12757 pagebase_path,
12758 pagebase_expl_node_id,
12759 page_rev_nbr,
12760 seeded_flag,
12761 DESC_TEXT,
12762 PAGE_STATUS_TEMPLATE_ID,
12763 PAGE_STATUS_TEMPL_UIDEF_ID,
12764 CAPTION_RULE_ID,
12765 OUTER_TEMPLATE_USAGE,
12766 OUTER_PAGE_TEMPLATE_ID,
12767 OUTER_PAGE_TEMPL_UIDEF_ID,
12768 DISPLAY_CONDITION_ID,
12769 DISPLAY_CONDITION_COMP,
12770 DISPLAY_CONDITION_VALUE,
12771 ENABLED_CONDITION_ID,
12772 ENABLED_CONDITION_COMP,
12773 ENABLED_CONDITION_VALUE,
12774 EMPTY_PAGE_FLAG,
12775 SUPPRESS_REFRESH_FLAG,
12776 deleted_flag)
12777 SELECT
12778 l_page_id,
12779 ui_def_id,
12780 name||' ('||TO_CHAR(l_split_seq_nbr)||')',
12781 persistent_node_id,
12782 jrad_doc||'_'||TO_CHAR(l_split_seq_nbr),
12783 page_set_id,
12784 l_split_seq_nbr,
12785 caption_source,
12786 l_caption_text_id,
12787 l_caption_text_id,
12788 pagebase_path,
12789 pagebase_expl_node_id,
12790 1,
12791 seeded_flag,
12792 DESC_TEXT,
12793 PAGE_STATUS_TEMPLATE_ID,
12794 PAGE_STATUS_TEMPL_UIDEF_ID,
12795 CAPTION_RULE_ID,
12796 OUTER_TEMPLATE_USAGE,
12797 OUTER_PAGE_TEMPLATE_ID,
12798 OUTER_PAGE_TEMPL_UIDEF_ID,
12799 DISPLAY_CONDITION_ID,
12800 DISPLAY_CONDITION_COMP,
12801 DISPLAY_CONDITION_VALUE,
12802 ENABLED_CONDITION_ID,
12803 ENABLED_CONDITION_COMP,
12804 ENABLED_CONDITION_VALUE,
12805 EMPTY_PAGE_FLAG,
12806 SUPPRESS_REFRESH_FLAG,
12807 G_MARK_TO_ADD
12808 FROM CZ_UI_PAGES
12809 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12810 page_id=p_page_id;
12811
12812 SELECT * INTO l_ui_node
12813 FROM CZ_UI_PAGE_ELEMENTS
12814 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12815 page_id=p_page_id AND
12816 parent_element_id IS NULL AND
12817 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,G_MARK_TO_REFRESH);
12818
12819 l_ui_node.element_id := l_element_id;
12820 l_ui_node.page_id := l_page_id;
12821 l_ui_node.name := l_ui_node.name||' - '||l_element_id;
12822 l_ui_node.deleted_flag := G_MARK_TO_ADD;
12823
12824 INSERT INTO CZ_UI_PAGE_ELEMENTS
12825 (ui_def_id,
12826 persistent_node_id,
12827 parent_persistent_node_id,
12828 region_persistent_node_id,
12829 pagebase_persistent_node_id,
12830 page_id,
12831 seq_nbr,
12832 ctrl_template_id,
12833 element_id,
12834 parent_element_id,
12835 element_type,
12836 instantiable_flag,
12837 ctrl_template_ui_def_id,
12838 model_ref_expl_id,
12839 base_page_flag,
12840 element_signature_id,
12841 name,
12842 deleted_flag)
12843 VALUES
12844 (l_ui_node.ui_def_id,
12845 l_ui_node.persistent_node_id,
12846 l_ui_node.parent_persistent_node_id,
12847 l_ui_node.region_persistent_node_id,
12848 l_ui_node.pagebase_persistent_node_id,
12849 l_ui_node.page_id,
12850 l_ui_node.seq_nbr,
12851 l_ui_node.ctrl_template_id,
12852 l_ui_node.element_id,
12853 l_ui_node.parent_element_id,
12854 l_ui_node.element_type,
12855 l_ui_node.instantiable_flag,
12856 l_ui_node.ctrl_template_ui_def_id,
12857 l_ui_node.model_ref_expl_id,
12858 l_ui_node.base_page_flag,
12859 l_ui_node.element_signature_id,
12860 l_ui_node.name,
12861 l_ui_node.deleted_flag);
12862
12863 SELECT NVL(MAX(seq_nbr),0) INTO l_seq_nbr
12864 FROM CZ_UI_PAGE_REFS
12865 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12866 target_persistent_node_id=l_ui_node.persistent_node_id AND
12867 deleted_flag=G_NO_FLAG;
12868
12869 UPDATE CZ_UI_PAGE_REFS
12870 SET seq_nbr=seq_nbr+1
12871 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12872 parent_page_ref_id = (SELECT parent_page_ref_id
12873 FROM CZ_UI_PAGE_REFS
12874 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12875 target_page_id=p_page_id AND
12876 deleted_flag=G_NO_FLAG) AND
12877 seq_nbr > l_seq_nbr AND
12878 deleted_flag=G_NO_FLAG;
12879
12880 l_seq_nbr := l_seq_nbr + 1;
12881
12882 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
12883 INSERT INTO CZ_UI_PAGE_REFS
12884 (ui_def_id,
12885 page_set_id,
12886 page_ref_id,
12887 parent_page_ref_id,
12888 seq_nbr,
12889 node_depth,
12890 condition_id,
12891 NAME,
12892 caption_source,
12893 caption_text_id,
12894 target_persistent_node_id,
12895 target_path,
12896 target_ui_def_id,
12897 target_page_set_id,
12898 target_page_id,
12899 modified_flags,
12900 path_to_prev_page,
12901 path_to_next_page,
12902 page_ref_type,
12903 target_expl_node_id,
12904 deleted_flag)
12905 SELECT
12906 ui_def_id,
12907 page_set_id,
12908 l_page_ref_id,
12909 parent_page_ref_id,
12910 l_seq_nbr,
12911 node_depth,
12912 condition_id,
12913 NAME||' ('||TO_CHAR(l_split_seq_nbr)||')',
12914 caption_source,
12915 l_caption_text_id,
12916 target_persistent_node_id,
12917 target_path,
12918 target_ui_def_id,
12919 target_page_set_id,
12920 l_page_id,
12921 modified_flags,
12922 NULL,
12923 path_to_next_page,
12924 page_ref_type,
12925 target_expl_node_id,
12926 deleted_flag
12927 FROM CZ_UI_PAGE_REFS
12928 WHERE ui_def_id=g_UI_Context.ui_def_id AND
12929 target_page_id=p_page_id AND
12930 deleted_flag=G_NO_FLAG;
12931
12932 RETURN l_ui_node;
12933
12934 END clone_UI_Page;
12935
12936 PROCEDURE collect_UI_Elements
12937 (p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12938 p_max_controls_per_page IN NUMBER,
12939 x_new_pages_tbl OUT NOCOPY number_tbl_type,
12940 x_elements_tbl OUT NOCOPY ui_page_elements_tbl_type,
12941 x_new_parent_elements_tbl OUT NOCOPY varchar_tbl_type) IS
12942
12943 l_ui_page_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
12944 l_counter NUMBER:=0;
12945
12946 BEGIN
12947
12948 l_ui_page_node := p_ui_page_node;
12949
12950 FOR k IN(SELECT page_id,TO_NUMBER(element_id) AS element_id,
12951 TO_NUMBER(parent_element_id) AS parent_element_id,seq_nbr
12952 FROM CZ_UI_PAGE_ELEMENTS
12953 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
12954 page_id = p_ui_page_node.page_id AND
12955 parent_element_id IS NOT NULL AND
12956 element_type <> G_UI_REGION_NODE_TYPE AND
12957 ctrl_template_id IS NOT NULL
12958 AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH)
12959 ORDER BY seq_nbr)
12960 LOOP
12961 --
12962 -- increase counter of nodes on the page ( initial l_counter must be 0 )
12963 --
12964 l_counter:=l_counter+1;
12965 --
12966 -- compare previous page and page created in this loop
12967 --
12968 IF (l_counter > p_max_controls_per_page) THEN
12969 l_ui_page_node := clone_UI_Page(k.page_id);
12970 l_counter := 1;
12971 x_new_pages_tbl(l_ui_page_node.page_id) := l_ui_page_node.pagebase_persistent_node_id;
12972 END IF;
12973
12974 IF l_ui_page_node.page_id <> p_ui_page_node.page_id THEN
12975 x_elements_tbl(k.element_id) := l_ui_page_node;
12976 IF k.parent_element_id = p_ui_page_node.element_id THEN
12977 x_new_parent_elements_tbl(k.element_id) := l_ui_page_node.element_id;
12978 END IF;
12979 END IF;
12980
12981 END LOOP;
12982
12983 END collect_UI_Elements;
12984
12985 PROCEDURE handle_Direct_Child_Nodes
12986 (p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
12987 p_elements_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
12988 p_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
12989
12990 l_current_element_id NUMBER;
12991
12992 BEGIN
12993
12994 l_current_element_id := p_elements_tbl.First;
12995 LOOP
12996 IF l_current_element_id IS NULL THEN
12997 EXIT;
12998 END IF;
12999
13000 UPDATE CZ_UI_PAGE_ELEMENTS
13001 SET page_id = p_elements_tbl(l_current_element_id).page_id
13002 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13003 page_id = p_ui_page_node.page_id AND
13004 element_id = TO_CHAR(l_current_element_id);
13005
13006 IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13007 UPDATE CZ_UI_PAGE_ELEMENTS
13008 SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13009 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13010 page_id = p_ui_page_node.page_id AND
13011 element_id = TO_CHAR(l_current_element_id);
13012 END IF;
13013
13014 UPDATE CZ_UI_ACTIONS
13015 SET source_page_id=p_elements_tbl(l_current_element_id).page_id
13016 WHERE ui_def_id=p_ui_page_node.ui_def_id AND
13017 source_page_id= p_ui_page_node.page_id AND
13018 element_id=TO_CHAR(l_current_element_id);
13019
13020 l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13021 END LOOP;
13022
13023 l_current_element_id := p_elements_tbl.First;
13024 LOOP
13025 IF l_current_element_id IS NULL THEN
13026 EXIT;
13027 END IF;
13028
13029 IF p_parent_elements_tbl.EXISTS(l_current_element_id) THEN
13030 UPDATE CZ_UI_PAGE_ELEMENTS
13031 SET parent_element_id = p_parent_elements_tbl(l_current_element_id)
13032 WHERE ui_def_id = p_ui_page_node.ui_def_id AND
13033 page_id = p_elements_tbl(l_current_element_id).page_id AND
13034 element_id = TO_CHAR(l_current_element_id);
13035 END IF;
13036
13037 l_current_element_id := p_elements_tbl.NEXT(l_current_element_id);
13038 END LOOP;
13039
13040 END handle_Direct_Child_Nodes;
13041
13042 PROCEDURE collect_Old_Nodes
13043 (
13044 p_ui_def_id IN NUMBER,
13045 p_new_page_id IN NUMBER,
13046 x_nested_page_elements_tbl OUT NOCOPY varchar_tbl_type) IS
13047
13048 BEGIN
13049
13050 FOR i IN(SELECT DISTINCT parent_element_id FROM CZ_UI_PAGE_ELEMENTS a
13051 WHERE ui_def_id = p_ui_def_id AND
13052 page_id = p_new_page_id AND
13053 parent_element_id IS NOT NULL AND
13054 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13055 WHERE ui_def_id = p_ui_def_id AND
13056 page_id = p_new_page_id AND
13057 element_id=a.parent_element_id))
13058 LOOP
13059 x_nested_page_elements_tbl(x_nested_page_elements_tbl.COUNT+1) := i.parent_element_id;
13060 END LOOP;
13061
13062 END collect_Old_Nodes;
13063
13064 PROCEDURE collect_New_Nested_Regions
13065 (p_ui_def_id IN NUMBER,
13066 p_page_id IN NUMBER,
13067 p_element_id IN VARCHAR2,
13068 px_rgn_new_elements_tbl IN OUT NOCOPY varchar_tbl_type,
13069 px_rgn_parent_elements_tbl IN OUT NOCOPY varchar_tbl_type) IS
13070
13071 l_new_element_id VARCHAR2(255);
13072 l_num_element_id NUMBER;
13073
13074 BEGIN
13075
13076 FOR i IN(SELECT element_id,parent_element_id,element_type FROM CZ_UI_PAGE_ELEMENTS
13077 START WITH ui_def_id = p_ui_def_id AND
13078 page_id= p_page_id AND
13079 element_id=p_element_id
13080 CONNECT BY PRIOR ui_def_id = p_ui_def_id AND
13081 ui_def_id = p_ui_def_id AND
13082 PRIOR page_id= p_page_id AND page_id= p_page_id AND
13083 PRIOR parent_element_id=element_id)
13084 LOOP
13085 l_num_element_id := TO_NUMBER(i.element_id);
13086 IF i.parent_element_id IS NOT NULL AND i.element_type=G_UI_REGION_NODE_TYPE AND
13087 NOT(px_rgn_new_elements_tbl.EXISTS(l_num_element_id)) THEN
13088 l_new_element_id := get_Element_Id();
13089 px_rgn_new_elements_tbl(l_num_element_id) := l_new_element_id;
13090 px_rgn_parent_elements_tbl(l_num_element_id) := i.parent_element_id;
13091 END IF;
13092 END LOOP;
13093
13094 END collect_New_Nested_Regions;
13095
13096
13097 PROCEDURE reconstruct_Nested_Regions
13098 (
13099 p_ui_def_id IN NUMBER,
13100 p_page_id IN NUMBER,
13101 p_new_pages_tbl IN number_tbl_type
13102 ) IS
13103
13104 l_nested_rgn_elements_tbl varchar_tbl_type;
13105 l_rgn_subtree_tbl varchar_tbl_type;
13106 l_parent_elements_tbl varchar_tbl_type;
13107 l_new_page_id NUMBER;
13108 l_new_element_id VARCHAR2(255);
13109 l_new_parent_element_id VARCHAR2(255);
13110 l_old_element_id NUMBER;
13111 l_page_root_element_id VARCHAR2(255);
13112
13113 BEGIN
13114
13115 l_new_page_id := p_new_pages_tbl.First;
13116 LOOP
13117 IF l_new_page_id IS NULL THEN
13118 EXIT;
13119 END IF;
13120
13121 l_nested_rgn_elements_tbl.DELETE;
13122
13123 SELECT element_id INTO l_page_root_element_id FROM CZ_UI_PAGE_ELEMENTS
13124 WHERE ui_def_id=p_ui_def_id AND
13125 page_id=l_new_page_id AND
13126 parent_element_id IS NULL AND
13127 deleted_flag NOT IN(G_YES_FLAG, G_MARK_TO_DELETE);
13128
13129 collect_Old_Nodes(p_ui_def_id => p_ui_def_id,
13130 p_new_page_id => l_new_page_id,
13131 x_nested_page_elements_tbl => l_nested_rgn_elements_tbl);
13132
13133 IF l_nested_rgn_elements_tbl.COUNT > 0 THEN
13134
13135 FOR i IN l_nested_rgn_elements_tbl.First..l_nested_rgn_elements_tbl.Last
13136 LOOP
13137 collect_New_Nested_Regions(p_ui_def_id => p_ui_def_id,
13138 p_page_id => p_page_id,
13139 p_element_id => l_nested_rgn_elements_tbl(i),
13140 px_rgn_new_elements_tbl => l_rgn_subtree_tbl,
13141 px_rgn_parent_elements_tbl => l_parent_elements_tbl );
13142 END LOOP;
13143
13144 END IF;
13145
13146 IF l_rgn_subtree_tbl.COUNT > 0 THEN
13147
13148 l_old_element_id := l_rgn_subtree_tbl.First;
13149 LOOP
13150 IF l_old_element_id IS NULL THEN
13151 EXIT;
13152 END IF;
13153
13154 l_new_element_id := l_rgn_subtree_tbl(l_old_element_id);
13155 IF l_rgn_subtree_tbl.EXISTS(TO_NUMBER(l_parent_elements_tbl(l_old_element_id))) THEN
13156 l_new_parent_element_id := l_rgn_subtree_tbl(TO_NUMBER(l_parent_elements_tbl(l_old_element_id)));
13157 ELSE
13158 l_new_parent_element_id := l_page_root_element_id;
13159 END IF;
13160 INSERT INTO CZ_UI_PAGE_ELEMENTS
13161 (UI_DEF_ID
13162 ,PAGE_ID
13163 ,PERSISTENT_NODE_ID
13164 ,ELEMENT_ID
13165 ,PARENT_ELEMENT_ID
13166 ,PARENT_PERSISTENT_NODE_ID
13167 ,REGION_PERSISTENT_NODE_ID
13168 ,PAGEBASE_PERSISTENT_NODE_ID
13169 ,CTRL_TEMPLATE_ID
13170 ,BASE_PAGE_FLAG
13171 ,INSTANTIABLE_FLAG
13172 ,SEQ_NBR
13173 ,DELETED_FLAG
13174 ,CTRL_TEMPLATE_UI_DEF_ID
13175 ,MODEL_REF_EXPL_ID
13176 ,ELEMENT_TYPE
13177 ,NAME
13178 ,ELEMENT_SIGNATURE_ID
13179 ,SUPPRESS_REFRESH_FLAG)
13180 SELECT
13181 UI_DEF_ID
13182 ,l_new_page_id
13183 ,PERSISTENT_NODE_ID
13184 ,l_new_element_id
13185 ,l_new_parent_element_id
13186 ,PARENT_PERSISTENT_NODE_ID
13187 ,REGION_PERSISTENT_NODE_ID
13188 ,pagebase_persistent_node_id
13189 ,CTRL_TEMPLATE_ID
13190 ,BASE_PAGE_FLAG
13191 ,INSTANTIABLE_FLAG
13192 ,SEQ_NBR
13193 ,DELETED_FLAG
13194 ,CTRL_TEMPLATE_UI_DEF_ID
13195 ,MODEL_REF_EXPL_ID
13196 ,ELEMENT_TYPE
13197 ,NAME
13198 ,ELEMENT_SIGNATURE_ID
13199 ,SUPPRESS_REFRESH_FLAG
13200 FROM CZ_UI_PAGE_ELEMENTS
13201 WHERE ui_def_id=p_ui_def_id AND
13202 page_id=p_page_id AND
13203 element_id=TO_CHAR(l_old_element_id);
13204
13205 UPDATE CZ_UI_PAGE_ELEMENTS
13206 SET parent_element_id=l_new_element_id
13207 WHERE ui_def_id=p_ui_def_id AND
13208 page_id=l_new_page_id AND
13209 parent_element_id=TO_CHAR(l_old_element_id);
13210
13211 l_old_element_id := l_rgn_subtree_tbl.NEXT(l_old_element_id);
13212 END LOOP;
13213
13214 END IF; -- end of IF l_rgn_subtree_tbl.COUNT > 0 THEN
13215
13216 l_new_page_id := p_new_pages_tbl.NEXT(l_new_page_id);
13217
13218 END LOOP; -- end of loop through p_new_pages_tbl
13219
13220 END reconstruct_Nested_Regions;
13221
13222 --
13223 -- split a single Page
13224 -- Parameters :
13225 -- p_ui_node - identifies UI node of page
13226 --
13227 PROCEDURE split_Page(p_ui_page_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13228 p_max_controls_per_page IN NUMBER ) IS
13229
13230 l_elements_tbl ui_page_elements_tbl_type;
13231 l_new_pages_tbl number_tbl_type;
13232 l_parent_elements_tbl varchar_tbl_type;
13233
13234 BEGIN
13235
13236 IF p_ui_page_node.suppress_refresh_flag=G_YES_FLAG THEN
13237 RETURN;
13238 END IF;
13239
13240 SAVEPOINT split_Page_Point;
13241
13242 collect_UI_Elements(p_ui_page_node => p_ui_page_node,
13243 p_max_controls_per_page => p_max_controls_per_page,
13244 x_new_pages_tbl => l_new_pages_tbl,
13245 x_elements_tbl => l_elements_tbl,
13246 x_new_parent_elements_tbl => l_parent_elements_tbl);
13247
13248 handle_Direct_Child_Nodes(p_ui_page_node => p_ui_page_node,
13249 p_elements_tbl => l_elements_tbl,
13250 p_parent_elements_tbl => l_parent_elements_tbl);
13251
13252 reconstruct_Nested_Regions(p_ui_def_id => p_ui_page_node.ui_def_id,
13253 p_page_id => p_ui_page_node.page_id,
13254 p_new_pages_tbl => l_new_pages_tbl);
13255 EXCEPTION
13256 WHEN OTHERS THEN
13257 ROLLBACK TO split_Page_Point;
13258 DEBUG('split_Page() : fatal error "'||SQLERRM||'"');
13259 END split_Page;
13260
13261 --
13262 -- split UI pages if they must be split
13263 --
13264 PROCEDURE split_Pages IS
13265
13266 l_num_if_roots NUMBER;
13267 l_target_persistent_node_id NUMBER;
13268 l_page_set_id NUMBER;
13269 l_page_set_type NUMBER;
13270 l_page_ref_id NUMBER;
13271 l_max_controls_per_page NUMBER;
13272
13273 BEGIN
13274
13275 IF g_UI_Context.control_layout IN(1,2) THEN
13276 l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS*(g_UI_Context.control_layout+1);
13277 ELSE
13278 l_max_controls_per_page := g_UI_CONTEXT.PAGIN_MAXCONTROLS;
13279 END IF;
13280
13281 --
13282 -- split UI Pages
13283 --
13284 FOR i IN (SELECT *
13285 FROM CZ_UI_PAGE_ELEMENTS
13286 WHERE ui_def_id = g_UI_Context.ui_def_id AND
13287 parent_element_id IS NULL AND
13288 persistent_node_id=pagebase_persistent_node_id AND
13289 NVL(suppress_refresh_flag, G_NO_FLAG) = G_NO_FLAG AND
13290 deleted_flag IN (G_MARK_TO_ADD))
13291 LOOP
13292 split_Page(i, l_max_controls_per_page);
13293 END LOOP;
13294
13295 IF g_UI_Context.PRIMARY_NAVIGATION=G_MODEL_TREE_MENU THEN
13296 SELECT COUNT(*) INTO l_num_if_roots FROM CZ_UI_PAGE_REFS
13297 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13298 AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13299 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13300 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13301 IF l_num_if_roots > 1 THEN
13302
13303 SELECT target_persistent_node_id,page_set_id,page_ref_type
13304 INTO l_target_persistent_node_id,l_page_set_id,l_page_set_type
13305 FROM CZ_UI_PAGE_REFS
13306 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL
13307 AND target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13308 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13309 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG AND rownum<2;
13310
13311 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
13312
13313 INSERT INTO CZ_UI_PAGE_REFS
13314 (ui_def_id,
13315 page_set_id,
13316 page_ref_id,
13317 parent_page_ref_id,
13318 seq_nbr,
13319 node_depth,
13320 condition_id,
13321 NAME,
13322 caption_source,
13323 target_persistent_node_id,
13324 target_path,
13325 target_ui_def_id,
13326 target_page_set_id,
13327 target_page_id,
13328 modified_flags,
13329 path_to_prev_page,
13330 path_to_next_page,
13331 page_ref_type,
13332 target_expl_node_id,
13333 caption_rule_id,
13334 deleted_flag)
13335 VALUES
13336 (g_UI_Context.ui_def_id,
13337 l_page_set_id,
13338 l_page_ref_id,
13339 NULL,
13340 0,
13341 0,
13342 NULL,
13343 'Root',
13344 G_DEFAULT_CAPTION_RULE_ID,
13345 l_target_persistent_node_id,
13346 NULL,
13347 NULL,
13348 NULL,
13349 NULL,
13350 0,
13351 NULL,
13352 NULL,
13353 l_page_set_type,
13354 NULL,
13355 NULL,
13356 G_NO_FLAG);
13357
13358 UPDATE CZ_UI_PAGE_REFS
13359 SET parent_page_ref_id=l_page_ref_id
13360 WHERE ui_def_id=g_UI_Context.ui_def_id AND parent_page_ref_id IS NULL AND
13361 target_persistent_node_id=(SELECT persistent_node_id FROM CZ_PS_NODES
13362 WHERE devl_project_id=g_UI_Context.devl_project_id AND parent_id IS NULL AND
13363 deleted_flag=G_NO_FLAG) AND deleted_flag=G_NO_FLAG;
13364
13365 END IF;
13366 END IF;
13367
13368 END split_Pages;
13369
13370 --
13371 -- reorder UI elements on UI page in case of Single Page
13372 --
13373 PROCEDURE set_UI_Page_Elements_Order(p_page_id IN NUMBER) IS
13374 l_counter NUMBER:=0;
13375
13376 PROCEDURE set_UI_Order_(p_element_id IN VARCHAR2) IS
13377 BEGIN
13378 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13379 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13380 page_id=p_page_id AND
13381 parent_element_id=p_element_id AND
13382 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13383 LOOP
13384 l_counter := l_counter + 1;
13385 UPDATE CZ_UI_PAGE_ELEMENTS
13386 SET seq_nbr = l_counter
13387 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13388 element_id=i.element_id;
13389 set_UI_Order_(i.element_id);
13390 END LOOP;
13391 END set_UI_Order_;
13392
13393 BEGIN
13394 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
13395 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13396 page_id=p_page_id AND
13397 parent_element_id IS NULL AND
13398 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13399 LOOP
13400 set_UI_Order_(i.element_id);
13401 END LOOP;
13402 END set_UI_Page_Elements_Order;
13403
13404 --
13405 -- set ordering for UI elements on UI pages
13406 --
13407 PROCEDURE handle_UI_Page_Elements_Order IS
13408 BEGIN
13409 FOR i IN(SELECT page_id FROM CZ_UI_PAGES a
13410 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13411 page_set_id IN
13412 (SELECT page_set_id FROM CZ_UI_PAGE_SETS
13413 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13414 page_set_id=a.page_set_id AND
13415 page_set_type=G_SINGLE_PAGE AND
13416 deleted_flag=G_NO_FLAG) AND
13417 NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
13418 deleted_flag=G_NO_FLAG)
13419 LOOP
13420 set_UI_Page_Elements_Order(i.page_id);
13421 END LOOP;
13422 END handle_UI_Page_Elements_Order;
13423
13424 --
13425 -- reorder UI elements on UI page in case of Single Page
13426 --
13427 PROCEDURE handle_Page_Flows IS
13428
13429 l_xmldoc xmldom.DOMDocument;
13430 l_counter NUMBER:=0;
13431 l_seq_nbr NUMBER;
13432 l_show_train BOOLEAN := FALSE;
13433 l_target_path CZ_UI_PAGE_REFS.target_path%TYPE;
13434 l_page_ref_id NUMBER;
13435
13436 PROCEDURE set_Page_Flow_(p_page_ref_id IN VARCHAR2) IS
13437 BEGIN
13438 FOR i IN(SELECT page_ref_id,target_page_id,empty_page_flag,
13439 NVL(modified_flags,0) AS modified_flags FROM CZ_UI_PAGE_REFS
13440 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13441 parent_page_ref_id=p_page_ref_id AND
13442 target_page_id IN
13443 (SELECT page_id FROM CZ_UI_PAGES
13444 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13445 deleted_flag IN(G_NO_FLAG,G_MARK_TO_ADD,
13446 G_MARK_TO_REFRESH))
13447 AND
13448 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13449 LOOP
13450 l_counter := l_counter + 1;
13451
13452 IF i.modified_flags = 0 THEN
13453 UPDATE CZ_UI_PAGE_REFS
13454 SET seq_nbr = l_counter
13455 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13456 page_ref_id=i.page_ref_id;
13457 END IF;
13458
13459 set_Page_Flow_(i.page_ref_id);
13460 END LOOP;
13461 END set_Page_Flow_;
13462
13463 BEGIN
13464
13465 FOR n IN(SELECT page_set_id
13466 FROM CZ_UI_PAGE_SETS
13467 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13468 page_set_type IN(G_PAGE_FLOW,G_SUBTABS) AND
13469 deleted_flag=G_NO_FLAG)
13470 LOOP
13471 l_counter := 0;
13472 FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13473 NVL(modified_flags,0) AS MODIFIED_FLAGS FROM CZ_UI_PAGE_REFS
13474 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13475 parent_page_ref_id IS NULL AND
13476 page_set_id=n.page_set_id AND
13477 target_page_id IN
13478 (SELECT page_id FROM CZ_UI_PAGES
13479 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13480 page_set_id=n.page_set_id AND
13481 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13482 G_NO_FLAG)) AND
13483 deleted_flag=G_NO_FLAG ORDER BY seq_nbr)
13484 LOOP
13485 -- Find the first unmodifid page ref. This is basically the first page ref
13486 -- generated by UiGen. Once we have this, we recursively set the seq_nbrs
13487 -- by traversing the page_refs structure in depth first order.
13488 IF m.MODIFIED_FLAGS = 0 THEN
13489 IF l_counter=0 THEN
13490 l_page_ref_id := m.page_ref_id;
13491 END IF;
13492 END IF;
13493 l_counter := l_counter + 1;
13494 END LOOP; -- loop with m index
13495
13496 set_Page_Flow_(l_page_ref_id);
13497
13498 END LOOP; -- loop with n index
13499
13500
13501 FOR n IN(SELECT page_set_id,persistent_node_id,pagebase_expl_node_id
13502 FROM CZ_UI_PAGE_SETS
13503 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13504 deleted_flag=G_NO_FLAG)
13505 LOOP
13506
13507 FOR m IN(SELECT page_ref_id,seq_nbr,target_page_id,empty_page_flag,
13508 target_persistent_node_id, target_expl_node_id
13509 FROM CZ_UI_PAGE_REFS
13510 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13511 parent_page_ref_id IS NULL AND
13512 page_set_id=n.page_set_id AND
13513 target_page_id IN
13514 (SELECT page_id FROM CZ_UI_PAGES
13515 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13516 page_set_id=n.page_set_id AND
13517 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,
13518 G_NO_FLAG)) AND
13519 deleted_flag=G_NO_FLAG)
13520 LOOP
13521
13522 l_target_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => n.pagebase_expl_node_id,
13523 p_base_pers_id => n.persistent_node_id,
13524 p_node_expl_id => m.target_expl_node_id,
13525 p_node_pers_id => m.target_persistent_node_id);
13526 IF l_target_path IS NULL THEN
13527 l_target_path := '.';
13528 END IF;
13529
13530 UPDATE CZ_UI_PAGE_REFS
13531 SET target_path=l_target_path
13532 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13533 page_set_id=n.page_set_id AND
13534 target_persistent_node_id=m.target_persistent_node_id AND
13535 target_path<>l_target_path AND
13536 deleted_flag=G_NO_FLAG;
13537 END LOOP;
13538
13539 END LOOP;
13540 END handle_Page_Flows;
13541
13542 --
13543 -- get child UI Nodes
13544 --
13545 PROCEDURE get_Child_UI_Nodes
13546 (
13547 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13548 p_child_nodes_tbl IN OUT NOCOPY model_nodes_tbl_type,
13549 x_ui_nodes_tbl OUT NOCOPY ui_page_elements_tbl_type,
13550 p_suppress_refresh_flag IN VARCHAR2
13551 ) IS
13552 l_delete_in_model BOOLEAN;
13553 l_ps_node_type NUMBER;
13554 BEGIN
13555
13556 IF p_parent_ui_node.parent_persistent_node_id IS NULL AND
13557 p_parent_ui_node.parent_element_id IS NULL AND
13558 NVL(p_suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
13559
13560 IF get_CX_Button_Status(p_parent_ui_node)=G_CX_VALID THEN
13561
13562 add_CX_Button(p_node => get_Model_Node_By_Persist_Id(p_parent_ui_node.persistent_node_id,
13563 g_UI_Context.devl_project_id),
13564 p_ui_node => p_parent_ui_node);
13565
13566 END IF;
13567
13568 END IF;
13569
13570 FOR i IN (SELECT *
13571 FROM CZ_UI_PAGE_ELEMENTS
13572 WHERE ui_def_id = p_parent_ui_node.ui_def_id AND
13573 page_id=p_parent_ui_node.page_id AND
13574 parent_element_id=p_parent_ui_node.element_id AND
13575 deleted_flag IN (G_NO_FLAG,
13576 G_MARK_TO_ADD,
13577 G_MARK_TO_REFRESH,
13578 G_MARK_TO_DELETE))
13579 LOOP
13580 IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
13581 BEGIN
13582 l_ps_node_type := NULL;
13583 SELECT ps_node_type INTO l_ps_node_type FROM CZ_PS_NODES
13584 WHERE devl_project_id=g_UI_Context.devl_project_id AND
13585 persistent_node_id=i.persistent_node_id;
13586 EXCEPTION
13587 WHEN NO_DATA_FOUND THEN
13588 NULL;
13589 END;
13590 END IF;
13591
13592 l_delete_in_model := TRUE;
13593 FOR h IN(SELECT NULL FROM CZ_PS_NODES
13594 WHERE devl_project_id=g_UI_Context.devl_project_id AND
13595 persistent_node_id=i.persistent_node_id AND
13596 deleted_flag=G_NO_FLAG)
13597 LOOP
13598 l_delete_in_model := FALSE;
13599 END LOOP;
13600
13601 IF NVL(i.element_type,0) NOT IN(G_UI_BOMADDINST_NODE_TYPE,
13602 G_UI_NONBOMADDINST_NODE_TYPE,
13603 G_UI_PAGEDRILLDOWN_NODE_TYPE,
13604 G_UI_CX_BUTTON_NODE_TYPE)
13605 OR (is_UI_Reference(i) AND NVL(i.element_type,0)<>G_UI_CX_BUTTON_NODE_TYPE) THEN
13606 IF i.persistent_node_id IS NOT NULL THEN
13607 x_ui_nodes_tbl(i.persistent_node_id) := i;
13608 END IF;
13609
13610 END IF;
13611
13612 IF NOT(p_child_nodes_tbl.EXISTS(i.persistent_node_id))
13613 AND i.persistent_node_id<>p_parent_ui_node.persistent_node_id AND
13614 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))
13615 THEN
13616
13617 IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
13618 --
13619 -- delete UI page or deassociate UI page from model nodes
13620 --
13621 delete_UI_Page(i);
13622
13623 ELSIF i.region_persistent_node_id=i.persistent_node_id AND
13624 i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
13625 --
13626 -- delete UI region or deassociate UI region from model nodes
13627 --
13628 delete_UI_Region(i);
13629
13630 ELSE -- regular UI element
13631 --
13632 -- delete UI element or deassociate UI element from model nodes
13633 --
13634 delete_UI_Element(i, p_suppress_refresh_flag, l_delete_in_model);
13635
13636 END IF;
13637 END IF;
13638
13639 IF i.deleted_flag=G_MARK_TO_DELETE THEN
13640 p_child_nodes_tbl.DELETE(i.persistent_node_id);
13641 END IF;
13642
13643 END LOOP;
13644
13645 END get_Child_UI_Nodes;
13646
13647 --
13648 -- delete child UI nodes
13649 --
13650 PROCEDURE delete_UI_Nodes
13651 (
13652 p_nodes_tbl OUT NOCOPY model_nodes_tbl_type,
13653 px_ui_nodes_tbl IN OUT NOCOPY ui_page_elements_tbl_type,
13654 p_suppress_refresh_flag IN VARCHAR2
13655 ) IS
13656
13657 l_current_ui_index NUMBER;
13658 l_current_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13659
13660 BEGIN
13661
13662
13663 IF px_ui_nodes_tbl.COUNT=0 THEN
13664 RETURN;
13665 END IF;
13666
13667 l_current_ui_index := px_ui_nodes_tbl.First;
13668 LOOP
13669
13670 IF l_current_ui_index IS NULL THEN
13671 EXIT;
13672 END IF;
13673
13674 l_current_ui_node := px_ui_nodes_tbl(l_current_ui_index);
13675
13676 IF l_current_ui_node.persistent_node_id IS NOT NULL AND
13677 NOT(p_nodes_tbl.EXISTS(l_current_ui_node.persistent_node_id)) THEN
13678
13679 IF l_current_ui_node.pagebase_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI page
13680 --
13681 -- delete UI page or deassociate UI page from model nodes
13682 --
13683 delete_UI_Page(l_current_ui_node);
13684
13685 ELSIF l_current_ui_node.pagebase_persistent_node_id<>l_current_ui_node.persistent_node_id AND
13686 l_current_ui_node.region_persistent_node_id=l_current_ui_node.persistent_node_id THEN -- UI region
13687 --
13688 -- delete UI region or deassociate UI region from model nodes
13689 --
13690 delete_UI_Region(l_current_ui_node);
13691
13692 ELSE -- regular UI element
13693 --
13694 -- delete UI element or deassociate UI element from model nodes
13695 --
13696 delete_UI_Element(l_current_ui_node, p_suppress_refresh_flag);
13697
13698 END IF;
13699
13700 END IF;
13701
13702 IF l_current_ui_node.deleted_flag=G_MARK_TO_DELETE THEN
13703 px_ui_nodes_tbl.DELETE(l_current_ui_node.persistent_node_id);
13704 END IF;
13705
13706 l_current_ui_index := px_ui_nodes_tbl.NEXT(l_current_ui_index);
13707 END LOOP;
13708
13709 END delete_UI_Nodes;
13710
13711 PROCEDURE exist_On_Split_Pages(p_current_model_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE, -->>>
13712 p_parent_ui_node IN CZ_UI_PAGE_ELEMENTS%ROWTYPE,
13713 px_page_split_seq_nbr OUT NOCOPY NUMBER,
13714 l_exist_on_split_pages_flag OUT NOCOPY VARCHAR2) IS
13715
13716 l_page_persistent_node_id NUMBER;
13717 l_flag VARCHAR2(1);
13718
13719 BEGIN
13720
13721 l_exist_on_split_pages_flag := G_NO_FLAG;
13722
13723 SELECT persistent_node_id,split_seq_nbr
13724 INTO l_page_persistent_node_id, px_page_split_seq_nbr FROM CZ_UI_PAGES
13725 WHERE page_id=p_parent_ui_node.page_id AND ui_def_id=g_UI_Context.ui_def_id;
13726
13727 IF px_page_split_seq_nbr=1 THEN
13728 SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
13729 WHERE EXISTS
13730 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13731 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
13732 WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
13733 split_seq_nbr>1 AND deleted_flag NOT IN(G_YES_FLAG)) AND
13734 persistent_node_id=p_current_model_node.persistent_node_id AND
13735 deleted_flag NOT IN(G_YES_FLAG));
13736 ELSIF px_page_split_seq_nbr>1 THEN
13737 SELECT G_YES_FLAG INTO l_exist_on_split_pages_flag FROM dual
13738 WHERE EXISTS
13739 (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
13740 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id IN(SELECT page_id FROM CZ_UI_PAGES
13741 WHERE ui_def_id=g_UI_Context.ui_def_id AND persistent_node_id=l_page_persistent_node_id AND
13742 split_seq_nbr<>px_page_split_seq_nbr AND deleted_flag NOT IN(G_YES_FLAG)) AND
13743 persistent_node_id=p_current_model_node.persistent_node_id AND
13744 deleted_flag NOT IN(G_YES_FLAG));
13745 END IF;
13746
13747 EXCEPTION
13748 WHEN NO_DATA_FOUND THEN
13749 l_exist_on_split_pages_flag := G_NO_FLAG;
13750 END exist_On_Split_Pages;
13751
13752 --
13753 -- refresh given UI element recursively
13754 --
13755 PROCEDURE refresh_UI_Subtree(p_element_id IN VARCHAR2,
13756 p_page_id IN NUMBER,
13757 p_suppress_refresh_flag IN VARCHAR2 DEFAULT NULL) IS
13758
13759 l_nodes_tbl model_nodes_tbl_type;
13760 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
13761 l_non_del_child_nodes_tbl model_nodes_tbl_type;
13762 l_ui_nodes_tbl ui_page_elements_tbl_type;
13763 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
13764 l_next_level_ui_page_idx VARCHAR2(15);
13765 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13766 l_element_id_tbl varchar_tbl_type;
13767 l_page_id_tbl number_tbl_type;
13768 l_suppress_refresh_flag_tbl varchar_tbl_type;
13769
13770 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
13771 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13772 l_new_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
13773 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
13774 l_current_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
13775 l_seq_nbr NUMBER;
13776 l_max_split_nbr NUMBER;
13777 l_page_split_seq_nbr NUMBER;
13778 l_exist_on_split_pages_flag VARCHAR2(1);
13779
13780 BEGIN
13781 --
13782 -- get UI data of current UI element
13783 --
13784 l_ui_node := get_UI_Element(p_element_id,p_page_id);
13785
13786 IF l_ui_node.persistent_node_id IS NULL THEN
13787 GOTO NEXT_LEVEL;
13788 END IF;
13789
13790 --
13791 -- get ps_node_id of curren model node ( <-> model node associated with the current UI element )
13792 --
13793 l_ps_node := get_Model_Node_By_Persist_Id(l_ui_node.persistent_node_id,
13794 g_UI_Context.devl_project_id);
13795
13796 IF l_ps_node.deleted_flag=G_YES_FLAG OR l_ps_node.ps_node_id IS NULL OR
13797 l_ps_node.ui_omit=G_YES_FLAG THEN
13798 IF l_ui_node.pagebase_persistent_node_id=l_ui_node.persistent_node_id THEN -- UI page
13799 --
13800 -- delete UI page or deassociate UI page from model nodes
13801 --
13802 delete_UI_Page(l_ui_node);
13803
13804 ELSIF l_ui_node.region_persistent_node_id=l_ui_node.persistent_node_id AND
13805 l_ui_node.pagebase_persistent_node_id<>l_ui_node.persistent_node_id THEN -- UI region
13806 --
13807 -- delete UI region or deassociate UI region from model nodes
13808 --
13809 delete_UI_Region(l_ui_node);
13810
13811 ELSE -- regular UI element
13812 --
13813 -- delete UI element or deassociate UI element from model nodes
13814 --
13815 delete_UI_Element(l_ui_node,p_suppress_refresh_flag, TRUE);
13816
13817 END IF;
13818 RETURN;
13819 END IF;
13820
13821 --
13822 -- get child nodes of current model node
13823 --
13824 get_Child_Nodes(l_ps_node.ps_node_id,
13825 g_UI_Context.show_all_nodes_flag,
13826 l_seq_nodes_tbl,
13827 l_nodes_tbl,
13828 l_non_del_child_nodes_tbl);
13829
13830 --
13831 -- set suppress_refresh_flag flag for current UI element
13832 --
13833 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13834 l_suppress_refresh_flag := G_YES_FLAG;
13835 ELSE
13836 IF p_suppress_refresh_flag IS NULL THEN
13837 l_suppress_refresh_flag := l_ui_node.suppress_refresh_flag;
13838 ELSE
13839 l_suppress_refresh_flag := p_suppress_refresh_flag;
13840 END IF;
13841 END IF;
13842
13843 --
13844 -- get child nodes of UI node l_ui_node
13845 --
13846 get_Child_UI_Nodes(p_parent_ui_node => l_ui_node,
13847 p_child_nodes_tbl => l_nodes_tbl,
13848 x_ui_nodes_tbl => l_ui_nodes_tbl,
13849 p_suppress_refresh_flag => l_suppress_refresh_flag);
13850
13851 --
13852 -- check root of subtree
13853 --
13854 IF l_ui_node.parent_element_id IS NULL THEN
13855 check_UI_Node_Changes(l_ui_node, l_ps_node);
13856 END IF;
13857
13858 l_seq_nbr := l_seq_nodes_tbl.First;
13859 LOOP
13860
13861 IF l_seq_nbr IS NULL THEN
13862 EXIT;
13863 END IF;
13864
13865 l_current_model_node := l_seq_nodes_tbl(l_seq_nbr);
13866
13867 -- node does not exist in UI on the same level as in Model tree
13868 IF NOT(l_ui_nodes_tbl.EXISTS(l_current_model_node.persistent_node_id)) THEN
13869
13870 l_max_split_nbr := get_Last_Split_Page_Nbr(p_page_id);
13871
13872 IF (l_max_split_nbr > 1) THEN -- case when page was split
13873
13874 exist_On_Split_Pages(l_current_model_node, l_ui_node,
13875 l_page_split_seq_nbr, l_exist_on_split_pages_flag);
13876
13877 IF l_exist_on_split_pages_flag=G_NO_FLAG AND
13878 l_page_split_seq_nbr=l_max_split_nbr THEN
13879 --
13880 -- add new UI Node
13881 --
13882 add_New_UI_Node(p_ui_node => l_ui_node,
13883 p_model_node => l_current_model_node,
13884 p_suppress_refresh_flag => l_suppress_refresh_flag,
13885 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
13886 x_new_ui_node => l_new_ui_node);
13887 END IF;
13888 ELSE
13889 --
13890 -- add new UI Node
13891 --
13892 add_New_UI_Node(p_ui_node => l_ui_node,
13893 p_model_node => l_current_model_node,
13894 p_suppress_refresh_flag => l_suppress_refresh_flag,
13895 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
13896 x_new_ui_node => l_new_ui_node);
13897 END IF;
13898
13899 ELSE -- UI element exists ,but associated model node was changed
13900 --
13901 -- check UI node changes
13902 --
13903 check_UI_Node_Changes(l_ui_nodes_tbl(l_current_model_node.persistent_node_id), l_current_model_node);
13904
13905 END IF; -- end of IF NOT(l_nodes_tbl.EXISTS(i.persistent_node_id))
13906
13907 l_seq_nbr := l_seq_nodes_tbl.NEXT(l_seq_nbr);
13908
13909 END LOOP;
13910
13911 << NEXT_LEVEL >>
13912
13913 l_element_id_tbl.DELETE;
13914 l_page_id_tbl.DELETE;
13915 l_suppress_refresh_flag_tbl.DELETE;
13916
13917 --
13918 -- handle next level of UI tree ( recursion )
13919 --
13920 SELECT element_id, page_id, suppress_refresh_flag
13921 BULK COLLECT INTO l_element_id_tbl, l_page_id_tbl, l_suppress_refresh_flag_tbl
13922 FROM CZ_UI_PAGE_ELEMENTS
13923 WHERE ui_def_id = g_UI_Context.ui_def_id AND
13924 page_id=p_page_id AND
13925 parent_element_id = l_ui_node.element_id AND
13926 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
13927 (element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE));
13928
13929 IF l_element_id_tbl.COUNT > 0 THEN
13930 FOR k IN l_element_id_tbl.First..l_element_id_tbl.Last
13931 LOOP
13932 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13933 l_suppress_refresh_flag := G_YES_FLAG;
13934 ELSE
13935 l_suppress_refresh_flag := NVL(l_suppress_refresh_flag_tbl(k),l_suppress_refresh_flag);
13936 END IF;
13937
13938 refresh_UI_Subtree(p_element_id => l_element_id_tbl(k),
13939 p_page_id => l_page_id_tbl(k),
13940 p_suppress_refresh_flag => l_suppress_refresh_flag);
13941
13942 END LOOP;
13943 END IF;
13944 --kdande; Bug 6875560; 20-Mar-2008; Modified the PLSQL table FOR LOOP to
13945 --simple LOOP to get the indexes as the index is a VARCHAR2 column
13946 IF l_next_level_ui_pages_tbl.COUNT > 0 THEN
13947 l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.FIRST;
13948 LOOP
13949 EXIT WHEN l_next_level_ui_page_idx IS NULL;
13950 IF g_UI_Context.suppress_refresh_flag=G_YES_FLAG THEN
13951 l_suppress_refresh_flag := G_YES_FLAG;
13952 ELSE
13953 l_suppress_refresh_flag := NVL(l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).suppress_refresh_flag,l_suppress_refresh_flag);
13954 END IF;
13955 refresh_UI_Subtree(p_element_id => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).element_id,
13956 p_page_id => l_next_level_ui_pages_tbl(l_next_level_ui_page_idx).page_id,
13957 p_suppress_refresh_flag => l_suppress_refresh_flag);
13958 l_next_level_ui_page_idx := l_next_level_ui_pages_tbl.NEXT(l_next_level_ui_page_idx);
13959 END LOOP;
13960 END IF;
13961
13962 END refresh_UI_Subtree;
13963
13964 --
13965 -- return TRUE if UI page with page_id=p_page_id is empty
13966 -- else return FALSE
13967 --
13968 FUNCTION is_Empty_Page(p_page_id IN NUMBER)
13969 RETURN BOOLEAN IS
13970 l_flag VARCHAR2(1);
13971 BEGIN
13972 SELECT G_YES_FLAG INTO l_flag
13973 FROM CZ_UI_PAGE_ELEMENTS
13974 WHERE ui_def_id=g_UI_Context.ui_def_id AND
13975 page_id=p_page_id AND
13976 parent_element_id IS NOT NULL AND
13977 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE) AND
13978 rownum<2;
13979 RETURN FALSE;
13980 EXCEPTION
13981 WHEN NO_DATA_FOUND THEN
13982 RETURN TRUE;
13983 END is_Empty_Page;
13984
13985 --
13986 -- perform a special handling for empty UI pages :
13987 -- set CZ_UI_PAGE_REF.target_page_id=NULL for those UI pages
13988 -- which are empty UI pages
13989 --
13990 PROCEDURE handle_Empty_Pages IS
13991
13992 l_empty_page BOOLEAN;
13993
13994 BEGIN
13995
13996 --
13997 -- exlude from UI Page Refs those UI pages
13998 -- which have no UI content in it
13999 --
14000 FOR i IN(SELECT page_ref_id,
14001 target_page_id,target_persistent_node_id,
14002 NVL(empty_page_flag,G_NO_FLAG) AS empty_page_flag FROM CZ_UI_PAGE_REFS
14003 WHERE ui_def_id=g_UI_Context.ui_def_id AND deleted_flag=G_NO_FLAG AND
14004 target_page_id IN(SELECT page_id FROM CZ_UI_PAGES
14005 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14006 NVL(suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG AND
14007 deleted_flag IN(G_NO_FLAG,G_MARK_TO_REFRESH,G_MARK_TO_ADD) ))
14008 LOOP
14009
14010 -- check page - is it empty or no ?
14011 l_empty_page := is_Empty_Page(i.target_page_id);
14012
14013 IF NVL(i.empty_page_flag,G_NO_FLAG)=G_NO_FLAG AND l_empty_page THEN
14014
14015 UPDATE CZ_UI_PAGE_REFS
14016 SET empty_page_flag=G_YES_FLAG
14017 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14018 page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14019
14020 IF SQL%ROWCOUNT>0 THEN
14021 UPDATE CZ_UI_PAGES
14022 SET empty_page_flag=G_YES_FLAG
14023 WHERE page_id=i.target_page_id AND
14024 ui_def_id=g_UI_Context.ui_def_id;
14025 END IF;
14026
14027 ELSIF i.empty_page_flag=G_YES_FLAG AND l_empty_page=FALSE THEN
14028
14029 UPDATE CZ_UI_PAGE_REFS
14030 SET empty_page_flag=G_NO_FLAG
14031 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14032 page_ref_id=i.page_ref_id AND NVL(modified_flags,0)=0;
14033
14034 IF SQL%ROWCOUNT>0 THEN
14035 UPDATE CZ_UI_PAGES
14036 SET empty_page_flag=G_NO_FLAG
14037 WHERE page_id=i.target_page_id AND
14038 ui_def_id=g_UI_Context.ui_def_id;
14039 END IF;
14040
14041 END IF;
14042
14043 END LOOP;
14044
14045 END handle_Empty_Pages;
14046
14047 PROCEDURE set_SLMenu_Order(p_page_set_id IN NUMBER) IS
14048
14049 l_counter NUMBER:=0;
14050 l_split_seq_nbr NUMBER;
14051
14052 PROCEDURE set_Page_Ref_Order_(p_page_ref_id IN VARCHAR2) IS
14053 BEGIN
14054 FOR i IN(SELECT page_ref_id FROM CZ_UI_PAGE_REFS a
14055 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14056 parent_page_ref_id=p_page_ref_id AND
14057 EXISTS
14058 (SELECT NULL FROM CZ_UI_PAGES
14059 WHERE page_id=a.target_page_id AND ui_def_id=g_UI_Context.ui_def_id) AND
14060 deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG) ORDER BY seq_nbr)
14061 LOOP
14062 l_counter := l_counter + 1;
14063 UPDATE CZ_UI_PAGE_REFS
14064 SET seq_nbr = l_counter
14065 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14066 page_ref_id=i.page_ref_id;
14067 set_Page_Ref_Order_(i.page_ref_id);
14068 END LOOP;
14069 END set_Page_Ref_Order_;
14070
14071 BEGIN
14072 FOR i IN(SELECT page_ref_id,target_page_id,target_persistent_node_id FROM CZ_UI_PAGE_REFS
14073 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14074 page_set_id=p_page_set_id AND
14075 parent_page_ref_id IS NULL AND
14076 deleted_flag=G_NO_FLAG)
14077 LOOP
14078 SELECT NVL(split_seq_nbr,1) INTO l_split_seq_nbr
14079 FROM CZ_UI_PAGES
14080 WHERE page_id=i.target_page_id AND
14081 ui_def_id=g_UI_Context.ui_def_id;
14082
14083 IF l_split_seq_nbr > 1 THEN
14084 UPDATE CZ_UI_PAGE_REFS
14085 SET seq_nbr = l_split_seq_nbr
14086 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14087 page_ref_id=i.page_ref_id;
14088 l_counter := l_split_seq_nbr;
14089 ELSE
14090 UPDATE CZ_UI_PAGE_REFS
14091 SET seq_nbr = 1
14092 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14093 page_ref_id=i.page_ref_id;
14094 SELECT MAX(split_seq_nbr) INTO l_counter FROM CZ_UI_PAGES
14095 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14096 persistent_node_id=i.target_persistent_node_id AND
14097 deleted_flag IN (G_MARK_TO_ADD,G_MARK_TO_REFRESH,G_NO_FLAG);
14098 END IF;
14099
14100 set_Page_Ref_Order_(i.page_ref_id);
14101 END LOOP;
14102 END set_SLMenu_Order;
14103
14104 --
14105 -- set ordering for UI elements on UI pages
14106 --
14107 PROCEDURE handle_SLMenu_Order IS
14108 BEGIN
14109 FOR i IN(SELECT page_set_id FROM CZ_UI_PAGE_SETS
14110 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14111 page_set_type=G_SINGLE_LEVEL_MENU AND
14112 deleted_flag=G_NO_FLAG)
14113 LOOP
14114 set_SLMenu_Order(i.page_set_id);
14115 END LOOP;
14116 END handle_SLMenu_Order;
14117
14118 PROCEDURE check_Boundaries IS
14119 l_node_is_reachable NUMBER := -1;
14120 l_has_unreach BOOLEAN := FALSE;
14121 BEGIN
14122 FOR i IN(SELECT page_id,pagebase_expl_node_id FROM CZ_UI_PAGES
14123 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14124 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14125 LOOP
14126 FOR k IN(SELECT element_id,persistent_node_id,model_ref_expl_id,name
14127 FROM CZ_UI_PAGE_ELEMENTS
14128 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14129 page_id=i.page_id AND
14130 deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG))
14131 LOOP
14132 BEGIN
14133 l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(i.pagebase_expl_node_id,
14134 k.model_ref_expl_id,
14135 k.persistent_node_id);
14136 IF l_node_is_reachable=0 THEN
14137 l_has_unreach := TRUE;
14138 add_Error_Message(p_message_name => 'CZDEV_UI_ERR_VIR_BDR_BIND',
14139 p_token_name => 'PICKEDNODENAME',
14140 p_token_value => k.name,
14141 p_fatal_error => TRUE);
14142 END IF;
14143 EXCEPTION
14144 WHEN OTHERS THEN
14145 NULL;
14146 END;
14147 END LOOP;
14148 END LOOP;
14149
14150 IF l_has_unreach THEN
14151 RAISE UNREACH_UI_NODE;
14152 END IF;
14153 END check_Boundaries;
14154
14155
14156 -- Gets the UI Node for the parent of this PsNode
14157 --
14158 PROCEDURE get_parent_ui_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14159 p_ord_siblings IN model_nodes_tbl_type,
14160 p_ps_node_index IN NUMBER,
14161 x_parent_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE,
14162 x_insert_index OUT NOCOPY NUMBER,
14163 x_refresh_enabled_parent_found OUT NOCOPY BOOLEAN,
14164 x_atleast_one_parent_found OUT NOCOPY BOOLEAN) IS
14165
14166 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14167 l_predecessor CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14168 l_successor CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14169 l_pred_persistent_node_id NUMBER := NULL;
14170 l_succ_persistent_node_id NUMBER := NULL;
14171 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14172 l_parent_element_id NUMBER;
14173 l_page_id NUMBER;
14174 l_added BOOLEAN;
14175
14176 BEGIN
14177
14178 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14179
14180 DEBUG('asp:Find parent ' || p_ps_node_index || 'siblings count = ' || p_ord_siblings.COUNT);
14181
14182 l_added := FALSE;
14183
14184 IF p_ps_node_index > 1 THEN
14185 l_predecessor := p_ord_siblings(p_ps_node_index-1);
14186 l_pred_persistent_node_id := l_predecessor.persistent_node_id;
14187 END IF;
14188
14189 IF p_ps_node_index > 0 AND p_ps_node_index < p_ord_siblings.COUNT THEN
14190 FOR i in p_ps_node_index+1..p_ord_siblings.COUNT
14191 LOOP
14192 IF p_ord_siblings(i).deleted_flag = G_NO_FLAG AND p_ord_siblings(i).creation_date < g_UI_Context.ui_timestamp_refresh THEN
14193 l_successor := p_ord_siblings(i);
14194 l_succ_persistent_node_id := l_successor.persistent_node_id;
14195 EXIT;
14196 END IF;
14197 END LOOP;
14198 END IF;
14199
14200 x_refresh_enabled_parent_found := FALSE;
14201 x_atleast_one_parent_found := FALSE;
14202
14203 -- First find all regions that are bound to the parent of this PS Node and
14204 -- contain the predecessor and successor of this node.
14205
14206 IF l_pred_persistent_node_id IS NOT NULL AND l_succ_persistent_node_id IS NOT NULL THEN
14207 FOR i IN (SELECT *
14208 FROM CZ_UI_PAGE_ELEMENTS pe1
14209 WHERE ui_def_Id = g_UI_Context.ui_def_id
14210 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14211 AND persistent_node_id = l_pred_persistent_node_id
14212 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14213 AND parent_element_id IS NOT NULL
14214 AND EXISTS ( SELECT 1
14215 FROM CZ_UI_PAGE_ELEMENTS pe2
14216 WHERE ui_def_Id = g_UI_Context.ui_def_id
14217 AND pe2.page_id = pe1.page_id
14218 AND pe2.parent_element_id = pe1.parent_element_id
14219 AND pe2.persistent_node_id = l_succ_persistent_node_id
14220 AND pe2.seq_nbr = pe1.seq_nbr + 1
14221 AND deleted_flag = G_NO_FLAG
14222 ))
14223 LOOP
14224
14225 DEBUG('asp:Found parent with both siblings ' || i.parent_element_id);
14226 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14227 x_atleast_one_parent_found := TRUE;
14228 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14229 x_insert_index := i.seq_nbr + 1;
14230 x_refresh_enabled_parent_found := TRUE;
14231 EXIT;
14232 END IF;
14233 END LOOP;
14234 END IF;
14235
14236 -- Now find all regions that are bound to the parent of this PS Node and contain
14237 -- the predecessor of this node
14238
14239
14240 IF l_pred_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14241 FOR i IN (SELECT *
14242 FROM CZ_UI_PAGE_ELEMENTS pe1
14243 WHERE ui_def_Id = g_UI_Context.ui_def_id
14244 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14245 AND persistent_node_id = l_pred_persistent_node_id
14246 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14247 AND parent_element_id IS NOT NULL)
14248 LOOP
14249 DEBUG('asp:Found parent with predecessor ' || i.parent_element_id || ' page_id ' || i.page_id);
14250 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14251 x_atleast_one_parent_found := TRUE;
14252 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14253 x_insert_index := i.seq_nbr + 1;
14254 x_refresh_enabled_parent_found := TRUE;
14255 EXIT;
14256 END IF;
14257 END LOOP;
14258 END IF;
14259
14260
14261 -- Now find all regions that are bound to the parent of this PS Node and contain the
14262 -- successor od this node
14263
14264 IF l_succ_persistent_node_id IS NOT NULL AND NOT x_refresh_enabled_parent_found THEN
14265
14266 FOR i IN (SELECT *
14267 FROM CZ_UI_PAGE_ELEMENTS pe1
14268 WHERE ui_def_Id = g_UI_Context.ui_def_id
14269 AND region_persistent_node_id = l_parent_ps_node.persistent_node_id
14270 AND persistent_node_id = l_succ_persistent_node_id
14271 AND deleted_flag = G_NO_FLAG
14272 AND parent_element_id IS NOT NULL)
14273 LOOP
14274 DEBUG('asp:Found parent with successor ' || i.parent_element_id || ' i.seq_nbr = ' || i.seq_nbr);
14275 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14276 x_atleast_one_parent_found := TRUE;
14277 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14278 x_insert_index := i.seq_nbr;
14279 x_refresh_enabled_parent_found := TRUE;
14280 EXIT;
14281 END IF;
14282 END LOOP;
14283
14284 END IF;
14285
14286
14287 -- we still haven't managed to add UI for the node. We will now look for a region
14288 -- containing the max number of siblings of this node
14289
14290 IF NOT x_refresh_enabled_parent_found THEN
14291
14292 l_parent_element_id := NULL;
14293 l_page_id := NULL;
14294
14295 FOR i IN (SELECT parent_element_id, page_id, count(parent_element_id) max_count
14296 FROM CZ_UI_PAGE_ELEMENTS pe
14297 WHERE ui_def_Id = g_UI_Context.ui_def_id
14298 AND parent_persistent_node_id = l_parent_ps_node.persistent_node_id
14299 AND pagebase_persistent_node_id <> persistent_node_id
14300 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH)
14301 AND parent_element_id IS NOT NULL
14302 AND NOT (p_ps_node.ps_node_type <> G_BOM_OPTION_CLASS_TYPE
14303 AND ((SELECT NVL(ps_node_type,G_UNDEFINED_DATA_TYPE)
14304 FROM CZ_PS_NODES
14305 WHERE devl_project_id = p_ps_node.devl_project_id
14306 AND persistent_node_id = pe.persistent_node_id) = G_BOM_OPTION_CLASS_TYPE))
14307 GROUP BY parent_element_id, page_id
14308 ORDER BY count(parent_element_id) DESC)
14309 LOOP
14310 DEBUG('asp:Found parent with max siblings ' || i.parent_element_id || ', page_id ' || i.page_id);
14311 x_parent_ui_node := get_UI_Element(i.parent_element_id, i.page_id);
14312 DEBUG('asp:Got the parent node ');
14313 x_atleast_one_parent_found := TRUE;
14314 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14315 x_insert_index := -1;
14316 x_refresh_enabled_parent_found := TRUE;
14317 EXIT;
14318 END IF;
14319 END LOOP;
14320
14321 --DEBUG('asp:Before finding region bound to parent node ');
14322
14323 END IF;
14324
14325 IF NOT x_refresh_enabled_parent_found THEN
14326
14327 FOR j IN (SELECT *
14328 FROM CZ_UI_PAGE_ELEMENTS
14329 WHERE ui_def_id = g_UI_Context.ui_def_id AND
14330 persistent_node_Id = l_parent_ps_node.persistent_node_id AND
14331 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH) AND
14332 element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE))
14333 LOOP
14334 DEBUG('asp:Found parent with no siblings ' || j.element_id);
14335 x_parent_ui_node := get_UI_Element(j.element_id, j.page_id);
14336 x_atleast_one_parent_found := TRUE;
14337 IF NOT disabled_for_refresh(x_parent_ui_node) THEN
14338 x_insert_index := -1;
14339 x_refresh_enabled_parent_found := TRUE;
14340 EXIT;
14341 END IF;
14342 END LOOP;
14343 END IF;
14344 END get_parent_ui_node;
14345
14346
14347 -- Determines if UI should be added for this ps node.
14348 -- Determines the place (l_parent_ui_node) under which to
14349 -- add UI for this node and add the UI if required
14350
14351 PROCEDURE add_ui_for_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14352 p_ord_siblings IN model_nodes_tbl_type,
14353 p_ps_node_index IN NUMBER DEFAULT NULL,
14354 x_ui_node OUT NOCOPY CZ_UI_PAGE_ELEMENTS%ROWTYPE) IS
14355
14356 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14357 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14358 l_temp_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14359 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
14360 l_insert_index NUMBER;
14361 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14362 l_parent_node_found BOOLEAN;
14363 l_atleast_one_parent_found BOOLEAN;
14364 l_nodes_tbl model_nodes_tbl_type;
14365 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14366 l_non_del_child_nodes_tbl model_nodes_tbl_type;
14367
14368 BEGIN
14369
14370 l_parent_node_found := FALSE;
14371
14372 IF p_ps_node.parent_id IS NOT NULL THEN
14373 -- Find the parent under which to add UI for this node
14374 get_parent_ui_node(p_ps_node,
14375 p_ord_siblings,
14376 p_ps_node_index,
14377 l_parent_ui_node,
14378 l_insert_index,
14379 l_parent_node_found,
14380 l_atleast_one_parent_found);
14381 END IF;
14382
14383
14384 IF l_parent_node_found OR p_ps_node.parent_id IS NULL THEN
14385 add_New_UI_Node(p_ui_node => l_parent_ui_node,
14386 p_insert_index => l_insert_index,
14387 p_model_node => p_ps_node,
14388 p_suppress_refresh_flag => G_NO_FLAG,
14389 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
14390 x_new_ui_node => x_ui_node);
14391
14392 ELSIF NOT l_atleast_one_parent_found THEN
14393
14394 -- We did not find any parent node. So the parent was probably deleted
14395 -- Lets try and add the parent back and then add UI for this node.
14396 -- add_ui_for_ancestors_recursively(p_ps_node, l_new_ui_node);
14397
14398 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14399
14400
14401 get_Child_Nodes(l_parent_ps_node.parent_id,
14402 G_YES_FLAG, -- get all the nodes
14403 l_seq_nodes_tbl,
14404 l_nodes_tbl,
14405 l_non_del_child_nodes_tbl,
14406 G_YES_FLAG);
14407
14408 add_ui_for_node(l_parent_ps_node,
14409 l_non_del_child_nodes_tbl,
14410 l_parent_ps_node.tree_seq,
14411 x_ui_node);
14412
14413 IF x_ui_node.element_id IS NOT NULL THEN
14414
14415 l_temp_ui_node := x_ui_node;
14416
14417 add_New_UI_Node(p_ui_node => l_temp_ui_node,
14418 p_insert_index => -1,
14419 p_model_node => p_ps_node,
14420 p_suppress_refresh_flag => G_NO_FLAG,
14421 x_new_ui_pages_tbl => l_next_level_ui_pages_tbl,
14422 x_new_ui_node => x_ui_node);
14423 END IF;
14424
14425 ELSE
14426 -- We found atleast one parent. It was probably disabled for refresh
14427 -- So we will not add any content for the new node
14428 NULL;
14429
14430 END IF;
14431
14432 END add_ui_for_node;
14433
14434
14435 PROCEDURE propogate_ps_node_remove(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
14436
14437 l_new_parent_persistent_id NUMBER;
14438 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14439
14440 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14441 l_insert_index NUMBER;
14442 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14443 l_parent_node_found BOOLEAN;
14444
14445 BEGIN
14446
14447 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14448
14449 --DEBUG('asp:Deleting UI for ps node ' || p_ps_node.name);
14450
14451 FOR i IN (SELECT *
14452 FROM CZ_UI_PAGE_ELEMENTS pe
14453 WHERE ui_def_Id = g_UI_Context.ui_def_id
14454 AND persistent_node_id = p_ps_node.persistent_node_id
14455 AND deleted_flag = G_NO_FLAG)
14456 LOOP
14457 IF i.pagebase_persistent_node_id=i.persistent_node_id THEN -- UI page
14458 --
14459 -- delete UI page or deassociate UI page from model nodes
14460 --
14461 delete_UI_Page(i);
14462
14463 ELSIF i.region_persistent_node_id=i.persistent_node_id AND
14464
14465 i.pagebase_persistent_node_id<>i.persistent_node_id THEN -- UI region
14466 --
14467 -- delete UI region or deassociate UI region from model nodes
14468 --
14469 delete_UI_Region(i);
14470
14471 ELSE -- regular UI element
14472 --
14473 -- delete UI element or deassociate UI element from model nodes
14474 --
14475 l_suppress_refresh_flag := G_NO_FLAG;
14476
14477 IF disabled_for_refresh(i) THEN
14478 l_suppress_refresh_flag := G_YES_FLAG;
14479 END IF;
14480
14481 --DEBUG('asp:Delete element ' || i.element_id);
14482 delete_UI_Element(i, l_suppress_refresh_flag, TRUE);
14483
14484 END IF;
14485
14486 END LOOP;
14487 END;
14488
14489
14490 PROCEDURE propogate_ps_node_move(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14491 p_ord_siblings IN model_nodes_tbl_type,
14492 p_ps_node_index IN NUMBER DEFAULT NULL,
14493 x_model_ref_expl_id_changed OUT NOCOPY VARCHAR2) IS
14494
14495 l_new_parent_persistent_id NUMBER;
14496 l_parent_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14497
14498 l_parent_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14499 l_insert_index NUMBER;
14500 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14501 l_parent_node_found BOOLEAN;
14502 l_diff NUMBER;
14503 l_max_prev_seq_nbr NUMBER;
14504 l_max_src_seq_nbr NUMBER;
14505 l_src_range NUMBER;
14506 l_atleast_one_parent_found BOOLEAN;
14507 l_parent_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
14508 l_pagebase_expl_node_id CZ_UI_PAGES.pagebase_expl_node_id%TYPE;
14509 l_node_is_reachable NUMBER := -1;
14510 l_model_ref_expl_id NUMBER;
14511 l_count NUMBER;
14512
14513 BEGIN
14514
14515 x_model_ref_expl_id_changed := 'U'; -- Unknown
14516
14517 l_parent_ps_node := get_Model_Node( p_ps_node.parent_id );
14518
14519 IF p_ps_node.ps_node_type = G_REFERENCE_TYPE AND
14520 g_UI_Context.primary_navigation = G_MODEL_TREE_MENU AND
14521 g_UI_Context.page_set_id IS NOT NULL THEN
14522
14523 -- This is a reference node and it has been moved. Reference nodes will not have pages
14524 -- in this UI which are in the tree. So have to deal with page_refs for references
14525 -- explicitly
14526 FOR i in (SELECT *
14527 FROM CZ_UI_PAGE_REFS
14528 WHERE ui_def_id = g_UI_Context.ui_def_id
14529 AND page_set_id = g_UI_Context.page_set_id
14530 AND target_ui_def_id IS NOT NULL
14531 AND target_persistent_node_id = p_ps_node.persistent_node_id)
14532 LOOP
14533 move_page_ref(i.page_set_id, i.page_ref_id, p_ps_node, l_parent_page_ref_id);
14534 replace_page_ref_target_path(p_ps_node);
14535 END LOOP;
14536
14537 END IF;
14538
14539 FOR i IN (SELECT *
14540 FROM CZ_UI_PAGE_ELEMENTS pe
14541 WHERE ui_def_Id = g_UI_Context.ui_def_id
14542 AND persistent_node_id = p_ps_node.persistent_node_id
14543 AND region_persistent_node_id <> l_parent_ps_node.persistent_node_id
14544 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_DELETE))
14545 LOOP
14546
14547 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
14548 p_ps_node_id => p_ps_node.ps_node_id,
14549 p_component_id => p_ps_node.component_id,
14550 p_ps_node_type => p_ps_node.ps_node_type);
14551
14552 -- This piece of code determines if the model_ref_expl_id of this page_element is
14553 -- different from the current explosion_id of the PS Node. If information is then
14554 -- used later to fix the explosion_ids
14555 IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
14556 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14557 x_model_ref_expl_id_changed := G_YES_FLAG;
14558 ELSE
14559 x_model_ref_expl_id_changed := G_NO_FLAG;
14560 END IF;
14561 END IF;
14562
14563 -- Developer writes element_type 521 (UI Region) for the root_region of a user created page
14564 -- UI Gen/ Refresh writes element_type 520 (UI Page) for the same region. So we cannot reply only
14565 -- on element_type to determine if the page element is for the root region of the page
14566 -- Hence we check for parent_element_id also
14567 IF ( (i.element_type IS NOT NULL AND i.element_type = G_UI_PAGE_NODE_TYPE) OR i.parent_element_id IS NULL ) THEN
14568
14569 -- If the node is a page node then we dont try to move the node to another page
14570 -- but we do have to fix the path of the page and the associated page ref
14571
14572 move_page_ref(i, p_ps_node, l_parent_page_ref_id);
14573 replace_page_ref_target_path(i, p_ps_node);
14574
14575
14576 ELSE
14577 --DEBUG('asp:Found UI for moved PS node ' || p_ps_node.name || ', element_id ' || i.element_id);
14578 -- Determine if this needs to be moved
14579
14580 l_parent_node_found := FALSE;
14581
14582 -- Find the parent under which to add UI for this node
14583 get_parent_ui_node(p_ps_node,
14584 p_ord_siblings,
14585 p_ps_node_index,
14586 l_parent_ui_node,
14587 l_insert_index,
14588 l_parent_node_found,
14589 l_atleast_one_parent_found);
14590
14591 IF l_parent_node_found THEN
14592
14593 g_tgt_pg_to_src_pg_map(l_parent_ui_node.page_id)(TO_NUMBER(i.element_id)) := i.page_id;
14594 g_elements_to_move(i.page_id)(TO_NUMBER(i.element_id)) := TO_NUMBER(i.element_id);
14595
14596 IF l_insert_index > 0 THEN
14597 l_max_prev_seq_nbr := l_insert_index-1;
14598 ELSE
14599 SELECT NVL(MAX(seq_nbr),0) INTO l_max_prev_seq_nbr FROM CZ_UI_PAGE_ELEMENTS
14600 START WITH ui_def_id=g_UI_Context.ui_def_id AND
14601 page_id=l_parent_ui_node.page_id AND
14602 element_id=l_parent_ui_node.element_id AND
14603 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
14604 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
14605 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= l_parent_ui_node.page_id AND
14606 page_id=l_parent_ui_node.page_id AND PRIOR element_id=parent_element_id AND
14607 PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
14608 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14609
14610 l_insert_index := l_max_prev_seq_nbr + 1;
14611 END IF;
14612
14613 SELECT NVL(MAX(seq_nbr),0), NVL(COUNT(seq_nbr), 0) INTO l_max_src_seq_nbr, l_count FROM CZ_UI_PAGE_ELEMENTS
14614 START WITH ui_def_id=g_UI_Context.ui_def_id AND
14615 page_id=i.page_id AND
14616 element_id=i.element_id AND
14617 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG)
14618 CONNECT BY PRIOR ui_def_id=g_UI_Context.ui_def_id AND
14619 ui_def_id=g_UI_Context.ui_def_id AND PRIOR page_id= i.page_id
14620 AND page_id=i.page_id AND PRIOR element_id=parent_element_id AND
14621 PRIOR deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG) AND
14622 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14623
14624 l_src_range := l_max_src_seq_nbr - i.seq_nbr + 1;
14625
14626 -- move the elements after the insert point by adding the range value computed above
14627 UPDATE CZ_UI_PAGE_ELEMENTS
14628 SET seq_nbr=seq_nbr+l_src_range
14629 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14630 page_id=l_parent_ui_node.page_id AND
14631 seq_nbr>l_max_prev_seq_nbr AND
14632 deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG);
14633
14634 l_diff := l_insert_index - i.seq_nbr;
14635
14636 UPDATE CZ_UI_PAGE_ELEMENTS
14637 SET seq_nbr=seq_nbr + l_diff,
14638 page_id=l_parent_ui_node.page_id,
14639 pagebase_persistent_node_id=l_parent_ui_node.pagebase_persistent_node_id,
14640 deleted_flag=DECODE(deleted_flag, G_MARK_TO_DELETE, G_NO_FLAG, deleted_flag)
14641 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14642 page_id=i.page_id AND
14643 seq_nbr >= i.seq_nbr AND
14644 seq_nbr <= l_max_src_seq_nbr AND
14645 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
14646
14647 IF i.deleted_flag <> G_MARK_TO_DELETE THEN
14648 UPDATE CZ_UI_PAGE_ELEMENTS
14649 SET seq_nbr=seq_nbr - l_count
14650 WHERE ui_def_id=g_UI_Context.ui_def_id AND
14651 page_id=i.page_id AND
14652 seq_nbr > l_max_src_seq_nbr AND
14653 deleted_flag NOT IN(G_YES_FLAG, G_LIMBO_FLAG);
14654 END IF;
14655
14656 UPDATE CZ_UI_PAGE_ELEMENTS
14657 SET parent_element_id = l_parent_ui_node.element_id,
14658 parent_persistent_node_id = l_parent_ps_node.persistent_node_id,
14659 region_persistent_node_id = l_parent_ui_node.persistent_node_id,
14660 deleted_flag = G_MARK_TO_MOVE
14661 WHERE ui_def_id = i.ui_def_id AND
14662 page_Id = l_parent_ui_node.page_Id AND
14663 element_id = i.element_id;
14664
14665
14666 mark_UI_Page_As_Refreshed(l_parent_ui_node.page_id, l_parent_ui_node.ui_def_id);
14667
14668 -- update the page_rev_nbr of the other (source) page
14669 UPDATE CZ_UI_PAGES
14670 SET page_rev_nbr=page_rev_nbr+1
14671 WHERE page_id=i.page_id AND ui_def_id=i.ui_def_id;
14672
14673 ELSE -- If parent_node not found
14674 -- We cannot move this node to another region since we have not found any such
14675 -- region which can hold this node
14676 -- So we will try and keep this node where it is. We will however have to
14677 -- update the model_path of this control and all controls under it.
14678 -- So lets just mark this node for refresh and let the second pass do the model_path
14679 -- update
14680
14681
14682
14683 SELECT pagebase_expl_node_id INTO l_pagebase_expl_node_id
14684 FROM CZ_UI_PAGES
14685 WHERE ui_def_id=g_UI_Context.ui_def_id
14686 AND page_id = i.page_id
14687 AND deleted_flag NOT IN(G_LIMBO_FLAG,G_MARK_TO_DELETE,G_YES_FLAG);
14688
14689
14690 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);
14691
14692 l_node_is_reachable :=CZ_DEVELOPER_UTILS_PVT.in_boundary(l_pagebase_expl_node_id,
14693 l_model_ref_expl_id,
14694 i.persistent_node_id);
14695
14696 DEBUG('asp: l_node_is_reachable = ' || l_node_is_reachable);
14697
14698 IF l_node_is_reachable=0 THEN
14699 -- The PS node associated to this control is not reachable from the current page
14700 -- So we have to disassociate this UI controls from the PS Node
14701
14702 DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Disassociating from PS Node');
14703
14704 UPDATE CZ_UI_PAGE_ELEMENTS
14705 SET deleted_flag = G_MARK_TO_DEASSOCIATE,
14706 persistent_node_id = 0
14707 WHERE ui_def_id = i.ui_def_id
14708 AND page_id = i.page_id
14709 AND element_id IN
14710 (SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
14711 START WITH ui_def_id=i.ui_def_id
14712 AND page_id=i.page_id
14713 AND element_id=i.element_id
14714 CONNECT BY PRIOR ui_def_id=i.ui_def_id AND
14715 page_id = i.page_id AND
14716 PRIOR element_id=parent_element_id AND
14717 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH,G_MARK_TO_MOVE));
14718 ELSE
14719 -- Mark the node for G_MARK_TO_REFRESH so that the second pass will
14720 -- change the model_path. This may not be necessary. Marking the page for
14721 -- refresh might be enough.
14722
14723 DEBUG('asp: Cannot move UI for ' || p_ps_node.name || '. Marking it for refresh');
14724
14725 UPDATE CZ_UI_PAGE_ELEMENTS
14726 SET deleted_flag = G_MARK_TO_REFRESH
14727 WHERE ui_def_id = i.ui_def_id
14728 AND page_id = i.page_id
14729 AND element_id = i.element_id
14730 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH);
14731 END IF;
14732
14733 mark_UI_Page_As_Refreshed(i.page_id, i.ui_def_id);
14734
14735 END IF;
14736 END IF;
14737 END LOOP;
14738 END propogate_ps_node_move;
14739
14740 PROCEDURE propogate_ps_node_type_changes(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14741 x_model_ref_expl_id_changed OUT NOCOPY VARCHAR) IS
14742
14743 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14744 l_model_ref_expl_id NUMBER;
14745
14746 BEGIN
14747
14748 x_model_ref_expl_id_changed := 'U'; -- Unknown
14749
14750 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
14751 p_ps_node_id => p_ps_node.ps_node_id,
14752 p_component_id => p_ps_node.component_id,
14753 p_ps_node_type => p_ps_node.ps_node_type);
14754 FOR i IN (SELECT *
14755 FROM CZ_UI_PAGE_ELEMENTS pe
14756 WHERE ui_def_Id = g_UI_Context.ui_def_id
14757 AND persistent_node_id = p_ps_node.persistent_node_id
14758 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_MOVE))
14759 LOOP
14760
14761
14762 -- This piece of code determines if the model_ref_expl_id of this page_element is
14763 -- different from the current explosion_id of the PS Node. If information is then
14764 -- used later to fix the explosion_ids
14765 IF x_model_ref_expl_id_changed <> G_YES_FLAG THEN
14766 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14767 x_model_ref_expl_id_changed := G_YES_FLAG;
14768 ELSE
14769 x_model_ref_expl_id_changed := G_NO_FLAG;
14770 END IF;
14771 END IF;
14772
14773 l_ui_node := get_UI_Element(i.element_id, i.page_id);
14774 check_UI_Node_Changes(l_ui_node, p_ps_node);
14775
14776 END LOOP;
14777
14778 END propogate_ps_node_type_changes;
14779
14780
14781 FUNCTION ui_node_exits(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) RETURN BOOLEAN IS
14782
14783 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14784
14785 BEGIN
14786
14787 SELECT element_id into l_element_id FROM CZ_UI_PAGE_ELEMENTS
14788 WHERE ui_def_id=g_UI_Context.ui_def_id
14789 AND persistent_node_id=p_ps_node.persistent_node_id
14790 AND deleted_flag=G_NO_FLAG and rownum < 2;
14791 -- need to return the element_id instead
14792 RETURN TRUE;
14793 EXCEPTION
14794 WHEN NO_DATA_FOUND THEN
14795 RETURN FALSE;
14796
14797 END ui_node_exits;
14798
14799 PROCEDURE reorder_tree_node(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE) IS
14800
14801 l_page_set_id CZ_UI_PAGE_SETS.page_set_id%TYPE;
14802 l_page_ref CZ_UI_PAGE_REFS%ROWTYPE;
14803
14804 l_old_seq_nbr NUMBER;
14805 l_new_seq_nbr NUMBER;
14806 l_count NUMBER;
14807 l_diff NUMBER;
14808 l_range_min NUMBER;
14809 l_range_max NUMBER;
14810
14811 BEGIN
14812
14813 IF g_UI_Context.primary_navigation = G_MODEL_TREE_MENU THEN
14814 l_page_set_id := g_UI_Context.page_set_id;
14815
14816 BEGIN
14817
14818 SELECT min(seq_nbr), count(*) INTO l_old_seq_nbr, l_count
14819 FROM CZ_UI_PAGE_REFS
14820 WHERE ui_def_id = g_UI_Context.ui_def_id
14821 AND page_set_id = l_page_set_id
14822 AND target_persistent_node_id = p_ps_node.persistent_node_id
14823 AND deleted_flag = G_NO_FLAG;
14824
14825 SELECT * INTO l_page_ref
14826 FROM CZ_UI_PAGE_REFS
14827 WHERE ui_def_id = g_UI_Context.ui_def_id
14828 AND page_set_id = l_page_set_id
14829 AND target_persistent_node_id = p_ps_node.persistent_node_id
14830 AND deleted_flag = G_NO_FLAG
14831 AND seq_nbr = l_old_seq_nbr
14832 AND rownum < 2;
14833
14834 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);
14835
14836 --DEBUG('asp: reordering tree node ' || p_ps_node.name || ', new seq is ' || l_new_seq_nbr);
14837
14838 IF l_new_seq_nbr = l_old_seq_nbr THEN
14839 --DEBUG('asp: new seq_nbr same as old one');
14840 RETURN;
14841 END IF;
14842
14843 IF l_new_seq_nbr > l_old_seq_nbr THEN
14844 l_range_max := l_new_seq_nbr - 1;
14845 l_range_min := l_old_seq_nbr + l_count;
14846 l_new_seq_nbr := l_new_seq_nbr - l_count;
14847 ELSE
14848 l_count := -l_count;
14849 l_range_min := l_new_seq_nbr;
14850 l_range_max := l_old_seq_nbr -1;
14851 END IF;
14852
14853 --DEBUG('asp: l_range_min: ' || l_range_min || ', l_range_max ' || l_range_max);
14854
14855 UPDATE CZ_UI_PAGE_REFS
14856 SET seq_nbr = seq_nbr - l_count
14857 WHERE ui_def_id = g_UI_Context.ui_def_id
14858 AND page_set_id = l_page_set_id
14859 AND parent_page_ref_id = l_page_ref.parent_page_ref_id
14860 AND target_persistent_node_id <> p_ps_node.persistent_node_id
14861 AND deleted_flag = G_NO_FLAG
14862 AND seq_nbr between l_range_min and l_range_max;
14863
14864 l_diff := l_new_seq_nbr - l_old_seq_nbr;
14865
14866 UPDATE CZ_UI_PAGE_REFS
14867 SET seq_nbr = seq_nbr + l_diff
14868 WHERE ui_def_id = g_UI_Context.ui_def_id
14869 AND page_set_id = l_page_set_id
14870 AND parent_page_ref_id = l_page_ref.parent_page_ref_id
14871 AND target_persistent_node_id = p_ps_node.persistent_node_id
14872 AND deleted_flag = G_NO_FLAG;
14873
14874 EXCEPTION
14875 WHEN NO_DATA_FOUND THEN
14876 NULL;
14877 END;
14878
14879 END IF;
14880
14881 END reorder_tree_node;
14882
14883 PROCEDURE fix_model_ref_expl_ids(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14884 x_model_ref_expl_changed OUT NOCOPY VARCHAR2) IS
14885 l_model_ref_expl_id NUMBER;
14886
14887 BEGIN
14888
14889
14890 x_model_ref_expl_changed := 'U';
14891
14892 l_model_ref_expl_id := get_Expl_Id(p_model_id => p_ps_node.devl_project_id,
14893 p_ps_node_id => p_ps_node.ps_node_id,
14894 p_component_id => p_ps_node.component_id,
14895 p_ps_node_type => p_ps_node.ps_node_type);
14896
14897 FOR i in (SELECT *
14898 FROM CZ_UI_PAGE_ELEMENTS
14899 WHERE ui_def_id = g_UI_Context.ui_def_id
14900 AND persistent_node_id = p_ps_node.persistent_node_id
14901 AND deleted_flag NOT IN (G_YES_FLAG, G_LIMBO_FLAG))
14902 LOOP
14903
14904 IF x_model_ref_expl_changed <> G_YES_FLAG THEN
14905 IF i.model_ref_expl_id <> l_model_ref_expl_id THEN
14906 x_model_ref_expl_changed := G_YES_FLAG;
14907 ELSE
14908 x_model_ref_expl_changed := G_NO_FLAG;
14909 END IF;
14910 END IF;
14911
14912 sync_expl_ids(p_ps_node, i, l_model_ref_expl_id);
14913
14914 END LOOP;
14915
14916 IF x_model_ref_expl_changed = 'U' THEN
14917 x_model_ref_expl_changed := G_YES_FLAG;
14918 END IF;
14919
14920 END fix_model_ref_expl_ids;
14921
14922 PROCEDURE propogate_changes_to_UI(p_ps_node IN CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE,
14923 p_ord_siblings IN model_nodes_tbl_type,
14924 p_ps_node_index IN NUMBER DEFAULT NULL,
14925 p_add_remove_flag IN VARCHAR2 DEFAULT G_EXISTS_FLAG,
14926 p_add_remove_timestamp IN DATE DEFAULT NULL,
14927 p_ancestor_moved IN BOOLEAN DEFAULT FALSE,
14928 p_model_ref_expl_changed IN VARCHAR2) IS
14929
14930 l_added_ui BOOLEAN;
14931 l_removed_ui BOOLEAN;
14932
14933 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
14934 l_nodes_tbl model_nodes_tbl_type;
14935 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
14936 l_non_del_child_nodes_tbl model_nodes_tbl_type;
14937 l_new_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
14938
14939 l_timestamp_add DATE;
14940 l_timestamp_remove DATE;
14941 l_add_remove_flag VARCHAR2(1);
14942 l_add_remove_timestamp DATE;
14943 l_ps_node_index NUMBER;
14944 l_moved_flag BOOLEAN;
14945 l_model_ref_expl_changed1 VARCHAR2(1) := 'U';
14946 l_model_ref_expl_changed2 VARCHAR2(1) := 'U';
14947 l_check_for_bom_table BOOLEAN;
14948
14949 l_bom_table_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14950 l_page_id NUMBER;
14951
14952 l_bom_parent_element CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
14953 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
14954
14955 BEGIN
14956
14957 l_added_ui := FALSE;
14958 l_removed_ui := FALSE;
14959
14960 l_add_remove_flag := G_EXISTS_FLAG;
14961 l_add_remove_timestamp := p_add_remove_timestamp;
14962
14963 l_timestamp_add := NVL(p_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH);
14964 l_timestamp_remove := NVL(p_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH);
14965
14966 IF p_add_remove_flag = G_ADDED_FLAG THEN
14967 IF p_add_remove_timestamp > l_timestamp_add THEN
14968 l_timestamp_add := p_add_remove_timestamp;
14969 END IF;
14970 ELSIF p_add_remove_flag = G_REMOVED_FLAG THEN
14971 IF p_add_remove_timestamp > l_timestamp_remove THEN
14972 l_timestamp_remove := p_add_remove_timestamp;
14973 END IF;
14974 END IF;
14975
14976 IF l_timestamp_add > g_UI_Context.UI_TIMESTAMP_REFRESH
14977 OR l_timestamp_remove > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
14978
14979 --DEBUG('asp:Handling PS Node ' || p_ps_node.name);
14980 --DEBUG('asp:asp:UI_TIMESTAMP_ADD ' || p_ps_node.UI_TIMESTAMP_ADD);
14981 --DEBUG('asp:UI_TIMESTAMP_REMOVE ' || p_ps_node.UI_TIMESTAMP_REMOVE);
14982 --DEBUG('asp:UI_TIMESTAMP_MOVE ' || p_ps_node.UI_TIMESTAMP_MOVE);
14983 --DEBUG('asp:UI_TIMESTAMP_CHANGETYPE ' || p_ps_node.UI_TIMESTAMP_CHANGETYPE);
14984 --DEBUG('asp:');
14985
14986 IF l_timestamp_add > l_timestamp_remove
14987 AND p_ps_node.ui_omit <> G_YES_FLAG
14988 AND p_ps_node.deleted_flag = G_NO_FLAG THEN
14989 -- We need to add UI for this if not already present
14990 IF NOT ui_node_exits( p_ps_node ) THEN
14991 add_ui_for_node(p_ps_node, p_ord_siblings, p_ps_node_index, l_new_ui_node);
14992 l_add_remove_flag := G_ADDED_FLAG;
14993 l_add_remove_timestamp := l_timestamp_add;
14994 l_added_ui := TRUE;
14995 END IF;
14996 ELSE
14997 IF l_timestamp_remove > l_timestamp_add THEN
14998 -- We need to delete UI structure for this if present
14999 IF ui_node_exits( p_ps_node ) THEN
15000 propogate_ps_node_remove(p_ps_node);
15001 l_add_remove_flag := G_REMOVED_FLAG;
15002 l_add_remove_timestamp := l_timestamp_remove;
15003 l_removed_ui := TRUE;
15004 END IF;
15005 END IF;
15006 END IF;
15007
15008 END IF; -- end of (ADD, REMOVE) > REFRESH
15009
15010 -- If the UI was added, in the above code, then it would have been added in the
15011 -- a place according to the latest position of the model node and with a template
15012 -- compatible with the latest type of the model node. Hence we dont need to process
15013 -- for move or changetype events
15014 -- If the UI was deleted in the above code, there there is nothing to move or
15015 -- change type of
15016 IF p_ps_node.deleted_flag = G_NO_FLAG AND NOT ( l_added_ui OR l_removed_ui ) THEN
15017
15018 IF NVL(p_ps_node.UI_TIMESTAMP_MOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15019 propogate_ps_node_move( p_ps_node, p_ord_siblings, p_ps_node_index, l_model_ref_expl_changed1 );
15020 l_moved_flag := TRUE;
15021 ELSE
15022 IF p_ancestor_moved THEN
15023 l_moved_flag := TRUE;
15024 replace_page_ref_target_path( p_ps_node );
15025 END IF;
15026 IF NVL(p_ps_node.UI_TIMESTAMP_REORDER, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15027 reorder_tree_node(p_ps_node);
15028 END IF;
15029 END IF;
15030
15031 IF NVL(p_ps_node.UI_TIMESTAMP_CHANGETYPE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH THEN
15032 propogate_ps_node_type_changes( p_ps_node, l_model_ref_expl_changed2);
15033 END IF;
15034
15035 IF l_model_ref_expl_changed1 = G_YES_FLAG OR
15036 l_model_ref_expl_changed2 = G_YES_FLAG OR
15037 (l_model_ref_expl_changed1 = 'U' AND l_model_ref_expl_changed2 = 'U' AND p_model_ref_expl_changed = G_YES_FLAG) THEN
15038
15039 fix_model_ref_expl_ids(p_ps_node, l_model_ref_expl_changed1);
15040 ELSE
15041 l_model_ref_expl_changed1 := G_NO_FLAG;
15042 END IF;
15043 END IF;
15044
15045 get_Child_Nodes(p_ps_node.ps_node_id,
15046 G_YES_FLAG, -- get all the nodes
15047 l_seq_nodes_tbl,
15048 l_nodes_tbl,
15049 l_non_del_child_nodes_tbl,
15050 G_YES_FLAG);
15051
15052 --DEBUG('asp:Child count ' || l_seq_nodes_tbl.COUNT);
15053 IF l_seq_nodes_tbl.COUNT > 0 THEN
15054 l_ps_node_index := 0;
15055
15056 l_check_for_bom_table := FALSE;
15057 -- If the parent node passed in to this procedure, is an BOM OC or a BOM Model
15058 -- and we did not add or remove a UI element for this BOM in this session
15059 -- then we need to check if any if a table for this OC/Model needs to be there in the UI
15060 -- based on new/ deleted Std items/ OCs
15061 IF (l_add_remove_flag = G_EXISTS_FLAG AND (p_ps_node.ps_node_type = G_BOM_OPTION_CLASS_TYPE OR
15062 p_ps_node.ps_node_type = G_BOM_MODEL_TYPE) ) THEN
15063
15064 l_check_for_bom_table := TRUE;
15065
15066 BEGIN
15067 SELECT element_id, page_Id INTO l_bom_table_id, l_page_id
15068 FROM cz_ui_page_elements
15069 WHERE ui_def_Id = g_UI_Context.ui_def_id
15070 AND persistent_node_id = p_ps_node.persistent_node_id
15071 AND deleted_flag IN (G_NO_FLAG, G_MARK_TO_REFRESH)
15072 AND element_type = G_UI_BOMADDINST_NODE_TYPE
15073 AND rownum < 2;
15074 EXCEPTION
15075 WHEN NO_DATA_FOUND THEN
15076 l_bom_table_id := NULL;
15077 END;
15078 END IF;
15079
15080 FOR i IN 1..l_seq_nodes_tbl.COUNT
15081 LOOP
15082 l_ps_node := l_seq_nodes_tbl(i);
15083 IF l_ps_node.deleted_flag = G_NO_FLAG THEN
15084 l_ps_node_index := l_ps_node_index + 1;
15085 END IF;
15086 IF( l_check_for_bom_table ) THEN
15087
15088 -- We need to process Standard Items because we may need to add/ delete a BOM table
15089 -- if a Standard Item was added/ removed
15090 -- We go to add the table only when we have not made the decision based on a prior Standard Item/ Option Class
15091 -- or BOM Reference under this BOM. We also skip addition/ removal of the table if
15092 -- l_add_remove_flag = G_EXISTS_FLAG which implies that the BOM table for the parent was not added or removed
15093 -- in this refresh session. The G_EXISTS_FLAG is slightly misleading in the sense that it gives one the impression
15094 -- that UI Node for the Model node exists. G_EXISTS_FLAG simply means that the UI for the Model node was neither added
15095 -- nor removed during this refresh session
15096 IF( l_bom_table_id IS NOT NULL ) THEN
15097
15098 IF( NVL(l_ps_node.UI_TIMESTAMP_REMOVE, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15099
15100 -- mark the flag so that we dont do the same for other children
15101 l_check_for_bom_table := FALSE;
15102
15103 IF NOT(contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15104 UPDATE CZ_UI_PAGE_ELEMENTS
15105 SET deleted_flag=G_MARK_TO_DELETE
15106 WHERE ui_def_id=g_UI_Context.ui_def_id
15107 AND page_id = l_page_id
15108 AND element_Id = l_bom_table_id;
15109
15110 mark_UI_Page_As_Refreshed(l_page_id, g_UI_Context.ui_def_id);
15111
15112 END IF;
15113 END IF;
15114 ELSE
15115 IF( NVL(l_ps_node.UI_TIMESTAMP_ADD, g_UI_Context.UI_TIMESTAMP_REFRESH) > g_UI_Context.UI_TIMESTAMP_REFRESH) THEN
15116 IF (contains_BOM_Nodes(p_ps_node.ps_node_id)) THEN
15117 --
15118 -- Add bom table here
15119 --
15120 FOR m IN(SELECT page_id, pagebase_expl_node_id FROM CZ_UI_PAGES
15121 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15122 deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH) AND
15123 persistent_node_id = p_ps_node.persistent_node_id)
15124 LOOP
15125 SELECT element_id, suppress_refresh_flag
15126 INTO l_bom_parent_element, l_suppress_refresh_flag
15127 FROM CZ_UI_PAGE_ELEMENTS
15128 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=m.page_id AND
15129 parent_element_id IS NULL AND persistent_node_id=p_ps_node.persistent_node_id AND
15130 pagebase_persistent_node_id=region_persistent_node_id AND
15131 pagebase_persistent_node_id=p_ps_node.persistent_node_id AND
15132 deleted_flag=G_NO_FLAG;
15133
15134 IF NVL(l_suppress_refresh_flag, G_NO_FLAG)=G_NO_FLAG THEN
15135 add_BOM_Node
15136 (p_node => p_ps_node,
15137 p_page_id => m.page_id,
15138 p_pagebase_expl_node_id => m.pagebase_expl_node_id,
15139 p_parent_element_id => l_bom_parent_element,
15140 p_pagebase_persistent_node_id => p_ps_node.persistent_node_id,
15141 p_check_child_bom_nodes => G_NO_FLAG );
15142 END IF;
15143 END LOOP;
15144
15145 -- mark the flag so that we dont do the same for other children
15146 l_check_for_bom_table := FALSE;
15147 END IF;
15148 END IF;
15149 END IF;
15150 END IF;
15151
15152 IF l_ps_node.ps_node_type NOT IN (G_OPTION_TYPE, G_BOM_STANDART_ITEM_TYPE) THEN
15153 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);
15154 END IF;
15155 END LOOP;
15156 END IF;
15157
15158 END propogate_changes_to_UI;
15159
15160
15161 PROCEDURE refresh_UI_new(p_ui_timestamp_refresh IN DATE) IS
15162
15163 l_root_persistent_node_id NUMBER;
15164 l_nodes_tbl model_nodes_tbl_type;
15165 l_seq_nodes_tbl ui_page_el_int_tbl_type; -- fix for bug 6837809 : skudryav 28-Mar-2008
15166 l_non_del_child_nodes_tbl model_nodes_tbl_type;
15167 l_ui_nodes_tbl ui_page_elements_tbl_type;
15168 l_next_level_ui_pages_tbl ui_page_elements_tbl_type;
15169
15170 l_ps_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15171 l_empty_siblings_tbl model_nodes_tbl_type;
15172
15173 BEGIN
15174
15175 -- start with the root of the model
15176 l_root_persistent_node_id := get_Root_Persistent_Node_Id();
15177 l_ps_node := get_Model_Node_By_Persist_Id(l_root_persistent_node_id,
15178 g_UI_Context.devl_project_id);
15179
15180 get_Child_Nodes(l_ps_node.ps_node_id,
15181 G_YES_FLAG, -- get all the nodes
15182 l_seq_nodes_tbl,
15183 l_nodes_tbl,
15184 l_non_del_child_nodes_tbl,
15185 G_YES_FLAG);
15186
15187 --DEBUG('asp:Last UI Refresh done at ' || p_ui_timestamp_refresh);
15188 propogate_changes_to_UI(l_ps_node, l_empty_siblings_tbl, -1, G_EXISTS_FLAG, p_ui_timestamp_refresh, FALSE, G_NO_FLAG);
15189
15190
15191 END refresh_UI_new;
15192
15193 --
15194 -- check for UI nodes which have AMNs from referenced models
15195 -- and if there are some such UI nodes then mark corresponding UI pages
15196 -- as MARK_TO_REFRESH
15197 --
15198 PROCEDURE check_Ref_AMNs IS
15199 BEGIN
15200
15201 FOR upg IN(SELECT page_id,pagebase_expl_node_id,persistent_node_id FROM CZ_UI_PAGES
15202 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15203 deleted_flag IN(G_MARK_TO_ADD, G_MARK_TO_REFRESH, G_NO_FLAG))
15204 LOOP
15205 FOR upgel IN(SELECT element_id,
15206 model_ref_expl_id,persistent_node_id FROM CZ_UI_PAGE_ELEMENTS
15207 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15208 page_id=upg.page_id AND
15209 persistent_node_id IN
15210 (SELECT psnode.persistent_node_id FROM CZ_PS_NODES psnode
15211 WHERE psnode.devl_project_id IN
15212 (SELECT refexpl.component_id FROM CZ_MODEL_REF_EXPLS refexpl
15213 WHERE refexpl.model_id=g_UI_Context.devl_project_id AND
15214 refexpl.ps_node_type=G_REFERENCE_TYPE AND refexpl.deleted_flag='0') AND
15215 psnode.deleted_flag='0'
15216 AND psnode.ui_timestamp_move > NVL(g_UI_Context.ui_timestamp_refresh, g_UI_Context.creation_date)
15217 )
15218 )
15219 LOOP
15220 UPDATE CZ_UI_PAGES
15221 SET deleted_flag=G_MARK_TO_REFRESH
15222 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15223 page_id=upg.page_id AND deleted_flag='0';
15224 END LOOP;
15225 END LOOP;
15226
15227 END check_Ref_AMNs;
15228
15229 --
15230 -- populate UI tables
15231 --
15232 PROCEDURE populate_UI_Structures IS
15233 l_num_if_roots NUMBER;
15234 l_target_persistent_node_id NUMBER;
15235 l_page_set_id NUMBER;
15236 l_page_set_type NUMBER;
15237 l_page_ref_id NUMBER;
15238 l_ui_timestamp_refresh DATE;
15239 BEGIN
15240
15241 IF NVL(g_UI_Context.suppress_refresh_flag, G_NO_FLAG)=G_YES_FLAG THEN
15242 RETURN;
15243 END IF;
15244 /*
15245 FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15246 WHERE devl_project_id=g_UI_Context.devl_project_id AND
15247 ps_node_type IN(258,259,436,437) AND
15248 deleted_flag=G_YES_FLAG AND EXISTS(SELECT NULL
15249 FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15250 persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15251 LOOP
15252 UPDATE CZ_PS_NODES
15253 SET deleted_flag=G_YES_FLAG
15254 WHERE ps_node_id IN
15255 (SELECT ps_node_id FROM CZ_PS_NODES
15256 START WITH ps_node_id=i.ps_node_id
15257 CONNECT BY PRIOR ps_node_id=parent_id);
15258 END LOOP;
15259
15260 FOR i IN(SELECT ps_node_id FROM CZ_PS_NODES a
15261 WHERE devl_project_id=g_UI_Context.devl_project_id AND
15262 ps_node_type IN(258,259,436,437) AND ui_omit=G_YES_FLAG AND
15263 deleted_flag=G_NO_FLAG AND EXISTS(SELECT NULL
15264 FROM CZ_UI_PAGE_ELEMENTS WHERE ui_def_id=g_UI_Context.ui_def_id AND
15265 persistent_node_id=a.persistent_node_id AND deleted_flag=G_NO_FLAG))
15266 LOOP
15267 UPDATE CZ_PS_NODES
15268 SET deleted_flag=G_YES_FLAG
15269 WHERE ps_node_id IN
15270 (SELECT ps_node_id FROM CZ_PS_NODES
15271 START WITH ps_node_id=i.ps_node_id
15272 CONNECT BY PRIOR ps_node_id=parent_id);
15273 END LOOP;
15274 */
15275 --
15276 -- refresh all UI elements associated with root of model tree
15277 --
15278 l_ui_timestamp_refresh := g_UI_Context.UI_TIMESTAMP_REFRESH;
15279
15280 g_using_new_UI_refresh := FALSE;
15281
15282 IF l_ui_timestamp_refresh IS NULL THEN
15283
15284 FOR i IN (SELECT ui_def_id, element_id,page_id, suppress_refresh_flag
15285 FROM CZ_UI_PAGE_ELEMENTS
15286 WHERE ui_def_id = g_UI_Context.ui_def_id AND
15287 parent_element_id IS NULL AND
15288 deleted_flag IN (G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH))
15289 LOOP
15290
15291 refresh_UI_Subtree(p_element_id => i.element_id,
15292 p_page_id => i.page_id,
15293 p_suppress_refresh_flag => i.suppress_refresh_flag);
15294 END LOOP;
15295 handle_CXs_For_nonUINodes();
15296 ELSE
15297 g_using_new_UI_refresh := TRUE;
15298 refresh_UI_new(l_ui_timestamp_refresh);
15299 handle_CXs();
15300 END IF;
15301
15302 handle_Deleted_Nodes(g_UI_Context.ui_def_id);
15303
15304 -- set correct order for UI elements
15305 handle_UI_Page_Elements_Order();
15306
15307 -- split UI Pages
15308 split_Pages();
15309
15310 -- handle empty UI Pages
15311 handle_Empty_Pages();
15312
15313 -- set data for Page Sets
15314 handle_Page_Flows();
15315
15316 handle_SLMenu_Order();
15317
15318 IF g_check_boundaries_tbl.EXISTS(g_UI_Context.ui_def_id) THEN
15319 check_Boundaries();
15320 END IF;
15321
15322 check_Ref_AMNs();
15323 END populate_UI_Structures;
15324
15325
15326 PROCEDURE backup_nodes_to_move(p_page_id IN NUMBER) IS
15327
15328 l_node_ids_table number_tbl_type;
15329 l_id NUMBER;
15330 l_parent_node xmldom.DOMNode;
15331 l_node xmldom.DOMNode;
15332
15333 BEGIN
15334
15335 IF g_elements_to_move.EXISTS(p_page_Id) THEN
15336 l_node_ids_table := g_elements_to_move(p_page_Id);
15337 IF l_node_ids_table.COUNT > 0 THEN
15338 l_id := l_node_ids_table.FIRST;
15339 WHILE l_id IS NOT NULL
15340 LOOP
15341 DEBUG('asp: Backing up nested element_id ' || l_id || ' on page ' || l_node_ids_table(l_id));
15342 IF g_dom_elements_tbl.EXISTS(l_id) THEN
15343 l_node := g_dom_elements_tbl(l_id);
15344 g_dom_elements_to_move(l_id) := l_node;
15345 l_parent_node:=xmldom.getParentNode(l_node);
15346 l_node:=xmldom.removeChild(l_parent_node, l_node);
15347 END IF;
15348 -- ELSE the node has already been moved
15349 l_id := l_node_ids_table.NEXT(l_id);
15350 END LOOP;
15351 END IF;
15352 END IF;
15353
15354 END backup_nodes_to_move;
15355
15356 --
15357 -- delete UI XML elements from UI page
15358 --
15359 PROCEDURE delete_UIXML_Elements(p_page_id IN NUMBER,
15360 p_xml_doc xmldom.DOMDocument) IS
15361
15362 l_deleted_nodes_tbl varchar2_tbl_type;
15363 l_node xmldom.DOMNode;
15364 l_out_node xmldom.DOMNode;
15365 l_parent_node xmldom.DOMNode;
15366 l_nodeslist xmldom.DOMNodeList;
15367 l_length NUMBER;
15368 l_element_id VARCHAR2(255);
15369 l_deleted_nodes_exist BOOLEAN := FALSE;
15370 l_deassociated_nodes_exist BOOLEAN := FALSE;
15371
15372 BEGIN
15373
15374 backup_nodes_to_move(p_page_id);
15375 FOR i IN(SELECT element_id,deleted_flag FROM CZ_UI_PAGE_ELEMENTS
15376 WHERE ui_def_id= g_UI_Context.ui_def_id AND
15377 page_id=p_page_id AND
15378 deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_DEASSOCIATE))
15379 LOOP
15380 BEGIN
15381 l_deleted_nodes_tbl(i.element_id) := i.deleted_flag;
15382 EXCEPTION
15383 WHEN OTHERS THEN
15384 NULL;
15385 END;
15386 END LOOP;
15387
15388 --
15389 -- here we don't need to know about hierachy of nodes
15390 -- so we just need to get list of all nodes of XML subtree
15391 --
15392 l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
15393 l_length := xmldom.getLength(l_nodeslist);
15394
15395 --
15396 -- delete XML elements
15397 --
15398 FOR i IN 0..l_length-1
15399 LOOP
15400 l_node := xmldom.item(l_nodeslist, i);
15401 l_element_id := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15402 BEGIN
15403 IF l_deleted_nodes_tbl.EXISTS(l_element_id) THEN
15404
15405 IF l_deleted_nodes_tbl(l_element_id)=G_MARK_TO_DELETE THEN
15406 l_parent_node:=xmldom.getParentNode(l_node);
15407 l_out_node:=xmldom.removeChild(l_parent_node,l_node);
15408 l_deleted_nodes_exist := TRUE;
15409 ELSE -- deassociate this node
15410 set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
15411 set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
15412 l_deassociated_nodes_exist := TRUE;
15413 END IF;
15414 END IF;
15415 EXCEPTION
15416 WHEN OTHERS THEN
15417 NULL;
15418 END;
15419 END LOOP;
15420
15421 --
15422 -- mark elements as already deleted,
15423 -- update revision of deleted UI page
15424 --
15425 IF l_deleted_nodes_exist THEN
15426
15427 refresh_UI_Node_Marks(p_page_id => p_page_id,
15428 p_hmode => G_DELETE_ELEMENTS);
15429 END IF;
15430
15431 IF l_deassociated_nodes_exist THEN
15432 UPDATE CZ_UI_PAGE_ELEMENTS
15433 SET deleted_flag=G_NO_FLAG
15434 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15435 page_id=p_page_id AND
15436 deleted_flag=G_MARK_TO_DEASSOCIATE;
15437 IF SQL%ROWCOUNT>0 THEN
15438 UPDATE CZ_UI_PAGES
15439 SET page_rev_nbr=page_rev_nbr+1
15440 WHERE page_id=p_page_id AND
15441 ui_def_id=g_UI_Context.ui_def_id;
15442 END IF;
15443 END IF;
15444 END delete_UIXML_Elements;
15445
15446 --
15447 -- delete UI XML page
15448 --
15449 PROCEDURE delete_UIXML_Page(p_page_id IN NUMBER,
15450 p_jrad_doc IN VARCHAR2) IS
15451
15452 l_subtree_doc xmldom.DOMDocument;
15453
15454 BEGIN
15455 BEGIN
15456 IF g_elements_to_move.EXISTS(p_page_Id) THEN
15457 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
15458
15459 IF xmldom.isNull(l_subtree_doc) THEN
15460 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15461 p_token_name => 'UI_TEMPLATE',
15462 p_token_value => p_jrad_doc,
15463 p_fatal_error => TRUE);
15464 RAISE WRONG_UI_TEMPLATE;
15465 END IF;
15466
15467 init_Page_View_Counters(l_subtree_doc);
15468 backup_nodes_to_move(p_page_Id);
15469 ELSE
15470 l_subtree_doc := parse_JRAD_Document(p_jrad_doc);
15471 IF xmldom.isNull(l_subtree_doc) THEN
15472 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15473 p_token_name => 'UI_TEMPLATE',
15474 p_token_value => p_jrad_doc,
15475 p_fatal_error => TRUE);
15476 RAISE WRONG_UI_TEMPLATE;
15477 ELSE
15478 UPDATE CZ_UI_PAGE_ELEMENTS
15479 SET deleted_flag=G_MARK_TO_DELETE
15480 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15481 page_id=p_page_id AND
15482 deleted_flag NOT IN(G_MARK_TO_DELETE,G_YES_FLAG);
15483 END IF;
15484 init_Page_View_Counters(l_subtree_doc);
15485 END IF;
15486
15487 --
15488 -- delete JRAD XML elements that marked to be deleted
15489 --
15490 delete_UIXML_Elements(p_page_id => p_page_id,
15491 p_xml_doc => l_subtree_doc);
15492
15493 EXCEPTION
15494 WHEN OTHERS THEN
15495 DEBUG('delete_UIXML_Page() : '||SQLERRM);
15496 END;
15497
15498 BEGIN
15499 jdr_docbuilder.deleteDocument(p_jrad_doc);
15500 EXCEPTION
15501 WHEN OTHERS THEN
15502 DEBUG('delete_UIXML_Page() : '||SQLERRM);
15503 END;
15504
15505 --
15506 -- mark elements and page as already deleted,
15507 --
15508 refresh_UI_Node_Marks(p_page_id => p_page_id,
15509 p_hmode => G_DELETE_PAGE);
15510
15511 END delete_UIXML_Page;
15512
15513 --
15514 -- refresh CXs on UI Page
15515 --
15516 PROCEDURE refresh_CXs_On_UI_Page
15517 (p_ui_page_id NUMBER,
15518 p_subtree_doc xmldom.DOMDocument) IS
15519
15520 l_node xmldom.DOMNode;
15521 l_parent_node xmldom.DOMNode;
15522 l_out_node xmldom.DOMNode;
15523 l_nodeslist xmldom.DOMNodeList;
15524 l_length NUMBER;
15525 l_element_id NUMBER;
15526 l_attribute_value VARCHAR2(32000);
15527 l_cx_elements_tbl varchar_tbl_type;
15528 l_suppress_refresh_tbl varchar_tbl_type;
15529 l_suppress_el_flag_tbl varchar_tbl_type;
15530 l_delete_node BOOLEAN := FALSE;
15531 l_deassociate_cx BOOLEAN := FALSE;
15532 l_suppress_refresh_flag CZ_UI_PAGE_ELEMENTS.suppress_refresh_flag%TYPE;
15533
15534 BEGIN
15535 FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
15536 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15537 page_id=p_ui_page_id AND
15538 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
15539 deleted_flag IN(G_NO_FLAG, G_MARK_TO_REFRESH))
15540 LOOP
15541 l_element_id := TO_NUMBER(i.element_id);
15542 l_cx_elements_tbl(l_element_id) := get_CX_Button_Status(i);
15543 l_suppress_el_flag_tbl(l_element_id) := NVL(i.suppress_refresh_flag, G_NO_FLAG);
15544 -- check suppress_refresh_flag of its container
15545 l_suppress_refresh_flag := G_NO_FLAG;
15546 IF i.parent_element_id IS NOT NULL THEN
15547 BEGIN
15548 SELECT NVL(suppress_refresh_flag,G_NO_FLAG) INTO l_suppress_refresh_flag
15549 FROM CZ_UI_PAGE_ELEMENTS
15550 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15551 page_id=p_ui_page_id AND
15552 element_id=i.parent_element_id;
15553 END;
15554 END IF;
15555 l_suppress_refresh_tbl(l_element_id) := l_suppress_refresh_flag;
15556 END LOOP;
15557
15558 --
15559 -- here we don't need to know about hierachy of nodes
15560 -- so we just need to get list of all nodes of XML subtree
15561 --
15562 l_nodeslist := xmldom.getElementsByTagName(p_subtree_doc, '*');
15563 l_length := xmldom.getLength(l_nodeslist);
15564
15565 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_subtree_doc));
15566
15567 --
15568 -- scan subtree and substitute macros "%" to real values
15569 --
15570 FOR i IN 0 .. l_length - 1
15571 LOOP
15572 l_delete_node := FALSE;
15573 l_deassociate_cx := FALSE;
15574 l_node := xmldom.item(l_nodeslist, i);
15575 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE );
15576 l_element_id := NULL;
15577 BEGIN
15578 l_element_id := TO_NUMBER(l_attribute_value);
15579 IF l_cx_elements_tbl.EXISTS(l_element_id) THEN
15580
15581 IF l_cx_elements_tbl(l_element_id) IN (G_CX_VALID) AND
15582 l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
15583 l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
15584 set_Attribute(xmldom.makeElement(l_node), 'rendered', 'true');
15585 ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_INVALID) AND
15586 l_suppress_refresh_tbl(l_element_id)=G_NO_FLAG AND
15587 l_suppress_el_flag_tbl(l_element_id)=G_NO_FLAG THEN
15588 set_Attribute(xmldom.makeElement(l_node), 'rendered', 'false');
15589 ELSIF l_cx_elements_tbl(l_element_id) IN (G_CX_MUST_BE_DELETED) THEN
15590 l_delete_node := TRUE;
15591 IF l_suppress_refresh_tbl(l_element_id)=G_YES_FLAG OR
15592 l_suppress_el_flag_tbl(l_element_id)=G_YES_FLAG THEN
15593 l_deassociate_cx := TRUE;
15594 END IF;
15595 END IF;
15596 END IF;
15597 EXCEPTION
15598 WHEN OTHERS THEN
15599 NULL;
15600 END;
15601
15602 IF l_delete_node THEN
15603 IF l_deassociate_cx THEN
15604 set_Attribute(l_node, G_USER_ATTRIBUTE1_NAME, 'model_path=*');
15605 set_Attribute(l_node, G_USER_ATTRIBUTE2_NAME, '0');
15606
15607 UPDATE CZ_UI_PAGE_ELEMENTS
15608 SET persistent_node_id=0
15609 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15610 page_id=p_ui_page_id AND
15611 element_id=l_attribute_value;
15612 ELSE
15613 l_parent_node:=xmldom.getParentNode(l_node);
15614 l_out_node:=xmldom.removeChild(l_parent_node,l_node);
15615 UPDATE CZ_UI_PAGE_ELEMENTS
15616 SET deleted_flag=G_YES_FLAG
15617 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15618 page_id=p_ui_page_id AND
15619 element_id=l_attribute_value;
15620 END IF;
15621 END IF;
15622
15623 END LOOP;
15624
15625 UPDATE CZ_UI_PAGES
15626 SET page_rev_nbr=page_rev_nbr+1
15627 WHERE ui_def_id=g_UI_Context.ui_def_id AND
15628 page_id=p_ui_page_id;
15629
15630 END refresh_CXs_On_UI_Page;
15631
15632 --
15633 -- populate cache of xml nodes for a given XML page
15634 --
15635 PROCEDURE cache_UI_Page(p_xml_doc xmldom.DOMDocument) IS
15636 l_node xmldom.DOMNode;
15637 l_nodeslist xmldom.DOMNodeList;
15638 l_empty_xml_node xmldom.DOMNode;
15639 l_length NUMBER;
15640 l_attribute_value VARCHAR2(32000);
15641
15642 BEGIN
15643
15644 g_page_elements_tbl.DELETE;
15645
15646 l_nodeslist := xmldom.getElementsByTagName(p_xml_doc, '*');
15647 l_length := xmldom.getLength(l_nodeslist);
15648
15649 l_node := xmldom.makeNode(xmldom.getDocumentElement(p_xml_doc));
15650
15651 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15652
15653 IF l_attribute_value IS NOT NULL THEN
15654 g_page_elements_tbl(l_attribute_value) := l_node;
15655 END IF;
15656
15657 FOR i IN 0 .. l_length - 1
15658 LOOP
15659 l_node := xmldom.item(l_nodeslist, i);
15660
15661 l_attribute_value := get_Attribute_Value(l_node, G_ID_ATTRIBUTE);
15662
15663 IF l_attribute_value IS NOT NULL THEN
15664 g_page_elements_tbl(l_attribute_value) := l_node;
15665 END IF;
15666
15667 END LOOP;
15668
15669 END cache_UI_Page;
15670
15671 --
15672 -- refresh UI XML page
15673 --
15674 PROCEDURE refresh_UIXML_Page(p_page_id IN NUMBER) IS
15675
15676 l_subtree_doc xmldom.DOMDocument;
15677 l_xml_root_node xmldom.DOMNode;
15678 l_xml_uicontent_node xmldom.DOMNode;
15679 l_xml_node_to_refresh xmldom.DOMNode;
15680 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15681 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
15682 l_col_number NUMBER := 0;
15683
15684 PROCEDURE create_Next_XML_Level(p_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
15685 p_parent_xml_node xmldom.DOMNode) IS
15686
15687 l_new_xml_node xmldom.DOMNode;
15688 l_new_opt_xml_node xmldom.DOMNode;
15689 l_xml_node_to_replace xmldom.DOMNode;
15690 l_opt_model_node CZ_UITEMPLS_FOR_PSNODES_V%ROWTYPE;
15691 l_element_type NUMBER;
15692
15693 BEGIN
15694 --
15695 -- get child UI nodes
15696 --
15697 FOR i IN (SELECT *
15698 FROM CZ_UI_PAGE_ELEMENTS a
15699 WHERE ui_def_id = g_UI_Context.ui_def_id AND
15700 page_id = p_page_id AND
15701 parent_element_id = p_ui_node.element_id
15702 -- parent_persistent_node_id = p_ui_node.persistent_node_id
15703 ORDER BY seq_nbr)
15704 LOOP
15705 IF i.deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH) THEN
15706 IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) AND
15707 NOT(NVL(p_ui_node.instantiable_flag, G_MANDATORY_INST_TYPE) IN(G_OPTIONAL_INST_TYPE,G_MINMAX_INST_TYPE) AND
15708 p_ui_node.element_type=G_UI_REGION_NODE_TYPE) THEN
15709
15710 IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
15711
15712 --
15713 -- create new JRAD region
15714 --
15715 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
15716 p_parent_xml_node => p_parent_xml_node);
15717
15718 ELSE -- this is regular UI element
15719
15720 --
15721 -- create new JRAD element
15722 --
15723 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
15724 p_parent_xml_node => p_parent_xml_node);
15725
15726 END IF; -- end of IF i.element_type=G_UI_REGION_NODE_TYPE ...
15727
15728 ELSE -- p_ui_node is not a UI container
15729 -- CXs can be attached to Options/BOM Standart Items
15730 IF i.element_type=G_UI_CX_BUTTON_NODE_TYPE THEN
15731 l_opt_model_node := get_Model_Node_By_Persist_Id(i.persistent_node_id, g_UI_Context.devl_project_id);
15732 IF l_opt_model_node.ps_node_type IN(G_OPTION_TYPE) THEN
15733 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
15734 p_parent_xml_node => xmldom.getParentNode(p_parent_xml_node));
15735
15736 END IF;
15737 END IF;
15738 END IF; -- end of IF p_ui_node.element_type IN(G_UI_PAGE_NODE_TYPE,G_UI_REGION_NODE_TYPE) ...
15739
15740 ELSIF i.deleted_flag IN(G_MARK_TO_REFRESH) THEN
15741
15742 l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc ,
15743 p_attribute_name => G_ID_ATTRIBUTE,
15744 p_attribute_value => i.element_id);
15745
15746 IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
15747
15748 --
15749 -- create new JRAD element
15750 --
15751 l_new_xml_node := replace_UIXML_Element(p_ui_node => i,
15752 p_parent_xml_node => p_parent_xml_node,
15753 p_xml_node_to_replace => l_xml_node_to_replace);
15754 END IF;
15755
15756 ELSIF i.deleted_flag = G_MARK_TO_MOVE THEN
15757 l_new_xml_node := move_XML_Node(p_ui_node => i,
15758 p_parent_xml_node => p_parent_xml_node);
15759
15760 ELSIF i.deleted_flag IN(G_YES_FLAG, G_LIMBO_FLAG) THEN
15761 NULL; -- do not refresh deleted UI nodes
15762
15763 ELSE
15764 l_new_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc ,
15765 p_attribute_name => G_ID_ATTRIBUTE,
15766 p_attribute_value => i.element_id);
15767 END IF;
15768
15769 create_Next_XML_Level(i, l_new_xml_node);
15770
15771 END LOOP;
15772
15773 END create_Next_XML_Level;
15774
15775 PROCEDURE refresh_UI_Node(p_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE,
15776 p_xml_parent_node xmldom.DOMNode) IS
15777
15778 l_xml_node_to_replace xmldom.DOMNode;
15779 l_new_xml_node xmldom.DOMNode;
15780
15781 BEGIN
15782
15783 FOR i IN(SELECT * FROM CZ_UI_PAGE_ELEMENTS
15784 WHERE ui_def_id=p_page_ui_node.ui_def_id
15785 AND parent_element_id=p_page_ui_node.element_id
15786 AND persistent_node_id=p_page_ui_node.persistent_node_id
15787 AND (element_type IS NULL OR element_type <> G_UI_CX_BUTTON_NODE_TYPE)
15788 AND deleted_flag IN(G_MARK_TO_ADD,G_MARK_TO_REFRESH))
15789 LOOP
15790 IF i.deleted_flag=G_MARK_TO_REFRESH THEN
15791 BEGIN
15792 l_xml_node_to_replace := find_XML_Node_By_Attribute(p_subtree_doc => l_subtree_doc,
15793 p_attribute_name => G_ID_ATTRIBUTE,
15794 p_attribute_value => i.element_id);
15795
15796
15797 IF NOT(xmldom.isNull(l_xml_node_to_replace)) THEN
15798 --
15799 -- create new JRAD element
15800 --
15801 l_xml_uicontent_node := replace_UIXML_Element(p_ui_node => i,
15802 p_parent_xml_node => p_xml_parent_node,
15803 p_xml_node_to_replace => l_xml_node_to_replace);
15804 END IF;
15805
15806 EXCEPTION
15807 WHEN OTHERS THEN
15808 --
15809 -- this is not critical error message
15810 --
15811 DEBUG('refresh_UIXML_Page() : '||SQLERRM);
15812 RAISE;
15813 END;
15814
15815 END IF;
15816 END LOOP;
15817 END refresh_UI_Node;
15818
15819 BEGIN
15820
15821 -- first delete the cache of dom elements
15822 g_dom_elements_tbl.DELETE;
15823
15824 SELECT *
15825 INTO l_page_ui_node
15826 FROM CZ_UI_PAGE_ELEMENTS
15827 WHERE ui_def_id = g_UI_Context.ui_def_id AND
15828 page_id = p_page_id AND
15829 parent_element_id IS NULL AND
15830 -- element_type=G_UI_PAGE_NODE_TYPE AND
15831 deleted_flag IN(G_NO_FLAG, G_MARK_TO_ADD, G_MARK_TO_REFRESH);
15832
15833 IF l_page_ui_node.ctrl_template_id IN(G_2COLS_CONTAINER_TEMPLATE_ID,
15834 G_3COLS_CONTAINER_TEMPLATE_ID) THEN
15835
15836 IF l_page_ui_node.ctrl_template_id = G_2COLS_CONTAINER_TEMPLATE_ID THEN
15837 IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
15838 l_col_number := 1;
15839 ELSE
15840 l_col_number :=2;
15841 END IF;
15842 END IF;
15843
15844 IF l_page_ui_node.ctrl_template_id = G_3COLS_CONTAINER_TEMPLATE_ID THEN
15845 IF g_Num_Elements_On_Page <= g_Elements_Per_Column THEN
15846 l_col_number := 1;
15847 ELSIF g_Num_Elements_On_Page > g_Elements_Per_Column AND
15848 g_Num_Elements_On_Page <= 2*g_Elements_Per_Column THEN
15849 l_col_number := 2;
15850 ELSE
15851 l_col_number := 3;
15852 END IF;
15853 END IF;
15854 ELSE
15855 l_col_number := 0;
15856 END IF;
15857
15858 SELECT jrad_doc INTO l_jrad_doc
15859 FROM CZ_UI_PAGES
15860 WHERE ui_def_id= g_UI_Context.ui_def_id AND
15861 page_id=p_page_id;
15862
15863 --
15864 -- parse document(template) which is going to be nested element
15865 --
15866 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
15867
15868 --
15869 -- cache xml nodes of this UI page
15870 --
15871 cache_UI_Page(l_subtree_doc);
15872
15873 IF xmldom.isNull(l_subtree_doc) THEN
15874 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
15875 p_token_name => 'UI_TEMPLATE',
15876 p_token_value => l_jrad_doc,
15877 p_fatal_error => TRUE);
15878 RAISE WRONG_UI_TEMPLATE;
15879 END IF;
15880
15881 init_Page_View_Counters(l_subtree_doc);
15882
15883 --
15884 -- delete JRAD XML elements that marked to be deleted
15885 --
15886 delete_UIXML_Elements(p_page_id => p_page_id,
15887 p_xml_doc => l_subtree_doc);
15888
15889 --
15890 -- get subdocument's root node
15891 --
15892 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
15893
15894 IF l_col_number = 0 THEN
15895 l_xml_uicontent_node := getUIContents(l_xml_root_node);
15896 ELSE
15897 l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, l_col_number);
15898 END IF;
15899
15900 refresh_UI_Node(l_page_ui_node, l_xml_uicontent_node);
15901
15902 create_Next_XML_Level(l_page_ui_node,
15903 l_xml_uicontent_node);
15904 --
15905 -- refresh CXs on the current UI page
15906 --
15907 refresh_CXs_On_UI_Page(p_ui_page_id => p_page_id ,
15908 p_subtree_doc => l_subtree_doc);
15909
15910 refresh_All_Model_Paths(l_subtree_doc, p_page_id);
15911
15912 --
15913 -- save XML page in JRAD repository
15914 --
15915 Save_Document(l_subtree_doc, l_jrad_doc);
15916
15917 --
15918 -- mark elements and page as already refreshed
15919 --
15920 refresh_UI_Node_Marks(p_page_id => p_page_id,
15921 p_hmode => G_REFRESH_PAGE);
15922
15923 END refresh_UIXML_Page;
15924
15925 --
15926 -- create UI XML page
15927 --
15928 PROCEDURE create_UIXML_Page(p_page_id IN NUMBER,
15929 p_jrad_doc IN VARCHAR2) IS
15930
15931 l_subtree_doc xmldom.DOMDocument;
15932 l_xml_root_node xmldom.DOMNode;
15933 l_xml_uicontent_node xmldom.DOMNode;
15934 l_page_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
15935 l_jrad_doc CZ_UI_TEMPLATES.jrad_doc%TYPE;
15936 l_sub_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15937 l_curr_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
15938 l_child_nodes_tbl xmldom.DOMNodeList;
15939 l_xml_node xmldom.DOMNode;
15940 l_length NUMBER;
15941 l_col_number NUMBER;
15942
15943 PROCEDURE create_Next_XML_Level(p_element_id NUMBER,
15944 p_parent_xml_node xmldom.DOMNode) IS
15945 l_new_xml_node xmldom.DOMNode;
15946 BEGIN
15947
15948 --
15949 -- get child UI nodes
15950 --
15951 FOR i IN (SELECT *
15952 FROM CZ_UI_PAGE_ELEMENTS
15953 WHERE ui_def_id = g_UI_Context.ui_def_id AND
15954 page_id = p_page_id AND
15955 parent_element_id = p_element_id AND
15956 ctrl_template_id IS NOT NULL AND
15957 deleted_flag IN(G_MARK_TO_ADD,G_MARK_DO_NOT_REFRESH,G_MARK_TO_MOVE)
15958 ORDER BY seq_nbr)
15959 LOOP
15960 IF i.deleted_Flag = G_MARK_TO_MOVE THEN
15961 l_new_xml_node := move_XML_Node(p_ui_node => i,
15962 p_parent_xml_node => p_parent_xml_node);
15963 ELSE
15964 IF i.element_type=G_UI_REGION_NODE_TYPE THEN -- this a region
15965
15966 IF g_UI_Context.control_layout=1 THEN
15967 IF i.seq_nbr <= g_Elements_Per_Column THEN
15968 l_col_number := 1;
15969 ELSE
15970 l_col_number := 2;
15971 END IF;
15972 END IF;
15973
15974 IF g_UI_Context.control_layout=2 THEN
15975 IF i.seq_nbr <= g_Elements_Per_Column THEN
15976 l_col_number := 1;
15977 ELSIF i.seq_nbr > g_Elements_Per_Column AND
15978 i.seq_nbr <= 2*g_Elements_Per_Column THEN
15979 l_col_number := 2;
15980 ELSE
15981 l_col_number := 3;
15982 END IF;
15983 END IF;
15984
15985 IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
15986 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
15987 p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
15988 ELSE
15989 l_new_xml_node := create_UIXML_Region(p_ui_node => i,
15990 p_parent_xml_node => p_parent_xml_node);
15991 END IF;
15992
15993 ELSE -- this is regular UI element
15994
15995 IF g_UI_Context.control_layout=1 THEN
15996 IF i.seq_nbr <= g_Elements_Per_Column THEN
15997 l_col_number := 1;
15998 ELSE
15999 l_col_number :=2;
16000 END IF;
16001 END IF;
16002
16003 IF g_UI_Context.control_layout=2 THEN
16004 IF i.seq_nbr <= g_Elements_Per_Column THEN
16005 l_col_number := 1;
16006 ELSIF i.seq_nbr > g_Elements_Per_Column AND
16007 i.seq_nbr <= 2*g_Elements_Per_Column THEN
16008 l_col_number := 2;
16009 ELSE
16010 l_col_number := 3;
16011 END IF;
16012 END IF;
16013
16014 IF i.parent_element_id=l_page_ui_node.element_id AND l_col_number>1 THEN
16015
16016 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16017 p_parent_xml_node => get_Col_UIContents(l_xml_root_node, l_col_number));
16018 ELSE
16019
16020 l_new_xml_node := create_UIXML_Element(p_ui_node => i,
16021 p_parent_xml_node => p_parent_xml_node);
16022 END IF;
16023 END IF;
16024 END IF;
16025
16026 create_Next_XML_Level(i.element_id, l_new_xml_node);
16027
16028 END LOOP;
16029
16030 END create_Next_XML_Level;
16031
16032 BEGIN
16033
16034 init_Page_View_Counters();
16035
16036 l_col_number := 0;
16037
16038 IF g_UI_Context.control_layout IN(1,2) THEN
16039 l_col_number := 1;
16040 END IF;
16041
16042 SELECT *
16043 INTO l_page_ui_node
16044 FROM CZ_UI_PAGE_ELEMENTS
16045 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16046 page_id = p_page_id AND
16047 persistent_node_id = pagebase_persistent_node_id AND
16048 parent_element_id IS NULL AND
16049 element_type=G_UI_PAGE_NODE_TYPE AND
16050 deleted_flag = G_MARK_TO_ADD;
16051
16052 l_jrad_doc := get_JRAD_Name(p_template_id => l_page_ui_node.ctrl_template_id);
16053
16054 --
16055 -- parse document(template) which is going to be nested element
16056 --
16057 l_subtree_doc := parse_JRAD_Document(l_jrad_doc);
16058
16059 IF xmldom.isNull(l_subtree_doc) THEN
16060 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
16061 p_token_name => 'UI_TEMPLATE',
16062 p_token_value => l_jrad_doc,
16063 p_fatal_error => TRUE);
16064 RAISE WRONG_UI_TEMPLATE;
16065 END IF;
16066
16067 --
16068 -- get subdocument's root node
16069 --
16070 l_xml_root_node := xmldom.makeNode(xmldom.getDocumentElement(l_subtree_doc));
16071
16072 --
16073 -- remove common attributes of container and subtree
16074 --
16075 remove_TopLevel_Attributes(l_xml_root_node);
16076
16077 --
16078 -- set Attributes for this subtree = Template
16079 --
16080 set_Template_Attributes(p_xml_root_node => l_xml_root_node,
16081 p_ui_node => l_page_ui_node);
16082
16083 IF g_UI_Context.control_layout=0 THEN
16084 l_xml_uicontent_node := getUIContents(l_xml_root_node);
16085 ELSE
16086 l_xml_uicontent_node := get_Col_UIContents(l_xml_root_node, 1);
16087 END IF;
16088
16089 l_child_nodes_tbl := xmldom.getElementsByTagName(l_subtree_doc, '*');
16090
16091 --
16092 -- we need to get length of array of child nodes
16093 -- to go through the array in loop
16094 --
16095 l_length := xmldom.getLength(l_child_nodes_tbl);
16096 FOR k IN 0..l_length-1
16097 LOOP
16098 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
16099
16100 l_curr_element_id := get_Attribute_Value(l_xml_node,
16101 G_ID_ATTRIBUTE);
16102 IF l_curr_element_id IS NOT NULL AND k > 0 THEN
16103 l_sub_element_id := get_Element_Id();
16104
16105 --
16106 -- set JRAD id of element
16107 --
16108 set_Attribute(l_xml_node,
16109 G_ID_ATTRIBUTE,
16110 REPLACE(REPLACE(l_curr_element_id||'_'||l_sub_element_id,'_czt','_czn'),'_czc','_czn'));
16111 END IF;
16112 END LOOP;
16113
16114 create_Next_XML_Level(l_page_ui_node.element_id,
16115 l_xml_uicontent_node);
16116
16117 --
16118 -- save XML page in JRAD repository
16119 --
16120 Save_Document(l_subtree_doc, p_jrad_doc);
16121
16122 --
16123 -- update page status and page_rev_nbr
16124 -- page_rev_nbr=1 because this is first creation
16125 -- mark elements and page as already refreshed
16126 --
16127 refresh_UI_Node_Marks(p_page_id => p_page_id,
16128 p_hmode => G_NEW_PAGE);
16129
16130 END create_UIXML_Page;
16131
16132 --
16133 -- handle UI XML pages of given UI
16134 -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16135 --
16136 PROCEDURE handle_JRAD_Page(p_page_id IN NUMBER,
16137 p_page_jrad_doc IN VARCHAR2,
16138 p_page_status IN VARCHAR2) IS
16139
16140 l_num_elements_on_page NUMBER;
16141
16142 BEGIN
16143
16144 IF g_UI_Context.control_layout IN(1,2) THEN
16145 SELECT COUNT(element_id) INTO g_Num_Elements_On_Page
16146 FROM CZ_UI_PAGE_ELEMENTS
16147 WHERE ui_def_id=g_UI_Context.ui_def_id AND
16148 page_id=p_page_id AND
16149 (element_type IS NULL OR ctrl_template_id IS NOT NULL) AND
16150 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
16151 g_Elements_Per_Column := FLOOR(g_Num_Elements_On_Page/(g_UI_Context.control_layout+1));
16152 END IF;
16153
16154 --
16155 -- delete JRAD document associated with the page
16156 --
16157 IF p_page_status = G_MARK_TO_DELETE THEN
16158 delete_UIXML_Page(p_page_id, p_page_jrad_doc);
16159 END IF;
16160
16161 --
16162 -- create JRAD page
16163 --
16164 IF p_page_status = G_MARK_TO_ADD THEN
16165 create_UIXML_Page(p_page_id, p_page_jrad_doc);
16166 --
16167 -- translate the current JRAD page
16168 --
16169 translate_JRAD_Doc(p_page_jrad_doc);
16170 END IF;
16171
16172 --
16173 -- refresh JRAD page
16174 --
16175 IF p_page_status = G_MARK_TO_REFRESH THEN
16176
16177 refresh_UIXML_Page(p_page_id);
16178 --
16179 -- translate the current JRAD page
16180 --
16181 translate_JRAD_Doc(p_page_jrad_doc);
16182 END IF;
16183
16184 END handle_JRAD_Page;
16185
16186 --
16187 -- handle UI XML pages of given UI
16188 -- handle_JRAD_Pages() is called from procedure construct_Single_UI()
16189 --
16190 PROCEDURE handle_JRAD_Pages IS
16191 BEGIN
16192 FOR i IN (SELECT page_id, jrad_doc, deleted_flag
16193 FROM CZ_UI_PAGES
16194 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16195 deleted_flag <> G_YES_FLAG)
16196 LOOP
16197 IF i.deleted_flag IN(G_MARK_TO_DELETE,G_MARK_TO_ADD,
16198 G_MARK_TO_REFRESH,G_MARK_TO_DEASSOCIATE) THEN
16199 --
16200 -- handle the current JRAD page
16201 --
16202 handle_JRAD_Page(p_page_id => i.page_id,
16203 p_page_jrad_doc => i.jrad_doc,
16204 p_page_status => i.deleted_flag);
16205 ELSE
16206 FOR n IN(SELECT G_YES_FLAG FROM CZ_UI_PAGE_ELEMENTS
16207 WHERE ui_def_id=g_UI_Context.ui_def_id AND page_id=i.page_id AND
16208 element_type=G_UI_CX_BUTTON_NODE_TYPE AND
16209 deleted_flag=G_NO_FLAG AND rownum<2)
16210 LOOP
16211 --
16212 -- handle the current JRAD page
16213 --
16214 handle_JRAD_Page(p_page_id => i.page_id,
16215 p_page_jrad_doc => i.jrad_doc,
16216 p_page_status => G_MARK_TO_REFRESH);
16217
16218 END LOOP;
16219 END IF;
16220 END LOOP;
16221 END handle_JRAD_Pages;
16222
16223 -- Check if a PIR's target page reachable
16224 -- p_pagebase_expl_id,p_node_expl_id and p_node_persistent_id are a PIR element's
16225 -- pagebase_expl_id, model_ref_expl_id and persistent_node_id
16226 -- p_ui_def_id parent ui if the PIR's AMN is the child model's root node, child ui otherwise
16227 FUNCTION target_page_reachable(p_pagebase_expl_id IN NUMBER,
16228 p_node_expl_id IN NUMBER,
16229 p_node_persistent_id IN NUMBER,
16230 p_ui_def_id IN NUMBER)
16231 RETURN BOOLEAN
16232 IS
16233 l_instantiable_flag cz_ps_nodes.INSTANTIABLE_FLAG%TYPE;
16234 BEGIN
16235 IF CZ_DEVELOPER_UTILS_PVT.in_boundary
16236 (p_pagebase_expl_id, p_node_expl_id, p_node_persistent_id) = 0 THEN
16237 RETURN FALSE;
16238 ELSE
16239 SELECT instantiable_flag INTO l_instantiable_flag
16240 FROM cz_ps_nodes
16241 WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16242 WHERE ui_def_id = p_ui_def_id) AND
16243 persistent_node_id = p_node_persistent_id;
16244 RETURN (l_instantiable_flag IS NULL OR
16245 l_instantiable_flag NOT IN (G_OPTIONAL_INST_TYPE, G_MINMAX_INST_TYPE));
16246 END IF;
16247 END target_page_reachable;
16248
16249 FUNCTION get_page_name(p_ui_def_id IN NUMBER, p_page_id IN NUMBER)
16250 RETURN VARCHAR2
16251 IS
16252 l_name CZ_UI_PAGES.NAME%TYPE;
16253 BEGIN
16254 SELECT NVL(name, to_char(page_id)) INTO l_name
16255 FROM cz_ui_pages
16256 WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16257 RETURN l_name;
16258 END get_page_name;
16259
16260 PROCEDURE handle_page_include_regions
16261 IS
16262 l_ui_def_map number_tbl_type;
16263 l_ui_def_id NUMBER;
16264 l_pagebase_expl_id NUMBER;
16265 l_xmldoc xmldom.DOMDocument;
16266 l_dom_node xmldom.DOMNode;
16267 l_current_relative_path VARCHAR2(32000);
16268 l_new_relative_path VARCHAR2(32000);
16269 l_flag INTEGER;
16270 l_resave_doc_flag INTEGER;
16271 l_target_persistent_node_id NUMBER;
16272
16273 FUNCTION get_ui_name(p_ui_def_id IN NUMBER)
16274 RETURN VARCHAR2 IS
16275 l_name CZ_UI_DEFS.NAME%TYPE;
16276 BEGIN
16277 SELECT name INTO l_name
16278 FROM cz_ui_defs
16279 WHERE ui_def_id = p_ui_def_id;
16280 RETURN l_name;
16281 END;
16282
16283 FUNCTION get_model_name(p_ui_def_id IN NUMBER)
16284 RETURN VARCHAR2 IS
16285 l_name CZ_DEVL_PROJECTS.NAME%TYPE;
16286 BEGIN
16287 SELECT name INTO l_name
16288 FROM cz_devl_projects
16289 WHERE devl_project_id = (SELECT devl_project_id FROM cz_ui_defs
16290 WHERE ui_def_id = p_ui_def_id);
16291 RETURN l_name;
16292 END;
16293
16294 PROCEDURE remove_target_page(p_ui_def_id IN NUMBER
16295 ,p_page_id IN NUMBER
16296 ,p_element_id IN VARCHAR2)
16297 IS
16298 BEGIN
16299 UPDATE CZ_UI_PAGE_ELEMENTS
16300 SET target_page_ui_def_id = NULL, target_page_id = NULL
16301 WHERE ui_def_id = p_ui_def_id AND
16302 page_id = p_page_id AND element_id = p_element_id;
16303
16304 UPDATE CZ_UI_PAGES
16305 SET page_rev_nbr = page_rev_nbr + 1
16306 WHERE ui_def_id = p_ui_def_id AND page_id = p_page_id;
16307 END remove_target_page;
16308
16309 BEGIN
16310
16311 --
16312 -- Find all Page Include Regions of current UI
16313 --
16314 FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
16315 model_ref_expl_id, persistent_node_id, name
16316 FROM CZ_UI_PAGE_ELEMENTS
16317 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16318 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16319 target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
16320 deleted_flag = G_NO_FLAG)
16321 LOOP
16322 -- target page exists ?
16323 l_target_persistent_node_id := NULL;
16324 BEGIN
16325 SELECT persistent_node_id INTO l_target_persistent_node_id
16326 FROM cz_ui_pages
16327 WHERE ui_def_id = i.target_page_ui_def_id AND
16328 page_id = i.target_page_id AND deleted_flag = G_NO_FLAG;
16329 EXCEPTION
16330 -- target page not exist
16331 WHEN NO_DATA_FOUND THEN
16332 -- l_target_persistent_node_id := NULL;
16333 remove_target_page(g_UI_Context.ui_def_id, i.page_id, i.element_id);
16334 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
16335 p_token_name1 => 'REGION_NAME',
16336 p_token_value1 => NVL(i.NAME, i.element_id),
16337 p_token_name2 => 'PAGE_NAME',
16338 p_token_value2 => get_page_name(g_UI_Context.ui_def_id,i.page_id),
16339 p_fatal_error => FALSE);
16340 END;
16341
16342 -- target page exists. is it reachable ?
16343 IF l_target_persistent_node_id IS NOT NULL THEN
16344 SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
16345 FROM cz_ui_pages
16346 WHERE ui_def_id = g_UI_Context.ui_def_id AND
16347 page_id = i.page_id;
16348
16349 IF i.persistent_node_id = l_target_persistent_node_id THEN
16350 l_ui_def_id := i.target_page_ui_def_id;
16351 ELSE
16352 l_ui_def_id := g_UI_Context.ui_def_id; -- AMN is the root node of child model
16353 END IF;
16354
16355 IF NOT target_page_reachable(l_pagebase_expl_id,
16356 i.model_ref_expl_id,
16357 i.persistent_node_id,
16358 l_ui_def_id) THEN
16359 remove_target_page(g_UI_Context.ui_def_id, i.page_id, i.element_id);
16360 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
16361 p_token_name1 => 'REGION_NAME',
16362 p_token_value1 => NVL(i.NAME, i.element_id),
16363 p_token_name2 => 'PAGE_NAME',
16364 p_token_value2 => get_page_name(g_UI_Context.ui_def_id,i.page_id),
16365 p_fatal_error => FALSE);
16366 END IF;
16367 END IF;
16368 END LOOP;
16369
16370 l_ui_def_map(g_UI_Context.ui_def_id) := g_UI_Context.ui_def_id;
16371
16372 --
16373 -- Find all Page Include Regions which point to UI pages in the current UI
16374 --
16375 FOR i IN (SELECT a.deleted_flag AS page_deleted_flag, a.page_id AS page_id,
16376 a.name AS name, a.persistent_node_id AS target_persistent_node_id,
16377 b.ui_def_id AS ref_ui_def_id, b.page_id AS ref_page_id,
16378 b.name AS ref_element_name, b.element_id AS ref_element_id,
16379 b.persistent_node_id as persistent_node_id,
16380 b.model_ref_expl_id as expl_node_id
16381 FROM CZ_UI_PAGES a, CZ_UI_PAGE_ELEMENTS b
16382 WHERE a.ui_def_id = g_UI_Context.ui_def_id AND
16383 b.element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16384 b.deleted_flag = G_NO_FLAG AND
16385 a.ui_def_id = b.target_page_ui_def_id AND
16386 a.page_id = b.target_page_id)
16387 LOOP
16388 IF i.page_deleted_flag = G_YES_FLAG THEN
16389 remove_target_page(i.ref_ui_def_id, i.ref_page_id, i.ref_element_id);
16390 add_Error_Message(p_message_name => 'CZ_UIGEN_DEL_PAGEINCL_TARGET',
16391 p_token_name1 => 'PAGE_NAME',
16392 p_token_value1 => NVL(i.name, i.page_id),
16393 p_token_name2 => 'ELEMENT_NAME',
16394 p_token_value2 => i.ref_element_name,
16395 p_token_name3 => 'REF_PAGE_NAME',
16396 p_token_value3 => get_page_name(i.ref_ui_def_id,i.ref_page_id),
16397 p_token_name4 => 'MODEL_NAME',
16398 p_token_value4 => get_model_name(i.ref_ui_def_id),
16399 p_token_name5 => 'UI_NAME',
16400 p_token_value5 => get_ui_name(i.ref_ui_def_id),
16401 p_fatal_error => FALSE);
16402 ELSE
16403 -- check reachability of current page if page is not deleted
16404 -- get PI element's pagebase_expl_id
16405 SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
16406 FROM cz_ui_pages
16407 WHERE ui_def_id = i.ref_ui_def_id AND
16408 page_id = i.ref_page_id;
16409
16410 IF i.persistent_node_id = i.target_persistent_node_id THEN
16411 l_ui_def_id := g_UI_Context.ui_def_id;
16412 ELSE
16413 l_ui_def_id := i.ref_ui_def_id; -- AMN is the root node of child model
16414 END IF;
16415
16416 IF NOT target_page_reachable(l_pagebase_expl_id,
16417 i.expl_node_id,
16418 i.persistent_node_id,
16419 l_ui_def_id) THEN
16420 remove_target_page(i.ref_ui_def_id, i.ref_page_id, i.ref_element_id);
16421 add_Error_Message(p_message_name => 'CZ_UIGEN_REFUI_TARGET_PG_REACH',
16422 p_token_name1 => 'PAGE_NAME',
16423 p_token_value1 => NVL(i.name, i.page_id),
16424 p_token_name2 => 'ELEMENT_NAME',
16425 p_token_value2 => i.ref_element_name,
16426 p_token_name3 => 'REF_PAGE_NAME',
16427 p_token_value3 => get_page_name(i.ref_ui_def_id,i.ref_page_id),
16428 p_token_name4 => 'UI_NAME',
16429 p_token_value4 => get_ui_name(i.ref_ui_def_id),
16430 p_token_name5 => 'MODEL_NAME',
16431 p_token_value5 => get_model_name(i.ref_ui_def_id),
16432 p_fatal_error => FALSE);
16433 END IF;
16434
16435 l_ui_def_map(i.ref_ui_def_id) := i.ref_ui_def_id;
16436 END IF;
16437 END LOOP;
16438
16439 -- Recalculate relative paths for Page Include Regions. If the newly calculated path
16440 -- of a PIR element is different from the current one in xml doc, update the path
16441 -- in xml doc if the UI is the one in processing, mark the UI as must be refreshed
16442 -- if it is not the UI in refreshing.
16443 l_ui_def_id := l_ui_def_map.FIRST;
16444 WHILE l_ui_def_id IS NOT NULL
16445 LOOP
16446 l_flag := 1;
16447 FOR i IN (SELECT page_id, jrad_doc, pagebase_expl_node_id, persistent_node_id
16448 FROM CZ_UI_PAGES pg
16449 WHERE ui_def_id = l_ui_def_id AND deleted_flag = G_NO_FLAG
16450 AND EXISTS (SELECT NULL FROM CZ_UI_PAGE_ELEMENTS
16451 WHERE ui_def_id = pg.ui_def_id AND page_id = pg.page_id AND
16452 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16453 target_page_ui_def_id IS NOT NULL AND
16454 target_page_id IS NOT NULL AND deleted_flag=G_NO_FLAG))
16455 LOOP
16456 EXIT WHEN l_flag = 0;
16457 l_xmldoc := parse_JRAD_Document(i.jrad_doc);
16458 l_resave_doc_flag := 0;
16459 FOR j IN (SELECT * FROM CZ_UI_PAGE_ELEMENTS
16460 WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id AND
16461 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
16462 deleted_flag=G_NO_FLAG)
16463 LOOP
16464 EXIT WHEN l_flag <> 1;
16465 l_dom_node := find_XML_Node_By_Attribute(l_xmldoc, G_ID_ATTRIBUTE, j.element_id);
16466 l_current_relative_path := get_attribute_value(l_dom_node, G_USER_ATTRIBUTE1_NAME);
16467 l_new_relative_path := 'model_path=' || CZ_DEVELOPER_UTILS_PVT.runtime_relative_path
16468 (i.pagebase_expl_node_id
16469 ,i.persistent_node_id
16470 ,j.model_ref_expl_id
16471 ,j.persistent_node_id);
16472 IF l_current_relative_path <> l_new_relative_path THEN
16473 IF l_ui_def_id = g_UI_Context.ui_def_id THEN
16474 set_attribute(l_dom_node,
16475 G_USER_ATTRIBUTE1_NAME,
16476 l_new_relative_path);
16477 UPDATE CZ_UI_PAGES
16478 SET page_rev_nbr = page_rev_nbr + 1
16479 WHERE ui_def_id = l_ui_def_id AND page_id = i.page_id;
16480 l_resave_doc_flag := 1; -- save doc
16481 ELSE
16482 UPDATE cz_ui_defs
16483 SET ui_status = 'NEED_REFRESH'
16484 WHERE ui_def_id = l_ui_def_id;
16485 l_flag := 0; -- goto next ui
16486 END IF;
16487 END IF;
16488 END LOOP;
16489 IF l_resave_doc_flag = 1 THEN
16490 save_document(l_xmldoc, i.jrad_doc);
16491 END IF;
16492 END LOOP;
16493 l_ui_def_id := l_ui_def_map.NEXT(l_ui_def_id);
16494 END LOOP;
16495 END handle_page_include_regions;
16496
16497 --
16498 -- main internal procedure to create/refresh UI
16499 --
16500 PROCEDURE construct_Single_UI(p_ui_def_id IN NUMBER,
16501 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16502 l_locked_entities_tbl cz_security_pvt.number_type_tbl;
16503 l_templates_id_tbl number_tbl_type;
16504 BEGIN
16505
16506 --
16507 -- set current UI context
16508 --
16509 set_UI_Context(p_ui_def_id);
16510
16511 --
16512 -- lock global UI Templates which are used by inline copy
16513 --
16514 lock_UI_Templates(p_model_id => g_UI_Context.devl_project_id,
16515 p_ui_def_id => g_UI_Context.from_master_template_id);
16516
16517 IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_STRUCTURE THEN
16518
16519 set_UI_Global_Entities();
16520
16521 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_NO_FLAG THEN
16522
16523 -- populate cache
16524 populate_Cache;
16525
16526 -- update the UI_TIMESTAMP_REFRESH date on the UI
16527 UPDATE cz_ui_defs
16528 SET UI_TIMESTAMP_REFRESH = SYSDATE
16529 WHERE ui_def_id = p_ui_def_id;
16530
16531 -- populate CZ UI structures first
16532 populate_UI_Structures();
16533
16534 END IF;
16535
16536 END IF;
16537
16538 IF p_handling_mode IS NULL OR p_handling_mode = G_CREATE_ONLY_UI_XML THEN
16539 --
16540 -- generate/refresh UI Pages of current UI
16541 --
16542 handle_JRAD_Pages();
16543 END IF;
16544
16545 unlock_UI_Templates();
16546
16547 --
16548 -- mark UI as processed
16549 --
16550 mark_UI(p_ui_def_id, G_PROCESSED_UI_STATUS);
16551
16552 EXCEPTION
16553 WHEN OTHERS THEN
16554 DEBUG(SQLERRM);
16555 --
16556 -- unlock global UI Templates which are used by inline copy
16557 --
16558 unlock_UI_Templates();
16559 RAISE;
16560 END construct_Single_UI;
16561
16562 --
16563 -- internal procedure to create/refresh UI
16564 --
16565 PROCEDURE handle_UIs(p_ui_def_id IN NUMBER,
16566 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16567 l_target_ui_def_node CZ_UI_DEFS%ROWTYPE;
16568 l_ui_def_id NUMBER;
16569 l_ref_persistent_node_id NUMBER;
16570 l_init_ui_def_id NUMBER;
16571 BEGIN
16572
16573 DEBUG('construct Single UI : ',p_ui_def_id);
16574
16575 --
16576 -- handle root UI
16577 --
16578 construct_Single_UI(p_ui_def_id, p_handling_mode);
16579
16580 validate_UI_Conditions(p_ui_def_id => p_ui_def_id,
16581 p_is_parser_open => G_YES_FLAG);
16582
16583 IF NVL(g_UI_Context.suppress_refresh_flag,G_NO_FLAG)=G_YES_FLAG
16584 OR NVL(g_UI_Context.empty_ui_flag,G_NO_FLAG)=G_YES_FLAG THEN
16585
16586 FOR i IN(SELECT * FROM CZ_MODEL_REF_EXPLS
16587 WHERE model_id=g_UI_Context.devl_project_id AND
16588 ps_node_type=G_REFERENCE_TYPE AND deleted_flag='0')
16589 LOOP
16590 BEGIN
16591 SELECT NVL(MAX(ui_def_id),0) INTO l_ui_def_id
16592 FROM CZ_UI_DEFS
16593 WHERE devl_project_id=i.component_id AND
16594 ui_style=G_OA_STYLE_UI AND
16595 deleted_flag='0';
16596
16597 IF l_ui_def_id=0 THEN
16598 l_init_ui_def_id := g_UI_Context.ui_def_id;
16599 l_target_ui_def_node := create_UI_Context(p_model_id => i.component_id,
16600 p_master_template_id => g_UI_Context.from_master_template_id,
16601 p_show_all_nodes => g_UI_Context.show_all_nodes_flag,
16602 p_create_empty_ui => '1');
16603 l_ui_def_id := l_target_ui_def_node.ui_def_id;
16604 set_UI_Context(l_init_ui_def_id);
16605 END IF;
16606
16607 SELECT persistent_node_id INTO l_ref_persistent_node_id
16608 FROM CZ_PS_NODES
16609 WHERE devl_project_id=g_UI_Context.devl_project_id AND
16610 ps_node_id=i.referring_node_id AND
16611 deleted_flag=G_NO_FLAG;
16612
16613 BEGIN
16614 INSERT INTO CZ_UI_REFS
16615 (ui_def_id,
16616 ref_ui_def_id,
16617 ref_persistent_node_id,
16618 model_ref_expl_id,
16619 deleted_flag)
16620 VALUES
16621 (g_UI_Context.ui_def_id,
16622 l_ui_def_id,
16623 l_ref_persistent_node_id,
16624 i.model_ref_expl_id,
16625 G_NO_FLAG);
16626 EXCEPTION
16627 WHEN OTHERS THEN
16628 NULL;
16629 END;
16630 EXCEPTION
16631 WHEN OTHERS THEN
16632 NULL;
16633 END;
16634 END LOOP;
16635
16636 END IF;
16637
16638 --
16639 -- table CZ_UI_REFS is populated in procedure construct_Single_UI()
16640 -- ( in this approach UI can have a more referenced UIs than Model Tree )
16641 --
16642 FOR i IN (SELECT DISTINCT ref_ui_def_id
16643 FROM CZ_UI_REFS
16644 WHERE ui_def_id = p_ui_def_id AND
16645 deleted_flag = G_NO_FLAG)
16646 LOOP
16647 --
16648 -- construct UIs of referenced models
16649 --
16650 handle_UIs(i.ref_ui_def_id, p_handling_mode);
16651 END LOOP;
16652
16653 END handle_UIs;
16654
16655 --
16656 -- main internal procedure to create/refresh UI
16657 -- this procedure is invoked only once during UI Generation/UI Refresh
16658 --
16659 PROCEDURE construct_UI(p_ui_def_id IN NUMBER,
16660 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
16661 BEGIN
16662 --
16663 -- initialize XML parser
16664 --
16665 OPEN_Parser();
16666 --
16667 -- handle root UI and all referenced UIs
16668 --
16669 handle_UIs(p_ui_def_id, p_handling_mode);
16670 --
16671 -- close XML parser
16672 --
16673 CLOSE_Parser();
16674
16675 set_UI_Context(p_ui_def_id);
16676
16677 OPEN_Parser();
16678 handle_page_include_regions;
16679 CLOSE_Parser();
16680 END construct_UI;
16681
16682 --
16683 -- create a new UI for a given model
16684 -- Parameters :
16685 -- p_model_id - identifies Model
16686 -- p_master_template_id - identifies UI Master Template
16687 -- px_ui_def_id - Id of a new UI
16688 -- x_return_status - status string
16689 -- x_msg_count - number of error messages
16690 -- x_msg_data - string which contains error messages
16691 --
16692 PROCEDURE create_UI(p_model_id IN NUMBER, -- identifies Model
16693 p_master_template_id IN NUMBER DEFAULT NULL, -- identifies UI Master Template
16694 p_ui_name IN VARCHAR2 DEFAULT NULL,
16695 p_description IN VARCHAR2 DEFAULT NULL,
16696 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
16697 p_create_empty_ui IN VARCHAR2 DEFAULT NULL,
16698 x_ui_def_id OUT NOCOPY NUMBER, -- Id of a new UI
16699 x_return_status OUT NOCOPY VARCHAR2,
16700 x_msg_count OUT NOCOPY NUMBER,
16701 x_msg_data OUT NOCOPY VARCHAR2) IS
16702
16703 l_ui_context CZ_UI_DEFS%ROWTYPE;
16704 l_locked_models cz_security_pvt.number_type_tbl;
16705
16706 BEGIN
16707
16708 --
16709 -- initialize FND variables/packages
16710 --
16711 Initialize(x_return_status,x_msg_count,x_msg_data);
16712
16713 --
16714 -- get UI context
16715 -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
16716 --
16717 l_ui_context := create_UI_Context(p_model_id => p_model_id,
16718 p_master_template_id => p_master_template_id,
16719 p_ui_name => p_ui_name,
16720 p_description => p_description,
16721 p_show_all_nodes => p_show_all_nodes,
16722 p_create_empty_ui => p_create_empty_ui);
16723 --
16724 -- set ui_def_id of root UI ( UI that is generated for model with model_id=p_model_id )
16725 --
16726 x_ui_def_id := l_ui_context.ui_def_id;
16727
16728 lock_Model(p_model_id, l_locked_models);
16729
16730 --
16731 -- generate a new UI for the current UI context
16732 --
16733 construct_UI(l_ui_context.ui_def_id);
16734
16735 IF p_create_empty_ui IS NOT NULL AND p_create_empty_ui = '1' THEN
16736
16737 UPDATE CZ_UI_DEFS
16738 SET suppress_refresh_flag = G_NO_FLAG
16739 WHERE ui_def_id = x_ui_def_id and deleted_flag = G_NO_FLAG;
16740
16741 UPDATE CZ_UI_DEFS
16742 SET suppress_refresh_flag = G_NO_FLAG
16743 WHERE ui_def_Id IN (
16744 SELECT ref_ui_def_Id
16745 FROM CZ_UI_REFS
16746 START WITH ui_def_id = x_ui_def_id
16747 AND deleted_flag = G_NO_FLAG
16748 CONNECT BY PRIOR ref_ui_def_id = ui_def_id AND deleted_flag = G_NO_FLAG)
16749 AND deleted_flag = G_NO_FLAG;
16750 END IF;
16751
16752 IF g_MSG_COUNT>0 THEN
16753 x_return_status := G_RETURN_STATUS;
16754 x_msg_count := g_MSG_COUNT;
16755 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16756 END IF;
16757
16758 unlock_model(l_locked_models);
16759
16760 EXCEPTION
16761 WHEN FAILED_TO_LOCK_MODEL THEN
16762 x_return_status := FND_API.G_RET_STS_ERROR;
16763 x_msg_count := 1;
16764 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16765 DEBUG(x_msg_data);
16766 WHEN WRONG_UI_TEMPLATE THEN
16767 x_return_status := FND_API.G_RET_STS_ERROR;
16768 x_msg_count := g_MSG_COUNT;
16769 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16770 DEBUG(x_msg_data);
16771 WHEN WRONG_EXT_PS_TYPE THEN
16772 x_return_status := FND_API.G_RET_STS_ERROR;
16773 x_msg_count := 1;
16774 x_msg_data := 'Internal Error : extended ps node type of node with ps_node_id='||
16775 TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
16776 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16777 DEBUG(x_msg_data);
16778 WHEN UNREACH_UI_NODE THEN
16779 x_return_status := FND_API.G_RET_STS_ERROR;
16780 x_msg_count := g_MSG_COUNT;
16781 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16782 DEBUG(x_msg_data);
16783 WHEN OTHERS THEN
16784 x_return_status := FND_API.G_RET_STS_ERROR;
16785 x_msg_count := g_MSG_COUNT;
16786 IF g_MSG_COUNT>0 THEN
16787 x_msg_count := g_MSG_COUNT;
16788 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16789 ELSE
16790 x_msg_count := 1;
16791 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
16792 END IF;
16793 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16794 DEBUG(x_msg_data);
16795 END create_UI;
16796
16797 --
16798 -- refresh a given UI
16799 -- Parameters :
16800 -- p_ui_def_id - identifies UI
16801 -- x_return_status - status string
16802 -- x_msg_count - number of error messages
16803 -- x_msg_data - string which contains error messages
16804 --
16805 PROCEDURE refresh_UI(p_ui_def_id IN NUMBER,
16806 x_return_status OUT NOCOPY VARCHAR2,
16807 x_msg_count OUT NOCOPY NUMBER,
16808 x_msg_data OUT NOCOPY VARCHAR2) IS
16809
16810 l_ui_context CZ_UI_DEFS%ROWTYPE;
16811 BEGIN
16812 --
16813 -- initialize FND variables/packages
16814 --
16815 Initialize(x_return_status,x_msg_count,x_msg_data);
16816
16817 --
16818 -- get UI context
16819 --
16820 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
16821
16822 --
16823 -- if p_create_empty_ui = G_NO_FLAG ( ='1') then do generate/refresh UI
16824 --
16825 IF NVL(l_ui_context.suppress_refresh_flag,G_NO_FLAG) = G_NO_FLAG THEN
16826
16827 -- refresh model_path for all nodes on refreshed UI page
16828 g_REFRESH_MODEL_PATH := TRUE;
16829
16830 --
16831 -- refresh UI
16832 --
16833 construct_UI(p_ui_def_id);
16834 END IF;
16835
16836 IF g_MSG_COUNT>0 THEN
16837 x_return_status := G_RETURN_STATUS;
16838 x_msg_count := g_MSG_COUNT;
16839 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16840 END IF;
16841
16842 EXCEPTION
16843 WHEN FAILED_TO_LOCK_MODEL THEN
16844 x_return_status := FND_API.G_RET_STS_ERROR;
16845 x_msg_count := 1;
16846 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16847 DEBUG(x_msg_data);
16848 WHEN WRONG_UI_TO_REFRESH THEN
16849 x_return_status := FND_API.G_RET_STS_ERROR;
16850 x_msg_count := 1;
16851 x_msg_data := 'Internal Error : Wrong UI to refresh.';
16852 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
16853 DEBUG(x_msg_data);
16854 WHEN WRONG_UI_TEMPLATE THEN
16855 x_return_status := FND_API.G_RET_STS_ERROR;
16856 x_msg_count := g_MSG_COUNT;
16857 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16858 DEBUG(x_msg_data);
16859 WHEN WRONG_EXT_PS_TYPE THEN
16860 x_return_status := FND_API.G_RET_STS_ERROR;
16861 x_msg_count := 1;
16862 x_msg_data := 'Internal Error : extended ps node type of node with ps_node_id='||
16863 TO_CHAR(g_WRONG_PS_NODE_ID)||' is not defined.';
16864 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_UI', x_msg_data);
16865 DEBUG(x_msg_data);
16866 WHEN UNREACH_UI_NODE THEN
16867 x_return_status := FND_API.G_RET_STS_ERROR;
16868 x_msg_count := g_MSG_COUNT;
16869 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16870 DEBUG(x_msg_data);
16871 WHEN OTHERS THEN
16872 x_return_status := FND_API.G_RET_STS_ERROR;
16873 x_msg_count := g_MSG_COUNT;
16874 IF g_MSG_COUNT>0 THEN
16875 x_msg_count := g_MSG_COUNT;
16876 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
16877 ELSE
16878 x_msg_count := 1;
16879 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
16880 END IF;
16881 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'refresh_UI', x_msg_data);
16882 DEBUG(x_msg_data);
16883 END refresh_UI;
16884
16885 --
16886 -- delete records which correspond with user attributes
16887 --
16888 PROCEDURE delete_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
16889 p_ui_def_id NUMBER,
16890 p_template_id NUMBER DEFAULT NULL,
16891 p_template_ui_def_id NUMBER DEFAULT NULL) IS
16892
16893 l_user_attribute_value VARCHAR2(4000);
16894 l_persistent_id NUMBER;
16895
16896 BEGIN
16897
16898 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
16899 IF l_user_attribute_value IS NOT NULL THEN
16900
16901 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,'actionId'));
16902 IF l_persistent_id IS NOT NULL THEN
16903 UPDATE CZ_UI_ACTIONS
16904 SET deleted_flag=G_YES_FLAG
16905 WHERE ui_def_id=p_ui_def_id AND
16906 ui_action_id=l_persistent_id AND
16907 seeded_flag=G_NO_FLAG;
16908
16909 IF p_template_id IS NOT NULL THEN
16910 UPDATE CZ_UI_TEMPLATE_ELEMENTS
16911 SET deleted_flag=G_YES_FLAG
16912 WHERE template_id=p_template_id AND
16913 ui_def_id=p_template_ui_def_id AND
16914 element_id=l_persistent_id AND
16915 element_type IN(552) AND
16916 seeded_flag=G_NO_FLAG AND
16917 deleted_flag=G_NO_FLAG;
16918 END IF;
16919 END IF;
16920
16921 FOR i IN g_condition_attr_tbl.First..g_condition_attr_tbl.Last
16922 LOOP
16923 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_condition_attr_tbl(i)));
16924 IF l_persistent_id IS NOT NULL THEN
16925 UPDATE CZ_RULES
16926 SET deleted_flag = G_YES_FLAG
16927 WHERE persistent_rule_id = l_persistent_id
16928 AND ui_def_id = p_ui_def_id
16929 AND seeded_flag = G_NO_FLAG;
16930
16931 IF p_template_id IS NOT NULL THEN
16932 UPDATE CZ_UI_TEMPLATE_ELEMENTS
16933 SET deleted_flag=G_YES_FLAG
16934 WHERE template_id=p_template_id AND
16935 ui_def_id=p_template_ui_def_id AND
16936 element_id=l_persistent_id AND
16937 element_type IN(33,34) AND
16938 seeded_flag=G_NO_FLAG AND
16939 deleted_flag=G_NO_FLAG;
16940 END IF;
16941 END IF;
16942 END LOOP;
16943
16944 FOR i IN g_caption_attr_tbl.First..g_caption_attr_tbl.Last
16945 LOOP
16946 l_persistent_id := TO_NUMBER(get_User_Attribute(l_user_attribute_value,g_caption_attr_tbl(i)));
16947 IF l_persistent_id IS NOT NULL THEN
16948 UPDATE CZ_LOCALIZED_TEXTS
16949 SET deleted_flag=G_YES_FLAG
16950 WHERE persistent_intl_text_id=l_persistent_id AND
16951 ui_def_id=p_ui_def_id AND
16952 seeded_flag=G_NO_FLAG;
16953
16954 IF p_template_id IS NOT NULL THEN
16955 UPDATE CZ_UI_TEMPLATE_ELEMENTS
16956 SET deleted_flag=G_YES_FLAG
16957 WHERE template_id=p_template_id AND
16958 ui_def_id=p_template_ui_def_id AND
16959 element_id=l_persistent_id AND
16960 element_type IN(8) AND
16961 seeded_flag=G_NO_FLAG AND
16962 deleted_flag=G_NO_FLAG;
16963 END IF;
16964 END IF;
16965 END LOOP;
16966
16967 END IF;
16968 END delete_User_Attr_For_Node;
16969
16970 PROCEDURE copy_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
16971 p_source_ui_def_id NUMBER,
16972 p_target_ui_def_id NUMBER,
16973 p_source_ui_page_id NUMBER,
16974 p_target_ui_page_id NUMBER,
16975 p_target_model_path VARCHAR2,
16976 p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
16977
16978 l_user_attribute_value VARCHAR2(4000);
16979 l_new_element_id VARCHAR2(255);
16980 l_target_model_path VARCHAR2(4000);
16981 l_name VARCHAR2(4000);
16982 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
16983 l_model_ref_expl_id NUMBER;
16984 l_num_copy NUMBER;
16985 l_id NUMBER;
16986
16987 BEGIN
16988
16989 set_UI_Context(p_target_ui_def_id);
16990
16991 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
16992
16993 IF l_user_attribute_value IS NOT NULL THEN
16994 BEGIN
16995 l_id := TO_NUMBER(l_user_attribute_value);
16996
16997 l_new_element_id := p_new_element_id_arr_tbl(l_id);
16998
16999 set_Attribute(p_xml_node,
17000 G_ID_ATTRIBUTE,
17001 l_new_element_id);
17002
17003 g_handled_attr_id_tbl(l_new_element_id) := l_id;
17004
17005 EXCEPTION
17006 WHEN OTHERS THEN
17007 DEBUG('copy_User_Attr_For_Node() : '||SQLERRM);
17008 IF NOT(g_handled_attr_id_tbl.EXISTS(l_id)) THEN
17009 set_Attribute(p_xml_node,
17010 G_ID_ATTRIBUTE,
17011 l_user_attribute_value||'_'||get_Element_Id());
17012 END IF;
17013 END;
17014
17015 END IF;
17016
17017 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17018
17019 IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17020
17021 SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17022 WHERE ui_def_id=p_target_ui_def_id AND
17023 page_id=p_target_ui_page_id AND
17024 element_id=l_new_element_id;
17025 SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17026 WHERE ui_def_id=l_ui_node.ui_def_id AND page_id=l_ui_node.page_id AND
17027 parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17028 l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17029 p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17030 p_node_expl_id => l_ui_node.model_ref_expl_id,
17031 p_node_pers_id => l_ui_node.persistent_node_id);
17032 IF l_target_model_path IS NULL THEN
17033 l_target_model_path := '.';
17034 END IF;
17035
17036 set_Attribute(p_xml_node,
17037 G_USER_ATTRIBUTE1_NAME,
17038 'model_path='||l_target_model_path);
17039
17040 END IF;
17041
17042 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17043
17044 IF l_user_attribute_value IS NOT NULL AND l_new_element_id IS NOT NULL THEN
17045
17046 handle_User_Attributes
17047 (px_user_attribute_value => l_user_attribute_value,
17048 p_source_ui_def_id => p_source_ui_def_id,
17049 p_source_ui_page_id => p_source_ui_page_id,
17050 p_target_ui_def_id => p_target_ui_def_id,
17051 p_target_ui_page_id => p_target_ui_page_id,
17052 p_new_element_id => l_new_element_id,
17053 p_xml_node => p_xml_node);
17054
17055 set_Attribute(p_xml_node,
17056 G_USER_ATTRIBUTE3_NAME,
17057 l_user_attribute_value);
17058 END IF;
17059
17060 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17061
17062 IF l_user_attribute_value IS NOT NULL THEN
17063
17064 l_name := get_User_Attribute(l_user_attribute_value ,'name');
17065
17066 SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17067 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17068 name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17069
17070 l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17071
17072 set_User_Attribute(p_cz_attribute_name => 'name',
17073 p_cz_attribute_value => l_name,
17074 px_xml_attribute_value => l_user_attribute_value);
17075
17076 set_Attribute(p_xml_node,
17077 G_USER_ATTRIBUTE4_NAME,
17078 l_user_attribute_value);
17079 END IF;
17080
17081 IF l_new_element_id IS NOT NULL THEN
17082 UPDATE CZ_UI_PAGE_ELEMENTS
17083 SET name=l_name
17084 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17085 element_id = l_new_element_id;
17086 END IF;
17087
17088 END copy_User_Attr_For_Node;
17089
17090 --
17091 -- copy records which correspond to user attributes
17092 --
17093 PROCEDURE copy_User_Attr_For_Node(p_xml_node xmldom.DOMNode,
17094 p_source_ui_def_id NUMBER,
17095 p_target_ui_def_id NUMBER,
17096 p_source_template_id NUMBER DEFAULT NULL,
17097 p_target_template_id NUMBER DEFAULT NULL) IS
17098
17099 l_user_attribute_value VARCHAR2(4000);
17100 l_new_element_id VARCHAR2(255);
17101 l_id NUMBER;
17102 l_name VARCHAR2(4000);
17103 l_num_copy NUMBER;
17104
17105 BEGIN
17106
17107 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_ID_ATTRIBUTE);
17108
17109 IF l_user_attribute_value IS NOT NULL THEN
17110
17111 l_new_element_id := '_czc'||get_Element_Id(); -- fix for bug #3975276
17112 set_Attribute(p_xml_node,
17113 G_ID_ATTRIBUTE,
17114 l_new_element_id);
17115
17116 END IF;
17117
17118 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17119
17120 IF l_user_attribute_value IS NOT NULL THEN
17121 handle_User_Attributes
17122 (px_user_attribute_value => l_user_attribute_value,
17123 p_source_ui_def_id => p_source_ui_def_id,
17124 p_source_ui_page_id => 0, -- fix for bug #3975276
17125 p_target_ui_def_id => p_target_ui_def_id,
17126 p_target_ui_page_id => 0, -- fix for bug #3975276
17127 p_new_element_id => l_new_element_id,
17128 p_source_template_id => p_source_template_id,
17129 p_target_template_id => p_target_template_id,
17130 p_xml_node => p_xml_node);
17131
17132 set_Attribute(p_xml_node,
17133 G_USER_ATTRIBUTE3_NAME,
17134 l_user_attribute_value);
17135 END IF;
17136
17137 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17138
17139 IF l_user_attribute_value IS NOT NULL THEN
17140
17141 l_name := get_User_Attribute(l_user_attribute_value ,'name');
17142
17143 IF l_new_element_id IS NOT NULL THEN
17144 l_name := l_name||' - '||l_new_element_id;
17145 END IF;
17146
17147 set_User_Attribute(p_cz_attribute_name => 'name',
17148 p_cz_attribute_value => l_name,
17149 px_xml_attribute_value => l_user_attribute_value);
17150
17151 set_Attribute(p_xml_node,
17152 G_USER_ATTRIBUTE4_NAME,
17153 l_user_attribute_value);
17154 END IF;
17155
17156 END copy_User_Attr_For_Node;
17157
17158 --
17159 -- delete records which corresponds with user attributes
17160 --
17161 PROCEDURE delete_User_Attributes(p_xml_node xmldom.DOMNode,
17162 p_ui_def_id NUMBER,
17163 p_template_id NUMBER DEFAULT NULL,
17164 p_template_ui_def_id NUMBER DEFAULT NULL) IS
17165
17166
17167 l_child_nodes_tbl xmldom.DOMNodeList;
17168 l_child_xml_node xmldom.DOMNode;
17169 l_length NUMBER;
17170
17171 BEGIN
17172
17173 IF xmldom.IsNull(p_xml_node) THEN
17174 RETURN;
17175 END IF;
17176
17177 delete_User_Attr_For_Node(p_xml_node,p_ui_def_id,
17178 p_template_id, p_template_ui_def_id);
17179
17180 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17181 l_length := xmldom.getLength(l_child_nodes_tbl);
17182
17183 FOR k IN 0 .. l_length - 1
17184 LOOP
17185 --
17186 -- get next child DOM node
17187 --
17188 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17189
17190 delete_User_Attr_For_Node(l_child_xml_node,p_ui_def_id,
17191 p_template_id, p_template_ui_def_id);
17192
17193 delete_User_Attributes(l_child_xml_node,p_ui_def_id,
17194 p_template_id, p_template_ui_def_id);
17195
17196 END LOOP;
17197
17198 END delete_User_Attributes;
17199
17200 --
17201 -- copy records which corresponds with user attributes
17202 --
17203 PROCEDURE copy_User_Attributes(p_xml_node xmldom.DOMNode,
17204 p_source_ui_def_id NUMBER,
17205 p_target_ui_def_id NUMBER,
17206 p_source_ui_page_id NUMBER,
17207 p_target_ui_page_id NUMBER,
17208 p_target_model_path VARCHAR2,
17209 p_new_element_id_arr_tbl IN OUT NOCOPY number_tbl_type) IS
17210
17211 l_child_nodes_tbl xmldom.DOMNodeList;
17212 l_child_xml_node xmldom.DOMNode;
17213 l_length NUMBER;
17214
17215 BEGIN
17216
17217 copy_User_Attr_For_Node(p_xml_node => p_xml_node,
17218 p_source_ui_def_id => p_source_ui_def_id,
17219 p_target_ui_def_id => p_target_ui_def_id,
17220 p_source_ui_page_id => p_source_ui_page_id,
17221 p_target_ui_page_id => p_target_ui_page_id,
17222 p_target_model_path => p_target_model_path,
17223 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17224
17225 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17226 l_length := xmldom.getLength(l_child_nodes_tbl);
17227
17228 FOR k IN 0 .. l_length - 1
17229 LOOP
17230 --
17231 -- get next child DOM node
17232 --
17233 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17234
17235 copy_User_Attr_For_Node(p_xml_node => l_child_xml_node,
17236 p_source_ui_def_id => p_source_ui_def_id,
17237 p_target_ui_def_id => p_target_ui_def_id,
17238 p_source_ui_page_id => p_source_ui_page_id,
17239 p_target_ui_page_id => p_target_ui_page_id,
17240 p_target_model_path => p_target_model_path,
17241 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17242
17243 copy_User_Attributes(p_xml_node => l_child_xml_node,
17244 p_source_ui_def_id => p_source_ui_def_id,
17245 p_target_ui_def_id => p_target_ui_def_id,
17246 p_source_ui_page_id => p_source_ui_page_id,
17247 p_target_ui_page_id => p_target_ui_page_id,
17248 p_target_model_path => p_target_model_path,
17249 p_new_element_id_arr_tbl => p_new_element_id_arr_tbl);
17250
17251 END LOOP;
17252
17253 EXCEPTION
17254 WHEN OTHERS THEN
17255 DEBUG('copy_User_Attributes() : '||SQLERRM);
17256
17257 END copy_User_Attributes;
17258
17259 PROCEDURE validate_Copied_PIR(p_ui_def_id IN NUMBER, p_page_id IN NUMBER) IS
17260 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
17261 l_element_id_tbl varchar_tbl_type;
17262 l_name_tbl varchar_tbl_type;
17263 l_target_page_ui_def_id_tbl number_tbl_type;
17264 l_target_page_id_tbl number_tbl_type;
17265 l_ui_name CZ_UI_DEFS.name%TYPE;
17266 l_page_name CZ_UI_PAGES.name%TYPE;
17267 l_pagebase_expl_id NUMBER;
17268 l_ui_def_id NUMBER;
17269 l_target_persistent_node_id NUMBER;
17270
17271 BEGIN
17272
17273 UPDATE CZ_UI_PAGE_ELEMENTS
17274 SET target_page_ui_def_id=NULL,
17275 target_page_id=NULL
17276 WHERE ui_def_id=p_ui_def_id AND
17277 page_id=p_page_id AND
17278 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17279 deleted_flag='0' AND target_page_ui_def_id IS NOT NULL AND
17280 target_page_id IS NOT NULL AND
17281 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
17282 deleted_flag='0')
17283 RETURNING element_id,name,target_page_id,target_page_ui_def_id
17284 BULK COLLECT INTO l_element_id_tbl,l_name_tbl,l_target_page_id_tbl,l_target_page_ui_def_id_tbl;
17285
17286 IF l_name_tbl.COUNT>0 THEN
17287 FOR i IN l_name_tbl.First..l_name_tbl.Last
17288 LOOP
17289 SELECT name INTO l_page_name FROM CZ_UI_PAGES
17290 WHERE page_id=l_target_page_id_tbl(i) AND ui_def_id=l_target_page_ui_def_id_tbl(i);
17291 SELECT name INTO l_ui_name FROM CZ_UI_DEFS WHERE ui_def_id=l_target_page_ui_def_id_tbl(i);
17292 add_Error_Message(p_message_name => 'CZ_CP_PIR_REF_UI_NOT_IN_CHAIN',
17293 p_token_name1 => 'RGNNAME',
17294 p_token_value1 => NVL(l_name_tbl(i), l_element_id_tbl(i)),
17295 p_token_name2 => 'PAGENAME',
17296 p_token_value2 => l_page_name,
17297 p_token_name3 => 'UINAME',
17298 p_token_value3 => l_ui_name,
17299 p_fatal_error => FALSE);
17300 END LOOP;
17301 END IF;
17302
17303 --
17304 -- Find all Page Include Regions of current UI
17305 --
17306 FOR i IN (SELECT page_id, element_id, target_page_ui_def_id, target_page_id,
17307 model_ref_expl_id, persistent_node_id, name
17308 FROM CZ_UI_PAGE_ELEMENTS
17309 WHERE ui_def_id = p_ui_def_id AND page_id=p_page_id AND
17310 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE AND
17311 target_page_ui_def_id IS NOT NULL AND target_page_id IS NOT NULL AND
17312 deleted_flag = '0')
17313 LOOP
17314 -- target page exists?
17315 l_target_persistent_node_id := NULL;
17316 BEGIN
17317 SELECT persistent_node_id INTO l_target_persistent_node_id
17318 FROM cz_ui_pages
17319 WHERE ui_def_id = i.target_page_ui_def_id AND
17320 page_id = i.target_page_id AND deleted_flag <> '1';
17321 EXCEPTION
17322 -- target page not exist
17323 WHEN NO_DATA_FOUND THEN
17324 -- l_target_persistent_node_id := NULL;
17325 UPDATE CZ_UI_PAGE_ELEMENTS
17326 SET target_page_ui_def_id = NULL, target_page_id = NULL
17327 WHERE ui_def_id = p_ui_def_id AND
17328 page_id = i.page_id AND element_id = i.element_id;
17329
17330 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_NOT_EXIST',
17331 p_token_name1 => 'REGION_NAME',
17332 p_token_value1 => NVL(i.NAME, i.element_id),
17333 p_token_name2 => 'PAGE_NAME',
17334 p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
17335 p_fatal_error => FALSE);
17336 END;
17337
17338 -- target page exists. check if reachable
17339 IF l_target_persistent_node_id IS NOT NULL THEN
17340 SELECT pagebase_expl_node_id INTO l_pagebase_expl_id
17341 FROM cz_ui_pages
17342 WHERE ui_def_id = p_ui_def_id AND
17343 page_id = i.page_id;
17344
17345 IF i.persistent_node_id = l_target_persistent_node_id THEN
17346 l_ui_def_id := i.target_page_ui_def_id;
17347 ELSE
17348 l_ui_def_id := p_ui_def_id;
17349 END IF;
17350
17351 IF NOT target_page_reachable(l_pagebase_expl_id,
17352 i.model_ref_expl_id,
17353 i.persistent_node_id,
17354 l_ui_def_id) THEN
17355 add_Error_Message(p_message_name => 'CZ_UIGEN_TARGET_PAGE_REACH',
17356 p_token_name1 => 'REGION_NAME',
17357 p_token_value1 => NVL(i.NAME, i.element_id),
17358 p_token_name2 => 'PAGE_NAME',
17359 p_token_value2 => get_page_name(p_ui_def_id,i.page_id),
17360 p_fatal_error => FALSE);
17361 UPDATE CZ_UI_PAGE_ELEMENTS
17362 SET target_page_ui_def_id = NULL, target_page_id = NULL
17363 WHERE ui_def_id = p_ui_def_id AND
17364 page_id = i.page_id AND element_id = i.element_id;
17365 END IF;
17366 END IF;
17367 END LOOP;
17368
17369 END validate_Copied_PIR;
17370
17371 PROCEDURE copy_Tree_Level(p_xml_node xmldom.DOMNode,
17372 p_source_ui_def_id NUMBER,
17373 p_target_ui_def_id NUMBER,
17374 p_source_ui_page_id NUMBER,
17375 p_target_ui_page_id NUMBER,
17376 p_parent_element_id VARCHAR2,
17377 p_target_parent_element_id VARCHAR2,
17378 p_pagebase_persistent_node_id NUMBER,
17379 x_new_element_id IN OUT NOCOPY VARCHAR2,
17380 p_copy_as_ui_page IN BOOLEAN,
17381 p_source_jrad_doc IN VARCHAR2,
17382 p_target_jrad_doc IN VARCHAR2,
17383 p_amn_parent_element_id IN VARCHAR2
17384 ) IS
17385
17386 l_child_nodes_tbl xmldom.DOMNodeList;
17387 l_child_xml_node xmldom.DOMNode;
17388 l_parent_xml_node xmldom.DOMNode;
17389 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
17390
17391 l_user_attribute_value VARCHAR2(4000);
17392 l_user_attribute3_value VARCHAR2(4000);
17393
17394 l_switcher_casename VARCHAR2(255);
17395
17396 l_target_model_path VARCHAR2(255);
17397 l_current_element_id VARCHAR2(255);
17398 l_amn_parent_element_id VARCHAR2(255);
17399 l_new_element_id VARCHAR2(255);
17400 l_parent_element_id VARCHAR2(255);
17401 l_name VARCHAR2(255);
17402 l_view_name VARCHAR2(255);
17403 l_children_view_name VARCHAR2(255);
17404 l_ancestor_node VARCHAR2(255);
17405 l_hgrid_element_id VARCHAR2(255);
17406 l_case_node_id VARCHAR2(255);
17407 l_case_node_name VARCHAR2(255);
17408 l_switcher_element_id VARCHAR2(255);
17409 l_case_new_node_id VARCHAR2(255);
17410 l_case_new_node_name VARCHAR2(255);
17411 l_old_ui_switcher_id VARCHAR2(255);
17412 l_layout_node_id VARCHAR2(255);
17413 l_layout_node_name VARCHAR2(255);
17414 l_layout_new_node_id VARCHAR2(255);
17415 l_layout_new_node_name VARCHAR2(255);
17416 l_temp_str VARCHAR2(255);
17417 l_instr_ind NUMBER;
17418 l_view_counter NUMBER;
17419 l_num_copy NUMBER;
17420 l_model_ref_expl_id NUMBER;
17421 l_ui_action_id NUMBER;
17422 l_length NUMBER;
17423 l_ind NUMBER;
17424 l_id NUMBER;
17425 l_temp_ind NUMBER;
17426 l_ui_page_elements_exists BOOLEAN := FALSE;
17427
17428 BEGIN
17429
17430 l_ancestor_node := get_Attribute_Value(p_xml_node,
17431 'ancestorNode');
17432 IF l_ancestor_node IS NOT NULL THEN
17433
17434 l_hgrid_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:tree');
17435 IF NOT(xmldom.IsNull(p_xml_node)) THEN
17436 l_ancestor_node := p_target_jrad_doc||'.'||l_hgrid_element_id;
17437
17438 set_Attribute(p_xml_node,
17439 'ancestorNode',
17440 l_ancestor_node);
17441 END IF;
17442 END IF;
17443
17444 IF xmldom.getNodeName(p_xml_node)='ui:case' THEN
17445
17446 handle_UI_CASE_Id(p_xml_node);
17447
17448 l_switcher_element_id := find_Element_Id_Of_XMLTag(p_xml_node, 'oa:switcher');
17449
17450 l_case_node_id := get_Attribute_Value(p_xml_node,
17451 'name');
17452
17453
17454 l_instr_ind := 0;
17455
17456 FOR i IN 1..LENGTH(l_case_node_id)
17457 LOOP
17458 IF SUBSTR(l_case_node_id,i,1)='_' THEN
17459 l_instr_ind := i;
17460 END IF;
17461 END LOOP;
17462
17463 IF l_case_node_id IS NOT NULL THEN
17464 l_old_ui_switcher_id := SUBSTR(l_case_node_id,1,l_instr_ind-1);
17465 l_case_new_node_id := REPLACE(l_case_node_id,
17466 l_old_ui_switcher_id,
17467 l_switcher_element_id);
17468 set_Attribute(p_xml_node,
17469 'name',
17470 l_case_new_node_id);
17471 END IF;
17472
17473 END IF;
17474
17475 IF xmldom.getNodeName(p_xml_node)='oa:stackLayout' THEN
17476
17477 l_parent_xml_node := xmldom.getParentNode(p_xml_node);
17478
17479 IF NOT(xmldom.IsNull(l_parent_xml_node)) THEN
17480
17481 IF xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
17482
17483 l_layout_new_node_id := get_Attribute_Value(l_parent_xml_node,'name');
17484 set_Attribute(p_xml_node,
17485 G_ID_ATTRIBUTE,
17486 l_layout_new_node_id);
17487
17488 END IF; -- end of IF xmldom.getNodeName(l_parent_xml_node)='ui:case'
17489
17490 END IF; -- end of IF NOT(xmldom.IsNull(l_parent_xml_node))
17491
17492 END IF; -- end of IF xmldom.getNodeName(p_xml_node)='oa:stackLayout'
17493
17494 IF l_layout_new_node_id IS NULL THEN
17495 l_current_element_id := get_Attribute_Value(p_xml_node,
17496 G_ID_ATTRIBUTE);
17497
17498 IF l_current_element_id IS NOT NULL THEN
17499 l_new_element_id := get_Element_Id();
17500 END IF;
17501
17502 END IF;
17503
17504 FOR i IN(SELECT parent_element_id FROM CZ_UI_PAGE_ELEMENTS
17505 WHERE ui_def_id=p_source_ui_def_id AND
17506 page_id=p_source_ui_page_id AND
17507 element_id=l_current_element_id)
17508 LOOP
17509 l_ui_page_elements_exists := TRUE;
17510 IF x_new_element_id IS NULL THEN
17511 x_new_element_id := l_new_element_id;
17512 END IF;
17513 END LOOP;
17514
17515 l_amn_parent_element_id := p_amn_parent_element_id;
17516 IF l_ui_page_elements_exists THEN
17517 l_parent_element_id := l_amn_parent_element_id;
17518 l_amn_parent_element_id := l_new_element_id;
17519 ELSIF p_parent_element_id IS NULL THEN
17520 l_parent_element_id := p_target_parent_element_id;
17521 ELSE
17522 l_parent_element_id := p_parent_element_id;
17523 END IF;
17524
17525 IF l_ui_page_elements_exists THEN
17526 INSERT INTO CZ_UI_PAGE_ELEMENTS
17527 (ui_def_id,
17528 persistent_node_id,
17529 parent_persistent_node_id,
17530 region_persistent_node_id,
17531 pagebase_persistent_node_id,
17532 page_id,
17533 seq_nbr,
17534 ctrl_template_id,
17535 element_id,
17536 parent_element_id,
17537 element_type,
17538 instantiable_flag,
17539 ctrl_template_ui_def_id,
17540 model_ref_expl_id,
17541 element_signature_id,
17542 name,
17543 suppress_refresh_flag,
17544 deleted_flag,
17545 target_page_ui_def_id,
17546 target_page_id)
17547 SELECT
17548 p_target_ui_def_id,
17549 persistent_node_id,
17550 parent_persistent_node_id,
17551 region_persistent_node_id,
17552 p_pagebase_persistent_node_id,
17553 p_target_ui_page_id,
17554 seq_nbr,
17555 ctrl_template_id,
17556 l_new_element_id,
17557 l_parent_element_id,
17558 element_type,
17559 instantiable_flag,
17560 ctrl_template_ui_def_id,
17561 model_ref_expl_id,
17562 element_signature_id,
17563 name,
17564 suppress_refresh_flag,
17565 deleted_flag,
17566 target_page_ui_def_id,
17567 target_page_id
17568 FROM CZ_UI_PAGE_ELEMENTS
17569 WHERE ui_def_id=p_source_ui_def_id AND
17570 page_id=p_source_ui_page_id AND
17571 element_id=l_current_element_id;
17572
17573 -- set JRAD Id of current XML node to new value
17574 set_Attribute(p_xml_node,
17575 G_ID_ATTRIBUTE,
17576 l_new_element_id);
17577 g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
17578
17579 END IF;
17580
17581 -----------------------------------------------------
17582
17583 IF l_current_element_id IS NOT NULL THEN
17584 -- set JRAD Id of current XML node to new value
17585 set_Attribute(p_xml_node,
17586 G_ID_ATTRIBUTE,
17587 l_new_element_id);
17588 g_handled_attr_id_tbl(TO_NUMBER(l_new_element_id)) := l_current_element_id;
17589
17590 IF x_new_element_id IS NULL THEN
17591 x_new_element_id := l_new_element_id;
17592 END IF;
17593
17594 IF xmldom.getNodeName(p_xml_node)='oa:switcher' THEN
17595
17596 l_user_attribute3_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17597
17598 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
17599
17600 l_switcher_casename := REPLACE(l_switcher_casename,l_current_element_id, l_new_element_id);
17601 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
17602 p_cz_attribute_value => l_switcher_casename,
17603 px_xml_attribute_value => l_user_attribute3_value);
17604
17605 set_Attribute(p_xml_node,
17606 G_USER_ATTRIBUTE3_NAME,
17607 l_user_attribute3_value);
17608 END IF;
17609
17610 END IF;
17611
17612 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17613
17614 IF l_user_attribute_value IS NOT NULL THEN
17615
17616 handle_User_Attributes
17617 (px_user_attribute_value => l_user_attribute_value,
17618 p_source_ui_def_id => p_source_ui_def_id,
17619 p_source_ui_page_id => p_source_ui_page_id,
17620 p_target_ui_def_id => p_target_ui_def_id,
17621 p_target_ui_page_id => p_target_ui_page_id,
17622 p_new_element_id => l_new_element_id,
17623 p_xml_node => p_xml_node);
17624
17625 set_Attribute(p_xml_node,
17626 G_USER_ATTRIBUTE3_NAME,
17627 l_user_attribute_value);
17628
17629 END IF;
17630
17631 IF p_copy_as_ui_page=FALSE THEN
17632
17633 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE1_NAME);
17634
17635 IF l_user_attribute_value IS NOT NULL AND l_ui_page_elements_exists THEN
17636
17637 SELECT * INTO l_ui_node FROM CZ_UI_PAGE_ELEMENTS
17638 WHERE ui_def_id=p_target_ui_def_id AND
17639 page_id=p_target_ui_page_id AND
17640 element_id=l_new_element_id;
17641
17642 SELECT model_ref_expl_id INTO l_model_ref_expl_id FROM CZ_UI_PAGE_ELEMENTS
17643 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17644 parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
17645
17646 l_target_model_path := CZ_DEVELOPER_UTILS_PVT.runtime_relative_path(p_base_expl_id => l_model_ref_expl_id,
17647 p_base_pers_id => l_ui_node.pagebase_persistent_node_id,
17648 p_node_expl_id => l_ui_node.model_ref_expl_id,
17649 p_node_pers_id => l_ui_node.persistent_node_id);
17650
17651 IF l_target_model_path IS NULL THEN
17652 l_target_model_path := '.';
17653 END IF;
17654
17655 set_Attribute(p_xml_node,
17656 G_USER_ATTRIBUTE1_NAME,
17657 'model_path='||l_target_model_path);
17658
17659 END IF;
17660
17661 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE3_NAME);
17662
17663 IF l_user_attribute_value IS NOT NULL THEN
17664
17665 SELECT COUNT(element_id) INTO l_view_counter
17666 FROM CZ_UI_PAGE_ELEMENTS
17667 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17668 deleted_flag NOT IN(G_YES_FLAG,G_MARK_TO_DELETE);
17669
17670 l_view_name := get_User_Attribute(l_user_attribute_value ,'nodeView');
17671
17672 IF l_view_name <> '%nodeView' AND l_view_name IS NOT NULL THEN
17673 l_ind := INSTR(l_view_name, '_');
17674 l_view_name := SUBSTR(l_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter);
17675 set_User_Attribute(p_cz_attribute_name => 'nodeView',
17676 p_cz_attribute_value => l_view_name,
17677 px_xml_attribute_value => l_user_attribute_value);
17678
17679 l_children_view_name := get_User_Attribute(l_user_attribute_value ,'nodeChildrenView');
17680 IF l_children_view_name <> '%nodeChildrenView' AND l_children_view_name IS NOT NULL THEN
17681
17682 l_ind := INSTR(l_children_view_name, '_');
17683 l_children_view_name := SUBSTR(l_children_view_name,1,l_ind-1)||'_'||TO_CHAR(l_view_counter)||'_children';
17684
17685 set_User_Attribute(p_cz_attribute_name => 'nodeChildrenView',
17686 p_cz_attribute_value => l_children_view_name,
17687 px_xml_attribute_value => l_user_attribute_value);
17688 END IF;
17689 set_Attribute(p_xml_node,
17690 G_USER_ATTRIBUTE3_NAME,
17691 l_user_attribute_value);
17692 END IF;
17693 END IF;
17694
17695 l_user_attribute_value := get_Attribute_Value(p_xml_node, G_USER_ATTRIBUTE4_NAME);
17696
17697 IF l_user_attribute_value IS NOT NULL THEN
17698
17699 l_name := get_User_Attribute(l_user_attribute_value ,'name');
17700
17701 SELECT COUNT(*)+1 INTO l_num_copy FROM CZ_UI_PAGE_ELEMENTS
17702 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17703 name like l_name||'%' AND deleted_flag=G_NO_FLAG;
17704
17705 l_name := l_name||' ('||TO_CHAR(l_num_copy)||')';
17706
17707 set_User_Attribute(p_cz_attribute_name => 'name',
17708 p_cz_attribute_value => l_name,
17709 px_xml_attribute_value => l_user_attribute_value);
17710
17711 set_Attribute(p_xml_node,
17712 G_USER_ATTRIBUTE4_NAME,
17713 l_user_attribute_value);
17714 END IF;
17715
17716 IF l_new_element_id IS NOT NULL THEN
17717 UPDATE CZ_UI_PAGE_ELEMENTS
17718 SET name=l_name
17719 WHERE ui_def_id=p_target_ui_def_id AND page_id=p_target_ui_page_id AND
17720 element_id = l_new_element_id;
17721 END IF;
17722
17723 END IF;
17724
17725 -----------------------------------------------------
17726
17727 IF l_current_element_id IS NULL THEN
17728 l_current_element_id := p_parent_element_id;
17729 END IF;
17730
17731 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17732 l_length := xmldom.getLength(l_child_nodes_tbl);
17733
17734 FOR k IN 0 .. l_length - 1
17735 LOOP
17736 --
17737 -- get next child DOM node
17738 --
17739 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17740
17741 copy_Tree_Level(p_xml_node => l_child_xml_node,
17742 p_source_ui_def_id => p_source_ui_def_id,
17743 p_target_ui_def_id => p_target_ui_def_id,
17744 p_source_ui_page_id => p_source_ui_page_id,
17745 p_target_ui_page_id => p_target_ui_page_id,
17746 p_parent_element_id => l_current_element_id,
17747 p_target_parent_element_id => p_target_parent_element_id,
17748 p_pagebase_persistent_node_id => p_pagebase_persistent_node_id,
17749 x_new_element_id => x_new_element_id,
17750 p_copy_as_ui_page => p_copy_as_ui_page,
17751 p_source_jrad_doc => p_source_jrad_doc,
17752 p_target_jrad_doc => p_target_jrad_doc,
17753 p_amn_parent_element_id => l_amn_parent_element_id);
17754
17755 END LOOP;
17756
17757 END copy_Tree_Level;
17758
17759 --
17760 -- copy records which corresponds with user attributes
17761 --
17762 PROCEDURE copy_User_Attributes(p_xml_node xmldom.DOMNode,
17763 p_source_ui_def_id NUMBER,
17764 p_target_ui_def_id NUMBER,
17765 p_source_template_id NUMBER DEFAULT NULL,
17766 p_target_template_id NUMBER DEFAULT NULL) IS
17767
17768 l_child_nodes_tbl xmldom.DOMNodeList;
17769 l_child_xml_node xmldom.DOMNode;
17770 l_length NUMBER;
17771
17772 BEGIN
17773 copy_User_Attr_For_Node(p_xml_node => p_xml_node,
17774 p_source_ui_def_id => p_source_ui_def_id,
17775 p_target_ui_def_id => p_target_ui_def_id,
17776 p_source_template_id=> p_source_template_id,
17777 p_target_template_id=> p_target_template_id);
17778
17779 l_child_nodes_tbl := xmldom.getChildNodes(p_xml_node);
17780 l_length := xmldom.getLength(l_child_nodes_tbl);
17781
17782 FOR k IN 0 .. l_length - 1
17783 LOOP
17784 --
17785 -- get next child DOM node
17786 --
17787 l_child_xml_node := xmldom.item(l_child_nodes_tbl, k);
17788
17789 copy_User_Attr_For_Node(p_xml_node => l_child_xml_node,
17790 p_source_ui_def_id => p_source_ui_def_id,
17791 p_target_ui_def_id => p_target_ui_def_id,
17792 p_source_template_id=> p_source_template_id,
17793 p_target_template_id=> p_target_template_id);
17794
17795 copy_User_Attributes(p_xml_node => l_child_xml_node,
17796 p_source_ui_def_id => p_source_ui_def_id,
17797 p_target_ui_def_id => p_target_ui_def_id,
17798 p_source_template_id=> p_source_template_id,
17799 p_target_template_id=> p_target_template_id);
17800 END LOOP;
17801
17802 EXCEPTION
17803 WHEN OTHERS THEN
17804 DEBUG('copy_User_Attributes() : '||SQLERRM);
17805 END copy_User_Attributes;
17806
17807 --
17808 -- This procedure sets/propogates deleted_flag='1' from a given UI element to its subtree in CZ_UI_PAGE_ELEMENTS table.
17809 -- Also the procedure parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
17810 -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
17811 -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0'.
17812 -- If parameter p_delete_xml = '1' then it also deletes a corresponding XML elements.
17813 --
17814 PROCEDURE delete_UI_Subtree(p_ui_def_id IN NUMBER,
17815 p_ui_page_id IN NUMBER,
17816 p_element_id IN VARCHAR2,
17817 p_delete_xml IN VARCHAR2,
17818 x_return_status OUT NOCOPY VARCHAR2,
17819 x_msg_count OUT NOCOPY NUMBER,
17820 x_msg_data OUT NOCOPY VARCHAR2) IS
17821
17822 l_xmldoc xmldom.DOMDocument;
17823 l_xml_node xmldom.DOMNode;
17824 l_element_id_tbl varchar_tbl_type;
17825 l_out_node xmldom.DOMNode;
17826 l_parent_node xmldom.DOMNode;
17827 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
17828 l_parent_element_id CZ_UI_PAGE_ELEMENTS.parent_element_id%TYPE;
17829 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
17830 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
17831 l_ui_context CZ_UI_DEFS%ROWTYPE;
17832 l_condition_id NUMBER;
17833 l_caption_text_id NUMBER;
17834 l_caption_rule_id NUMBER;
17835 l_display_condition_id NUMBER;
17836 l_enabled_condition_id NUMBER;
17837
17838 BEGIN
17839
17840 --
17841 -- initialize FND variables/packages
17842 --
17843 Initialize(x_return_status,x_msg_count,x_msg_data);
17844
17845 --
17846 -- get UI context
17847 --
17848 g_ui_def_nodes_tbl.DELETE;
17849 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
17850
17851 --
17852 -- propogate deleted_flag in UI subtree
17853 --
17854 UPDATE CZ_UI_PAGE_ELEMENTS
17855 SET deleted_flag=G_LIMBO_FLAG
17856 WHERE (ui_def_id,page_id,element_id) IN
17857 (SELECT ui_def_id,page_id,element_id FROM CZ_UI_PAGE_ELEMENTS
17858 START WITH ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND element_id=p_element_id
17859 CONNECT BY PRIOR ui_def_id=p_ui_def_id AND
17860 PRIOR page_id=p_ui_page_id AND page_id=p_ui_page_id AND
17861 PRIOR element_id=parent_element_id AND
17862 PRIOR ui_def_id=p_ui_def_id AND ui_def_id=p_ui_def_id AND
17863 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG)
17864 RETURNING element_id
17865 BULK COLLECT INTO l_element_id_tbl;
17866
17867 IF l_element_id_tbl.COUNT=0 THEN
17868 RETURN;
17869 END IF;
17870
17871 SELECT parent_element_id
17872 INTO l_parent_element_id
17873 FROM CZ_UI_PAGE_ELEMENTS
17874 WHERE ui_def_id=p_ui_def_id AND
17875 page_id=p_ui_page_id AND
17876 element_id=p_element_id;
17877
17878 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
17879 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
17880
17881 IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN -- this is UI page ( and it should be deleted )
17882
17883 FOR i IN(SELECT page_ref_id,page_ref_type,page_set_id,condition_id,caption_text_id,caption_rule_id
17884 FROM CZ_UI_PAGE_REFS
17885 WHERE ui_def_id=p_ui_def_id AND target_page_id=p_ui_page_id AND deleted_flag=G_NO_FLAG)
17886 LOOP
17887
17888 UPDATE CZ_LOCALIZED_TEXTS
17889 SET deleted_flag=G_YES_FLAG
17890 WHERE persistent_intl_text_id=i.caption_text_id AND
17891 ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17892
17893 UPDATE CZ_RULES
17894 SET deleted_flag=G_YES_FLAG
17895 WHERE persistent_rule_id IN(i.condition_id,i.caption_rule_id) AND
17896 ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17897
17898 IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
17899 UPDATE CZ_UI_PAGE_REFS
17900 SET deleted_flag=G_YES_FLAG
17901 WHERE ui_def_id=p_ui_def_id
17902 AND deleted_flag=G_NO_FLAG
17903 AND (ui_def_id,page_ref_id,page_set_id) IN
17904 (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
17905 START WITH a.ui_def_id=p_ui_def_id AND
17906 a.page_ref_id=i.page_ref_id
17907 CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
17908 a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
17909 PRIOR a.ui_def_id=p_ui_def_id AND
17910 a.page_set_id=i.page_set_id AND
17911 PRIOR a.page_set_id=i.page_set_id);
17912 ELSE
17913 UPDATE CZ_UI_PAGE_REFS
17914 SET deleted_flag=G_YES_FLAG
17915 WHERE ui_def_id=p_ui_def_id AND page_ref_id=i.page_ref_id;
17916 END IF;
17917
17918 END LOOP;
17919
17920 --
17921 -- set data for Page Sets
17922 --
17923 handle_Page_Flows();
17924
17925 UPDATE CZ_UI_PAGES
17926 SET deleted_flag=G_YES_FLAG
17927 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG
17928 RETURNING caption_text_id,caption_rule_id,display_condition_id,enabled_condition_id
17929 INTO l_caption_text_id,l_caption_rule_id,l_display_condition_id,l_enabled_condition_id;
17930
17931 UPDATE CZ_LOCALIZED_TEXTS
17932 SET deleted_flag=G_YES_FLAG
17933 WHERE intl_text_id=l_caption_text_id AND ui_def_id=p_ui_def_id AND seeded_flag=G_NO_FLAG;
17934
17935 UPDATE CZ_RULES
17936 SET deleted_flag=G_YES_FLAG
17937 WHERE rule_id IN(l_display_condition_id,l_caption_rule_id,l_enabled_condition_id)
17938 AND seeded_flag=G_NO_FLAG;
17939
17940 END IF;
17941
17942 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17943 UPDATE CZ_UI_ACTIONS
17944 SET deleted_flag=G_YES_FLAG
17945 WHERE ui_def_id=p_ui_def_id AND
17946 source_page_id=p_ui_page_id AND
17947 element_id=l_element_id_tbl(i) AND deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17948
17949 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17950 UPDATE CZ_RULES
17951 SET deleted_flag=G_YES_FLAG
17952 WHERE ui_def_id=p_ui_def_id AND
17953 ui_page_id=p_ui_page_id AND
17954 ui_page_element_id=l_element_id_tbl(i) AND
17955 deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17956
17957 FORALL i IN l_element_id_tbl.First..l_element_id_tbl.Last
17958 UPDATE CZ_LOCALIZED_TEXTS
17959 SET deleted_flag=G_YES_FLAG
17960 WHERE ui_def_id=p_ui_def_id AND
17961 ui_page_id=p_ui_page_id AND
17962 ui_page_element_id=l_element_id_tbl(i) AND
17963 deleted_flag=G_NO_FLAG AND seeded_flag=G_NO_FLAG;
17964
17965 --
17966 -- open XML parser
17967 --
17968 Open_Parser();
17969
17970 --
17971 -- create UI Template in JRAD repository
17972 --
17973 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
17974
17975 IF xmldom.isNull(l_xmldoc) THEN
17976 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
17977 p_token_name => 'UI_TEMPLATE',
17978 p_token_value => l_jrad_doc,
17979 p_fatal_error => TRUE);
17980 RAISE WRONG_UI_TEMPLATE;
17981 END IF;
17982
17983 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
17984 p_attribute_name => G_ID_ATTRIBUTE,
17985 p_attribute_value => p_element_id);
17986 --
17987 -- delete user attributes from the list of attrributes to delete
17988 --
17989 delete_User_Attributes(l_xml_node, p_ui_def_id);
17990
17991 IF p_delete_xml=G_YES_FLAG THEN
17992 IF l_parent_element_id IS NULL OR p_element_id=G_NO_FLAG THEN
17993 jdr_docbuilder.deleteDocument(l_jrad_doc);
17994 ELSE
17995 l_parent_node:=xmldom.getParentNode(l_xml_node);
17996 l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
17997 Save_Document(p_xml_doc => l_xmldoc,
17998 p_doc_name => l_jrad_doc);
17999 END IF;
18000
18001 UPDATE CZ_UI_PAGES
18002 SET page_rev_nbr=page_rev_nbr+1
18003 WHERE ui_def_id=p_ui_def_id AND
18004 page_id=p_ui_page_id;
18005
18006 END IF;
18007
18008 --
18009 -- close XML parser
18010 --
18011 Close_Parser();
18012
18013
18014 EXCEPTION
18015 WHEN WRONG_UI_TEMPLATE THEN
18016 x_return_status := FND_API.G_RET_STS_ERROR;
18017 x_msg_count := g_MSG_COUNT;
18018 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18019 --DEBUG(x_msg_data);
18020 WHEN OTHERS THEN
18021 x_return_status := FND_API.G_RET_STS_ERROR;
18022 x_msg_count := 1;
18023 x_msg_data := SQLERRM;
18024 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
18025 --DEBUG(x_msg_data);
18026 END delete_UI_Subtree;
18027
18028 --
18029 -- This procedure sets/propogates deleted_flag='1' from a given UI page to all related UI entities which belong to this page,
18030 -- parses the corresponding XML to collect all caption intl_text_ids, UI condtion rules ids of
18031 -- deleted UI elements and then performs a soft delete ( set deleted_flag='1' ) of corresponding records
18032 -- in tables CZ_LOCALIZED_TEXTS and CZ_RULES which have seeded_flag='0' and deletes the corresponding XML/JRAD document.
18033 --
18034 PROCEDURE delete_UI_Page(p_ui_def_id IN NUMBER, -- ui_def_id of UI
18035 p_ui_page_id IN NUMBER, -- page_id of
18036 -- UI page which needs
18037 -- to be deleted.
18038 x_return_status OUT NOCOPY VARCHAR2,-- status string
18039 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18040 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18041 ) IS
18042
18043 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18044
18045 BEGIN
18046
18047 --
18048 -- initialize FND variables/packages
18049 --
18050 Initialize(x_return_status,x_msg_count,x_msg_data);
18051
18052 --
18053 -- get element_id of root element of UI page
18054 --
18055 FOR i IN(SELECT element_id FROM CZ_UI_PAGE_ELEMENTS
18056 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
18057 parent_element_id IS NULL AND deleted_flag=G_NO_FLAG)
18058 LOOP
18059 --
18060 -- delete UI elements of this UI page starting with
18061 -- the root element
18062 --
18063 delete_UI_Subtree(p_ui_def_id => p_ui_def_id,
18064 p_ui_page_id => p_ui_page_id,
18065 p_element_id => i.element_id,
18066 p_delete_xml => G_YES_FLAG,
18067 x_return_status => x_return_status,
18068 x_msg_count => x_msg_count,
18069 x_msg_data => x_msg_data);
18070 END LOOP;
18071
18072 -- handle page include region
18073 UPDATE cz_ui_page_elements
18074 SET target_page_ui_def_id = NULL, target_page_id = NULL
18075 WHERE target_page_ui_def_id = p_ui_def_id AND target_page_id = p_ui_page_id AND
18076 deleted_flag = '0' AND element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
18077 EXCEPTION
18078 WHEN OTHERS THEN
18079 x_return_status := FND_API.G_RET_STS_ERROR;
18080 x_msg_count := 1;
18081 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18082 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page', x_msg_data);
18083 DEBUG(x_msg_data);
18084 END delete_UI_Page;
18085
18086 --
18087 -- This procedure sets/propogates deleted_flag='1' from a given Page Ref record specified by parameter p_page_ref_id.
18088 -- a target UI pages are not deleted.
18089 --
18090 PROCEDURE delete_UI_Page_Ref(p_ui_def_id IN NUMBER, -- ui_def_id of UI
18091 p_page_ref_id IN NUMBER, -- page_ref_id of
18092 -- Menu/Page Flow link which needs
18093 -- to be deleted.
18094 x_return_status OUT NOCOPY VARCHAR2,-- status string
18095 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18096 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18097 ) IS
18098
18099 l_parent_page_ref_id CZ_UI_PAGE_REFS.parent_page_ref_id%TYPE;
18100 l_ui_context CZ_UI_DEFS%ROWTYPE;
18101 l_page_id CZ_UI_PAGES.page_id%TYPE;
18102 l_page_set_id CZ_UI_PAGES.page_set_id%TYPE;
18103 l_page_ref_type CZ_UI_PAGE_REFS.page_ref_type%TYPE;
18104
18105 BEGIN
18106
18107 --
18108 -- initialize FND variables/packages
18109 --
18110 Initialize(x_return_status,x_msg_count,x_msg_data);
18111
18112 g_ui_def_nodes_tbl.DELETE;
18113
18114 --
18115 -- get UI context
18116 --
18117 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
18118
18119 SELECT page_set_id, page_ref_type
18120 INTO l_page_set_id, l_page_ref_type
18121 FROM CZ_UI_PAGE_REFS
18122 WHERE ui_def_id=p_ui_def_id AND page_ref_id=p_page_ref_id
18123 AND deleted_flag=G_NO_FLAG;
18124
18125 IF l_page_ref_type IN( G_MODEL_TREE_MENU, G_MULTI_LEVEL_MENU) THEN
18126 UPDATE CZ_UI_PAGE_REFS
18127 SET deleted_flag=G_YES_FLAG
18128 WHERE ui_def_id=p_ui_def_id
18129 AND deleted_flag=G_NO_FLAG
18130 AND (ui_def_id,page_ref_id,page_set_id) IN
18131 (SELECT a.ui_def_id,a.page_ref_id,a.page_set_id FROM CZ_UI_PAGE_REFS a
18132 START WITH a.ui_def_id=p_ui_def_id AND
18133 a.page_ref_id=p_page_ref_id
18134 CONNECT BY PRIOR a.page_ref_id=a.parent_page_ref_id AND
18135 a.deleted_flag='0' AND a.ui_def_id=p_ui_def_id AND
18136 PRIOR a.ui_def_id=p_ui_def_id AND
18137 a.page_set_id=l_page_set_id AND
18138 PRIOR a.page_set_id=l_page_set_id);
18139 ELSE
18140 UPDATE CZ_UI_PAGE_REFS
18141 SET deleted_flag=G_YES_FLAG
18142 WHERE ui_def_id=p_ui_def_id
18143 AND page_ref_id=p_page_ref_id;
18144 END IF;
18145
18146 --
18147 -- null out CZ_UI_PAGES.page_set_id for those UI pages in this UI
18148 -- which have no corresponding records in CZ_UI_PAGE_REFS
18149 --
18150 UPDATE CZ_UI_PAGES a
18151 SET page_set_id=NULL
18152 WHERE ui_def_id=p_ui_def_id AND page_set_id IS NOT NULL AND
18153 NOT EXISTS(SELECT NULL FROM CZ_UI_PAGE_REFS b
18154 WHERE b.ui_def_id=p_ui_def_id AND target_page_id=a.page_id AND
18155 deleted_flag='0');
18156
18157 IF l_page_ref_type IN( G_PAGE_FLOW, G_SUBTABS) THEN
18158 --
18159 -- set data for Page Sets
18160 --
18161 handle_Page_Flows();
18162 END IF;
18163
18164 EXCEPTION
18165 WHEN OTHERS THEN
18166 x_return_status := FND_API.G_RET_STS_ERROR;
18167 x_msg_count := 1;
18168 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18169 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Page_Ref', x_msg_data);
18170 DEBUG(x_msg_data);
18171 END delete_UI_Page_Ref;
18172
18173 --
18174 -- For a given Local Template specified by parameters p_template_id and p_ui_def_id this procedure performs a soft deletion
18175 -- ( sets deleted_flag='1' ) of corresponding CZ_UI_TEMPLATES record and deletes the corresponding JRAD/XML document.
18176 -- It parses the corresponding XML to collect all caption intl_text_ids and UI Condition Ids and performs soft
18177 -- Delete of corresponding records in CZ_LOCALIZED_TEXTS
18178 -- and CZ_RULES which have seeded_flag='0'
18179 --
18180 PROCEDURE delete_Local_Template(p_template_ui_def_id IN NUMBER, -- ui_def_id of UI
18181 p_template_id IN NUMBER, -- template_id of
18182 -- Local UI Template which needs
18183 -- to be deleted.
18184 x_return_status OUT NOCOPY VARCHAR2,-- status string
18185 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18186 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18187 ) IS
18188
18189 l_xmldoc xmldom.DOMDocument;
18190 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18191
18192 BEGIN
18193
18194 --
18195 -- initialize FND variables/packages
18196 --
18197 Initialize(x_return_status,x_msg_count,x_msg_data);
18198
18199 FOR i IN(SELECT 'x' FROM CZ_MODEL_PUBLICATIONS
18200 WHERE object_id=p_template_id AND object_type='UIT' AND
18201 deleted_flag='0' AND rownum<2)
18202 LOOP
18203 RETURN;
18204 END LOOP;
18205
18206 --
18207 -- get full JRAD path of the given UI template
18208 --
18209 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
18210 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18211
18212 --
18213 -- open XML parser
18214 --
18215 Open_Parser();
18216
18217 --
18218 -- create UI Template in JRAD repository
18219 --
18220 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18221
18222 IF xmldom.isNull(l_xmldoc) THEN
18223 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18224 p_token_name => 'UI_TEMPLATE',
18225 p_token_value => l_jrad_doc,
18226 p_fatal_error => TRUE);
18227 RAISE WRONG_UI_TEMPLATE;
18228 END IF;
18229
18230 --
18231 -- delete user attributes from the list of attrributes to delete
18232 --
18233 delete_User_Attributes(xmldom.makeNode(l_xmldoc),p_template_ui_def_id,
18234 p_template_id, p_template_ui_def_id);
18235
18236 jdr_docbuilder.deleteDocument(l_jrad_doc);
18237
18238 --
18239 -- close XML parser
18240 --
18241 Close_Parser();
18242
18243 DELETE FROM CZ_UI_TEMPLATES
18244 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id
18245 AND seeded_flag=G_NO_FLAG;
18246
18247 DELETE FROM CZ_UI_REF_TEMPLATES
18248 WHERE template_ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18249
18250 UPDATE CZ_UI_TEMPLATE_ELEMENTS
18251 SET deleted_flag=G_YES_FLAG
18252 WHERE template_id=p_template_ui_def_id AND
18253 deleted_flag=G_NO_FLAG;
18254
18255 EXCEPTION
18256 WHEN WRONG_UI_TEMPLATE THEN
18257 x_return_status := FND_API.G_RET_STS_ERROR;
18258 x_msg_count := g_MSG_COUNT;
18259 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18260 DEBUG(x_msg_data);
18261 WHEN OTHERS THEN
18262 x_return_status := FND_API.G_RET_STS_ERROR;
18263 x_msg_count := 1;
18264 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18265 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template', x_msg_data);
18266 DEBUG('delete_Local_Template() : '||x_msg_data);
18267 END delete_Local_Template;
18268
18269 --
18270 -- This procedure deletes subtree identified by p_element_id of UI Local Template.
18271 -- Follows the same rules as deleting an element in a page.
18272 --
18273 PROCEDURE delete_Local_Template_Elem(p_template_ui_def_id IN NUMBER, -- ui_def_id of UI
18274 p_template_id IN NUMBER, -- template_id of
18275 p_element_id IN VARCHAR2, -- element_id of Element to delete
18276 x_return_status OUT NOCOPY VARCHAR2,-- status string
18277 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18278 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18279 ) IS
18280
18281 l_xmldoc xmldom.DOMDocument;
18282 l_out_node xmldom.DOMNode;
18283 l_parent_node xmldom.DOMNode;
18284 l_xml_node xmldom.DOMNode;
18285 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18286 l_needs_to_be_unlocked BOOLEAN;
18287
18288 BEGIN
18289
18290 --
18291 -- lock source UI Template
18292 --
18293 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18294
18295 --
18296 -- initialize FND variables/packages
18297 --
18298 Initialize(x_return_status,x_msg_count,x_msg_data);
18299
18300 --
18301 -- get full JRAD path of the given UI template
18302 --
18303 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
18304 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18305
18306 --
18307 -- open XML parser
18308 --
18309 Open_Parser();
18310
18311 --
18312 -- create UI Template in JRAD repository
18313 --
18314 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
18315
18316 IF xmldom.isNull(l_xmldoc) THEN
18317 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18318 p_token_name => 'UI_TEMPLATE',
18319 p_token_value => l_jrad_doc,
18320 p_fatal_error => TRUE);
18321 RAISE WRONG_UI_TEMPLATE;
18322 END IF;
18323
18324 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
18325 p_attribute_name => G_ID_ATTRIBUTE,
18326 p_attribute_value => p_element_id);
18327
18328 IF xmldom.isNull(l_xml_node) THEN
18329 l_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
18330 p_attribute_name => 'caseId',
18331 p_attribute_value => p_element_id,
18332 p_in_user_attributes => G_YES_FLAG );
18333
18334 IF xmldom.isNull(l_xml_node) THEN
18335 x_return_status := FND_API.G_RET_STS_ERROR;
18336 x_msg_count := 1;
18337 x_msg_data := 'Element with element_id="'||p_element_id||'" does exist.';
18338 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', 'Element with element_id="'||
18339 p_element_id||'" does exist.');
18340 DEBUG('delete_Local_Template_Elem() : '||'Element with element_id="'||
18341 p_element_id||'" does exist.');
18342 RETURN;
18343 END IF;
18344 END IF;
18345
18346 --
18347 -- delete user attributes from the list of attrributes to delete
18348 --
18349 delete_User_Attributes(l_xml_node, p_template_ui_def_id,
18350 p_template_id, p_template_ui_def_id);
18351
18352 --
18353 -- remove XML subtree
18354 --
18355 l_parent_node:=xmldom.getParentNode(l_xml_node);
18356 l_out_node:=xmldom.removeChild(l_parent_node,l_xml_node);
18357
18358
18359 refresh_Templ_Ref_Counts(l_xmldoc, p_template_ui_def_id, p_template_id);
18360
18361 --
18362 -- save XML in JRAD repository
18363 --
18364 Save_Document(p_xml_doc => l_xmldoc,
18365 p_doc_name => l_jrad_doc);
18366
18367 --
18368 -- close XML parser
18369 --
18370 Close_Parser();
18371
18372 /* *** changes for build 21p *** */
18373
18374 UPDATE CZ_UI_TEMPLATES
18375 SET template_rev_nbr=NVL(template_rev_nbr,0)+1
18376 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
18377
18378 --
18379 -- unlock source UI Template
18380 --
18381 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18382
18383 EXCEPTION
18384 WHEN WRONG_UI_TEMPLATE THEN
18385 x_return_status := FND_API.G_RET_STS_ERROR;
18386 x_msg_count := g_MSG_COUNT;
18387 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18388 DEBUG(x_msg_data);
18389 --
18390 -- unlock source UI Template
18391 --
18392 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18393
18394 WHEN OTHERS THEN
18395 x_return_status := FND_API.G_RET_STS_ERROR;
18396 x_msg_count := 1;
18397 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18398 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_Local_Template_Elem', x_msg_data);
18399 DEBUG('delete_Local_Template_Elem() : '||x_msg_data);
18400 --
18401 -- unlock source UI Template
18402 --
18403 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
18404
18405 END delete_Local_Template_Elem;
18406
18407 --
18408 -- This procedure copies a UI element and its subtree specified by parameters p_element_id, p_page_id and p_ui_def_id to
18409 -- to a new location specified by paremeters p_new_parent_element_id - new parent UI element and p_target_ui_def_id.
18410 -- 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.
18411 -- Action records associated to the UI Elements will also be copied, pointing to the same action as the source Element.
18412 PROCEDURE copy_UI_Subtree(p_source_ui_def_id IN NUMBER, -- ui_def_id of source UI
18413 p_source_element_id IN VARCHAR2, -- element_id of
18414 -- UI element which needs
18415 -- to be copied ( source element )
18416 p_source_ui_page_id IN NUMBER, -- page_id of UI page to which source element belongs to
18417 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
18418 p_target_ui_page_id IN NUMBER, -- page_id of target UI page
18419 p_target_parent_element_id IN VARCHAR2, -- element_id of
18420 -- new parent UI element
18421 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of copied UI element
18422 x_return_status OUT NOCOPY VARCHAR2,-- status string
18423 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18424 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18425 ) IS
18426
18427 l_source_xmldoc xmldom.DOMDocument;
18428 l_target_xmldoc xmldom.DOMDocument;
18429 l_source_xml_node xmldom.DOMNode;
18430 l_target_xml_node xmldom.DOMNode;
18431 l_new_xml_root_node xmldom.DOMNode;
18432 l_out_xml_node xmldom.DOMNode;
18433 l_target_uicont_xml_node xmldom.DOMNode;
18434 l_stacklayout_node xmldom.DOMNode;
18435 l_stacklayout_uicont_xml_node xmldom.DOMNode;
18436 l_xml_temp_node xmldom.DOMNode;
18437 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18438 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18439 l_xml_uicont_node xmldom.DOMNode;
18440 l_xml_new_node xmldom.DOMNode;
18441 l_amn_parent_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
18442 l_pagebase_persistent_node_id NUMBER;
18443 l_length NUMBER;
18444 l_caseid_to_copy BOOLEAN;
18445
18446 BEGIN
18447
18448 --
18449 -- initialize FND variables/packages
18450 --
18451 Initialize(x_return_status,x_msg_count,x_msg_data);
18452
18453 g_handled_attr_id_tbl.DELETE;
18454
18455 set_Local_UI_Context(p_target_ui_def_id);
18456
18457 --
18458 -- get jrad_doc of source UI page to which this UI element belongs to
18459 --
18460 SELECT jrad_doc
18461 INTO l_source_jrad_doc FROM CZ_UI_PAGES
18462 WHERE page_id=p_source_ui_page_id AND
18463 ui_def_id=p_source_ui_def_id;
18464
18465 --
18466 -- get jrad_doc of source UI page to which this UI element belongs to
18467 --
18468 SELECT jrad_doc,persistent_node_id
18469 INTO l_target_jrad_doc, l_pagebase_persistent_node_id
18470 FROM CZ_UI_PAGES
18471 WHERE page_id=p_target_ui_page_id AND
18472 ui_def_id=p_target_ui_def_id;
18473
18474 --
18475 -- open XML parser
18476 --
18477 Open_Parser();
18478
18479 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
18480
18481 IF xmldom.isNull(l_source_xmldoc) THEN
18482 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18483 p_token_name => 'UI_TEMPLATE',
18484 p_token_value => l_source_jrad_doc,
18485 p_fatal_error => TRUE);
18486 RAISE WRONG_UI_TEMPLATE;
18487 END IF;
18488
18489 --
18490 -- create UI Template in JRAD repository
18491 --
18492 l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
18493
18494 IF xmldom.isNull(l_target_xmldoc) THEN
18495 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18496 p_token_name => 'UI_TEMPLATE',
18497 p_token_value => l_target_jrad_doc,
18498 p_fatal_error => TRUE);
18499 RAISE WRONG_UI_TEMPLATE;
18500 END IF;
18501
18502 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
18503 p_attribute_name => G_ID_ATTRIBUTE,
18504 p_attribute_value => p_source_element_id);
18505
18506 IF xmldom.IsNull(l_source_xml_node) THEN
18507 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
18508 p_attribute_name => 'caseId',
18509 p_attribute_value => p_source_element_id,
18510 p_in_user_attributes => G_YES_FLAG);
18511 l_caseid_to_copy := TRUE;
18512 END IF;
18513
18514 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
18515 p_attribute_name => G_ID_ATTRIBUTE,
18516 p_attribute_value => p_target_parent_element_id);
18517 IF xmldom.IsNull(l_target_xml_node) THEN
18518 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
18519 p_attribute_name => 'caseId',
18520 p_attribute_value => p_target_parent_element_id,
18521 p_in_user_attributes => G_YES_FLAG);
18522 END IF;
18523
18524 BEGIN
18525 SELECT element_id INTO l_amn_parent_element_id
18526 FROM CZ_UI_PAGE_ELEMENTS
18527 WHERE ui_def_id=p_target_ui_def_id AND
18528 page_id=p_target_ui_page_id AND
18529 element_id=p_target_parent_element_id;
18530 EXCEPTION
18531 WHEN NO_DATA_FOUND THEN
18532 l_amn_parent_element_id := find_AMN_Element_Above(l_target_xml_node);
18533 END;
18534
18535 l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
18536
18537 IF xmldom.IsNull(l_target_uicont_xml_node) THEN
18538 l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18539 l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
18540 l_xml_temp_node);
18541 END IF;
18542
18543
18544 --
18545 -- returns cloned DOM subtree
18546 --
18547 --l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
18548 l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
18549
18550
18551 copy_Tree_Level(p_xml_node => l_new_xml_root_node,
18552 p_source_ui_def_id => p_source_ui_def_id,
18553 p_target_ui_def_id => p_target_ui_def_id,
18554 p_source_ui_page_id => p_source_ui_page_id,
18555 p_target_ui_page_id => p_target_ui_page_id,
18556 p_parent_element_id => NULL,
18557 p_target_parent_element_id => p_target_parent_element_id,
18558 p_pagebase_persistent_node_id => l_pagebase_persistent_node_id,
18559 x_new_element_id => x_new_element_id,
18560 p_copy_as_ui_page => FALSE,
18561 p_source_jrad_doc => l_source_jrad_doc,
18562 p_target_jrad_doc => l_target_jrad_doc,
18563 p_amn_parent_element_id => l_amn_parent_element_id);
18564
18565 validate_Copied_PIR(p_target_ui_def_id, p_target_ui_page_id);
18566
18567 IF xmldom.getNodeName(l_source_xml_node)='ui:case' AND xmldom.getNodeName(l_target_xml_node)='oa:switcher' THEN
18568
18569 l_out_xml_node := xmldom.appendChild(l_target_xml_node,
18570 l_new_xml_root_node);
18571
18572 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
18573 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18574
18575 l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
18576 l_xml_new_node);
18577 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
18578 l_new_xml_root_node);
18579 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
18580
18581 l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
18582 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
18583
18584 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
18585
18586 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
18587 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
18588 l_xml_new_node);
18589 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
18590 l_new_xml_root_node);
18591
18592 ELSE
18593
18594 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
18595 l_new_xml_root_node);
18596 END IF;
18597 ELSE
18598 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
18599 l_new_xml_root_node);
18600 END IF;
18601
18602 Save_Document(p_xml_doc => l_target_xmldoc,
18603 p_doc_name => l_target_jrad_doc);
18604
18605 --
18606 -- close XML parser
18607 --
18608 Close_Parser();
18609
18610 UPDATE CZ_UI_PAGES
18611 SET page_rev_nbr=page_rev_nbr+1,
18612 empty_page_flag = G_NO_FLAG
18613 WHERE page_id=p_target_ui_page_id AND
18614 ui_def_id=p_target_ui_def_id;
18615
18616 UPDATE CZ_UI_PAGE_REFS
18617 SET empty_page_flag = G_NO_FLAG
18618 WHERE target_page_id=p_target_ui_page_id AND
18619 ui_def_id=p_target_ui_def_id AND
18620 deleted_flag = G_NO_FLAG AND
18621 empty_page_flag = G_YES_FLAG;
18622
18623
18624 EXCEPTION
18625 WHEN WRONG_UI_TEMPLATE THEN
18626 x_return_status := FND_API.G_RET_STS_ERROR;
18627 x_msg_count := g_MSG_COUNT;
18628 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18629 DEBUG(x_msg_data);
18630 WHEN OTHERS THEN
18631 x_return_status := FND_API.G_RET_STS_ERROR;
18632 x_msg_count := 1;
18633 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18634 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Subtree', x_msg_data);
18635 DEBUG('copy_UI_Subtree() : '||x_msg_data);
18636 END copy_UI_Subtree;
18637
18638 --
18639 --
18640 -- This procedure copies a UI page specified by parameter p_page_id - it creates a new copies for UI entities corresponding to
18641 -- a source UI page except corresponding UI Page Refs records.
18642 -- 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.
18643 --
18644 PROCEDURE copy_UI_Page (p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
18645 p_source_ui_page_id IN NUMBER, -- page_id of
18646 -- UI page which needs
18647 -- to be copied
18648 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
18649 x_new_ui_page_id OUT NOCOPY NUMBER,-- page_id of copied UI page
18650 x_return_status OUT NOCOPY VARCHAR2,-- status string
18651 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18652 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18653 ) IS
18654
18655 l_source_xmldoc xmldom.DOMDocument;
18656 l_source_xml_node xmldom.DOMNode;
18657 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18658 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
18659 l_element_id_tbl number_tbl_type;
18660 l_parent_element_id_tbl number_tbl_type;
18661 l_element_id_arr_tbl number_tbl_type;
18662 l_new_element_id_arr_tbl number_tbl_type;
18663 l_seq_nbr_tbl number_tbl_type;
18664 l_seq_nbr_arr_tbl number_tbl_type;
18665 l_source_element_id VARCHAR2(255);
18666 l_new_element_id VARCHAR2(255);
18667 l_caption_text_id NUMBER;
18668 l_ui_action_id NUMBER;
18669 l_display_condition_id NUMBER;
18670 l_enabled_condition_id NUMBER;
18671 l_current_element_id NUMBER;
18672 l_persistent_node_id NUMBER;
18673 l_caption_rule_id NUMBER;
18674 l_new_parent_element_id NUMBER;
18675 l_copy_nbr NUMBER;
18676
18677 BEGIN
18678
18679 --
18680 -- initialize FND variables/packages
18681 --
18682 Initialize(x_return_status,x_msg_count,x_msg_data);
18683
18684 g_handled_attr_id_tbl.DELETE;
18685
18686 set_Local_UI_Context(p_target_ui_def_id);
18687
18688 SELECT element_id INTO l_source_element_id
18689 FROM CZ_UI_PAGE_ELEMENTS
18690 WHERE ui_def_id=p_source_ui_def_id AND page_id=p_source_ui_page_id AND
18691 parent_element_id IS NULL AND deleted_flag=G_NO_FLAG;
18692
18693 --
18694 -- get jrad_doc of source UI page to which this UI element belongs to
18695 --
18696 SELECT jrad_doc,persistent_node_id
18697 INTO l_source_jrad_doc,l_persistent_node_id
18698 FROM CZ_UI_PAGES
18699 WHERE ui_def_id=p_source_ui_def_id AND
18700 page_id=p_source_ui_page_id;
18701
18702 SELECT COUNT(*) INTO l_copy_nbr FROM CZ_UI_PAGES
18703 WHERE ui_def_id=p_target_ui_def_id AND
18704 persistent_node_id=l_persistent_node_id;
18705
18706 l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
18707 TO_CHAR(p_target_ui_def_id) || '/' ||
18708 get_Short_JRAD_Name(l_source_jrad_doc)||'_'||TO_CHAR(l_copy_nbr);
18709
18710 l_target_jrad_doc := REPLACE(l_target_jrad_doc,'_'||TO_CHAR(p_source_ui_def_id)||'_',
18711 '_'||TO_CHAR(p_target_ui_def_id)||'_');
18712
18713 FOR i IN(SELECT * FROM CZ_UI_PAGES
18714 WHERE ui_def_id=p_source_ui_def_id AND
18715 page_id=p_source_ui_page_id)
18716 LOOP
18717
18718 x_new_ui_page_id := allocateId('CZ_UI_PAGES_S');
18719
18720 l_caption_text_id := copy_Intl_Text(i.caption_text_id, p_target_ui_def_id, NULL, NULL);
18721
18722 copy_UI_Rule( i.caption_rule_id, l_caption_rule_id,
18723 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18724
18725 copy_UI_Rule( i.display_condition_id, l_display_condition_id,
18726 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18727
18728 copy_UI_Rule( i.enabled_condition_id, l_enabled_condition_id,
18729 p_target_ui_def_id,x_new_ui_page_id,NULL,p_source_ui_def_id);
18730
18731 INSERT INTO CZ_UI_PAGES
18732 (
18733 PAGE_ID
18734 ,UI_DEF_ID
18735 ,PERSISTENT_NODE_ID
18736 ,JRAD_DOC
18737 ,PAGEBASE_PATH
18738 ,PAGE_SET_ID
18739 ,SPLIT_SEQ_NBR
18740 ,CAPTION_SOURCE
18741 ,CAPTION_TEXT_ID
18742 ,PERSISTENT_CAPTION_TEXT_ID
18743 ,PROPERTY_ID
18744 ,DELETED_FLAG
18745 ,SEEDED_FLAG
18746 ,PAGEBASE_EXPL_NODE_ID
18747 ,suppress_refresh_flag
18748 ,PAGE_REV_NBR
18749 ,NAME
18750 ,DESC_TEXT
18751 ,PAGE_STATUS_TEMPLATE_ID
18752 ,PAGE_STATUS_TEMPL_UIDEF_ID
18753 ,CAPTION_RULE_ID
18754 ,PAGE_STATUS_TEMPLATE_USAGE
18755 ,OUTER_TEMPLATE_USAGE
18756 ,OUTER_PAGE_TEMPLATE_ID
18757 ,OUTER_PAGE_TEMPL_UIDEF_ID
18758 ,DISPLAY_CONDITION_ID
18759 ,DISPLAY_CONDITION_COMP
18760 ,DISPLAY_CONDITION_VALUE
18761 ,ENABLED_CONDITION_ID
18762 ,ENABLED_CONDITION_COMP
18763 ,ENABLED_CONDITION_VALUE
18764 )
18765 VALUES
18766 (
18767 x_new_ui_page_id
18768 ,p_target_ui_def_id
18769 ,i.PERSISTENT_NODE_ID
18770 ,l_target_jrad_doc
18771 ,i.PAGEBASE_PATH
18772 ,NULL
18773 ,1
18774 ,i.CAPTION_SOURCE
18775 ,l_caption_text_id
18776 ,i.PERSISTENT_CAPTION_TEXT_ID
18777 ,i.PROPERTY_ID
18778 ,i.DELETED_FLAG
18779 ,i.SEEDED_FLAG
18780 ,i.PAGEBASE_EXPL_NODE_ID
18781 ,i.suppress_refresh_flag
18782 ,0
18783 ,i.NAME||'_'||TO_CHAR(l_copy_nbr)
18784 ,i.DESC_TEXT
18785 ,i.PAGE_STATUS_TEMPLATE_ID
18786 ,i.PAGE_STATUS_TEMPL_UIDEF_ID
18787 ,l_caption_rule_id
18788 ,i.PAGE_STATUS_TEMPLATE_USAGE
18789 ,i.OUTER_TEMPLATE_USAGE
18790 ,i.OUTER_PAGE_TEMPLATE_ID
18791 ,i.OUTER_PAGE_TEMPL_UIDEF_ID
18792 ,l_display_condition_id
18793 ,i.DISPLAY_CONDITION_COMP
18794 ,i.DISPLAY_CONDITION_VALUE
18795 ,l_enabled_condition_id
18796 ,i.ENABLED_CONDITION_COMP
18797 ,i.ENABLED_CONDITION_VALUE
18798 );
18799 END LOOP;
18800
18801 --
18802 -- open XML parser
18803 --
18804 Open_Parser();
18805
18806 --
18807 -- create UI Template in JRAD repository
18808 --
18809 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
18810
18811 IF xmldom.isNull(l_source_xmldoc) THEN
18812 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
18813 p_token_name => 'UI_TEMPLATE',
18814 p_token_value => l_source_jrad_doc,
18815 p_fatal_error => TRUE);
18816 RAISE WRONG_UI_TEMPLATE;
18817 END IF;
18818
18819 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
18820 p_attribute_name => G_ID_ATTRIBUTE,
18821 p_attribute_value => l_source_element_id);
18822
18823 copy_Tree_Level(p_xml_node => l_source_xml_node,
18824 p_source_ui_def_id => p_source_ui_def_id,
18825 p_target_ui_def_id => p_target_ui_def_id,
18826 p_source_ui_page_id => p_source_ui_page_id,
18827 p_target_ui_page_id => x_new_ui_page_id,
18828 p_parent_element_id => NULL,
18829 p_target_parent_element_id => NULL,
18830 p_pagebase_persistent_node_id => l_persistent_node_id,
18831 x_new_element_id => l_new_element_id,
18832 p_copy_as_ui_page => TRUE,
18833 p_source_jrad_doc => l_source_jrad_doc,
18834 p_target_jrad_doc => l_target_jrad_doc,
18835 p_amn_parent_element_id => NULL);
18836
18837 validate_Copied_PIR(p_target_ui_def_id, x_new_ui_page_id);
18838
18839 Save_Document(p_xml_doc => l_source_xmldoc,
18840 p_doc_name => l_target_jrad_doc);
18841
18842 translate_JRAD_Doc(l_target_jrad_doc);
18843
18844 --
18845 -- close XML parser
18846 --
18847 Close_Parser();
18848
18849 EXCEPTION
18850 WHEN WRONG_UI_TEMPLATE THEN
18851 x_return_status := FND_API.G_RET_STS_ERROR;
18852 x_msg_count := g_MSG_COUNT;
18853 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
18854 DEBUG(x_msg_data);
18855 WHEN OTHERS THEN
18856 x_return_status := FND_API.G_RET_STS_ERROR;
18857 x_msg_count := 1;
18858 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
18859 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_UI_Page', x_msg_data);
18860 DEBUG('copy_UI_Page() : '||x_msg_data);
18861
18862 END copy_UI_Page;
18863
18864 --
18865 -- This procedure sets/propogates deleted_flag='1' from a given
18866 -- Page Ref record specified by parameter p_page_ref_id.
18867 -- target UI pages are not deleted.
18868 --
18869 PROCEDURE copy_UI_Page_Ref(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
18870 p_source_page_ref_id IN NUMBER, -- page_ref_id of
18871 -- Menu/Page Flow link which needs
18872 -- to be deleted.
18873 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
18874 p_target_parent_page_ref_id IN NUMBER,-- new parent page ref id
18875 x_page_ref_id OUT NOCOPY NUMBER, -- template_id of
18876 -- Local UI Template which needs
18877 -- to be copied
18878 x_return_status OUT NOCOPY VARCHAR2, -- status string
18879 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
18880 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
18881 ) IS
18882 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
18883 l_page_ref_id_tbl number_tbl_type;
18884 l_parent_page_ref_id_tbl number_tbl_type;
18885 l_node_depth_tbl number_tbl_type;
18886 l_seq_nbr_tbl number_tbl_type;
18887 l_page_ref_arr_tbl number_tbl_type;
18888 l_new_page_ref_arr_tbl number_tbl_type;
18889 l_seq_nbr_arr_tbl number_tbl_type;
18890 l_node_depth_arr_tbl number_tbl_type;
18891 l_target_page_set_id NUMBER;
18892 l_current_page_ref_id NUMBER;
18893 l_new_page_ref_id NUMBER;
18894 l_new_parent_page_ref_id NUMBER;
18895
18896 l_condition_id NUMBER;
18897 l_caption_rule_id NUMBER;
18898 l_target_max_seq_nbr NUMBER;
18899 l_target_node_depth NUMBER;
18900 l_caption_text_id NUMBER;
18901 l_seq_nbr NUMBER;
18902 l_node_depth NUMBER;
18903
18904 BEGIN
18905
18906 --
18907 -- initialize FND variables/packages
18908 --
18909 Initialize(x_return_status,x_msg_count,x_msg_data);
18910
18911 SELECT page_set_id,node_depth INTO l_target_page_set_id,l_target_node_depth
18912 FROM CZ_UI_PAGE_REFS
18913 WHERE ui_def_id=p_target_ui_def_id AND page_ref_id=p_target_parent_page_ref_id;
18914
18915 SELECT NVL(MAX(seq_nbr),0) INTO l_target_max_seq_nbr FROM CZ_UI_PAGE_REFS
18916 WHERE ui_def_id=p_target_ui_def_id AND deleted_flag=G_NO_FLAG;
18917
18918 SELECT page_ref_id,parent_page_ref_id,node_depth,seq_nbr
18919 BULK COLLECT INTO l_page_ref_id_tbl,l_parent_page_ref_id_tbl,l_node_depth_tbl,l_seq_nbr_tbl
18920 FROM CZ_UI_PAGE_REFS
18921 START WITH ui_def_id=p_source_ui_def_id AND page_ref_id=p_source_page_ref_id
18922 CONNECT BY PRIOR ui_def_id=p_source_ui_def_id AND
18923 ui_def_id=p_source_ui_def_id AND
18924 PRIOR page_ref_id=parent_page_ref_id AND
18925 PRIOR deleted_flag=G_NO_FLAG AND deleted_flag=G_NO_FLAG;
18926
18927 IF l_page_ref_id_tbl.Count>0 THEN
18928 FOR i IN l_page_ref_id_tbl.First..l_page_ref_id_tbl.Last
18929 LOOP
18930 l_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := l_parent_page_ref_id_tbl(i);
18931 l_new_page_ref_arr_tbl(l_page_ref_id_tbl(i)) := get_Element_Id();
18932 l_seq_nbr_arr_tbl(l_page_ref_id_tbl(i)) := l_seq_nbr_tbl(i);
18933 l_node_depth_arr_tbl(l_page_ref_id_tbl(i)) := l_node_depth_tbl(i);
18934 END LOOP;
18935 END IF;
18936
18937 l_current_page_ref_id := l_page_ref_arr_tbl.First;
18938 LOOP
18939 IF l_current_page_ref_id IS NULL THEN
18940 EXIT;
18941 END IF;
18942
18943 l_new_page_ref_id := l_page_ref_arr_tbl(l_current_page_ref_id);
18944
18945 IF l_new_page_ref_arr_tbl.EXISTS(l_new_page_ref_id) THEN
18946 l_new_parent_page_ref_id := l_new_page_ref_arr_tbl(l_new_page_ref_id);
18947 ELSE
18948 l_new_parent_page_ref_id := p_target_parent_page_ref_id;
18949 x_page_ref_id := l_new_page_ref_id;
18950 END IF;
18951
18952 FOR i IN(SELECT * FROM CZ_UI_PAGE_REFS
18953 WHERE ui_def_id=p_source_ui_def_id AND
18954 page_ref_id=l_current_page_ref_id AND
18955 deleted_flag=G_NO_FLAG)
18956 LOOP
18957
18958 l_seq_nbr := l_target_max_seq_nbr + i.SEQ_NBR;
18959 l_node_depth := l_target_node_depth - l_node_depth_tbl(1) + 1;
18960
18961 copy_UI_Rule(i.condition_id, l_condition_id,
18962 p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
18963
18964 copy_UI_Rule(i.caption_rule_id, l_caption_rule_id,
18965 p_target_ui_def_id, i.target_page_id, NULL,p_source_ui_def_id);
18966
18967 l_caption_text_id := copy_Intl_Text(l_caption_text_id, p_target_ui_def_id,
18968 NULL, NULL);
18969
18970 INSERT INTO CZ_UI_PAGE_REFS
18971 (
18972 PAGE_SET_ID
18973 ,UI_DEF_ID
18974 ,PAGE_REF_ID
18975 ,PARENT_PAGE_REF_ID
18976 ,SEQ_NBR
18977 ,NODE_DEPTH
18978 ,PAGE_REF_TYPE
18979 ,CONDITION_ID
18980 ,NAME
18981 ,CAPTION_SOURCE
18982 ,CAPTION_TEXT_ID
18983 ,PERSISTENT_CAPTION_TEXT_ID
18984 ,PROPERTY_ID
18985 ,TARGET_PERSISTENT_NODE_ID
18986 ,TARGET_PATH
18987 ,TARGET_UI_DEF_ID
18988 ,TARGET_PAGE_SET_ID
18989 ,TARGET_PAGE_ID
18990 ,MODIFIED_FLAGS
18991 ,PATH_TO_PREV_PAGE
18992 ,PATH_TO_NEXT_PAGE
18993 ,DELETED_FLAG
18994 ,CAPTION_RULE_ID
18995 ,TARGET_EXPL_NODE_ID
18996 )
18997 VALUES
18998 (
18999 l_target_page_set_id
19000 ,p_target_ui_def_id
19001 ,l_new_page_ref_id
19002 ,l_new_parent_page_ref_id
19003 ,l_seq_nbr
19004 ,l_node_depth
19005 ,i.PAGE_REF_TYPE
19006 ,l_condition_id
19007 ,i.NAME
19008 ,i.CAPTION_SOURCE
19009 ,l_caption_text_id
19010 ,i.PERSISTENT_CAPTION_TEXT_ID
19011 ,i.PROPERTY_ID
19012 ,i.TARGET_PERSISTENT_NODE_ID
19013 ,i.TARGET_PATH
19014 ,i.TARGET_UI_DEF_ID
19015 ,i.TARGET_PAGE_SET_ID
19016 ,i.TARGET_PAGE_ID
19017 ,i.MODIFIED_FLAGS
19018 ,i.PATH_TO_PREV_PAGE
19019 ,i.PATH_TO_NEXT_PAGE
19020 ,i.DELETED_FLAG
19021 ,l_caption_rule_id
19022 ,i.TARGET_EXPL_NODE_ID
19023 );
19024
19025 END LOOP;
19026
19027 l_current_page_ref_id := l_page_ref_arr_tbl.NEXT(l_current_page_ref_id);
19028 END LOOP;
19029
19030 EXCEPTION
19031 WHEN OTHERS THEN
19032 x_return_status := FND_API.G_RET_STS_ERROR;
19033 x_msg_count := 1;
19034 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19035 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'delete_UI_Subtree', x_msg_data);
19036 DEBUG('copy_UI_Page_Ref() : '||x_msg_data);
19037 END copy_UI_Page_Ref;
19038
19039 --
19040 -- This procedure creates copies of the Local Template record and its corresponding XML Jrad document. In addition, it also
19041 -- parses the source jrad document for any caption intl_text_ids or condition rule Ids and creates copies
19042 -- the Intl_text and Rule records which have seeded_flag='0'.
19043 -- the UI Elements. The Elements could also have Associated with them which need to be copied and refered in the new copy.
19044 --
19045 PROCEDURE copy_Local_Template(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
19046 p_source_template_id IN NUMBER, -- template_id of
19047 -- Local UI Template which needs
19048 -- to be copied
19049 p_target_ui_def_id IN NUMBER, -- ui_def_id of target UI
19050 x_new_template_id OUT NOCOPY NUMBER, -- template_id of
19051 -- Local UI Template which needs
19052 -- to be copied
19053 x_return_status OUT NOCOPY VARCHAR2,-- status string
19054 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19055 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19056 ) IS
19057 l_source_template_xmldoc xmldom.DOMDocument;
19058 l_template_root_xml_node xmldom.DOMNode;
19059 l_xml_node xmldom.DOMNode;
19060 l_child_nodes_tbl xmldom.DOMNodeList;
19061 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19062 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19063 l_length NUMBER;
19064 l_needs_to_be_unlocked BOOLEAN;
19065
19066 BEGIN
19067
19068 --
19069 -- lock source UI Template
19070 --
19071 lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19072
19073 --
19074 -- initialize FND variables/packages
19075 --
19076 Initialize(x_return_status,x_msg_count,x_msg_data);
19077
19078 SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
19079 WHERE ui_def_id=p_source_ui_def_id AND template_id=p_source_template_id;
19080
19081 --
19082 -- open XML parser
19083 --
19084 Open_Parser();
19085
19086 --
19087 -- create UI Template in JRAD repository
19088 --
19089 l_source_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19090
19091 IF xmldom.isNull(l_source_template_xmldoc) THEN
19092 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19093 p_token_name => 'UI_TEMPLATE',
19094 p_token_value => l_source_jrad_doc,
19095 p_fatal_error => TRUE);
19096 RAISE WRONG_UI_TEMPLATE;
19097 END IF;
19098
19099 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_source_template_xmldoc));
19100
19101 l_child_nodes_tbl := xmldom.getElementsByTagName(l_source_template_xmldoc, '*');
19102 l_length := xmldom.getLength(l_child_nodes_tbl);
19103 IF (l_length > 0) THEN
19104 FOR k IN 0..l_length-1
19105 LOOP
19106 --
19107 -- get next child DOM node
19108 --
19109 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19110 IF k > 0 THEN
19111 --
19112 -- create a new copies for corresponding entities ( captions, rules ,... )
19113 --
19114 copy_Node_Related_Entities(p_ui_def_id => p_source_ui_def_id,
19115 p_ui_page_id => NULL,
19116 p_xml_node => l_xml_node,
19117 p_target_ui_def_id => p_target_ui_def_id);
19118 END IF;
19119 END LOOP;
19120 END IF;
19121
19122 l_target_jrad_doc := '/oracle/apps/cz/runtime/oa/webui/regions/ui' ||
19123 TO_CHAR(p_target_ui_def_id) || '/' ||
19124 get_Short_JRAD_Name(l_source_jrad_doc);
19125
19126 Save_Document(p_xml_doc => l_source_template_xmldoc,
19127 p_doc_name => l_target_jrad_doc);
19128
19129 translate_JRAD_Doc(l_target_jrad_doc);
19130
19131 --
19132 -- close XML parser
19133 --
19134 Close_Parser();
19135
19136 x_new_template_id := allocateId('CZ_UI_TEMPLATES_S');
19137
19138 INSERT INTO CZ_UI_TEMPLATES
19139 (TEMPLATE_ID,
19140 UI_DEF_ID,
19141 TEMPLATE_NAME,
19142 TEMPLATE_TYPE,
19143 TEMPLATE_DESC,
19144 PARENT_CONTAINER_TYPE,
19145 JRAD_DOC,
19146 BUTTON_BAR_TEMPLATE_ID,
19147 MESSAGE_TYPE,
19148 MAIN_MESSAGE_ID,
19149 TITLE_ID,
19150 SEEDED_FLAG,
19151 LAYOUT_UI_STYLE,
19152 ROOT_REGION_TYPE,
19153 ROOT_ELEMENT_SIGNATURE_ID,
19154 TEMPLATE_REV_NBR,
19155 TEMPLATE_USAGE,
19156 AMN_USAGE,
19157 DELETED_FLAG)
19158 SELECT
19159 x_new_template_id ,
19160 p_target_ui_def_id,
19161 TEMPLATE_NAME,
19162 TEMPLATE_TYPE,
19163 TEMPLATE_DESC,
19164 PARENT_CONTAINER_TYPE,
19165 l_target_jrad_doc,
19166 BUTTON_BAR_TEMPLATE_ID,
19167 MESSAGE_TYPE,
19168 MAIN_MESSAGE_ID,
19169 TITLE_ID,
19170 G_NO_FLAG,
19171 LAYOUT_UI_STYLE,
19172 ROOT_REGION_TYPE,
19173 ROOT_ELEMENT_SIGNATURE_ID,
19174 TEMPLATE_REV_NBR,
19175 TEMPLATE_USAGE,
19176 AMN_USAGE,
19177 G_NO_FLAG
19178 FROM CZ_UI_TEMPLATES
19179 WHERE ui_def_id=p_source_ui_def_id AND
19180 template_id=p_source_template_id;
19181
19182 INSERT INTO CZ_UI_REF_TEMPLATES
19183 (
19184 TEMPLATE_ID
19185 ,REF_TEMPLATE_ID
19186 ,DELETED_FLAG
19187 ,TEMPLATE_UI_DEF_ID
19188 ,REF_TEMPLATE_UI_DEF_ID
19189 )
19190 SELECT
19191 x_new_template_id
19192 ,REF_TEMPLATE_ID
19193 ,DELETED_FLAG
19194 ,p_target_ui_def_id
19195 ,REF_TEMPLATE_UI_DEF_ID
19196 FROM CZ_UI_REF_TEMPLATES
19197 WHERE template_id=p_source_template_id AND
19198 template_ui_def_id=p_source_ui_def_id AND
19199 deleted_flag=G_NO_FLAG;
19200
19201 --
19202 -- unlock source UI Template
19203 --
19204 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19205
19206 EXCEPTION
19207 WHEN WRONG_UI_TEMPLATE THEN
19208 x_return_status := FND_API.G_RET_STS_ERROR;
19209 x_msg_count := g_MSG_COUNT;
19210 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19211 DEBUG(x_msg_data);
19212 --
19213 -- unlock source UI Template
19214 --
19215 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19216 WHEN OTHERS THEN
19217 x_return_status := FND_API.G_RET_STS_ERROR;
19218 x_msg_count := 1;
19219 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19220 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template', x_msg_data);
19221 DEBUG('copy_Local_Template() : '||x_msg_data);
19222 --
19223 -- unlock source UI Template
19224 --
19225 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19226 END copy_Local_Template;
19227
19228 --
19229 -- This procedure creates a new copy of JRAD document specified by parameter p_source_jrad_doc
19230 -- new copy will have full JRAD path = p_target_jrad_doc
19231 --
19232 PROCEDURE copy_JRAD_Document(p_source_jrad_doc IN VARCHAR2, -- specify source JRAD document that will be copied
19233 p_target_jrad_doc IN VARCHAR2, -- specify full JRAD path of new copy
19234 x_return_status OUT NOCOPY VARCHAR2,-- status string
19235 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19236 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19237 ) IS
19238
19239 l_source_xmldoc xmldom.DOMDocument;
19240
19241 BEGIN
19242
19243 --
19244 -- initialize FND variables/packages
19245 --
19246 Initialize(x_return_status,x_msg_count,x_msg_data);
19247
19248 --
19249 -- open XML parser
19250 --
19251 Open_Parser();
19252
19253 --
19254 -- create UI Template in JRAD repository
19255 --
19256 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => p_source_jrad_doc);
19257
19258 IF xmldom.isNull(l_source_xmldoc) THEN
19259 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19260 p_token_name => 'UI_TEMPLATE',
19261 p_token_value => p_source_jrad_doc,
19262 p_fatal_error => TRUE);
19263 RAISE WRONG_UI_TEMPLATE;
19264 END IF;
19265
19266 Save_Document(p_xml_doc => l_source_xmldoc,
19267 p_doc_name => p_target_jrad_doc);
19268
19269 translate_JRAD_Doc(p_target_jrad_doc);
19270
19271 --
19272 -- close XML parser
19273 --
19274 Close_Parser();
19275
19276 EXCEPTION
19277 WHEN WRONG_UI_TEMPLATE THEN
19278 x_return_status := FND_API.G_RET_STS_ERROR;
19279 x_msg_count := g_MSG_COUNT;
19280 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19281 DEBUG(x_msg_data);
19282 WHEN OTHERS THEN
19283 x_return_status := FND_API.G_RET_STS_ERROR;
19284 x_msg_count := 1;
19285 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19286 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_JRAD_Document', x_msg_data);
19287 DEBUG('copy_JRAD_Document() : '||x_msg_data);
19288 END copy_JRAD_Document;
19289
19290 --
19291 -- This procedure copies subtree of Local UI Template identified by ui_def_id=p_source_ui_def_id,
19292 -- template_id=p_source_template_id and element_id=p_source_element_id to a new place identified by
19293 -- ui_def_id=p_target_ui_def_id, template_id=p_target_template_id and
19294 -- parent_element_id=p_target_parent_element_id.
19295 --
19296 PROCEDURE copy_Local_Template_Elem(p_source_ui_def_id IN NUMBER, -- ui_def_id of UI
19297 p_source_template_id IN NUMBER, -- template_id of
19298 -- Local UI Template which needs
19299 -- to be copied
19300 p_source_element_id IN VARCHAR2,
19301 p_target_ui_def_id IN NUMBER, -- ui_def_id of UI
19302 p_target_template_id IN NUMBER, -- template_id of
19303 -- Local UI Template which needs
19304 -- to be copied
19305 p_target_parent_element_id IN VARCHAR2,
19306 x_new_element_id OUT NOCOPY VARCHAR2, -- template_id of
19307 -- Local UI Template which needs
19308 -- to be copied
19309 x_return_status OUT NOCOPY VARCHAR2,-- status string
19310 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19311 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19312 ) IS
19313
19314 l_source_xmldoc xmldom.DOMDocument;
19315 l_target_xmldoc xmldom.DOMDocument;
19316 l_source_xml_node xmldom.DOMNode;
19317 l_xml_uicont_node xmldom.DOMNode;
19318 l_xml_new_node xmldom.DOMNode;
19319 l_target_xml_node xmldom.DOMNode;
19320 l_new_xml_root_node xmldom.DOMNode;
19321 l_out_xml_node xmldom.DOMNode;
19322 l_target_uicont_xml_node xmldom.DOMNode;
19323 l_xml_temp_node xmldom.DOMNode;
19324 l_stacklayout_node xmldom.DOMNode;
19325 l_stacklayout_uicont_xml_node xmldom.DOMNode;
19326 l_source_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19327 l_target_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19328 l_needs_to_be_unlocked BOOLEAN;
19329 BEGIN
19330
19331 --
19332 -- lock source UI Template
19333 --
19334 lock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19335
19336 --
19337 -- initialize FND variables/packages
19338 --
19339 Initialize(x_return_status,x_msg_count,x_msg_data);
19340
19341 SELECT jrad_doc INTO l_source_jrad_doc FROM CZ_UI_TEMPLATES
19342 WHERE ui_def_id=p_source_ui_def_id AND
19343 template_id=p_source_template_id;
19344
19345 SELECT jrad_doc INTO l_target_jrad_doc FROM CZ_UI_TEMPLATES
19346 WHERE ui_def_id=p_target_ui_def_id AND
19347 template_id=p_target_template_id;
19348
19349 --
19350 -- open XML parser
19351 --
19352 Open_Parser();
19353
19354 --
19355 -- create UI Template in JRAD repository
19356 --
19357 l_source_xmldoc := parse_JRAD_Document(p_doc_full_name => l_source_jrad_doc);
19358
19359 IF xmldom.isNull(l_source_xmldoc) THEN
19360 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19361 p_token_name => 'UI_TEMPLATE',
19362 p_token_value => l_source_jrad_doc,
19363 p_fatal_error => TRUE);
19364 RAISE WRONG_UI_TEMPLATE;
19365 END IF;
19366
19367 --
19368 -- create UI Template in JRAD repository
19369 --
19370 l_target_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_jrad_doc);
19371
19372 IF xmldom.isNull(l_target_xmldoc) THEN
19373 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19374 p_token_name => 'UI_TEMPLATE',
19375 p_token_value => l_target_jrad_doc,
19376 p_fatal_error => TRUE);
19377 RAISE WRONG_UI_TEMPLATE;
19378 END IF;
19379
19380 l_source_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_source_xmldoc,
19381 p_attribute_name => G_ID_ATTRIBUTE,
19382 p_attribute_value => p_source_element_id);
19383
19384 IF p_target_parent_element_id IS NULL THEN
19385 l_target_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_target_xmldoc));
19386 ELSE
19387 l_target_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_target_xmldoc,
19388 p_attribute_name => G_ID_ATTRIBUTE,
19389 p_attribute_value => p_target_parent_element_id);
19390 END IF;
19391
19392 l_target_uicont_xml_node := getUIContents(l_target_xml_node, G_YES_FLAG);
19393
19394 IF xmldom.IsNull(l_target_uicont_xml_node) THEN
19395 l_xml_temp_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19396 l_target_uicont_xml_node := xmldom.appendChild(l_target_xml_node,
19397 l_xml_temp_node);
19398 END IF;
19399
19400 --
19401 -- returns cloned DOM subtree
19402 --
19403 -- l_new_xml_root_node := xmldom.cloneNode(l_source_xml_node, TRUE);
19404 l_new_xml_root_node := cloneNode(l_source_xml_node, l_target_uicont_xml_node);
19405
19406 x_new_element_id := get_Element_Id();
19407
19408 set_Attribute(l_new_xml_root_node,
19409 G_ID_ATTRIBUTE,
19410 x_new_element_id);
19411
19412 copy_User_Attributes(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_template_id => p_source_template_id,
19416 p_target_template_id => p_target_template_id);
19417
19418 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)<>'ui:case' THEN
19419 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19420
19421 l_xml_uicont_node := xmldom.appendChild(l_target_xml_node,
19422 l_xml_new_node);
19423
19424 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19425 l_new_xml_root_node);
19426
19427 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_target_xml_node)='ui:case' THEN
19428 l_stacklayout_node := findChildXMLTag(l_target_xml_node, 'oa:stackLayout');
19429 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19430 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19431
19432 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_target_xmldoc, 'ui:contents'));
19433 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19434 l_xml_new_node);
19435
19436 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19437 l_new_xml_root_node);
19438
19439 ELSE
19440 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19441 l_new_xml_root_node);
19442 END IF;
19443
19444 ELSE
19445 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19446 l_new_xml_root_node);
19447
19448 END IF;
19449
19450 refresh_Templ_Ref_Counts(l_target_xmldoc, p_target_ui_def_id, p_target_template_id);
19451
19452 Save_Document(p_xml_doc => l_target_xmldoc,
19453 p_doc_name => l_target_jrad_doc);
19454
19455 --
19456 -- close XML parser
19457 --
19458 Close_Parser();
19459
19460 /* *** changes for build 21p *** */
19461
19462 UPDATE CZ_UI_TEMPLATES
19463 SET template_rev_nbr=NVL(template_rev_nbr,0)+1
19464 WHERE ui_def_id=p_target_ui_def_id AND template_id=p_target_template_id;
19465
19466 --
19467 -- unlock source UI Template
19468 --
19469 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19470
19471 EXCEPTION
19472 WHEN WRONG_UI_TEMPLATE THEN
19473 x_return_status := FND_API.G_RET_STS_ERROR;
19474 x_msg_count := g_MSG_COUNT;
19475 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19476 DEBUG(x_msg_data);
19477 --
19478 -- unlock source UI Template
19479 --
19480 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19481
19482 WHEN OTHERS THEN
19483 x_return_status := FND_API.G_RET_STS_ERROR;
19484 x_msg_count := 1;
19485 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19486 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'copy_Local_Template_Elem', x_msg_data);
19487 DEBUG('copy_Local_Template_Elem() : '||x_msg_data);
19488 --
19489 -- unlock source UI Template
19490 --
19491 unlock_UI_Template( p_source_template_id, p_source_ui_def_id, l_needs_to_be_unlocked );
19492
19493 END copy_Local_Template_Elem;
19494
19495 --
19496 -- create UI Region from Template
19497 --
19498 PROCEDURE create_Region_From_Template (p_ui_def_id IN NUMBER, -- ui_def_id of UI
19499 p_template_id IN NUMBER, -- template_id of
19500 -- Local UI Template which needs
19501 -- to be copied
19502 p_template_ui_def_id IN NUMBER,
19503 p_ui_page_id IN NUMBER,
19504 p_parent_element_id IN VARCHAR2, -- ui_def_id of target UI
19505 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of new UI region
19506 x_return_status OUT NOCOPY VARCHAR2,-- status string
19507 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19508 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19509 ) IS
19510
19511 l_template_xmldoc xmldom.DOMDocument;
19512 l_xmldoc xmldom.DOMDocument;
19513 l_template_root_xml_node xmldom.DOMNode;
19514 l_parent_xml_node xmldom.DOMNode;
19515 l_out_xml_node xmldom.DOMNode;
19516 l_target_uicont_xml_node xmldom.DOMNode;
19517 l_new_xml_root_node xmldom.DOMNode;
19518 l_xml_node xmldom.DOMNode;
19519
19520 l_source_xml_node xmldom.DOMNode;
19521 l_xml_uicont_node xmldom.DOMNode;
19522 l_xml_new_node xmldom.DOMNode;
19523 l_target_xml_node xmldom.DOMNode;
19524 l_stacklayout_node xmldom.DOMNode;
19525 l_stacklayout_uicont_xml_node xmldom.DOMNode;
19526
19527 l_switcher_element_id VARCHAR2(255);
19528 l_old_ui_element_id VARCHAR2(255);
19529 l_new_ui_element_id VARCHAR2(255);
19530 l_old_switcher_xml_id VARCHAR2(255);
19531 l_user_attribute3_value VARCHAR2(4000);
19532 l_switcher_casename VARCHAR2(255);
19533 l_switcher_xml_id VARCHAR2(255);
19534 l_uicase_name VARCHAR2(255);
19535 l_child_nodes_tbl xmldom.DOMNodeList;
19536 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19537 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19538 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
19539 l_attribute_value VARCHAR2(255);
19540 l_length NUMBER;
19541 l_needs_to_be_unlocked BOOLEAN;
19542
19543 BEGIN
19544
19545 --
19546 -- lock source UI Template
19547 --
19548 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19549
19550 --
19551 -- initialize FND variables/packages
19552 --
19553 Initialize(x_return_status,x_msg_count,x_msg_data);
19554
19555 set_Local_UI_Context(p_ui_def_id);
19556
19557 --
19558 -- get full JRAD path of the given UI template
19559 --
19560 SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
19561 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19562
19563 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES a
19564 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id;
19565
19566
19567 --
19568 -- open XML parser
19569 --
19570 Open_Parser();
19571
19572 --
19573 -- create UI Template in JRAD repository
19574 --
19575 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
19576
19577 IF xmldom.isNull(l_template_xmldoc) THEN
19578 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19579 p_token_name => 'UI_TEMPLATE',
19580 p_token_value => l_template_jrad_doc,
19581 p_fatal_error => TRUE);
19582 RAISE WRONG_UI_TEMPLATE;
19583 END IF;
19584
19585 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
19586
19587 IF xmldom.isNull(l_xmldoc) THEN
19588 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19589 p_token_name => 'UI_TEMPLATE',
19590 p_token_value => l_jrad_doc,
19591 p_fatal_error => TRUE);
19592 RAISE WRONG_UI_TEMPLATE;
19593 END IF;
19594
19595 l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
19596 p_attribute_name => G_ID_ATTRIBUTE,
19597 p_attribute_value => p_parent_element_id);
19598
19599 l_ui_node := find_Parent_UI_Element(p_xml_node => l_parent_xml_node,
19600 p_ui_def_id => p_ui_def_id,
19601 p_ui_page_id => p_ui_page_id);
19602
19603 l_target_uicont_xml_node := getUIContents(l_parent_xml_node);
19604
19605 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
19606
19607 x_new_element_id := get_Element_Id();
19608
19609 set_Attribute(l_template_root_xml_node,
19610 G_ID_ATTRIBUTE,
19611 x_new_element_id);
19612
19613 handle_USER_ATTRIBUTE10(p_xml_root_node => l_template_root_xml_node,
19614 p_ui_def_id => p_ui_def_id,
19615 p_ui_page_id => p_ui_page_id,
19616 p_ui_element_id => x_new_element_id);
19617
19618 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
19619 l_length := xmldom.getLength(l_child_nodes_tbl);
19620 IF (l_length > 0) THEN
19621 FOR k IN 0..l_length-1
19622 LOOP
19623 --
19624 -- get next child DOM node
19625 --
19626 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19627
19628 handle_UI_CASE_Id(l_xml_node);
19629
19630 IF k > 0 THEN
19631 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
19632
19633 /*
19634 IF l_attribute_value IS NOT NULL THEN
19635 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,l_attribute_value||'_'||x_new_element_id);
19636 --
19637 -- create a new copies for corresponding entities ( captions, rules ,... )
19638 --
19639 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
19640 p_ui_page_id => p_ui_page_id,
19641 p_xml_node => l_xml_node);
19642 */
19643 l_parent_xml_node := xmldom.getParentNode(l_xml_node);
19644 IF l_attribute_value IS NOT NULL THEN
19645 --l_parent_xml_node := xmldom.getParentNode(l_xml_node);
19646
19647 IF xmldom.getNodeName(l_xml_node)='ui:case' OR
19648 ( NOT(xmldom.isNull(l_parent_xml_node)) AND xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
19649 xmldom.getNodeName(l_parent_xml_node)='ui:case') THEN
19650
19651 l_switcher_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:switcher');
19652
19653 l_old_ui_element_id := SUBSTR(l_attribute_value,1,INSTR(l_attribute_value, '_')-1);
19654
19655 l_new_ui_element_id := REPLACE(REPLACE(REPLACE(l_attribute_value,
19656 l_old_ui_element_id,
19657 l_switcher_element_id),'_czt','_czn'),'_czc','_czn');
19658 set_Attribute(xmldom.makeElement(l_xml_node),
19659 G_ID_ATTRIBUTE,
19660 l_new_ui_element_id);
19661
19662 IF xmldom.getNodeName(l_parent_xml_node)='oa:switcher' THEN
19663 l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
19664 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
19665 set_Attribute(xmldom.makeElement(l_xml_node),
19666 'name',
19667 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
19668 END IF;
19669 --
19670 -- if current tag is <oa:stackLayout>
19671 -- then replace old id with new one
19672 --
19673
19674 IF (xmldom.getNodeName(l_xml_node)='oa:stackLayout' AND
19675 xmldom.getNodeName(l_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL
19676 THEN
19677 set_Attribute(xmldom.makeElement(l_xml_node),
19678 G_ID_ATTRIBUTE,
19679 REPLACE(REPLACE(get_Attribute_Value(l_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
19680 END IF;
19681 ELSE
19682 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
19683 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
19684 l_old_switcher_xml_id := l_attribute_value;
19685 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
19686 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
19687 l_switcher_casename := REPLACE(l_switcher_casename,l_attribute_value, REPLACE(REPLACE(l_attribute_value,'_czt','_czn'),'_czc','_czn')||'_'||x_new_element_id);
19688 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
19689 p_cz_attribute_value => l_switcher_casename,
19690 px_xml_attribute_value => l_user_attribute3_value);
19691
19692 set_Attribute(l_xml_node,
19693 G_USER_ATTRIBUTE3_NAME,
19694 l_user_attribute3_value);
19695 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='oa:switcher'
19696 END IF; -- end of IF xmldom.getNodeName(l_xml_node)='ui:case'
19697 --
19698 -- create a new copies for corresponding entities ( captions, rules ,... )
19699 --
19700 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
19701 p_ui_page_id => p_ui_page_id,
19702 p_xml_node => l_xml_node,
19703 p_source_ui_page_id =>0,
19704 p_source_ui_def_id =>p_template_ui_def_id);
19705
19706 ELSE --of IF l_attribute_value IS NOT NULL
19707
19708 --
19709 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
19710 --
19711
19712 IF (xmldom.getNodeName(l_xml_node)='ui:case' AND xmldom.getNodeName(l_parent_xml_node)='oa:switcher')
19713 THEN
19714 l_switcher_xml_id := get_Attribute_Value(l_parent_xml_node, G_ID_ATTRIBUTE);
19715 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
19716 set_Attribute(xmldom.makeElement(l_xml_node),
19717 'name',
19718 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
19719
19720 handle_UI_CASE_Id(l_xml_node);
19721 END IF;
19722
19723 END IF; -- end of IF l_attribute_value IS NOT NULL
19724
19725 --++++++ add template references ++++++
19726 add_Extends_Refs(p_xml_node => l_xml_node,
19727 p_ui_node => l_ui_node);
19728
19729 END IF; -- end of IF k > 0
19730 END LOOP;
19731 END IF;
19732
19733 --
19734 -- returns cloned DOM subtree
19735 --
19736 -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
19737 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_target_uicont_xml_node);
19738
19739
19740 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
19741 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19742 l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
19743 l_xml_new_node);
19744 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19745 l_new_xml_root_node);
19746
19747 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
19748
19749 l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
19750 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19751 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19752
19753 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19754 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19755 l_xml_new_node);
19756 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19757 l_new_xml_root_node);
19758
19759 ELSE
19760 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19761 l_new_xml_root_node);
19762 END IF;
19763
19764 ELSE
19765 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
19766 l_new_xml_root_node);
19767
19768 END IF;
19769
19770 Save_Document(p_xml_doc => l_xmldoc,
19771 p_doc_name => l_jrad_doc);
19772
19773 --
19774 -- close XML parser
19775 --
19776 Close_Parser();
19777
19778 UPDATE CZ_UI_PAGES
19779 SET page_rev_nbr=page_rev_nbr+1
19780 WHERE ui_def_id=p_ui_def_id AND
19781 page_id=p_ui_page_id;
19782
19783 --
19784 -- unlock source UI Template
19785 --
19786 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19787
19788 EXCEPTION
19789 WHEN WRONG_UI_TEMPLATE THEN
19790 x_return_status := FND_API.G_RET_STS_ERROR;
19791 x_msg_count := g_MSG_COUNT;
19792 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
19793 DEBUG(x_msg_data);
19794 --
19795 -- unlock source UI Template
19796 --
19797 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19798
19799 WHEN OTHERS THEN
19800 x_return_status := FND_API.G_RET_STS_ERROR;
19801 x_msg_count := 1;
19802 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
19803 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'create_Region_From_Template', x_msg_data);
19804 DEBUG('create_Region_From_Template() : '||x_msg_data);
19805 --
19806 -- unlock source UI Template
19807 --
19808 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19809
19810 END create_Region_From_Template;
19811
19812 PROCEDURE add_Template_To_Template (p_template_id IN NUMBER,
19813 p_template_ui_def_id IN NUMBER,
19814 p_target_template_id IN NUMBER,
19815 p_target_template_ui_def_id IN NUMBER,
19816 p_parent_element_id IN VARCHAR2, -- ui_def_id of target UI
19817 x_new_element_id OUT NOCOPY VARCHAR2, -- element_id of new UI region
19818 x_return_status OUT NOCOPY VARCHAR2,-- status string
19819 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
19820 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
19821 ) IS
19822
19823 l_template_xmldoc xmldom.DOMDocument;
19824 l_xmldoc xmldom.DOMDocument;
19825 l_template_root_xml_node xmldom.DOMNode;
19826 l_parent_xml_node xmldom.DOMNode;
19827 l_temp_parent_xml_node xmldom.DOMNode;
19828 l_out_xml_node xmldom.DOMNode;
19829 l_target_uicont_xml_node xmldom.DOMNode;
19830 l_new_xml_root_node xmldom.DOMNode;
19831 l_xml_node xmldom.DOMNode;
19832 l_stacklayout_node xmldom.DOMNode;
19833 l_xml_new_node xmldom.DOMNode;
19834 l_xml_uicont_node xmldom.DOMNode;
19835 l_stacklayout_uicont_xml_node xmldom.DOMNode;
19836 l_xml_switcher_id VARCHAR2(255);
19837 l_switcher_element_id VARCHAR2(255);
19838 l_old_ui_element_id VARCHAR2(255);
19839 l_new_ui_element_id VARCHAR2(255);
19840 l_user_attribute3_value VARCHAR2(4000);
19841 l_switcher_casename VARCHAR2(255);
19842 l_child_nodes_tbl xmldom.DOMNodeList;
19843 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19844 l_target_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
19845 l_attribute_value VARCHAR2(255);
19846 l_length NUMBER;
19847 l_needs_to_be_unlocked BOOLEAN;
19848 BEGIN
19849
19850 --
19851 -- lock source UI Template
19852 --
19853 lock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
19854
19855 --
19856 -- initialize FND variables/packages
19857 --
19858 Initialize(x_return_status,x_msg_count,x_msg_data);
19859
19860 --
19861 -- get full JRAD path of the given UI template
19862 --
19863 SELECT jrad_doc INTO l_template_jrad_doc FROM CZ_UI_TEMPLATES
19864 WHERE ui_def_id=p_template_ui_def_id AND template_id=p_template_id;
19865
19866 SELECT jrad_doc INTO l_target_template_jrad_doc FROM CZ_UI_TEMPLATES
19867 WHERE ui_def_id=p_target_template_ui_def_id AND template_id=p_target_template_id;
19868
19869 --
19870 -- open XML parser
19871 --
19872 Open_Parser();
19873
19874 --
19875 -- create UI Template in JRAD repository
19876 --
19877 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
19878
19879 IF xmldom.isNull(l_template_xmldoc) THEN
19880 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19881 p_token_name => 'UI_TEMPLATE',
19882 p_token_value => l_template_jrad_doc,
19883 p_fatal_error => TRUE);
19884
19885 RAISE WRONG_UI_TEMPLATE;
19886 END IF;
19887
19888 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_target_template_jrad_doc);
19889
19890 IF xmldom.isNull(l_xmldoc) THEN
19891 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
19892 p_token_name => 'UI_TEMPLATE',
19893 p_token_value => l_template_jrad_doc,
19894 p_fatal_error => TRUE);
19895 RAISE WRONG_UI_TEMPLATE;
19896 END IF;
19897
19898 IF p_parent_element_id IS NULL THEN
19899 l_parent_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_xmldoc));
19900 ELSE
19901 l_parent_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
19902 p_attribute_name => G_ID_ATTRIBUTE,
19903 p_attribute_value => p_parent_element_id);
19904 END IF;
19905
19906 l_target_uicont_xml_node := getUIContents(l_parent_xml_node,G_YES_FLAG);
19907
19908 l_template_root_xml_node := xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
19909
19910 x_new_element_id := get_Element_Id();
19911
19912 l_new_ui_element_id := x_new_element_id;
19913
19914 set_Attribute(l_template_root_xml_node,
19915 G_ID_ATTRIBUTE,
19916 x_new_element_id);
19917
19918 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
19919 l_length := xmldom.getLength(l_child_nodes_tbl);
19920 IF (l_length > 0) THEN
19921 FOR k IN 0..l_length-1
19922 LOOP
19923 --
19924 -- get next child DOM node
19925 --
19926 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
19927
19928 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
19929 l_new_ui_element_id := l_attribute_value||'_'||x_new_element_id;
19930
19931 handle_Special_XMLCases(p_xml_node => l_xml_node,
19932 p_old_xml_node_id => l_attribute_value,
19933 p_new_xml_node_id => l_new_ui_element_id,
19934 p_jrad_doc => l_template_jrad_doc,
19935 px_xml_switcher_id => l_xml_switcher_id,
19936 p_inline_copy_mode => G_INLINE_COPY_TMPL);
19937
19938
19939 IF k > 0 THEN
19940
19941 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
19942
19943 IF l_user_attribute3_value IS NOT NULL THEN
19944
19945 handle_Template_Attributes
19946 (px_user_attribute_value => l_user_attribute3_value,
19947 p_new_element_id => l_new_ui_element_id,
19948 p_source_ui_def_id => p_template_ui_def_id,
19949 p_source_template_id => p_template_id,
19950 p_target_ui_def_id => p_target_template_ui_def_id,
19951 p_target_template_id => p_target_template_id,
19952 p_xml_node => l_xml_node);
19953
19954 set_Attribute(l_xml_node,
19955 G_USER_ATTRIBUTE3_NAME,
19956 l_user_attribute3_value);
19957
19958 END IF; -- end of IF l_attribute_value IS NOT NULL
19959
19960 END IF; -- end of IF k > 0
19961 END LOOP;
19962 END IF;
19963
19964 --
19965 -- remove common attributes of container and subtree
19966 --
19967 remove_TopLevel_Attributes(l_template_root_xml_node);
19968
19969
19970 --
19971 -- returns cloned DOM subtree
19972 --
19973 -- l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
19974 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_parent_xml_node);
19975
19976
19977 IF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)<>'ui:case' THEN
19978 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19979 l_xml_uicont_node := xmldom.appendChild(l_parent_xml_node,
19980 l_xml_new_node);
19981 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19982 l_new_xml_root_node);
19983 ELSIF xmldom.IsNull(l_target_uicont_xml_node) AND xmldom.getNodeName(l_parent_xml_node)='ui:case' THEN
19984 l_stacklayout_node := findChildXMLTag(l_parent_xml_node, 'oa:stackLayout');
19985 l_stacklayout_uicont_xml_node := getUIContents(l_stacklayout_node, G_YES_FLAG);
19986 IF xmldom.IsNull(l_stacklayout_uicont_xml_node) THEN
19987
19988 l_xml_new_node := xmldom.makeNode(xmldom.createElement(l_xmldoc, 'ui:contents'));
19989 l_xml_uicont_node := xmldom.appendChild(l_stacklayout_node,
19990 l_xml_new_node);
19991 l_out_xml_node := xmldom.appendChild(l_xml_uicont_node,
19992 l_new_xml_root_node);
19993
19994 ELSE
19995 l_out_xml_node := xmldom.appendChild(l_stacklayout_uicont_xml_node,
19996 l_new_xml_root_node);
19997 END IF;
19998
19999 ELSE
20000 l_out_xml_node := xmldom.appendChild(l_target_uicont_xml_node,
20001 l_new_xml_root_node);
20002 END IF;
20003
20004 refresh_Templ_Ref_Counts(l_xmldoc, p_target_template_ui_def_id, p_target_template_id);
20005
20006 Save_Document(p_xml_doc => l_xmldoc,
20007 p_doc_name => l_target_template_jrad_doc);
20008
20009 --
20010 -- close XML parser
20011 --
20012 Close_Parser();
20013
20014 UPDATE CZ_UI_TEMPLATES
20015 SET template_rev_nbr=template_rev_nbr+1
20016 WHERE template_id=p_target_template_id AND
20017 ui_def_id=p_target_template_ui_def_id;
20018
20019 --
20020 -- unlock source UI Template
20021 --
20022 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20023
20024 EXCEPTION
20025 WHEN WRONG_UI_TEMPLATE THEN
20026 x_return_status := FND_API.G_RET_STS_ERROR;
20027 x_msg_count := g_MSG_COUNT;
20028 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20029 DEBUG(x_msg_data);
20030 --
20031 -- unlock source UI Template
20032 --
20033 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20034
20035 WHEN OTHERS THEN
20036 x_return_status := FND_API.G_RET_STS_ERROR;
20037 x_msg_count := 1;
20038 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20039 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'add_Template_To_Template', x_msg_data);
20040 DEBUG('create_Region_From_Template() : '||x_msg_data);
20041 --
20042 -- unlock source UI Template
20043 --
20044 unlock_UI_Template( p_template_id, p_template_ui_def_id, l_needs_to_be_unlocked );
20045
20046 END add_Template_To_Template;
20047
20048 --
20049 -- create UI Region from Template
20050 -- This procedure works for both UI pages and UI templates
20051 -- Developer calls this procedure for converting UI template reference
20052 -- within either UI page or UI template
20053 -- If p_ui_def_id = 0 then this is a template case and template_id is passed to p_ui_page_id
20054 -- interface needs to be changed if we implement local UI templates, since the code uses ui_def_id = 0
20055 -- to tell when it is working with templates
20056 --
20057 PROCEDURE convert_Template_Reference (p_ui_def_id IN NUMBER,
20058 p_ui_page_id IN NUMBER,
20059 p_element_id IN VARCHAR2,
20060 x_return_status OUT NOCOPY VARCHAR2,-- status string
20061 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20062 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20063 ) IS
20064
20065 l_template_xmldoc xmldom.DOMDocument;
20066 l_xmldoc xmldom.DOMDocument;
20067 l_template_root_xml_node xmldom.DOMNode;
20068 l_out_xml_node xmldom.DOMNode;
20069 l_curr_parent_xml_node xmldom.DOMNode;
20070 l_new_xml_root_node xmldom.DOMNode;
20071 l_xml_node xmldom.DOMNode;
20072 l_root_xml_node xmldom.DOMNode;
20073 l_parent_xml_node xmldom.DOMNode;
20074 l_child_nodes_tbl xmldom.DOMNodeList;
20075 l_template_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20076 l_jrad_doc CZ_UI_PAGES.jrad_doc%TYPE;
20077 l_ui_node CZ_UI_PAGE_ELEMENTS%ROWTYPE;
20078 l_node_map_tbl xmldom.DOMNamedNodeMap;
20079 l_node_attr xmldom.DOMNode;
20080 l_prev_xml_node xmldom.DOMNode;
20081 l_root_attr_names_tbl varchar_tbl_type;
20082 l_root_attr_values_tbl varchar_tbl_type;
20083
20084 l_root_element_signature_id NUMBER;
20085 l_attr_value VARCHAR2(32000);
20086 l_attribute_value VARCHAR2(32000);
20087 l_user4_attribute_value VARCHAR2(32000);
20088 l_new_id_attribute VARCHAR2(32000);
20089 l_new_attribute_value VARCHAR2(32000);
20090 l_switcher_element_id VARCHAR2(4000);
20091 l_old_ui_element_id VARCHAR2(4000);
20092 l_new_ui_element_id VARCHAR2(4000);
20093 l_old_switcher_xml_id VARCHAR2(4000);
20094 l_switcher_casename VARCHAR2(4000);
20095 l_xml_node_name VARCHAR2(4000);
20096 l_switcher_xml_id VARCHAR2(4000);
20097 l_uicase_name VARCHAR2(4000);
20098 l_hgrid_element_id VARCHAR2(4000);
20099 l_ancestor_node VARCHAR2(4000);
20100 l_user_attribute3_value VARCHAR2(32000);
20101 l_extends_attribute VARCHAR2(255);
20102 l_id_attribute VARCHAR2(255);
20103 l_ref_template_id NUMBER;
20104 l_target_ref_count NUMBER;
20105 l_ref_count NUMBER;
20106 l_length NUMBER;
20107 l_index NUMBER;
20108
20109 BEGIN
20110
20111 set_Local_UI_Context(p_ui_def_id);
20112
20113 --
20114 -- initialize FND variables/packages
20115 --
20116 Initialize(x_return_status,x_msg_count,x_msg_data);
20117
20118 IF (p_ui_def_id=0) THEN
20119 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_TEMPLATES
20120 WHERE template_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
20121 ELSE
20122 SELECT jrad_doc INTO l_jrad_doc FROM CZ_UI_PAGES
20123 WHERE page_id=p_ui_page_id AND ui_def_id=p_ui_def_id;
20124
20125 END IF;
20126
20127 --
20128 -- open XML parser
20129 --
20130 Open_Parser();
20131
20132 l_xmldoc := parse_JRAD_Document(p_doc_full_name => l_jrad_doc);
20133
20134 IF xmldom.isNull(l_xmldoc) THEN
20135 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20136 p_token_name => 'UI_TEMPLATE',
20137 p_token_value => l_jrad_doc,
20138 p_fatal_error => TRUE);
20139 RAISE WRONG_UI_TEMPLATE;
20140 END IF;
20141
20142 l_root_xml_node := find_XML_Node_By_Attribute(p_subtree_doc => l_xmldoc,
20143 p_attribute_name => G_ID_ATTRIBUTE,
20144 p_attribute_value => p_element_id);
20145
20146 l_id_attribute := get_Attribute_Value(l_root_xml_node,
20147 G_ID_ATTRIBUTE);
20148
20149 IF p_ui_def_id<>0 THEN
20150
20151 l_ui_node := find_Parent_UI_Element(p_xml_node => l_root_xml_node,
20152 p_ui_def_id => p_ui_def_id,
20153 p_ui_page_id => p_ui_page_id);
20154
20155 IF l_ui_node.persistent_node_id IS NULL OR l_ui_node.persistent_node_id=0 THEN
20156 l_ui_node.element_id := l_ui_node.parent_element_id;
20157 UPDATE CZ_UI_PAGE_ELEMENTS
20158 SET deleted_flag=G_YES_FLAG
20159 WHERE ui_def_id=p_ui_def_id AND page_id=p_ui_page_id AND
20160 element_id=p_element_id;
20161 ELSE
20162 l_ui_node.element_id := p_element_id;
20163 END IF;
20164
20165 END IF;
20166
20167 l_new_id_attribute := get_Element_Id();
20168
20169 l_extends_attribute := get_Attribute_Value(l_root_xml_node,
20170 'extends');
20171 BEGIN
20172 SELECT template_id, jrad_doc, root_element_signature_id
20173 INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id
20174 FROM CZ_UI_TEMPLATES
20175 WHERE ui_def_id=p_ui_def_id AND jrad_doc=l_extends_attribute AND
20176 deleted_flag=G_NO_FLAG;
20177 EXCEPTION
20178 WHEN NO_DATA_FOUND THEN
20179 SELECT template_id, jrad_doc, root_element_signature_id
20180 INTO l_ref_template_id, l_template_jrad_doc, l_root_element_signature_id FROM CZ_UI_TEMPLATES
20181 WHERE ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID AND
20182 jrad_doc=l_extends_attribute AND
20183 deleted_flag=G_NO_FLAG;
20184 END;
20185
20186
20187 IF p_ui_def_id = 0 THEN
20188 SELECT ref_count
20189 INTO l_ref_count
20190 FROM CZ_UI_REF_TEMPLATES
20191 WHERE template_id=p_ui_page_id AND
20192 ref_template_id=l_ref_template_id AND
20193 deleted_flag=G_NO_FLAG;
20194
20195 IF l_ref_count=1 THEN
20196 DELETE FROM CZ_UI_REF_TEMPLATES
20197 WHERE template_id=p_ui_page_id AND
20198 ref_template_id=l_ref_template_id AND
20199 deleted_flag=G_NO_FLAG;
20200 ELSIF l_ref_count>1 THEN
20201 UPDATE CZ_UI_REF_TEMPLATES
20202 SET ref_count = ref_count-1
20203 WHERE template_id=p_ui_page_id AND
20204 ref_template_id=l_ref_template_id AND
20205 deleted_flag=G_NO_FLAG;
20206 END IF;
20207
20208 FOR reft IN (SELECT * FROM CZ_UI_REF_TEMPLATES
20209 WHERE template_id=l_ref_template_id AND
20210 deleted_flag=G_NO_FLAG)
20211 LOOP
20212
20213 SELECT NVL(MAX(ref_count),0) INTO l_target_ref_count FROM CZ_UI_REF_TEMPLATES
20214 WHERE template_id=p_ui_page_id AND
20215 ref_template_id=reft.ref_template_id AND
20216 deleted_flag=G_NO_FLAG;
20217
20218 IF l_target_ref_count=0 THEN
20219
20220 INSERT INTO CZ_UI_REF_TEMPLATES
20221 (
20222 TEMPLATE_ID
20223 ,REF_TEMPLATE_ID
20224 ,DELETED_FLAG
20225 ,TEMPLATE_UI_DEF_ID
20226 ,REF_TEMPLATE_UI_DEF_ID
20227 ,SEEDED_FLAG
20228 ,REF_TEMPL_SEEDED_FLAG
20229 ,REF_COUNT
20230 )
20231 VALUES
20232 (
20233 p_ui_page_id
20234 ,reft.ref_template_id
20235 ,G_NO_FLAG
20236 ,p_ui_def_id
20237 ,reft.REF_TEMPLATE_UI_DEF_ID
20238 ,G_NO_FLAG
20239 ,reft.REF_TEMPL_SEEDED_FLAG
20240 ,reft.ref_count
20241 );
20242
20243 ELSE
20244
20245 UPDATE CZ_UI_REF_TEMPLATES
20246 SET ref_count=ref_count+l_target_ref_count
20247 WHERE template_id=p_ui_page_id AND
20248 ref_template_id=reft.ref_template_id AND
20249 deleted_flag=G_NO_FLAG;
20250
20251 END IF;
20252
20253 END LOOP;
20254
20255 END IF;
20256
20257
20258 l_template_xmldoc := parse_JRAD_Document(p_doc_full_name => l_template_jrad_doc);
20259
20260 IF xmldom.isNull(l_template_xmldoc) THEN
20261 add_Error_Message(p_message_name => 'CZ_WRONG_UI_TEMPLATE',
20262 p_token_name => 'UI_TEMPLATE',
20263 p_token_value => l_template_jrad_doc,
20264 p_fatal_error => TRUE);
20265 RAISE WRONG_UI_TEMPLATE;
20266 END IF;
20267
20268 l_parent_xml_node := xmldom.getParentNode(l_root_xml_node);
20269 l_prev_xml_node := xmldom.getNextSibling(l_root_xml_node);
20270
20271 l_template_root_xml_node :=xmldom.makeNode(xmldom.getDocumentElement(l_template_xmldoc));
20272
20273 l_node_map_tbl := xmldom.getAttributes(l_root_xml_node);
20274 IF (xmldom.isNull(l_node_map_tbl) = FALSE) THEN
20275 l_length := xmldom.getLength(l_node_map_tbl);
20276 --
20277 -- loop through attributes
20278 --
20279 FOR i IN 0 .. l_length - 1
20280 LOOP
20281 l_node_attr := xmldom.item(l_node_map_tbl, i);
20282 IF xmldom.getNodeName(l_node_attr) <> 'extends' THEN
20283 l_index := l_root_attr_names_tbl.COUNT + 1;
20284 l_root_attr_names_tbl(l_index) := xmldom.getNodeName(l_node_attr);
20285 l_root_attr_values_tbl(l_index):= xmldom.getNodeValue(l_node_attr);
20286 END IF;
20287 END LOOP;
20288 END IF;
20289
20290 l_child_nodes_tbl := xmldom.getElementsByTagName(l_template_xmldoc, '*');
20291 l_length := xmldom.getLength(l_child_nodes_tbl);
20292 IF (l_length > 0) THEN
20293 FOR k IN 0..l_length-1
20294 LOOP
20295 --
20296 -- get next child DOM node
20297 --
20298 l_xml_node := xmldom.item(l_child_nodes_tbl, k);
20299 l_curr_parent_xml_node := xmldom.getParentNode(l_xml_node);
20300
20301 IF k > 0 THEN
20302
20303 l_xml_node_name := xmldom.getNodeName(l_xml_node);
20304
20305 l_attribute_value := get_Attribute_Value(l_xml_node, G_ID_ATTRIBUTE);
20306
20307 IF l_attribute_value IS NOT NULL THEN --???
20308 l_new_attribute_value := handle_JRAD_Id(l_attribute_value,l_new_id_attribute);
20309 set_Attribute(xmldom.makeElement(l_xml_node),G_ID_ATTRIBUTE,REPLACE(REPLACE(l_new_attribute_value,'_czt','_czn'),'_czc','_czn'));
20310 END IF;
20311
20312 l_ancestor_node := get_Attribute_Value(l_xml_node,
20313 'ancestorNode');
20314 IF l_ancestor_node IS NOT NULL THEN
20315
20316 l_hgrid_element_id := find_Element_Id_Of_XMLTag(l_xml_node, 'oa:tree');
20317 IF NOT(xmldom.IsNull(l_xml_node)) THEN
20318 l_ancestor_node := l_jrad_doc||'.'||l_hgrid_element_id;
20319
20320 set_Attribute(l_xml_node,
20321 'ancestorNode',
20322 l_ancestor_node);
20323 END IF;
20324 END IF;
20325
20326 --
20327 -- set value of user attribute "switcherDefaultCaseName" to new jrad id of <oa:switcher>
20328 --
20329 IF xmldom.getNodeName(l_xml_node)='oa:switcher' THEN
20330 l_old_switcher_xml_id := l_attribute_value;
20331 l_user_attribute3_value := get_Attribute_Value(l_xml_node, G_USER_ATTRIBUTE3_NAME);
20332 l_switcher_casename := get_User_Attribute(l_user_attribute3_value ,'switcherDefaultCaseName');
20333 l_switcher_casename := REPLACE(REPLACE(REPLACE(l_switcher_casename,l_attribute_value, l_new_attribute_value),'_czt','_czn'),'_czc','_czn');
20334 set_User_Attribute(p_cz_attribute_name => 'switcherDefaultCaseName',
20335 p_cz_attribute_value => l_switcher_casename,
20336 px_xml_attribute_value => l_user_attribute3_value);
20337
20338 set_Attribute(l_xml_node,
20339 G_USER_ATTRIBUTE3_NAME,
20340 l_user_attribute3_value);
20341 END IF;
20342
20343 --
20344 -- set value of attribute "name" of <ui:case> to id of parent <oa:switcher>
20345 --
20346 IF (l_xml_node_name='ui:case' AND xmldom.getNodeName(l_curr_parent_xml_node)='oa:switcher') THEN
20347 l_switcher_xml_id := get_Attribute_Value(l_curr_parent_xml_node, G_ID_ATTRIBUTE);
20348 l_uicase_name := get_Attribute_Value(l_xml_node, 'name');
20349 set_Attribute(xmldom.makeElement(l_xml_node),
20350 'name',
20351 REPLACE(REPLACE(REPLACE(l_uicase_name,l_old_switcher_xml_id,l_switcher_xml_id),'_czt','_czn'),'_czc','_czn'));
20352 handle_UI_CASE_Id(l_xml_node);
20353 END IF;
20354
20355 --
20356 -- if current tag is <oa:stackLayout>
20357 -- then replace old id with new one
20358 --
20359 IF (l_xml_node_name='oa:stackLayout' AND
20360 xmldom.getNodeName(l_curr_parent_xml_node)='ui:case') AND l_attribute_value IS NOT NULL THEN
20361 set_Attribute(xmldom.makeElement(l_xml_node),
20362 G_ID_ATTRIBUTE,
20363 REPLACE(REPLACE(get_Attribute_Value(l_curr_parent_xml_node, 'name'),'_czt','_czn'),'_czc','_czn'));
20364 END IF;
20365
20366 IF l_attribute_value IS NOT NULL THEN
20367 --
20368 -- create a new copies for corresponding entities ( captions, rules ,... )
20369 --
20370 copy_Node_Related_Entities(p_ui_def_id => p_ui_def_id,
20371 p_ui_page_id => p_ui_page_id,
20372 p_xml_node => l_xml_node,
20373 p_source_ui_page_id =>0,
20374 p_source_ui_def_id =>0);
20375 END IF;
20376
20377 IF p_ui_def_id <> 0 THEN
20378 --++++++ add template references ++++++
20379 add_Extends_Refs(p_xml_node => l_xml_node,
20380 p_ui_node => l_ui_node);
20381 END IF;
20382
20383 END IF; -- end of IF k > 0 THEN
20384 END LOOP; -- end of FOR k IN 0..l_length-1
20385 END IF; -- end of IF (l_length > 0) THEN
20386
20387 l_out_xml_node:=xmldom.removeChild(l_parent_xml_node,l_root_xml_node);
20388
20389 --
20390 -- remove common attributes of container and subtree
20391 --
20392 remove_TopLevel_Attributes(l_template_root_xml_node);
20393
20394 --
20395 -- returns cloned DOM subtree
20396 --
20397 --l_new_xml_root_node := xmldom.cloneNode(l_template_root_xml_node, TRUE);
20398 l_new_xml_root_node := cloneNode(l_template_root_xml_node, l_root_xml_node);
20399
20400 l_out_xml_node := insert_before(l_parent_xml_node,l_new_xml_root_node,l_prev_xml_node);
20401
20402
20403 IF l_root_attr_names_tbl.COUNT > 0 THEN
20404 FOR i IN l_root_attr_names_tbl.First..l_root_attr_names_tbl.Last
20405 LOOP
20406 IF l_root_attr_names_tbl(i)=G_USER_ATTRIBUTE4_NAME THEN
20407 l_user4_attribute_value := l_root_attr_values_tbl(i);
20408 set_User_Attribute(p_cz_attribute_name => 'elementType',
20409 p_cz_attribute_value => l_root_element_signature_id,
20410 px_xml_attribute_value => l_user4_attribute_value);
20411 set_Attribute(l_out_xml_node, G_USER_ATTRIBUTE4_NAME, l_user4_attribute_value);
20412 ELSE
20413 set_Attribute(l_out_xml_node, l_root_attr_names_tbl(i), l_root_attr_values_tbl(i));
20414 END IF;
20415
20416 END LOOP;
20417 END IF;
20418
20419 handle_USER_ATTRIBUTE10(p_xml_root_node => l_out_xml_node,
20420 p_ui_def_id => p_ui_def_id,
20421 p_ui_page_id => p_ui_page_id,
20422 p_ui_element_id => p_element_id);
20423
20424
20425 IF p_ui_def_id=0 THEN
20426 refresh_Templ_Ref_Counts(l_xmldoc, 0, p_ui_page_id);
20427 END IF;
20428
20429 Save_Document(p_xml_doc => l_xmldoc,
20430 p_doc_name => l_jrad_doc);
20431
20432 --
20433 -- close XML parser
20434 --
20435 Close_Parser();
20436
20437 if (p_ui_def_id=0)
20438 then
20439 UPDATE CZ_UI_TEMPLATES
20440 SET TEMPLATE_REV_NBR=TEMPLATE_REV_NBR+1
20441 WHERE ui_def_id=p_ui_def_id AND
20442 template_id=p_ui_page_id;
20443 else
20444 UPDATE CZ_UI_PAGES
20445 SET page_rev_nbr=page_rev_nbr+1
20446 WHERE ui_def_id=p_ui_def_id AND
20447 page_id=p_ui_page_id;
20448 end if;
20449
20450 EXCEPTION
20451 WHEN WRONG_UI_TEMPLATE THEN
20452 x_return_status := FND_API.G_RET_STS_ERROR;
20453 x_msg_count := g_MSG_COUNT;
20454 x_msg_data := fnd_msg_pub.GET(g_MSG_COUNT,fnd_api.g_false);
20455 DEBUG(x_msg_data);
20456 WHEN OTHERS THEN
20457 x_return_status := FND_API.G_RET_STS_ERROR;
20458 x_msg_count := 1;
20459 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20460 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'convert_Template_Reference', x_msg_data);
20461 DEBUG('convert_Template_Reference() : '||x_msg_data);
20462 END convert_Template_Reference;
20463
20464 --
20465 -- check UI condition
20466 --
20467 PROCEDURE validate_UI_Condition(p_ui_def_id IN NUMBER,
20468 p_rule_id IN NUMBER,
20469 p_rule_type IN NUMBER,
20470 p_page_id IN NUMBER,
20471 p_element_id IN VARCHAR2,
20472 p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
20473
20474 l_element_path VARCHAR2(32000);
20475 l_run_id NUMBER;
20476
20477 BEGIN
20478
20479 CZ_DEVELOPER_UTILS_PVT.verify_special_rule(p_rule_id => p_rule_id,
20480 p_name => NULL,
20481 x_run_id => l_run_id);
20482
20483 IF l_run_id > 0 THEN
20484 l_element_path := get_Element_XML_Path(p_ui_def_id => p_ui_def_id,
20485 p_page_id => p_page_id,
20486 p_element_id => p_element_id,
20487 p_is_parser_open => p_is_parser_open);
20488
20489 IF p_rule_type=33 AND l_element_path IS NOT NULL THEN
20490 add_Error_Message(p_message_name => 'CZ_DISP_COND_DEL_ND_ERROR',
20491 p_token_name => 'UIELEMENTPATH',
20492 p_token_value => l_element_path,
20493 p_fatal_error => TRUE);
20494 ELSIF p_rule_type=34 AND l_element_path IS NOT NULL THEN
20495 add_Error_Message(p_message_name => 'CZ_ENABLED_CONDITION_ERROR',
20496 p_token_name => 'UIELEMENTPATH',
20497 p_token_value => l_element_path,
20498 p_fatal_error => TRUE);
20499 ELSE
20500 NULL;
20501 END IF;
20502
20503 END IF;
20504
20505 END validate_UI_Condition;
20506
20507 --
20508 -- check UI conditions
20509 --
20510 PROCEDURE validate_UI_Conditions(p_ui_def_id IN NUMBER,
20511 p_is_parser_open IN VARCHAR2 DEFAULT NULL) IS
20512
20513 l_element_id CZ_UI_PAGE_ELEMENTS.element_id%TYPE;
20514 l_page_id CZ_UI_PAGES.page_id%TYPE;
20515
20516 BEGIN
20517 FOR i IN(SELECT rule_id,ui_page_id,ui_page_element_id,rule_type FROM CZ_RULES a
20518 WHERE ui_def_id=p_ui_def_id AND
20519 deleted_flag=G_NO_FLAG AND disabled_flag=G_NO_FLAG)
20520 LOOP
20521
20522 BEGIN
20523
20524 IF i.ui_page_element_id IS NOT NULL AND i.ui_page_element_id<>'0' THEN
20525 SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
20526 WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
20527 element_id=i.ui_page_element_id AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE);
20528 ELSIF (i.ui_page_element_id IS NULL OR i.ui_page_element_id='0') AND
20529 (i.ui_page_id IS NOT NULL AND i.ui_page_id<>0) THEN
20530 SELECT element_id INTO l_element_id FROM CZ_UI_PAGE_ELEMENTS
20531 WHERE ui_def_id=p_ui_def_id AND page_id=i.ui_page_id AND
20532 parent_element_id IS NULL AND deleted_flag NOT IN(G_YES_FLAG,G_LIMBO_FLAG,G_MARK_TO_DELETE) AND rownum<2;
20533 SELECT page_id INTO l_page_id FROM CZ_UI_PAGES
20534 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);
20535 END IF;
20536
20537 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);
20538 EXCEPTION
20539 WHEN NO_DATA_FOUND THEN
20540 NULL; -- ignore corrupted UI rules
20541 END;
20542 END LOOP;
20543 END validate_UI_Conditions;
20544
20545 --
20546 -- update UI Reference when target ui_def_id is changed
20547 -- ( it is called by Developer )
20548 --
20549 PROCEDURE update_UI_Reference
20550 (
20551 p_ui_def_id IN NUMBER,
20552 p_ref_persistent_node_id IN NUMBER,
20553 p_new_target_ui_def_id IN NUMBER,
20554 x_return_status OUT NOCOPY VARCHAR2,-- status string
20555 x_msg_count OUT NOCOPY NUMBER, -- number of error messages
20556 x_msg_data OUT NOCOPY VARCHAR2 -- string which contains error messages
20557 ) IS
20558
20559 l_target_primary_navigation CZ_UI_DEFS.primary_navigation%TYPE;
20560 l_target_page_set_id CZ_UI_DEFS.page_set_id%TYPE;
20561 l_page_ref_id CZ_UI_PAGE_REFS.page_ref_id%TYPE;
20562 l_ref_pagebase_path CZ_UI_PAGE_REFS.target_path%TYPE;
20563 l_seq_nbr CZ_UI_PAGE_REFS.seq_nbr%TYPE;
20564 l_reference_name CZ_UI_PAGE_REFS.name%TYPE;
20565 l_ref_parent_persist_node_id NUMBER;
20566 l_ref_ps_node_id NUMBER;
20567 l_ref_parent_id NUMBER;
20568 l_page_set_type NUMBER;
20569 l_expl_node_id NUMBER;
20570 l_node_depth NUMBER;
20571 l_old_child_ui_def_id NUMBER;
20572
20573 BEGIN
20574
20575 --
20576 -- initialize FND variables/packages
20577 --
20578 Initialize(x_return_status,x_msg_count,x_msg_data);
20579
20580 --
20581 -- get primary_navigation, page_set_id of target UI
20582 --
20583 SELECT primary_navigation, page_set_id
20584 INTO l_target_primary_navigation, l_target_page_set_id
20585 FROM CZ_UI_DEFS
20586 WHERE ui_def_id=p_new_target_ui_def_id;
20587
20588 IF l_target_primary_navigation <> G_MODEL_TREE_MENU THEN
20589
20590 --
20591 -- if target primary_navigation <> G_MODEL_TREE_MENU ( Dynamic Tree Menu )
20592 -- then delete a corresponding CZ_UI_PAGE_REFS record from source UI
20593 -- ( CZ_UI_PAGE_REFS.target_persistent_node_id=p_ref_persistent_node_id )
20594 --
20595 UPDATE CZ_UI_PAGE_REFS
20596 SET deleted_flag=G_YES_FLAG
20597 WHERE ui_def_id=p_ui_def_id AND
20598 target_persistent_node_id=p_ref_persistent_node_id AND
20599 deleted_flag=G_NO_FLAG;
20600
20601 ELSE -- if target primary_navigation = G_MODEL_TREE_MENU
20602
20603 set_UI_Context(p_ui_def_id);
20604
20605 SELECT ps_node_id,parent_id,name
20606 INTO l_ref_ps_node_id,l_ref_parent_id,l_reference_name
20607 FROM CZ_PS_NODES
20608 WHERE devl_project_id=g_UI_Context.devl_project_id AND
20609 persistent_node_id=p_ref_persistent_node_id AND
20610 deleted_flag=G_NO_FLAG;
20611
20612 SELECT persistent_node_id
20613 INTO l_ref_parent_persist_node_id
20614 FROM CZ_PS_NODES
20615 WHERE ps_node_id=l_ref_parent_id AND
20616 deleted_flag=G_NO_FLAG;
20617
20618 FOR i IN(SELECT page_ref_id,node_depth,page_set_id,page_ref_type, seq_nbr
20619 FROM CZ_UI_PAGE_REFS
20620 WHERE ui_def_id=p_ui_def_id AND
20621 target_persistent_node_id=l_ref_parent_persist_node_id AND
20622 page_ref_type=G_MODEL_TREE_MENU AND
20623 deleted_flag=G_NO_FLAG)
20624 LOOP
20625 -- skip this block for Root record in split pages case to avoid data corruption
20626 IF (i.node_depth <> 0 AND i.seq_nbr <> 0) THEN
20627 --
20628 -- update target_ui_def_id and target_page_set_id
20629 --
20630 UPDATE CZ_UI_PAGE_REFS
20631 SET target_ui_def_id=p_new_target_ui_def_id,
20632 target_page_set_id=l_target_page_set_id
20633 WHERE ui_def_id=p_ui_def_id AND
20634 parent_page_ref_id=i.page_ref_id AND
20635 target_persistent_node_id=p_ref_persistent_node_id AND
20636 deleted_flag=G_NO_FLAG;
20637
20638 IF SQL%ROWCOUNT=0 THEN
20639
20640 l_page_ref_id := allocateId('CZ_UI_PAGE_REFS_S');
20641
20642 l_ref_pagebase_path := get_Page_Path(l_ref_ps_node_id, i.page_set_id);
20643
20644 SELECT NVL(MAX(seq_nbr),0)+1 INTO l_seq_nbr
20645 FROM CZ_UI_PAGE_REFS
20646 WHERE ui_def_id=p_ui_def_id AND
20647 parent_page_ref_id=i.page_ref_id AND
20648 deleted_flag=G_NO_FLAG;
20649
20650 SELECT MIN(model_ref_expl_id) INTO l_expl_node_id FROM CZ_MODEL_REF_EXPLS
20651 WHERE model_id=g_UI_Context.devl_project_id AND
20652 referring_node_id=p_ref_persistent_node_id AND
20653 deleted_flag=G_NO_FLAG;
20654
20655 INSERT INTO CZ_UI_PAGE_REFS
20656 (ui_def_id,
20657 page_set_id,
20658 page_ref_id,
20659 parent_page_ref_id,
20660 seq_nbr,
20661 node_depth,
20662 condition_id,
20663 NAME,
20664 caption_source,
20665 target_persistent_node_id,
20666 target_path,
20667 target_ui_def_id,
20668 target_page_set_id,
20669 target_page_id,
20670 modified_flags,
20671 path_to_prev_page,
20672 path_to_next_page,
20673 page_ref_type,
20674 target_expl_node_id,
20675 caption_rule_id,
20676 deleted_flag)
20677 VALUES
20678 (p_ui_def_id,
20679 i.page_set_id,
20680 l_page_ref_id,
20681 i.page_ref_id,
20682 l_seq_nbr,
20683 i.node_depth+1,
20684 NULL,
20685 l_reference_name,
20686 G_DEFAULT_CAPTION_RULE_ID,
20687 p_ref_persistent_node_id,
20688 l_ref_pagebase_path,
20689 p_new_target_ui_def_id,
20690 l_target_page_set_id,
20691 NULL,
20692 0,
20693 NULL,
20694 NULL,
20695 i.page_ref_type,
20696 l_expl_node_id,
20697 NULL,
20698 G_NO_FLAG);
20699 END IF; -- end of IF SQL%ROWCOUNT=0
20700 END IF; -- end of IF i.node_depth<>0 and i.seq_nbr<>0
20701 END LOOP;
20702
20703 END IF; -- end of IF l_target_primary_navigation <> G_MODEL_TREE_MENU
20704
20705 -- handle page include region
20706 -- Note the link to the old target child ui is still there at this point
20707 SELECT ref_ui_def_id INTO l_old_child_ui_def_id
20708 FROM cz_ui_refs
20709 WHERE ui_def_id = p_ui_def_id AND ref_persistent_node_id = p_ref_persistent_node_id;
20710
20711 UPDATE cz_ui_page_elements
20712 SET target_page_ui_def_id = NULL, target_page_id = NULL
20713 WHERE deleted_flag = '0' AND target_page_ui_def_id = l_old_child_ui_def_id AND
20714 target_page_id IN (SELECT page_id FROM cz_ui_pages
20715 WHERE ui_def_id = l_old_child_ui_def_id AND deleted_flag = '0') AND
20716 element_signature_id = G_PAGE_INCL_REGION_SIGNATURE;
20717
20718 EXCEPTION
20719 WHEN OTHERS THEN
20720 x_return_status := FND_API.G_RET_STS_ERROR;
20721 x_msg_count := 1;
20722 x_msg_data := SUBSTR(DBMS_UTILITY.format_error_backtrace,1,4000);
20723 fnd_msg_pub.add_exc_msg('CZ_UIOA_PVT', 'update_UI_Reference', x_msg_data);
20724 DEBUG('update_UI_Reference() : '||x_msg_data);
20725
20726 END update_UI_Reference;
20727
20728 ------------------------------------------------------------------------------
20729 ------------- some procedures for fast access to UI Generation ---------------
20730 ------------------------------------------------------------------------------
20731
20732 PROCEDURE cui(p_model_id IN NUMBER,
20733 p_master_template_id IN NUMBER DEFAULT NULL,
20734 p_ui_name IN VARCHAR2 DEFAULT NULL,
20735 p_description IN VARCHAR2 DEFAULT NULL,
20736 p_show_all_nodes IN VARCHAR2 DEFAULT NULL,
20737 p_create_empty_ui IN VARCHAR2 DEFAULT NULL,
20738 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
20739
20740 l_ui_context CZ_UI_DEFS%ROWTYPE;
20741 l_return_status VARCHAR2(255);
20742 l_msg_count NUMBER;
20743 l_msg_data VARCHAR2(255);
20744
20745 BEGIN
20746
20747 Initialize(l_return_status,l_msg_count,l_msg_data);
20748
20749 g_Use_Cache := FALSE;
20750
20751 --
20752 -- get UI context
20753 -- ( * also function get_UI_Context() inserts data for new UI into CZ_UI_DEFS table )
20754 --
20755 l_ui_context := create_UI_Context(p_model_id => p_model_id,
20756 p_master_template_id => p_master_template_id,
20757 p_ui_name => p_ui_name,
20758 p_description => p_description,
20759 p_show_all_nodes => p_show_all_nodes,
20760 p_create_empty_ui => p_create_empty_ui);
20761
20762 --
20763 -- generate a new UI for the current UI context
20764 --
20765 construct_UI(l_ui_context.ui_def_id, p_handling_mode);
20766
20767 DEBUG('New UI has been generated : ui_def_id = '||TO_CHAR(l_ui_context.ui_def_id));
20768
20769 END cui;
20770
20771 PROCEDURE rui(p_ui_def_id IN NUMBER,
20772 p_handling_mode IN VARCHAR2 DEFAULT NULL) IS
20773
20774 l_ui_context CZ_UI_DEFS%ROWTYPE;
20775 l_return_status VARCHAR2(255);
20776 l_msg_count NUMBER;
20777 l_msg_data VARCHAR2(255);
20778
20779 BEGIN
20780
20781 Initialize(l_return_status,l_msg_count,l_msg_data);
20782
20783 --
20784 -- get UI context
20785 --
20786 l_ui_context := get_UI_Context(p_ui_def_id => p_ui_def_id);
20787
20788 --
20789 -- refresh UI
20790 --
20791 construct_UI(p_ui_def_id, p_handling_mode);
20792
20793 DEBUG('UI has been refreshed ...');
20794
20795 END rui;
20796
20797 BEGIN
20798 DECLARE
20799 l_status VARCHAR2(255);
20800 l_industry VARCHAR2(255);
20801 l_oracle_schema VARCHAR2(255);
20802 l_ret BOOLEAN;
20803 BEGIN
20804 l_ret := FND_INSTALLATION.GET_APP_INFO(APPLICATION_SHORT_NAME => 'CZ',
20805 STATUS => l_status,
20806 INDUSTRY => l_industry,
20807 ORACLE_SCHEMA => l_oracle_schema);
20808
20809 g_UINodeINCREMENT := get_Seq_Inc('CZ_UI_PAGE_ELEMENTS_S', l_oracle_schema);
20810 g_PageRefINCREMENT := get_Seq_Inc('CZ_UI_PAGE_REFS_S', l_oracle_schema);
20811 g_PageINCREMENT := get_Seq_Inc('CZ_UI_PAGES_S', l_oracle_schema);
20812 g_PageSetINCREMENT := get_Seq_Inc('CZ_UI_PAGE_SETS_S', l_oracle_schema);
20813 g_UIActionINCREMENT := get_Seq_Inc('CZ_UI_ACTIONS_S', l_oracle_schema);
20814
20815 SELECT template_name
20816 INTO G_DRILLDOWN_TEMPLATE_NAME
20817 FROM CZ_UI_TEMPLATES
20818 WHERE template_id=G_DRILLDOWN_BUTTON_TEMPLATE_ID AND
20819 ui_def_id=G_GLOBAL_TEMPLATES_UI_DEF_ID;
20820 END;
20821
20822 END CZ_UIOA_PVT;