Difference between revisions of "SAP ABAP ARCHIVE LINK"

From SapWiki
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
==Tablas==
 +
===TOA01===
 +
ejemplo
 +
SAP_OBJECT    BUS1309
 +
OBJECT_ID      2000000172RBJ
 +
ARCHIV_ID      ZP
 +
ARC_DOC_ID    00505682475E1EDBBAD007C24499CD17
 +
AR_OBJECT      EDXISFOPDF
 +
AR_DATE        20210721
 +
DEL_DATE
 +
RESERVE        PDF
 +
===TOADD - Tipos de documento===
 +
ejemplo
 +
DOC TYPE      JPG
 +
MIMETYPE      image/jpeg
 +
APPL TYPE
 +
OBJECTTEXT    Formato JPEG (extensión JPG)
 +
 +
==Verificar conexión==
 +
reporte RSCMSTBT - Verificar acceso con offset y longitud
 
==Subir archivo==
 
==Subir archivo==
 +
===Con dialogo===
 
  <nowiki>
 
  <nowiki>
CALL FUNCTION 'ARCHIV_CREATE_DIALOG_META'
+
FORM f_cargar_documento USING p_data TYPE ty_data
  EXPORTING
+
                    CHANGING p_archiv_doc_id.
    ar_object                = gs_arch_info-ar_object
+
  DATA: l_archiv_id    TYPE toaom-archiv_id VALUE 'ZE',
     object_id                = gs_arch_info-object_id
+
        l_ar_object    TYPE toaom-ar_object,
    sap_object              = gs_arch_info-sap_object
+
        l_object_id    TYPE sapb-sapobjid,
  IMPORTING
+
        l_sap_object    TYPE toaom-sap_object VALUE 'ZBUS1309',
     archiv                   = gs_arch_info-archiv_id
+
        l_archiv_doc_id TYPE toav0-arc_doc_id.
    archiv_doc_id            = gs_arch_info-arc_doc_id
+
 
     documentclass           = gs_arch_info-doc_type
+
  CLEAR p_archiv_doc_id.
  CHANGING
+
 
     infiletab               = lt_infiletab  "salida
+
  MOVE p_data-clase_docto TO l_ar_object.
  EXCEPTIONS
+
  MOVE p_data-arc_doc_id TO l_archiv_doc_id.
    error_archiv            = 1
+
  l_object_id = g_object_id.
    error_communicationtable = 2
+
 
    error_connectiontable    = 3
+
  CALL FUNCTION 'ARCHIV_CREATE_DIALOG_META'
    error_kernel            = 4
+
    EXPORTING
    error_parameter          = 5
+
      archiv_id                = l_archiv_id
    error_scanqueue          = 6
+
      ar_object                = l_ar_object
    canceled_by_user        = 7
+
*    DEL_DATE                = ' '
    blocked_by_policy        = 8
+
*     NOTE                    =
    OTHERS                  = 9.
+
      object_id                = l_object_id
 +
      sap_object              = l_sap_object
 +
*    FILE                    = ' '
 +
*    COMMIT_FLAG              = ' '
 +
*    VSCAN_PROFILE            = '/SCMS/KPRO_CREATE'
 +
*    FILE_DESCR_POP_SUP      = ' '
 +
    IMPORTING
 +
*     ARCHIV                   =
 +
      archiv_doc_id            = l_archiv_doc_id
 +
*     DOCUMENTCLASS           =
 +
* TABLES
 +
*    OUTDOCTAB                =
 +
* CHANGING
 +
*     INFILETAB               =
 +
    EXCEPTIONS
 +
      error_archiv            = 1
 +
      error_communicationtable = 2
 +
      error_connectiontable    = 3
 +
      error_kernel            = 4
 +
      error_parameter          = 5
 +
      error_scanqueue          = 6
 +
      canceled_by_user        = 7
 +
      blocked_by_policy        = 8
 +
      OTHERS                  = 9.
 +
  IF sy-subrc <> 0.
 +
* Implement suitable error handling here
 +
    MESSAGE i000(0k) WITH 'Error en Subir Archivo a Archive Link' DISPLAY LIKE 'E'.
 +
  ENDIF.
 +
 
 +
  MOVE l_archiv_doc_id TO p_archiv_doc_id.
 +
 
 +
ENDFORM.                    " F_VER_DOCUMENTO
 
</nowiki>
 
</nowiki>
 +
 +
===Sin dialogo===
 +
====FM ARCHIV_CREATE_TABLE====
 +
