技术文章
使用RAP API读取和创建长篇文章
阅读和创建与销售订单等任何应用程序对象相关联的长篇文本,通常需要在Fiori应用程序中显示购买订单,或者通过RAP API将数据传送到外部系统。
如何处理基于RAP(RESTful ABAP编程模型)的API或使用FIORI编程模型(BOPF)的这种情况?
使用虚拟元素阅读长文本:
如果未提供这些元素作为原始持久性数据模型的一部分,则使用虚拟元素,但是可以在运行时使用ABAP资源计算
虚拟元素
使用以下语法进行虚拟元素的注释:
定义视图< CdsConsumptionView >
作为
{
...
@ ObjectModel.ReadOnly:True
@ ObjectModel.VirtualeLement.
@ ObjectModel.VirtualeLement.CalculatedBy: ‘ABAP:
施放(“作为
...
}
如下面的代码所示,为了显示长文本,可以实现虚拟元素和code退出类。
@ AccessControl.AuthorizationCheck:#Check @ endusertext.Label:'创建基于RAP的争议案例'定义根视图Entity zfcsm_dispute_rap_root作为从r_disputecase {关键纠纷复制软件,脱消审议rootcapator,caseprocesseCoout,caseprocessdamount,paramount,creditedamount,writeOffamount,maxotalyclearedamount,DisputeCaseCurrency,ContactPersonName,ContactPersonEmailAddress,ContactPersonPhoneNumber,ContactPersonFaxNumber,ContactPersonFaxCountry,ContactPerson,客户,企业编码,DisputeCaseExternalApplication,CaseType,CaseID,CaseExternalReference,CaseCreatedBy,CaseCreatedOn,CaseLastChangedBy,CaseLastChangedOn,CaseClosedBy,CaseClosedTime,CasePlannedCloseDate,CaseProcessor,CaseResponsible,CaseTitle,CaseEscalationReason,CaseCategory,CasePriority,CaseAuthorizationLevel,CaseStatusProfile,CaseStatus,CaseSystemstatus,Casereason,/ *关联* / _AuthLevel,_caseattribute,_caseCategory,_casesystemstatus,_CaseTypes,_ChangedByContactCard,_ClosedByContactCard,_CompanyCode,_公司,_CreatedByContactCard,_customer,_DisputeCaseCoordinatorCard,_DisputeCaseExternalAppl,_Escalation,_Individual,_Priority,_ProcessorContactCard,_Reasons,_ResponsibleContactCard,_RootCause,_StatProfile,@ ObjectModel.virtualElement:真@ ObjectModel.virtualElementCalculatedBy: 'ZCL_DISPUTE_NOTES' CAST(''作为abap.Char(1333))作为注释}
实现CDS退出类
类zcl_contest_notes定义公共最终创建公共。公共部分。IF_SADL_EXIT接口。IF_SADL_EXIT_CALC_ELEMENT_READ接口。受保护的部分。私人部分。ENDCLASS。类ZCL_DISPUTE_NOTES实现。if_sadl_exit_calc_element_read ~计算方法。在it_original_data assign FIELD-SYMBOL()处循环。 TRY. DATA(lv_index) = sy-tabix. ASSIGN COMPONENT 'DisputeCaseUUID' OF STRUCTURE TO FIELD-SYMBOL(). * Check if note types are requested IF line_exists( it_requested_calc_elements[ table_line = 'NOTE' ] ). * Get field ASSIGN COMPONENT 'NOTE' OF STRUCTURE ct_calculated_data[ lv_index ] TO FIELD-SYMBOL(). IF sy-subrc EQ 0. DATA : lt_case_note TYPE fdmo_t_case_note_md. DATA(lo_pr_backend) = cl_fdmo_proc_rec_bl=>get_instance( ). CHECK lo_pr_backend IS BOUND. lo_pr_backend->get_case_notes( EXPORTING iv_case_guid = im_db_read = abap_true IMPORTING et_note = lt_case_note ). ENDIF. ENDIF. LOOP AT lt_case_note ASSIGNING FIELD-SYMBOL(). = | { } { -HEADER_LINE } { -content }| . ENDLOOP. CATCH cx_sy_itab_line_not_found INTO DATA(lo_x). RAISE EXCEPTION TYPE lx_sadl_exit EXPORTING previous = lo_x. ENDTRY. ENDLOOP. ENDMETHOD. METHOD IF_SADL_EXIT_CALC_ELEMENT_READ~GET_CALCULATION_INFO. LOOP AT it_requested_calc_elements REFERENCE INTO DATA(lo_req_calc_elem). CASE lo_req_calc_elem->*. WHEN 'note'. IF NOT line_exists( et_requested_orig_elements[ table_line = 'note' ] ). APPEND 'note' to et_requested_orig_elements. ENDIF. WHEN OTHERS. ENDCASE. ENDLOOP. ENDMETHOD. ENDCLASS.
一旦你点击服务绑定中的UI预览,下面就会显示Fiori应用程序。
服务绑定UI预览
使用虚拟元素的局限性:
- 只能显示1333个字符长度。在Notes的情况下,不能使用虚拟元素打印超过1333个字符。
- 将工作良好的1:1关系之间的对象ID和备注。然而1:N关系不工作良好
- 虚拟元素不能与分组或聚合功能一起使用。
使用基于BOPF的长文本框架的CRUD操作:
- 使用BoPF基于Bopf的长文本框架的CRUD操作,其中1:n的关系:
- 通过从Manifest中调用新的Odata服务,我们可以在Fiori应用程序中直接使用基于BOPF的CDS视图。Json文件,并相应地为其编写注解。
BOPF CDS Notes API
- 使用ODATA服务SGBT_NTE_CDS_API_D_SRV调用下面的BOPF启用CDS视图
它又调用SAP表sgbt_nte_contt,其中存储了注释信息
基于BOPF的CDS API的限制:
- 这并不与RAP框架一起耦合在一起,因为这遵循了BOPF框架,因此这与RAP API没有紧密集成
RAP与BOPF对象一体化:
- 使用RAP查询类使用Unmanaged查询,显示Long文本,如下所示:
- 对于Long文本的更新,在save方法中实现行为定义,使用下面的标准类来执行CUD操作:
用于CUD操作的类
因此,我们可以将基于BOPF的长文本API集成到RAP体系结构中。
请提供您的宝贵反馈,如果有其他方式实现相同的在RAP
第一个留下评论
你必须登录评论或回复帖子。