DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMS_TEMPLATE_ATTR_PVT_W

Source


1 package body ams_template_attr_pvt_w as
2   /* $Header: amswpatb.pls 120.1 2005/06/28 16:14 appldev ship $ */
3   rosetta_g_mistake_date date := to_date('01/01/+4713', 'MM/DD/SYYYY');
4   rosetta_g_miss_date date := to_date('01/01/-4712', 'MM/DD/SYYYY');
5 
6   -- this is to workaround the JDBC bug regarding IN DATE of value GMiss
7   function rosetta_g_miss_date_in_map(d date) return date as
8   begin
9     if d = rosetta_g_mistake_date then return fnd_api.g_miss_date; end if;
10     return d;
11   end;
12 
13   function rosetta_g_miss_num_map(n number) return number as
14     a number := fnd_api.g_miss_num;
15     b number := 0-1962.0724;
16   begin
17     if n=a then return b; end if;
18     if n=b then return a; end if;
19     return n;
20   end;
21 
22   procedure rosetta_table_copy_in_p3(t out nocopy ams_template_attr_pvt.template_attr_tbl_type, a0 JTF_NUMBER_TABLE
23     , a1 JTF_NUMBER_TABLE
24     , a2 JTF_DATE_TABLE
25     , a3 JTF_NUMBER_TABLE
26     , a4 JTF_DATE_TABLE
27     , a5 JTF_NUMBER_TABLE
28     , a6 JTF_NUMBER_TABLE
29     , a7 JTF_NUMBER_TABLE
30     , a8 JTF_NUMBER_TABLE
31     , a9 JTF_VARCHAR2_TABLE_100
32     , a10 JTF_VARCHAR2_TABLE_100
33     , a11 JTF_VARCHAR2_TABLE_100
34     , a12 JTF_VARCHAR2_TABLE_100
35     , a13 JTF_VARCHAR2_TABLE_100
36     , a14 JTF_VARCHAR2_TABLE_100
37     ) as
38     ddindx binary_integer; indx binary_integer;
39   begin
40   if a0 is not null and a0.count > 0 then
41       if a0.count > 0 then
42         indx := a0.first;
43         ddindx := 1;
44         while true loop
45           t(ddindx).template_attribute_id := rosetta_g_miss_num_map(a0(indx));
46           t(ddindx).template_id := rosetta_g_miss_num_map(a1(indx));
47           t(ddindx).last_update_date := rosetta_g_miss_date_in_map(a2(indx));
48           t(ddindx).last_updated_by := rosetta_g_miss_num_map(a3(indx));
49           t(ddindx).creation_date := rosetta_g_miss_date_in_map(a4(indx));
50           t(ddindx).created_by := rosetta_g_miss_num_map(a5(indx));
51           t(ddindx).object_version_number := rosetta_g_miss_num_map(a6(indx));
52           t(ddindx).last_update_login := rosetta_g_miss_num_map(a7(indx));
53           t(ddindx).security_group_id := rosetta_g_miss_num_map(a8(indx));
54           t(ddindx).parent_attribute_code := a9(indx);
55           t(ddindx).parent_select_all := a10(indx);
56           t(ddindx).attribute_code := a11(indx);
57           t(ddindx).default_flag := a12(indx);
58           t(ddindx).editable_flag := a13(indx);
59           t(ddindx).hide_flag := a14(indx);
60           ddindx := ddindx+1;
61           if a0.last =indx
62             then exit;
63           end if;
64           indx := a0.next(indx);
65         end loop;
66       end if;
67    end if;
68   end rosetta_table_copy_in_p3;
69   procedure rosetta_table_copy_out_p3(t ams_template_attr_pvt.template_attr_tbl_type, a0 out nocopy JTF_NUMBER_TABLE
70     , a1 out nocopy JTF_NUMBER_TABLE
71     , a2 out nocopy JTF_DATE_TABLE
72     , a3 out nocopy JTF_NUMBER_TABLE
73     , a4 out nocopy JTF_DATE_TABLE
74     , a5 out nocopy JTF_NUMBER_TABLE
75     , a6 out nocopy JTF_NUMBER_TABLE
76     , a7 out nocopy JTF_NUMBER_TABLE
77     , a8 out nocopy JTF_NUMBER_TABLE
78     , a9 out nocopy JTF_VARCHAR2_TABLE_100
79     , a10 out nocopy JTF_VARCHAR2_TABLE_100
80     , a11 out nocopy JTF_VARCHAR2_TABLE_100
81     , a12 out nocopy JTF_VARCHAR2_TABLE_100
82     , a13 out nocopy JTF_VARCHAR2_TABLE_100
83     , a14 out nocopy JTF_VARCHAR2_TABLE_100
84     ) as
85     ddindx binary_integer; indx binary_integer;
86   begin
87   if t is null or t.count = 0 then
88     a0 := JTF_NUMBER_TABLE();
89     a1 := JTF_NUMBER_TABLE();
90     a2 := JTF_DATE_TABLE();
91     a3 := JTF_NUMBER_TABLE();
92     a4 := JTF_DATE_TABLE();
93     a5 := JTF_NUMBER_TABLE();
94     a6 := JTF_NUMBER_TABLE();
95     a7 := JTF_NUMBER_TABLE();
96     a8 := JTF_NUMBER_TABLE();
97     a9 := JTF_VARCHAR2_TABLE_100();
98     a10 := JTF_VARCHAR2_TABLE_100();
99     a11 := JTF_VARCHAR2_TABLE_100();
100     a12 := JTF_VARCHAR2_TABLE_100();
101     a13 := JTF_VARCHAR2_TABLE_100();
102     a14 := JTF_VARCHAR2_TABLE_100();
103   else
104       a0 := JTF_NUMBER_TABLE();
105       a1 := JTF_NUMBER_TABLE();
106       a2 := JTF_DATE_TABLE();
107       a3 := JTF_NUMBER_TABLE();
108       a4 := JTF_DATE_TABLE();
109       a5 := JTF_NUMBER_TABLE();
110       a6 := JTF_NUMBER_TABLE();
111       a7 := JTF_NUMBER_TABLE();
112       a8 := JTF_NUMBER_TABLE();
113       a9 := JTF_VARCHAR2_TABLE_100();
114       a10 := JTF_VARCHAR2_TABLE_100();
115       a11 := JTF_VARCHAR2_TABLE_100();
116       a12 := JTF_VARCHAR2_TABLE_100();
117       a13 := JTF_VARCHAR2_TABLE_100();
118       a14 := JTF_VARCHAR2_TABLE_100();
119       if t.count > 0 then
120         a0.extend(t.count);
121         a1.extend(t.count);
122         a2.extend(t.count);
123         a3.extend(t.count);
124         a4.extend(t.count);
125         a5.extend(t.count);
126         a6.extend(t.count);
127         a7.extend(t.count);
128         a8.extend(t.count);
129         a9.extend(t.count);
130         a10.extend(t.count);
131         a11.extend(t.count);
132         a12.extend(t.count);
133         a13.extend(t.count);
134         a14.extend(t.count);
135         ddindx := t.first;
136         indx := 1;
137         while true loop
138           a0(indx) := rosetta_g_miss_num_map(t(ddindx).template_attribute_id);
139           a1(indx) := rosetta_g_miss_num_map(t(ddindx).template_id);
140           a2(indx) := t(ddindx).last_update_date;
141           a3(indx) := rosetta_g_miss_num_map(t(ddindx).last_updated_by);
142           a4(indx) := t(ddindx).creation_date;
143           a5(indx) := rosetta_g_miss_num_map(t(ddindx).created_by);
144           a6(indx) := rosetta_g_miss_num_map(t(ddindx).object_version_number);
145           a7(indx) := rosetta_g_miss_num_map(t(ddindx).last_update_login);
146           a8(indx) := rosetta_g_miss_num_map(t(ddindx).security_group_id);
147           a9(indx) := t(ddindx).parent_attribute_code;
148           a10(indx) := t(ddindx).parent_select_all;
149           a11(indx) := t(ddindx).attribute_code;
150           a12(indx) := t(ddindx).default_flag;
151           a13(indx) := t(ddindx).editable_flag;
152           a14(indx) := t(ddindx).hide_flag;
153           indx := indx+1;
154           if t.last =ddindx
155             then exit;
156           end if;
157           ddindx := t.next(ddindx);
158         end loop;
159       end if;
160    end if;
161   end rosetta_table_copy_out_p3;
162 
163   procedure create_template_attr(p_api_version_number  NUMBER
164     , p_init_msg_list  VARCHAR2
165     , p_commit  VARCHAR2
166     , p_validation_level  NUMBER
167     , x_return_status out nocopy  VARCHAR2
168     , x_msg_count out nocopy  NUMBER
169     , x_msg_data out nocopy  VARCHAR2
170     , x_template_attribute_id out nocopy  NUMBER
171     , p7_a0  NUMBER := 0-1962.0724
172     , p7_a1  NUMBER := 0-1962.0724
173     , p7_a2  DATE := fnd_api.g_miss_date
174     , p7_a3  NUMBER := 0-1962.0724
175     , p7_a4  DATE := fnd_api.g_miss_date
176     , p7_a5  NUMBER := 0-1962.0724
177     , p7_a6  NUMBER := 0-1962.0724
178     , p7_a7  NUMBER := 0-1962.0724
179     , p7_a8  NUMBER := 0-1962.0724
180     , p7_a9  VARCHAR2 := fnd_api.g_miss_char
181     , p7_a10  VARCHAR2 := fnd_api.g_miss_char
182     , p7_a11  VARCHAR2 := fnd_api.g_miss_char
183     , p7_a12  VARCHAR2 := fnd_api.g_miss_char
184     , p7_a13  VARCHAR2 := fnd_api.g_miss_char
185     , p7_a14  VARCHAR2 := fnd_api.g_miss_char
186   )
187 
188   as
189     ddp_template_attr_rec ams_template_attr_pvt.template_attr_rec_type;
190     ddindx binary_integer; indx binary_integer;
191   begin
192 
193     -- copy data to the local IN or IN-OUT args, if any
194 
195 
196 
197 
198 
199 
200 
201     ddp_template_attr_rec.template_attribute_id := rosetta_g_miss_num_map(p7_a0);
202     ddp_template_attr_rec.template_id := rosetta_g_miss_num_map(p7_a1);
203     ddp_template_attr_rec.last_update_date := rosetta_g_miss_date_in_map(p7_a2);
204     ddp_template_attr_rec.last_updated_by := rosetta_g_miss_num_map(p7_a3);
205     ddp_template_attr_rec.creation_date := rosetta_g_miss_date_in_map(p7_a4);
206     ddp_template_attr_rec.created_by := rosetta_g_miss_num_map(p7_a5);
207     ddp_template_attr_rec.object_version_number := rosetta_g_miss_num_map(p7_a6);
208     ddp_template_attr_rec.last_update_login := rosetta_g_miss_num_map(p7_a7);
209     ddp_template_attr_rec.security_group_id := rosetta_g_miss_num_map(p7_a8);
210     ddp_template_attr_rec.parent_attribute_code := p7_a9;
211     ddp_template_attr_rec.parent_select_all := p7_a10;
212     ddp_template_attr_rec.attribute_code := p7_a11;
213     ddp_template_attr_rec.default_flag := p7_a12;
214     ddp_template_attr_rec.editable_flag := p7_a13;
215     ddp_template_attr_rec.hide_flag := p7_a14;
216 
217 
218     -- here's the delegated call to the old PL/SQL routine
219     ams_template_attr_pvt.create_template_attr(p_api_version_number,
220       p_init_msg_list,
221       p_commit,
222       p_validation_level,
223       x_return_status,
224       x_msg_count,
225       x_msg_data,
226       ddp_template_attr_rec,
227       x_template_attribute_id);
228 
229     -- copy data back from the local variables to OUT or IN-OUT args, if any
230 
231 
232 
233 
234 
235 
236 
237 
238   end;
239 
240   procedure update_template_attr(p_api_version_number  NUMBER
241     , p_init_msg_list  VARCHAR2
242     , p_commit  VARCHAR2
243     , p_validation_level  NUMBER
244     , x_return_status out nocopy  VARCHAR2
245     , x_msg_count out nocopy  NUMBER
246     , x_msg_data out nocopy  VARCHAR2
247     , p7_a0  NUMBER := 0-1962.0724
248     , p7_a1  NUMBER := 0-1962.0724
249     , p7_a2  DATE := fnd_api.g_miss_date
250     , p7_a3  NUMBER := 0-1962.0724
251     , p7_a4  DATE := fnd_api.g_miss_date
252     , p7_a5  NUMBER := 0-1962.0724
253     , p7_a6  NUMBER := 0-1962.0724
254     , p7_a7  NUMBER := 0-1962.0724
255     , p7_a8  NUMBER := 0-1962.0724
256     , p7_a9  VARCHAR2 := fnd_api.g_miss_char
257     , p7_a10  VARCHAR2 := fnd_api.g_miss_char
258     , p7_a11  VARCHAR2 := fnd_api.g_miss_char
259     , p7_a12  VARCHAR2 := fnd_api.g_miss_char
260     , p7_a13  VARCHAR2 := fnd_api.g_miss_char
261     , p7_a14  VARCHAR2 := fnd_api.g_miss_char
262   )
263 
264   as
265     ddp_template_attr_rec ams_template_attr_pvt.template_attr_rec_type;
266     ddindx binary_integer; indx binary_integer;
267   begin
268 
269     -- copy data to the local IN or IN-OUT args, if any
270 
271 
272 
273 
274 
275 
276 
277     ddp_template_attr_rec.template_attribute_id := rosetta_g_miss_num_map(p7_a0);
278     ddp_template_attr_rec.template_id := rosetta_g_miss_num_map(p7_a1);
279     ddp_template_attr_rec.last_update_date := rosetta_g_miss_date_in_map(p7_a2);
280     ddp_template_attr_rec.last_updated_by := rosetta_g_miss_num_map(p7_a3);
281     ddp_template_attr_rec.creation_date := rosetta_g_miss_date_in_map(p7_a4);
282     ddp_template_attr_rec.created_by := rosetta_g_miss_num_map(p7_a5);
283     ddp_template_attr_rec.object_version_number := rosetta_g_miss_num_map(p7_a6);
284     ddp_template_attr_rec.last_update_login := rosetta_g_miss_num_map(p7_a7);
285     ddp_template_attr_rec.security_group_id := rosetta_g_miss_num_map(p7_a8);
286     ddp_template_attr_rec.parent_attribute_code := p7_a9;
287     ddp_template_attr_rec.parent_select_all := p7_a10;
288     ddp_template_attr_rec.attribute_code := p7_a11;
289     ddp_template_attr_rec.default_flag := p7_a12;
290     ddp_template_attr_rec.editable_flag := p7_a13;
291     ddp_template_attr_rec.hide_flag := p7_a14;
292 
293     -- here's the delegated call to the old PL/SQL routine
294     ams_template_attr_pvt.update_template_attr(p_api_version_number,
295       p_init_msg_list,
296       p_commit,
297       p_validation_level,
298       x_return_status,
299       x_msg_count,
300       x_msg_data,
301       ddp_template_attr_rec);
302 
303     -- copy data back from the local variables to OUT or IN-OUT args, if any
304 
305 
306 
307 
308 
309 
310 
311   end;
312 
313   procedure validate_template_attr(p_api_version_number  NUMBER
314     , p_init_msg_list  VARCHAR2
315     , p_validation_level  NUMBER
316     , p_validation_mode  VARCHAR2
317     , x_return_status out nocopy  VARCHAR2
318     , x_msg_count out nocopy  NUMBER
319     , x_msg_data out nocopy  VARCHAR2
320     , p3_a0  NUMBER := 0-1962.0724
321     , p3_a1  NUMBER := 0-1962.0724
322     , p3_a2  DATE := fnd_api.g_miss_date
323     , p3_a3  NUMBER := 0-1962.0724
324     , p3_a4  DATE := fnd_api.g_miss_date
325     , p3_a5  NUMBER := 0-1962.0724
326     , p3_a6  NUMBER := 0-1962.0724
327     , p3_a7  NUMBER := 0-1962.0724
328     , p3_a8  NUMBER := 0-1962.0724
329     , p3_a9  VARCHAR2 := fnd_api.g_miss_char
330     , p3_a10  VARCHAR2 := fnd_api.g_miss_char
331     , p3_a11  VARCHAR2 := fnd_api.g_miss_char
332     , p3_a12  VARCHAR2 := fnd_api.g_miss_char
333     , p3_a13  VARCHAR2 := fnd_api.g_miss_char
334     , p3_a14  VARCHAR2 := fnd_api.g_miss_char
335   )
336 
337   as
338     ddp_template_attr_rec ams_template_attr_pvt.template_attr_rec_type;
339     ddindx binary_integer; indx binary_integer;
340   begin
341 
342     -- copy data to the local IN or IN-OUT args, if any
343 
344 
345 
346     ddp_template_attr_rec.template_attribute_id := rosetta_g_miss_num_map(p3_a0);
347     ddp_template_attr_rec.template_id := rosetta_g_miss_num_map(p3_a1);
348     ddp_template_attr_rec.last_update_date := rosetta_g_miss_date_in_map(p3_a2);
349     ddp_template_attr_rec.last_updated_by := rosetta_g_miss_num_map(p3_a3);
350     ddp_template_attr_rec.creation_date := rosetta_g_miss_date_in_map(p3_a4);
351     ddp_template_attr_rec.created_by := rosetta_g_miss_num_map(p3_a5);
352     ddp_template_attr_rec.object_version_number := rosetta_g_miss_num_map(p3_a6);
353     ddp_template_attr_rec.last_update_login := rosetta_g_miss_num_map(p3_a7);
354     ddp_template_attr_rec.security_group_id := rosetta_g_miss_num_map(p3_a8);
355     ddp_template_attr_rec.parent_attribute_code := p3_a9;
356     ddp_template_attr_rec.parent_select_all := p3_a10;
357     ddp_template_attr_rec.attribute_code := p3_a11;
358     ddp_template_attr_rec.default_flag := p3_a12;
359     ddp_template_attr_rec.editable_flag := p3_a13;
360     ddp_template_attr_rec.hide_flag := p3_a14;
361 
362 
363 
364 
365 
366     -- here's the delegated call to the old PL/SQL routine
367     ams_template_attr_pvt.validate_template_attr(p_api_version_number,
368       p_init_msg_list,
369       p_validation_level,
370       ddp_template_attr_rec,
371       p_validation_mode,
372       x_return_status,
373       x_msg_count,
374       x_msg_data);
375 
376     -- copy data back from the local variables to OUT or IN-OUT args, if any
377 
378 
379 
380 
381 
382 
383 
384   end;
385 
386   procedure check_template_attr_items(p_validation_mode  VARCHAR2
387     , x_return_status out nocopy  VARCHAR2
388     , p0_a0  NUMBER := 0-1962.0724
389     , p0_a1  NUMBER := 0-1962.0724
390     , p0_a2  DATE := fnd_api.g_miss_date
391     , p0_a3  NUMBER := 0-1962.0724
392     , p0_a4  DATE := fnd_api.g_miss_date
393     , p0_a5  NUMBER := 0-1962.0724
394     , p0_a6  NUMBER := 0-1962.0724
395     , p0_a7  NUMBER := 0-1962.0724
396     , p0_a8  NUMBER := 0-1962.0724
397     , p0_a9  VARCHAR2 := fnd_api.g_miss_char
398     , p0_a10  VARCHAR2 := fnd_api.g_miss_char
399     , p0_a11  VARCHAR2 := fnd_api.g_miss_char
400     , p0_a12  VARCHAR2 := fnd_api.g_miss_char
401     , p0_a13  VARCHAR2 := fnd_api.g_miss_char
402     , p0_a14  VARCHAR2 := fnd_api.g_miss_char
403   )
404 
405   as
406     ddp_template_attr_rec ams_template_attr_pvt.template_attr_rec_type;
410     -- copy data to the local IN or IN-OUT args, if any
407     ddindx binary_integer; indx binary_integer;
408   begin
409 
411     ddp_template_attr_rec.template_attribute_id := rosetta_g_miss_num_map(p0_a0);
412     ddp_template_attr_rec.template_id := rosetta_g_miss_num_map(p0_a1);
413     ddp_template_attr_rec.last_update_date := rosetta_g_miss_date_in_map(p0_a2);
414     ddp_template_attr_rec.last_updated_by := rosetta_g_miss_num_map(p0_a3);
415     ddp_template_attr_rec.creation_date := rosetta_g_miss_date_in_map(p0_a4);
416     ddp_template_attr_rec.created_by := rosetta_g_miss_num_map(p0_a5);
417     ddp_template_attr_rec.object_version_number := rosetta_g_miss_num_map(p0_a6);
418     ddp_template_attr_rec.last_update_login := rosetta_g_miss_num_map(p0_a7);
419     ddp_template_attr_rec.security_group_id := rosetta_g_miss_num_map(p0_a8);
420     ddp_template_attr_rec.parent_attribute_code := p0_a9;
421     ddp_template_attr_rec.parent_select_all := p0_a10;
422     ddp_template_attr_rec.attribute_code := p0_a11;
423     ddp_template_attr_rec.default_flag := p0_a12;
424     ddp_template_attr_rec.editable_flag := p0_a13;
425     ddp_template_attr_rec.hide_flag := p0_a14;
426 
427 
428 
429     -- here's the delegated call to the old PL/SQL routine
430     ams_template_attr_pvt.check_template_attr_items(ddp_template_attr_rec,
431       p_validation_mode,
432       x_return_status);
433 
434     -- copy data back from the local variables to OUT or IN-OUT args, if any
435 
436 
437   end;
438 
439   procedure validate_template_attr_rec(p_api_version_number  NUMBER
440     , p_init_msg_list  VARCHAR2
441     , x_return_status out nocopy  VARCHAR2
442     , x_msg_count out nocopy  NUMBER
443     , x_msg_data out nocopy  VARCHAR2
444     , p5_a0  NUMBER := 0-1962.0724
445     , p5_a1  NUMBER := 0-1962.0724
446     , p5_a2  DATE := fnd_api.g_miss_date
447     , p5_a3  NUMBER := 0-1962.0724
448     , p5_a4  DATE := fnd_api.g_miss_date
449     , p5_a5  NUMBER := 0-1962.0724
450     , p5_a6  NUMBER := 0-1962.0724
451     , p5_a7  NUMBER := 0-1962.0724
452     , p5_a8  NUMBER := 0-1962.0724
453     , p5_a9  VARCHAR2 := fnd_api.g_miss_char
454     , p5_a10  VARCHAR2 := fnd_api.g_miss_char
455     , p5_a11  VARCHAR2 := fnd_api.g_miss_char
456     , p5_a12  VARCHAR2 := fnd_api.g_miss_char
457     , p5_a13  VARCHAR2 := fnd_api.g_miss_char
458     , p5_a14  VARCHAR2 := fnd_api.g_miss_char
459   )
460 
461   as
462     ddp_template_attr_rec ams_template_attr_pvt.template_attr_rec_type;
463     ddindx binary_integer; indx binary_integer;
464   begin
465 
466     -- copy data to the local IN or IN-OUT args, if any
467 
468 
469 
470 
471 
472     ddp_template_attr_rec.template_attribute_id := rosetta_g_miss_num_map(p5_a0);
473     ddp_template_attr_rec.template_id := rosetta_g_miss_num_map(p5_a1);
474     ddp_template_attr_rec.last_update_date := rosetta_g_miss_date_in_map(p5_a2);
475     ddp_template_attr_rec.last_updated_by := rosetta_g_miss_num_map(p5_a3);
476     ddp_template_attr_rec.creation_date := rosetta_g_miss_date_in_map(p5_a4);
477     ddp_template_attr_rec.created_by := rosetta_g_miss_num_map(p5_a5);
478     ddp_template_attr_rec.object_version_number := rosetta_g_miss_num_map(p5_a6);
479     ddp_template_attr_rec.last_update_login := rosetta_g_miss_num_map(p5_a7);
480     ddp_template_attr_rec.security_group_id := rosetta_g_miss_num_map(p5_a8);
481     ddp_template_attr_rec.parent_attribute_code := p5_a9;
482     ddp_template_attr_rec.parent_select_all := p5_a10;
483     ddp_template_attr_rec.attribute_code := p5_a11;
484     ddp_template_attr_rec.default_flag := p5_a12;
485     ddp_template_attr_rec.editable_flag := p5_a13;
486     ddp_template_attr_rec.hide_flag := p5_a14;
487 
488     -- here's the delegated call to the old PL/SQL routine
489     ams_template_attr_pvt.validate_template_attr_rec(p_api_version_number,
490       p_init_msg_list,
491       x_return_status,
492       x_msg_count,
493       x_msg_data,
494       ddp_template_attr_rec);
495 
496     -- copy data back from the local variables to OUT or IN-OUT args, if any
497 
498 
499 
500 
501 
502   end;
503 
504 end ams_template_attr_pvt_w;