Using Convertion agent adapter module (mail sender)

All,
In my scenario pdf file is being sent as mail attachment. The pdf file content should be mapped to rfc.
I was able to implement similar scenario in which attached file is xml and not pdf (using adapter modules).
I was able to use the Conversion agent module over file sender (and convert pdf to xml).
Yet, I'm not able to the combination of both.
Can you please provide useful links & advice?
Regards,
Uri

Prateek,
Thank for your replay.
I'm using the following modules (&params):
MODULE:localejbs/AF_Modules/PayloadSwapBean:
PARAMETER NAME;PARAMETER VALUE
swap.keyName;Content-Disposition
swap.keyName;Content-Description
swap.keyValue;attachment;filename="Z1HR_ADOBE_CREATE_INCIDENCE_AD.pdf"
swap.keyValueZ1HR_ADOBE_CREATE_INCIDENCE_AD
MODULE:localejbs/sap.com/com.sap.nw.cm.xi/CMTransformBean:
PARAMETER NAME;PARAMETER VALUE
TransformationName;Z1HR_ADOBE_CREATE_INCIDENCE_AD
I tried using them in variety of sequences, yet none of them worked.
Regards,
Uri

Similar Messages

  • SAPGUI_PROGRESS_INDICATOR what is use of this fun module when sending data

    dear ,
    what is use of
    SAPGUI_PROGRESS_INDICATOR  fun module when sending data to FTP SERVER . POINTS MUST BE GIVEN

    Dear ,
    when i am trying to send data in internal table of type charterter declared below(i.e iresult) to FTP SERVER program giving the DATA ERROR = 3 when 'FTP_R3_TO_SERVER' fuction module is exected and file it not creating in ftp server . plz help me pointS must be given .
    the FTP_CONNECT ,FTP_COMMAND function modules are executing properly giving handle 1 and its sy-subrc = 0 .
    when 'FTP_R3_TO_SERVER' is executed it is giving SY-SUBRC = 3 ( DATA ERROR ) i.e it is failing to out internal table data in FTP SERVER . PLZ HIDE ME ITS URGENT .
    THIS IS CODE I USED .
    DATA : BEGIN OF iresult OCCURS 5,
    rec(450),
    END OF iresult,
    DATA :
    dest LIKE rfcdes-rfcdest VALUE 'SAPFTP',
    compress TYPE c VALUE 'N',
    host(64) TYPE c.
    DATA: hdl TYPE i.
    DATA: BEGIN OF result OCCURS 0,
    line(100) TYPE c,
    END OF result.
    DATA : key TYPE i VALUE 26101957,
    dstlen TYPE i,
    blob_length TYPE i.
    host = p_host .
    DESCRIBE FIELD p_password LENGTH dstlen IN CHARACTER MODE.
    CALL 'AB_RFC_X_SCRAMBLE_STRING'
    ID 'SOURCE' FIELD p_password ID 'KEY' FIELD key
    ID 'SCR' FIELD 'X' ID 'DESTINATION' FIELD p_password
    ID 'DSTLEN' FIELD dstlen.
    CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
    user = p_user
    password = p_password
    host = host
    rfc_destination = dest
    IMPORTING
    handle = hdl
    EXCEPTIONS
    not_connected = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    CONCATENATE 'cd' ftppath INTO ftppath SEPARATED BY space .
    CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
    handle = hdl
    command = ftppath
    TABLES
    data = result
    EXCEPTIONS
    command_error = 1
    tcpip_error = 2.
    IF sy-subrc = 0 .
    CLEAR result .
    REFRESH result .
    CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
    handle = hdl
    command = 'ascii'
    TABLES
    data = result
    EXCEPTIONS
    command_error = 1
    tcpip_error = 2.
    IF sy-subrc = 0 .
    DESCRIBE TABLE iresult LINES lines.
    blob_length = lines * width .
    clear : lines.
    Delete the existing file
    CONCATENATE 'del' ftpfile INTO delfile SEPARATED BY SPACE.
    CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
    handle = hdl
    command = delfile
    TABLES
    data = result
    EXCEPTIONS
    command_error = 1
    tcpip_error = 2.
    *End of deleting the existing file
    CALL FUNCTION 'FTP_R3_TO_SERVER'
    EXPORTING
    handle = hdl
    fname = ftpfile
    blob_length = blob_length
    TABLES
    blob = iresult
    EXCEPTIONS
    TCPIP_ERROR = 1
    COMMAND_ERROR = 2
    DATA_ERROR = 3
    OTHERS = 4.
    IF sy-subrc 0 .
    WRITE 'Error in writing file to ftp' .
    ELSE.
    WRITE 'File downloaded on the ftp server successfully'.
    ENDIF.
    ENDIF.
    ELSE.
    WRITE : 'Path on ftp not found : ' , ftppath .
    ENDIF.
    CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
    handle = hdl.
    CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
    destination = 'SAPFTP'
    EXCEPTIONS
    OTHERS = 1.
    ELSE.
    WRITE 'Could not connect to ftp' .
    ENDIF.
    ENDFORM. " FTPFINANCEACCESS_DOWNLOAD
    AT SELECTION-SCREEN OUTPUT.
    LOOP AT SCREEN.
    IF screen-name = 'PASSWORD'.
    screen-invisible = '1'.
    MODIFY SCREEN.
    ENDIF.
    ENDLOOP.

  • Adapter Module Error-Sending excel file as an attachment of the mail

    Hi ,
    My scenario is as follows
    1)I am sending an excel file as an attachment of the mail.I need to read that excel attachment as a payload.
    So mail adapter is used in sender side.
      To configure this, have used standard PayloadSwapBean  module with proper module key.
      Next to convert excel to XML another custom adapter module is being used.
    Both this adapter module , I configured into the CC of sender mail adapter.
    The order in which adapter modules are being used in the sender CC are as follows
    1)localejbs/AF_Modules/PayloadSwapBean
    2)localejbs/MDPExcelToXMLConversion
    3)sap.com/com.sap.aii.adapter.mail.app/XIMailAdapterBean
    MDPExcelToXMLConversion-Custom adapter module written to convert excel to xml.
    I am getting the following error
    exception caught during processing mail message [4899]com.sap.aii.af.lib.mp.module.ModuleException
    And also,
    no messages in coming MONI of PI.
    Pls suggest what to do.
    Thanks
    Ayan

    Shabarish,
    Will the ordering in which the adapter modules(In this case there are two-PayloadSwapBean & MDPExcelToXML) are appearing into Module tab of sender adapter matter?
    Firstly, what is happenning
    1)If I take out the custom  adapter module MDPExcelToXML and put only PayloadSwapBean  then it is successfully converting mail attachment into the main Payload i.e PayloadSwapBean   module is working.
    2)Nextly, my local code( i.e java code without including standard Module specific method like ejbActivate(),ejbPassivate(),process()  etc etc.)) for MDPExcelToXML is successfuly converting the excel file into the XML file.Then I am making the local code into adapter module specific code and deploying that.
    A few question arises here,
    Do I need to do any specific configurations here in PI for this particular things.Maybe both the adapter module is clashing with each other.
    And also using tracing and logging into my custom adapter module code.Getting the following error,
    java.io.IOException: Unable to read entire header; 116 bytes read; expected 512 bytes#
    Thanks
    Ayan

  • Uses of custom adapter module

    hi all,
    I am doing a POC on exploring custom adapter modules. Can anyone please help me in understanding various possible uses of adapter module?
    I already know about creating PDF file, Reading/Writing Excel file, Encode/Decode, setting FileName, Sending attachment through Mail Adapter. Any other possible use of adapter module?
    Thanks,
    Mayank

    hi Jyothi,
    Now i am getting following error:
    Error jxl.read.biff.BiffException: Unable to recognize OLE stream
    My lines of code are:
                   System.out.println("01");
                   FileInputStream fis = new FileInputStream("C:
    Documents and Settings
    Mayank
    Desktop
    mayank1.xls");
                   System.out.println("001");
                   String str = fis.toString();
                   System.out.println("0001");
                   byte src [] = str.getBytes();
                   System.out.println("00001");
                   ByteArrayInputStream f5 = new ByteArrayInputStream(src);
                   System.out.println("000001");
                   Workbook workbook1 = Workbook.getWorkbook(f5);
                   System.out.println("000002");
    i am using lines because i will be converting xmlpayload to bytestream in actual module code.
    And output i am getting is:
    01
    001
    0001
    00001
    000001
    Error jxl.read.biff.BiffException: Unable to recognize OLE stream
    which means there is some problem in line
    Workbook workbook1 = Workbook.getWorkbook(f5);
    Also when i am reading file using:
    Workbook workbook = Workbook.getWorkbook(new FileInputStream("C:
    Documents and Settings
    Mayank
    Desktop
    mayank1.xls")); ,, it's working.
    Thanks,
    Mayank

  • Adapter Module for Sender File Adapter to access a Flat file

    Hi,
    We have a scenario where the source is a flat file.I want to develop an Adapter Module to make a small change to every line in the Flat file.
    Now how do we read a flat file in the Adapter Module?Coz the flat file will be converted to XML file by the Standard Adapter Module of the File adapter.
    Please help me out with this.
    Thank you,
    Anu.

    Hi Anu,
    If you are not using Content Conversion option Standard Adapter Module does not convert the Flat file to XML .
    You can directly access the payload as it is in flat file in the Adapter Module and make changes.
    Use the Standard classes ModuleData & moduleContext to fetch the Payload.
    chk this :
    Customized Sender Adapter Module
    XI: Read data from PDF file in Sender Adapter
    regards
    Ganga

  • Adapter Module not working in Sender Communication Channel working in recie

    Hi
    I have written one adapter module. IF i give that Adapter Module in Sender Communication channel its not working. If i give that in Reciever Communication Channel its working. If i mention in both the channels then its working in sender communication channel also.But in only sender communication channel its not working in only reciever communication channel its working Can any one tell me why its happening
    Thanks & Regards
    Ravi Shankar B
    Message was edited by:
            RaviShankar B
    Message was edited by:
            RaviShankar B
    Message was edited by:
            RaviShankar B

    hi
    if its problem with my code why its working if i give the adapter module in both the communication channels?If i give in only sender communication channel the module is not invoking. its not showing any auditlogs.Can any one please help me
    OUTBOUND is for sender
    INBOUND is for reciever right.?
    the following code i have written
    public ModuleData process(
              ModuleContext moduleContext,
              ModuleData inputModuleData)
              throws ModuleException {
              String SIGNATURE =
                   "process(ModuleContext moduleContext, ModuleData inputModuleData)";
              Object obj = null;
              Message msg = null;
              String filename = null;
              AuditMessageKey amk = null;
              try {
                   obj = inputModuleData.getPrincipalData();
                   msg = (Message) obj;
                   System.out.println("&&&&&&&&&&&&&&&&&" + msg);
                   if (msg.getMessageDirection().equals(MessageDirection.OUTBOUND)){
                        amk = new AuditMessageKey(msg.getMessageId(),AuditDirection.OUTBOUND);
                        Audit.addAuditLogEntry(amk,AuditLogStatus.SUCCESS,">>>>>>>>>>>>>>> etHostName: Module called"+ i++);
                   }else{
                        File filename1 = new File("
    10.7.1.43
    XI
    source","text.txt");
                        filename1.createNewFile();
                        amk = new AuditMessageKey(msg.getMessageId(),AuditDirection.INBOUND);
                        Audit.addAuditLogEntry(amk,AuditLogStatus.SUCCESS,">>>>>>>>>>>>>>> etHostName: Module called"+ i++);
                   System.out.println("**************" + amk + "***********");
              } catch (Exception e) {
                   Audit.addAuditLogEntry(amk,AuditLogStatus.SUCCESS,">>>>>>>>>>>>>>> GetHostName: Error Module called");
                   e.printStackTrace(System.err);
                   ModuleException me = new ModuleException(e);
                   throw me;
              // Read the channel ID, channel and the module configuration
              try {
                   Hashtable mp = (Hashtable)inputModuleData.getSupplementalData("module.parameters");
                   if(mp != null){
                        filename = (String)mp.get("FileName");
                        Audit.addAuditLogEntry(amk,AuditLogStatus.SUCCESS,"Host >>>  Element Name is set to {0}"+filename );
                   }else{               
                        Audit.addAuditLogEntry(amk,AuditLogStatus.WARNING,"HostElementName parameter is not set. Default used: HostName.");
                        filename = "FileName";
              } catch (Exception e) {
                   e.printStackTrace(System.err);
                   Audit.addAuditLogEntry(amk,AuditLogStatus.ERROR,"Cannot read the module context and configuration data");
                   ModuleException me = new ModuleException(e);
                   throw me;
              try {
                   XMLPayload xmlpayload = msg.getDocument();
                   DocumentBuilderFactory factory;
                   factory = DocumentBuilderFactory.newInstance();
                   DocumentBuilder builder = factory.newDocumentBuilder();
                   Document document =
                        builder.parse((InputStream) xmlpayload.getInputStream());
                   Element rootNode = document.getDocumentElement();
                   if (rootNode != null) {
                        Element childElement = document.createElement("filename");
                        childElement.appendChild(document.createTextNode(filename));
                        rootNode.appendChild(childElement);
                   // Transforming the DOM object to Stream object.
                   TransformerFactory tfactory = TransformerFactory.newInstance();
                   Transformer transformer = tfactory.newTransformer();
                   Source src = new DOMSource(document);
                   ByteArrayOutputStream myBytes = new ByteArrayOutputStream();
                   Result dest = new StreamResult(myBytes);
                   transformer.transform(src, dest);
                   byte[] docContent = myBytes.toByteArray();
                   if (docContent != null) {
                        xmlpayload.setContent(docContent);
                        inputModuleData.setPrincipalData(msg);
              } catch (Exception e) {
                   e.printStackTrace(System.err);
                   Audit.addAuditLogEntry(amk,AuditLogStatus.ERROR,"Cannot read the module context and configuration data");
                   ModuleException me = new ModuleException(e);
                   throw me;
              return inputModuleData;
    Best Regards
    Ravi Shankar B
    Message was edited by:
            RaviShankar B
    Message was edited by:
            RaviShankar B

  • Mail Sender to Abap Proxy Receiver with Attachements

    Hi All,
    Scenario: I need to create a ticket in Solman from a mail. I intend to do the scenario as Mail sender to Abap Proxy receiver asynchronous.
    I have configured my sender mail adapter and am able to get the mails in XI. The attachements also appear in Inbound payload as MailAttachement-1, MailAttachement-2 etc. I have checked use mail packege and keep attachements in sender adapter.
    Transport Protocol: IMAP4
    Message Protocol: XIPAYLOAD
    Queries:
    1. My Inbound Data Type is the mail Package -- ximail30_xsd. Here in sxmb_moni I can see the mail attributes like from, to and the mail body in content. But How can I read the attachements in my message mapping.
    2. How can I pass these attachements to Abap Proxy ( I do not need to alter attachments only pass to proxy ). These attachements have to be attached to the Solman ticket in SOLMAN server.
    Appreciate your kind response to my above queries.
    Thanks.
    Regards,
    Siddhesh S.Tawate
    PS: I have tried using PayloadSwapBean in adapter module but still the content at source remains same.

    Hi,
    Please find below the part of code that might help you. I have given code only responsible for attachements part of the ticket.
    loop at lt_attach into l_attachment.
            count = count + 1.
            if count = 1.
              first_line = 1.
            endif.
            l_type = l_attachment->GET_CONTENT_TYPE( ).
            split l_type at '"' into l_type
                                     file_name
                                     l_name.
            l_name = file_name.
            split file_name at '.' into file_name
                                        file_type.
            l_xstring = l_attachment->GET_BINARY_DATA( ).
            strlen = xstrlen( l_xstring ).
            Compute int = ( strlen div 255 ).
            Compute rem = ( strlen mod 255 ).
            if rem <> 0.
              int = int + 1.
            endif.
            count1 = int.
            if count = 1.
              last_line = count1.
            else.
              if int = 1.
                first_line = last_line.
              else.
                last_line = first_line + count1.
              endif.
            endif.
            wa_APPX_HEADERS-APPXNO = count.
            wa_APPX_HEADERS-DESCR = l_name.
            wa_APPX_HEADERS-FILETYP = file_type.
            wa_APPX_HEADERS-FILENAM = l_name.
            wa_APPX_HEADERS-FILEFM_UL = 'BIN'.
            wa_APPX_HEADERS-FIRSTL = first_line.
            wa_APPX_HEADERS-LASTL = last_line.
            wa_APPX_HEADERS-FILELEN = strlen.
            wa_APPX_HEADERS-LAST_USR = sy-uname.
            GET TIME STAMP FIELD wa_appx_headers-TIMESTAMP.
            append wa_APPX_HEADERS to it_APPX_HEADERS.
            while count1 <> 0.
              count1 = count1 - 1.
              if count1 <> 0.
                wa_APPX_LINES_bin-LINE = l_xstring+0(255).
                shift l_xstring left by 255 places in BYTE MODE.
              ELSE.
                wa_APPX_LINES_bin-LINE = l_xstring.
              endif.
              append wa_APPX_LINES_bin to it_APPX_LINES_bin.
              clear: wa_APPX_LINES_bin, wa_APPX_LINES.
            endwhile.
            first_line = last_line + 1.
            clear: strlen, count1, file_name, file_type, l_type, int, rem, l_xstring, l_attachment.
          endloop.
    CALL FUNCTION 'BAPI_NOTIFICATION_CREATE'
            EXPORTING
              NOTIF_EXT                = wa_NOTIF_EXT
            NOTIF_CRM                = wa_NOTIF_CRM
      IBASE_DATA               =
         IMPORTING
           NUMBER                   = Refnum
           NUMB                     = Numb
           REFNUM                   = Ticket_No
           SYSID                    = SYSID
            TABLES
              NOTIF_PARTNERS           = it_NOTIF_PARTNERS
            NOTIF_NOTES              = it_NOTIF_N_EXT
              NOTIF_SAP_DATA           = it_NOTIF_SAP_DATA
            NOTIF_TEXT_HEADERS       = it_NOTIF_TEXT_HEADERS
            NOTIF_TEXT_LINES         = it_NOTIF_TEXT_LINES
            APPX_HEADERS             = it_APPX_HEADERS
            APPX_LINES               = it_APPX_LINES
            APPX_LINES_BIN           = it_APPX_LINES_BIN
             RETURN                   = RETURN
    Please observe how first and last line of attachement is calculated. That is what created problem for me initially.
    Hope this helps.
    Regards,
    Siddhesh S.Tawate

  • MalformedInputException Error in Adapter module for SFTP channel

    Dear All,
    I am using MessageTransformBean in adapter module for Plain to XML conversion. The channel works fine in all the cases but when I recieve     "  ì " or few more special characters in the file my channel does not pick file and show below error.
    Error: com.aedaptive.adapter.sftp.SFTPException : Aborting processing: com.sap.aii.af.mp.module.ModuleException: Transform: failed to execute the transformation: com.sap.aii.messaging.adapter.trans.TransformException: Error converting Message: 'sun.io.MalformedInputException'; nested exception caused by: sun.io.MalformedInputException caused by: com.sap.aii.messaging.adapter.trans.TransformException: Error converting Message: 'sun.io.MalformedInputException'; nested exception caused by: sun.io.MalformedInputException
    I am using below parameter value in adapter module.
    Transform.Class : com.sap.aii.messaging.adapter.Conversion
    Transform.ContentType : text/xml;charset=ISO-8859-1
    Please help me if any of you have faces such error in your developments.
    Avanish

    Hi Grzegorg,
    I have tried using UTF-8 encoding in my channel but this doesn't work. Communication cahnnel is still giving same problem.
    Error: com.aedaptive.adapter.sftp.SFTPException : Aborting processing: com.sap.aii.af.mp.module.ModuleException: Transform: failed to execute the transformation: com.sap.aii.messaging.adapter.trans.TransformException: Error converting Message: 'sun.io.MalformedInputException'; nested exception caused by: sun.io.MalformedInputException caused by: com.sap.aii.messaging.adapter.trans.TransformException: Error converting Message: 'sun.io.MalformedInputException'; nested exception caused by: sun.io.MalformedInputException
    The file which we are trying to process have character  Ì and as far as my serach is concerned i think this belongs to charset ISO-8859-1.
    Any more suggestion Guys to solve this problem.
    Thanks and Regards
    Avanish

  • Automatic mail sending at good receipt

    Hello friends
    When a goods receipt against a PO (movement type 101) is done into any plant , an e-mail should be sent to ‘[email protected] ’ stating:
    Material # XXXX quantity XXX has been received into Plant XXXX (field WERKS) Storage Location XXXX (field LGORT) and the date received in.
    Plz suggest how to do this.
    what are the tables that can be used
    wat are the fms that can be used etc
    where this can be configuered,, or done thru ABAP

    Hi,
    1.create an enhancement project using enhancement number:MBCF0005..
    in CMOD and in the below fuction module exit you can add you logic to send the mail.
    <b>EXIT_SAPM07DR_001.</b> in INCLUDE ZXMBCU05 .
    2.you can get all the required data in the MSEG table.
    3. you can use the following fuction module to send the email.
    'SO_NEW_DOCUMENT_ATT_SEND_API1'
    below is the sample code..
    REPORT ZPAVAN_EXAMPLE.
    DATA: OBJPACK     LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
          OBJHEAD     LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
          OBJBINLIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
          OBJTXTLIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
          RECLISTLIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
          DOC_CHNGLIKE SODOCCHGI1,
          TAB_LINES LIKE SY-TABIX.
    PARAMETER P_EADDR LIKE RECLIST-RECEIVER.    "EXTERNAL E-MAIL ADDRESS
    DOC_CHNG-OBJ_NAME = 'SENDFILE'.
    DOC_CHNG-OBJ_DESCR = 'SEND EXTERNAL MAIL'.
    OBJTXT = 'LINE 1 OF MESSAGE'.
    APPEND OBJTXT.
    OBJTXT = 'LINE 2 OF MESSAGE'.
    APPEND OBJTXT.
    DESCRIBE TABLE OBJTXT LINES TAB_LINES.
    READ TABLE OBJTXT INDEX TAB_LINES.
    DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
    CLEAR OBJPACK-TRANSF_BIN.
    OBJPACK-HEAD_START = 1.
    OBJPACK-HEAD_NUM = 0.
    OBJPACK-BODY_START = 1.
    OBJPACK-BODY_NUM = TAB_LINES.
    OBJPACK-DOC_TYPE = 'RAW'.
    APPEND OBJPACK.
    RECLIST-RECEIVER = P_EADDR.
    RECLIST-REC_TYPE = 'U'.
    APPEND RECLIST.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
         EXPORTING
              DOCUMENT_DATA              = DOC_CHNG
              PUT_IN_OUTBOX              = 'X'
         TABLES
              PACKING_LIST               = OBJPACK
              OBJECT_HEADER              = OBJHEAD
              CONTENTS_BIN               = OBJBIN
              CONTENTS_TXT               = OBJTXT
              RECEIVERS                  = RECLIST
         EXCEPTIONS
              TOO_MANY_RECEIVERS         = 1
              DOCUMENT_NOT_SENT          = 2
              OPERATION_NO_AUTHORIZATION = 3
              OTHERS                     = 4.
    IF SY-SUBRC EQ 0.
      WRITE:/ 'E-MAIL MESSAGE SENT TO', P_EADDR.
    ELSE.
      WRITE:/ 'COULD NOT SEND E-MAIL TO', P_EADDR.
    ENDIF.
    thanks and Regards,
    Pavankumar

  • Error in Adapter Module to unzip files

    Hello ,
    I wish to unzip many files with use of an adapter module
    To du this I use following code
    package de.lsv.moduledevelopement;
    import java.io.*;
    import java.util.Hashtable;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    import javax.ejb.CreateException;
    import com.sap.aii.af.mp.module.Module;
    import com.sap.aii.af.mp.module.ModuleContext;
    import com.sap.aii.af.mp.module.ModuleData;
    import com.sap.aii.af.mp.module.ModuleException;
    import com.sap.aii.af.ra.ms.api.Message;
    import com.sap.aii.af.ra.ms.api.MessageDirection;
    import com.sap.aii.af.ra.ms.api.Payload;
    import com.sap.aii.af.ra.ms.spi.Trace;
    import com.sap.aii.af.service.auditlog.Audit;
    import com.sap.aii.af.service.auditlog.AuditDirection;
    import com.sap.aii.af.service.auditlog.AuditLogStatus;
    import com.sap.aii.af.service.auditlog.AuditMessageKey;
    * @ejbLocal <{de.lsv.moduledevelopement.UnZipFilesLocal}>
    * @ejbLocalHome <{de.lsv.moduledevelopement.UnZipFilesLocalHome}>
    * @stateless
    public class UnZipFilesBean implements SessionBean, Module {
         static AuditMessageKey amk = null;
         static String auditStr = "UnzipFilesBean - ";
         static ModuleException mEx = null;
         public static final String VERSION_ID =
              "$Id://de.lsv.moduledevelopement.UnZipFilesBean.java#1 $";
         private static final Trace TRACE = new Trace(VERSION_ID);
         public void ejbRemove() {
         public void ejbActivate() {
         public void ejbPassivate() {
         public void setSessionContext(SessionContext context) {
              myContext = context;
         private SessionContext myContext;
          * Create Method.
         public void ejbCreate() throws CreateException {
              // TODO : Implement
         /* (non-Javadoc)
          * @see com.sap.aii.af.mp.module.Module#process(com.sap.aii.af.mp.module.ModuleContext, com.sap.aii.af.mp.module.ModuleData)
         public ModuleData process(
              ModuleContext moduleContext,
              ModuleData inputModuleData)
              throws ModuleException {
              Object obj = null;
              Message msg = null;
              Payload attachment = null;
              //initializing variables for module parameters
              String modkey = "";
              String fileMask = "";
              String directory = "";
              String saveDirectory = "";
              //     String newMimeType = "";
              //     String newAttachmentName = "";
              //     String newAttachmentExtension = "";
              //     String newAttachmentNameReplace = "";
              //this block is to manage the adapter when is not file/FTP
              try {
                   //get the XI Message
                   obj = inputModuleData.getPrincipalData();
                   msg = (Message) obj;
                   // create AuditMessageKey object to write audit log.
                   if (msg.getMessageDirection() == MessageDirection.INBOUND)
                        amk =
                             new AuditMessageKey(
                                  msg.getMessageId(),
                                  AuditDirection.INBOUND);
                   else
                        amk =
                             new AuditMessageKey(
                                  msg.getMessageId(),
                                  AuditDirection.OUTBOUND);
                   // ******start get the module parameters from the configuration******
                   modkey = moduleContext.getContextData("module.key");
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "Module Configuration Key: " + modkey);
                   //***** einlesen der Moduke Parameter******************
                   //***** DateiMaske
                   fileMask = moduleContext.getContextData("FileMask");
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "FileMask: " + fileMask);
                   // check ob fileMask definiert ist
                   if (fileMask == null || fileMask.equalsIgnoreCase("")) {
                        //if no attachment name is specified in the module configuration the module will end the execution
                        throw mEx =
                             new ModuleException(
                                  auditStr
                                       + "!FileMask in Modulconfiguration nicht definiert!");
                   //***** DateiMaske2
                   String fileMask2 = moduleContext.getContextData("FileMask2");
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "FileMask2: " + fileMask2);
                   //***** Directory
                   directory = moduleContext.getContextData("Directory");
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "Directory: " + directory);
                   // Fehler wenn Directory nicht definiert
                   if (directory == null || directory.equalsIgnoreCase("")) {
                        //the module will end the execution
                        throw mEx =
                             new ModuleException(
                                  auditStr
                                       + "Directory in Modulconfiguration nicht definiert");
                   //***** Sicherungs Verzeichnis
                   saveDirectory = moduleContext.getContextData("SaveDirectory");
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "SaveDirectory: " + saveDirectory);
                   // entpacken aufrufen
                   entpacke(directory, saveDirectory, fileMask);
                   if (fileMask2.length() > 0) {
                        entpacke(directory, saveDirectory, fileMask2);
                   //update the XI Message
                   inputModuleData.setPrincipalData(msg);
              } catch (Exception e) {
                   String errorMessage =
                        auditStr + "Error bei der . Exception:" + e.getMessage();
                   Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR, errorMessage);
                   throw mEx = new ModuleException(auditStr + errorMessage);
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "Verarbeitung beendet ");
              return inputModuleData;
         //+++++++++++++++++++++++++
         private static void entpacke(
              String directory,
              String saveDirectory,
              String mask)
              // TODO Auto-generated method stub
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "Funktion entpacke");
              if (!directory.endsWith("\")) {
                   directory = directory + "\";
              } // if
              File f;
              f = new File(directory);
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "f = new File(directory)");
    //          // Achtung Klasse in einer Klasse :-)
    //          String[] strFiles = f.list(new FilenameFilter() {
    //               public boolean accept(File file, String filename) {
    //                    Wildcard wildcard1 = new Wildcard(mask);
    //                    Audit.addAuditLogEntry(
    //                         amk,
    //                         AuditLogStatus.SUCCESS,
    //                         auditStr + "wc1");
    //                    return wildcard1.match(filename, false);
              String [] strFiles = f.list(new MyFilter(mask));
              // Liste der Gefundenen dateien
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "Anzahl gepackter Dateien: " + strFiles.length);
              //System.out.println( strFiles.length + " Dateien zum entpacken");
              for (int i = 0; i < strFiles.length; i++) {
                   Audit.addAuditLogEntry(
                        amk,
                        AuditLogStatus.SUCCESS,
                        auditStr + "verarbeite Datei: : " + strFiles<i>);
                   //     System.out.println("f[" + i + "]=" + strFiles<i>);
              } // for
              // *****entpacken**********************
              for (int i = 0; i < strFiles.length; i++) {
                   try {
                        byte[] buf = new byte[4096];
                        ZipInputStream in =
                             new ZipInputStream(
                                  new FileInputStream(directory + strFiles<i>));
                        Audit.addAuditLogEntry(
                             amk,
                             AuditLogStatus.SUCCESS,
                             auditStr + "Entpacke " + directory + strFiles<i>);
                        //System.out.println("Entpacke " + directory + strFiles<i>);
                        int count = 0;
                        while (true) {
                             count++;
                             // Nächsten Eintrag lesen
                             ZipEntry entry = in.getNextEntry();
                             if (entry == null) {
                                  break;
                             // Beschreibung ausgeben
                             Audit.addAuditLogEntry(
                                  amk,
                                  AuditLogStatus.SUCCESS,
                                  auditStr + entry.getName());
                             //System.out.println(entry.getName());
                             // Ausgabedatei erzeugen
                             FileOutputStream out =
                                  new FileOutputStream(directory + entry.getName());
                             int len;
                             while ((len = in.read(buf)) > 0) {
                                  out.write(buf, 0, len);
                             out.close();
                             // Eintrag schließen
                             in.closeEntry();
                        } // while
                        in.close();
                        Audit.addAuditLogEntry(
                             amk,
                             AuditLogStatus.SUCCESS,
                             auditStr + count + "Dateien entpackt");
                        //System.out.println(count + "Dateien entpackt");
                        // verschieben
                        if (saveDirectory.length() > 0) {
                             File quelle = new File(directory + strFiles<i>);
                             File ziel = new File(saveDirectory + strFiles<i>);
                             boolean bla = quelle.renameTo(ziel);
                             if (!bla) {
                                  Audit.addAuditLogEntry(
                                       amk,
                                       AuditLogStatus.SUCCESS,
                                       auditStr
                                            + strFiles<i>
                                            + " konnte nicht verschoben werden");
                             } else {
                                  Audit.addAuditLogEntry(
                                       amk,
                                       AuditLogStatus.SUCCESS,
                                       auditStr
                                            + strFiles<i>
                                            + "verschoben nach "
                                            + saveDirectory);
                                  //          System.out.println(
                                  //               strFiles<i> + "verscgoben nach " + directory + "sik//");
                        } // if
                   } catch (Exception e) {
                        String errorMessage =
                             auditStr
                                  + "Error in entpacken. Exception:"
                                  + e.getMessage();
                        Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR, errorMessage);
                   } // catch
                   // *****entpacken*************
              } // for
         } //entpacke
    } // UnzipFilesBean
    class Wildcard {
         static AuditMessageKey amk = null;
         static String auditStr = "WildCard - ";
         static ModuleException mEx = null;
         private final String wildcardString;
          * Der Konstruktor für die WildcardSuche.
          * @param wildcardString
          *            Der WildcardString
         public Wildcard(String wildcardString) {
              this.wildcardString = wildcardString;
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "Constructor");
          * Die Methode, welche den Vergleich durchführt.
          * @param str
          *            Der String, welcher darauf überprüft werden soll, ob er dem
          *            WildcardString entspricht.
          * @return true Wenn der String dem wildcardString entspricht.
         public boolean match(String str, boolean fCasesensitive) {
              if (str == null || wildcardString == null) {
                   return false;
              return recursiveMatch(wildcardString, str, fCasesensitive);
          * Hier wird der eigentliche Vergleich durchgeführt
          * @param strWildcard
          *            Der Wildcardstring, z.B.: "Test*"
          * @param str
          *            Der zu überprüfende String, z.B. "Testlauf"
          * @return true, wenn eine Übereinstimmung vorhanden ist, sonst false
         private boolean recursiveMatch(
              String strWildcard,
              String str,
              boolean fCasesensitive) {
              while (true) {
                   if (strWildcard.length() == 0)
                        return str.length() == 0;
                   char ch = strWildcard.charAt(0);
                   switch (ch) {
                        case '?' :
                             if (str.length() == 0)
                                  return false;
                             break;
                        case '*' :
                             strWildcard = strWildcard.substring(1);
                             while (true) {
                                  if (recursiveMatch(strWildcard, str, fCasesensitive))
                                       return true;
                                  if (str.length() == 0)
                                       return false;
                                  str = str.substring(1);
                        default :
                             if (str.length() == 0)
                                  return false;
                             if (fCasesensitive) {
                                  if (ch != str.charAt(0))
                                       return false;
                             } else if (
                                  Character.toLowerCase(ch)
                                       != Character.toLowerCase(str.charAt(0)))
                                  return false;
                             break;
                   strWildcard = strWildcard.substring(1);
                   str = str.substring(1);
         //++++++++++++++++++++++++++
    } // class
    /** Nun der eigentliche Filter */
    class MyFilter implements FilenameFilter {
         static AuditMessageKey amk = null;
         static String auditStr = "MyFilter - ";
         static ModuleException mEx = null;
         String fileMask;
         public MyFilter(String fileMask) {
              this.fileMask = fileMask;
              Audit.addAuditLogEntry(
                   amk,
                   AuditLogStatus.SUCCESS,
                   auditStr + "Constructor");
         } //constructor
          public boolean accept(File file, String filename) {
              // TODO Auto-generated method stub
              //fileMask = "?5LBL*";
              Wildcard wildcard1 = new Wildcard(fileMask);
              return wildcard1.match(filename, false);
    } //class
    But in Audit Protocol it failed after:
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - Module Configuration Key: 2
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - FileMask: ?5LBL???
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - FileMask2:
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - Directory: //transfer//X1E//100//99//lb//ein
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - SaveDirectory: //transfer//X1E//100//99//lb//ein_s
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - Funktion entpacke
    17.09.2008 17:33:19     Erfolgreich     UnzipFilesBean - f = new File(directory)
    17.09.2008 17:33:19     Fehler     UnzipFilesBean - Error bei der . Exception:null
    I could not find the error??
    Were there any log files to look into?
    regarts
    Zimmerningkat

    Hi Ralf,
    I am late..........
    I am bit confused with your explanation.
    1. Does all zip files will be picked by file adapter in one shot or is it conditional, since you have a XML descriptor file in firts zip file and the XML files describes the list of JPEG files which might be stored in the other zipped JPEG files?
    2. Can you tell the exact flow of your scenario
    3. Receiver in your scenario?
    Thanks,
    Gujjeti.

  • Parameters retrieval in adapter module

    I want to retrieve following details in an adapter module
    1) Sender Service : message.getFromService().getName()
    2) Sender Interface :
    3) Sender Namespace :
    4) Reciever Service : message.getToService().getName()
    5) Reciever Namespace :
    6) Reciever Interface :
    How can i retrieve 2,3,5 & 6?
    Regards,
    Amol

    My suggestion it´s to write the information you need on specifig tag in the payload, during the message mapping, with a custom function like this:
    String namespace;
    java.util.Map map;
    map = container.getTransformationParameters();
    namespace = (String) map.get(StreamTransformationConstants.INTERFACE_NAMESPACE);
    return namespace;
    For more information:
    http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/content.htm
    After this you can read the informations in the adapter module, and delete the added tag in order to have a clean payload without the additional parameters

  • Automator to select e-mail sender and copy text on excel

    I need to use automator to select e-mail sender, extract specific text and append it on an excel sheet. is it possible?
    I have OS Snow Leopard; Mail; a Master Excel 2011 file; several Output Excel 2011 files for the output
    I want Automator to check daily if new mails, on a specific account, have been received that match the mail address with a given list of names and related mail address in the Master Excel.
    If a new mail is present, Automator should: pick up specific text in the mail body; select and open the related Output Excel file (each output Excel file is saved with the name linked with the e-mail address in the Master Excel); append the text on the given worksheet in the Output Excel file; save the output file.
    This should be done with all the received mails that match with the Master Excel file
    Is it possible do this kind of thing with automator? may be with the support of VBA for some parts?
    I would appreciate any suggestion or idea to resources to investigate

    Hi Stephen,
    I had the same problem and it is a software bug.
    SAP release for us a special sap note number 1278473 - "Followup E-mail doesnot contain text of Notes of Activity".
    I dont know if this note was release for all customer, but you can open a message to sap asking help.
    My message at sap was 946981/2008.
    Regards,
    Lalas

  • How to create Adapter modules

    hi experts,
    May i know how to create adapter modules..
    Thanks & Regards
    guna

    Hi,
    Start with basics:
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/7bf6e190-0201-0010-83b7-cc557eb76abe
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3bdc14e1-0901-0010-b5a9-a01e29d75a6a
    Some good Examples to start with :
    Rename Attachment Adapter Module
    Copy a file with same filename using XI
    Customized Adapter Module
    Regards

  • Converting INVOIC02 idoc to EDIFACT INVOIC message (Using Adapter Module

    Hi Friends,
    We are sending customer idoc (INVOIC02) from R/3 to external system through PI. We want to generate EDIFACT output file (message type : INVOIC).
    Is it possible to convert IDoc message to EDI file format through java adapter module ? Will adapter module support this  without using Seeburger adapter ?
    kindly clarify, friends.
    Kind regards,
    Jegathees P.

    There is an alternative to Seeburger.
    DataDirect also has complete EDI-XML conversion by way of deploying a module which is called from an adapter. The range of parameters with the conversion is also quite extensive, allowing tolerance for partners who may have included non-standard EDI qualifiers and such.  The XML tags make for easier mapping.  StylusStudio XML Suite includes the EDI<->XML adapter so you can try the conversions each way directly in that package.  If you are happy with it, you need to then purchase the package from DataDirect.  We did this and implemented EDI for X12 and EDIfact, including Orders and Invoices and some other messages.  The communications part was not included.  We wrote the EDI files and used a separate process to actually send and receive the files. The IDoc <-> EDI mapping  was done using the normal graphical mapping of SAP PI. The Stylus Studio package includes the functionality to generate the XSD, which we imported to SAP PI.

  • Code to retrive the sender and receiver interface names using custome adapter module

    Hello Team,
    I want to develop an custom adapter module which could retrieve the names of the sender and receiver interfaces of the scenario and for that i am trying to use com.sap.aii.af.service.administration.api.monitoring.ProcessContextFactory.ParamSet but i don't know whether this API will support or not and also i don't know how to develop the code using this API so please suggest me some code for it so that i could retrieve the names.
    Thanks you all in advance.
    Regards,
    Avinash.   

    Hi,
    Just ASMA setting will do the needful. Are you planning to rename your target file name. If yes then only you will require UDF.
    Update: Since your directory name will be taken from source file name then you have to use mapping for this, else it will not be possible.
    I don't know if creating a new module for this will help you solve the issue, but in that case rather creating adapter module, mapping will be easier.
    Regards,
    Sarvesh
    Edited by: Sarvesh Singh on Dec 7, 2009 3:04 PM

Maybe you are looking for

  • Settlement service order to CO-PA

    Dear SAP experts, In my current project, we use service order with revenue. So revenue will pe post into service order when it billed. In the end of period, we settled the service order to CO-PA. But when I settle the service order, characteristic "p

  • What is a "sync UI Handler" error mean?

    What does a "sync UI handler" error mean? This happens when I try to sync with my PC in itunes. It tells me there are three conflicts that occured when I synced, 2 calendar and 1 music.

  • Field.set(Object obj, Object value)

    As I parse an XML file (Using SAX XML Reader) I'm also building objects dynamically as I go on parsing. I'm using Field.set() successfully to assign values to String or Integer instance variables, but If one of these objects has an instance variable

  • Same issue Network Discovery not working and Windows Update not working

    I've read the threads.  This is a Vista Ultimate upgrade. My OOOOH My I have clocked 8 hours Everything was working before. I tried all of the recommended  services turning on restarting. Also, ran into the problem of my memory being eaten. Suspected

  • Firefox will not remember Passwords to Hotmail or Live messenger,

    I have gone to option and posted "allow" to cookies, and what ever else I think I should have done, but it still won't remember. I've gone to Hotmail and enabled everything that I thought, but still no luck. I'm getting tired entering my email and pa