2014년 6월 26일 목요일

SAP 웹저장소에 파일 저장후 다운 받기

[출처 : http://itpe.me/87 ]

저장소에 등록하기 위하여 tcode : smw0를 실행
해당패키지에 파일을 등록

  DATA : doc_table      LIKE w3mime OCCURS WITH HEADER LINE.
  DATA : doc_size       TYPE i.
  DATA : doc_type(80)   VALUE soi_doctype_excel_sheet.
  DATA : doc_format(80TYPE c.

* 저장소에서 엑셀을 가져온다.
  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      object_id        =
'TEST_DATA.XLS'
    IMPORTING
      data_size        doc_size 
      document_format  doc_format
      document_type    doc_type
    TABLES
      data_table       doc_table
    EXCEPTIONS
      object_not_jount 1
      internal_error   2
      OTHERS           3.
 

* 엑셀 다운로드
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize  doc_size
      filename      =
'C:\TEMP\TEST_DATA.XLS'
      filetype      'BIN'
      no_auth_check 'X'
    TABLES
      data_tab      doc_table.

2014년 6월 11일 수요일

숫자를 독일식 표시 방법으로 변경하는 방법

SAP 표준 FUNCTION을 사용하면 가능하다.
단 아래와 같이 사용자 로그인 언어가 독일어가 아니라면 아래 FUNCTION을 
변경하면 가능할것이다.

FUNCTION PP_CATT_CONVERT_DECIMAL_POINT.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(MENGE_IMP) LIKE  MSEG-ERFMG
*"       EXPORTING
*"             VALUE(MENGE_EXP) LIKE  MSEG-FIPOS
*"----------------------------------------------------------------------
  MENGE_EXP MENGE_IMP.
  IF MENGE_EXP CS '.' AND SY-LANGU(1'D'.
    MENGE_EXP+SY-FDPOS(1','.
  ENDIF.

ENDFUNCTION.

또는 Replace all occurances of ',' in w_value with '.'.로 변경 가능하다.

2014년 6월 5일 목요일

SAP Table 용량산정

[출처 : http://itpe.me/ }
방법은 두가지.

1. 해당 DB SQL로 처리
2. SAP 프로그램 실행

1. SQL(Oracle 기준)
- directly from SQLPlus
SQL> select table_name, num_rows, blocks/128 "SIZE_MB"
from dba_tables where table_name = 'USR02';

TABLE_NAME          NUM_ROWS     SIZE_MB
------------------------------      ----------           ----------
USR02                       14728            4.890625

2. SAP Program : RSTABLESIZE
대상 테이블넣고 실행하면 Row건수, 실제 용량을 확인 할 수 있음.



SAP JCO설정(Server Side)

[출처 : http://itpe.me/ ]

1. Service Marketplace에서 SAP JCO를 다운로드합니다. http://service.sap.com/connectors    다운1다운2
2. 설치할 서버에 SAP JCO 파일 저장합니다.

3. 서버에 classpath, path 환경변수 지정 후, sapjco.jar 실행합니다.
 
4. 특별한 에러가 없다면, 예제 소스를 이용해 컴파일 합니다.
/**
 * Example5.java - Simple implementation of an (external RFC) server. This example is based on
 * static metadata with non-unicode layout, so the calls only from non-unicode systems can be
 * handled.
 * Property of SAP AG, Walldorf
 * (c) Copyright SAP AG, Walldorf, 2000-2003.
 * All rights reserved.
 */
import com.sap.mw.jco.*;
import java.io.InputStream;
import java.util.*;
/**
 * @version 1.0
 * @author  SAP AG, Walldorf
 */
//******************************************************************************
public class Example5 implements JCO.ServerExceptionListener, JCO.ServerStateChangedListener {
//******************************************************************************
  /**
   *  Implementation of our own repository.
   *  Just dummy extend the basic repository that comes with the JCO package
   */
  static public class Repository extends JCO.BasicRepository implements IRepository {
    /**
     * Creates a new empty repository
     */
    public Repository(String name)
    {
      super(name);
    }
  }
  /** The repository we gonna be using */
  protected static IRepository repository;
  static {
    repository = new Repository("TestRepository");
    // non-unicode definition of functions. The server with this repository can
    // dispatch calls only from non-unicode systems
    //------------------------------------------------------------------------------
    //  Add function 'STFC_CONNECTION'
    //------------------------------------------------------------------------------
    JCO.MetaData fmeta = new JCO.MetaData("STFC_CONNECTION");
    fmeta.addInfo("REQUTEXT", JCO.TYPE_CHAR, 255,   0,  0, JCO.IMPORT_PARAMETER, null);
    fmeta.addInfo("ECHOTEXT", JCO.TYPE_CHAR, 255,   0,  0, JCO.EXPORT_PARAMETER, null);
    fmeta.addInfo("RESPTEXT", JCO.TYPE_CHAR, 255,   0,  0, JCO.EXPORT_PARAMETER, null);
    repository.addFunctionInterfaceToCache(fmeta);
    //------------------------------------------------------------------------------
    //  Add function 'STFC_STRUCTURE'
    //------------------------------------------------------------------------------
    fmeta = new JCO.MetaData("STFC_STRUCTURE");
    fmeta.addInfo("IMPORTSTRUCT", JCO.TYPE_STRUCTURE, 144, 0, 0, JCO.IMPORT_PARAMETER, "RFCTEST");
    fmeta.addInfo("ECHOSTRUCT",   JCO.TYPE_STRUCTURE, 144, 0, 0, JCO.EXPORT_PARAMETER, "RFCTEST");
    fmeta.addInfo("RESPTEXT",     JCO.TYPE_CHAR,      255, 0, 0, JCO.EXPORT_PARAMETER,  null    );
    fmeta.addInfo("RFCTABLE",     JCO.TYPE_TABLE,     144, 0, 0, 0,                    "RFCTEST");
    repository.addFunctionInterfaceToCache(fmeta);
    //------------------------------------------------------------------------------
    // Add the structure RFCTEST to the structure cache
    //------------------------------------------------------------------------------
    JCO.MetaData smeta  = new JCO.MetaData("RFCTEST");
    smeta.addInfo("RFCFLOAT",  JCO.TYPE_FLOAT,  8,  0, 0);
    smeta.addInfo("RFCCHAR1",  JCO.TYPE_CHAR,   1,  8, 0);
    smeta.addInfo("RFCINT2",   JCO.TYPE_INT2,   2, 10, 0);
    smeta.addInfo("RFCINT1",   JCO.TYPE_INT1,   1, 12, 0);
    smeta.addInfo("RFCICHAR4", JCO.TYPE_CHAR,   4, 13, 0);
    smeta.addInfo("RFCINT4",   JCO.TYPE_INT,    4, 20, 0);
    smeta.addInfo("RFCHEX3",   JCO.TYPE_BYTE,   3, 24, 0);
    smeta.addInfo("RFCCHAR2",  JCO.TYPE_CHAR,   2, 27, 0);
    smeta.addInfo("RFCTIME",   JCO.TYPE_TIME,   6, 29, 0);
    smeta.addInfo("RFRDATE",   JCO.TYPE_DATE,   8, 35, 0);
    smeta.addInfo("RFCDATA1",  JCO.TYPE_CHAR,   50,43, 0);
    smeta.addInfo("RFCDATA2",  JCO.TYPE_CHAR,   50,93, 0);
    repository.addStructureDefinitionToCache(smeta);
  }
  /**
   *  Implementation of my own server
   */
  static public class Server extends JCO.Server {
    /**
     *  Create an instance of my own server
     *  @param gwhost the gateway host
     *  @param gwserv the gateway service number
     *  @param progid the program id
     *  @param repository the repository used by the server to lookup the definitions of an inc
     */
    public Server(Properties prop, IRepository repository)
    {
      super(prop,repository);
    }
    /**
     *  Not really necessary to override this function but for demonstration purposes...
     */
    protected JCO.Function getFunction(String function_name)
    {
      JCO.Function function = super.getFunction(function_name);
      return function;
    }
    /**
     *  Not really necessary to override this method but for demonstration purposes...
     */
    protected boolean checkAuthorization(String function_name, int authorization_mode,
        String authorization_partner, byte[] authorization_key)
    {
      /* Simply allow everyone to invoke the services */
      return true;
    }
    /**
     *  Overrides the default method.
     *  Can handle only the two functions STFC_CONNECTION and STFC_STRUCTURE
     */
    protected void handleRequest(JCO.Function function)
    {
      JCO.ParameterList input  = function.getImportParameterList();
      JCO.ParameterList output = function.getExportParameterList();
      JCO.ParameterList tables = function.getTableParameterList();
     
      input.getBinaryStream("XFILE") ; 
      System.out.println("handleRequest(" + function.getName() + ")");
      if (function.getName().equals("STFC_CONNECTION")) {  <------ SAP RFC 호출
        output.setValue(input.getString("REQUTEXT"),"ECHOTEXT");
        output.setValue("This is a response from Example5.java","RESPTEXT");
      }
      else if (function.getName().equals("STFC_STRUCTURE")) {
        JCO.Structure sin  = input.getStructure("IMPORTSTRUCT");
        JCO.Structure sout = (JCO.Structure)sin.clone();
        try {
          System.out.println(sin);
        }
        catch (Exception ex) {
          System.out.println(ex);
        }
        output.setValue(sout,"ECHOSTRUCT");
        output.setValue("This is a response from Example5.java","RESPTEXT");
      }//if
      else if (function.getName().equals("ZFILE_TEST_JCO")) {
       InputStream ttt = input.getBinaryStream("RAW") ;        
       
      }
    }
  }
  /** List of servers */
  JCO.Server srv[] = new JCO.Server[1];
  /**
   *  Constructor
   */
  public Example5()
  {
    // Yes, we're interested in server exceptions
    JCO.addServerExceptionListener(this);
    // And we also want to know when the server(s) change their states
    JCO.addServerStateChangedListener(this);
  }
  /**
   *  Start the server
   */
  public void startServers()
  {
  
 Properties prop = new Properties() ;
 prop.setProperty("jco.server.gwhost", "centsms") ;  <----- SAP Host
 prop.setProperty("jco.server.progid", "JCO_SERVER") ; <----- SAP Destination Program ID
 prop.setProperty("jco.server.gwserv", "sapgw00") ; <----- SAP Gateway
 prop.setProperty("jco.server.unicode", "1") ; <----- Unicode 설정 (소스코드 수정필요!)
    // Server 1 listens for incoming requests from system 1
    // (Change gateway host, service, and program ID according to your needs)
    srv[0] = new Server(prop,repository);
    // Server 2 listens for incoming requests from system 2
    // (Change gateway host, service, and program ID according to your needs)
    //srv[1] = new Server("centsms","sapgw00","JCOSERVER02",repository);
    for (int i = 0; i < srv.length; i++) {
      try {
        srv[i].setTrace(true);
        srv[i].start();
      }
      catch (Exception ex) {
        System.out.println("Could not start server " + srv[i].getProgID() + ":\n" + ex);
      }//try
    }//for
  }
  /**
   *  Simply prints the text of the exception and a stack trace
   */
  public void serverExceptionOccurred(JCO.Server server, Exception ex)
  {
    System.out.println("Exception in server " + server.getProgID() + ":\n" + ex);
    ex.printStackTrace();
  }
  /**
   *  Simply prints server state changes
   */
  public void serverStateChangeOccurred(JCO.Server server, int old_state, int new_state)
  {
    System.out.print("Server " + server.getProgID() + " changed state from [");
    if ((old_state & JCO.STATE_STOPPED    ) != 0) System.out.print(" STOPPED ");
    if ((old_state & JCO.STATE_STARTED    ) != 0) System.out.print(" STARTED ");
    if ((old_state & JCO.STATE_LISTENING  ) != 0) System.out.print(" LISTENING ");
    if ((old_state & JCO.STATE_TRANSACTION) != 0) System.out.print(" TRANSACTION ");
    if ((old_state & JCO.STATE_BUSY       ) != 0) System.out.print(" BUSY ");
    System.out.print("] to [");
    if ((new_state & JCO.STATE_STOPPED    ) != 0) System.out.print(" STOPPED ");
    if ((new_state & JCO.STATE_STARTED    ) != 0) System.out.print(" STARTED ");
    if ((new_state & JCO.STATE_LISTENING  ) != 0) System.out.print(" LISTENING ");
    if ((new_state & JCO.STATE_TRANSACTION) != 0) System.out.print(" TRANSACTION ");
    if ((new_state & JCO.STATE_BUSY       ) != 0) System.out.print(" BUSY ");
    System.out.println("]");
  }
  public static void main(String[] argv)
  {
 
    Example5 obj = new Example5();
    obj.startServers();
  }
}

5. SAP Destination 설정





설치버전 : SAP JCo 2.1.9, JDK1.5.0