Ejecución de Proxy y tablas Z

Hola compañeros me acaban de pasar un incidente, es acerca de un proxy pero aún no se muy bien como trabajan y veo poca documentación en google. el incidente esque me comentan que el proxy debe de mandar unas tablas (log, clientes y cuentas) y solo manda las del log, veo que el proxy se ejecuta mediante una clase y este a su vez manda llamar un método. creen que donde deba revisar sea el método?

Efectivamente, a través del método es como debes pasar y obtener información del proxy. Yo lo utilizo para el timbrado de facturación electrónica en México, de la siguiente manera:

proxy

Sólo tienes que revisar la estructura de tu proxy

2 Me gusta

Hola @lrobertorosor muchas gracias por tu respuesta, ahora ya entré a la clase y al método, ya encontré las 2 estructuras de cliente y cuenta, al parecer no se están llenando por eso eso no las manda llamar, ahora como puedo debbugear el método?.
Por cierto igual vi en internet que algunos recomiendan colocar el “TRY” y el “CATCH” en el método que función tiene?

Try…Endtry para que se tenga la posibilidad de obtener dump en este caso de la ejecución del método del proxy. Catch para especificar el error que deseamos procesar.

Para debuguear, pues debes navegar a través de tu método y tratar de ubicar la línea donde quieras poner tu “break”:

2 Me gusta

ok ok muchas gracias @lrobertorosor solo una última duda ya navego por el método, etc y vi donde colocar mi break point, ahora para ejecutarlo y entre a la pantalla del debbug? ya que si lo ejecuto me sale la siguiente imagen.

¿Ya intentaste darle F5, F6, F8?, para que avance hasta tu break point

si ya amigo y me aparece la segunda pantalla, lo que pasa que en la imagen anterior vienen 2 pantallas . la primera esta el método le doy f8 y me manda a la segunda pantalla que dice: Test de la clase ZSIPREVCL_GENERAR_CALIFICACION

¿puedes compartir la imagen del debugueo cuando se llega a la instrucción donde colocaste el break point?

:exclamation: Por favor recuerden pasar código como texto (no como captura de pantalla) :pray:

cc: @lrobertorosor

Bien, así lo haré la siguiente vez

Si claro @SidV solo compartí pantallas de lo que me aparecía, no te preocupes. Gracias

Hola @lrobertorosor ya quedó el ajuste y ya me trae las tablas con la información de clientes y cuentas, ahora por ejemplo si no trae datos el XML sale una serie de errores muy largo y me solicitan que en lugar de eso solo aparezca un renglón vacio, me dijeron que ajuste el proxy pero no se en que parte hacer eso o como se hace?

Seguramente el proxy debe contener una sección donde devuelve los errores. Te paso el código de cómo proceso los errores:

      try.
        call method zrechcore_33->TIMBRAR_COMPROBANTE
        exporting
          TIMBRAR_COMPROBANTE_REQUEST  = input
        importing
          TIMBRAR_COMPROBANTE_RESPONSE = output
          .
          catch cx_ai_system_fault      into lr_ex_system.
          catch cx_ai_application_fault into lr_ex_application.
        MESSAGE e001(ZFE_RECH).
      endtry.

      IF OUTPUT-ERROR-BASE-CODE IS NOT INITIAL. <<<<------  AQUI ERROR-BASE-CODE es donde se guardan los errores en la parte de la estructura del PROZY que se está utilizando
        CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
          EXPORTING
            im_xstring  = OUTPUT-ERROR-INNER_ERRORS
            im_encoding = 'UTF-8'
          IMPORTING
            ex_string   = l_string.

        CALL FUNCTION 'ZZWS_MENSAJE_ERRORS'
          EXPORTING
            l_string    = l_string.

        MESSAGE resultado TYPE 'I' RAISING sin_timbrar.


