• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

Genera código QR dinámico a partir de oDATA

By s4pcademy 


Introducción

Los códigos QR (Quick Response) son códigos de barras bidimensionales que se utilizan ampliamente para almacenar y compartir información. Son particularmente útiles porque se pueden leer rápida y fácilmente con un teléfono inteligente u otro dispositivo equipado con una cámara y una aplicación de lectura de códigos QR.

Si podemos agregar un código QR a nuestra llamada de aplicación/oData, puede abrir una amplia área de campos para la implementación.

Procedimiento paso a paso:

1. Crear un formato de página a partir del tamaño QR: Si no creamos un formato de página, el QR se mostrará en toda la página de tamaño A4 y se dejará mucho espacio vacío. Use tcode SPAD para crear.

2. Crear un código de barras: Usaremos SE73 para crear un código de barras.

3. Crear un estilo inteligente: para crear un formato de caracteres para QR.

4. Cree un formulario inteligente: para mostrar el

5. Crear una clase: Para convertir texto a xstring. Este xstring se pasará a la llamada oData.

6. Creación de tablas: cree una tabla para almacenar los datos que se mostrarán en forma de código QR a través de oData.

7. Crear servicio de oData: Finalmente, crearemos un servicio de oData.

8. Publique y pruebe el servicio Odata.

Comencemos el desarrollo ahora en los pasos mencionados anteriormente.

PASO 1: Crear un formato de página: Ir a tcode SPAD.

1.1 Haga clic en el administrador completo y vaya a la pestaña Tipos de dispositivos y haga clic en mostrar.

Imagen%201-%20SPAD%20aterrizaje%20pantalla

Imagen 1- Pantalla de inicio de SPAD

Imagen%202-%20SPAD%20Página%20Formato

Imagen 2- Formato de página SPAD

1.2 Haga clic en el botón del lápiz para pasar al modo de cambio y luego haga clic en Crear para crear un nuevo formato de página.

Imagen%203-%20Crear%20Página%20Formato

Imagen 3- Crear formato de página

1.3 Guarde el formato de página con la siguiente configuración. Una cosa a tener en cuenta es que, según los datos, el código QR puede aumentar un poco su tamaño, ya que tiene que contener más datos. Juega y cambia estos ajustes según sea necesario.

Imagen%204-%20Guardar%20Página%20Formato

Imagen 4- Guardar formato de página

1.4 Nuestro primer paso se completa aquí.

PASO 2: Crea un código de barras.

2.1 Vaya a tcode SE73 y cree un nuevo código de barras.

Imagen%205%20-%20SE73

Imagen 5 – SE73

2.2 Crear un nuevo código de barras.

Imagen%206%20-%20Nuevo%20Código de barras

Imagen 6 – Nuevo código de barras

2.3 Utilice la siguiente configuración para crear el código de barras.

Imagen%207%20-%20Nuevo%20Código de barras%20Configuración

Imagen 7 – Nueva configuración de código de barras

Imagen%208%20-%20Nuevo%20Código de barras%20Configuración

Imagen 8 – Nueva configuración de código de barras

Imagen%209%20-%20Nuevo%20Código de barras%20Configuración

Imagen 9 – Nueva configuración de código de barras

Imagen%2010%20-%20Nuevo%20Código de barras%20Configuración

Imagen 10 – Nueva configuración de código de barras

2.4 Se crea el código QR. Ahora es el momento de probar el código QR. Coloque el cursor en el nuevo código de barras, en nuestro caso es ZQRDISP, y presione F6 (ejecutar código de barras). Supongo que todos estamos emocionados de ver el código QR en este desarrollo por primera vez.

Imagen%2011%20-%20Prueba%20Código de barras%20De%20SE73

Imagen 11 – Código de barras de prueba de SE73

2.5 Ejecutar el informe con cualquier texto.

Imagen%2012%20-%20Ejecutar%20Informe

Imagen 12 – Ejecutar Informe

2.6 ¡Tada! Nuestro código QR está listo.

Imagen%2013%20-%20QR%20Código%20de%20SE73

Imagen 13 – Código QR de SE73

PASO 3: Crear estilo inteligente

Vamos a crear un estilo inteligente en la parte superior del código de barras creado.

