DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_LOG_ATTACHMENT

Source


1 package body FND_LOG_ATTACHMENT as
2   /* $Header: AFUTLGTB.pls 115.3 2004/05/05 02:06:53 kkapur noship $ */
3 
4   TYPE AttachmentsCache IS TABLE of LONG RAW
5 		INDEX BY BINARY_INTEGER;
6   mCache AttachmentsCache;
7 
8   /**
9    ** Flushes the buffered messages
10    */
11   PROCEDURE FLUSH(PATTACHMENT_ID IN NUMBER) is
12     pragma AUTONOMOUS_TRANSACTION;
13     myvar  LONG RAW := NULL;
14     mylen  number;
15     myblob BLOB;
16     begin
17       if (mCache.exists(PATTACHMENT_ID)) then
18         FND_LOG_REPOSITORY.GET_BLOB_INTERNAL(PATTACHMENT_ID, myblob);
19         myvar := mCache(PATTACHMENT_ID);
20         mylen := UTL_RAW.length(myvar);
21 	if ( mylen > 0 ) then
22           if( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
23             FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'fnd.plsql.fnd_log_attachment.flush',
24                         'log_sequence=' || PATTACHMENT_ID || '; Message len=' || mylen);
25           end if;
26           DBMS_LOB.WRITEAPPEND(myblob, mylen, myvar);
27           commit;
28 	end if;
29       end if;
30   end FLUSH;
31 
32   /**
33    ** Adds the message to the buffer
34    */
35   PROCEDURE PUT_BUFFER(PATTACHMENT_ID IN NUMBER, PMESSAGE IN VARCHAR2) is
36     myvar   LONG RAW;
37     myinmsg LONG RAW;
38     mylen   NUMBER;
39     begin
40       if (mCache.exists(PATTACHMENT_ID)) then
41          myvar := mCache(PATTACHMENT_ID);
42 	 myinmsg := UTL_RAW.CAST_TO_RAW(CONVERT(PMESSAGE, 'US7ASCII'));
43          mylen := UTL_RAW.length(myvar) + UTL_RAW.length(myinmsg);
44          if ( mylen >= 10000 ) then
45             flush(PATTACHMENT_ID);
46 	    mCache(PATTACHMENT_ID) := myinmsg;
47 	 else
48             mCache(PATTACHMENT_ID) := UTL_RAW.CONCAT(myvar, myinmsg);
49          end if;
50       elsif (PATTACHMENT_ID > 0) then
51  	 mCache(PATTACHMENT_ID) := UTL_RAW.CAST_TO_RAW(CONVERT(PMESSAGE, 'US7ASCII'));
52       end if;
53   end PUT_BUFFER;
54 
55   /**
56    ** Adds the message to the buffer
57    */
58   PROCEDURE PUT_BUFFER_RAW(PATTACHMENT_ID IN NUMBER, PMESSAGE IN LONG RAW) is
59     myvar   LONG RAW;
60     mylen   NUMBER;
61     begin
62       if (mCache.exists(PATTACHMENT_ID)) then
63          myvar := mCache(PATTACHMENT_ID);
64          mylen := UTL_RAW.length(myvar) + UTL_RAW.length(PMESSAGE);
65          if ( mylen >= 10000 ) then
66             flush(PATTACHMENT_ID);
67             mCache(PATTACHMENT_ID) := PMESSAGE;
68          else
69             mCache(PATTACHMENT_ID) := UTL_RAW.CONCAT(myvar, PMESSAGE);
70          end if;
71       elsif (PATTACHMENT_ID > 0) then
72          mCache(PATTACHMENT_ID) := PMESSAGE;
73       end if;
74   end PUT_BUFFER_RAW;
75 
76   /**
77    ** Writes PMESSAGE to the Attachment
78    ** For performance, messages are buffered in memory
79    ** until the buffer limit (default 10000) is reached or
80    ** CLOSE(..) is called.
81    */
82   PROCEDURE WRITE(PATTACHMENT_ID IN NUMBER, PMESSAGE IN VARCHAR2) is
83     begin
84       PUT_BUFFER(PATTACHMENT_ID, PMESSAGE);
85   end WRITE;
86 
87   /**
88    ** Writes PMESSAGE (appended with newline) to the Attachment
89    ** For performance, messages are buffered in memory
90    ** until the buffer limit (default 10000) is reached or
91    ** CLOSE(..) is called.
92    */
93   PROCEDURE WRITELN(PATTACHMENT_ID IN NUMBER, PMESSAGE IN VARCHAR2) is
94     begin
95       WRITE(PATTACHMENT_ID, PMESSAGE || fnd_global.newline);
96   end WRITELN;
97 
98   /**
99    ** Writes RAW PMESSAGE to the Attachment
100    ** For performance, data is buffered in memory
101    ** until the buffer limit (default 10000) is reached or
102    ** CLOSE(..) is called.
103    */
104   PROCEDURE WRITE_RAW(PATTACHMENT_ID IN NUMBER, PMESSAGE IN LONG RAW) is
105     begin
106       PUT_BUFFER_RAW(PATTACHMENT_ID, PMESSAGE);
107   end WRITE_RAW;
108 
109   /**
110    ** Writes PMESSAGE to the Attachment.
111    ** For AOL/J Internal use Only!
112    ** (Called from AppsLog.java)
113    */
114   PROCEDURE WRITE_INTERNAL(PATTACHMENT_ID IN NUMBER, PMESSAGE IN FND_TABLE_OF_RAW_2000,
115 			PCHARSET IN VARCHAR2, PMIMETYPE IN VARCHAR2,
116 			PENCODING IN VARCHAR2, PLANG IN VARCHAR2,
117                         PFILE_EXTN IN VARCHAR2, PDESC IN VARCHAR2) is
118     pragma AUTONOMOUS_TRANSACTION;
119     myblob BLOB;
120     table_len number;
121     msg_len number;
122     i number;
123     begin
124       if ( PATTACHMENT_ID > 0 ) then
125         flush(PATTACHMENT_ID);
126         table_len := PMESSAGE.COUNT;
127         FND_LOG_REPOSITORY.GET_BLOB_INTERNAL(PATTACHMENT_ID, myblob, PCHARSET,
128 			PMIMETYPE, PENCODING, PLANG, PFILE_EXTN, PDESC);
129         if ( myblob is not NULL ) then
130           FOR i IN 1..table_len LOOP
131             msg_len := UTL_RAW.LENGTH(PMESSAGE(i));
132     	    if( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then
133       	      FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'fnd.plsql.fnd_log_attachment.write',
134         		'log_sequence=' || PATTACHMENT_ID || '; LoopCtr=' || i ||
135 			'; Message len=' || msg_len);
136     	    end if;
137             if ( msg_len > 0 ) then
138 	      DBMS_LOB.WRITEAPPEND(myblob, msg_len, PMESSAGE(i));
139             end if;
140           END LOOP;
141           commit;
142         end if;
143       end if;
144   end WRITE_INTERNAL;
145 
146   /**
147    ** Flushes the Attachment buffer and closes the Attachment
148    */
149   PROCEDURE CLOSE(PATTACHMENT_ID IN NUMBER) is
150     begin
151       flush(PATTACHMENT_ID);
152       mCache.delete(PATTACHMENT_ID);
153   end CLOSE;
154 
155 end FND_LOG_ATTACHMENT;