quarta-feira, 30 de outubro de 2019

SAP NFCe contingência - DIGEST VALUE

Conforme post anterior, eu fiz um código para pegar o digest value do XML, ainda não testei no processo de contingência, se não funcionar, vou ter q procurar outra forma.

FORM f_digest_value USING fu_active TYPE j_1bnfe_active
                  CHANGING fc_digval TYPE string.

  DATAlo_download       TYPE REF TO cl_j_1bnfe_xml_download,
        lo_ixml           TYPE REF TO if_ixml,
        lo_stream_factory TYPE REF TO if_ixml_stream_factory,
        lo_doc            TYPE REF TO if_ixml_document,
        lo_node_col       TYPE REF TO if_ixml_node_collection,
        lo_node           TYPE REF TO if_ixml_node.

  DATAl_rfcdest    TYPE rfcdest,
        l_xnfeactive TYPE j_1bxnfeactive,
        l_xml        TYPE xstring,
        l_key        TYPE j_1b_nfe_access_key,
        l_key44      TYPE j_1b_nfe_access_key_dtel44,
        l_xml_cont   TYPE j_1b_nfe_xml_content.

  CONSTANTS lc_model_nfe  TYPE j_1b_nfe_doctype VALUE 'NFE'.
  "CONSTANTS lc_direct_in  TYPE j_1b_nfe_direction VALUE 'INBD'.
  CONSTANTS lc_direct_out TYPE j_1b_nfe_direction VALUE 'OUTB'.

  CLEAR fc_digval.

  MOVE-CORRESPONDING fu_active TO l_key.

  l_key44 l_key.

  SELECT SINGLE ext_eventseqnum
    INTO @DATA(ls_event)
    FROM j_1bnfe_event
   WHERE docnum EQ @fu_active-docnum.

  CALL FUNCTION 'J_1B_NFE_CHECK_RFC_DESTINATION'
    EXPORTING
      i_bukrs      fu_active-bukrs
      i_branch     fu_active-branch
      i_model      fu_active-model
    IMPORTING
      e_rfcdest    l_rfcdest
      e_xnfeactive l_xnfeactive
    EXCEPTIONS
      rfc_error    1
      OTHERS       2.

  CREATE OBJECT lo_download
    EXPORTING
      iv_xml_key l_key44
      iv_rfc     l_rfcdest.

  CALL METHOD lo_download->load_xml_content
    EXPORTING
      iv_docnum       fu_active-docnum
      iv_event_type   ls_event-ext_event
      iv_event_seqnum ls_event-seqnum
      iv_direction    lc_direct_out
      iv_doctype      lc_model_nfe.

  l_xml_cont lo_download->get_xml_content).

*--------------------------------------------------------------------*
* Get DigestValue from lf_signature XML
*---------|----------------------------------------------------------*
  lo_ixml cl_ixml=>create).
  lo_stream_factory lo_ixml->create_stream_factory).
  lo_doc lo_ixml->create_document).

  IF lo_ixml->create_parser(
    document lo_doc
    stream_factory lo_stream_factory
    istream lo_stream_factory->create_istream_xstringstring l_xml_cont )
    )->parse<> 0.
    RETURN.
  ENDIF.

  lo_node_col lo_doc->get_elements_by_tag_namename 'DigestValue' ).
  IF lo_node_col->get_length0.
    lo_node lo_node_col->get_item).
    fc_digval lo_node->get_value).
  ENDIF.

ENDFORM.

Nenhum comentário:

Postar um comentário