我正在尝试在 Fiori 应用程序中显示项目文本 在总帐中显示行项目 (F2217)。我已经用虚拟元素扩展了标准 CDS 视图,但是没有调用计算虚拟元素的代码。
我扩展了 CDS 视图
C_JournalEntryItemBrowser
,并将扩展关联到包含虚拟元素的自定义 CDS 视图,如本博客文章中所述。虚拟元素由类ZCL_ACCOUNTING_ITEM_TEXTS
计算。该类实现接口IF_SADL_EXIT_CALC_ELEMENT_READ
。
这是方法的代码
IF_SADL_EXIT_CALC_ELEMENT_READ~calculate
:
MOVE-CORRESPONDING it_original_data TO ct_calculated_data.
LOOP AT ct_calculated_data ASSIGNING FIELD-SYMBOL(<calculated_line>).
ASSIGN COMPONENT 'ZZ_ZTID' OF STRUCTURE <calculated_line> TO FIELD-SYMBOL(<fs_component>).
<fs_component> = 'Test'.
ENDLOOP.
组件
ZZ_ZTID
对应的新列出现在Fiori应用程序中,且值为空,查询应用程序时不会触发Eclipse中设置的断点。
这是包含虚拟元素的 CDS 视图:
@EndUserText.label: 'Query accounting document item texts'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ObjectModel.supportedCapabilities: [ #CDS_MODELING_ASSOCIATION_TARGET, #CDS_MODELING_DATA_SOURCE ]
@OData.publish: true
define view entity Z_I_ACCOUNTING_ITEM_TEXTS as select from I_GLAccountLineItem
{
key SourceLedger,
key CompanyCode,
key FiscalYear,
key AccountingDocument,
key LedgerGLLineItem,
key Ledger,
@ObjectModel.readOnly: true
@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_ACCOUNTING_ITEM_TEXTS'
cast( '' as z_ztid ) as ZZ_ZTID,
_SourceLedger,
_CompanyCode,
_FiscalYear,
_JournalEntry,
_Ledger
}
直接用虚拟元素ZZ_ZTID扩展视图
C_JournalEntryItemBrowser
,然后在FAC_GLV_GL_ACCOUNT_LINE_ITEMS
事务中打开项目SEGW
时,会出现错误:Error related to element 'ZZ_ZTID' of entity 'C_JOURNALENTRYITEMBROWSER(CDS)': Transformation @OBJECTMODEL.VIRTUALELEMENTCALCULATEDBY on element ZZ_ZTID is not allowed in analytical views
当从 /IWFND/ERROR_LOG
事务执行 $metadata 调用时,可以在
/IWFND/GW_CLIENT
事务中发现相同的错误
我相信也是同样的原因,虚拟元素计算没有被触发,并且对于你的场景没有显示任何值
我扩展了另一个 CDS 视图(不是分析性的),并将扩展关联到包含虚拟元素的自定义 CDS 视图,并触发计算并正确填充值。
因此,简短的回答是虚拟元素不能在分析 CDS 视图中使用。