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월 11일 수요일
2014년 6월 5일 목요일
SAP Table 용량산정
[출처 : http://itpe.me/ }
방법은 두가지.
1. 해당 DB SQL로 처리
2. SAP 프로그램 실행
1. SQL(Oracle 기준)
- directly from SQLPlus
방법은 두가지.
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
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. 특별한 에러가 없다면, 예제 소스를 이용해 컴파일 합니다.
5. SAP Destination 설정
설치버전 : SAP JCo 2.1.9, JDK1.5.0
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();
}
}
* 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
피드 구독하기:
글 (Atom)






