Friday, December 16, 2011

Sending concurrent request output by e-mail

This post describes how to send a request output using e-mail.
First, create two directories. The first one should point to the output directory.
CREATE DIRECTORY xx_output AS '/u02/oracle/VISION/inst/apps/VISION/logs/appl/conc/out';
GRANT ALL ON DIRECTORY xx_output TO PUBLIC;
The second one should be any directory that the database user can access.
CREATE DIRECTORY xx_maildir AS '/home/oracle/tmp';
GRANT ALL ON DIRECTORY xx_maildir TO PUBLIC;
Then create a generic procedure that can send mail with attachments.
create or replace
PROCEDURE xx_send_mail_file(p_subject     IN VARCHAR2,
                            p_message     IN VARCHAR2,
                            p_recipient   IN VARCHAR2,
                            p_max_size    IN NUMBER   DEFAULT 9999999999,
                            p_filename1   IN VARCHAR2 DEFAULT NULL,
                            p_filename2   IN VARCHAR2 DEFAULT NULL,
                            p_filename3   IN VARCHAR2 DEFAULT NULL,
                            p_return_desc OUT VARCHAR2) IS

  -- to store the ip address of the smtp server
  l_smtp_server                 VARCHAR2(50);

  -- to store the smtp port of the smtp server
  l_smtp_server_port            NUMBER;

  -- to store the path / directory name of the file
  l_directory_name              VARCHAR2(200);

  -- to store the filename
  l_file_name                   VARCHAR2(100);

  -- to store the contents of the line read from the file
  l_line                        VARCHAR2(1000);
  crlf                          VARCHAR2(2):= CHR(13) || CHR(10);

  -- to store the p_message
  l_mesg                        VARCHAR2(32767);

  -- smtp connection variable
  conn                          UTL_SMTP.CONNECTION;

  -- to store the list of recipeints
  l_msg_to                      VARCHAR2(2000);

  -- to store the name of the sender
  l_sender_name                 VARCHAR2(200);
  v_numberOf                    NUMBER := 1;
  v_addr                        VARCHAR2(500);

  TYPE varchar2_table IS TABLE OF VARCHAR2(200) INDEX BY BINARY_INTEGER;

  -- an array to store the file names
  file_array                    VARCHAR2_TABLE;

  -- array index
  i                             BINARY_INTEGER;

  -- file pointer
  l_file_handle                 UTL_FILE.FILE_TYPE;

  -- to store the position of \ in the file name
  l_slash_pos                   NUMBER;

  -- to store the lenght of the p_message
  l_mesg_len                    NUMBER;

  -- user defined exception
  abort_program                 EXCEPTION;

  -- boolean variable to trap if the p_message lenght is exceeding
  mesg_length_exceeded          BOOLEAN := FALSE;


  -- variable to store the error p_message. to be returned to the calling program
  l_return_desc1                VARCHAR2(2000);

  -- this procedure fetches the values for miscellaneous parameters
  PROCEDURE fetch_misc IS
  BEGIN
     l_return_desc1  := '11 - E: PARAMETER NOT MAINTAINED IN   MISC FOR AM_KEY1 = SMTP SERVER. ';
     l_smtp_server := 'localhost';

     l_return_desc1       := '22 - E: PARAMETER NOT MAINTAINED IN MISC FOR AM_KEY1 = SMTP PORT. ';
     l_smtp_server_port := '25';

     l_return_desc1   := '33 - E: PARAMETER NOT MAINTAINED IN MISC FOR '||
                         'AM_KEY1 = TICKET_EMAIL AND KEY2 =SENDER EMAIL. ';
     l_sender_name  := 'mailer@ebs.com';
  EXCEPTION
    WHEN others THEN
      RAISE ABORT_PROGRAM;
  END fetch_misc;

