[ABAP] KPRO: Prüfen, ob Verbindung zum Content-Repository eingerichtet ist

CONSTANTS: c_none TYPE string VALUE '0 '.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title.
* CR
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT (17) lbl1 FOR FIELD p_crep.
    PARAMETERS: p_crep TYPE scms_crep MATCHCODE OBJECT h_crep_http.
  SELECTION-SCREEN END OF LINE.
* 'N'
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT (17) lbl2 FOR FIELD p_rbs1.
    PARAMETERS: p_rbs1 RADIOBUTTON GROUP rbg DEFAULT 'X'.
  SELECTION-SCREEN END OF LINE.
* 'S'
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT (17) lbl3 FOR FIELD p_rbs2.
    PARAMETERS: p_rbs2 RADIOBUTTON GROUP rbg.
  SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

  title = 'Auswahl'.
  lbl1 = 'Content Repository:'.
  lbl2 = 'Security (N):'.
  lbl3 = 'Security (S):'.

START-OF-SELECTION.
* CREP_HTTP (KPRO CMS: Content-Repositories (HTTP))
  SELECT SINGLE
    FROM crep_http
    FIELDS crep_id,
           http_serv,
           http_port,
           http_sport,
           http_scrpt,
           version
    WHERE crep_id = @p_crep
    INTO @DATA(lv_crep).

  IF sy-subrc EQ 0.
    IF NOT lv_crep-http_port CO c_none OR lv_crep-http_sport CO c_none.

      DATA(lv_sec) = 'N'.

* Security-Typ unterscheiden
      CASE abap_true.
        WHEN p_rbs1.
          lv_sec = 'N'.
        WHEN p_rbs2.
          lv_sec = 'S'.
      ENDCASE.

* CMS: HTTP Verbindungstest
      CALL FUNCTION 'SCMS_HTTP_PING'
        EXPORTING
          crep_id    = lv_crep-crep_id
          http_serv  = lv_crep-http_serv
          http_port  = lv_crep-http_port
          http_sport = lv_crep-http_sport
          http_scrpt = lv_crep-http_scrpt
          version    = lv_crep-version
          security   = lv_sec
        EXCEPTIONS
          error_http = 1
          OTHERS     = 2.

      IF sy-subrc = 0.
        WRITE: / |{ lv_crep-crep_id } ok.|.
      else.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO DATA(lv_msg).
        WRITE: / lv_msg.
      ENDIF.
    ELSE.
      WRITE: / 'No port.'.
    ENDIF.
  ELSE.
    WRITE: / 'No CS.'.
  ENDIF.

[ABAP] Anlagen zu Business-Objekten zählen

PARAMETERS: p_instid TYPE sibfboriid DEFAULT '000000001234567890'.
PARAMETERS: p_typeid TYPE sibftypeid DEFAULT 'BUS1001006'.
PARAMETERS: p_catid TYPE sibfcatid DEFAULT 'BO'.

START-OF-SELECTION.

* Schlüssel des Business-Objekts
  DATA(lv_object) = VALUE sibflporb( instid  = p_instid
                                     typeid  = p_typeid
                                     catid   = p_catid ).

* Statistiken für Anlagen -> Anlagen zählen
  DATA(it_stst) = cl_gos_attachment_query=>count_for_object( is_object = lv_object
                                                             ip_arl    = '' ).

* Übersicht zu angehangenen Objekten, COUNTER enthält die Anzahl
  cl_demo_output=>write_data( it_stst ).
  cl_demo_output=>display( ).

[ABAP] Klassen für Zugriff auf Business-Objekte

SAPoffice Dokumente

  • verlinkt auf Business Objekte via Object Relationship Service Tables
  • Klasse: CL_BINARY_RELATION (ersetzt FuBas SO_DOCUMENT*)
  • Tabellen: SRGBTBREL

Beispiel

* Quelle / Inspiration: https://www.inwerken.de/gos-anhange-auslesen-anlegen/

