Enterprise Resource Planning Blogs by Members
Gain new perspectives and knowledge about enterprise resource planning in blog posts from community members. Share your own comments and ERP insights today!
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member188458
Active Participant
0 Kudos


Salut mes amis !!

I recently struggled to add an original to an existing DIR in a custom program . After a lot of debugging I finall got through it.

Here is the sample code to achieve it . Hope it helps someone struggling on the same.

API Interface :

IV_FILE_CONTENT TYPE /PRD1/S_DIR_ATTACH-FILE_CONTENT


IV_FILE_NAME TYPE /PLMB/FILEP


IV_FILE_SIZE TYPE /PRD1/S_DIR_ATTACH-FILE_SIZE


IV_DIR_DESC TYPE DKTXT


IV_FILE_STOR_CATEG TYPE SDOK_STCAT


IS_DIR_KEY TYPE /PLMB/S_DIR_ID


ET_MESSAGE TYPE /PLMB/T_SPI_MSG


EV_SEVERITY TYPE /PLMB/SPI_MSG_SEVERITY


 


API code :


 


**********Data Declaration ******************


*


  TYPES: BEGIN OF lty_binary,


             line(2550) TYPE x,


           END OF lty_binary.



  """ DIR API related data declaration


  CONSTANTS : lc_pf_orig_cont_prov TYPE mcdok-content_provide VALUE 'TBL' ,


        lc_api_tcode         TYPE cvapi_api_control-tcode  VALUE 'CV02'.



  DATA :    lv_fname_wo_path  TYPE /plmb/filep ,


            lv_error          TYPE c ,


            lv_size           TYPE int4.




*****  DIR API related Data declaration


  DATA : lt_orig_content  TYPE TABLE OF drao ,


         lt_binary        TYPE TABLE OF lty_binary ,


         lt_orig_appl     TYPE          /plmb/t_dir_orig_crt ,


         lt_kpro_data     TYPE          dms_tbl_file ,


         lt_kpro_data_new TYPE          dms_tbl_file ,


         lt_files_x       TYPE TABLE OF cvapi_doc_file,


         lt_comp_x        TYPE TABLE OF cvapi_doc_comp,


         lt_draz          TYPE TABLE OF draz,


         lt_drao          TYPE TABLE OF drao,


         lt_draoz         TYPE TABLE OF draoz,


         lt_toav0         TYPE TABLE OF toav0 ,


         lt_dms_tbl_phio   TYPE dms_tbl_phio.



  DATA  : ls_draw           TYPE draw ,


          ls_api_ctrl       TYPE cvapi_api_control ,


          ls_orig_content   LIKE LINE OF lt_orig_content ,


          ls_orig_appl      LIKE LINE OF lt_orig_appl  ,


          ls_dms_rec_file   TYPE dms_rec_file ,


          ls_dir_key        TYPE dms_doc_key,


          ls_dms_tbl_phio   LIKE LINE OF lt_dms_tbl_phio ,


          ls_sdok_obj       TYPE sdokobject,


          ls_mssgs          TYPE messages ,


          ls_kpro_data      LIKE LINE OF lt_kpro_data,


          ls_files_x        LIKE LINE OF lt_files_x,


          ls_drao           LIKE LINE OF lt_drao ,


          ls_draw_form      TYPE draw ,


          ls_audits         TYPE dms_audits.



  FIELD-SYMBOLS :  <fs_binary> TYPE lty_binary.



  ""get file name from File path


  go_dir_bo->split_file_path(


    EXPORTING


      iv_docfile      =   iv_file_name   " DIR: Original


    IMPORTING


*    ev_docpath      =     " DIR: Original


      ev_docfile      =  lv_fname_wo_path     " Original of document


      et_message       =  et_message  " Message


      ev_msg_severity  =  ev_severity    " Severity


  ).



  IF ev_severity CA /plmb/if_spi_c=>gs_c_severity_category-error_or_worse.


    RETURN .


  ENDIF.




****  Get appl from file extension



  go_dir_bo->get_ws_appl(


    EXPORTING


      iv_path          = lv_fname_wo_path     " Original of document


*      iv_host          =     " Data carrier type


    IMPORTING


      et_appl_original =  lt_orig_appl  " Workstation Applications


      et_message       =  et_message  " Message


      ev_msg_severity  =  ev_severity    " Severity


  ).



  IF ev_severity CA /plmb/if_spi_c=>gs_c_severity_category-error_or_worse.


    RETURN .


  ENDIF.



  READ TABLE lt_orig_appl INTO ls_orig_appl INDEX 1 .




  """" Get the PDF content which is to be checked in Original to DIR



  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'


    EXPORTING


      buffer        = iv_file_content "lv_pdfsource


    IMPORTING


      output_length = lv_size


    TABLES


      binary_tab    = lt_binary


    EXCEPTIONS


      error_message = 1


      OTHERS        = 2.



  IF sy-subrc <> 0.