3.1 Cree un estilo inteligente con formato de caracteres como el código de barras creado. Además, cree un párrafo predeterminado para agregar a los datos del encabezado.

Imagen%2014%20-%20Smartstyles

Imagen 14 – Smartstyles

PASO 4: Crear formulario inteligente

Pasemos a crear un formulario inteligente.

4.1 Este formulario inteligente tendrá un parámetro de entrada de tipo cadena y le pasaremos este parámetro al elemento de texto para que se muestre como un código QR. Agregue smartsytle creado recientemente a través de la pestaña de opciones de salida del elemento de texto.

Imagen%2015%20-%20Smartform

Imagen 15 – Smartform

4.2 Guárdelo y actívelo.

4.3 Es hora de ejecutar el formulario inteligente, veamos cómo se ve el resultado. Pase cualquier texto al campo de entrada. ¡Voila, tenemos un código QR! 🕺🕺🕺

Imagen%2016%20-%20Smartform%20Salida

Imagen 16 – Salida Smartform

4.4 Escanea el código QR y te llevará a gustar para leer otro blog de oData.

PASO 5: Crear Clase

5.1 Cree una clase que tome una cadena como entrada. Tomará esa cadena y la pasará a smartform, generará el QR a partir de ella y, finalmente, el QR se convertirá a pdf xstring. Como oData no puede procesar imágenes directamente, lo estamos convirtiendo a xstring.

Imagen%2017%20-%20Clase

Imagen 17 – Clase

5.2 A continuación se muestra el fragmento del código. Estamos realizando las siguientes actividades en el código:

  • Obtenga el tipo de dispositivo.
  • Establezca las opciones de salida relevantes del formulario inteligente.
  • Llame a formulario inteligente.
  • Convierta la salida del formulario inteligente a formato OTF.
  • Devuelva el xstring OTF como parámetro de retorno.
  METHOD display.

    DATA :
      lv_fm_name            TYPE rs38l_fnam,
      ls_output_options     TYPE ssfcompop,
      lv_language           TYPE tdspras,
      ls_control_parameters TYPE ssfctrlop,
      ls_output_data        TYPE ssfcrescl,
      lv_pdf_len            TYPE i,
      lv_pdf_xstring        TYPE xstring,
      lt_lines              TYPE TABLE OF tline,
      lv_devtype            TYPE rspoptype,
      lt_tstotf             TYPE tsfotf.

* language
    lv_language = sy-langu.
    TRANSLATE lv_language TO UPPER CASE.
    ls_control_parameters-langu = lv_language.

* set control parameters to get the output text format (OTF) from Smart Forms
    ls_control_parameters-no_dialog = 'X'.
    ls_control_parameters-getotf="X".
    ls_control_parameters-preview   = space. "No preview

* get device type from language
    CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
      EXPORTING
        i_language             = lv_language
*       i_application          = 'SAPDEFAULT'
      IMPORTING
        e_devtype              = lv_devtype
      EXCEPTIONS
        no_language            = 1
        language_not_installed = 2
        no_devtype_found       = 3
        system_error           = 4
        OTHERS                 = 5.

* set device type in output options
    ls_output_options-tdprinter = lv_devtype.

* Set relevant output options
    ls_output_options-tdnewid  = 'X'.   "Print parameters,
    ls_output_options-tddelete = space. "Print parameters

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname="ZQRDISPLAY"  "Smartform name
      IMPORTING
        fm_name            = lv_fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.

* Call Smartform generated FM
    CALL FUNCTION lv_fm_name
      EXPORTING
        control_parameters = ls_control_parameters
        output_options     = ls_output_options
        user_settings      = space
        gv_text            = iv_barcode_data
      IMPORTING
        job_output_info    = ls_output_data
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.

    APPEND LINES OF ls_output_data-otfdata[] TO lt_tstotf[].

* Convert to OTF
    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format="PDF"
      IMPORTING
        bin_filesize          = lv_pdf_len
        bin_file              = lv_pdf_xstring       " binary file
      TABLES
        otf                   = lt_tstotf
        lines                 = lt_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.

    IF sy-subrc = 0.
      rv_image_data = lv_pdf_xstring.
    ENDIF.

  ENDMETHOD.

PASO 6: Crear una tabla

6.1 Esta tabla almacenará la información de los datos y también se utilizará al crear el servicio oData.

