The user roles are Studio Administrator, Developer, and Business User.

  • PDI_ADMINISTRATION / Administration
  • PDI_DEVELOPMENT / Development

对于Sales Order creation来说,Buyer Party以及行我的项目的Product保护是必须的。

通过TypeCode辨别CustomerQuote是Sales Order还是Sales Quote:

应用ABSL创立Sales Order的代码:

import ABSL;import AP.CRM.Global;// ABSL example for CustomerQuote// define CustomerQuote root nodevar elCustomerQuote_Root: elementsof CustomerQuote;var instCustomerQuote;// define CustomerQuote item nodevar 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 - optionalelCustomerQuote_Root.Name.content = "PSM CRM ABSL Test - CallCustomerQuoteExample";// CustomerQuote: maintain external reference - optionalelCustomerQuote_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 systeminstCustomerQuote.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 onelCustomerQuote_Item.ID = "10";     // CustomerQuote: create item instanceinstCustomerQuote_Item = instCustomerQuote.Item.Create(elCustomerQuote_Item);    // set product identifier - mandatoryinstCustomerQuote_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 CustomerQuotevar qryCustomerQuote_QueryByElements;var selParamsCustomerQuote_QueryByElements;var colQryResult;var instCustomerQuote;// CustomerQuote: define query and parameters to be used for retrieval of dataqryCustomerQuote_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 referenceselParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.BuyerID.content, "I","EQ","PSM CRM ABSL Test - Example_01");// CustomerQuote: execute the querycolQryResult = qryCustomerQuote_QueryByElements.Execute(selParamsCustomerQuote_QueryByElements);   // CustomerQuote: loop all found instancesforeach (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 CustomerQuotevar qryCustomerQuote_QueryByElements;var selParamsCustomerQuote_QueryByElements;var colQryResult;var instCustomerQuote;var instCustomerQuote_Item;// CustomerQuote: define query and parameters to be used for retrieval of dataqryCustomerQuote_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 referenceselParamsCustomerQuote_QueryByElements.Add(qryCustomerQuote_QueryByElements.BuyerID.content, "I","EQ","PSM CRM ABSL Test - Example_01");// CustomerQuote: execute the querycolQryResult = qryCustomerQuote_QueryByElements.Execute(selParamsCustomerQuote_QueryByElements);   // CustomerQuote: loop all found instancesforeach (instCustomerQuote in colQryResult) {     break; // take only first instance in case multiple are found}// CustomerQuote: update quantity for item productforeach (instCustomerQuote_Item in instCustomerQuote.Item) {  // get item with a certain ID to be changed  if (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.

当Customer Quote被创立时,requested delivery date被默认逻辑填充。

It can be changed using the association RequestedFulfillmentPeriod.

这个默认值能够被RequestedFulfillmentPeriod这个association批改。

This date is taken over as requested delivery date for the items.

item级别的requested delivery date从订单低头的对应字段带过去。

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主数据上保护的price list,行我的项目的价格被主动决定进去。

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的地址时,一个新的Document specific address会被创立。

This means, the address change is exclusively applied to the party instance in the respective transactional document.

只是文档的party transaction 数据的地址被批改了,而party主数据地址放弃不变。

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的原创文章,尽在:"汪子熙":