I'm using SAP .NET Connector 3.0 to build RFC client to let the users in easiest way to communicate with SAP ERP.
Here I would like to provide short samples of what is stopping me to move forward with development.
Currently my purpose is to change existing sales order. BAPI_SALESORDER_CHANGE
is FM I gonna use to change SO header and items data. I have sales order for 12 items (from 000010 to 0000120). Scenarios B and C doesn't work for me.
Scenario A: Customer purchase order changing
Result: PO Number successfully changed. No issues.
public DataTable BAPI_SALESORDER_CHANGE(RfcDestination destination)
{
RfcRepository repo = destination.Repository;
IRfcFunction salesDoc = repo.CreateFunction("BAPI_SALESORDER_CHANGE");
IRfcFunction salesDocCommit = repo.CreateFunction("BAPI_TRANSACTION_COMMIT");
salesDoc.SetValue("SALESDOCUMENT", "3939393837");
IRfcStructure salesHeader = salesDoc.GetStructure("ORDER_HEADER_IN");
salesHeader.SetValue("PURCH_NO_C", "Order_01");
IRfcStructure salesHeaderINX = salesDoc.GetStructure("ORDER_HEADER_INX");
salesHeaderINX.SetValue("UPDATEFLAG", "U");
salesHeaderINX.SetValue("PURCH_NO_C", "X");
RfcSessionManager.BeginContext(destination);
salesDoc.Invoke(destination);
salesDocCommit.Invoke(destination);
RfcSessionManager.EndContext(destination);
IRfcTable returnTable = salesDoc.GetTable("RETURN");
return ConvertToDataTable(returnTable);
}
Scenario B: Item target qty change
Result: I got a message: sales order has been saved. But the quantity wasn't changed. What is wrong here?
public DataTable BAPI_SALESORDER_CHANGE(RfcDestination destination)
{
//...
//Same peace of code as above
IRfcStructure salesHeader = salesDoc.GetStructure("ORDER_HEADER_IN");
IRfcStructure salesHeaderINX = salesDoc.GetStructure("ORDER_HEADER_INX");
salesHeaderINX.SetValue("UPDATEFLAG", "U");
IRfcTable salesItems = salesDoc.GetTable("ORDER_ITEM_IN");
salesItems.Append();
salesItems.SetValue("ITM_NUMBER", 000120);
salesItems.SetValue("TARGET_QTY", Convert.ToDecimal("1"));
IRfcTable salesItemsINX = salesDoc.GetTable("ORDER_ITEM_INX");
salesItemsINX.Append();
salesItemsINX.SetValue("UPDATEFLAG", "U");
salesItemsINX.SetValue("ITM_NUMBER", 000120);
salesItemsINX.SetValue("TARGET_QTY", "X");
//...
//Invoke methods
}
Scenario C: New item adding
Result: Error on salesDoc.Invoke(destination)
method:
Screen output without connection to user
public DataTable BAPI_SALESORDER_CHANGE(RfcDestination destination)
{
//...
//Same peace of code as above
IRfcStructure salesHeader = salesDoc.GetStructure("ORDER_HEADER_IN");
IRfcStructure salesHeaderINX = salesDoc.GetStructure("ORDER_HEADER_INX");
salesHeaderINX.SetValue("UPDATEFLAG", "U");
IRfcTable salesItems = salesDoc.GetTable("ORDER_ITEM_IN");
salesItems.Append();
salesItems.SetValue("ITM_NUMBER", 130);
salesItems.SetValue("MATERIAL", "000000000081828282");
salesItems.SetValue("TARGET_QTY", Convert.ToDecimal("1"));
IRfcTable salesItemsINX = salesDoc.GetTable("ORDER_ITEM_INX");
salesItemsINX.Append();
salesItemsINX.SetValue("UPDATEFLAG", "I");
salesItemsINX.SetValue("ITM_NUMBER", 130);
salesItemsINX.SetValue("MATERIAL", "X");
salesItemsINX.SetValue("TARGET_QTY", "X");
//...
//Invoke methods
}