zoukankan      html  css  js  c++  java
  • 使用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以及行项目的Product维护是必须的。

    通过TypeCode区分CustomerQuote是Sales Order还是Sales Quote:

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

  • 相关阅读:
    BZOJ 3236 AHOI 2013 作业 莫队算法
    使用再哈希算法查找元素
    冰雪奇缘--用爱酿就一部经典
    Scrapy系列教程(2)------Item(结构化数据存储结构)
    html学习笔记二
    知方可补不足~sqlserver中触发器的使用
    我心中的核心组件(可插拔的AOP)~调度组件quartz.net
    EF架构~为BulkInsert引入SET IDENTITY_INSERT ON功能
    知方可补不足~sqlserver中使用sp_who查看sql的进程
    知方可补不足~为千万级数据表加索引
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/14588462.html
Copyright © 2011-2022 走看看