LA FUNCIÓN PARA TRATAR EL ERROR:
FUNCTION ZZWS_MENSAJE_ERRORS .
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(L_STRING) TYPE  STRING
*"----------------------------------------------------------------------
  DATA: patt TYPE string,
        text TYPE string,
        off  TYPE i,
        moff TYPE i,
        mlen TYPE i,
        ind  TYPE i,
        idx  TYPE i.
  TYPES: BEGIN OF t_errorws."Tabla de códigos de error
  TYPES: indice   TYPE i,
         codews_i TYPE i,
         codews_f TYPE i,
         codews   TYPE string,
         messagews_i TYPE i,
         messagews_f TYPE i,
         messagews   TYPE string,
         targetws_i TYPE i,
         targetws_f TYPE i,
         targetws   TYPE string,
         detailsws_i TYPE i,
         detailsws_f TYPE i,
         detailsws   TYPE string.
  TYPES: END OF t_errorws.
  DATA: it_errorws TYPE STANDARD TABLE OF t_errorws INITIAL SIZE 0,
        wa_errorws TYPE t_errorws.

  ind = 1.
  WHILE ind le 8.
    off = 0.
    idx = 1.
    sy-subrc = 0.
    WHILE sy-subrc = 0.
      clear wa_errorws.
      case ind.
        when 1.
          patt = '<Code>'.
        when 2.
          patt = '</Code>'.
        when 3.
          patt = '<Message>'.
        when 4.
          patt = '</Message>'.
        when 5.
          patt = '<Target>'.
        when 6.
          patt = '</Target>'.
        when 7.
          patt = '<Details>'.
        when 8.
          patt = '</Details>'.
      endcase.
      FIND patt IN SECTION OFFSET off OF l_string
      MATCH OFFSET moff
      MATCH LENGTH mlen.
      IF sy-subrc = 0.
        case ind.
          when 1.
            wa_errorws-indice   = idx.
            wa_errorws-codews_i = moff + mlen.
            APPEND wa_errorws TO it_errorws.
          when 2.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-codews_f = moff - wa_errorws-codews_i.
              wa_errorws-codews   = l_string+wa_errorws-codews_i(wa_errorws-codews_f).
              MODIFY it_errorws FROM wa_errorws TRANSPORTING codews_f codews WHERE indice = idx.
            ENDIF.
          when 3.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-messagews_i = moff + mlen.
              MODIFY it_errorws FROM wa_errorws TRANSPORTING messagews_i WHERE indice = idx.
            ENDIF.
          when 4.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-messagews_f = moff - wa_errorws-messagews_i.
              wa_errorws-messagews   = l_string+wa_errorws-messagews_i(wa_errorws-messagews_f).
              MODIFY it_errorws FROM wa_errorws TRANSPORTING messagews_f messagews WHERE indice = idx.
            ENDIF.
          when 5.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-targetws_i = moff + mlen.
              MODIFY it_errorws FROM wa_errorws TRANSPORTING targetws_i WHERE indice = idx.
            ENDIF.
          when 6.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-targetws_f = moff - wa_errorws-targetws_i.
              wa_errorws-targetws   = l_string+wa_errorws-targetws_i(wa_errorws-targetws_f).
              MODIFY it_errorws FROM wa_errorws TRANSPORTING targetws_f targetws WHERE indice = idx.
            ENDIF.
          when 7.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-detailsws_i = moff + mlen.
              MODIFY it_errorws FROM wa_errorws TRANSPORTING detailsws_i WHERE indice = idx.
            ENDIF.
          when 8.
            READ TABLE it_errorws WITH KEY indice = idx into wa_errorws.
            IF sy-subrc = 0.
              wa_errorws-detailsws_f = moff - wa_errorws-detailsws_i.
              wa_errorws-detailsws   = l_string+wa_errorws-detailsws_i(wa_errorws-detailsws_f).
              MODIFY it_errorws FROM wa_errorws TRANSPORTING detailsws_f detailsws WHERE indice = idx.
            ENDIF.
        endcase.
        off = moff + mlen.
        idx = idx + 1.
      ENDIF.
    ENDWHILE.
    ind = ind + 1.
  ENDWHILE.
  EXPORT it_errorws FROM it_errorws TO DATABASE indx(ws) ID 'ZERRORWS'.
