DBA Data[Home] [Help]

PACKAGE BODY: APPS.FF_CLIENT_ENGINE

Source


1 package body ff_client_engine as
2 /* $Header: ffcxeng.pkb 115.0 99/07/16 02:02:05 porting ship $ */
3 
4 /*---------------------------------------------------------------------------*/
5 /*-------------------------- global variables -------------------------------*/
6 /*---------------------------------------------------------------------------*/
7 /*
8  *  Need to keep the input and output data structures in global
9  *  variables.
10  */
11 g_inputs  ff_exec.inputs_t;   -- inputs and contexts.
12 g_outputs ff_exec.outputs_t;  -- the outputs.
13 
14 /*---------------------------------------------------------------------------*/
15 /*------------------ local functions and procedures -------------------------*/
16 /*---------------------------------------------------------------------------*/
17 
18 /*
19  *  Actually deals with the core business of setting
20  *  an input (or context) value.
21  *  If the p_datatype parameter is null, it does not
22  *  check the datatype of the input name - it assumes
23  *  that it is correct.
24  *  It is a private procedure.
25  */
26 procedure local_set_input
27 (
28   p_input_name   in varchar2,
29   p_input_value  in varchar2
30 ) is
31   l_count binary_integer;
32   l_found boolean := false;
33 begin
34 
35   ff_utils.entry('client:local_set_input');
36 
37   if(p_input_name is null) then
38     return; -- do not set if null.
39   end if;
40 
41   for l_count in g_inputs.first..g_inputs.last loop
42     -- Search for a match in the name.
43     if(g_inputs(l_count).name = p_input_name) then
44       g_inputs(l_count).value := p_input_value;
45       l_found := TRUE;
46       exit;  -- will only be one match.
47     end if;
48   end loop;
49 
50   -- We expect to have found the input, so check that.
51   if(not l_found) then
52     hr_utility.set_message(801, 'FFPLX03_ITEM_NOT_FOUND');
53     hr_utility.set_message_token('NAME', p_input_name);
54     hr_utility.raise_error;
55   end if;
56 
57   ff_utils.exit('client:local_set_input');
58 
59 end local_set_input;
60 
61 /*
62  *  Generic, overloaded version of the get_output procedure
63  *  called by the datatype specific versions.
64  *  If the p_return_name parameter is null, the routine
65  *  does not attempt to set a value.
66  *  If the p_datatype parameter is null, it assumes
67  *  the datatype of the input matches the expected
68  *  type.
69  */
70 procedure local_get_output
71 (
72   p_return_name  in varchar2,
73   p_return_value out varchar2
74 ) is
75   l_count binary_integer;
76   l_found boolean;
77 begin
78 
79   ff_utils.entry('client:local_get_output');
80 
81   -- Exit immediately if the return name is null.
82   if(p_return_name is null) then
83     return;
84   end if;
85 
86   for l_count in g_outputs.first..g_outputs.last loop
87     if(g_outputs(l_count).name = p_return_name) then
88       p_return_value := g_outputs(l_count).value;
89       l_found := TRUE;
90       exit; -- wil be only one match.
91     end if;
92   end loop;
93 
94   -- We expect to have found the input, so check that.
95   if(not l_found) then
96     hr_utility.set_message(801, 'FFPLX03_ITEM_NOT_FOUND');
97     hr_utility.set_message_token('NAME', p_return_name);
98     hr_utility.raise_error;
99   end if;
100 
101   ff_utils.exit('client:local_get_output');
102 
103 end local_get_output;
104 
105 
106 ---------------------------- init_formula -------------------------------------
107 /*
108   NAME
109     init_formula
110   DESCRIPTION
111     Initialises engine to allow execution of a formula.
112   NOTES
113     Calls the main formula initialisation, creating the tables.
114 */
115 
116 procedure init_formula
117 (
118    p_formula_id     in number,
119    p_effective_date in date
120 ) is
121 begin
122 
123   ff_utils.entry('client:init_formula');
124 
125   ff_exec.init_formula(p_formula_id, p_effective_date, g_inputs, g_outputs);
126 
127   ff_utils.exit('client:init_formula');
128 
129 end init_formula;
130 
131 ------------------------------- set_input -------------------------------------
132 /*
133   NAME
134     set_input
135   DESCRIPTION
136     Allows the setting of inputs or contexts to the formula.
137     One version has to be used for all three data types.
138   NOTES
139     The input with the appropriate name is searched for in the
140     inputs table and the value set.
141 */
142 
143 procedure set_input
144 (
145   p_input_name in varchar2,
146   p_value      in varchar2
147 ) is
148 begin
149   ff_utils.entry('client:set_input (varchar2)');
150 
151   -- Call the generic set_input procedure
152   local_set_input(p_input_name, p_value);
153 
154   ff_utils.exit('set_input (varchar2)');
155 
156 end set_input;
157 
158 ------------------------------ run_formula ------------------------------------
159 /*
160   NAME
161     init_formula
162   DESCRIPTION
163     Uses data structures built up to execute Fast Formula.
164   NOTES
165     Calls the main run_formula routine.
166     Always uses the db item cache.
167 */
168 
169 procedure run_formula is
170 begin
171 
172   ff_utils.entry('client:run_formula');
173 
174   ff_exec.run_formula(g_inputs, g_outputs);
175 
176   ff_utils.exit('client:run_formula');
177 
178 end run_formula;
179 
180 ------------------------------- run_id_formula --------------------------------
181 /*
182   NAME
183     run_id_formula
184   DESCRIPTION
185     This procedure is designed specifically to be called from forms,
186     in that it reduces network round trips to a minimum, i.e. it sets
187     inputs and executes the formula in one network round-trip,
188     returning values on the way back.
189 
190     This version is to be used when the caller knows the id of the
191     formula they wish to execute.
192 
193     Unfortunately, since forms PLSQL is V1 - we cannot have an
194     arbitrarily large number of parameters (using defaults) - so
195     this procedure copes with up to 5 inputs, contexts and
196     outputs.
197 
198     The clent will simply pass null values to the parameters
199     that are not needed.
200 */
201 procedure run_id_formula
202 (
203   p_formula_id     in number,
204   p_effective_date in date,
205   p_input_name01 in varchar2, p_input_value01 in varchar2,
206   p_input_name02 in varchar2, p_input_value02 in varchar2,
207   p_input_name03 in varchar2, p_input_value03 in varchar2,
208   p_input_name04 in varchar2, p_input_value04 in varchar2,
209   p_input_name05 in varchar2, p_input_value05 in varchar2,
210   p_input_name06 in varchar2, p_input_value06 in varchar2,
211   p_input_name07 in varchar2, p_input_value07 in varchar2,
212   p_input_name08 in varchar2, p_input_value08 in varchar2,
213   p_input_name09 in varchar2, p_input_value09 in varchar2,
214   p_input_name10 in varchar2, p_input_value10 in varchar2,
215 
216   p_context_name01 in varchar2, p_context_value01 in varchar2,
217   p_context_name02 in varchar2, p_context_value02 in varchar2,
218   p_context_name03 in varchar2, p_context_value03 in varchar2,
219   p_context_name04 in varchar2, p_context_value04 in varchar2,
220   p_context_name05 in varchar2, p_context_value05 in varchar2,
221   p_context_name06 in varchar2, p_context_value06 in varchar2,
222   p_context_name07 in varchar2, p_context_value07 in varchar2,
223   p_context_name08 in varchar2, p_context_value08 in varchar2,
224   p_context_name09 in varchar2, p_context_value09 in varchar2,
225   p_context_name10 in varchar2, p_context_value10 in varchar2,
226   p_context_name11 in varchar2, p_context_value11 in varchar2,
227   p_context_name12 in varchar2, p_context_value12 in varchar2,
228   p_context_name13 in varchar2, p_context_value13 in varchar2,
229   p_context_name14 in varchar2, p_context_value14 in varchar2,
230 
231   p_return_name01 in varchar2, p_return_value01  in out varchar2,
232   p_return_name02 in varchar2, p_return_value02  in out varchar2,
233   p_return_name03 in varchar2, p_return_value03  in out varchar2,
234   p_return_name04 in varchar2, p_return_value04  in out varchar2,
235   p_return_name05 in varchar2, p_return_value05  in out varchar2,
236   p_return_name06 in varchar2, p_return_value06  in out varchar2,
237   p_return_name07 in varchar2, p_return_value07  in out varchar2,
238   p_return_name08 in varchar2, p_return_value08  in out varchar2,
239   p_return_name09 in varchar2, p_return_value09  in out varchar2,
240   p_return_name10 in varchar2, p_return_value10  in out varchar2
241 ) is
242 begin
243 
244   ff_utils.entry('run_id_formula');
245 
246   -- Initialise the formula.
247   ff_exec.init_formula(p_formula_id, p_effective_date, g_inputs, g_outputs);
248 
249   -- Set the inputs.
250   local_set_input(p_input_name01, p_input_value01);
251   local_set_input(p_input_name02, p_input_value02);
252   local_set_input(p_input_name03, p_input_value03);
253   local_set_input(p_input_name04, p_input_value04);
254   local_set_input(p_input_name05, p_input_value05);
255   local_set_input(p_input_name06, p_input_value06);
256   local_set_input(p_input_name07, p_input_value07);
257   local_set_input(p_input_name08, p_input_value08);
258   local_set_input(p_input_name09, p_input_value09);
259   local_set_input(p_input_name10, p_input_value10);
260 
261   -- Set the contexts.
262   local_set_input(p_context_name01, p_context_value01);
263   local_set_input(p_context_name02, p_context_value02);
264   local_set_input(p_context_name03, p_context_value03);
265   local_set_input(p_context_name04, p_context_value04);
266   local_set_input(p_context_name05, p_context_value05);
267   local_set_input(p_context_name06, p_context_value06);
268   local_set_input(p_context_name07, p_context_value07);
269   local_set_input(p_context_name08, p_context_value08);
270   local_set_input(p_context_name09, p_context_value09);
271   local_set_input(p_context_name10, p_context_value10);
272   local_set_input(p_context_name11, p_context_value11);
273   local_set_input(p_context_name12, p_context_value12);
274   local_set_input(p_context_name13, p_context_value13);
275   local_set_input(p_context_name14, p_context_value14);
276 
277   -- Now execute the formula.
278   ff_client_engine.run_formula;
279 
280   -- Get the outputs.
281   local_get_output(p_return_name01, p_return_value01);
282   local_get_output(p_return_name02, p_return_value02);
283   local_get_output(p_return_name03, p_return_value03);
284   local_get_output(p_return_name04, p_return_value04);
285   local_get_output(p_return_name05, p_return_value05);
286   local_get_output(p_return_name06, p_return_value06);
287   local_get_output(p_return_name07, p_return_value07);
288   local_get_output(p_return_name08, p_return_value08);
289   local_get_output(p_return_name09, p_return_value09);
290   local_get_output(p_return_name10, p_return_value10);
291 
292   ff_utils.exit('run_id_formula');
293 
294 end run_id_formula;
295 
296 ------------------------------ run_name_formula -------------------------------
297 /*
298   NAME
299     run_name_formula
300   DESCRIPTION
301     This procedure is designed specifically to be called from forms,
302     in that it reduces network round trips to a minimum, i.e. it sets
303     inputs and executes the formula in one network round-trip,
304     returning values on the way back.
305 
306     This version takes formula_name and formula_type_name as a
307     convenience for users who do not know the formula_id.
308 
309     Unfortunately, since forms PLSQL is V1 - we cannot have an
310     arbitrarily large number of parameters (using defaults) - so
311     this procedure copes with up to 5 inputs, contexts and
312     outputs.
313 
314     The clent will simply pass null values to the parameters
315     that are not needed.
316 */
317 procedure run_name_formula
318 (
319   p_formula_type_name in varchar2,
320   p_formula_name      in varchar2,
321   p_effective_date    in date,
322   p_input_name01 in varchar2, p_input_value01 in varchar2,
323   p_input_name02 in varchar2, p_input_value02 in varchar2,
324   p_input_name03 in varchar2, p_input_value03 in varchar2,
325   p_input_name04 in varchar2, p_input_value04 in varchar2,
326   p_input_name05 in varchar2, p_input_value05 in varchar2,
327   p_input_name06 in varchar2, p_input_value06 in varchar2,
328   p_input_name07 in varchar2, p_input_value07 in varchar2,
329   p_input_name08 in varchar2, p_input_value08 in varchar2,
330   p_input_name09 in varchar2, p_input_value09 in varchar2,
331   p_input_name10 in varchar2, p_input_value10 in varchar2,
332 
333   p_context_name01 in varchar2, p_context_value01 in varchar2,
334   p_context_name02 in varchar2, p_context_value02 in varchar2,
335   p_context_name03 in varchar2, p_context_value03 in varchar2,
336   p_context_name04 in varchar2, p_context_value04 in varchar2,
337   p_context_name05 in varchar2, p_context_value05 in varchar2,
338   p_context_name06 in varchar2, p_context_value06 in varchar2,
339   p_context_name07 in varchar2, p_context_value07 in varchar2,
340   p_context_name08 in varchar2, p_context_value08 in varchar2,
341   p_context_name09 in varchar2, p_context_value09 in varchar2,
342   p_context_name10 in varchar2, p_context_value10 in varchar2,
343   p_context_name11 in varchar2, p_context_value11 in varchar2,
344   p_context_name12 in varchar2, p_context_value12 in varchar2,
345   p_context_name13 in varchar2, p_context_value13 in varchar2,
346   p_context_name14 in varchar2, p_context_value14 in varchar2,
347 
348   p_return_name01 in varchar2, p_return_value01  in out varchar2,
349   p_return_name02 in varchar2, p_return_value02  in out varchar2,
350   p_return_name03 in varchar2, p_return_value03  in out varchar2,
351   p_return_name04 in varchar2, p_return_value04  in out varchar2,
352   p_return_name05 in varchar2, p_return_value05  in out varchar2,
353   p_return_name06 in varchar2, p_return_value06  in out varchar2,
354   p_return_name07 in varchar2, p_return_value07  in out varchar2,
355   p_return_name08 in varchar2, p_return_value08  in out varchar2,
356   p_return_name09 in varchar2, p_return_value09  in out varchar2,
357   p_return_name10 in varchar2, p_return_value10  in out varchar2
358 ) is
359   l_formula_id number;
360 begin
361   ff_utils.entry('run_name_formula');
362 
363   -- Obtain the appropriate ids.
364   select fff.formula_id
365   into   l_formula_id
366   from   ff_formulas_f    fff,
367          ff_formula_types fft
368   where  fft.formula_type_name = p_formula_type_name
369   and    fff.formula_type_id   = fft.formula_type_id
370   and    fff.formula_name      = p_formula_name
371   and    p_effective_date between
372          fff.effective_start_date and fff.effective_end_date;
373 
374   -- Call the other version of run_formula.
375   ff_client_engine.run_id_formula
376   (
377     p_formula_id     => l_formula_id,
378     p_effective_date => p_effective_date,
379     p_input_name01   => p_input_name01,
380     p_input_value01  => p_input_value01,
381     p_input_name02   => p_input_name02,
382     p_input_value02  => p_input_value02,
383     p_input_name03   => p_input_name03,
384     p_input_value03  => p_input_value03,
385     p_input_name04   => p_input_name04,
386     p_input_value04  => p_input_value04,
387     p_input_name05   => p_input_name05,
388     p_input_value05  => p_input_value05,
389     p_input_name06   => p_input_name06,
390     p_input_value06  => p_input_value06,
391     p_input_name07   => p_input_name07,
392     p_input_value07  => p_input_value07,
393     p_input_name08   => p_input_name08,
394     p_input_value08  => p_input_value08,
398     p_input_value10  => p_input_value10,
395     p_input_name09   => p_input_name09,
396     p_input_value09  => p_input_value09,
397     p_input_name10   => p_input_name10,
399 
400     p_context_name01  => p_context_name01,
401     p_context_value01 => p_context_value01,
402     p_context_name02  => p_context_name02,
403     p_context_value02 => p_context_value02,
404     p_context_name03  => p_context_name03,
405     p_context_value03 => p_context_value03,
406     p_context_name04  => p_context_name04,
407     p_context_value04 => p_context_value04,
408     p_context_name05  => p_context_name05,
409     p_context_value05 => p_context_value05,
410     p_context_name06  => p_context_name06,
411     p_context_value06 => p_context_value06,
412     p_context_name07  => p_context_name07,
413     p_context_value07 => p_context_value07,
414     p_context_name08  => p_context_name08,
415     p_context_value08 => p_context_value08,
416     p_context_name09  => p_context_name09,
417     p_context_value09 => p_context_value09,
418     p_context_name10  => p_context_name10,
419     p_context_value10 => p_context_value10,
420     p_context_name11  => p_context_name11,
421     p_context_value11 => p_context_value11,
422     p_context_name12  => p_context_name12,
423     p_context_value12 => p_context_value12,
424     p_context_name13  => p_context_name13,
425     p_context_value13 => p_context_value13,
426     p_context_name14  => p_context_name14,
427     p_context_value14 => p_context_value14,
428 
429     p_return_name01  => p_return_name01,
430     p_return_value01 => p_return_value01,
431     p_return_name02  => p_return_name02,
432     p_return_value02 => p_return_value02,
433     p_return_name03  => p_return_name03,
434     p_return_value03 => p_return_value03,
435     p_return_name04  => p_return_name04,
436     p_return_value04 => p_return_value04,
437     p_return_name05  => p_return_name05,
438     p_return_value05 => p_return_value05,
439     p_return_name06  => p_return_name06,
440     p_return_value06 => p_return_value06,
441     p_return_name07  => p_return_name07,
442     p_return_value07 => p_return_value07,
443     p_return_name08  => p_return_name08,
444     p_return_value08 => p_return_value08,
445     p_return_name09  => p_return_name09,
446     p_return_value09 => p_return_value09,
447     p_return_name10  => p_return_name10,
448     p_return_value10 => p_return_value10
449   );
450 
451   ff_utils.exit('run_name_formula');
452 
453 end run_name_formula;
454 
455 -------------------------------- get_output -----------------------------------
456 /*
457   NAME
458     get_output
459   DESCRIPTION
460     Allows access to data returned from Fast Formula return variables.
461     This one function has to be used for all three data types.
462 */
463 
464 procedure get_output
465 (
466   p_return_name  in varchar2,
467   p_return_value out varchar2
468 ) is
469 begin
470 
471   ff_utils.entry('client:get_output (varchar2)');
472 
473   -- Call the generic get_output procedure.
474   local_get_output(p_return_name, p_return_value);
475 
476   ff_utils.exit('client:get_output (varchar2)');
477 
478 end get_output;
479 
480 end ff_client_engine;