on 02-05-2007 6:42 PM
Hello,
can anybody support me with the right code to retrieve a table from SAP with RFC
and .NET-Connector ? I can't use the wizard at the moment. So I have made the
following handy code, which runs with simple types and structures but not with a
table.
This ist the Structure :
<SAP.Connector.RfcStructure(AbapName:="BAPIRET2", Length:=552)> _
Public Class BAPIRET2
Inherits SAP.Connector.SAPStructure
Private mstrType As String
Private mstrID As String
Private mstrNumber As String
Private mstrMessage As String
Private mstrLogNumber As String
Private mstrLogMessageNumber As String
Private mstrMessageV1 As String
Private mstrMessageV2 As String
Private mstrMessageV3 As String
Private mstrMessageV4 As String
Private mstrParameter As String
Private mintRow As Integer
Private mstrField As String
Private mstrSystem As String
<SAP.Connector.RfcField(AbapName:="TYPE" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=1 _
, Offset:=0)> _
Public Property Type() As String
Get
Return mstrType
End Get
Set(ByVal in_Value As String)
mstrType = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="ID" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=20 _
, Offset:=1)> _
Public Property ID() As String
Get
Return mstrID
End Get
Set(ByVal in_Value As String)
mstrID = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="NUMBER" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=3 _
, Offset:=21)> _
Public Property Code() As String
Get
Return mstrNumber
End Get
Set(ByVal in_Value As String)
mstrNumber = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="MESSAGE" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=220 _
, Offset:=24)> _
Public Property Message() As String
Get
Return mstrMessage
End Get
Set(ByVal in_Value As String)
mstrMessage = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="LOG_NO" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=20 _
, Offset:=244)> _
Public Property LogNumber() As String
Get
Return mstrLogNumber
End Get
Set(ByVal in_Value As String)
mstrLogNumber = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="LOG_MSG_NO" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=6 _
, Offset:=264)> _
Public Property LogMessageNumber() As String
Get
Return mstrLogMessageNumber
End Get
Set(ByVal in_Value As String)
mstrLogMessageNumber = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="MESSAGE_V1" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=50 _
, Offset:=270)> _
Public Property MessageV1() As String
Get
Return mstrMessageV1
End Get
Set(ByVal in_Value As String)
mstrMessageV1 = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="MESSAGE_V2" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=50 _
, Offset:=320)> _
Public Property MessageV2() As String
Get
Return mstrMessageV2
End Get
Set(ByVal in_Value As String)
mstrMessageV2 = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="MESSAGE_V3" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=50 _
, Offset:=370)> _
Public Property MessageV3() As String
Get
Return mstrMessageV3
End Get
Set(ByVal in_Value As String)
mstrMessageV3 = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="MESSAGE_V4" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=50 _
, Offset:=420)> _
Public Property MessageV4() As String
Get
Return mstrMessageV4
End Get
Set(ByVal in_Value As String)
mstrMessageV4 = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="PARAMETER" _
, RfcType:=SAP.Connector.RfcType.RfcType_CHAR _
, Length:=32 _
, Offset:=470)> _
Public Property Parameter() As String
Get
Return mstrParameter
End Get
Set(ByVal in_Value As String)
mstrParameter = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="ROW" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_INT _
, Length:=10 _
, Offset:=502)> _
Public Property Row() As Integer
Get
Return mintRow
End Get
Set(ByVal in_Value As Integer)
mintRow = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="FIELD" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_CHAR _
, Length:=30 _
, Offset:=512)> _
Public Property Field() As String
Get
Return mstrField
End Get
Set(ByVal in_Value As String)
mstrField = in_Value
End Set
End Property
<SAP.Connector.RfcField(AbapName:="SYSTEM" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_CHAR _
, Length:=10 _
, Offset:=542)> _
Public Property System() As String
Get
Return mstrSystem
End Get
Set(ByVal in_Value As String)
mstrSystem = in_Value
End Set
End Property
End Class
and this the Call :
<SAP.Connector.RfcMethod("/VFE/IV_FB_STMS_MAILMELD_ANLEG")> _
<System.Web.Services.Protocols.SoapDocumentMethod( _
Action:="http://tempuri.org//VFE/IV_FB_STMS_MAILMELD_ANLEG", _
RequestNamespace:="urn:sap-com:document:sap:rfc:functions", _
RequestElementName:="/VFE/IV_FB_STMS_MAILMELD_ANLEG", _
ResponseNamespace:="urn:sap-com:document:sap:rfc:functions", _
ResponseElementName:="/VFE/IV_FB_STMS_MAILMELD_ANLEG.Response")> _
Public Function ReturnStructure2(<SAP.Connector.RfcParameter(AbapName:="I_TEST" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_INT _
, Direction:=SAP.Connector.RFCINOUT.IN)> _
<System.Xml.Serialization.XmlElement("I_TEST" _
, IsNullable:=False)> _
Optional ByVal in_Test As Integer = -1 _
, <SAP.Connector.RfcParameter(AbapName:="E_RETURN" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_STRUCTURE _
, Direction:=SAP.Connector.RFCINOUT.OUT)> _
<System.Xml.Serialization.XmlElement("E_RETURN" _
, IsNullable:=False)> _
Optional ByRef out_Test As BAPIRET2 = Nothing) As Object()
Return Me.SAPInvoke("ReturnStructure2", New Object() {in_Test})
End Function
it goes very well. But if I use a table with this Call :
<SAP.Connector.RfcMethod("/VFE/IV_FB_STMS_MAILMELD_ANLEG")> _
<System.Web.Services.Protocols.SoapDocumentMethod( _
Action:="http://tempuri.org//VFE/IV_FB_STMS_MAILMELD_ANLEG", _
RequestNamespace:="urn:sap-com:document:sap:rfc:functions", _
RequestElementName:="/VFE/IV_FB_STMS_MAILMELD_ANLEG", _
ResponseNamespace:="urn:sap-com:document:sap:rfc:functions", _
ResponseElementName:="/VFE/IV_FB_STMS_MAILMELD_ANLEG.Response")> _
Public Function ReturnTable(<SAP.Connector.RfcParameter(AbapName:="I_TEST" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_INT _
, Direction:=SAP.Connector.RFCINOUT.IN)> _
<System.Xml.Serialization.XmlElement("I_TEST" _
, IsNullable:=False)> _
Optional ByVal in_Test As Integer = -1 _
, <SAP.Connector.RfcParameter(AbapName:="ET_RETURN" _
, RfcType:=SAP.Connector.RFCTYPE.RFCTYPE_ITAB _
, Direction:=SAP.Connector.RFCINOUT.OUT)> _
<System.Xml.Serialization.XmlArray("ET_RETURN" _
, IsNullable:=False)> _
<System.Xml.Serialization.XmlArrayItem("BAPIRET2" _
, IsNullable:=False)> _
Optional ByRef out_Test As BAPIRET2Table = Nothing) As Object()
Return Me.SAPInvoke("ReturnTable", New Object() {in_Test})
End Function
I get the following Error :
System.NullReferenceException wurde nicht behandelt.
Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Source="SAP.Connector"
StackTrace:
bei SAP.Connector.SAPStructure.GetRfcStructureInfo(SAPConnection conn, Type t)
bei SAP.Connector.SAPClient.PrepareClientParameters(Type classType, MethodInfo m, Boolean isTQRfc, Object[] MethodParamsIn, RFC_PARAMETER[]& paramsIn, RFC_PARAMETER[]& paramsOut, RFC_TABLE[]& tables, ParameterMap[]& paramMaps)
bei SAP.Connector.SAPClient.RfcInvoke(String method, Object[] methodParamsIn)
bei SAP.Connector.SAPClient.SAPInvoke(String method, Object[] methodParamsIn)
bei ConsoleApplication1.Class1.ReturnTable(Int32 in_Test, BAPIRET2Table& out_Test) in C:\Data\Tests\ConsoleApplication1\Class1.vb:Zeile 157.
bei ConsoleApplication1.Module1.Main() in C:\Data\Tests\ConsoleApplication1\Module1.vb:Zeile 37.
bei System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
Can anybody give me a hint or solution for this or can provide a small full sample
(Proxy, Structure and Table in VB.NET or C#.NET) ? Best would be an example
based of a common structure like BAPIRETURN or my used BAPIRET2.
A note for the codes above : The used Structure is BAPIRET2 and is exported as
"E_RETURN". A table of BAPIRET2 structures is exported as "ET_RETURN" of the
same function.
Regards
Holger
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
82 | |
10 | |
10 | |
9 | |
6 | |
6 | |
5 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.