Integration von SAP

Die Integration eines SAP-Systems erfolgt ├╝ber den SAP .Net Connector (sapnco.dll, sapnco_utils.dll).

Beispiel: SAP-Funktion aufrufen und das tabellarische Ergebnis auslesen

Dieses Beispiel kann als ein generisches Skelett genutzt werden. Im konkreten omniSuite-Kontext muss es angepasst werden.

Vorbereitung

Kopieren Sie die sapnco.dll und sapnco_utils.dll in das cmdbcore.exe-Verzeichnis.

Referenzen

{$CMDBCOREDIR}\sapnco.dll
{$CMDBCOREDIR}\sapnco_utils.dll        

Usings

SAP
SAP.Middleware.Connector

C#-Code

    RfcConfigParameters rfc = new RfcConfigParameters();
    rfc.Add(RfcConfigParameters.Name, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.SystemID, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.AppServerHost, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.Client, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.User, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.Password, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.SystemNumber, "!!!ANPASSEN!!!");
    rfc.Add(RfcConfigParameters.Language, "DE");
    rfc.Add(RfcConfigParameters.PoolSize, "10");
    rfc.Add(RfcConfigParameters.ConnectionIdleTimeout, "60");
    string errmsg = "";
    try
    { 
        RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfc);
        RfcSessionManager.BeginContext(rfcDest);
        rfcDest.Ping();
    
        RfcRepository rfcRep = rfcDest.Repository;
    
        IRfcFunction myfun    = rfcRep.CreateFunction("!!!ANPASSEN!!!"); // hier die konkrete Funktion
        IRfcFunction mycommit = rfcRep.CreateFunction("BAPI_TRANSACTION_COMMIT");
    
        myfun.Invoke(rfcDest);     
        IRfcTable tab = myfun.GetTable("!!!ANPASSEN!!!"); // hier die konkrete Tabelle
        for (int i = 0; i < tab.RowCount; i++)
        {
            tab.CurrentIndex = i;            
            int id = tab.GetInt("Id"); // int-Feld auslesen
            string name = tab.GetString("NAME"); // string-Feld auslesen
        }
        mycommit.Invoke(rfcDest);
        RfcSessionManager.EndContext(rfcDest);
    }
    catch (RfcCommunicationException e)
    {
        errmsg = e.ToString();
        return;
    }
    catch (RfcLogonException e)
    {
        // user could not logon...
        errmsg = e.ToString();
        return;
    }
    catch (RfcAbapRuntimeException e)
    {
        // serious problem on ABAP system side...
        errmsg = e.ToString();
        return;
    }
    catch (RfcAbapBaseException e)
    {
        errmsg = e.ToString();
        return;
    }