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 TemplateDATA(survey_template) = get_survey_template( ).* Step2: create a new Survey instance guidDATA(survey_guid) = get_new_survey_instance_guid( survey_template ).* Step3: assemble request bodydata(lv_request_body) = assemble_request_body( iv_question1 = iv_question1iv_question2 = iv_question2iv_guid = survey_guid ).* Step4: Submit surveyCALL FUNCTION 'CRM_SVY_RESULT_DISPATCHER'EXPORTINGsurvey_data = lv_request_bodyIMPORTINGreturn = 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'EXPORTINGsurvey_data = lv_request_bodyIMPORTINGreturn = ret.

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

使用ABAP代码提交SAP CRM Survey调查问卷相关推荐

  1. SAP CRM Survey调查问卷的存储模型

    数据库表CRM_SVY_DB_SVS,通过如下的函数CRM_SVY_DB_SVS_CREATE插入: 可以通过指定的创建者和创建时间很容易查找到特定的Survey: 调查问卷的答案明细以XML的格式存 ...

  2. SAP CRM Survey调查问卷的模型设计原理解析

    看这个名为Jerry's Programming Skill的survey,只有两个问题. 以第一个问题Are you able to work with ABAP?为例,使用菜单Goto->S ...

  3. 如何用ABAP代码读取SAP Business partner的附件数据

    Sent: Wednesday, April 3, 2013 9:47 PM Subject: RE: how to read attachment in BP overview UI 我写了一个re ...

  4. 使用代码创建SAP CRM服务请求文档的subject测试数据

    要求所有创建的Service Request的测试数据必须都维护好Subject: 如何用CRM_ORDER_MAINTAIN维护这个field? First have a look at how S ...

  5. 基于若依框架的二次开发_SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架...

    最近工作重点转移到了SAP Commerce上来,正好有机会把该产品里由Java实现的订单处理框架和我之前长期工作过的,ABAP实现的SAP CRM One Order框架做个比较:基于Spring的 ...

  6. SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架

    最近工作重点转移到了SAP Commerce上来,正好有机会把该产品里由Java实现的订单处理框架和我之前长期工作过的,ABAP实现的SAP CRM One Order框架做个比较:基于Spring的 ...

  7. Render CRM Survey in Mobile

    create a survey in CRM: Render it in mobile: See my blog Use ABAP code to fill CRM Survey question a ...

  8. 微信小程序开发之——调查问卷-编写表单页面(2.2.2)

    一 概述 本节介绍表单页面相关的内容: 编写调查问卷表单页面 编写调查问卷样式 设置导航栏标题 二 编写调查问卷表单页面 在微信开发者工具中创建一个新项目,然后在项目中创建pages/index/in ...

  9. SAP CRM user参数CRM_UI_PROFILE是在哪行ABAP代码里读取的

    Sent: Friday, September 26, 2014 4:00 PM Since you are doing operation in backend, so framework will ...

最新文章

  1. Morris post order traversal algorithm
  2. php代码里加图片,php如何添加图片
  3. matlab %3c handle,volume browser (updated).htm 源代码在线查看 - Matlab显式三维地震数据的源代码 资源下载 虫虫电子下载站...
  4. 【Elasticsearch】 Full text queries query_string 等 字符串查询
  5. 添加ejs后页面空白解决办法
  6. 57. TCP relay功能描述及Python实现
  7. 通用预处理器宏assert()的用法
  8. higtech软件的使用
  9. PMO在生物制药GMP生产环境中的实践——《PMO论文集(2019)》(电子版)
  10. 弱监督学习--半监督学习(1):Temporal Ensembling for Semi-Supervised Learning
  11. 每个星座的出生日期php,php根据出生日期计算年龄 生肖 星座程序
  12. html画圆圈加感叹号,感叹号怎么打 拜托了是两个并在一起的叹号,
  13. java程序员创业需要_java程序员出路有哪些
  14. SEO优化_如何伪原创文章方法
  15. 4G LTE概念以及VoLTE
  16. 从图森未来到通用、谷歌,自动驾驶怎么样了?
  17. 【uView】picker 地区选择
  18. 在VS Code中开启gdb的pretty-printer功能
  19. Linux系统调用之execve函数与标准C库exec函数族(有关于进程方面的函数族)
  20. 发那科机器人请关闭电源_发那科FANUC机器人报警处理(中文)

热门文章

  1. Java虚拟机简单介绍
  2. 时间序列研(part2)--相关系数与自相关函数
  3. R开发(part9)--文件系统管理
  4. Django从理论到实战(part19)--DTL模板语法
  5. Django(part11)--利用UUID传递参数
  6. linux怎么用jconsole_jconsole监控linux系统的jvm使用
  7. 一个详尽的面向 SAP UI5 初学者的教程 - 如何在 SAP UI5 中绘制图表 Chart
  8. 如何检查并unregister本地注册的Chrome service worker
  9. Angular rxjs源代码分析:range(0, 10)的实现
  10. 2020-9-16晚上导师问我Spartacus的学习进度,我的回答