SAP soll JavaMethode aufrufen

Rund um Java und SAP®.
20 Beiträge • Vorherige Seite 2 von 2 (current)
20 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
Alles ... also von SAP und JAVA??

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hi,

wenn es Dich nicht zuviel Zeit kostet, wäre das klasse. Dann wäre hier ein schönes Beispiel für andere, die sich an dieser Ecke evtl. noch abmühen ;-)

Gruss und Danke,

Jens

Beitrag von steffi_ma (ForumUser / 55 / 0 / 0 ) »
Mögliche Lösung:
ich lasse mir einfach eine Textdatei erstellen.

Anlegen einer TCP/IP-Verbindung auf den Namen JAVARFC
Es muss kein Funktionsbaustein 'FUNCTION_SM' existieren
Aufruf in SAP:

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. 
JAVA
angeleht an das Beispiel Nr. 5

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();
  }
}

So, ich denke mal, dass dieser Beitrag den Suchenden hilft :lol:

Liebe Grüße
Steffi[/b]

Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
Klasse danke!

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Danke :D

Vergleichbare Themen

1
Antw.
1778
Views
Methoden aufrufen
von chyth » 30.07.2007 15:06 • Verfasst in ABAP® für Anfänger
5
Antw.
4048
Views
EWM LVM Selektionsbild aufrufen
von mlg » 15.12.2014 15:12 • Verfasst in ABAP® für Anfänger
10
Antw.
9581
Views
BAPI_USER_GET_DETAIL aufrufen
von bohne » 28.10.2006 17:02 • Verfasst in ABAP® für Anfänger
5
Antw.
4734
Views
Transaktion aufrufen
von phil1982 » 13.09.2007 14:12 • Verfasst in ABAP® für Anfänger
1
Antw.
6467
Views
BSP Eventhandler aufrufen
von Tommy Nightmare » 13.03.2018 08:48 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.