**********************************************************************
* Typen
**********************************************************************
TYPES: BEGIN OF ty_s_key,
         foltp     TYPE so_fol_tp,
         folyr     TYPE so_fol_yr,
         folno     TYPE so_fol_no,
         objtp     TYPE so_obj_tp,
         objyr     TYPE so_obj_yr,
         objno     TYPE so_obj_no,
         forwarder TYPE so_usr_nam,
       END OF ty_s_key.
**********************************************************************
* Selektionsbild
**********************************************************************
PARAMETERS: p_instid TYPE sibfboriid DEFAULT '000000001234567890'.
PARAMETERS: p_typeid TYPE sibftypeid DEFAULT 'BUS1001006'.
PARAMETERS: p_catid TYPE sibfcatid DEFAULT 'BO'.

START-OF-SELECTION.

* Schlüssel des Business-Objekts
  DATA(lv_object) = VALUE sibflporb( instid  = p_instid
                                     typeid  = p_typeid
                                     catid   = p_catid ).

* Verknüpfungsoptionen
* Verknüpfungstypen
  DATA(it_relopt) = VALUE obl_t_relt( ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'ATTA' " Anhänge
                                      )
                                      ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'NOTE' " Notizen
                                      )
                                      ( sign   = 'I'
                                        option = 'EQ'
                                        low    = 'URL'  " URLs
                                      )
                                    ).

  TRY.
* Verknüpfungen zum Objekt
      DATA(it_links) = VALUE obl_t_link( ).
      DATA(it_roles) = value obl_t_role( ).

* Verknüpfungen zum Objekt lesen
      cl_binary_relation=>read_links_of_binrels( EXPORTING
                                                   is_object           = lv_object
                                                   it_relation_options = it_relopt
                                                   ip_role             = 'GOSAPPLOBJ'
                                                 IMPORTING
                                                   et_links            = it_links
                                                   et_roles            = it_roles ).

      cl_demo_output=>write_data( it_links ).
      cl_demo_output=>write_data( it_roles ).

* Verknüpfungen vom Typ 'MESSAGE' durchgehen
      LOOP AT it_links ASSIGNING FIELD-SYMBOL(<l>) WHERE typeid_b = 'MESSAGE'.

        cl_demo_output=>line( ).

* Schlüssel einer Verknüpfung
        DATA(lv_key) = CONV ty_s_key( <l>-instid_b ).
        cl_demo_output=>write_data( lv_key ).

* Dokumenten-Grunddaten
        DATA(lv_doc_data) = VALUE sofolenti1( ).
* Dokumenteninhalt Text und Binär
        DATA(it_contx) = VALUE solix_tab( ).
        DATA(it_cont) = VALUE soli_tab( ).

* Daten des Dokuments lesen
        CALL FUNCTION 'SO_DOCUMENT_READ_API1'
          EXPORTING
            document_id                = CONV sofolenti1-doc_id( <l>-instid_b ) " Dokumenten-ID für SAPOffice == Instanz-ID
          IMPORTING
            document_data              = lv_doc_data
          TABLES
            object_content             = it_cont
            contents_hex               = it_contx
          EXCEPTIONS
            document_id_not_exist      = 1
            operation_no_authorization = 2
            x_error                    = 3
            OTHERS                     = 4.
        IF sy-subrc = 0.
          cl_demo_output=>write_data( lv_doc_data ).
          cl_demo_output=>write_data( it_cont ).
        ENDIF.

      ENDLOOP.

      cl_demo_output=>display( ).

    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

Archivdokumente

  • Logische Dokumente, verlinkt auf Business Objekte via Connection Tables des Content Management Systems
  • Klasse: CL_ALINK_CONNECTION
  • Funktionen: find, find_by_doc_key, compose, insert, delete_by_key
  • Tabellen: TOAAR, TOAOM, TOJTB, TOA01, TOA02, TOA03

Beispiel

TRY.
    DATA(o_alink) = NEW cl_alink_connection( ).
