Enterprise Resource Planning Blogs by SAP
Get insights and updates about cloud ERP and RISE with SAP, SAP S/4HANA and SAP S/4HANA Cloud, and more enterprise management capabilities with SAP blog posts.
cancel
Showing results for 
Search instead for 
Did you mean: 
Vincent_Zhu
Product and Topic Expert
Product and Topic Expert

紧随这篇博客,今天我们将再次逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。

 

1. 案例背景

我们有些客户希望查看BOM所有层级的数据,也希望能够批量下载BOM所有层级的数据。我们有标准应用程序“Display BOM level by level”可以查看或下载单个物料的BOM所有层级信息,但是没有应用程序可以查看或下载多个物料的BOM所有层级数据。我们这个案例的开发应用就是来完成这样一个需求。

standard App Display BOM level by level can only view the data for single Materialstandard App Display BOM level by level can only view the data for single Material

 

 

通过开发人员可扩展性,我们创建了一个自定义的应用程序,允许用户选择多个物料,可以查看或下载所选物料的所有节点数据。

 

BOM1.png

 

2. 后台服务开发

2.1 创建数据定义

创建一个新的数据定义(data definition)

BOM3.png

 

BOM4.png

 

2.2 创建查询实现类

创建类ZCL_BOM_DISPLAY,在这个类里包含了详细的数据查询逻辑。

BOM5.png

 

 

 

METHOD get_bom_hierarchy.

*get BOM Link and BOM hierarchy based on condition
    SELECT *
    FROM I_BOMComponentWithKeyDate( p_keydate = _keydate ) AS Bom
    JOIN I_MaterialBOMLink AS Bomlink
      ON Bom~BillOfMaterialCategory = Bomlink~BillOfMaterialCategory
     AND Bom~BillOfMaterialVariant = Bomlink~BillOfMaterialVariant
     AND Bom~BillOfMaterial = Bomlink~BillOfMaterial
    WHERE Bomlink~BillOfMaterialCategory = 'M'
    AND Bomlink~BillOfMaterialVariant = '01'
    AND Bomlink~Material IN _material
    AND Bomlink~Plant IN _plant
    INTO TABLE (lt_BOMlist).

    IF sy-subrc = 0.
      rv_resp = abap_true.
      CLEAR pt_materialhierarchy.
    ENDIF.
    LOOP AT lt_BOMlist ASSIGNING FIELD-SYMBOL(<lfs_bomlist>).
      MOVE-CORRESPONDING <lfs_bomlist>-bomlink TO ps_response.
      MOVE-CORRESPONDING <lfs_bomlist>-bom TO ps_response.

      "Get product descrption saperatelly since CDS view does not have it.
      SELECT SINGLE ProductName FROM I_producttext
      WHERE Product = _response-material AND Language = -langu INTO _response-materialDesc.

      APPEND ps_response TO pt_response.
      CLEAR ps_response.

      ps_material-sign = 'I'.
      ps_material-option = 'EQ'.
      ps_material-low = <lfs_bomlist>-bom-BillOfMaterialComponent.
      APPEND ps_material TO pt_materialhierarchy.
      CLEAR ps_material.
    ENDLOOP.

  ENDMETHOD.

 

 

@EndUserText.label: 'Multiple BOM Display'
@ObjectModel.query.implementedBy: 'ABAP:ZCL_BOM_DISPLAY'

@UI.headerInfo: {typeName: 'Billofmaterial',typeNamePlural: ' BOM Mass Download'}
                                   
define custom entity Z_BOM_DISPLAY
 with parameters 
