
紧随这篇博客,今天我们将再次逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。
我们有些客户希望查看BOM所有层级的数据,也希望能够批量下载BOM所有层级的数据。我们有标准应用程序“Display BOM level by level”可以查看或下载单个物料的BOM所有层级信息,但是没有应用程序可以查看或下载多个物料的BOM所有层级数据。我们这个案例的开发应用就是来完成这样一个需求。
standard App Display BOM level by level can only view the data for single Material
通过开发人员可扩展性,我们创建了一个自定义的应用程序,允许用户选择多个物料,可以查看或下载所选物料的所有节点数据。
创建一个新的数据定义(data definition)
创建类ZCL_BOM_DISPLAY,在这个类里包含了详细的数据查询逻辑。
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);
}
创建服务定义(Service Definition)
创建服务绑定(Service Binding)
然后,我们可以预览服务如下:
首先,配置BTP上的destination。
然后,打开SAP Business Application Studio服务
从Application Generator里选取List Report Page模板
把App部署到SAP S/4hana Public Cloud系统
复制Launchpad App Description Item名字到IAM App:
通过该新应用,我们不仅可以选择多个物料来查看BOM的节点信息,也可以把所有数据下载到Excel表格,以方便用户线下操作。
以上是该案例——BOM批量读取自开发应用的步骤介绍。希望通过此案例的介绍能让您了解到三系统开发能实现的常见功能。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
10 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 | |
3 | |
3 | |
3 |