====Programa Ejemplo====
 +
<nowiki>
 +
DATA: gt_file_table TYPE filetable,  "Uploaded file information
 +
      gt_content    TYPE soli_tab,    "Uploaded files content
 +
      g_len        TYPE i.          "File length
 +
 +
DATA: g_ext  TYPE sood1-file_ext,  "File extension
 +
      g_fname TYPE sood1-objdes.    "File name
 +
 +
data: g_archiv_id      TYPE saearchivi, "Archive connection ID
 +
      g_xstring TYPE xstring,            "File in Xstring
 +
      g_out TYPE i,
 +
      g_arc_doc_id      TYPE saeardoid.  "Archive document ID
 +
 +
DATA gt_content1024        TYPE TABLE OF tbl1024.  "RAW 1024 format
 +
 +
data : g_obj  TYPE toav0-sap_object value 'BUS1309',        "Business object type
 +
        g_obj_ty TYPE toaom-ar_object value 'ZBPCR057',  "Archive document type
 +
        g_OBJECT_ID type TOA01-OBJECT_ID.
 +
       
 +
  g_ext = 'PDF'.
 +
 
 +
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
 +
    EXPORTING
 +
      buffer        = g_xstring
 +
    IMPORTING
 +
      output_length = g_len
 +
    TABLES
 +
      binary_tab    = gt_content1024.
 +
     
 +
     
 +
  DATA: lv_doc_typ    TYPE toadv-doc_type,
 +
        lv_arc_length TYPE sapb-length.
 +
 +
 +
  CALL FUNCTION 'ARCHIV_CONNECTDEFINITION_GET'
 +
    EXPORTING
 +
      objecttype    = g_obj
 +
      documenttype  = g_obj_ty
 +
      client        = sy-mandt
 +
    IMPORTING
 +
      archivid      = g_archiv_id
 +
    EXCEPTIONS
 +
      nothing_found = 1
 +
      OTHERS        = 2.
 +
 +
  lv_doc_typ = g_ext.      "File extension
 +
  lv_arc_length = g_len.  "File length
 +
 
 +
  CALL FUNCTION 'ARCHIVOBJECT_CREATE_TABLE'
 +
    EXPORTING
 +
      archiv_id                = g_archiv_id
 +
      document_type            = lv_doc_typ
 +
      length                  = lv_arc_length
 +
    IMPORTING
 +
      archiv_doc_id            = g_arc_doc_id
 +
    TABLES
 +
      binarchivobject          = gt_content1024
 +
    EXCEPTIONS
 +
      error_archiv            = 1
 +
      error_communicationtable = 2
 +
      error_kernel            = 3
 +
      OTHERS                  = 4.
 +
     
 +
  DATA: lv_doc_type  TYPE toadv-doc_type,
 +
        lv_file_name TYPE toaat-filename,
 +
        lv_object_no TYPE sapb-sapobjid.
 +
 +
  lv_doc_type =  g_ext.      "File type PDF
 +
  lv_file_name = g_fname.    "File Name
 +
  lv_object_no = g_OBJECT_ID.
 +
 +
  CALL FUNCTION 'ARCHIV_CONNECTION_INSERT'
 +
    EXPORTING
 +
      archiv_id            = g_archiv_id
 +
      arc_doc_id            = g_arc_doc_id
 +
      ar_object            = g_obj_ty
 +
      object_id            = lv_object_no
 +
      sap_object            = g_obj
 +
      doc_type              = lv_doc_type
 +
      filename              = lv_file_name
 +
      descr                = space
 +
      creator              = sy-uname
 +
    EXCEPTIONS
 +
      error_connectiontable = 1
 +
      OTHERS                = 2. </nowiki>
  
 
==Bajar archivo==
 
==Bajar archivo==
 +
===ARCHIV_GET_TABLE===
 
  <nowiki>
 
  <nowiki>
 
DATA: l_sapobj LIKE toa01-sap_object  VALUE 'BUS1309',
 
DATA: l_sapobj LIKE toa01-sap_object  VALUE 'BUS1309',
Line 99: Line 241:
 
       ENDIF.
 
       ENDIF.
  
 +
</nowiki>
 +
===ARCHIVOBJECT_GET_TABLE===
 +
