Die Integration eines SAP-Systems erfolgt über den SAP .Net Connector (sapnco.dll, sapnco_utils.dll).
Dieses Beispiel kann als ein generisches Skelett genutzt werden. Im konkreten omniSuite-Kontext muss es angepasst werden.
Kopieren Sie die sapnco.dll und sapnco_utils.dll in das cmdbcore.exe-Verzeichnis.
{$CMDBCOREDIR}\sapnco.dll {$CMDBCOREDIR}\sapnco_utils.dll
SAP SAP.Middleware.Connector
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; }