DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_SPP_SHD

Source


1 Package Body per_spp_shd as
2 /* $Header: pespprhi.pkb 120.1.12000000.2 2007/08/30 07:19:59 ande noship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- |                     Private Global Definitions                           |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package  varchar2(33)	:= '  per_spp_shd.';  -- Global package name
9 --
10 -- ----------------------------------------------------------------------------
11 -- |------------------------< return_api_dml_status >-------------------------|
12 -- ----------------------------------------------------------------------------
13 Function return_api_dml_status Return Boolean Is
14 --
15 Begin
16   --
17   Return (nvl(g_api_dml, false));
18   --
19 End return_api_dml_status;
20 --
21 -- ----------------------------------------------------------------------------
22 -- |---------------------------< constraint_error >---------------------------|
23 -- ----------------------------------------------------------------------------
24 Procedure constraint_error
25   (p_constraint_name in all_constraints.constraint_name%TYPE
26   ) Is
27 --
28   l_proc 	varchar2(72) := g_package||'constraint_error';
29 --
30 Begin
31   --
32   If (p_constraint_name = 'PER_SPINAL_POINT_PLACEMENT_FK1') Then
33     fnd_message.set_name('PER', 'HR_289228_SPP_FK1_BUS_GROUP');
34     fnd_message.set_token('PROCEDURE', l_proc);
35     fnd_message.set_token('STEP','5');
36     fnd_message.raise_error;
37   ElsIf (p_constraint_name = 'PER_SPINAL_POINT_PLACEMENT_PK') Then
38     fnd_message.set_name('PER', 'HR_289222_SPP_PK_PLACEMENT_ID');
39     fnd_message.set_token('PROCEDURE', l_proc);
40     fnd_message.set_token('STEP','10');
41     fnd_message.raise_error;
42   ElsIf (p_constraint_name = 'PER_SPTPL_AUTO_INCREMENT_F_CHK') Then
43     fnd_message.set_name('PER', 'HR_289223_SPP_AUTO_INC_FLG_CHK');
44     fnd_message.set_token('PROCEDURE', l_proc);
45     fnd_message.set_token('STEP','15');
46     fnd_message.raise_error;
47   Else
48     fnd_message.set_name('PAY', 'HR_7877_API_INVALID_CONSTRAINT');
49     fnd_message.set_token('PROCEDURE', l_proc);
50     fnd_message.set_token('CONSTRAINT_NAME', p_constraint_name);
51     fnd_message.raise_error;
52   End If;
53   --
54 End constraint_error;
55 --
56 -- ----------------------------------------------------------------------------
57 -- |-----------------------------< api_updating >-----------------------------|
58 -- ----------------------------------------------------------------------------
59 Function api_updating
60   (p_effective_date                   in date
61   ,p_placement_id                     in number
62   ,p_object_version_number            in number
63   ) Return Boolean Is
64   --
65   -- Cursor selects the 'current' row from the HR Schema
66   --
67   Cursor C_Sel1 is
68     select
69      placement_id
70     ,effective_start_date
71     ,effective_end_date
72     ,business_group_id
73     ,assignment_id
74     ,step_id
75     ,auto_increment_flag
76     ,parent_spine_id
77     ,reason
78     ,request_id
79     ,program_application_id
80     ,program_id
81     ,program_update_date
82     ,increment_number
83     ,information1
84     ,information2
85     ,information3
86     ,information4
87     ,information5
88     ,information6
89     ,information7
90     ,information8
91     ,information9
92     ,information10
93     ,information11
94     ,information12
95     ,information13
96     ,information14
97     ,information15
98     ,information16
99     ,information17
100     ,information18
101     ,information19
102     ,information20
103     ,information21
104     ,information22
105     ,information23
106     ,information24
107     ,information25
108     ,information26
109     ,information27
110     ,information28
111     ,information29
112     ,information30
113     ,information_category
114     ,object_version_number
115     from	per_spinal_point_placements_f
116     where	placement_id = p_placement_id
117     and		p_effective_date
118     between	effective_start_date and effective_end_date;
119 --
120   l_fct_ret	boolean;
121   l_proc    	varchar2(72) := g_package|| 'api_updating';
122 --
123 Begin
124   --
125   hr_utility.set_location('Entering :'||l_proc, 5);
126   If (p_effective_date is null or
127       p_placement_id is null or
128       p_object_version_number is null) Then
129     --
130     -- One of the primary key arguments is null therefore we must
131     -- set the returning function value to false
132     --
133     l_fct_ret := false;
134   hr_utility.set_location('Entering :'||l_proc, 10);
135   Else
136     hr_utility.set_location('Entering :'||l_proc, 15);
137 
138     If (p_placement_id =
139         per_spp_shd.g_old_rec.placement_id and
140         p_object_version_number =
141         per_spp_shd.g_old_rec.object_version_number) Then
142       --
143       -- The g_old_rec is current therefore we must
144       -- set the returning function to true
145       --
146   hr_utility.set_location('Entering :'||l_proc, 20);
147       l_fct_ret := true;
148     Else
149   hr_utility.set_location('Entering :'||l_proc, 25);
150       --
151       -- Select the current row
152       --
153       Open C_Sel1;
154       Fetch C_Sel1 Into per_spp_shd.g_old_rec;
155       If C_Sel1%notfound Then
156         Close C_Sel1;
157         --
158         -- The primary key is invalid therefore we must error
159         --
160         fnd_message.set_name('PAY', 'HR_7220_INVALID_PRIMARY_KEY');
161         fnd_message.raise_error;
162       End If;
163       Close C_Sel1;
164   hr_utility.set_location('Entering :'||l_proc, 30);
165       If (p_object_version_number
166           <> per_spp_shd.g_old_rec.object_version_number) Then
167         fnd_message.set_name('PAY', 'HR_7155_OBJECT_INVALID');
168         fnd_message.raise_error;
169       End If;
170       l_fct_ret := true;
171     End If;
172   End If;
173   Return (l_fct_ret);
174 --
175 End api_updating;
176 --
177 -- ----------------------------------------------------------------------------
178 -- |---------------------------< find_dt_upd_modes >--------------------------|
179 -- ----------------------------------------------------------------------------
180 Procedure find_dt_upd_modes
181   (p_effective_date         in date
182   ,p_base_key_value         in number
183   ,p_correction             out nocopy boolean
184   ,p_update                 out nocopy boolean
185   ,p_update_override        out nocopy boolean
186   ,p_update_change_insert   out nocopy boolean
187   ) is
188 --
189   l_proc 	varchar2(72) := g_package||'find_dt_upd_modes';
190   l_grade_id	number;
191 
192   cursor csr_future_grade_scale is
193   select paa.grade_id
194   from per_all_assignments_f paa,
195        per_spinal_point_placements_f spp
196   where paa.assignment_id = spp.assignment_id
197   and spp.placement_id = p_base_key_value
198   and paa.effective_start_date > p_effective_date
199   and paa.grade_id <> (select paa1.grade_id
200 		   from per_all_assignments_f paa1
201 		   where paa1.assignment_id = paa.assignment_id
202 		   and p_effective_date between paa1.effective_start_date
203 					    and paa1.effective_end_date);
204 --
205 Begin
206   hr_utility.set_location('Entering:'||l_proc, 5);
207   --
208   -- Call the corresponding datetrack api
209   --
210   dt_api.find_dt_upd_modes
211     (p_effective_date        => p_effective_date
212     ,p_base_table_name       => 'per_spinal_point_placements_f'
213     ,p_base_key_column       => 'placement_id'
214     ,p_base_key_value        => p_base_key_value
215     ,p_correction            => p_correction
216     ,p_update                => p_update
217     ,p_update_override       => p_update_override
218     ,p_update_change_insert  => p_update_change_insert
219     );
220   --
221   -- If there is a future change of grade scales then do not allow the user
222   -- to replace future changes
223   --
224   open csr_future_grade_scale;
225   fetch csr_future_grade_scale into l_grade_id;
226 
227   if csr_future_grade_scale%found then
228     hr_utility.set_location('REMOVING UPDATE OVERRIDE',6);
229     p_update_override := false;
230   end if;
231 
232   close csr_future_grade_scale;
233 
234   hr_utility.set_location(' Leaving:'||l_proc, 10);
235 End find_dt_upd_modes;
236 --
237 -- ----------------------------------------------------------------------------
238 -- |---------------------------< find_dt_del_modes >--------------------------|
239 -- ----------------------------------------------------------------------------
240 Procedure find_dt_del_modes
241   (p_effective_date        in date
242   ,p_base_key_value        in number
243   ,p_zap                   out nocopy boolean
244   ,p_delete                out nocopy boolean
245   ,p_future_change         out nocopy boolean
246   ,p_delete_next_change    out nocopy boolean
247   ) is
248   --
249   l_proc 		varchar2(72) 	:= g_package||'find_dt_del_modes';
250   --
251   l_parent_key_value1     number;
252   l_parent_key_value2     number;
253   --
254   Cursor C_Sel1 Is
255     select
256      t.step_id
257     ,t.assignment_id
258     from   per_spinal_point_placements_f t
259     where  t.placement_id = p_base_key_value
260     and    p_effective_date
261     between t.effective_start_date and t.effective_end_date;
262   --
263 Begin
264   hr_utility.set_location('Entering:'||l_proc, 5);
265   Open C_sel1;
266   Fetch C_Sel1 Into
267      l_parent_key_value1
268     ,l_parent_key_value2;
269   If C_Sel1%NOTFOUND then
270     Close C_Sel1;
271     fnd_message.set_name('PAY', 'HR_6153_ALL_PROCEDURE_FAIL');
272      fnd_message.set_token('PROCEDURE',l_proc);
273      fnd_message.set_token('STEP','10');
274      fnd_message.raise_error;
275   End If;
276   Close C_Sel1;
277   --
278   -- Call the corresponding datetrack api
279   --
280   dt_api.find_dt_del_modes
281    (p_effective_date                => p_effective_date
282    ,p_base_table_name               => 'per_spinal_point_placements_f'
283    ,p_base_key_column               => 'placement_id'
284    ,p_base_key_value                => p_base_key_value
285    ,p_parent_table_name1            => 'per_spinal_point_steps_f'
286    ,p_parent_key_column1            => 'step_id'
287    ,p_parent_key_value1             => l_parent_key_value1
288    ,p_parent_table_name2            => 'per_all_assignments_f'
289    ,p_parent_key_column2            => 'assignment_id'
290    ,p_parent_key_value2             => l_parent_key_value2
291    ,p_zap                           => p_zap
292    ,p_delete                        => p_delete
293    ,p_future_change                 => p_future_change
294    ,p_delete_next_change            => p_delete_next_change
295    );
296   --
297   hr_utility.set_location(' Leaving:'||l_proc, 10);
298 End find_dt_del_modes;
299 --
300 -- ----------------------------------------------------------------------------
301 -- |-----------------------< upd_effective_end_date >-------------------------|
302 -- ----------------------------------------------------------------------------
303 Procedure upd_effective_end_date
304   (p_effective_date                   in date
305   ,p_base_key_value                   in number
306   ,p_new_effective_end_date           in date
307   ,p_validation_start_date            in date
308   ,p_validation_end_date              in date
309   ,p_object_version_number  out nocopy number
310   ) is
311 --
312   l_proc 		  varchar2(72) := g_package||'upd_effective_end_date';
313   l_object_version_number number;
314 --
315 Begin
316   hr_utility.set_location('Entering:'||l_proc, 5);
317   --
318   -- Because we are updating a row we must get the next object
319   -- version number.
320   --
321   l_object_version_number :=
322     dt_api.get_object_version_number
323       (p_base_table_name    => 'per_spinal_point_placements_f'
324       ,p_base_key_column    => 'placement_id'
325       ,p_base_key_value     => p_base_key_value
326       );
327   --
328   hr_utility.set_location(l_proc, 10);
329   hr_utility.set_location('PLacement_id: '||p_base_key_value,1);
330   hr_utility.set_location('Object Version Number: '||l_object_version_number,2);
331   hr_utility.set_location('Effective_Date: '||p_effective_date,3);
332   hr_utility.set_location('NEW Effective_End_Date: '||p_new_effective_end_date,4);
333   per_spp_shd.g_api_dml := true;  -- Set the api dml status
334   --
335   -- Update the specified datetrack row setting the effective
336   -- end date to the specified new effective end date.
337   --
338   update  per_spinal_point_placements_f t
339   set     t.effective_end_date    = p_new_effective_end_date
340     ,     t.object_version_number = l_object_version_number
341   where   t.placement_id        = p_base_key_value
342   and     p_effective_date
343   between t.effective_start_date and t.effective_end_date;
344   --
345   per_spp_shd.g_api_dml := false;   -- Unset the api dml status
346   p_object_version_number := l_object_version_number;
347   hr_utility.set_location(' Leaving:'||l_proc, 15);
348 --
349 Exception
350   When Others Then
351     per_spp_shd.g_api_dml := false;   -- Unset the api dml status
352     Raise;
353 --
354 End upd_effective_end_date;
355 --
356 -- ----------------------------------------------------------------------------
357 -- |---------------------------------< lck >----------------------------------|
358 -- ----------------------------------------------------------------------------
359 Procedure lck
360   (p_effective_date                   in date
361   ,p_datetrack_mode                   in varchar2
362   ,p_placement_id                     in number
363   ,p_object_version_number            in number
364   ,p_validation_start_date            out nocopy date
365   ,p_validation_end_date              out nocopy date
366   ) is
367 --
368   l_proc		  varchar2(72) := g_package||'lck';
369   l_validation_start_date date;
370   l_validation_end_date	  date;
371   l_argument		  varchar2(30);
372   -- Bug 3158554 starts here.
373   -- Additional local variables
374   l_validation_start_date1  date;
375   l_validation_start_date2  date;
376   l_validation_end_date1    date;
377   l_validation_end_date2    date;
378   l_enforce_foreign_locking boolean;
379   -- Bug 3158554 ends here.
380   --
381   -- Cursor C_Sel1 selects the current locked row as of session date
382   -- ensuring that the object version numbers match.
383   --
384   Cursor C_Sel1 is
385     select
386      placement_id
387     ,effective_start_date
388     ,effective_end_date
389     ,business_group_id
390     ,assignment_id
391     ,step_id
392     ,auto_increment_flag
393     ,parent_spine_id
394     ,reason
395     ,request_id
396     ,program_application_id
397     ,program_id
398     ,program_update_date
399     ,increment_number
400     ,information1
401     ,information2
402     ,information3
403     ,information4
404     ,information5
405     ,information6
406     ,information7
407     ,information8
408     ,information9
409     ,information10
410     ,information11
411     ,information12
412     ,information13
413     ,information14
414     ,information15
415     ,information16
416     ,information17
417     ,information18
418     ,information19
419     ,information20
420     ,information21
421     ,information22
422     ,information23
423     ,information24
424     ,information25
428     ,information29
425     ,information26
426     ,information27
427     ,information28
429     ,information30
430     ,information_category
431     ,object_version_number
432     from    per_spinal_point_placements_f
433     where   placement_id = p_placement_id
434     and	    p_effective_date
435     between effective_start_date and effective_end_date
436     for update nowait;
437   --
438   --
439   --
440 Begin
441   hr_utility.set_location('Entering:'||l_proc, 5);
442   --
443   -- Ensure that all the mandatory arguments are not null
444   --
445   hr_api.mandatory_arg_error(p_api_name       => l_proc
446                             ,p_argument       => 'effective_date'
447                             ,p_argument_value => p_effective_date
448                             );
449   hr_utility.set_location('Entering:'||l_proc, 6);
450   --
451   hr_api.mandatory_arg_error(p_api_name       => l_proc
452                             ,p_argument       => 'datetrack_mode'
453                             ,p_argument_value => p_datetrack_mode
454                             );
455   hr_utility.set_location('Entering:'||l_proc, 7);
456   --
457   hr_api.mandatory_arg_error(p_api_name       => l_proc
458                             ,p_argument       => 'placement_id'
459                             ,p_argument_value => p_placement_id
460                             );
461   hr_utility.set_location('Entering:'||l_proc, 8);
462   --
463   hr_api.mandatory_arg_error(p_api_name       => l_proc
464                             ,p_argument       => 'object_version_number'
465                             ,p_argument_value => p_object_version_number
466                             );
467   hr_utility.set_location('Entering:'||l_proc, 9);
468   --
469   -- Check to ensure the datetrack mode is not INSERT.
470   --
471   If (p_datetrack_mode <> hr_api.g_insert) then
472     --
473     -- We must select and lock the current row.
474     --
475   hr_utility.set_location('Entering:'||l_proc, 10);
476   --
477     Open  C_Sel1;
478     Fetch C_Sel1 Into per_spp_shd.g_old_rec;
479 
480     If C_Sel1%notfound then
481       Close C_Sel1;
482       --
483       -- The primary key is invalid therefore we must error
484       --
485       fnd_message.set_name('PAY', 'HR_7220_INVALID_PRIMARY_KEY');
486       fnd_message.raise_error;
487     End If;
488     Close C_Sel1;
489     If (p_object_version_number
490           <> per_spp_shd.g_old_rec.object_version_number) Then
491         fnd_message.set_name('PAY', 'HR_7155_OBJECT_INVALID');
492         fnd_message.raise_error;
493     End If;
494     --
495     -- Validate the datetrack mode mode getting the validation start
496     -- and end dates for the specified datetrack operation.
497     --
498     -- Bug 3158554 starts here.
499     --
500     -- Always perform locking for set-up data parent
501     -- tables, unless this is a Data Pump session AND
502     -- the 'PUMP_DT_ENFORCE_FOREIGN_LOCKS' switch
503     -- has been set to no.
504     if hr_pump_utils.current_session_running then
505        l_enforce_foreign_locking := hr_pump_utils.dt_enforce_foreign_locks;
506     else
507        l_enforce_foreign_locking := true;
508     end if;
509 
510     dt_api.validate_dt_mode
511       (p_effective_date          => p_effective_date
512       ,p_datetrack_mode          => p_datetrack_mode
513       ,p_base_table_name         => 'per_spinal_point_placements_f'
514       ,p_base_key_column         => 'placement_id'
515       ,p_base_key_value          => p_placement_id
516       ,p_parent_table_name1      => 'per_spinal_point_steps_f'
517       ,p_parent_key_column1      => 'step_id'
518       ,p_parent_key_value1       => per_spp_shd.g_old_rec.step_id
519      -- ,p_parent_table_name2      => 'per_all_assignments_f'
520      -- ,p_parent_key_column2      => 'assignment_id'
521      -- ,p_parent_key_value2       => per_spp_shd.g_old_rec.assignment_id
522       ,p_enforce_foreign_locking => l_enforce_foreign_locking
523       ,p_validation_start_date   => l_validation_start_date1
524       ,p_validation_end_date     => l_validation_end_date1
525       );
526    --
527    -- Always perform locking for transaction data parent tables
528    --
529    dt_api.validate_dt_mode
530       (p_effective_date          => p_effective_date
531       ,p_datetrack_mode          => p_datetrack_mode
532       ,p_base_table_name         => 'per_spinal_point_placements_f'
533       ,p_base_key_column         => 'placement_id'
534       ,p_base_key_value          => p_placement_id
535      --,p_parent_table_name1      => 'per_spinal_point_steps_f'
536      --,p_parent_key_column1      => 'step_id'
537      --,p_parent_key_value1       => per_spp_shd.g_old_rec.step_id
538       ,p_parent_table_name2      => 'per_all_assignments_f'
539       ,p_parent_key_column2      => 'assignment_id'
540       ,p_parent_key_value2       => per_spp_shd.g_old_rec.assignment_id
541       ,p_enforce_foreign_locking => true
542       ,p_validation_start_date   => l_validation_start_date2
543       ,p_validation_end_date     => l_validation_end_date2
544       );
545       --
546       -- bug 3158554 ends here.
547       --
548   Else
549     --
550     -- We are doing a datetrack 'INSERT' which is illegal within this
554     fnd_message.set_name('PAY', 'HR_6153_ALL_PROCEDURE_FAIL');
551     -- procedure therefore we must error (note: to lck on insert the
552     -- private procedure ins_lck should be called).
553     --
555     fnd_message.set_token('PROCEDURE', l_proc);
556     fnd_message.set_token('STEP','20');
557     fnd_message.raise_error;
558   End If;
559   --
560   -- Set the validation start and end date OUT arguments
561   -- taking the most restrictive replies from the two calls
562   -- to dt_api.validate_dt_mode. i.e. The latest VSD and the
563   -- earliest VED.
564   --
565   -- bug 3158554 starts here.
566   --
567   if l_validation_start_date1 > l_validation_start_date2 then
568     p_validation_start_date := l_validation_start_date1;
569   else
570     p_validation_start_date := l_validation_start_date2;
571   end if;
572 
573   if l_validation_end_date1 > l_validation_end_date2 then
574     p_validation_end_date := l_validation_end_date2;
575   else
576     p_validation_end_date := l_validation_end_date1;
577   end if;
578   -- p_validation_start_date := l_validation_start_date;
579   -- p_validation_end_date   := l_validation_end_date;
580   --
581   -- bug 3158554 ends here.
582   --
583   hr_utility.set_location(' Leaving:'||l_proc, 30);
584 --
585 -- We need to trap the ORA LOCK exception
586 --
587 Exception
588   When HR_Api.Object_Locked then
589     --
590     -- The object is locked therefore we need to supply a meaningful
591     -- error message.
592     --
593     fnd_message.set_name('PAY', 'HR_7165_OBJECT_LOCKED');
594     fnd_message.set_token('TABLE_NAME', 'per_spinal_point_placements_f');
595     fnd_message.raise_error;
596 End lck;
597 --
598 -- ----------------------------------------------------------------------------
599 -- |-----------------------------< convert_args >-----------------------------|
600 -- ----------------------------------------------------------------------------
601 Function convert_args
602   (p_placement_id                   in number
603   ,p_effective_start_date           in date
604   ,p_effective_end_date             in date
605   ,p_business_group_id              in number
606   ,p_assignment_id                  in number
607   ,p_step_id                        in number
608   ,p_auto_increment_flag            in varchar2
609   ,p_parent_spine_id                in number
610   ,p_reason                         in varchar2
611   ,p_request_id                     in number
612   ,p_program_application_id         in number
613   ,p_program_id                     in number
614   ,p_program_update_date            in date
615   ,p_increment_number               in number
616   ,p_information1                   in varchar2
617   ,p_information2                   in varchar2
618   ,p_information3                   in varchar2
619   ,p_information4                   in varchar2
620   ,p_information5                   in varchar2
621   ,p_information6                   in varchar2
622   ,p_information7                   in varchar2
623   ,p_information8                   in varchar2
624   ,p_information9                   in varchar2
625   ,p_information10                  in varchar2
626   ,p_information11                  in varchar2
627   ,p_information12                  in varchar2
628   ,p_information13                  in varchar2
629   ,p_information14                  in varchar2
630   ,p_information15                  in varchar2
631   ,p_information16                  in varchar2
632   ,p_information17                  in varchar2
633   ,p_information18                  in varchar2
634   ,p_information19                  in varchar2
635   ,p_information20                  in varchar2
636   ,p_information21                  in varchar2
637   ,p_information22                  in varchar2
638   ,p_information23                  in varchar2
639   ,p_information24                  in varchar2
640   ,p_information25                  in varchar2
641   ,p_information26                  in varchar2
642   ,p_information27                  in varchar2
643   ,p_information28                  in varchar2
644   ,p_information29                  in varchar2
645   ,p_information30                  in varchar2
646   ,p_information_category           in varchar2
647   ,p_object_version_number          in number
648   )
649   Return g_rec_type is
650 --
651   l_rec   g_rec_type;
652 --
653 Begin
654   --
655   -- Convert arguments into local l_rec structure.
656   --
657   l_rec.placement_id                     := p_placement_id;
658   l_rec.effective_start_date             := p_effective_start_date;
659   l_rec.effective_end_date               := p_effective_end_date;
660   l_rec.business_group_id                := p_business_group_id;
661   l_rec.assignment_id                    := p_assignment_id;
662   l_rec.step_id                          := p_step_id;
663   l_rec.auto_increment_flag              := p_auto_increment_flag;
664   l_rec.parent_spine_id                  := p_parent_spine_id;
665   l_rec.reason                           := p_reason;
666   l_rec.request_id                       := p_request_id;
667   l_rec.program_application_id           := p_program_application_id;
668   l_rec.program_id                       := p_program_id;
669   l_rec.program_update_date              := p_program_update_date;
673   l_rec.information2                     := p_information2;
670   l_rec.increment_number                 := p_increment_number;
671   l_rec.object_version_number            := p_object_version_number;
672   l_rec.information1                     := p_information1;
674   l_rec.information3                     := p_information3;
675   l_rec.information4                     := p_information4;
676   l_rec.information5                     := p_information5;
677   l_rec.information6                     := p_information6;
678   l_rec.information7                     := p_information7;
679   l_rec.information8                     := p_information8;
680   l_rec.information9                     := p_information9;
681   l_rec.information10                    := p_information10;
682   l_rec.information11                    := p_information11;
683   l_rec.information12                    := p_information12;
684   l_rec.information13                    := p_information13;
685   l_rec.information14                    := p_information14;
686   l_rec.information15                    := p_information15;
687   l_rec.information16                    := p_information16;
688   l_rec.information17                    := p_information17;
689   l_rec.information18                    := p_information18;
690   l_rec.information19                    := p_information19;
691   l_rec.information20                    := p_information20;
692   l_rec.information21                    := p_information21;
693   l_rec.information22                    := p_information22;
694   l_rec.information23                    := p_information23;
695   l_rec.information24                    := p_information24;
696   l_rec.information25                    := p_information25;
697   l_rec.information26                    := p_information26;
698   l_rec.information27                    := p_information27;
699   l_rec.information28                    := p_information28;
700   l_rec.information29                    := p_information29;
701   l_rec.information30                    := p_information30;
702   l_rec.information_category             := p_information_category;
703   --
704   -- Return the plsql record structure.
705   --
706   Return(l_rec);
707 --
708 End convert_args;
709 --
710 end per_spp_shd;