在使用 CDS Annotations 时,我们需要一些选择参数来限制数据以获得预期的输出。在 UI5 应用程序中用作选择屏幕。此类功能可以通过 ABAP CDS 视图的帮助来实现。
1.场景 1:带参数的 CDS 视图
1.1.方法一
在这里,我们将使用参数创建 CDS 视图。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@AbapCatalog.sqlViewName: 'Z_XXXX_V1' // SQL View Name @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @VDM.viewType: #CONSUMPTION @Analytics.query: true @Analytics.dataExtraction.enabled: true @EndUserText.label: 'Consumption view' define view ZCDS_C_XXXX // Defining CDS View with parameters @EndUserText.label: 'Service Order Type' P_OrderType : abap.char( 4 ) // Parameter name & Type as select from ZCDS_I_XXXX (P_OType:$parameters.P_OrderType) // Passing parameter value to composite view { @AnalyticsDetails.query.axis: #ROWS key aXYZ, @EndUserText.label: 'Service Order Type' @AnalyticsDetails.query.axis: #ROWS OrderType } |
tcode:RSRT 中执行 CDS 会给我们如下提示:

生成输入帮助:
在上面的示例中,我们弹出来提供输入,但我们没有获得 F4 输入帮助。这可以如下实现。


在参数级别添加了注释@Consumption.valuehelpDefination: 以获取输入帮助。名称和元素帮助我们连接来自 CDS 视图 ZCDS_XXXX_Value_Help 的输入帮助字段。
我们没有在消费/复合/界面视图中添加任何其他关联相关的 ZCDS_XXXX_Value_Help。
示例代码 –
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
define view ZCDS_C_XXXX // CDS View Name with parameters @Consumption.valueHelpDefinition: // Annotation to link parameter with CDS view which will help to generate Text [ { entity: { name: 'ZCDS_XXXX_Value_Help', element: 'OrderType'} }] @EndUserText.label: 'Service Order Type' P_OrderType : abap.char( 4 ) as select from ZCDS_I_XXXX (P_OType:$parameters.P_OrderType) { @AnalyticsDetails.query.axis: #ROWS key aXYZ, @EndUserText.label: 'Service Order Type' @AnalyticsDetails.query.axis: #ROWS @AnalyticsDetails.query.display: #KEY_TEXT OrderType } |
比如银行行号可使用用如下搜索帮助
|
1 2 3 4 5 6 7 8 9 |
ztrt0003.banks as Banks, // @ObjectModel.foreignKey.association: '_Bank' @Consumption.valueHelpDefinition: [ { entity: { name: 'I_BankStdVH', element: 'BankInternalID' }, additionalBinding: [{ localElement: 'Banks', element: 'BankCountry' }] }] ztrt0003.bankl as Bankl, |
1.2.方法二:
在这个方法中,我们不是用参数创建 CDS,而是使用注解 @consumption.filter.mandatory : True 。该注释将给我们与参数相同的提示。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@AbapCatalog.sqlViewName: 'Z_XXXX_V1' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @VDM.viewType: #CONSUMPTION @Analytics.query: true @Analytics.dataExtraction.enabled: true @EndUserText.label: 'Consumption view' define view ZCDS_C_XXXX as select from ZCDS_I_XXXX { @AnalyticsDetails.query.axis: #ROWS key aXYZ, @Consumption.Filter.mandatory : True // Annotation for input prompts @Consumption.valueHelp : '_ValueHelp.aXXXX' // Annotation to link with CDS view which will generate text @EndUserText.label: 'Service Order Type' @AnalyticsDetails.query.axis: #ROWS @AnalyticsDetails.query.display: #KEY_TEXT OrderType } |
输出:

在这里我们可以看到 F4 帮助也被启用,并且由于注释 @Consumption.ValueHelp 而发生。
当我们使用这个注释时,我们必须在消费视图中提供与我们的关联的连接。
@Consumption.ValueHelp:’_ValueHelp.aXXXX’
这里“_ValueHelp”是关联名称,“aXXXX”是我们生成值帮助的字段。
让我们看一下复合视图。
在这里,我们创建了与 CDS 视图的关联,我们从中生成价值帮助。除此之外,我们在订单类型上面提到了 3 个注解。如果我们在参数中生成值帮助,我们必须使用这些注释。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@AbapCatalog.sqlViewName: 'ZVM_XXX_A1' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @Analytics.dataCategory: #CUBE @VDM.viewType: #COMPOSITE @EndUserText.label: 'Parameter based CDS view' define view ZCDS_I_XXXX as select from aXXX_Table association [0..1] to ZCDS_XXXX_Value_Help as _ValueHelp on $projection.OrderType = _ValueHelp.OrderType { key aXYZ, @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 @ObjectModel.foreignKey.association: '_ValueHelp' aXXXX as OrderType, //Association _ValueHelp } |
@ObjectModel.Foreignkey.association 将与关联中使用的 CDS 视图的主键一起使用。