* Suche von Verknüpfungen
    o_alink->find( EXPORTING 
                     sap_object = 'ZXYZ'                   " SAP ArchiveLink: Objekttyp des Business Objekts
                     object_id  = CONV saeobjid( '12345' ) " SAP ArchiveLink: Objekt-Id (Objektidentifikator)
                     mandt      = sy-mandt                 " Mandantenkennung des aktuellen Benutzers
                     archiv_id  = 'XY'                     " Content Repository Identifikation
                   IMPORTING
                     connections = DATA(it_conn) ).
    
    cl_demo_output=>display( it_conn ).
  CATCH cx_root.
ENDTRY.

[SAP] Archivobjekt anhand seiner ARC_DOC_ID lesen

* Archiv-ID aus Tabelle TOAAR
PARAMETERS: p_arc TYPE toaar-archiv_id.
* ARC_DOC_ID: Beispiel siehe Tabelle TOA01, TOA02, TOA03
PARAMETERS: p_docid TYPE saeardoid DEFAULT '41C0CC07B977349DE10000000A450668'.

START-OF-SELECTION.

  DATA: lv_toa0x TYPE toa01.

* Pr?fen, ob das Archivobjekt in der Tabelle TOA01, TOA02 oder TOA03 abgelegt ist
* Tabelle TOA01
  SELECT SINGLE *
    INTO @lv_toa0x
    FROM toa01
    WHERE arc_doc_id = @p_docid
      AND archiv_id  = @p_arc.

  IF sy-subrc <> 0.
* Tabelle TOA02
    SELECT SINGLE *
      INTO @lv_toa0x
      FROM toa02
      WHERE arc_doc_id = @p_docid
        AND archiv_id  = @p_arc.
  ENDIF.

  IF sy-subrc <> 0.
* Tabelle TOA03
    SELECT SINGLE *
      INTO @lv_toa0x
      FROM toa03
      WHERE arc_doc_id = @p_docid
        AND archiv_id  = @p_arc.
  ENDIF.

  IF sy-subrc = 0.

    WRITE: / lv_toa0x-sap_object.
    WRITE: / lv_toa0x-object_id.
    WRITE: / lv_toa0x-archiv_id.
    WRITE: / lv_toa0x-arc_doc_id.
    WRITE: / lv_toa0x-ar_object.
    WRITE: / lv_toa0x-ar_date.
    WRITE: / lv_toa0x-del_date.
    WRITE: / lv_toa0x-reserve.

    ULINE.

    DATA: lv_url TYPE swk_url.

* CMS:AO API Url für Dokumentzugriff
    CALL FUNCTION 'SCMS_AO_URL_READ'
      EXPORTING
        arc_id = p_arc
        doc_id = p_docid
      IMPORTING
        url    = lv_url
      EXCEPTIONS
        error  = 1
        OTHERS = 2.

    IF sy-subrc = 0.
* URL anzeigen, kann auch im cl_gui_html_viewer direkt angezeigt werden
      WRITE: / lv_url.
*      DATA(o_html) = new cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
*      o_html->show_url( lv_url ).
      ULINE.
    ELSE.
      WRITE: / 'URL-Error:', sy-subrc.
    ENDIF.

    DATA(lv_length) = 0.
    DATA: it_bin_data TYPE STANDARD TABLE OF tbl1024 WITH DEFAULT KEY.

    DATA: lv_status TYPE char64.
    DATA: lv_doc_type TYPE char64.
    DATA: lv_arch_date TYPE d.
    DATA: lv_arch_time TYPE t.
    DATA: lv_mimetype TYPE char64.
    DATA: it_scms_comps TYPE STANDARD TABLE OF scms_comps WITH DEFAULT KEY.
    DATA: it_scms_compsl TYPE STANDARD TABLE OF scms_compsl WITH DEFAULT KEY.

