cancel
Showing results for 
Search instead for 
Did you mean: 

using BAPI_SALESORDER_CHANGE to add configuration fail

Former Member
0 Kudos

Hi experts,

I am using BAPI_SALESORDER_CHANGE to change an sales order's infomation, I can change the header info, but the configuration was not changed. It show the message: No data was changed. here is my code, any help will be appricated.

                IRfcFunction changeOrderAPI = destination.Repository.CreateFunction("BAPI_SALESORDER_CHANGE");
                IRfcFunction changeCommit = destination.Repository.CreateFunction("BAPI_TRANSACTION_COMMIT");

                changeCommit.SetValue("WAIT", "X");

                changeOrderAPI.SetValue("SALESDOCUMENT", "3100102625");

                IRfcStructure SAPStrucOrder_Header_In = changeOrderAPI.GetStructure("ORDER_HEADER_IN");               
                SAPStrucOrder_Header_In.SetValue("PURCH_NO_C", "050505");
                SAPStrucOrder_Header_In.SetValue("PURCH_NO_S", "050505");

                IRfcStructure SAPStructureOrder_Header_Inx = changeOrderAPI.GetStructure("ORDER_HEADER_INX");
                SAPStructureOrder_Header_Inx.SetValue("UPDATEFLAG", "U");
                SAPStructureOrder_Header_Inx.SetValue("PURCH_NO_C", "X");
                SAPStructureOrder_Header_Inx.SetValue("PURCH_NO_S", "X");              


                //configuration
                IRfcTable SAPTableOrder_Cfgs_Ref = changeOrderAPI.GetTable("ORDER_CFGS_REF");
                SAPTableOrder_Cfgs_Ref.Append();
                SAPTableOrder_Cfgs_Ref.SetValue("POSEX", "000010");
                SAPTableOrder_Cfgs_Ref.SetValue("CONFIG_ID", "000001");
                SAPTableOrder_Cfgs_Ref.SetValue("ROOT_ID", "00000001");

                IRfcTable SAPTableOrder_Cfgs_Inst = changeOrderAPI.GetTable("ORDER_CFGS_INST");
                SAPTableOrder_Cfgs_Inst.Append();
                SAPTableOrder_Cfgs_Inst.SetValue("CONFIG_ID", "000001");
                SAPTableOrder_Cfgs_Inst.SetValue("INST_ID", "00000001");
                SAPTableOrder_Cfgs_Inst.SetValue("OBJ_TYPE", "MARA");
                SAPTableOrder_Cfgs_Inst.SetValue("CLASS_TYPE", "300");
                SAPTableOrder_Cfgs_Inst.SetValue("OBJ_KEY", "F13000020");
                SAPTableOrder_Cfgs_Inst.SetValue("QUANTITY", "6");
                SAPTableOrder_Cfgs_Inst.SetValue("QUANTITY_UNIT", "PC");

                IRfcTable SAPTableOrder_Cfgs_Part_Of = changeOrderAPI.GetTable("ORDER_CFGS_PART_OF");
                SAPTableOrder_Cfgs_Part_Of.Append();
                SAPTableOrder_Cfgs_Part_Of.SetValue("CONFIG_ID", "000001");
                SAPTableOrder_Cfgs_Part_Of.SetValue("INST_ID", "00000001");
                SAPTableOrder_Cfgs_Part_Of.SetValue("PARENT_ID", "00000001");
                SAPTableOrder_Cfgs_Part_Of.SetValue("OBJ_TYPE", "MARA");
                SAPTableOrder_Cfgs_Part_Of.SetValue("CLASS_TYPE", "300");
                SAPTableOrder_Cfgs_Part_Of.SetValue("OBJ_KEY", "F13000020");

                IRfcTable SAPTableOrder_Cfgs_Value = changeOrderAPI.GetTable("ORDER_CFGS_VALUE");
                SAPTableOrder_Cfgs_Value.Append();
                SAPTableOrder_Cfgs_Value.SetValue("CONFIG_ID", "000001");
                SAPTableOrder_Cfgs_Value.SetValue("INST_ID", "00000001");
                SAPTableOrder_Cfgs_Value.SetValue("CHARC", "MCP3301_08");
                SAPTableOrder_Cfgs_Value.SetValue("VALUE", "002");

               

                RfcSessionManager.BeginContext(destination);
                changeOrderAPI.Invoke(destination);
                changeCommit.Invoke(destination);
                RfcSessionManager.EndContext(destination);

                IRfcTable returnTable = changeOrderAPI.GetTable("RETURN");

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi,

After setting value to table you should set it to function ( before invocation ).

There's an example in :

  1. http://www.dataxstream.com/2012/03/sap-nco-3-0-how-to-pass-table-parameters-to-sap-rfc/
  2. How-To Use SAP Nco 3 Connector | .Net 4 | Visual Studio 2010.

Best regards,

Yarden Jacobson

Former Member
0 Kudos

Hi yarden,

Thanks for your response. I read the linked article you provided and set the table to the function, I got the same error yet. Any suggestion? Thanks in advanced!

Here is the code.

                //configuration
                IRfcTable SAPTableOrder_Cfgs_Ref = changeOrderAPI.GetTable("ORDER_CFGS_REF");
                SAPTableOrder_Cfgs_Ref.Append();
                SAPTableOrder_Cfgs_Ref.SetValue("POSEX", "000010");
                SAPTableOrder_Cfgs_Ref.SetValue("CONFIG_ID", "000001");
                SAPTableOrder_Cfgs_Ref.SetValue("ROOT_ID", "00000001");
                SAPTableOrder_Cfgs_Ref.SetValue("COMPLETE", "T");
                SAPTableOrder_Cfgs_Ref.SetValue("CONSISTENT", "T");
                SAPTableOrder_Cfgs_Ref.SetValue("CBASE_ID", "501F2FBCEEA96C14E1000000C0A80089");
                SAPTableOrder_Cfgs_Ref.SetValue("CBASE_ID_TYPE", "G");

                //Set table to the function

                changeOrderAPI.SetValue("ORDER_CFGS_REF", SAPTableOrder_Cfgs_Ref);

Former Member
0 Kudos

Hi,

If FM return this message it not necessarily because of empty parameters.

There's are certain ways you should invoke FM ( even when working on-line in ECC ).

I Suggest you check two things :

  1. in debug - put break point before invoking function and check ( using "watch" if you populated all tables ).
  2. Check input data in ECC :
    i suggest using "fbgenmac" to record your input data as "test data" so you will be able to debug FM in ECC ( or your favorite abap developer ).

    http://www.stechno.net/sap-notes.html?view=sapnote&id=517767
    http://www.stechno.net/sap-notes.html?view=sapnote&id=539978

best regards,

Yarden