REPORT zcrm_in_order_api. TYPES:BEGIN OF ty_but0, partner TYPE bu_partner, bu_group TYPE bu_group, xsexm TYPE bu_xsexm, birthdt TYPE datum, mc_name1 TYPE bu_mcname1, mc_name2 TYPE bu_mcname2, END OF ty_but0, BEGIN OF ty_log, object TYPE crmt_object_id, area TYPE rs38l_area, rtype TYPE bapi_mtype, END OF ty_log, BEGIN OF ty_customer, *customer_details 客户信息结构,包含以下同色字段 first_name TYPE string, " 取售达方First name last_name TYPE string, " 取售达方Last name mobile_phone TYPE string, " 取售达方的移动电话 home_phone TYPE string, " 取售达方固定电话 alternate_phone TYPE string, " 备用电话,留空 email TYPE string, " 取售达方电子邮件地址 contact_person TYPE string, " 联系人,留空 END OF ty_customer, BEGIN OF ty_addr, address TYPE string, landmark TYPE string, pincode TYPE string, END OF ty_addr, BEGIN OF ty_prd, brand TYPE string, " 品牌,取文本,大写 product TYPE string, " 取安装单产品英文描述 model TYPE string, " 取安装单客户型号 serial_number TYPE string, " 取安装单序列号 END OF ty_prd, BEGIN OF ty_war, warranty_period_value TYPE i, " 逻辑待定 warranty_period_unit TYPE string, " 逻辑待定 END OF ty_war, BEGIN OF ty_pay, payment_method TYPE string, " 留空 amount_to_collect TYPE i, " 留空 END OF ty_pay, BEGIN OF ty_create, client_reference_id TYPE string, " 海信安装单号 complaint_type TYPE string, " 订单类型,安装默认‘INSTALLATION’ remarks TYPE string, " 取安装单长文本A002 Note ticket_spd TYPE string, " 日期,先驱Assignment Job Date,格式如:2022-04-29T00:00:00 customer_details TYPE ty_customer, address_details TYPE ty_addr, product_details TYPE ty_prd, " 产品信息结构,包含以下同色字段 warranty_details TYPE ty_war, payment_details TYPE ty_pay, " 付款信息结构,包含以下同色字段 END OF ty_create, BEGIN OF ty_receive, response_code TYPE string, " 返回码,1表示成功 case_id TYPE string, " 服务商系统安装单号 client_reference_id TYPE string, " 海信安装单号 error_message TYPE string, " 错误信息 success TYPE string, " 是否成功,true & false END OF ty_receive. DATA:gw_login TYPE zcrm_login, gw_customer TYPE ty_customer, gw_addr TYPE ty_addr, gw_prd TYPE ty_prd, gw_war TYPE ty_war, gw_pay TYPE ty_pay, gw_create TYPE ty_create, lv_service TYPE string, gw_receive TYPE ty_receive, lv_que_url TYPE string. DATA:gt_fields TYPE tihttpnvp. DATA:gw_index TYPE zhsb_order_index, gt_index TYPE TABLE OF zhsb_order_index, gw_adrc TYPE adrc, gw_adr2 TYPE adr2, gt_adr2 TYPE TABLE OF adr2, gw_adr6 TYPE adr6, gw_t005 TYPE t005u, gw_but0 TYPE ty_but0, lt_crmt13 TYPE TABLE OF zcrmt0013, ls_crmt13 LIKE LINE OF lt_crmt13, gw_log TYPE ty_log, lv_log TYPE zcrmtfr002, gt_line TYPE TABLE OF tline, gw_line LIKE LINE OF gt_line, lv_name TYPE thead-tdname, gt_iflog TYPE TABLE OF zcrmtin001, gw_iflog LIKE LINE OF gt_iflog, v_retailer TYPE string. DATA: lo_des TYPE REF TO zprocessjson, lo_http_client TYPE REF TO if_http_client, lv_customer TYPE string, lv_xrequest TYPE xstring, lx_result TYPE xstring, lv_result TYPE string, lv_que_str TYPE string, lv_len TYPE i, conv TYPE REF TO cl_abap_conv_in_ce, BEGIN OF re_login, access_token TYPE string, token_type TYPE string, expires_in TYPE string, scope TYPE string, END OF re_login. SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE text-001. PARAMETERS:p_org TYPE crmt_sales_org OBLIGATORY DEFAULT 'O 50000615'. PARAMETERS:p_dat TYPE crmt_posting_date OBLIGATORY DEFAULT sy-datum. PARAMETERS:p_prd TYPE bu_partner OBLIGATORY DEFAULT '0000506843'. SELECT-OPTIONS:s_obj FOR gw_index-object_id. SELECTION-SCREEN END OF BLOCK blk01. START-OF-SELECTION. APPEND INITIAL LINE TO gt_index. IF gt_index[] IS NOT INITIAL. SELECT * INTO TABLE gt_iflog FROM zcrmtin001 FOR ALL ENTRIES IN gt_index WHERE guid = gt_index-guid. "获取token PERFORM prm_get_token. CHECK re_login-access_token IS NOT INITIAL. "拼接后续要使用的tken CONCATENATE 'Bearer' re_login-access_token INTO re_login-access_token SEPARATED BY space. LOOP AT gt_index INTO gw_index. CLEAR:gw_adrc,gw_adr6,gt_adr2[],gw_but0,gw_iflog."清空查询数据 CLEAR:gw_login."清空业务数据 READ TABLE gt_iflog INTO gw_iflog WITH KEY guid = gw_index-guid. IF sy-subrc = 0."已存log不再处理 CONTINUE. ENDIF. "客户信息 SELECT SINGLE * INTO gw_adrc FROM adrc WHERE addrnumber = gw_index-addr_nr. SELECT SINGLE * INTO gw_t005 FROM t005u WHERE spras = 'E' AND land1 = gw_adrc-country AND bland = gw_adrc-region. SELECT SINGLE * INTO gw_adr6 FROM adr6 WHERE addrnumber = gw_index-addr_nr. SELECT * INTO TABLE gt_adr2 FROM adr2 WHERE addrnumber = gw_index-addr_nr. SELECT SINGLE partner bu_group xsexm birthdt mc_name1 mc_name2 INTO gw_but0 FROM but000 WHERE partner = gw_index-end_user. "业务数据处理 PERFORM prm_proce_data. "调用API发送单据信息 PERFORM prm_send_data. "记录log PERFORM prm_log. ENDLOOP. ENDIF. *&---------------------------------------------------------------------* *& Form PRM_GET_TOKEN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM prm_get_token . DATA: lv_query_str TYPE string. lv_service = 'xxxxx.xxxxx/xxxxx?xxxxx=xxxxx&xxxxx=xxxxx'. REFRESH gt_fields. PERFORM frm_add_header_value USING '~request_method' 'GET' CHANGING gt_fields. PERFORM frm_add_header_value USING '~request_uri' lv_service CHANGING gt_fields. cl_http_client=>create_by_url( EXPORTING url = lv_service IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4 ). lo_http_client->request->if_http_entity~set_content_type( content_type = 'application/x-www-form-url_encoded' ). lo_http_client->request->set_method( if_http_request=>co_request_method_get ). lo_http_client->request->set_header_fields( gt_fields ). * lo_http_client->request->set_method( if_http_request=>co_request_method_post ). lo_http_client->send( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 ). lo_http_client->receive( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 ). IF sy-subrc <> 0. ENDIF. CLEAR lv_result . lx_result = lo_http_client->response->get_data( ). CALL METHOD lo_http_client->close. CHECK lx_result IS NOT INITIAL. CALL METHOD cl_abap_conv_in_ce=>create EXPORTING encoding = '8400' RECEIVING conv = conv. conv->convert( EXPORTING input = lx_result IMPORTING data = lv_result ). zprocessjson=>deserialize( EXPORTING json = lv_result CHANGING data = re_login ). "获取token结束 ENDFORM. FORM frm_add_header_value USING lv_name lv_value CHANGING lt_fields TYPE tihttpnvp. DATA: lw_fields TYPE ihttpnvp. lw_fields-name = lv_name. lw_fields-value = lv_value. APPEND lw_fields TO lt_fields. ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_SEND_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM prm_send_data . CLEAR:lv_que_str. lv_customer = zprocessjson=>serialize( data = gw_create pretty_name = 'L' ). lv_que_url = 'https://xxxxx/xxxxx/xxxx/xxxx'. lv_que_str = lv_customer. REPLACE ALL OCCURRENCES OF `\` IN lv_que_str WITH ''. FREE:lo_http_client. cl_http_client=>create_by_url( EXPORTING url = lv_que_url * ssl_id = 'ANONYM' IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4 ). lo_http_client->request->if_http_entity~set_content_type( content_type = 'application/json' ). lo_http_client->request->if_http_entity~set_header_field( name = 'Accept' value = 'application/json' ). lo_http_client->request->set_method( if_http_request=>co_request_method_post ). lo_http_client->request->if_http_entity~set_header_field( name = 'Authorization' value = re_login-access_token ). lo_http_client->request->if_http_entity~set_header_field( name = 'X-CLIENT-ID' value = 'hisense_jeeves' ). lo_http_client->request->if_http_entity~set_header_field( name = '~server_protocol' value = 'HTTP/1.1' ). lo_http_client->response->if_http_entity~set_content_type( content_type = 'application/json' ). lv_len = strlen( lv_que_str ). CALL METHOD lo_http_client->request->set_cdata EXPORTING data = lv_que_str offset = 0 length = lv_len. lo_http_client->send( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 ). lo_http_client->receive( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 ). IF sy-subrc <> 0. ENDIF. DATA:v_i TYPE i, v_s TYPE string. CLEAR lv_result . lx_result = lo_http_client->response->get_data( ). lo_http_client->response->get_status( IMPORTING code = v_i reason = v_s ). CALL METHOD lo_http_client->close. CHECK lx_result IS NOT INITIAL. CALL METHOD cl_abap_conv_in_ce=>create EXPORTING encoding = '8400' RECEIVING conv = conv. conv->convert( EXPORTING input = lx_result IMPORTING data = lv_result ). "ree zprocessjson=>deserialize( EXPORTING json = lv_result CHANGING data = gw_receive ). CHECK 1 = 1 . ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_PROCE_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM prm_proce_data . *customer_details 客户信息结构,包含以下同色字段 gw_customer-first_name = gw_adrc-name1. gw_customer-last_name = gw_adrc-name2. IF gw_customer-last_name IS INITIAL. gw_customer-last_name = gw_customer-first_name. ENDIF. IF gw_customer-first_name IS INITIAL AND gw_customer-last_name IS INITIAL. gw_customer-first_name = gw_but0-mc_name1. gw_customer-last_name = gw_but0-mc_name2. ENDIF. READ TABLE gt_adr2 INTO gw_adr2 WITH KEY r3_user = '1'. IF sy-subrc = 0. gw_customer-home_phone = gw_adr2-telnr_long. ENDIF. READ TABLE gt_adr2 INTO gw_adr2 WITH KEY r3_user = '3'. IF sy-subrc = 0. gw_customer-mobile_phone = gw_adr2-telnr_long. ENDIF. gw_customer-email = gw_adr6-smtp_addr. "address_details详细地址,格式为:售达方street/售达方City1/售达方Region描述 CONCATENATE gw_adrc-street gw_adrc-str_suppl1 gw_adrc-city1 gw_t005-bezei INTO gw_addr-address SEPARATED BY space. gw_addr-pincode = gw_adrc-post_code1. "product_details gw_prd-brand = gw_index-zzzbrand. gw_prd-model = gw_index-zzzmodeno. gw_prd-serial_number = gw_index-zzzserialno. SELECT SINGLE short_text INTO gw_prd-product FROM comm_prshtext INNER JOIN comm_product ON comm_product~product_guid = comm_prshtext~product_guid WHERE comm_product~product_id = gw_index-product_id AND comm_prshtext~langu = 'E'. gw_create-client_reference_id = gw_index-object_id. gw_create-complaint_type = 'INSTALLATION'. lv_name = gw_index-guid. CALL FUNCTION 'READ_TEXT' EXPORTING id = 'A002' language = 'E' name = lv_name object = 'CRM_ORDERH' TABLES lines = gt_line EXCEPTIONS id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 wrong_access_to_archive = 7 OTHERS = 8. IF sy-subrc <> 0. ELSE. LOOP AT gt_line INTO gw_line. REPLACE ALL OCCURRENCES OF `\` IN gw_line-tdline WITH ''. REPLACE ALL OCCURRENCES OF `"` IN gw_line-tdline WITH ''. IF gw_line-tdformat = '*'. CONCATENATE gw_create-remarks cl_abap_char_utilities=>cr_lf gw_line-tdline INTO gw_create-remarks SEPARATED BY space. ELSE. CONCATENATE gw_create-remarks gw_line-tdline INTO gw_create-remarks SEPARATED BY space. ENDIF. ENDLOOP. ENDIF. gw_create-ticket_spd = gw_index-assign_date+0(4) && '-' && gw_index-assign_date+4(2) && '-' && gw_index-assign_date+6(2) && 'T00:00:00'. gw_pay-payment_method = 'PREPAID'. gw_pay-amount_to_collect = 0. gw_war-warranty_period_value = 3. gw_war-warranty_period_unit = 'YEARS'. gw_create-customer_details = gw_customer. gw_create-address_details = gw_addr. gw_create-product_details = gw_prd. gw_create-warranty_details = gw_war. gw_create-payment_details = gw_pay. * * ENDFORM. *&---------------------------------------------------------------------* *& Form PRM_LOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM prm_log . DATA:v_s1 TYPE string, v_s2 TYPE string. IF gw_receive-response_code = 1. gw_iflog-guid = gw_index-guid. gw_iflog-object_id = gw_index-object_id. gw_iflog-ref_obj = gw_receive-case_id. gw_iflog-flag = 'X'. gw_iflog-create_flg = 'X'. MODIFY zcrmtin001 FROM gw_iflog. gw_log-rtype = 'S'. ELSE. gw_log-rtype = 'E'. ENDIF. DELETE FROM zcrmtfr002 WHERE object = gw_index-object_id. gw_log-object = gw_index-object_id. gw_log-area = 'EJSON'. EXPORT gw_log-area = lv_result TO DATABASE zcrmtfr002(fr) FROM lv_log ID gw_log. gw_log-area = 'SJSON'. EXPORT gw_log-area = lv_que_str TO DATABASE zcrmtfr002(fr) FROM lv_log ID gw_log. IF gw_log-rtype = 'E'. WRITE: / gw_index-object_id , lv_result. ENDIF. ENDFORM.
^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^