使用ABSL(ABAP Script Language)完成SAP Cloud for Customer里Customer Quote以及行项目的增删改查
The user roles are Studio Administrator, Developer, and Business User.
- PDI_ADMINISTRATION / Administration
- PDI_DEVELOPMENT / Development
對于Sales Order creation來說,Buyer Party以及行項(xiàng)目的Product維護(hù)是必須的。
通過TypeCode區(qū)分CustomerQuote是Sales Order還是Sales Quote:
使用ABSL創(chuàng)建Sales Order的代碼:
import ABSL; import AP.CRM.Global;// ABSL example for CustomerQuote// define CustomerQuote root node var elCustomerQuote_Root: elementsof CustomerQuote; var instCustomerQuote;// define CustomerQuote item node var elCustomerQuote_Item: elementsof CustomerQuote.Item; var instCustomerQuote_Item;// CustomerQuote: maintain Business Object type - optional (default value: 30 = Sales Quote set by system; other values: 2059 = Sales Order) elCustomerQuote_Root.TypeCode = "30";// CustomerQuote: maintain description - optional elCustomerQuote_Root.Name.content = "PSM CRM ABSL Test - CallCustomerQuoteExample";// CustomerQuote: maintain external reference - optional elCustomerQuote_Root.BuyerID.content = "PSM CRM ABSL Test - Example_01";// CustomerQuote: create new instance instCustomerQuote = CustomerQuote.Create(elCustomerQuote_Root);// CustomerQuote: maintain buyer party - mandatory // the instance of node Party is created automatically by the system instCustomerQuote.BuyerParty.PartyKey.PartyID.content = "MC9785";// CustomerQuote: maintain item with product// CustomerQuote: set item ID or any other attribute of the node Item in order // to be able to enter a product later on elCustomerQuote_Item.ID = "10";// CustomerQuote: create item instance instCustomerQuote_Item = instCustomerQuote.Item.Create(elCustomerQuote_Item);// set product identifier - mandatory instCustomerQuote_Item.ItemProduct.ProductKey.ProductID.content = "MCF-0001"; // change quantity - optional if ( instCustomerQuote_Item.FirstRequestedItemScheduleLine.IsSet()) { // set product quantity and UOM (will be defaulted by the system if not set) instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.content = 2;instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.unitCode = "EA"; }讀取CustomerQuote的ABSL代碼:
import ABSL; import AP.CRM.Global;// ABSL example for CustomerQuote// Define variables to query CustomerQuote var qryCustomerQuote_QueryByElements; var selParamsCustomerQuote_QueryByElements; var colQryResult; var instCustomerQuote;// CustomerQuote: define query and parameters to be used for retrieval of data qryCustomerQuote_QueryByElements = CustomerQuote.QueryByElements; selParamsCustomerQuote_QueryByElements = qryCustomerQuote_QueryByElements.CreateSelectionParams();// CustomerQuote: set Business Object type - optional (default value: 30 = Sales Quote set by system; other values: 2059 = Sales Order) selParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.TypeCode, "I","EQ","30");// CustomerQuote: fill the query parameter values - in this example search via the external reference selParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.BuyerID.content, "I","EQ","PSM CRM ABSL Test - Example_01");// CustomerQuote: execute the query colQryResult = qryCustomerQuote_QueryByElements.Execute(selParamsCustomerQuote_QueryByElements);// CustomerQuote: loop all found instances foreach (instCustomerQuote in colQryResult) { break; // take only first instance in case multiple are found }修改customer quote的代碼:
import ABSL; import AP.CRM.Global;// ABSL example for CustomerQuote// Define variables to query CustomerQuote var qryCustomerQuote_QueryByElements; var selParamsCustomerQuote_QueryByElements; var colQryResult; var instCustomerQuote; var instCustomerQuote_Item;// CustomerQuote: define query and parameters to be used for retrieval of data qryCustomerQuote_QueryByElements = CustomerQuote.QueryByElements; selParamsCustomerQuote_QueryByElements = qryCustomerQuote_QueryByElements.CreateSelectionParams();// CustomerQuote: set Business Object type - optional (default value: 30 = Sales Quote set by system; other values: 2059 = Sales Order) selParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.TypeCode, "I","EQ","30");// CustomerQuote: fill the query parameter values - in this example search via the external reference selParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.BuyerID.content, "I","EQ","PSM CRM ABSL Test - Example_01");// CustomerQuote: execute the query colQryResult = qryCustomerQuote_QueryByElements.Execute(selParamsCustomerQuote_QueryByElements);// CustomerQuote: loop all found instances foreach (instCustomerQuote in colQryResult) { break; // take only first instance in case multiple are found }// CustomerQuote: update quantity for item product foreach (instCustomerQuote_Item in instCustomerQuote.Item) {// get item with a certain ID to be changedif (instCustomerQuote_Item.ID.Contains("10")) {break;}; } if ( instCustomerQuote_Item.IsSet()) { // set product quantity and UOM (will be defaulted by the system if not set) instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.content = 5;instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.unitCode = "EA"; }Item Schedule Lines
The requested delivery date is defaulted automatically when a customer quote is created.
當(dāng)Customer Quote被創(chuàng)建時(shí),requested delivery date被默認(rèn)邏輯填充。
It can be changed using the association RequestedFulfillmentPeriod.
這個(gè)默認(rèn)值可以被RequestedFulfillmentPeriod這個(gè)association修改。
This date is taken over as requested delivery date for the items.
item級別的requested delivery date從訂單抬頭的對應(yīng)字段帶過來。
On item level the requested delivery date can be set using the association FirstRequestedItemScheduleLine.
帶過來的值也可以通過FirstRequestedItemScheduleLine修改。
Price and Tax Calculation Item
When interacting with the Price And Tax Calculation Item node the following specifics have to be considered using the public model.
Prices are derived automatically from the price lists maintained for the products and customers.
通過product和customer主數(shù)據(jù)上維護(hù)的price list,行項(xiàng)目的價(jià)格被自動(dòng)決定出來。
In order to set or get the automatically determined prices the following associations can be used:
- Item Main Price
- Item Main Discount
- Item Main Surcharge
- Item Main Total
- Operational Item Price Component
Address
The address of a Party can be accessed via the following associations:
- AddressSnapshot (read-only)
- UsedAddress (read/write)
In case address data of a Party node instance is changed via association UsedAddress a document specific address will be created.
我們每次通過association UsedAddress 修改 Party的地址時(shí),一個(gè)新的Document specific address會(huì)被創(chuàng)建。
This means, the address change is exclusively applied to the party instance in the respective transactional document.
只是文檔的party transaction 數(shù)據(jù)的地址被修改了,而party主數(shù)據(jù)地址保持不變。
The master data address of the party remains unchanged.
// ABSL example to create a document-specific address for a party, for example the product recipient: .... if ( this.ProductRecipientParty.UsedAddress.DefaultPostalAddressRepresentation.IsSet( ) ) {/ * For performance reasons DO NOT update every single attribute by using the association path:this.UsedAddress.DefaultPostalAddressRepresentation.CityName = " Document City";this.UsedAddress.DefaultPostalAddressRepresentation.HouseID = "217";.... *///...to improve performance retrieve the address via association once and update afterwards the respective attributes:var elPartyAddress = this.ProductRecipientParty.UsedAddress.DefaultPostalAddressRepresentation;elPartyAddress.CityName = "Document City";elPartyAddress.HouseID = "217";elPartyAddress.StreetName = "Doc Street";elPartyAddress.StreetPostalCode = "27272";} ....更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的使用ABSL(ABAP Script Language)完成SAP Cloud for Customer里Customer Quote以及行项目的增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌还在“藏大招”!有更先进AI技术未公
- 下一篇: 微软 Xbox Game Pass 五月