使用 ABAP 函数读取 SAP CRM Survey 数据并解析

简介: 使用 ABAP 函数读取 SAP CRM Survey 数据并解析

本文介绍源代码和解析。

源代码:

*&---------------------------------------------------------------------*
*& Report ZSURVEY_READ
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSURVEY_READ.
DATA: vguid    TYPE crm_svy_db_sv_guid.
DATA: vvers    TYPE crm_svy_db_svers.
DATA: svy_content TYPE string.
DATA: ret TYPE bapiret1.
DATA: apppar   TYPE TABLE OF crm_svy_db_sv_pair.
data: lv_x type xstring.
 CALL FUNCTION 'CRM_SVY_SURVEY_GET'
      EXPORTING
        application_id     = 'CRM_SURVEY_ACTIVITY'
        survey_id          = 'JERRY_TEST'
        survey_version     = '0000000003'
        language           = 'E'
        media_type         = '01'
        parameter_xml      = 'CRM_SVY_BSP_SYSTEMPARAM.XML'
        values_guid        = vguid
        values_version     = vvers
      IMPORTING
        return             = ret
        content            = svy_content
      TABLES
        application_params = apppar.
call FUNCTION 'CRM_SVY_DB_CONVERT_STRING2HEX'
  EXPORTING
     s = svy_content
  IMPORTING
     x = lv_x.
DATA lr_conv TYPE REF TO cl_abap_conv_in_ce.
data: lv_request_xml type string.
CALL METHOD cl_abap_conv_in_ce=>create
  EXPORTING
    input = lv_x
  RECEIVING
    conv  = lr_conv.
CALL METHOD lr_conv->read
  IMPORTING
    data = lv_request_xml.
DATA(reg_pattern) = '.*svyValueGuid(?:.*)value="(.*)">.*SurveyId.*'.
DATA(lo_regex) = NEW cl_abap_regex( pattern = reg_pattern ).
DATA(lo_matcher) = lo_regex->create_matcher( EXPORTING text = lv_request_xml ).
IF lo_matcher->match( ) <> abap_true.
  WRITE:/ 'fail'.
  RETURN.
ENDIF.
DATA(lt_reg_match_result) = lo_matcher->find_all( ).
READ TABLE lt_reg_match_result ASSIGNING FIELD-SYMBOL(<match>) index 1.
read TABLE <match>-submatches ASSIGNING FIELD-SYMBOL(<submatch>) index 1.
data:lv type string.
lv = lv_request_xml+<submatch>-offset(<submatch>-length).
TRY.
reg_pattern = '.*<input(.*)>.*'.
lo_regex = NEW cl_abap_regex( pattern = reg_pattern ).
lo_matcher = lo_regex->create_matcher( EXPORTING text = lv ).
IF lo_matcher->match( ) <> abap_true.
  WRITE:/ 'fail in input scan'.
  RETURN.
ENDIF.
data: result_tab TYPE match_result_tab.
FIND ALL OCCURRENCES OF REGEX '<input(.*)>' IN lv RESULTS result_tab.
WRITE:/ lv.
BREAK-POINT.
CATCh cx_root into data(cx_root).
   WRITE:/ cx_root->get_text( ).
   return.
endtry.
CLEAR: lt_reg_match_result.
lt_reg_match_result = lo_matcher->find_all( ).
READ TABLE lt_reg_match_result ASSIGNING FIELD-SYMBOL(<input>) index 1.
WRITE:/ 'input:', lines( <input>-submatches ).
read TABLE <input>-submatches ASSIGNING <submatch> index 1.
data(new) = lv+<submatch>-offset(<submatch>-length).
WRITE:/ new.

这段 ABAP 代码的主要作用是从一个 CRM (Customer Relationship Management,客户关系管理) 系统中读取调查问卷的内容,并分析其中的数据。以下是对代码的详细解释:


1.报告声明和数据定义:


  • REPORT ZSURVEY_READ.:定义了一个报告的名称,可能是自定义的 CRM 报告。
  • 数据定义部分声明了一些变量用于存储从 CRM 系统获取的数据。


2.调用 CRM 函数:


  • CALL FUNCTION 'CRM_SVY_SURVEY_GET':这是一个函数调用,用于从 CRM 系统中获取调查问卷的信息。传递了一些参数,如应用程序 ID、调查 ID、版本等,以获取相关信息。获取的数据存储在 svy_content 变量中。


3.将内容转换为十六进制:


  • CALL FUNCTION 'CRM_SVY_DB_CONVERT_STRING2HEX':这个函数调用将获取的调查问卷内容(svy_content)转换为十六进制编码,并将结果存储在 lv_x 变量中。


4.文本转码和分析:


  • 使用 cl_abap_conv_in_ce 类来创建一个转码器,将十六进制数据转换为文本形式。
  • 然后,通过正则表达式匹配和分析 lv_request_xml,该 XML 包含了调查问卷的数据。
  • 此部分代码的目标是从 XML 中提取有关调查问卷的特定信息,例如 svyValueGuid 的值。


5.正则表达式匹配:


  • 使用正则表达式来匹配 lv_request_xml 中的数据,提取关键信息。
  • DATA(reg_pattern) 和 DATA(lo_regex) 用于定义和创建正则表达式对象。
  • lo_matcher 对象用于执行匹配操作,提取匹配结果。


6.异常处理:


  • 使用 TRY-CATCH 块来处理可能的异常情况。如果正则表达式匹配失败,会生成一个异常。
  • 异常处理部分打印出异常信息并终止代码执行。


7.继续匹配:


  • 在成功匹配 svyValueGuid 后,代码继续匹配 input 标签。这部分代码可能是为了提取与调查问卷相关的更多信息。


8.最终输出:


  • 最后,代码提取匹配结果,并将结果存储在 new 变量中。
  • 结果被打印出来,可能是为了进一步处理或显示给用户。


这段代码的核心任务是从 CRM 系统中获取调查问卷的信息并对其进行分析。具体的调查问卷内容和所需信息可能会根据实际情况而有所不同。代码中使用了正则表达式来从 XML 数据中提取所需的信息,然后将其存储在变量中供后续处理使用。在实际应用中,这些数据可能会用于生成报告、分析用户反馈或其他与调查问卷相关的操作。


相关文章
|
24天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
53 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
1月前
|
API
在阿里云RPA中,你可以使用"SetForegroundWindow"函数来将SAP控件置顶
【2月更文挑战第28天】 在阿里云RPA中,你可以使用"SetForegroundWindow"函数来将SAP控件置顶
23 1
|
1月前
|
中间件
什么是 SAP CRM 系统里的 Initial Download
什么是 SAP CRM 系统里的 Initial Download
23 0
|
1月前
|
中间件
什么是 SAP CRM Initial Download
什么是 SAP CRM Initial Download
20 0
|
1月前
|
存储 数据管理 数据处理
SAP CRM 里 Attachment 搜索的实现逻辑介绍
SAP CRM 里 Attachment 搜索的实现逻辑介绍
21 0
|
1月前
|
JSON 数据格式
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
27 0
|
2月前
|
存储 数据库 容器
深入介绍 SAP CRM 附件存储的底层实现机制
深入介绍 SAP CRM 附件存储的底层实现机制
30 0
|
20天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
19 0
|
24天前
|
数据库
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
17 5
|
24天前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
27 6
介绍一个 webp 格式转 png 格式的软件:XNConvert

热门文章

最新文章

推荐镜像

更多