cancel
Showing results for 
Search instead for 
Did you mean: 

BAPI_SALESORDER_CREATEFROMDAT2 and Commit-Issue

danieln
Explorer
0 Kudos

Hi,

I've a problem with BAPI_TRANSACTION_COMMIT after BAPI_SALESORDER_CREATEFROMDAT2.

BAPI_SALESORDER_CREATEFROMDAT2 is working fine.

In the Return-Vars I've a message "Salesorder create Number 9999999'.

The Salesordernumbers are reserved in the system.

But the BAPI_TRANSACTION_COMMIT gives no result back and the Salesorder is not created.

I've read somewhere that the two BAPIs have to be called in one Process, but I don't know how to do this.

Many many thanks in advance for helping.

CODE:

Dim _ecc = RfcDestinationManager.GetDestination(strSAPSystem)

Dim setOrderAPI As IRfcFunction = _ecc.Repository.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2")

Dim setCommit As IRfcFunction = _ecc.Repository.CreateFunction("BAPI_TRANSACTION_COMMIT")


Dim SAPStrucOrder_Header_In As SAP.Middleware.Connector.IRfcStructure = setOrderAPI.GetStructure("ORDER_HEADER_IN")


SAPStrucOrder_Header_In.SetValue("DOC_TYPE", "ZEDI")

SAPStrucOrder_Header_In.SetValue("SALES_ORG", "0100")

SAPStrucOrder_Header_In.SetValue("DISTR_CHAN", "10")

SAPStrucOrder_Header_In.SetValue("DIVISION", "10")

Dim datLieferdatum As Date

datLieferdatum = strLieferdatum

SAPStrucOrder_Header_In.SetValue("REQ_DATE_H", datLieferdatum)


Dim SAPTableOrder_Partners As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_PARTNERS")

SAPTableOrder_Partners.Append()

SAPTableOrder_Partners.SetValue("PARTN_ROLE", "AG")

SAPTableOrder_Partners.SetValue("PARTN_NUMB", gstrSAPKDNR)

SAPTableOrder_Partners.Append()

SAPTableOrder_Partners.SetValue("PARTN_ROLE", "WE")

SAPTableOrder_Partners.SetValue("PARTN_NUMB", strSAPKunnrWE)


Dim SAPTableOrder_Items_In As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_ITEMS_IN")

Dim SAPTableOrder_Schedule_In As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_SCHEDULES_IN")


lngTmpPosNr = 0

For z4 As Integer = 0 To PosTabelle.lngPosnr.Length - 1

            lngTmpPosNr = PosTabelle.lngPosnr(z4) * 10

            SAPTableOrder_Items_In.Append()

            SAPTableOrder_Items_In.SetValue("ITM_NUMBER", lngTmpPosNr)

            SAPTableOrder_Items_In.SetValue("MATERIAL", PosTabelle.strSAPArtNr(z4))

            SAPTableOrder_Schedule_In.Append()

            SAPTableOrder_Schedule_In.SetValue("ITM_NUMBER", lngTmpPosNr)

            SAPTableOrder_Schedule_In.SetValue("REQ_QTY", PosTabelle.lngMenge(z4))

            SAPTableOrder_Schedule_In.SetValue("REQ_DATE", datLieferdatum)

Next


setOrderAPI.Invoke(_ecc)
setCommit.Invoke(_ecc)


Dim strVBELN As String

Dim strReturnType As String

Dim strReturnID As String

Dim strReturnNumber As String

Dim strReturnMessage As String

Dim strReturnType2 As String

Dim strReturnID2 As String

Dim strReturnNumber2 As String

Dim strReturnMessage2 As String


Try

            strVBELN = setOrderAPI.GetValue("SALESDOCUMENT").ToString

            strReturnType = setOrderAPI.GetTable("RETURN").GetString("TYPE")

            strReturnID = setOrderAPI.GetTable("RETURN").GetString("ID")

            strReturnNumber = setOrderAPI.GetTable("RETURN").GetString("NUMBER")

            strReturnMessage = setOrderAPI.GetTable("RETURN").GetString("MESSAGE")

            strReturnType2 = setCommit.GetStructure("RETURN").GetString("TYPE")

            strReturnID2 = setCommit.GetStructure("RETURN").GetString("ID")

            strReturnNumber2 = setCommit.GetStructure("RETURN").GetString("NUMBER")

            strReturnMessage2 = setCommit.GetStructure("RETURN").GetString("MESSAGE")

Catch

'nix

End Try

Accepted Solutions (1)

Accepted Solutions (1)

former_member197445
Contributor
0 Kudos

I believe this is accomplished by using the following "wrapper" --

RfcSessionManager.BeginContext(_ecc)

setOrderAPI.Invoke(_ecc)
setCommit.Invoke(_ecc)

RfcSessionManager.EndContext(_ecc)

danieln
Explorer
0 Kudos

Many Thanks!

works 🙂

Former Member
0 Kudos

Hi,

I am trying to create sales order thru BAPI_SALESORDER_CREATEFROMDAT2, but I am getting error

V4       219 Sales document  was not changed

Plz help me out where I have missed something. Thanks in advance.

,My Code lines are as below:

Dim _ecc = RfcDestinationManager.GetDestination("ECDCLNT300")

        Dim setOrderAPI As IRfcFunction = _ecc.Repository.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2")

        Dim setCommit As IRfcFunction = _ecc.Repository.CreateFunction("BAPI_TRANSACTION_COMMIT")

        Dim SAPStrucOrder_Header_In As SAP.Middleware.Connector.IRfcStructure = setOrderAPI.GetStructure("ORDER_HEADER_IN")

        SAPStrucOrder_Header_In.SetValue("DOC_TYPE", "ZTSD")

        SAPStrucOrder_Header_In.SetValue("SALES_ORG", "2000")

        SAPStrucOrder_Header_In.SetValue("DISTR_CHAN", "01")

        SAPStrucOrder_Header_In.SetValue("DIVISION", "01")

        SAPStrucOrder_Header_In.SetValue("INCOTERMS1", "FTP")

        SAPStrucOrder_Header_In.SetValue("PURCH_NO_C", "TKA-T")

        SAPStrucOrder_Header_In.SetValue("ORD_REASON", "A01")

        Dim datLieferdatum As Date

        datLieferdatum = DateTime.Now.Date

        'SAPStrucOrder_Header_In.SetValue("REQ_DATE_H", datLieferdatum)

        Dim SAPStrucOrder_Header_InX As SAP.Middleware.Connector.IRfcStructure = setOrderAPI.GetStructure("ORDER_HEADER_INX")

        SAPStrucOrder_Header_InX.SetValue("UPDATEFLAG", "''")

        Dim SAPTableOrder_Partners As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_PARTNERS")

        SAPTableOrder_Partners.Append()

        SAPTableOrder_Partners.SetValue("PARTN_ROLE", "SH")

        SAPTableOrder_Partners.SetValue("PARTN_NUMB", "7000876")

        SAPTableOrder_Partners.Append()

        SAPTableOrder_Partners.SetValue("PARTN_ROLE", "SP")

        SAPTableOrder_Partners.SetValue("PARTN_NUMB", "7000876")

        'SAPTableOrder_Partners.Append()

        'SAPTableOrder_Partners.SetValue("PARTN_ROLE", "CR")

        'SAPTableOrder_Partners.SetValue("PARTN_NUMB", "780013")

        Dim SAPTableOrder_Items_In As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_ITEMS_IN")

        Dim SAPTableOrder_Schedule_In As SAP.Middleware.Connector.IRfcTable = setOrderAPI.GetTable("ORDER_SCHEDULES_IN")

        Dim lngTmpPosNr As Integer = 10

        'For z4 As Integer = 0 To PosTabelle.lngPosnr.Length - 1

        'lngTmpPosNr = PosTabelle.lngPosnr(z4) * 10

        SAPTableOrder_Items_In.Append()

        SAPTableOrder_Items_In.SetValue("ITM_NUMBER", "000010")

        SAPTableOrder_Items_In.SetValue("MATERIAL", "PSCC50H")

        SAPTableOrder_Items_In.SetValue("TARGET_QTY", 2)

        SAPTableOrder_Items_In.SetValue("PLANT", "2433")

        SAPTableOrder_Items_In.SetValue("PURCH_NO_C", "TKA-T")

        SAPTableOrder_Schedule_In.Append()

        SAPTableOrder_Schedule_In.SetValue("ITM_NUMBER", "000010")

        SAPTableOrder_Schedule_In.SetValue("SCHED_LINE", "0001")

        SAPTableOrder_Schedule_In.SetValue("REQ_QTY", "2")

        SAPTableOrder_Schedule_In.SetValue("REQ_DATE", datLieferdatum)

        'Next

        RfcSessionManager.BeginContext(_ecc)

        setOrderAPI.Invoke(_ecc)

        setCommit.Invoke(_ecc)

        RfcSessionManager.EndContext(_ecc)

        'setOrderAPI.Invoke(_ecc)

        'setCommit.Invoke(_ecc)

        Dim strVBELN As String

        Dim strReturnType As String

        Dim strReturnID As String

        Dim strReturnNumber As String

        Dim strReturnMessage As String

        Dim strReturnType2 As String

        Dim strReturnID2 As String

        Dim strReturnNumber2 As String

        Dim strReturnMessage2 As String

        Try

            strVBELN = setOrderAPI.GetValue("SALESDOCUMENT").ToString

            strReturnType = setOrderAPI.GetTable("RETURN").GetString("TYPE")

            strReturnID = setOrderAPI.GetTable("RETURN").GetString("ID")

            strReturnNumber = setOrderAPI.GetTable("RETURN").GetString("NUMBER")

            strReturnMessage = setOrderAPI.GetTable("RETURN").GetString("MESSAGE")

            strReturnType2 = setCommit.GetStructure("RETURN").GetString("TYPE")

            strReturnID2 = setCommit.GetStructure("RETURN").GetString("ID")

            strReturnNumber2 = setCommit.GetStructure("RETURN").GetString("NUMBER")

            strReturnMessage2 = setCommit.GetStructure("RETURN").GetString("MESSAGE")

        Catch

            'nix

        End Try

hynek_petrak
Active Participant
0 Kudos

Hi

is this the only message you get in the RETURN table? Did you validate your input in the SE37?

Former Member
0 Kudos

Yes Hynek, this isvthe only message I am getting invteturn table. Actually I am new to ABAP. Consultants have made one BDC where tese are the basic parameters and with this we are able generate a sales order. But when I am paaaing these values thru BAPI, am getting this error.

hynek_petrak
Active Participant
0 Kudos

I suggest you or your consultant to simulate the BAPI in SE37. At least, you shall use the German codes for partner roles, e.g. WE, AG, RE, RG ...

Answers (1)

Answers (1)

Former Member
0 Kudos

Hello. I have a question. I get your sample and it worked but why did the transaction class not work? Is that an issue in the connector code? If not then what is the transaction class to be used for?