<nowiki>
 +
  DATA it_binarchivobject TYPE TABLE OF tbl1024 WITH HEADER LINE.
 +
  DATA lv_document_type LIKE toadd-doc_type.
 +
  DATA lv_string TYPE string.
 +
  DATA lv_da2048 TYPE text2048.
 +
  DATA lv_length TYPE sapb-length.
 +
 +
  lv_document_type = ls_toa01-ar_object.
 +
 +
  CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'
 +
    EXPORTING
 +
      archiv_id                = ls_toa01-archiv_id
 +
      document_type            = lv_document_type
 +
      archiv_doc_id            = ls_toa01-arc_doc_id
 +
    IMPORTING
 +
      binlength                = lv_length
 +
    TABLES
 +
      binarchivobject          = it_binarchivobject
 +
    EXCEPTIONS
 +
      error_archiv            = 1
 +
      error_communicationtable = 2
 +
      error_kernel            = 3
 +
      OTHERS                  = 4.
 
</nowiki>
 
</nowiki>
  
Line 132: Line 299:
 
ENDFORM.                    " F_VER_DOCUMENTO
 
ENDFORM.                    " F_VER_DOCUMENTO
 
</nowiki>
 
</nowiki>
 +
 +
==Borrar archivo==
 +
<nowiki>
 +
    CALL FUNCTION 'ARCHIV_DELETE_META'
 +
      EXPORTING
 +
        client                  = sy-mandt
 +
        archiv_id                = gs_ds_rebj_do-archiv_id
 +
        arc_doc_id              = gs_ds_rebj_do-arc_doc_id
 +
        ar_object                = gs_ds_rebj_do-ar_object
 +
        object_id                = gs_ds_rebj_do-object_id
 +
        sap_object              = gs_ds_rebj_do-sap_object
 +
        delete_flag              = 1
 +
      IMPORTING
 +
        all_connections_deleted  = lv_all_connections_deleted
 +
      EXCEPTIONS
 +
        error_connectiontable    = 1
 +
        error_parameter          = 2
 +
        error_archiv            = 3
 +
        error_kernel            = 4
 +
        error_communicationtable = 5
 +
        error_authority          = 6
 +
        OTHERS                  = 7.
 +
</nowiki>
 +
==[[SAP_BDS|SAP Business Document Service]]==
 +
 +
==Notas==
 +
Para análisis, poner un break-point en la función HTTP2_GET (todas las funciones pasan por ahí!!!)

Latest revision as of 22:37, 3 September 2024

Tablas

TOA01

ejemplo

SAP_OBJECT     BUS1309
OBJECT_ID      2000000172RBJ
ARCHIV_ID      ZP
ARC_DOC_ID     00505682475E1EDBBAD007C24499CD17
AR_OBJECT      EDXISFOPDF
AR_DATE        20210721
DEL_DATE
RESERVE        PDF

TOADD - Tipos de documento

ejemplo

DOC TYPE      JPG
MIMETYPE      image/jpeg
APPL TYPE
OBJECTTEXT    Formato JPEG (extensión JPG)

Verificar conexión

reporte RSCMSTBT - Verificar acceso con offset y longitud

Subir archivo

FORM f_cargar_documento USING p_data TYPE ty_data
                     CHANGING p_archiv_doc_id.
  DATA: l_archiv_id     TYPE toaom-archiv_id VALUE 'ZE',
        l_ar_object     TYPE toaom-ar_object,
        l_object_id     TYPE sapb-sapobjid,
        l_sap_object    TYPE toaom-sap_object VALUE 'ZBUS1309',
        l_archiv_doc_id TYPE toav0-arc_doc_id.

  CLEAR p_archiv_doc_id.

  MOVE p_data-clase_docto TO l_ar_object.
  MOVE p_data-arc_doc_id TO l_archiv_doc_id.
  l_object_id = g_object_id.

  CALL FUNCTION 'ARCHIV_CREATE_DIALOG_META'
    EXPORTING
      archiv_id                = l_archiv_id
      ar_object                = l_ar_object
*     DEL_DATE                 = ' '
*     NOTE                     =
      object_id                = l_object_id
      sap_object               = l_sap_object
*     FILE                     = ' '
*     COMMIT_FLAG              = ' '
*     VSCAN_PROFILE            = '/SCMS/KPRO_CREATE'
*     FILE_DESCR_POP_SUP       = ' '
    IMPORTING
*     ARCHIV                   =
      archiv_doc_id            = l_archiv_doc_id
