zoukankan      html  css  js  c++  java
  • 使用ABAP代码提交SAP CRM Survey调查问卷

    Jerry之前曾经写过两篇关于SAP CRM Survey调查问卷的技术文章:

    • SAP CRM Survey调查问卷的模型设计原理解析
    • 如何使用SAP CRM Marketing Survey创建一个市场问卷调查

    我们在浏览器里填写调查问卷的内容,点击Save保存按钮之后,调查问卷的结果被存储到ABAP后台。

    在ABAP后台系统的Survey Suite工具里,能看到用户填写的survey结果。

    比如下图的意思是:

    问题1:你会用ABAP编程吗?回答会的人有11个,不会的有5个。

    问题2:你会用Java编程吗?回答会的人有10个,不会的有6个。

    现在我有一个需求:写一个ABAP程序,调用SAP CRM Survey的API来提交请求。

    测试程序如下:

    DATA(lo_tool) = NEW zcl_crm_survey_tool( ).
    
    lo_tool->submit( iv_question1 = 'X' iv_question2 = '' ).
    

    执行之后,对比上图,会ABAP的多了1个人,不会Java的多了1个人。

    问题的关键就是如何设计zcl_crm_survey_tool?

    Submit的方法分4个步骤, 见下面注释:

    METHOD submit.
    
    DATA: ret TYPE BAPIRET1.
    
    * Step1: get Survey Template
    
    DATA(survey_template) = get_survey_template( ).
    
    * Step2: create a new Survey instance guid
    
    DATA(survey_guid) = get_new_survey_instance_guid( survey_template ).
    
    * Step3: assemble request body
    
    data(lv_request_body) = assemble_request_body( iv_question1 = iv_question1
    
    iv_question2 = iv_question2
    
    iv_guid = survey_guid ).
    
    * Step4: Submit survey
    
    CALL FUNCTION 'CRM_SVY_RESULT_DISPATCHER'
    
    EXPORTING
    
    survey_data = lv_request_body
    
    IMPORTING
    
    return = ret.
    
    WRITE:/ |result: { ret-message } | COLOR COL_NEGATIVE.
    
    COMMIT WORK AND WAIT.
    
    ENDMETHOD.
    

    步骤1:

    通过方法get_survey_template拿到Survey的模板代码。

    以前的文章已经讲过,Survey模板以XML的格式存储在SAP后台系统,

    然而最终用户在浏览器看到的Survey是html格式的,因此中间有一个步骤通过SAP标准的XSLT将xml转换成html,并且生成一个新的Survey实例。这一系列的动作都封装在我写的方法get_survey_template里面。该方法返回Survey模板的HTML源代码,基于xml转换而成。

    步骤2:

    方法get_new_survey_instance_guid,通过正则表达式将前一步骤生成的Survey实例的guid提取出来。因为后续步骤提交Survey结果时,需要在请求体里加入这个实例guid。

    我采用的是正则表达式的方式解析出该guid,详细步骤参考我的文章:使用ABAP正则表达式解析HTML标签

    步骤3:

    assemble_request_body构造提交的请求方法体。在浏览器里测试发现,如果两个问题的答案都为是,则发送的请求体如下:

    svyApplicationId=CRM_SURVEY_ACTIVITY&SurveyId=JERRY_TEST&svySurveyId=JERRY_TEST&svyVersion=0000000003&SchemaVersion=1 &svySchemaVersion=1 &svyLanguage=EN&conid=&svyValueGuid=FA163EEF573D1ED89E9D22A316FC4754&svyValueVersion=0000000001&svyMandatoryMessage=Fill all mandatory fields before saving&survey/result/question1/answer1_placeholder=answer1_yes&survey/result/question2/answer2_placeholder=answer2_yes&onInputProcessing=SUBMIT

    其中蓝色的guid则是步骤2提取出的Survey实例,红色的代表问题1的答案为是,紫色代表问题2的回答为是。

    这些XML的详细原理,参考我的文章 SAP CRM Survey调查问卷的模型设计原理解析。

    步骤4:

    使用如下函数提交Survey。

    CALL FUNCTION 'CRM_SVY_RESULT_DISPATCHER'
    
    EXPORTING
    
    survey_data = lv_request_body
    
    IMPORTING
    
    return = ret.
    

    要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    ssh无密码登录设置
    Spark Standalone Mode 多机启动 -- 分布式计算系统spark学习(二)(更新一键启动slavers)
    Spark Standalone Mode 单机启动Spark -- 分布式计算系统spark学习(一)
    为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息
    golang官方实现如何对httpserver做频率限制(最大连接数限制)
    【转】涨姿势了,数据库隔离性的几个级别
    loadRunner 11.0 安装及破解
    EF 如何code first
    百度搜索自动提示搜索相关内容----模拟实现
    如何写出专业级OOP程序-----文档注释
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9823133.html
Copyright © 2011-2022 走看看