* Implement suitable error handling here


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .



    CLEAR: gs_message , gv_message.


    MESSAGE e138(zep_plm_ecr) INTO gv_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


    RETURN .


  ENDIF.


  LOOP AT lt_binary ASSIGNING <fs_binary>.


    CLEAR ls_orig_content.


    ls_orig_content-orblk = <fs_binary>-line.


    ls_orig_content-orln  = lv_size.


    APPEND ls_orig_content TO lt_orig_content.


  ENDLOOP.



  """ ====================call the api to add orig to DIR=========================



  ls_draw-dokar    = is_dir_key-documenttype .


  ls_draw-doknr    = is_dir_key-documentnumber .


  ls_draw-doktl    = is_dir_key-documentpart .


  ls_draw-dokvr    = is_dir_key-documentversion .



**************************************************************


**************************************************************


**  Initialized DOKAR settings to be used in API's further specially for doc checkin


  PERFORM cust_read_data IN PROGRAM saplcvapi01


         USING ls_draw-dokar .



  IF sy-subrc NE 0 .


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.




*


  ls_dms_rec_file-dappl   =  ls_orig_appl-wsapplication .


  ls_dms_rec_file-updateflag = 'I' .



  ls_dms_tbl_phio-langu   =  sy-langu.


  ls_dms_tbl_phio-active_version  = 'X'.


  ls_dms_tbl_phio-delete_flag    = 'X'.


  ls_dms_tbl_phio-default_langu  = 'X'.


  ls_dms_tbl_phio-storage_cat = iv_file_stor_categ.


  ls_dms_tbl_phio-check_in  = 'X'.


*  ls_dms_tbl_phio-content_desc = iv_dir_desc .



  ls_dms_tbl_phio-filename = lv_fname_wo_path   .



  APPEND ls_dms_tbl_phio TO lt_dms_tbl_phio.


  ls_dms_rec_file-tbl_phios =  lt_dms_tbl_phio                         .



  CALL FUNCTION 'CV120_KPRO_MASTER_CREATE'


* EXPORTING


*   PF_IGNORE_DUPLICATE_PHIO       = ' '


    CHANGING


      ps_data                        = ls_dms_rec_file


   EXCEPTIONS


     error                          = 1


     OTHERS                         = 2


            .


  IF sy-subrc <> 0.


* Implement suitable error handling here


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.



  READ TABLE ls_dms_rec_file-tbl_phios INTO ls_dms_tbl_phio INDEX 1 .


  ls_sdok_obj-class = ls_dms_tbl_phio-ph_class .


  ls_sdok_obj-objid = ls_dms_tbl_phio-ph_objid .



  ls_files_x-updateflag   = abap_true .


  ls_files_x-dappl  = ls_orig_appl-wsapplication .


  ls_files_x-storage_cat  = iv_file_stor_categ.


  ls_files_x-filename  =  lv_fname_wo_path.


  ls_files_x-checked_in  = abap_true .


  ls_files_x-description = iv_dir_desc.



  APPEND ls_files_x TO lt_files_x.




  APPEND ls_dms_rec_file TO lt_kpro_data .




  SELECT SINGLE * FROM draw INTO ls_draw_form WHERE


  dokar                  = ls_draw-dokar


  AND doknr                  = ls_draw-doknr


  AND dokvr                  = ls_draw-dokvr


  AND doktl                  = ls_draw-doktl.



  PERFORM doc_checkin  IN PROGRAM saplcvapi01


      TABLES lt_kpro_data


            lt_kpro_data_new


            lt_files_x


                       lt_comp_x


                        lt_draz


                        lt_orig_content


                        lt_draoz


                        lt_toav0


                 USING  ''


                        ''


                        ''


                        ''


                        lc_pf_orig_cont_prov


                 CHANGING ls_draw_form


                          ls_audits


                          lv_error.



  IF sy-subrc NE 0 .


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.



  ENDIF.



  MOVE-CORRESPONDING ls_draw_form TO ls_dir_key.




  CALL FUNCTION 'CV111_DRAW_SAVE'


    EXPORTING


      pf_tacode          = lc_api_tcode


      ps_draw_new        = ls_draw_form


     ps_draw_old        = ls_draw_form


*   PS_AUDITS          =


* TABLES


*   PT_DRAO            =


*   PT_ARCH_CONN       =


   EXCEPTIONS


     error              = 1


     OTHERS             = 2


            .


  IF sy-subrc <> 0.


* Implement suitable error handling here


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.




****Get old kpro master data  or existing originals


  CLEAR : lt_kpro_data .


  CALL FUNCTION 'CV120_KPRO_MASTER_DATA_GET'


    EXPORTING


      pf_dokar            = ls_draw-dokar


      pf_doknr            = ls_draw-doknr


      pf_dokvr            = ls_draw-dokvr


      pf_doktl            = ls_draw-doktl


      pf_active_only      = abap_true


*     PF_ACTIVE_ATTR_ONLY = ' '


*     PF_COMP_GET         = 'X'


    TABLES


      ptx_data            = lt_kpro_data


    EXCEPTIONS


      not_found           = 1


      error               = 2


      OTHERS              = 3.


  IF sy-subrc <> 0.


* Implement suitable error handling here


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.




  APPEND LINES OF lt_kpro_data TO lt_kpro_data_new .




**************Call kpro save


  CALL FUNCTION 'CV111_KPRO_SAVE'


    EXPORTING


*     PF_CLEAR_ALL =


      ps_doc_key   = ls_dir_key


    TABLES


      pt_data      = lt_kpro_data_new


*     PT_DATA_OLD  = lt_kpro_data


    EXCEPTIONS


      error        = 1


      OTHERS       = 2.


  IF sy-subrc <> 0.


* Implement suitable error handling here


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.



  ""Update DB


  CALL FUNCTION 'CV111_DOC_SAVE'


    EXPORTING


*     PF_COMMIT      = ' '


      pf_update_task = 'X'


*     PF_API_FLAG    = ' '


    EXCEPTIONS


      error          = 1


      OTHERS         = 2.


  IF sy-subrc <> 0.


* Implement suitable error handling here


***  return add error message


    CLEAR gs_message .



    MOVE-CORRESPONDING sy TO gs_message .



    APPEND gs_message TO et_message .


    ""update severity


    ev_severity = sy-msgty.


  ENDIF.



Labels in this area