Let’s try to resolve one real issue now. What we want to achieve is: in CRM we need a CDS view which returns the service order guid together with its Sold-to Party information, “Title” ( Mr. ) and “Name” ( blGMOUTH ).
The title and Name information are stored on table BUT000, while Service order transactional information is maintained in tableCRMD_PARTNER, which has a field PARTNER_NO ( CHAR32 ) linking to table BUT000’s PARTNER_GUID ( RAW16 ).
It is not allowed to do join on these two fields since their data type are not equal. This question is asked via this SCN thread: ABAP CDS View: join tables on columns of different type.
As suggested in the Correction Answer, this issue could be resolved by using CDS Table Function. Here below are the detail steps.
(1) Create a new table function
@ClientDependent: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
define table function ztf_BP_DETAIL
with parameters @Environment.systemField: #CLIENT
clnt:abap.clnt
returns { client:s_mandt;
partner_guid:BU_PARTNER_GUID;
partset_guid:CRMT_OBJECT_GUID;
partner_no: CRMT_PARTNER_NO;
bp_guid: BU_PARTNER_GUID;
title:AD_TITLE;
name: BU_NAME1TX;
}
implemented by method
zcl_amdp_bp_detail=>crmd_partner_but000;
With keyword “with parameters”, the client parameters is defined which works as the importing parameters for the ABAP class method zcl_amdp_bp_detail=>crmd_partner_but000. The keywords “returns” defines available fields which could be consumed by other CDS entities.
For further information about AMDP ( ABAP Managed Database Procedure ), please refer to this document Implement and consume your first ABAP Managed Database Procedure on HANA or this blog An example of AMDP( ABAP Managed Database Procedure ) in 740.
(2) Create a new AMDP implementation
Create a new ABAP class zcl_amdp_bp_detail by copying the following source code:
CLASS zcl_amdp_bp_detail DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
CLASS-METHODS crmd_partner_but000 FOR TABLE FUNCTION ztf_bp_Detail.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_amdp_bp_detail IMPLEMENTATION.
METHOD crmd_partner_but000
BY DATABASE FUNCTION FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING crmd_partner but000.
RETURN SELECT sc.client as client,
sc.partner_guid as partner_guid,
sc.guid as partset_guid,
sc.partner_no as partner_no,
sp.partner_guid as bp_guid,
sp.title as title,
sp.name1_text as name
FROM crmd_partner AS sc
INNER JOIN but000 AS sp ON sc.client = sp.client AND
sc.partner_no = sp.partner_guid
WHERE sc.client = :clnt AND
sc.partner_fct = '00000001'
ORDER BY sc.client;
ENDMETHOD.
ENDCLASS.
Here in line 30 the two columns of CRMD_PARTNER and BUT000 are joined. The importing parameter is used in SQLScript source code by adding a “:” before the variable name. The hard code “00000001” means the constant value for partner function “Sold-to Party”.
(3) Consume the created table function in CDS view
@AbapCatalog.sqlViewName: 'zcpartner'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'partner detail'
define view Z_c_partner as select from crmd_orderadm_h
inner join crmd_link as _link on crmd_orderadm_h.guid = _link.guid_hi and _link.objtype_hi = '05'
and _link.objtype_set = '07'
inner join ztf_bp_detail( clnt: '001') as _bp on _link.guid_set = _bp.partset_guid
{
key crmd_orderadm_h.guid,
--_link.objtype_hi as header_type,
--_link.objtype_set as item_type,
_bp.bp_guid,
_bp.partner_no,
_bp.name,
case _bp.title
when '0001' then 'Ms.'
when '0002' then 'Mr.'
when '0003' then 'Company'
when '0004' then 'Mr and Mrs'
else 'Unknown'
end as title
}
Please note that the created table function in step1 could be directly consumed just as a normal CDS view, see example in line 8. Since the table function declares client as parameter, so when consumed, I put the current client id 001 into it. The fields defined as the returning parameters in table function could be used in consuming view.
(4) Test the whole solution Click F8 on the view z_c_partner, check whether data previews as expected.
or you can also check against single data record, by clicking “SQL Console”, maintain the SQL and click Run:
The same test could also easily be done on ABAP side:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
SAP培训SD模块课程第64:S4里如何配置和使用建立客户和供应商
完整版的sap初级技能自学教程。学习SAP的入门教程。
完整版自学sap初级教程
SAP各模块常用TABLE
节点模块CDS-SCP-API在SAP Cloud Platform上的Cloud Application Programming(CAP)模型中简化了来自SAP OnPremise和Cloud API,Microsoft Office 365 API,Google Cloud Platform API和其他REST API的消耗性外部...
包教包会,手把手教你创建SAP的CDS View视图,带每个操作截图。找对应版本,某些问题注意与解决
SAP ABAP开发学习——第3课:数据字典2(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
介绍table control使用,手动方式设计table control
sap常用table sap常用table sap常用table sap常用table
SAP ODATA Training Agenda • Session 1: Introduction to SAPUI5 / FIORI (40 mins) ▫ Basic MVC concept: Model, View, Controller ▫ UI5 Control libraries • Session 2: Introduction to SAP Web IDE (20 ...
SAP BC460
SAP ABAP开发学习——第9课:ALV2(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
SAP各模块视频教程,十大模块全部包含,视频学习效率很高,欢迎下载
sap查表方法,里面讲了18中方法,其中有几种很常见,希望对大家有帮组。
SAP初级技能自学教程
教程名称:零基础学SAP中文PDF教程课程目录:【】零基础学SAP中文教程-Basic Part2【】零基础学SAP中文教程-Basic【】零基础学SAP中文教程-DB【】零基础学SAP中文教程-FI Part2【】零基础学SAP中文教程-FI【】零基础...
官方CDS注解说明
SAP ABAP开发学习——第19课:实战讲解(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
sap2000案例操作教程.pdfsap2000案例操作教程.pdfsap2000案例操作教程.pdfsap2000案例操作教程.pdfsap2000案例操作教程.pdfsap2000案例操作教程.pdf