* Status des AO lesen
* CMS: AO API Statusabfrage
    CALL FUNCTION 'SCMS_AO_STATUS'
      EXPORTING
        arc_id       = p_arc
        doc_id       = p_docid
      IMPORTING
        status       = lv_status
        doc_type     = lv_doc_type
        arch_date    = lv_arch_date
        arch_time    = lv_arch_time
        mimetype     = lv_mimetype
      TABLES
        comps        = it_scms_comps
        compsl       = it_scms_compsl
      EXCEPTIONS
        error_http   = 1
        error_kernel = 2
        error_archiv = 3
        error_config = 4
        OTHERS       = 5.
    IF sy-subrc = 0.
      LOOP AT it_scms_comps ASSIGNING FIELD-SYMBOL(<c>).
        WRITE: / <c>-compid, <c>-mimetype, <c>-compsize, <c>-compdatec, <c>-comptimec, <c>-compdatem, <c>-comptimem, <c>-status.
      ENDLOOP.
    ELSE.
      WRITE: / 'Status-Error:', sy-subrc.
    ENDIF.

    ULINE.

* Bin?rdaten des AO lesen
* CMS: AO API Dokument bereitstellen Tabelle
    CALL FUNCTION 'SCMS_AO_TABLE_GET'
      EXPORTING
        arc_id       = p_arc
        doc_id       = p_docid
      IMPORTING
        length       = lv_length
      TABLES
        data         = it_bin_data
      EXCEPTIONS
        error_http   = 1
        error_archiv = 2
        error_kernel = 3
        error_config = 4
        OTHERS       = 5.

    IF sy-subrc = 0.
      DATA: lv_xstring TYPE xstring.

* Bin?rdaten in xstring konvertieren
      CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
        EXPORTING
          input_length = CONV i( lv_length )
        IMPORTING
          buffer       = lv_xstring
        TABLES
          binary_tab   = it_bin_data
        EXCEPTIONS
          failed       = 1
          OTHERS       = 2.

      IF sy-subrc = 0.
        ...
      ENDIF.
    ELSE.
      WRITE: / 'Error getting AO-data:', sy-subrc.
    ENDIF.
  ELSE.
    WRITE: / 'ARC_DOC_ID not found:', sy-subrc.
  ENDIF.

[ABAP] Infos zum Archiv lesen

*           Paket: SAOP
*                  SCMS
* Funktionsgruppe: SCMS_AO_API
* Tabellen: TOAAR: Kommunikationskonfigurationstabelle Ablagesysteme
*           TOADV: SAP ArchiveLink: Globale Dokumentarten SAP ArchiveLink
*           TOAOM: SAP ArchiveLink: Metatabelle für Verknüpfungen
*           TOADD: SAP ArchiveLink Prüftabelle DOK_Typ
*           TOJTB: Business Object Repository Grunddaten
*           TOA01: Verknüpfungstabelle 1
*           TOA02: Verknüpfungstabelle 2
*           TOA03: Verknüpfungstabelle 3
*           TOAAT: Table to store the File attributes
*           TOACO: Prüftabelle für die Verknüpfungstabellen

* Archiv-ID aus Tabelle TOAAR
PARAMETERS: p_arc TYPE toaar-archiv_id.

START-OF-SELECTION.

  DATA: lv_version TYPE char64.
  DATA: lv_protocol TYPE char64.
  DATA: lv_basicpath TYPE char255.
  DATA: lv_archivpath  TYPE char255.
  DATA: lv_spoolpath TYPE char255.
  DATA: lv_phys_basicpath TYPE char255.
  DATA: lv_phys_archivpath TYPE char255.
  DATA: lv_client_dependend TYPE sy-datar.
  DATA: lv_rep_type TYPE scms_crtyp.

* CMS: AO API Archivinformation
  CALL FUNCTION 'SCMS_ARCHIVE_INFO_GET'
    EXPORTING
      arc_id           = p_arc
    IMPORTING
      version          = lv_version
      protocol         = lv_protocol
      basicpath        = lv_basicpath
      archivpath       = lv_archivpath
      spoolpath        = lv_spoolpath
      phys_basicpath   = lv_phys_basicpath
      phys_archivpath  = lv_phys_archivpath
      client_dependend = lv_client_dependend
      rep_type         = lv_rep_type
    EXCEPTIONS
      error_config     = 1
      OTHERS           = 2.

  IF sy-subrc = 0.
    WRITE: / |Version: { lv_version }|.
    WRITE: / |Protokoll { lv_protocol }|.
    WRITE: / |BasicPath: { lv_basicpath }|.
    WRITE: / |ArchivPath: { lv_archivpath }|.
    WRITE: / |SpoolPath: { lv_spoolpath }|.
    WRITE: / |PhysBasicPath: { lv_phys_basicpath }|.
    WRITE: / |PhysArchivPath: { lv_phys_archivpath }|.
    WRITE: / |ClientDependend: { lv_client_dependend }|.
    WRITE: / |RepType: { lv_rep_type }|.
  ENDIF.

