Skip to Content
Technical Articles

How-to create a sales order based on a quote via OData (SAP ByDesign)

Dear all,

I wil explain in this blog post how to create a Sales Order based on a Sales Quote via Odata.

Business context : a quote has been created in SAP ByDesign (status Open) and your requirment is to trigger the sales order creation based on this quote.

Overview : it is a two phases process : first, you need to create a sales order has an empty shell. Then, by adding a reference to a sales quote, all the information (headers, items, prices…) will be automatically fulfilled.

 

Step 1 : configure the Odata service

– You can use the standard service khsalesorder or create your own OData service based on the business object SalesOrder node Root

– If you created your own webservice, select at least one field (ID for example)

– In the Function import tab, create the action AddReferenceWithDataProvision as follows:

– If you created your own webservice, assign the OData service to the workcenter CRM_SALESORDERS.

-Save and activate the OData service

 

Step 2:  do a GET call to obtain the xcsrf-token

As you know, to be able to post data through OData, you need a x-csrf token. You can call any Odata service, here you called the service khsalesorder filtered on one Sales Order ID to reduce the execution time.

Note: all REST calls are made from PostMan in this blog post.

  • URL: https://myXXXXXX.sapbydesign.com/sap/byd/odata/cust/v1/khsalesorder/SalesOrderCollection?$filter=ID%20eq%20%27116%27
  • Method: GET
  • Header to add:  Key = x-csrf-token ; Value = fetch
  • Header to retrieve:  Key = x-csrf-token ; Value = xxxxxxxxxxxxxxxxxxxxxxx

 

Step 3 : Create an « empty » sales order

The only information needed is a customer.

  • URL: https://myXXXXXX.sapbydesign.com /sap/byd/odata/cust/v1/khsalesorder/SalesOrderCollection
  • Method: POST
  • Body:
{
    "BuyerParty": {
        "PartyID": "TW_003"
    }
}
  • Header to add:  Key = x-csrf-token ; Value = xxxxxxxxxxxxxxxxxxxxxxx

 

For the next action, we need the ObjectID of the newly created Sales Order:

<ObjectID>00163E71D2F31EDBA7D260A1F20E3EAF</ObjectID>

The Sales Order created is empty for the moment (only the customer is entered) :

Step 4 : add reference to sales quote

The action ‘AddReferenceWithDataProvision’ will fulfill the new Sales Order with the quote data.

  • URL: https://myXXXXXX.sapbydesign.com/sap/byd/odata/cust/v1/khsalesorder/AddReferenceWithDataProvision?
  • Method: POST
  • Params:
    • The first parameter is the ObjectID of the Sales Order created in step 3:

Key: ObjectID, Value = ‘00163E71D2F31EDBA7D260A1F20E3EAF‘

    • The second parameter is the Customer Quote ID

Key: BusinessTransactionDocumentKey_BusinessTransactionDocumentID, Value = ‘107’

    • The third parameter is the business type code corresponding to a Customer Quote e.g. 30

Key: BusinessTransactionDocumentKey_BusinessTransactionDocumentTypeCode, Value = ’30’

  • Header to add:  Key = x-csrf-token ; Value = xxxxxxxxxxxxxxxxxxxxxxx

The Sales Order is now fulfilled with the quote data:

After this action, the quote status is set as completed (same as a manual Sales Order creation):

 

 

Conclusion:

The calls have been done from PostMan for this post. However, you can launch from any third party system : SCPi or any middleware.

It is also possible to realize the same process through a PDI absl script: the functions available in OData are also available in absl.

 

Hope it would help someone

Best regards

 

Be the first to leave a comment
You must be Logged on to comment or reply to a post.