Guest User

Untitled

a guest
Oct 17th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 7.87 KB | None | 0 0
  1. FORM get_content_connection USING p_objid       TYPE bapisrmdoc-guid
  2.                                   p_docclass    TYPE bapisrmdoc-docclass
  3.                                   p_version     TYPE bapisrmdoc-version
  4.                                   p_context     TYPE bapidoccontext
  5.                             CHANGING p_sp_document TYPE REF TO if_srm_sp_document
  6.                             RAISING cx_srm.
  7. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) FORM GET_CONTENT_CONNECTION, Íà÷àëî                                                                                                               A
  8. *$*$-Start: (1)---------------------------------------------------------------------------------$*$*
  9. ENHANCEMENT 1  ZLSRM_BAPI_DOCUMENTF01_2.    "active version
  10.   DATA:
  11.     l_sps_id                  TYPE string,
  12.     l_rms_id                  TYPE string,
  13.     l_dps_id                  TYPE string,
  14.     l_rep_type                TYPE string,
  15.     l_kpro_doc_id             TYPE srmgs_doc_id,
  16.     l_doc_id                  TYPE string,
  17.     lt_wdcl_user              TYPE STANDARD TABLE OF srmwdcluser,
  18.     wa_wdcl_user              TYPE srmwdcluser,
  19.     lt_sp_poid                TYPE srm_list_poid,
  20.     l_str                     TYPE string,
  21.     l_offset                  TYPE i,
  22.  
  23.     l_document2               TYPE REF TO cl_srm_document2,
  24.     l_dm_rep                  TYPE REF TO cl_dm_documents,
  25.  
  26.     l_fw_connector            TYPE REF TO cl_srm_rmf_connector,
  27.     lif_srm                   TYPE REF TO if_srm,
  28.     lif_srm_service           TYPE REF TO if_srm_srm_service,
  29.     lif_client_service        TYPE REF TO if_srm_srm_client_service,
  30.     lif_generic_sp            TYPE REF TO if_srm_generic_sp,
  31.     lif_sp_document           TYPE REF TO if_srm_sp_document,
  32.     lif_poid                  TYPE REF TO if_srm_poid,
  33.     lif_model_poid            TYPE REF TO if_srm_poid,
  34.  
  35.     ex_gsp                    TYPE REF TO cx_srm_gsp,
  36.     ex_dm                     TYPE REF TO cx_dm
  37.     .
  38.  
  39. *-- WebDAV Repository: rms id and sps id must be supplied
  40. *   KPro Repository: either doc class or (rms id and sps id) must be supplied
  41. * if only doc class is known, rms id and sps id can be red from doc properties
  42.   IF p_context-rms_id IS NOT INITIAL AND  p_context-sps_id IS NOT INITIAL.
  43.     l_rms_id = p_context-rms_id.
  44.     l_sps_id = p_context-sps_id.
  45.   ELSEIF p_docclass IS NOT INITIAL.
  46.     TRY.
  47.         l_kpro_doc_id-class = p_docclass.
  48.         l_kpro_doc_id-objid = p_objid.
  49.         l_doc_id = l_kpro_doc_id.
  50.         CREATE OBJECT l_document2
  51.              EXPORTING
  52.                doc_id = l_doc_id.
  53.  
  54.         l_rms_id = l_document2->if_srm_gsp_properties~get_property( 'SRM_RMS_ID' ).
  55.         l_sps_id = l_document2->if_srm_gsp_properties~get_property( 'SRM_SPS_ID' ).
  56.         l_rep_type = srmgs_c_repository_kpro.
  57.  
  58.       CATCH cx_srm_gsp INTO ex_gsp.
  59.         CASE ex_gsp->error_type.
  60.           WHEN cx_srm_gsp=>not_authorized.
  61.             RAISE EXCEPTION TYPE cx_srm_document_client
  62.               EXPORTING textid = cx_srm_document_client=>et_not_authorized.
  63.           WHEN cx_srm_gsp=>parameter_error.
  64.             RAISE EXCEPTION TYPE cx_srm_dcl_backend
  65.               EXPORTING textid = cx_srm_dcl_backend=>et_parameter_error.
  66.           WHEN cx_srm_gsp=>not_found or cx_srm_gsp=>doc_class_not_found .
  67.             RAISE EXCEPTION TYPE cx_srm_dcl_backend
  68.               EXPORTING textid = cx_srm_dcl_backend=>et_doc_not_found
  69.                 doc_id = l_doc_id.
  70.           WHEN OTHERS.
  71.             RAISE EXCEPTION TYPE cx_srm_document_client
  72.               EXPORTING textid = cx_srm_document_client=>et_unexpected.
  73.         ENDCASE.
  74.     ENDTRY.
  75.   ELSE.
  76. *   documentclass and doc_context must not both be initial,
  77. **   if documentclass is 'WebDAV', doc_context must not be initial
  78.     RAISE EXCEPTION TYPE cx_srm_dcl_backend
  79.                     EXPORTING textid = cx_srm_dcl_backend=>et_parameter_error.
  80.   ENDIF.
  81.  
  82. *-- create framework connector
  83.   CREATE OBJECT l_fw_connector
  84.              EXPORTING sps_id = l_sps_id.
  85.   lif_srm = l_fw_connector->get_if_srm( ).
  86.   lif_srm_service ?= lif_srm->get_srm_service( ).
  87.   lif_client_service ?= lif_srm_service.
  88.  
  89. *-- if doc class is not supplied, repository can be kpro or webdav. some repository
  90. *    parameter must be determined
  91.  
  92.   IF p_docclass IS INITIAL.
  93.     lif_model_poid ?= lif_client_service->poid_create_model( im_rms_id = l_rms_id
  94.             im_sps_id = l_sps_id ).
  95.     lif_generic_sp ?= lif_srm_service->get_sp_connection( im_poid = lif_model_poid ).
  96.     l_dm_rep = lif_generic_sp->get_dm_repository( ).
  97.     IF l_dm_rep IS INITIAL.
  98.       RAISE EXCEPTION TYPE cx_srm_dcl_backend
  99.                 EXPORTING textid = cx_srm_dcl_backend=>et_parameter_error.
  100.     ENDIF.
  101.     l_rep_type = l_dm_rep->get_repository_property( name = srmgs_c_rep_para_rep_type ).
  102.   ENDIF.
  103.  
  104.   IF l_rep_type = srmgs_c_repository_webdav.
  105. *-- set user id/password for connecting WebDAV server
  106.  
  107.     l_dps_id = lif_generic_sp->get_connection_param( name =
  108.       if_srm_generic_sp=>c_conn_para_doc_provider_space ).
  109.     SELECT * FROM srmwdcluser INTO TABLE lt_wdcl_user WHERE dps_id = l_dps_id.
  110.     IF lt_wdcl_user IS INITIAL.
  111. *  customizing error: user/password for WebDAV access must be set up
  112.       RAISE EXCEPTION TYPE cx_srm_customizing_error.
  113.     ENDIF.
  114.  
  115.     READ TABLE lt_wdcl_user INTO wa_wdcl_user INDEX 1.
  116.     TRY.
  117.         l_str = wa_wdcl_user-user_id.
  118.         l_dm_rep->set_repository_parameter( name = srmgs_c_rep_para_user_name value = l_str ).
  119.         l_str = wa_wdcl_user-passwd.
  120.         l_dm_rep->set_repository_parameter( name = srmgs_c_rep_para_password value = l_str ).
  121.       CATCH cx_dm INTO ex_dm.
  122.         RAISE EXCEPTION TYPE cx_srm_document_client
  123.                   EXPORTING textid = cx_srm_document_client=>et_unexpected previous = ex_dm.
  124.     ENDTRY.
  125. *  get base url, construct tech doc id
  126.     CLEAR l_str.
  127.     l_str = l_dm_rep->get_repository_property( name = srmgs_c_rep_para_base_url ).
  128.     IF l_str IS INITIAL.
  129. *  customizing error, base url must be registered in document service provider
  130.       RAISE EXCEPTION TYPE cx_srm_customizing_error.
  131.     ENDIF.
  132.     l_offset = STRLEN( l_str ) - 1.
  133.     IF l_str+l_offset(1) = '/'.
  134.       CONCATENATE l_str p_objid INTO l_doc_id.
  135.     ELSE.
  136.       CONCATENATE l_str '/' p_objid INTO l_doc_id.
  137.     ENDIF.
  138.  
  139.   ELSEIF p_docclass IS INITIAL.
  140. *-- get doc class of KPro repository, construct tech doc id
  141.     CLEAR l_str.
  142.     l_str = l_dm_rep->get_repository_property( name = srmgs_c_rep_para_doc_class ).
  143.     IF l_str IS INITIAL.
  144.       l_str = lif_generic_sp->get_connection_param( name =
  145.         if_srm_generic_sp=>c_conn_para_doc_class ).
  146.     ENDIF.
  147.  
  148.     IF l_str IS INITIAL.
  149. *   customizing error,  document class must be registered either in SPS or in DPS
  150.       RAISE EXCEPTION TYPE cx_srm_customizing_error.
  151.     ENDIF.
  152.     l_kpro_doc_id-class = l_str.
  153.     l_kpro_doc_id-objid = p_objid.
  154.     l_doc_id = l_kpro_doc_id.
  155.   ENDIF.
  156.  
  157. *-- create poid
  158.   l_str = p_version.
  159.   CONDENSE l_str.
  160.   IF l_str = space.
  161.     l_str = '0'.
  162.   ENDIF.
  163.   l_kpro_doc_id-class = p_docclass.
  164.   l_kpro_doc_id-objid = p_objid.
  165.   l_doc_id = l_kpro_doc_id.
  166.   CALL METHOD cl_srm_generic_sp2=>create_sp_poid
  167.     EXPORTING
  168.       doc_id  = l_doc_id
  169.       version = l_str
  170.     IMPORTING
  171.       sp_poid = lt_sp_poid.
  172.   lif_poid ?= lif_client_service->poid_get_instance( im_rms_id = l_rms_id  im_sps_id = l_sps_id
  173.               im_sp_poid = lt_sp_poid ).
  174.  
  175. *-- get content connection of instance object
  176.   p_sp_document ?= lif_srm_service->get_sp_connection( im_poid = lif_poid ).
  177.  
  178. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(6 ) FORM GET_CONTENT_CONNECTION, Âûõîä                                                                                                           A
  179. ENDFORM.                    " get_content_connection
Add Comment
Please, Sign In to add comment