[ABAP] Konstanten für gängige MIME-Typen (IF_REST_MEDIA_TYPE, CL_FXS_MIME_TYPES)

Variante 1 (IF_REST_MEDIA_TYPE)

Konstante                       MIME-Typ
--------------------------------------------------------------
gc_all                          '*/*'
gc_appl_all                     'application/*'
gc_appl_xml                     'application/xml'
gc_appl_xhtml_xml               'application/xhtml+xml'
gc_appl_atom_xml                'application/atom+xml'
gc_appl_atom_xml_feed           'application/atom+xml;type=feed'
gc_appl_atom_xml_entry          'application/atom+xml;type=entry'
gc_appl_atomcat_xml             'application/atomcat+xml'
gc_appl_atomsvc_xml             'application/atomsvc+xml'
gc_appl_opensearch_descr_xml    'application/opensearchdescription+xml'
gc_appl_all_xml                 'application/*+xml'
gc_appl_java                    'application/java'
gc_appl_java_archive            'application/java-archive'
gc_appl_json                    'application/json'
gc_appl_json_odata_verbose      'application/json;odata=verbose'
gc_appl_mac_binhex40            'application/mac-binhex40'
gc_appl_mathml_xml              'application/mathml+xml'
gc_appl_msword                  'application/msword'
gc_appl_octet_stream            'application/octet-stream'
gc_appl_onenote                 'application/onenote'
gc_appl_pdf                     'application/pdf'
gc_appl_postscript              'application/postscript'
gc_appl_rdf_xml                 'application/rdf+xml'
gc_appl_relax_ng_compact_synt   'application/relax-ng-compact-syntax'
gc_appl_rss_xml                 'application/rss+xml'
gc_appl_rtf                     'application/rtf'
gc_appl_sparql_results_json     'application/sparql-results+json'
gc_appl_sparql_results_xml      'application/sparql-results+xml'
gc_appl_trix                    'application/trix'
gc_appl_vnd_google_earthkmlxml  'application/vndgoogle-earthkml+xml'
gc_appl_vnd_google_earth_kmz    'application/vndgoogle-earthkmz'
gc_appl_vnd_mozilla_xul_xml     'application/vndmozillaxul+xml'
gc_appl_vnd_ms_cab_compressed   'application/vndms-cab-compressed'
gc_appl_vnd_ms_excel            'application/vndms-excel'
gc_appl_vnd_ms_powerpoint       'application/vndms-powerpoint'
gc_appl_vnd_ms_project          'application/vndms-project'
gc_appl_vnd_sun_wadl_xml        'application/vndsunwadl+xml'
gc_appl_voicexml_xml            'application/voicexml+xml'
gc_appl_zip                     'application/zip'
gc_audio_all                    'audio/*'
gc_audio_basic                  'audio/basic'
gc_audio_midi                   'audio/midi'
gc_audio_mpeg                   'audio/mpeg'
gc_image_all                    'image/*'
gc_image_bmp                    'image/bmp'
gc_image_gif                    'image/gif'
gc_image_jpeg                   'image/jpeg'
gc_image_png                    'image/png'
gc_image_svg_xml                'image/svg+xml'
gc_image_tiff                   'image/tiff'
gc_message_all                  'message/*'
gc_model_all                    'model/*'
gc_model_vrml                   'model/vrml'
gc_multipart_all                'multipart/*'
gc_multipart_form_data          'multipart/form-data'
gc_text_all                     'text/*'
gc_text_calendar                'text/calendar'
gc_text_css                     'text/css'
gc_text_csv                     'text/csv'
gc_text_html                    'text/html'
gc_text_javascript              'text/javascript'
gc_text_n_triples               'text/n-triples'
gc_text_n3                      'text/n3'
gc_text_plain                   'text/plain'
gc_text_tab_separated_values    'text/tab-separated-values'
gc_text_uri_list                'text/uri-list'
gc_video_all                    'video/*'
gc_video_mp4                    'video/mp4'
gc_video_mpeg                   'video/mpeg'
gc_video_quicktime              'video/quicktime'
gc_appl_www_form_url_encoded    'application/x-www-form-urlencoded'
gc_multipart_mixed              'multipart/mixed'
gc_appl_http                    'application/http'