//    @Environment.systemField: #SYSTEM_DATE
//    @ui.lineItem :[{label:'Material',position:10,importance: #HIGH }]
     P_KeyDate : vdm_v_key_date
{

    @ui.lineItem :[{label:'Material',position:10,importance: #HIGH }]
    @ui.selectionField: [{ position: 20 }]
//    @Consumption.valueHelpDefinition: [{ entity: {name:'I_ProductStdVH' ,element: 'Product' } }]
    @Consumption.valueHelpDefinition: [{ entity: {name:'I_ProductPlantStdVH' ,element: 'Product' } }]    
    @Consumption.valueHelpDefinition: [{additionalBinding: [{ element: 'Plant', localElement: 'Plant' }]}]  
    @Consumption.filter:{mandatory: true}
        
  key Material                     : matnr;
    @ui.lineItem :[{label:'Plant', position:90, importance: #HIGH }]
    @ui.selectionField: [{ position: 10 }]
    @Consumption.valueHelpDefinition: [{ entity: {name:'I_PlantStdVH' ,element: 'Plant' } }] 
    @Consumption.filter:{mandatory: true}
//    @Consumption.defaultValue: '1310'  
  key Plant                        : werks_d; 

    @ui.hidden: true    
  key BillOfMaterialCategory      : abap.char(1);       
//    @ui.selectionField: [{ position: 50 }]       
    @ui.hidden: true                         
  key Billofmaterial               : abap.char(8);
//    @ui.selectionField: [{ position: 60 }]       
    @ui.hidden: true  
  key Billofmaterialvariant        : abap.char(2);     
    @ui.hidden: true  
  key Billofmaterialitemnodenumber : abap.numc(8);
  
  @ui.lineItem :[{label:'MaterialDesc',position:20,importance: #HIGH  }]
  MaterialDesc                 : abap.char(40); 
  @ui.lineItem :[{label:'ValidityStartdate',position:100,importance: #HIGH  }]
  Validitystartdate            : abap.dats;
  @ui.lineItem :[{label:'ValidityEnddate',position:110,importance: #HIGH }]
  Validityenddate              : abap.dats;
  @ui.lineItem :[{label:'Component',position:50,importance: #HIGH  }]
  Billofmaterialcomponent      : matnr;
  @ui.lineItem :[{label:'ComponentDesc',position:60,importance: #HIGH  }]
//  BillofmaterialcomponentDesc  : abap.char(40);  
  ComponentDescription      : abap.char(40);    
  @ui.lineItem :[{label:'ItemCategory',position:30,importance: #HIGH  }]
  Billofmaterialitemcategory   : abap.char(1);
  @ui.lineItem :[{label:'ItemNumber ',position:40,importance: #HIGH  }]
  Billofmaterialitemnumber     : abap.char(4);
  @ui.lineItem :[{label:'ItemUnit',position:80,importance: #HIGH  }]
//  @Semantics.unitOfMeasure
  Billofmaterialitemunit       : meins;
//  Billofmaterialitemunit       : abap.unit(3);  
  @ui.lineItem :[{label:'ItemQuantity',position:70,importance: #HIGH  }]
//  @Semantics.quantity.unitOfMeasure : 'billofmaterialitemunit'
  Billofmaterialitemquantity   : abap.numc(13); 
//   Billofmaterialitemquantity   : abap.quan(13,3); 
    @ui.hidden: true  
  Identifierbomitem            : abap.char(8);

  @ui.lineItem :[{label:'Level',position:220,importance: #LOW  }]    
  LevelCount                   : abap.numc(8);
  @ui.lineItem :[{label:'Path(Predecessor)',position:230,importance: #LOW  }]    
  Path                         : abap.numc(8);    

}

 

2.3 创建服务定义和服务绑定

创建服务定义(Service Definition)

BOM6.png

 

创建服务绑定(Service Binding)

BOM7.png

 

然后,我们可以预览服务如下:

BOM8.png

 

3. 前端应用开发

首先,配置BTP上的destination。

然后,打开SAP Business Application Studio服务

BOM9.png

 

从Application Generator里选取List Report Page模板

BOM10.png

 

把App部署到SAP S/4hana Public Cloud系统

BOM11.png

 

复制Launchpad App Description Item名字到IAM App:

BOM12.png

 

通过该新应用,我们不仅可以选择多个物料来查看BOM的节点信息,也可以把所有数据下载到Excel表格,以方便用户线下操作。

BOM1.png

 

BOM13.png

 

以上是该案例——BOM批量读取自开发应用的步骤介绍。希望通过此案例的介绍能让您了解到三系统开发能实现的常见功能。 

 

3 Comments