Hallo Experten,
ich habe versucht im Rahmen meiner Azubitätigkeit ein Programm zu entwickeln welches sich gegen das SAP System authentifiziert und hier einen RFC Call absetzt.
Hierzu benutze ich die rscp4n.dll sowie sapnco.dll und sapnco_utils.dll, die nicht im Standard enthalten sind.
Wenn ich nun den FUBA "MEASUREM_ENTRYLIST_READ_DB" aufrufe liefert er mir die gewünschten Daten zurück, genauso wie beim Aufruf des FUBAs zum anlegen eines Messpunktes, nur wenn ich die Objektnummer aus der Equipmentnummer lesen will, wird mir eine Inception geworfen.
In der __config Datei werden nur die Parameter zum verbinden mit dem SAP System gesichert
C#-Code: |
.
.
.
using System.Text.RegularExpressions;
using SAP.Middleware.Connector;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Bitte warten");
MyBackendConfig config__ = new MyBackendConfig();
try
{
RfcDestinationManager.RegisterDestinationConfiguration(config__);
}
catch {Console.Write("Falsches PW");}
RfcDestination rfcDest = RfcDestinationManager.GetDestination("U04");
RfcRepository rfcRep = rfcDest.Repository;
try
{
Console.Clear();
Console.WriteLine("Verbinde mit SAP");
IRfcFunction myfun = rfcRep.CreateFunction("MEASUREM_ENTRYLIST_READ_DB");
myfun.SetValue("NUMBER_OF_LIST", "000000000002");
string output = "";
myfun.Invoke(rfcDest);
for (int i = 0; i < myfun.Count; i++)
{
if (myfun.GetObject(i) != null) output += myfun.GetObject(i).ToString();
}
Regex rgx = new Regex("POINT=\\d{12}");
MatchCollection ma = rgx.Matches(output);
List <string> Messpunkte = new List<string>();
foreach (Match m in ma)
{
Messpunkte.Add((m.ToString().Substring(6)));
}
string funktion = "MEASUREM_POINT_READ";
foreach (string s in Messpunkte)
{
myfun = rfcRep.CreateFunction(funktion);
myfun.SetValue("MEASUREM_POINT", s);
myfun.Invoke(rfcDest);
}
Console.WriteLine("Success");
}
catch (Exception e)
{
Console.WriteLine("Exeption:\n" + e.Message);
Console.WriteLine("Inner Exeption: \n" + e.InnerException);
Console.WriteLine("Full Text: \n" + e.ToString());
}
}
}
|
| Fehlermeldung: |
Exeption:
Data type UNKNOWN cannot be used for scalar metadata
Inner Exeption:
Full Text:
SAP.Middleware.Connector.RfcInvalidStateException: Data type UNKNOWN cannot be used for scalar metadata
bei SAP.Middleware.Connector.RfcScalarMetadata.CreateScalarMetadata(RfcDataType dataType, Int32 nucLength, Int32 ucLength, Int32 deci
mals)
bei SAP.Middleware.Connector.RfcScalarMetadata.GetScalarMetadata(RfcDataType dataType, Int32 nucLength, Int32 ucLength, Int32 decimal
s)
bei SAP.Middleware.Connector.RfcRepository.TypeMetadataFromParameters(IRfcTable parameters)
bei SAP.Middleware.Connector.RfcRepository.ProcessRfcMetadataGetResult(RfcFunction rfcMetadataGet, String[] functions, String[] struc
tures, String[] tables)
bei SAP.Middleware.Connector.RfcRepository.LookupFunctionMetadataNew(String name)
bei SAP.Middleware.Connector.RfcRepository.LookupFunctionMetadata(String name)
bei SAP.Middleware.Connector.RfcRepository.GetFunctionMetadata(String name)
bei SAP.Middleware.Connector.RfcRepository.CreateFunction(String name)
bei Test_SAP.Program.Main(String[] args) in H:\EDV\Projekte\Mini-Projekte\SAP\MP12-1155\02-Entwicklung\C# Code\SAP Auth\Test-SAP\Test
-SAP\Program.cs:Zeile 92. |
Der Fehler tritt auch auf wenn ich sofort versuche den 2. RFC Call zu starten, also liegt es nicht an Altlasten aus dem rfcRep, denke ich
Vielen Dank im Vorraus und Gruß
EifelYeti
edit: Rechtschreibung etwas überarbeitet