使用ABAP代碼提交SAP CRM Survey調查問卷

Jerry以前曾經寫過兩篇關於SAP CRM Survey調查問卷的技術文章:html

  • 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來提交請求。測試

測試程序以下:ui

DATA(lo_tool) = NEW zcl_crm_survey_tool( ).

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

執行以後,對比上圖,會ABAP的多了1我的,不會Java的多了1我的。設計

問題的關鍵就是如何設計zcl_crm_survey_tool?code

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的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索