ENDFUNCTION.

En tu caso, pienso que limpiando la variable de la estuctura del proxy donde viene el error sea suficiente, pues no les interesa procesar dichos errores; por ejemplo para mi caso sería:

1 me gusta

ok ok perfecto lo busco y te aviso

hola @lrobertorosor me imagino que debo limpiar las variables de las estructuras de salida? son las que vienen en el código mira

`    BEGIN OF ty_error,
             zseveridad TYPE num10,
             zmensaje   TYPE string,
      END OF ty_error .

  "Variables Locales
  DATA: vl_iderror TYPE numc2.

  "Definición de estructuras necesarias para recuperar información de la interfaz
  "Estructuras de Entrada
  DATA: tl_generar_calificacion_re TYPE zsiprevgenerar_calificacion_re,
        tl_cliente_in              TYPE zsiprevcliente_tab,
        sl_cliente_in              TYPE zsiprevcliente,
        sl_siprev_cte              TYPE zsiprev_cte,
        tl_cuenta_in               TYPE zsiprevcuenta_tab,
        tl_cuenta_in_aux           TYPE zsiprevcuenta_tab,
        sl_cuenta_in               TYPE zsiprevcuenta,
        sl_siprev_cta              TYPE zsiprev_cta,
  "Estructuras de Salida
        tl_calificacion_res        TYPE zsiprevcalificacion_res,
        tl_cliente_out             TYPE STANDARD TABLE OF zsiprevcliente_resp,
        sl_cliente_out             TYPE zsiprevcliente_resp,

        tl_cuenta_out              TYPE STANDARD TABLE OF zsiprevcuenta_resp,
        sl_cuenta_out              TYPE zsiprevcuenta_resp,

        tl_error_out               TYPE STANDARD TABLE OF zsiprevcalificacion_res_log,
        sl_error_out               TYPE zsiprevcalificacion_res_log,

        tg_cliente                 TYPE STANDARD TABLE OF ty_cliente,
        sl_cliente                 LIKE LINE OF tg_cliente,

        tg_cuenta                  TYPE STANDARD TABLE OF ty_cuenta,
        sl_cuenta                  LIKE LINE OF tg_cuenta,

        tg_error                   TYPE STANDARD TABLE OF ty_error,
        sl_error                   LIKE LINE OF tg_error.`

esto es en el proxy

Por lo que observo, la información que regresa el proxy se almacena en tl_cliente_out y sl_cliente_out; así como tl_cuenta_out y sl_cuenta_out y los errores devueltos se almacenan en tl_error_out y sl_error_out; entonces de estas tablas, ¿qué deseas que se limpie, de tal manera que no muestre los errores que no quieren que se desplieguen?; si no estás seguro, quizás un debugueo a estas tablas te pueda dar la respuesta

1 me gusta

Al inicio la tabla cliente y cuenta no aparecía en el XML y eso ya lo conseguí, entonces cuando ejecutan el XML y borran los registros de las tablas(o sea que vengan vacías) salen una serie de errores, pero esos no se de donde vienen?

XML

en este ejemplo el XML ya trae los datos de la tabla de cliente, no se si ahí me explico mejor

¿qué método utilizan para la creación de xml?, por ejemplo xslt, rutinas que van formando el xml línea por línea, ¿es posible para ti compartir la función donde se pueda ver todo el proceso?. ¿puedes enviar esas líneas de error que mencionas?

1 me gusta

si mira estos son los errores que te comento cuando le quitan los datos de la tabla en este caso los de la “cuenta”, lo que me comentan es que en lugar de que salga todo eso que esta en el rectángulo negro solo aparezca un renglón en blanco o un texto que diga sin datos.