跳到内容
技术文章
作者的个人资料照片Vijaya Chintarlapalli

使用RAP API读取和创建长篇文章

阅读和创建与销售订单等任何应用程序对象相关联的长篇文本,通常需要在Fiori应用程序中显示购买订单,或者通过RAP API将数据传送到外部系统。

如何处理基于RAP(RESTful ABAP编程模型)的API或使用FIORI编程模型(BOPF)的这种情况?

使用虚拟元素阅读长文本:

如果未提供这些元素作为原始持久性数据模型的一部分,则使用虚拟元素,但是可以在运行时使用ABAP资源计算

虚拟%2017

虚拟元素

使用以下语法进行虚拟元素的注释:

定义视图< 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应用程序。

服务%20binding%20ui%20preview

服务绑定UI预览

使用虚拟元素的局限性:

  • 只能显示1333个字符长度。在Notes的情况下,不能使用虚拟元素打印超过1333个字符。
  • 将工作良好的1:1关系之间的对象ID和备注。然而1:N关系不工作良好
  • 虚拟元素不能与分组或聚合功能一起使用。

使用基于BOPF的长文本框架的CRUD操作:

  1. 使用BoPF基于Bopf的长文本框架的CRUD操作,其中1:n的关系:
  • 通过从Manifest中调用新的Odata服务,我们可以在Fiori应用程序中直接使用基于BOPF的CDS视图。Json文件,并相应地为其编写注解。

BOPF % 20 cd % 20笔记% 20 api

BOPF CDS Notes API

  • 使用ODATA服务SGBT_NTE_CDS_API_D_SRV调用下面的BOPF启用CDS视图API%20for%20%20notes它又调用SAP表sgbt_nte_contt,其中存储了注释信息

基于BOPF的CDS API的限制:

  • 这并不与RAP框架一起耦合在一起,因为这遵循了BOPF框架,因此这与RAP API没有紧密集成

RAP与BOPF对象一体化:

  • 使用RAP查询类使用Unmanaged查询,显示Long文本,如下所示:非托管% 20说唱% 20查询
  • 对于Long文本的更新,在save方法中实现行为定义,使用下面的标准类来执行CUD操作:

Class%20 20 for%20%20cud%20 operations

用于CUD操作的类

因此,我们可以将基于BOPF的长文本API集成到RAP体系结构中。

请提供您的宝贵反馈,如果有其他方式实现相同的在RAP

分配标签

      第一个留下评论
      你必须登录评论或回复帖子。
      Baidu