Variante 2 (CL_FXS_MIME_TYPES)

Konstante                           MIME-Typ
--------------------------------------------------------------
CL_FXS_MIME_TYPES=>CO_BINARY        'application/octet-stream'
CL_FXS_MIME_TYPES=>CO_PDF           'application/pdf'
CL_FXS_MIME_TYPES=>CO_IMAGE_BITMAP  'image/x-ms-bmp'
CL_FXS_MIME_TYPES=>CO_IMAGE_PNG     'image/png'
CL_FXS_MIME_TYPES=>CO_IMAGE_GIF     'image/gif'
CL_FXS_MIME_TYPES=>CO_IMAGE_TIFF    'image/tiff'
CL_FXS_MIME_TYPES=>CO_IMAGE_JPEG    'image/jpeg'

[ABAP] Binärdaten per RFC aus dem Archiv (Content-Repository) lesen

* System-ID
PARAMETERS: p_rfc TYPE sy-sysid DEFAULT 'XYZ'.
* Content-Repository
PARAMETERS: p_rep TYPE saearchivi DEFAULT 'AR'.
* ARC_DOC_ID
PARAMETERS: p_arc TYPE saeardoid DEFAULT '1402EC8FAAB21EC888CA63622402D29F'.

START-OF-SELECTION.

  DATA: lv_message TYPE bapiret2.
  DATA: it_raw_1024 TYPE STANDARD TABLE OF tbl1024 WITH DEFAULT KEY.

* Binärdaten eines Dokumentes über RFC zurückgeben
  CALL FUNCTION 'ALINK_RFC_TABLE_GET' DESTINATION p_rfc
    EXPORTING
      im_docid              = p_arc
      im_crepid             = p_rep
    IMPORTING
      ex_message            = lv_message
    TABLES
      ex_document           = it_raw_1024
    EXCEPTIONS
      system_failure        = 1
      communication_failure = 2
      OTHERS                = 3.

  WRITE: / lv_message-message.

  IF sy-subrc = 0.
* weitere Schritte mit it_raw_1024

  ENDIF.

[ABAP] RFC-Abruf aller verlinkten Dokumente zu einem Business Object

* System-ID
PARAMETERS: p_rfc TYPE sy-sysid DEFAULT 'XYZ'.
* Typ-Material 
PARAMETERS: p_sobj TYPE toav0-sap_object DEFAULT 'BUS1001006'.
* MATNR
PARAMETERS: p_oid TYPE toav0-object_id DEFAULT '000000001234567890'.

START-OF-SELECTION.

  DATA: lv_message TYPE bapiret2.
  DATA: it_results TYPE STANDARD TABLE OF toars_s WITH DEFAULT KEY.
  DATA: it_urls TYPE STANDARD TABLE OF toadurl_s WITH DEFAULT KEY.

* Gibt alle Dokumente zum Business Object zurück
  CALL FUNCTION 'ALINK_RFC_DOCUMENTS_GET' DESTINATION p_rfc
    EXPORTING
      im_botype             = p_sobj
      im_boid               = p_oid
      im_x_urls             = abap_false " Schalter zum Füllen von IT_URLS => Performance beachten
    IMPORTING
      ex_message            = lv_message
    TABLES
      ex_results            = it_results
      ex_urls               = it_urls
    EXCEPTIONS
      system_failure        = 1
      communication_failure = 2
      OTHERS                = 3.

  WRITE: / lv_message-message.

  IF sy-subrc = 0.
    cl_demo_output=>display( it_results ).
  ENDIF.