Imagen%2018%20-%20Tabla

Imagen 18 – Mesa

PASO 7: Cree un servicio de oData

7.1 Finalmente llegamos al paso donde crearemos el servicio oData. Si es su primer servicio de oData, le recomendaría visitar Un proceso paso a paso para crear servicios Odata.

7.2 Una vez creado el servicio oData, importe la tabla creada.

Imagen%2019%20-%20oDatos%20Servicio

Imagen 19 – Servicio oData

7.3 Recuerde marcar la casilla de verificación «Medios».

Imagen%2020%20-%20oDatos%20Medios%20Comprobar

Imagen 20 – Verificación de medios oData

7.4 Ahora estamos listos para generar el servicio oData. Una vez que se genera oData, vaya a la clase de extensión DPC y redefina el método /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM.

  METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream.

    DATA:
      lt_keys     TYPE /iwbep/t_mgw_tech_pairs,
      ls_key      TYPE /iwbep/s_mgw_tech_pair,
      lv_customer TYPE s_customer,
      lv_xstring  TYPE xstring,
      ls_stream   TYPE ty_s_media_resource.

    lt_keys = io_tech_request_context->get_keys( ).

* docno is the specified key
    READ TABLE lt_keys WITH KEY name="DOCNO" INTO ls_key.
    IF sy-subrc IS INITIAL.

* We will convert field LINK as QR code
      SELECT SINGLE link FROM zstoreqrdetails INTO @DATA(lv_link)
      WHERE docno = @ls_key-value.

* Method display of Class zcl_qrcode will convert the data to QR to xstring
      lv_xstring = zcl_qrcode=>display( iv_barcode_data = lv_link ).

      ls_stream-value = lv_xstring.

      ls_stream-mime_type="application/pdf".

* Pass the QR's xstrinh back to oData
      copy_data_to_ref( EXPORTING is_data = ls_stream
                        CHANGING  cr_data = er_stream ).

    ENDIF.

  ENDMETHOD.

7.5 En este paso iremos a la clase de extensión MPC y redefiniremos el método DEFINE.

  METHOD define.

    DATA:
      lo_entity   TYPE REF TO /iwbep/if_mgw_odata_entity_typ,
      lo_property TYPE REF TO /iwbep/if_mgw_odata_property.

    super->define( ).

* QR_Detail is the entity name
    lo_entity = model->get_entity_type( iv_entity_name="QR_Detail" ).

    IF lo_entity IS BOUND.
* Field Link will be converted to media
      lo_property = lo_entity->get_property( iv_property_name="Link" ).
      lo_property->set_as_content_type( ).
    ENDIF.

  ENDMETHOD.

7.6 Eso es todo. Hemos terminado con el desarrollo. En el siguiente paso, lo probaremos.

PASO 8: Prueba

8.1 Registre su servicio de oData.

8.2 Una vez registrado, vamos a ver si se cargan los metadatos.

Imagen%2021%20-%20Metadatos

Imagen 21 – Metadatos

8.3 Chicos, abran sus escáneres QR ya que ahora los vamos a obtener. Ejecute la siguiente URL y obtendremos el código QR como salida.

/sap/opu/odata/sap/ZSHOW_QRINFO_SRV/QR_DetailSet('0001')/$value

Imagen%2022%20-%20Prueba1

Imagen 22 – Prueba1

8.4 Ejecutemos otro caso.

/sap/opu/odata/sap/ZSHOW_QRINFO_SRV/QR_DetailSet('0002')/$value

Imagen%2023%20-%20Prueba2

Imagen 23 – Prueba2

Conclusión

A medida que llegamos al final de esta publicación, espero que tenga una mejor comprensión de cómo mostrar códigos QR a través de una llamada oData.

Espero que haya encontrado útil la información y que le haya proporcionado algunas ideas valiosas. Si tiene alguna idea o pregunta sobre el tema, no dude en dejar un comentario a continuación. Me encantaría saber de usted.

Si encuentra útil esta publicación, compártala con su red 🙂

Gracias,

Nitin Sharma




Cómo ejecutar un procedimiento almacenado de HANA en SAP Data Warehouse Cloud desde SAP Analytics Cloud
Previo
Evaluación de descubrimiento digital: la decisión guiada entre SAP S/4HANA Public o Private Cloud Edition.
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.