*     DOCUMENTCLASS            =
* TABLES
*     OUTDOCTAB                =
* CHANGING
*     INFILETAB                =
    EXCEPTIONS
      error_archiv             = 1
      error_communicationtable = 2
      error_connectiontable    = 3
      error_kernel             = 4
      error_parameter          = 5
      error_scanqueue          = 6
      canceled_by_user         = 7
      blocked_by_policy        = 8
      OTHERS                   = 9.
  IF sy-subrc <> 0.
* Implement suitable error handling here
    MESSAGE i000(0k) WITH 'Error en Subir Archivo a Archive Link' DISPLAY LIKE 'E'.
  ENDIF.

  MOVE l_archiv_doc_id TO p_archiv_doc_id.

ENDFORM.                    " F_VER_DOCUMENTO

FM ARCHIV_CREATE_TABLE

Programa Ejemplo

DATA: gt_file_table TYPE filetable,   "Uploaded file information
      gt_content    TYPE soli_tab,    "Uploaded files content
      g_len        TYPE i.           "File length

DATA: g_ext   TYPE sood1-file_ext,   "File extension
      g_fname TYPE sood1-objdes.     "File name

data: g_archiv_id       TYPE saearchivi, "Archive connection ID
      g_xstring TYPE xstring,            "File in Xstring
      g_out TYPE i,
      g_arc_doc_id      TYPE saeardoid.  "Archive document ID

 DATA gt_content1024        TYPE TABLE OF tbl1024.  "RAW 1024 format

 data : g_obj   TYPE toav0-sap_object value 'BUS1309',        "Business object type
        g_obj_ty TYPE toaom-ar_object value 'ZBPCR057',  "Archive document type
        g_OBJECT_ID type TOA01-OBJECT_ID.
        
  g_ext = 'PDF'.
  
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = g_xstring
    IMPORTING
      output_length = g_len
    TABLES
      binary_tab    = gt_content1024.
      
      
  DATA: lv_doc_typ    TYPE toadv-doc_type,
        lv_arc_length TYPE sapb-length.


  CALL FUNCTION 'ARCHIV_CONNECTDEFINITION_GET'
    EXPORTING
      objecttype    = g_obj
      documenttype  = g_obj_ty
      client        = sy-mandt
    IMPORTING
      archivid      = g_archiv_id
    EXCEPTIONS
      nothing_found = 1
      OTHERS        = 2.

  lv_doc_typ = g_ext.      "File extension
  lv_arc_length = g_len.   "File length
  
  CALL FUNCTION 'ARCHIVOBJECT_CREATE_TABLE'
    EXPORTING
      archiv_id                = g_archiv_id
      document_type            = lv_doc_typ
      length                   = lv_arc_length
    IMPORTING
      archiv_doc_id            = g_arc_doc_id
    TABLES
      binarchivobject          = gt_content1024
    EXCEPTIONS
      error_archiv             = 1
      error_communicationtable = 2
      error_kernel             = 3
      OTHERS                   = 4.
      
  DATA: lv_doc_type  TYPE toadv-doc_type,
        lv_file_name TYPE toaat-filename,
        lv_object_no TYPE sapb-sapobjid.

  lv_doc_type =  g_ext.       "File type PDF
  lv_file_name = g_fname.    "File Name
  lv_object_no = g_OBJECT_ID.

  CALL FUNCTION 'ARCHIV_CONNECTION_INSERT'
    EXPORTING
      archiv_id             = g_archiv_id
      arc_doc_id            = g_arc_doc_id
      ar_object             = g_obj_ty
      object_id             = lv_object_no
      sap_object            = g_obj
      doc_type              = lv_doc_type
      filename              = lv_file_name
      descr                 = space
      creator               = sy-uname
    EXCEPTIONS
      error_connectiontable = 1
      OTHERS                = 2. 

Bajar archivo

ARCHIV_GET_TABLE

DATA: l_sapobj LIKE toa01-sap_object  VALUE 'BUS1309',
      l_objid  LIKE toa01-object_id   VALUE '%6527124%',
      l_archiv LIKE toa01-archiv_id   VALUE 'ZP',
      l_object LIKE toa01-ar_object   VALUE 'ZAFISH46'.

SELECT *  INTO CORRESPONDING FIELDS OF TABLE t_alf
    FROM toa01
    WHERE
          sap_object  =     l_sapobj  AND
          object_id   LIKE  l_objid   AND
          archiv_id   =     l_archiv  AND
  ar_object  =     l_object.
  IF sy-subrc = 0.
    DATA: l_tabix LIKE sy-tabix,
          w_toaat TYPE toaat.

    LOOP AT t_alf INTO w_alf.
      l_tabix = sy-tabix.
      CLEAR w_toaat.
      SELECT SINGLE * INTO w_toaat
        FROM toaat
      WHERE arc_doc_id = w_alf-arc_doc_id.

      w_alf-responsable  = w_toaat-creator.