BEGIN
   -- fetching miscellaneous parameters
   FETCH_MISC;

   -- assigning file names to array
   file_array(1) := p_filename1;
   file_array(2) := p_filename2;
   file_array(3) := p_filename3;

   l_return_desc1  := '10 - E: THERE WAS AN ERROR IN OPENING CONNECTION. ';

   -- open connection on the server
   CONN:= UTL_SMTP.OPEN_CONNECTION( L_SMTP_SERVER, L_SMTP_SERVER_PORT );

   -- do the initial hand shake
   UTL_SMTP.HELO( CONN, L_SMTP_SERVER );

   UTL_SMTP.MAIL( CONN, L_SENDER_NAME );

   l_return_desc1  := '20 - E: THERE WAS AN ERROR IN CREATING RECIPIENTS.';

   IF (instr(p_recipient,';') = 0) THEN
     UTL_SMTP.RCPT(CONN, p_recipient);
   -- handles morde then one recipient, separated by ;
   ELSE
     WHILE (instr(p_recipient, ';', v_numberOf) > 0) LOOP

       v_addr := substr(p_recipient, v_numberOf, instr(substr(p_recipient, v_numberOf),';')-1);
       v_numberOf := v_numberOf + instr(substr(p_recipient, v_numberOf), ';');

       UTL_SMTP.RCPT(CONN, v_addr);

     END LOOP;
   END IF;

   UTL_SMTP.OPEN_DATA ( CONN );

   -- generate the mime header
   l_return_desc1  := '30 - E: THERE WAS AN ERROR IN GENERATING MIME HEADER. ';

   l_mesg:= 'Date: '||TO_CHAR(SYSDATE, 'dd Mon yy hh24:mi:ss')||crlf||
            'From: '||l_sender_name||crlf||
            'Subject: '||p_subject||crlf||
            'To: '||l_msg_to||crlf||
            'Mime-Version: 1.0'||crlf||
            'Content-Type: multipart/mixed; boundary="DMW.Boundary.605592468"'||crlf||''||crlf||
            'This is a Mime message, which your current mail reader may not'|| crlf||
            'understand. Parts of the message will appear as text. If the remainder'|| crlf||
            'appears as random characters in the p_message body, instead of as'|| crlf||
            'attachments, then you''ll have to extract these parts and decode them'|| crlf||
            'manually.'|| crlf||''||crlf||
            '--DMW.Boundary.605592468'||crlf||
            'Content-Type: text/plain; name="p_message.txt"; charset=US-ASCII'||crlf||
            'Content-Disposition: inline; filename="p_message.txt"'||crlf||
            'Content-Transfer-Encoding: 7bit'||crlf||''||crlf||
            p_message||crlf||crlf||crlf;

   l_mesg_len := LENGTH(l_mesg);

   IF l_mesg_len > p_max_size THEN
      MESG_LENGTH_EXCEEDED := TRUE;
   END IF;

   l_return_desc1  := '40 - E: THERE WAS AN ERROR IN WRITING p_message TO CONNECTION. ';
   UTL_SMTP.WRITE_DATA ( CONN, l_mesg );

   -- start attaching the files
   FOR I IN  1..3 LOOP

       EXIT WHEN MESG_LENGTH_EXCEEDED;

       IF file_array(I) IS NOT NULL THEN
          BEGIN

             l_slash_pos := INSTR(file_array(I), '/', -1 );

             IF l_slash_pos = 0 THEN
                l_slash_pos := INSTR(file_array(I), '\', -1 );
             END IF;

             l_directory_name := 'XX_MAILDIR';

             l_file_name      := SUBSTR(file_array(I), l_slash_pos + 1 );

             l_return_desc1   := '50 - E: THERE WAS AN ERROR IN OPENING FILE. ';

             l_file_handle    := UTL_FILE.FOPEN(l_directory_name, l_file_name, 'R' );

             l_mesg           := crlf || '--DMW.Boundary.605592468'||crlf||
                                'Content-Type: application/octet-stream; name="'||
                                 l_file_name||'"'||crlf||
                                'Content-Disposition: attachment; filename="' ||
                                 l_file_name||'"'||crlf||
                                'Content-Transfer-Encoding: 7bit' || crlf || crlf ;

             l_mesg_len       := l_mesg_len + LENGTH(l_mesg);

             UTL_SMTP.WRITE_DATA ( CONN, l_mesg );

             LOOP
                 l_return_desc1  := '60 - E: THERE WAS AN ERROR IN READING FILE. ';
                 UTL_FILE.GET_LINE(l_file_handle, l_line);

                 IF l_mesg_len + LENGTH(l_line) > p_max_size THEN

                    l_mesg := '*** truncated ***' || crlf;
                    UTL_SMTP.WRITE_DATA ( CONN, l_mesg );
                    MESG_LENGTH_EXCEEDED := TRUE;
                    EXIT;

                 END IF;

                 l_mesg := l_line || CRLF;
                 UTL_SMTP.WRITE_DATA ( CONN, l_mesg );
                 l_mesg_len := l_mesg_len + LENGTH(l_mesg);
             END LOOP;
          EXCEPTION
             WHEN no_data_found THEN
               NULL;
             WHEN utl_file.invalid_path THEN
               RAISE ABORT_PROGRAM;
             WHEN others THEN
               RAISE ABORT_PROGRAM;
          END;

          l_mesg := crlf;

          UTL_SMTP.WRITE_DATA ( CONN, l_mesg );
          UTL_FILE.FCLOSE(l_file_handle);
        END IF;
   END LOOP;

   l_return_desc1  := '70 - E: THERE WAS AN ERROR IN CLOSING MIME BOUNDARY. ';
   l_mesg := crlf || '--DMW.Boundary.605592468--' || crlf;

   UTL_SMTP.WRITE_DATA ( CONN, l_mesg );
   UTL_SMTP.CLOSE_DATA( CONN );
   UTL_SMTP.QUIT( CONN );
EXCEPTION
  WHEN abort_program THEN
    p_return_desc := l_return_desc1;
  WHEN others THEN
    p_return_desc := l_return_desc1;
END xx_send_mail_file;
In the above code you need to change mailserver, port and sender so it suites your needs.

Next, create a procedure that will submit a request and send the output.
create or replace
PROCEDURE xx_send_mail_outp (errbuf        OUT VARCHAR2,
                             retcode       OUT VARCHAR2) IS

  v_response            VARCHAR2(1000);
  v_request_id          NUMBER;
  no_req                EXCEPTION;

  v_wait_status         BOOLEAN;

  v_request_phase       VARCHAR2(1000);
  v_request_status      VARCHAR2(1000);
  v_dev_request_phase   VARCHAR2(1000);
  v_dev_request_status  VARCHAR2(1000);
  v_request_status_mesg VARCHAR2(1000);
BEGIN
  v_request_id := fnd_request.submit_request('FND',       -- Application
                                             'FNDSCARU',  -- Request (Active Responsibilities and Users)
                                             '','',FALSE,
                                             '','','','','','','','',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '', '', '', '', '', '', '', '', '',
                                             '', '');

  -- Verify that the concurrent request was launched
  -- successfully.
  IF (v_request_id = 0) THEN
    raise no_req;
  ELSE
    fnd_file.put_line(fnd_file.log, 'Submitted request: '||v_request_id);
  END IF;

  COMMIT;

  -- wait for request to finish
  v_wait_status := fnd_concurrent.wait_for_request(v_request_id,
                                                   2,  -- interval in sec
                                                   60, -- total wait time in sec
                                                   v_request_phase,
                                                   v_request_status,
                                                   v_dev_request_phase,
                                                   v_dev_request_status,
                                                   v_request_status_mesg);


  -- copy file from output dir to tmp dir
  -- also renaming the file in the same operation
  utl_file.fcopy('XX_OUTPUT', 'o'||v_request_id||'.out', 'XX_MAILDIR', 'Active_Resp_'||
                              TO_CHAR(SYSDATE,'YYMMDD')||'.pdf');

  -- send the mail
  xx_send_mail_file('Sending the output of request Active Responsibilities and Users',
                    'Result is attached.'||chr(10)||'Sysadmin',
                    'yourname@yourdomain.com',
                    9999999999,
                    'Active_Resp_'||TO_CHAR(SYSDATE,'YYMMDD')||'.pdf',
                    NULL,
                    NULL,
                    v_response);

  fnd_file.put_line(fnd_file.log, 'Mail response: '||nvl(v_response,'SUCCESS'));

EXCEPTION
  WHEN no_req THEN
    fnd_file.put_line(fnd_file.log, 'ERROR: Could not submit request');
    retcode := '2';
  WHEN others THEN
    fnd_file.put_line(fnd_file.log, 'ERROR: '||SQLERRM);
    retcode := '2';
    RAISE;
END xx_send_mail_outp;
In the example above I am submitting the request Active Responsibilities and Users. The recipient is hardcoded but can easily be extended to be more dynamic, the code also handles more then one recipient (separate the addresses with ;). The procedure xx_send_mail_outp is created to be a request it self and if you would like to test this you need to do that setup.

Wednesday, December 14, 2011

FNDLOAD

This post describes how to down- and upload different components using FNDLOAD.

Value set
Download
FNDLOAD apps/appspwd O Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct download_file.ldt VALUE_SET FLEX_VALUE_SET_NAME="VALUE_SET_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afffload.lct download_file.ldt CUSTOM_MODE=FORCE

Note:
Use the optional FNDLOAD parameter P_VSET_DOWNLOAD_CHILDREN set to N if you do not want the value set values to be downloaded.

Concurrent Request
Download
FNDLOAD apps/appspwd O Y DOWNLOAD $FND_TOP/patch/115/import/afcpprog.lct download_file.ldt PROGRAM APPLICATION_SHORT_NAME="APPL_SHORT_NAME" CONCURRENT_PROGRAM_NAME="REQUEST_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afcpprog.lct download_file.ldt CUSTOM_MODE=FORCE

Note: If value sets are used by the request parameters the set up for them will also be included in the ldt-file. If the value set is not new it is recommended to remove the creation part from the upload file.

Request set
When using FNDLOAD for a request set it includes two parts, the request set definition and the request set linkage.

Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct download_file_def.ldt REQ_SET REQUEST_SET_NAME="REQUEST_SET_NAME"

FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct download_file_link.ldt REQ_SET_LINKS REQUEST_SET_NAME="REQUEST_SET_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct download_file_def.ldt CUSTOM_MODE=FORCE

FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct download_file_link.ldt CUSTOM_MODE=FORCE

Request Group
Download
FNDLOAD apps/appspwd O Y DOWNLOAD $FND_TOP/patch/115/import/afcpreqg.lct download_file.ldt REQUEST_GROUP REQUEST_GROUP_NAME="REQUEST_GRP_NAME" APPLICATION_SHORT_NAME="APPL_SHORT_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afcpreqg.lct download_file.ldt CUSTOM_MODE=FORCE

Profile option
Download
FNDLOAD apps/appspwd O Y DOWNLOAD $FND_TOP/patch/115/import/afscprof.lct download_file.ldt PROFILE PROFILE_NAME="PROFILE_NAME" APPLICATION_SHORT_NAME="APPL_SHORT_NAME"

Upload
FNDLOAD apps/appspwd O Y UPLOAD $FND_TOP/patch/115/import/afscprof.lct download_file.ldt CUSTOM_MODE=FORCE

Descriptive Flexfield
Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct download_file.ldt DESC_FLEX APPLICATION_SHORT_NAME="APPL_SHORT_NAME" DESCRIPTIVE_FLEXFIELD_NAME="DESC_FLEXFIELD_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afffload.lct download_file.ldt CUSTOM_MODE=FORCE

Form and Function
Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct download_file.ldt FUNCTION FUNCTION_NAME=="FUNCTION_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afsload.lct download_file.ldt CUSTOM_MODE=FORCE

Menu
Download
FNDLOAD apps/appspwd O Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct download_file.ldt MENU MENU_NAME="MENU_NAME"

Upload
FNDLOAD apps/appspwd O Y UPLOAD $FND_TOP/patch/115/import/afsload.lct download_file.ldt CUSTOM_MODE=FORCE

Note: When a menu is downloaded all the entries in the menu will be included in the ldt-file. It is recommended to remove all the entries that are not new.

Message
Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/afmdmsg.lct
download_file.ldt FND_NEW_MESSAGES APPLICATION_SHORT_NAME="APPL_SHORT_NAME" MESSAGE_NAME="MESSAGE_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afmdmsg.lct download_file.ldt CUSTOM_MODE=FORCE

Lookup value

Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/aflvmlu.lct download_file.ldt FND_LOOKUP_TYPE APPLICATION_SHORT_NAME="APPL_SHORT_NAME" LOOKUP_TYPE="LOOKUP_TYPE_NAME"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/aflvmlu.lct download_file.ldt CUSTOM_MODE=FORCE

Folder
DownloadFNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/fndfold.lct download_file.ldt FND_FOLDERS NAME="folder name"

Upload
FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/fndfold.lct download_file.ldt CUSTOM_MODE=FORCE

Note: When you download a folder you need to set the language to get any data in the ldt-file (how-to is specified under Generic Notes).

Forms personalization
Download
FNDLOAD apps/appspwd 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct download_file.ldt FND_FORM_CUSTOM_RULES FUNCTION_NAME="FUNCTION_NAME"

Upload
First, run the script to remove personalizations (the script have to be customized to remove the same data as you are uploading). We need to run this script because there is a bug in the upload script.

DECLARE
  CURSOR cu_functions IS
    SELECT DISTINCT
           form_name
         , function_name
         , rule_type
         , rule_key
    FROM fnd_form_custom_rules
    WHERE form_name = FORM NAME
    ORDER BY function_name;

BEGIN
  FOR ru_functions IN cu_functions
  LOOP
    fnd_form_custom_rules_pkg.delete_set
      ( ru_functions.rule_key
      , ru_functions.rule_type
      , ru_functions.function_name
      , ru_functions.form_name
      );
    COMMIT;
  END LOOP;
END;

FNDLOAD apps/appspwd 0 Y UPLOAD affrmcusx.lct download_file.ldt CUSTOM_MODE=FORCE

Note: The function name is the function short name as seen in the Function Definition Screen.

XML Publisher 
To handle the down- and upload of XML Publisher templates and Data Definitions there are a few extra steps to take care of. 

Download – Template and Data Definition
FNDLOAD apps/appspwd 0 Y DOWNLOAD $XDO_TOP/patch/115/import/xdotmpl.lct download_file.ldt XDO_DS_DEFINITIONS APPLICATION_SHORT_NAME="APPL_SHORT_NAME" DATA_SOURCE_CODE="DATA_SOURCE_CODE"

Download – Template physical file
java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION apps.server:port:sid -APPS_SHORT_NAME app_short_name -LOB_CODE template_code -LOB_TYPE TEMPLATE -LANGUAGE language -TERRITORY territory

Example
java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION server1.cpm.com:1521:TEST -APPS_SHORT_NAME XX -LOB_CODE XX_AR_BALANCE_REP -LOB_TYPE TEMPLATE -LANGUAGE sv -TERRITORY SE

Download – Data template physical file
java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION apps.server:port:sid -APPS_SHORT_NAME app_short_name -DS_CODE data_definition_code

Example
java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION server1.cpm.com:1521:TEST -APPS_SHORT_NAME XX -DS_CODE XX_AR_BALANCE_REP

Upload – Template and Data Definition
FNDLOAD apps/appspwd 0 Y UPLOAD $XDO_TOP/patch/115/import/xdotmpl.lct download_file.ldt CUSTOM_MODE=FORCE

Upload – Template physical file
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION apps.server:port:sid -APPS_SHORT_NAME app_short_name -LOB_CODE template_code -LOB_TYPE TEMPLATE -XDO_FILE_TYPE RTF -FILE_NAME template_name.rtf -CUSTOM_MODE FORCE -LANGUAGE language -TERRITORY territory

Example
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION server1.cpm.com:1521:TEST -APPS_SHORT_NAME XX -LOB_CODE XX_AR_BALANCE_REP -LOB_TYPE TEMPLATE -XDO_FILE_TYPE RTF -FILE_NAME XX_AR_BALANCE_REP.rtf -CUSTOM_MODE FORCE -LANGUAGE sv -TERRITORY SE

Upload – Data template physical file
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION apps.server:port:sid -APPS_SHORT_NAME app_short_name -LOB_CODE data_definition_code -LOB_TYPE DATA_TEMPLATE -XDO_FILE_TYPE XML -FILE_NAME data_definition_name.xml -CUSTOM_MODE FORCE

Example
java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD appspwd -JDBC_CONNECTION server1.cpm.com:1521:TEST -APPS_SHORT_NAME XX -LOB_CODE XX_AR_BALANCE_REP -LOB_TYPE DATA_TEMPLATE -XDO_FILE_TYPE XML -FILE_NAME XX_AR_BALANCE_REP.xml -CUSTOM_MODE FORCE

Note
  • The valid valid for parameter LANGUAGE is sv for Swedish and en for English.
  • The valid valid for parameter TERRITORY is SE for Sweden and US for USA.
  • When you download the data definition physical file all the template files will be downloaded. 
  • Useful tables for XML P are XDO_TEMPLATES_B, XDO_LOBS and XDO_TEMPLATES_TL.

Generic notes

  • If the information you are downloading is not the same in English and Swedish you need to run the download command twice. Name your ldt-file with the ending _S (download_file_S.ldt) and _US (download_file_US.ldt).

    To download a specific language (other then English) you have to set NLS_LANG accordingly.
    Swedish:
    export NLS_LANG='SWEDISH_SWEDEN.WE8ISO8859P1'
  • If the information is the same in English and Swedish you only have to download once. Then create two files and name them accordingly. You need to change the LANGUAGE setting in the ldt-file to S for the _S-file and US for the _US-file.
    To get Swedish characters correct set
    export NLS_LANG='SWEDISH_SWEDEN.WE8ISO8859P1' before downloading.
  • Use upload parameter CUSTOM_MODE=FORCE to be sure that the informtion you are uploading is updating the system.FNDLOAD apps/appspwd 0 Y UPLOAD $FND_TOP/patch/115/import/afcpprog.lct download_file.ldt - CUSTOM_MODE=FORCE

Thursday, December 8, 2011

Diagnostics -> Examine

To be able to use the menu Help -> Diagnostics -> Examine you have to set the profile value Utilities:Diagnostics to Yes.


javascript:void(0)