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.
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.
1.1 Haga clic en el administrador completo y vaya a la pestaña Tipos de dispositivos y haga clic en mostrar.
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.
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.
1.4 Nuestro primer paso se completa aquí.
2.1 Vaya a tcode SE73 y cree un nuevo código de barras.
2.2 Crear un nuevo código de barras.
2.3 Utilice la siguiente configuración para crear el 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.
2.5 Ejecutar el informe con cualquier texto.
2.6 ¡Tada! Nuestro código QR está listo.
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.
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.
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! 🕺🕺🕺
4.4 Escanea el código QR y te llevará a gustar para leer otro blog de oData.
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.
5.2 A continuación se muestra el fragmento del código. Estamos realizando las siguientes actividades en el código:
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.
6.1 Esta tabla almacenará la información de los datos y también se utilizará al crear el servicio 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.
7.3 Recuerde marcar la casilla de verificación «Medios».
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.
8.1 Registre su servicio de oData.
8.2 Una vez registrado, vamos a ver si se cargan los 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
8.4 Ejecutemos otro caso.
/sap/opu/odata/sap/ZSHOW_QRINFO_SRV/QR_DetailSet('0002')/$value
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
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073