­

SAP CRM content management工具類

  • 2020 年 1 月 21 日
  • 筆記
class ZCL_CRM_CM_TOOL definition    public    final    create public .    public section.      class-methods GET_DATA_BY_URL      importing        !IV_URL type STRING      returning        value(EV_DATA) type XSTRING .    class-methods CREATE_DOC      importing        !IV_DATA type XSTRING        !IV_BOR_TYPE type STRING        !IV_GUID type SMI_SOCIALDATAUUID        !IV_FILE_NAME type STRING .    class-methods DELETE_DOC      importing        !IV_BOR_TYPE type STRING        !IV_UUID type SOCIALDATA-SOCIALDATAUUID      returning        value(RV_SUCCESSFUL) type ABAP_BOOL .    class-methods GET_ATTACHMENTS      importing        !IV_GUID type SIBFLPORB-INSTID        !IV_BOR_TYPE type STRING      exporting        value(LOIOS) type SKWF_IOS        value(PHIOS) type SKWF_IOS .    class-methods CHANGE_PROPERTY      importing        !IV_GUID type SIBFLPORB-INSTID        !IV_BOR_TYPE type STRING        !IV_ATTR_NAME type STRING        !IV_NEW_VALUE type STRING .    class-methods CLASS_CONSTRUCTOR .    class-methods GET_PRODUCT_DOC_URL      importing        !IV_PROD_ID type COMM_PRODUCT-PRODUCT_ID      returning        value(RT_URL) type STRING_TABLE .    class-methods GET_TEXT_BY_URL      importing        !IV_URL type STRING      returning        value(EV_TEXT) type STRING .    class-methods IS_TEXT_FILE      importing        !IS_IO type SKWF_IO      returning        value(RV_TRUE) type ABAP_BOOL .    class-methods GET_PROD_ID_BY_PHIO      importing        !IV_PHIO type SDOK_PHID      returning        value(RV_PROD_ID) type COMM_PRODUCT-PRODUCT_ID .    class-methods DOWNLOAD_LOCALLY      importing        !IV_LOCAL_PATH type STRING        !IV_BINARY type XSTRING .    class-methods GET_PIC_FROM_CLIPBOARD      returning        value(ET_PIC) type STRING_TABLE .  protected section.  private section.  ENDCLASS.        CLASS ZCL_CRM_CM_TOOL IMPLEMENTATION.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>CHANGE_PROPERTY  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_GUID                        TYPE        SIBFLPORB-INSTID  * | [--->] IV_BOR_TYPE                    TYPE        STRING  * | [--->] IV_ATTR_NAME                   TYPE        STRING  * | [--->] IV_NEW_VALUE                   TYPE        STRING  * +--------------------------------------------------------------------------------------</SIGNATURE>    method CHANGE_PROPERTY.      DATA: loios  TYPE SKWF_IOS,            phios  TYPE SKWF_IOS,            ls_header TYPE SDOKOBJECT,            lt_properties TYPE STANDARD TABLE OF SDOKPROPTY.        DATA(ls_property) = VALUE SDOKPROPTY( name = iv_attr_name value = iv_new_value ).      APPEND ls_property TO lt_properties.        CALL METHOD zcl_crm_cm_tool=>GET_ATTACHMENTS        EXPORTING           iv_guid = iv_guid           iv_bor_type = iv_bor_type        IMPORTING           LOIOS = LOIOS           phios = phios.        LOOP AT phios ASSIGNING FIELD-SYMBOL(<ios>).         ls_header-class =  <ios>-class.         ls_header-objid = <ios>-objid.        CALL FUNCTION 'SDOK_PHIO_PROPERTIES_SET'          EXPORTING            object_id = ls_header          TABLES            properties = lt_properties          EXCEPTIONS            NOT_EXISTING = 1            BAD_PROPERTIES = 2            NOT_AUTHORIZED = 3            EXCEPTION_IN_EXIT = 4.          IF sy-subrc <> 0.           BREAK-POINT.        ENDIF.        ENDLOOP.      endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>CLASS_CONSTRUCTOR  * +-------------------------------------------------------------------------------------------------+  * +--------------------------------------------------------------------------------------</SIGNATURE>    method CLASS_CONSTRUCTOR.      CALL FUNCTION 'SDOK_INTERNAL_MODE_ACCESS'        EXPORTING          MODE_REQUESTED = '01'.    endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>CREATE_DOC  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_DATA                        TYPE        XSTRING  * | [--->] IV_BOR_TYPE                    TYPE        STRING  * | [--->] IV_GUID                        TYPE        SMI_SOCIALDATAUUID  * | [--->] IV_FILE_NAME                   TYPE        STRING  * +--------------------------------------------------------------------------------------</SIGNATURE>    method CREATE_DOC.      DATA:           ls_bo              TYPE sibflporb,           ls_prop            TYPE LINE OF sdokproptys,           lt_prop            TYPE sdokproptys,           lt_properties_attr TYPE crmt_attr_name_value_t,           ls_file_info       TYPE sdokfilaci,           lt_file_info       TYPE sdokfilacis,           lt_file_content    TYPE sdokcntbins,           lv_length          TYPE i,           lv_file_xstring    TYPE xstring,           ls_loio            TYPE skwf_io,           ls_phio            TYPE skwf_io,           ls_error           TYPE skwf_error.        ls_prop-name = 'DESCRIPTION'.      ls_prop-value = 'created by Tool'.      APPEND ls_prop TO lt_prop.        ls_prop-name = 'KW_RELATIVE_URL'.      ls_prop-value = iv_file_name.      APPEND ls_prop TO lt_prop.        ls_prop-name = 'LANGUAGE'.      ls_prop-value = sy-langu.      APPEND ls_prop TO lt_prop.    " read only field, cannot work  *    ls_prop-name = 'CREATED_BY'.  *    ls_prop-value = 'DAIDE'.  *    APPEND ls_prop TO lt_prop.        lv_file_xstring = iv_data.      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'        EXPORTING          buffer        = lv_file_xstring        IMPORTING          output_length = lv_length        TABLES          binary_tab    = lt_file_content.        ls_file_info-binary_flg = 'X'.      ls_file_info-file_name = iv_file_name.      ls_file_info-file_size = lv_length.      ls_file_info-mimetype = 'text/html'."'image/jpeg'.      APPEND ls_file_info TO lt_file_info.        ls_bo-INSTID = iv_guid.      ls_bo-typeid = iv_bor_type.      ls_bo-catid = 'BO'.        CALL METHOD cl_crm_documents=>create_with_table        EXPORTING          business_object     = ls_bo          properties          = lt_prop          properties_attr     = lt_properties_attr          file_access_info    = lt_file_info          file_content_binary = lt_file_content          raw_mode            = 'X'        IMPORTING          loio                = ls_loio          phio                = ls_phio          error               = ls_error.    endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>DELETE_DOC  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_BOR_TYPE                    TYPE        STRING  * | [--->] IV_UUID                        TYPE        SOCIALDATA-SOCIALDATAUUID  * | [<-()] RV_SUCCESSFUL                  TYPE        ABAP_BOOL  * +--------------------------------------------------------------------------------------</SIGNATURE>    method DELETE_DOC.      DATA: ls_bo       TYPE SIBFLPORB,            lt_loios    TYPE SKWF_IOS,            ls_loios    TYPE SKWF_IO,            ls_error    TYPE SKWF_ERROR,            lt_badios   TYPE SKWF_IOERRS,            lv_del_flag TYPE ABAP_BOOL.        ls_bo-instid = iv_uuid.      ls_bo-typeid = iv_bor_type.      ls_bo-catid  = 'BO'.      rv_successful = abap_false.      CALL METHOD cl_crm_documents=>get_info        EXPORTING          business_object = ls_bo        IMPORTING          loios           = lt_loios.        LOOP AT lt_loios INTO ls_loios.        CALL METHOD cl_crm_documents=>lock          EXPORTING            is_bo    = ls_bo            is_loio  = ls_loios          IMPORTING            es_error = ls_error.          IF ls_error IS NOT INITIAL.           RETURN.        ENDIF.      ENDLOOP.        CALL METHOD cl_crm_documents=>delete        EXPORTING           business_object = ls_bo           ios             = lt_loios        IMPORTING           bad_ios         = lt_badios           error           = ls_error.        IF ls_error IS INITIAL. " deletion failed         rv_successful = abap_true.      ENDIF.      endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>DOWNLOAD_LOCALLY  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_LOCAL_PATH                  TYPE        STRING  * | [--->] IV_BINARY                      TYPE        XSTRING  * +--------------------------------------------------------------------------------------</SIGNATURE>    METHOD download_locally.      TYPES: BEGIN OF ts_line,               data(1024) TYPE x,             END OF ts_line.        DATA: lv_size TYPE int4,            lt_data TYPE STANDARD TABLE OF ts_line.        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'        EXPORTING          buffer        = iv_binary        IMPORTING          output_length = lv_size        TABLES          binary_tab    = lt_data.        CALL METHOD cl_gui_frontend_services=>gui_download        EXPORTING          bin_filesize = lv_size          filename     = iv_local_path          filetype     = 'BIN'          append       = space        IMPORTING          filelength   = lv_size        CHANGING          data_tab     = lt_data        EXCEPTIONS          OTHERS       = 01.        ASSERT sy-subrc = 0.      ENDMETHOD.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_ATTACHMENTS  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_GUID                        TYPE        SIBFLPORB-INSTID  * | [--->] IV_BOR_TYPE                    TYPE        STRING  * | [<---] LOIOS                          TYPE        SKWF_IOS  * | [<---] PHIOS                          TYPE        SKWF_IOS  * +--------------------------------------------------------------------------------------</SIGNATURE>    method GET_ATTACHMENTS.       DATA(ls) = VALUE SIBFLPORB( INSTID = iv_guid typeid = iv_bor_type catid = 'BO' ).         CALL METHOD CL_CRM_DOCUMENTS=>get_info         EXPORTING            BUSINESS_OBJECT = ls         IMPORTING            LOIOS = LOIOS            phios = phios.    endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_DATA_BY_URL  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_URL                         TYPE        STRING  * | [<-()] EV_DATA                        TYPE        XSTRING  * +--------------------------------------------------------------------------------------</SIGNATURE>    method GET_DATA_BY_URL.      DATA:lo_http_client           TYPE REF TO if_http_client,           lv_status                TYPE i,           lv_sysubrc               TYPE sysubrc.        CALL METHOD cl_http_client=>create_by_url        EXPORTING          url                = iv_url          proxy_host         = 'PROXY.SHA.SAP.CORP'          proxy_service      = '8080'  *        ssl_id             = 'ANONYM'  *        sap_username       = ''  *        sap_client         = ''        IMPORTING          client             = lo_http_client        EXCEPTIONS          argument_not_found = 1          plugin_not_active  = 2          internal_error     = 3          OTHERS             = 4.        ASSERT sy-subrc = 0.        CALL METHOD lo_http_client->request->set_method( if_http_request=>co_request_method_get ).    *Disable pop-up when request receives unauthorized error: error 401.      lo_http_client->propertytype_logon_popup = if_http_client=>co_disabled.    *Send request.      CALL METHOD lo_http_client->send        EXCEPTIONS          http_communication_failure = 1          http_invalid_state         = 2          http_processing_failed     = 3.        ASSERT sy-subrc = 0.    * Get response.      CALL METHOD lo_http_client->receive        EXCEPTIONS          http_communication_failure = 1          http_invalid_state         = 2          http_processing_failed     = 3.       IF sy-subrc <> 0.          CALL METHOD lo_http_client->get_last_error          IMPORTING            code    = lv_sysubrc            message = DATA(ev_message).          "BREAK-POINT.          WRITE: / 'error: ' , ev_message.          RETURN.     ENDIF.       ev_data = lo_http_client->response->get_data( ).       DATA: lv_length TYPE i.       lv_length = xstrlen( ev_data ).       WRITE: / 'data length: ' , lv_length.       lo_http_client->close( ).    endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_PIC_FROM_CLIPBOARD  * +-------------------------------------------------------------------------------------------------+  * | [<-()] ET_PIC                         TYPE        STRING_TABLE  * +--------------------------------------------------------------------------------------</SIGNATURE>    METHOD get_pic_from_clipboard.      TYPES:        BEGIN OF ty_clipdata,          data TYPE c LENGTH 1000,        END   OF ty_clipdata.      DATA: lt_markdown TYPE STANDARD TABLE OF ty_clipdata,            lt_result_tab  TYPE match_result_tab.        CONSTANTS: sv_image_pattern TYPE string VALUE '(![.*])(((.*)))'.        CALL METHOD cl_gui_frontend_services=>clipboard_import        IMPORTING          data                 = lt_markdown        EXCEPTIONS          cntl_error           = 1          error_no_gui         = 2          not_supported_by_gui = 3          OTHERS               = 4.        CHECK sy-subrc = 0.        LOOP AT lt_markdown ASSIGNING FIELD-SYMBOL(<markdown>) WHERE table_line CS '![]'.        CLEAR: lt_result_tab.        FIND REGEX sv_image_pattern IN <markdown> RESULTS lt_result_tab.        DATA(lv_final) = lines( lt_result_tab[ 1 ]-submatches ).        DATA(offset) = lt_result_tab[ 1 ]-submatches[ lv_final ].        DATA(lv_start) = offset-offset.        DATA(lv_length) = offset-length.        data(pic) = conv String( <markdown>+lv_start(lv_length) ).        REPLACE 'https' in pic with 'http'.        APPEND pic TO et_pic.      ENDLOOP.    ENDMETHOD.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_PRODUCT_DOC_URL  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_PROD_ID                     TYPE        COMM_PRODUCT-PRODUCT_ID  * | [<-()] RT_URL                         TYPE        STRING_TABLE  * +--------------------------------------------------------------------------------------</SIGNATURE>    method GET_PRODUCT_DOC_URL.      DATA:  lt_query_parameter    TYPE crmt_name_value_pair_tab,             ls_query_parameter    LIKE LINE OF lt_query_parameter,             lv_view_name          TYPE crmt_view_name,             ls_doc                TYPE CRMT_PRIL_DOCUMENTS_URI,             lv_query_name         TYPE crmt_ext_obj_name.      ls_query_parameter-name = 'PRODUCT_ID'.      ls_query_parameter-value = iv_prod_id.      APPEND ls_query_parameter TO lt_query_parameter.        DATA(lo_core) = cl_crm_bol_core=>get_instance( ).      lo_core->load_component_set( 'PROD_ALL' ).      lv_query_name = 'ProdAdvancedSearchProducts'.      try.     DATA(lo_collection) = lo_core->query(        iv_query_name               = lv_query_name        it_query_params             = lt_query_parameter        iv_view_name                = lv_view_name ).     CATCH CX_SY_ARITHMETIC_ERROR.        write:/ 'Error' .     ENDTRY.       DATA(lo_product) = lo_collection->get_first( ).     DATA(lo_doc) = lo_product->get_related_entities( IV_RELATION_NAME = 'ProductDocumentLink' ).     CHECK lo_doc IS NOT INITIAL.       DATA(lo_item) = lo_doc->get_first( ).     WHILE lo_item IS NOT INITIAL.       lo_item->get_properties( IMPORTING ES_ATTRIBUTES = ls_doc ).       APPEND ls_doc-document_uri TO rt_url.       lo_item = lo_doc->get_next( ).     ENDWHILE.      endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_PROD_ID_BY_PHIO  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_PHIO                        TYPE        SDOK_PHID  * | [<-()] RV_PROD_ID                     TYPE        COMM_PRODUCT-PRODUCT_ID  * +--------------------------------------------------------------------------------------</SIGNATURE>    METHOD get_prod_id_by_phio.      DATA: ls_ph         TYPE bdsphio22,            ls_product    TYPE comm_product,            lv_instance_b TYPE skwg_brel-instid_b,            ls_relation   TYPE skwg_brel.        SELECT SINGLE * INTO ls_ph FROM bdsphio22 WHERE phio_id = iv_phio.      CHECK sy-subrc = 0.        lv_instance_b = 'L/' && ls_ph-lo_class && '/' && ls_ph-loio_id.          SELECT SINGLE * INTO ls_relation FROM skwg_brel WHERE instid_b = lv_instance_b AND typeid_a = 'BUS1178'.      CHECK sy-subrc = 0.        SELECT SINGLE * INTO ls_product FROM comm_product WHERE product_guid = ls_relation-instid_a.      CHECK sy-subrc = 0.        rv_prod_id = ls_product-product_id.    ENDMETHOD.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>GET_TEXT_BY_URL  * +-------------------------------------------------------------------------------------------------+  * | [--->] IV_URL                         TYPE        STRING  * | [<-()] EV_TEXT                        TYPE        STRING  * +--------------------------------------------------------------------------------------</SIGNATURE>    method GET_TEXT_BY_URL.      DATA:lo_http_client           TYPE REF TO if_http_client,           lv_status                TYPE i,           lv_sysubrc               TYPE sysubrc.        CALL METHOD cl_http_client=>create_by_url        EXPORTING          url                = iv_url          proxy_host         = 'PROXY.SHA.SAP.CORP'          proxy_service      = '8080'  *        ssl_id             = 'ANONYM'  *        sap_username       = ''  *        sap_client         = ''        IMPORTING          client             = lo_http_client        EXCEPTIONS          argument_not_found = 1          plugin_not_active  = 2          internal_error     = 3          OTHERS             = 4.        ASSERT sy-subrc = 0.        CALL METHOD lo_http_client->request->set_method( if_http_request=>co_request_method_get ).    *Disable pop-up when request receives unauthorized error: error 401.      "lo_http_client->propertytype_logon_popup = if_http_client=>co_disabled.    *Send request.      CALL METHOD lo_http_client->send        EXCEPTIONS          http_communication_failure = 1          http_invalid_state         = 2          http_processing_failed     = 3.        ASSERT sy-subrc = 0.    * Get response.      CALL METHOD lo_http_client->receive        EXCEPTIONS          http_communication_failure = 1          http_invalid_state         = 2          http_processing_failed     = 3.       IF sy-subrc <> 0.          CALL METHOD lo_http_client->get_last_error          IMPORTING            code    = lv_sysubrc            message = DATA(ev_message).          "BREAK-POINT.          WRITE: / 'error: ' , ev_message.          RETURN.     ENDIF.       ev_text = lo_http_client->response->get_cdata( ).       lo_http_client->close( ).    endmethod.      * <SIGNATURE>---------------------------------------------------------------------------------------+  * | Static Public Method ZCL_CRM_CM_TOOL=>IS_TEXT_FILE  * +-------------------------------------------------------------------------------------------------+  * | [--->] IS_IO                          TYPE        SKWF_IO  * | [<-()] RV_TRUE                        TYPE        ABAP_BOOL  * +--------------------------------------------------------------------------------------</SIGNATURE>    method IS_TEXT_FILE.        DATA: lv_type type W3CONTTYPE.        CALL METHOD cl_crm_documents=>get_file_info        EXPORTING          phio      = is_io        IMPORTING          mimetype  = lv_type.        IF lv_type = 'text/plain'.         rv_true = abap_true.      ENDIF.    endmethod.  ENDCLASS.

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":