*    w_alf-bp_emp     = wa_alv-object_id+12(10).
      w_alf-filename  = w_toaat-filename.
      w_alf-descr     = w_toaat-descr.
      MODIFY t_alf FROM w_alf INDEX l_tabix.

      REFRESH :t_arc_obj, t_binarc_obj.

      CALL FUNCTION 'ARCHIV_GET_TABLE'
        EXPORTING
          ar_object                = w_alf-ar_object
          object_id                = w_alf-object_id
          sap_object               = l_sapobj
        IMPORTING
          length                   = ld_len
*         BINLENGTH                =
        TABLES
          archivobject             = t_arc_obj
          binarchivobject          = t_binarc_obj
        EXCEPTIONS
          error_archiv             = 1
          error_communicationtable = 2
          error_connectiontable    = 3
          error_kernel             = 4
          error_parameter          = 5
          not_unique               = 6
          OTHERS                   = 7.
      IF sy-subrc <> 0.
* Implement suitable error handling here
*        error = c_x.
      ENDIF.

move ld_len to slen.

      CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
        EXPORTING
          input_length = slen
*         FIRST_LINE   = 0
*         LAST_LINE    = 0
        IMPORTING
          buffer       = p_xstring
        TABLES
          binary_tab   = t_binarc_obj
        EXCEPTIONS
          failed       = 1
          OTHERS       = 2.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.


ARCHIVOBJECT_GET_TABLE

  DATA it_binarchivobject TYPE TABLE OF tbl1024 WITH HEADER LINE.
  DATA lv_document_type LIKE toadd-doc_type.
  DATA lv_string TYPE string.
  DATA lv_da2048 TYPE text2048.
  DATA lv_length TYPE sapb-length.

  lv_document_type = ls_toa01-ar_object.

  CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'
    EXPORTING
      archiv_id                = ls_toa01-archiv_id
      document_type            = lv_document_type
      archiv_doc_id            = ls_toa01-arc_doc_id
    IMPORTING
      binlength                = lv_length
    TABLES
      binarchivobject          = it_binarchivobject
    EXCEPTIONS
      error_archiv             = 1
      error_communicationtable = 2
      error_kernel             = 3
      OTHERS                   = 4.

Ver documento

FORM f_ver_documento .
  DATA: l_archiv_id     TYPE toaom-archiv_id VALUE 'ZE',
        l_ar_object     TYPE toaom-ar_object,
        l_object_id     TYPE sapb-sapobjid,
        l_sap_object    TYPE toaom-sap_object VALUE 'ZBUS1309',
        l_archiv_doc_id TYPE toav0-arc_doc_id.

  MOVE wa_data-clase_docto TO l_ar_object.
  MOVE wa_data-arc_doc_id TO l_archiv_doc_id.
  l_object_id = g_object_id.

  CALL FUNCTION 'ARCHIVOBJECT_DISPLAY'
    EXPORTING
      archiv_doc_id            = l_archiv_doc_id
      archiv_id                = l_archiv_id
      object_id                = l_object_id
      ar_object                = l_ar_object
    EXCEPTIONS
      error_archiv             = 1
      error_communicationtable = 2
      error_kernel             = 3
      OTHERS                   = 4.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " F_VER_DOCUMENTO

Borrar archivo

    CALL FUNCTION 'ARCHIV_DELETE_META'
      EXPORTING
        client                   = sy-mandt
        archiv_id                = gs_ds_rebj_do-archiv_id
        arc_doc_id               = gs_ds_rebj_do-arc_doc_id
        ar_object                = gs_ds_rebj_do-ar_object
        object_id                = gs_ds_rebj_do-object_id
        sap_object               = gs_ds_rebj_do-sap_object
        delete_flag              = 1
      IMPORTING
        all_connections_deleted  = lv_all_connections_deleted
      EXCEPTIONS
        error_connectiontable    = 1
        error_parameter          = 2
        error_archiv             = 3
        error_kernel             = 4
        error_communicationtable = 5
        error_authority          = 6
        OTHERS                   = 7.

SAP Business Document Service

Notas

Para análisis, poner un break-point en la función HTTP2_GET (todas las funciones pasan por ahí!!!)