使用ABAP代码提交SAP CRM Survey调查问卷
Jerry之前曾經(jīng)寫過兩篇關(guān)于SAP CRM Survey調(diào)查問卷的技術(shù)文章:
- SAP CRM Survey調(diào)查問卷的模型設(shè)計(jì)原理解析
- 如何使用SAP CRM Marketing Survey創(chuàng)建一個(gè)市場(chǎng)問卷調(diào)查
我們?cè)跒g覽器里填寫調(diào)查問卷的內(nèi)容,點(diǎn)擊Save保存按鈕之后,調(diào)查問卷的結(jié)果被存儲(chǔ)到ABAP后臺(tái)。
在ABAP后臺(tái)系統(tǒng)的Survey Suite工具里,能看到用戶填寫的survey結(jié)果。
比如下圖的意思是:
問題1:你會(huì)用ABAP編程嗎?回答會(huì)的人有11個(gè),不會(huì)的有5個(gè)。
問題2:你會(huì)用Java編程嗎?回答會(huì)的人有10個(gè),不會(huì)的有6個(gè)。
現(xiàn)在我有一個(gè)需求:寫一個(gè)ABAP程序,調(diào)用SAP CRM Survey的API來提交請(qǐng)求。
測(cè)試程序如下:
DATA(lo_tool) = NEW zcl_crm_survey_tool( ).lo_tool->submit( iv_question1 = 'X' iv_question2 = '' ).執(zhí)行之后,對(duì)比上圖,會(huì)ABAP的多了1個(gè)人,不會(huì)Java的多了1個(gè)人。
問題的關(guān)鍵就是如何設(shè)計(jì)zcl_crm_survey_tool?
Submit的方法分4個(gè)步驟, 見下面注釋:
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的模板代碼。
以前的文章已經(jīng)講過,Survey模板以XML的格式存儲(chǔ)在SAP后臺(tái)系統(tǒng),
然而最終用戶在瀏覽器看到的Survey是html格式的,因此中間有一個(gè)步驟通過SAP標(biāo)準(zhǔn)的XSLT將xml轉(zhuǎn)換成html,并且生成一個(gè)新的Survey實(shí)例。這一系列的動(dòng)作都封裝在我寫的方法get_survey_template里面。該方法返回Survey模板的HTML源代碼,基于xml轉(zhuǎn)換而成。
步驟2:
方法get_new_survey_instance_guid,通過正則表達(dá)式將前一步驟生成的Survey實(shí)例的guid提取出來。因?yàn)楹罄m(xù)步驟提交Survey結(jié)果時(shí),需要在請(qǐng)求體里加入這個(gè)實(shí)例guid。
我采用的是正則表達(dá)式的方式解析出該guid,詳細(xì)步驟參考我的文章:使用ABAP正則表達(dá)式解析HTML標(biāo)簽
步驟3:
assemble_request_body構(gòu)造提交的請(qǐng)求方法體。在瀏覽器里測(cè)試發(fā)現(xiàn),如果兩個(gè)問題的答案都為是,則發(fā)送的請(qǐng)求體如下:
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
其中藍(lán)色的guid則是步驟2提取出的Survey實(shí)例,紅色的代表問題1的答案為是,紫色代表問題2的回答為是。
這些XML的詳細(xì)原理,參考我的文章 SAP CRM Survey調(diào)查問卷的模型設(shè)計(jì)原理解析。
步驟4:
使用如下函數(shù)提交Survey。
CALL FUNCTION 'CRM_SVY_RESULT_DISPATCHER'EXPORTINGsurvey_data = lv_request_bodyIMPORTINGreturn = ret.要獲取更多Jerry的原創(chuàng)技術(shù)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙"或者掃描下面二維碼:
總結(jié)
以上是生活随笔為你收集整理的使用ABAP代码提交SAP CRM Survey调查问卷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绝地求生腾讯代理了吗
- 下一篇: SAP CRM Survey调查问卷的模