Code: Alles auswählen.
REPORT zsm_0001 MESSAGE-ID at.
DATA: mess(128).
CALL FUNCTION 'FUNCTION_SM' DESTINATION 'JAVARFC'
EXCEPTIONS
communication_failure = 1 MESSAGE mess
system_failure = 2 MESSAGE mess
OTHERS = 3.
IF sy-subrc <> 0.
WRITE: 'Fehler: ', mess.
ELSE.
WRITE: 'Alles OK'.
ENDIF.
Code: Alles auswählen.
import java.io.FileOutputStream;
import java.util.GregorianCalendar;
import com.sap.mw.jco.*;
//***********************************************************
public class TestServer implements JCO.ServerExceptionListener, JCO.ServerStateChangedListener
{
//***********************************************************
public static GregorianCalendar cal = new GregorianCalendar();
static public class Repository extends JCO.BasicRepository implements IRepository {
public Repository(String name)
{
super(name);
}
}
protected static IRepository repository;
static {
repository = new Repository("TestRepository");
JCO.MetaData fmeta1 = new JCO.MetaData("FUNCTION_SM");
fmeta1.addInfo("REQUTEXT", JCO.TYPE_CHAR, 255, 0, 0, JCO.IMPORT_PARAMETER, null);
fmeta1.addInfo("ECHOTEXT", JCO.TYPE_CHAR, 255, 0, 0, JCO.EXPORT_PARAMETER, null);
fmeta1.addInfo("RESPTEXT", JCO.TYPE_CHAR, 255, 0, 0, JCO.EXPORT_PARAMETER, null);
repository.addFunctionInterfaceToCache(fmeta1);
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);
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);
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);
}
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(String gwhost, String gwserv, String progid, IRepository repository)
{
super(gwhost,gwserv,progid,repository);
}
/**********************************************************
* handleRequest
***********************************************************/
protected void handleRequest(JCO.Function function) throws Exception
{
JCO.ParameterList input = function.getImportParameterList();
JCO.ParameterList output = function.getExportParameterList();
JCO.ParameterList tables = function.getTableParameterList();
System.out.println("getImportParameterList:" + input);
if (function.getName().equals("FUNCTION_SM")) {
writeFile("Hallo Test" + cal.getTime());
}
else if (function.getName().equals("STFC_CONNECTION")) {
output.setValue(input.getString("REQUTEXT"),"ECHOTEXT");
output.setValue("This is a response from TestServer.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 TestServer.java","RESPTEXT");
}//if
}
}
/** List of servers */
JCO.Server srv[] = new JCO.Server[1];
/**
* Constructor
*/
public TestServer()
{
// 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()
{
// hier bitte die entsprechenden Daten eintragen!!!
srv[0] = new Server("IP Server", "System",
"JAVARFC",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)
{
}
public static void writeFile(String s)
{
byte buffer[] = new byte[80];
try
{
FileOutputStream fos = new FileOutputStream( "c:/_SM/text.txt" );
fos.write( s.getBytes() );
fos.close();
}
catch ( Exception e ) { System.out.println(e); }
}
public static void main(String[] argv)
{
TestServer obj = new TestServer();
obj.startServers();
}
}