实现这一目标的替代方法如下 –
i) 在复合视图中使用 @ObjectModel.Text.Association 注释并提供到文本视图的直接映射。
ii) 在消耗视图中使用@Consumption.valueHelp: 注释。
优点:使用此方法,生成输入帮助时无需维度视图。
2.场景二:参数多选
如果我们想允许用户选择多个输入,那么在消费级别使用下面的注释。
|
1 |
@Consumption.filter.multipleSelections: true |
示例代码 –
|
1 2 3 4 5 6 7 8 9 10 11 12 |
define view ZCDS_C_XXXX as select from ZCDS_I_XXXX { @AnalyticsDetails.query.axis: #ROWS key aXYZ, @Consumption.Filter.mandatory : True @Consumption.Filter.MultipleSelections : True // Annotation to enable multiple selection @Consumption.valueHelp : '_ValueHelp.aXXXX' @EndUserText.label: 'Service Order Type' @AnalyticsDetails.query.axis: #ROWS @AnalyticsDetails.query.display: #KEY_TEXT OrderType } |
这将为我们提供多项选择。用户可以选择并传递多个输入来报告。

3.场景 3:带范围选项的参数
如果我们面临需要选择范围选择屏幕的情况,那么我们可以在消费视图中使用下面的注释。
|
1 2 |
@Consumption.filter.mandatory: True @Consumption.filter.selectionType: #RANGE |
4.编写代码以生成价值帮助-
到目前为止,我们已经看到了多种生成参数和 F4 帮助的选项。现在让我们看一下我们在其中生成了价值帮助的 CDS 视图。突出显示在两个 CDS 视图中都很重要的注释。
用于价值帮助关联的 CDS 视图
CDS view used for Value help association
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@AbapCatalog.sqlViewName: 'ZXXXXX' // SQL View Name @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @Analytics.dataCategory: #DIMENSION @VDM.viewType: #BASIC @Search.searchable: true @EndUserText.label: 'Value Help' define view ZCDS_XXXXX_Value_Help as select from tXXXX // CDS View Name and Source Table association [0..1] to ZCDS_XXXXX_TEXT as _TEXT // CDS View from which we will fetch text value on $projection.OrderType = _TEXT.OrderType { @Search.defaultSearchElement: true key aXXXX as OrderType, //Association _TEXT } |
文本的 CDS 视图
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@AbapCatalog.sqlViewName: 'ZXXXXTEXT1' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @VDM.viewType: #BASIC @ObjectModel.dataCategory: #TEXT @Search.searchable: true @EndUserText.label: 'Value Help Text' define view ZCDS_XXXXX_TEXT as select from tXXX01 // CDS View to generate text { key aXXXX as OrderType, // Key Field @Semantics.text: true @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 txt as OrderTypeText // Text Field } where spras = 'E' |
5.重要 说明
如果我们在 CDS 视图中将 txt 字段定义为 Key,那么 F4 帮助中将不会出现文本。
|
1 2 3 4 5 6 7 8 |
define view ZCDS_XXXXX_TEXT as select from tXXX01 // CDS View to generate text { key aXXXX as OrderType, // Key Field @Semantics.text: true @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 Key txt as OrderTypeText // Text Field as Key } |
在下面的屏幕截图中,只有键出现。F4 帮助中缺少文本,因为我们已将 txt 字段定义为 Key

6.创建一个简单CDS作为搜索帮助
先为搜索创建一个CDS.其中使用@AbapCatalog.compiler.compareFilter: true来标记搜索,并使用@UI.lineItem来标记ALV中显示的列,defaultSearchElement: true来标记可用作搜索。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
@AbapCatalog.sqlViewName: 'ZTRC_H_ZTRT0192I' @AbapCatalog.compiler.compareFilter: true @VDM.viewType: #COMPOSITE @ObjectModel.dataCategory: #VALUE_HELP @ObjectModel.representativeKey: 'docno' @ObjectModel.usageType.dataClass: #MASTER @ObjectModel.usageType.sizeCategory: #L @ObjectModel.usageType.serviceQuality: #B @AccessControl.authorizationCheck: #CHECK @ClientHandling.algorithm: #SESSION_VARIABLE @Search.searchable: true @Metadata.ignorePropagatedAnnotations: true @EndUserText.label: 'Bank Master Details' define view ZTRD_H_ZTRT0192I as select from ztrt0192i as _ITEM left outer to one join ztrt0192h as _HEAD on _HEAD.docno = _ITEM.docno { @UI.lineItem: [ { position: 1, importance: #HIGH } ] @Search:{defaultSearchElement:true,ranking:#HIGH,fuzzinessThreshold:0.9} key _ITEM.docno as Docno, @UI.lineItem: [ { position: 2, importance: #HIGH } ] @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 key _ITEM.zitemno as Zitemno, _HEAD.config_type as configtype, @UI.lineItem: [ { position: 3, importance: #HIGH } ] @Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 } _HEAD.doc_type as doctype, @UI.lineItem: [ { position: 4, importance: #HIGH } ] @Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 } _HEAD.type as Ztype, @UI.lineItem: [ { position: 5, importance: #HIGH } ] @Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 } _HEAD.ibukrs as ibukrs, _ITEM.pbukrs as Pbukrs, _ITEM.pyhzh as Pyhzh, _ITEM.pzhmc as Pzhmc, _ITEM.phbkid as Phbkid, _ITEM.phktid as Phktid, _ITEM.pbanks as Pbanks, _ITEM.zfkbankl as Zfkbankl, _ITEM.zfkbanka as Zfkbanka, _ITEM.bank_ind as BankInd, _ITEM.draft as Draft, _ITEM.zboety as Zboety, _ITEM.date_cp as DateCp, _ITEM.date_dq as DateDq, _ITEM.docno_key as DocnoKey, _ITEM.zjsno as Zjsno, _ITEM.bbukrs as Bbukrs, _ITEM.zskbankl as Zskbankl, _ITEM.bhbkid as Bhbkid, _ITEM.bhktid as Bhktid, _ITEM.bbanks as Bbanks, _ITEM.zskbanka as Zskbanka, _ITEM.zskbnkn as Zskbnkn, _ITEM.bzhmc as Bzhmc, _ITEM.bbank_ind as BbankInd, _ITEM.zbskl as Zbskl, _ITEM.zskno as Zskno, _ITEM.zsknam as Zsknam, _ITEM.zywtype as Zywtype, _ITEM.zfmark as Zfmark, _ITEM.zzffs as Zzffs, _ITEM.zjhzfrq as Zjhzfrq, _ITEM.waers as Waers, _ITEM.zzfwrbtr as Zzfwrbtr, _ITEM.prctr as Prctr, _ITEM.hkont as Hkont, _ITEM.flowcode as Flowcode, _ITEM.reason as Reason, _ITEM.delflag as Delflag, _ITEM.i_approved_status as IApprovedStatus, _ITEM.i_approved_required as IApprovedRequired, _ITEM.i_zapernam as IZapernam, _ITEM.i_zaperdat as IZaperdat, _ITEM.i_zaptime as IZaptime, _ITEM.i_zapprover as IZapprover, _ITEM.i_zapprove_date as IZapproveDate, _ITEM.i_zapprove_time as IZapproveTime, _ITEM.i_oaindex as IOaindex, _ITEM.zzjdblxno as Zzjdblxno, _ITEM.zzjdblxms as Zzjdblxms, _ITEM.paymorder as Paymorder, _ITEM.erdat as Erdat, _ITEM.erzet as Erzet, _ITEM.ernam as Ernam, _ITEM.aedat as Aedat, _ITEM.aezet as Aezet, _ITEM.aenam as Aenam } where _ITEM.delflag = '' and _ITEM.paymorder = '' //未生成支付订单的, |
在需要使用搜索的地方使用此搜索帮助,相当于SAPGUI中的F4功能,注意其中字段名区分大小写,不要写错。additionalBinding用来同时返回选择的其它字段。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@Consumption.valueHelpDefinition: [ { entity: { name: 'ZTRD_H_ZTRT0192I', element: 'Docno' }, additionalBinding: [{ localElement: 'DB_ITEMNO', element: 'Zitemno' }] }] cast('' as ztr_0192_docno) as DB_DOCNO, //用资金调拨单创建支付单时,的调拨单号 @ObjectModel: { enabled: 'EXTERNAL_CALCULATION', readOnly: 'EXTERNAL_CALCULATION', mandatory: 'EXTERNAL_CALCULATION' } @Consumption.valueHelpDefinition: [ { entity: { name: 'ZTRD_H_ZTRT0192I', element: 'ZITEMNO' }, additionalBinding: [{ localElement: 'DB_DOCNO', element: 'Docno' }] }] cast('0001' as ztr_itemno) as DB_ITEMNO, //创建支付单时,临时支付单号 |
结论: ABAP CDS 视图有助于构建用户友好的报告。当用户通过任何 UI5 应用程序执行这些报告时,我们可以允许用户进行单选、多选或范围。
