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

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
confirm  ·  function module  ·  popup  ·  POPUP_TO_CONFIRM  ·  Technical Articles

Anatomía de un módulo de función: POPUP_TO_CONFIRM – Parte 4

By s4pcademy 



“…neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit…”
¹

Hemos llegado a la última parte de la serie. En este último capítulo:

Historia 5: Mostrar una lista con viñetas en el texto

Ahora que aprendimos cómo mostrar oraciones que comienzan en nuevas líneas en el anterior capítulo, usemos esto para un escenario como mostrar texto con una lista con viñetas.

Si hace clic en Sí, se realizarán los siguientes pasos:

  • Comprobar estado incompleto
  • Verifica los datos
  • Actualizar el documento
  • Registrar los errores

📄 Código ABAP:

*--------------------------------------------------------------------*
* Anatomy of a Function Module: POPUP_TO_CONFIRM - Part 4
*
* Story 5: Displaying a Bulleted List in Text
*--------------------------------------------------------------------*

REPORT sy-repid.

CONSTANTS: newline VALUE cl_abap_char_utilities=>newline,
           maxlen  TYPE i VALUE 57.

DATA: question  TYPE string,
      answer(1).

question &&=:
  |If you click Yes, the following steps will be performed:| , newline,
  |• Check incompleteness|                                   , newline,
  |• Verify the data|                                        , newline,
  |• Update the document|                                    , newline,
  |• Log the errors|                                         , newline.

SPLIT question AT newline INTO TABLE DATA(segments).
CLEAR question.

LOOP AT segments ASSIGNING FIELD-SYMBOL(<segment>).
  DO COND #( WHEN strlen( <segment> ) EQ maxlen THEN 1 ELSE ( maxlen - strlen( <segment> ) ) ) TIMES.
    <segment> &&= | |.
  ENDDO.
  question &&= <segment>.
ENDLOOP.

question &&= newline.

CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    text_question       = question
    userdefined_f1_help = '_' 
  IMPORTING
    answer              = answer
  EXCEPTIONS
    OTHERS              = 2.

🖥️ Salida:

Sistema 1: altura de línea: 1,75 em

Sistema 2: altura de línea: 34px

En este ejemplo, activé el botón Información para ampliar la ventana emergente. Si las oraciones se ajustan a 48 caracteres, entonces no es necesario.

⚠️ El único efecto secundario de mostrar el botón de información al configurar el parámetro USER_DEFINED_F1_HELP con un valor que no existe es que se muestra el siguiente mensaje cuando el usuario hace clic en ese botón.

No hay documentación definida por el usuario disponible

↑ Arriba

Historia 6: Mostrar texto más largo usando un objeto de documento

Mencioné el objeto del documento. ARBFND_DETAILED_LONGTEXT en el primero parte de esta serie. Ahora es el momento de usarlo.

⚠️ Tenga en cuenta que es posible que el objeto del documento no esté disponible en todos los sistemas.

Primero, echemos un vistazo a si este objeto existe y qué contiene. Para hacer esto, siga los pasos a continuación.

  1. Transacción de lanzamiento SE61.
  2. Elija Texto de diálogo en el campo Clase de documento.
  3. Ingresar ARBFND_DETAILED_LONGTEXT en el campo de entrada Texto de diálogo.
  4. Haga clic en Mostrar

Transacción SE61

Contenido del documento

Como puede ver, el objeto del documento contiene 70 marcadores de posición. Cada marcador de posición puede contener 75 caracteres. Podemos llenar estos marcadores de posición llenando el PARAMETER parámetro.

Intentemos mostrar el texto a continuación:

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo voluptas nulla pariatur? ¹

Dividiré el texto en segmentos de 75 caracteres y luego completaré la tabla de parámetros. Finalmente, llamaré a la función con el DIAGNOSE_OBJECT parámetro y el PARAMETER mesa.

ℹ️ No necesitamos usar el TEXT_QUESTION parámetro en esta historia, ya que mostraremos el texto largo usando los parámetros anteriores. En realidad, no deberíamos porque no hay nada que enviar con él.

📄 Código ABAP:

*--------------------------------------------------------------------*
* Anatomy of a Function Module: POPUP_TO_CONFIRM - Part 4
*
* Story 6: Displaying Longer Text Using a Document Object
*--------------------------------------------------------------------*

REPORT sy-repid.

*--------------------------------------------------------------------*
* DATA
*--------------------------------------------------------------------*
CONSTANTS: number_of_placeholders   TYPE i VALUE 70,
           width_of_parameter_value TYPE i VALUE 75.

DATA: text   TYPE string,
      values TYPE TABLE OF spo_val,
      params TYPE TABLE OF spar,
      answer TYPE char1.

*--------------------------------------------------------------------*
* Build a long text.
*--------------------------------------------------------------------*
  text &&=:
    `Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium`,
    ` doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventor`,
    `e veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo en`,
    `im ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed `,
    `quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt,`,
    ` neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consect`,
    `etur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut l`,
    `abore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam`,
    `, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut a`,
    `liquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qu`,
    `i in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, `,
    `qui dolorem eum fugiat, quo voluptas nulla pariatur?`.

*--------------------------------------------------------------------*
* Split the text and fill the VALUES internal table.
*--------------------------------------------------------------------*
DATA(textlen) = strlen( text ).
DATA(to_be_copied) = 0.
DATA(copied) = 0. "75, 150, 225, ...

WHILE copied LT textlen.
  to_be_copied = COND #( WHEN copied + width_of_parameter_value LT textlen
                         THEN width_of_parameter_value
                         ELSE textlen - copied ).
  APPEND CONV spo_val( text+copied(to_be_copied) ) TO values.
  copied += to_be_copied.
ENDWHILE.

*--------------------------------------------------------------------*
* Fill the PARAMS internal table.
*--------------------------------------------------------------------*
DATA(number_of_used_placeholders) = lines( values ).
DATA(index_of_unused_placeholder) = 0.

* Move values to placeholders and add them to the PARAMS internal table.
* ARBFND_DETAILED_LONGTEXT has 70 placeholders (&VAR0000001&..&VAR0000070&).
LOOP AT values ASSIGNING FIELD-SYMBOL(<value>).
  APPEND VALUE spar( param = 'VAR' && CONV numc7( sy-tabix )
                     value = <value> ) TO params.
ENDLOOP.

* Set unused parameters (placeholders) to empty.
index_of_unused_placeholder = number_of_used_placeholders.
DO ( number_of_placeholders - number_of_used_placeholders ) TIMES.
  index_of_unused_placeholder += 1.
  APPEND VALUE spar( param = 'VAR' && CONV numc7( index_of_unused_placeholder )
                     value = space ) TO params.
ENDDO.

*--------------------------------------------------------------------*
* Call the function with the DIAGNOSE_OBJECT and the PARAMETER.
* Set the TEXT_QUESTION to space as we don't need it.
*--------------------------------------------------------------------*
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    diagnose_object="ARBFND_DETAILED_LONGTEXT"
    text_question       = space
   "userdefined_f1_help = '.'
  IMPORTING
    answer              = answer
  TABLES
    parameter           = params
  EXCEPTIONS
    OTHERS              = 2.

🖥️ Salida:

Sin%20usar%20USERDEFINED_F1_HELP

Sin usar el parámetro USERDEFINED_F1_HELP

Usando%20USERDEFINED_F1_HELP

Usando el parámetro USERDEFINED_F1_HELP

📄 Texto que se muestra en la ventana emergente:

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem acusantiumdoloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sedquía consequuntur magni dolores eos, qui ratione voluptatem sequi nesciente,neque porro quisquam est, q etur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel iluminar,qui dolorem eum fugiat, qu

Cuando comparamos el texto con la versión original, vemos los siguientes cambios:

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem acusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quía consequuntur magni dolores eos, qui ratione voluptatem sequi nesciente, neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel iluminar, qui dolorem eum fugiat, quo voluptas nulla pariatur?

⚠️ Hay 2 problemas con la salida:

Problema Solución

Cuando el último carácter de un segmento no es un espacio, la última palabra del segmento y la primera palabra del segmento siguiente se mantienen juntas porque tampoco hay espacios entre los marcadores de posición. 🤦

P.ej acusantiumdoloremque

Se puede crear un objeto de documento personalizado e insertar un espacio entre los marcadores de posición para resolver este problema.

O podemos intentar trasladar la primera palabra que provoca que “por qué nos mantenemos juntos” al siguiente marcador de posición.

Después de que la función reemplace los marcadores de posición con valores, hay otro paso que divide todo el texto en segmentos para completar las tablas HTML más adelante. (Para obtener más información sobre la lógica, consulte el primero capítulo).

En este paso, solo se transfieren 400 caracteres a la vez en el bucle de división de texto. Llamemos a esto ‘bloque’. Esta lógica hace que las palabras que excedan el límite no se agreguen al final del bloque. Y sigue añadiendo los siguientes segmentos. Esto provoca pérdida de datos en cada bloque de 400 caracteres.🤷

Por ejemplo, qui dolorem ipsum, quia dolor sit, amet, consectetur

El segundo problema requiere análisis porque hay algo raro en la función.

Para el análisis de este problema, puede echar un vistazo a la siguiente tabla.

Como puede ver allí, cuando se completan los bloques de 400 caracteres que se llenan al combinar segmentos de 75 caracteres, los últimos 25 caracteres se ignoran cada vez.

# Valor para marcador de posición Len Bloquear
1 Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium 75 1
2 doloremquelaudantium, totam rem aperiam eaque ipsa, quae ab illo inventor 74
3 e veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo es 75
4 im ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed 74
5 quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, 75
6 neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consect 75
7 etur, adipisci velit, sed quia non numquam eius modi tempora incidente, ut l 75 2
8 abore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam 75
9 quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut a 75
10 líquido ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qu 75
11 i in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, 75
12 qui dolorem eum fugiat, quo voluptas nulla pariatur? 52

🧮 Esta es la fórmula general: 400 caracteres – (75 caracteres x 5 segmentos) = 25 caracteres (para omitir)

↑ Arriba

Conclusión

En esta publicación de blog, ha aprendido cómo mostrar texto que contiene listas con viñetas y mostrar texto más largo mediante el uso de objetos de documento.

Sin embargo, no hay ningún objeto de documento adecuado que podamos usar para mostrar texto largo dinámico. Al menos yo no pude encontrar ninguno. Incluso si podemos crear uno personalizado, parece que necesitamos escribir lógica adicional para controlar la manipulación del texto.

Por supuesto, esto sucede cuando queremos mostrar texto de más de 400 caracteres.

¿Próximo paso?

La fogata todavía está caliente. Una gran oportunidad para un buen sueño. O puedes echar un vistazo a la RSSPO120 programa estándar para POPUP_TO_CONFIRM ejemplos de uso

↑ Arriba

Más recursos

  • Para obtener más recursos sobre el desarrollo ABAP, puede visitar la página del tema Desarrollo ABAP aquíhaga una pregunta o siga el blog de desarrollo ABAP aquí.
  • Por favor, siga mi perfil para futuras publicaciones y siéntase libre de compartir sus comentarios o pensamientos en un comentario.
Notas finales

  • ¹ Marcus Tullius Cicero, De Finibus Bonorum et Malorum, 45 a. C., Liber Primus 1.10.32

Marcas registradas

  • SAP®, ABAP® son marcas comerciales o marcas comerciales registradas de SAP SE o sus filiales en Alemania y en otros países.

Descargo de responsabilidad

  • Todo el código fuente disponible en esta publicación de blog se proporciona «tal cual» sin garantía de ningún tipo, y cualquier uso de dicho código fuente es bajo su propio riesgo.



Source link


AnatomíafunciónmódulopartePOPUP_TO_CONFIRM

Artículos relacionados


Technical Articles
Implemente un módulo Node.js (sin compatibilidad con xsjs) para completar con artefactos HANA DB en HANA XSA
#DPP  ·  #GDPR  ·  AuditLogs  ·  dataprivacy  ·  DataProtection  ·  PersonalDataManager  ·  Technical Articles
#SAPCAP: gane la confianza del cliente utilizando los servicios de privacidad y protección de datos en BTP – Parte 3
Intelligent Selling Services  ·  merchandising  ·  Product Information
Optimice los resultados de merchandising con servicios de venta inteligente para SAP Commerce (parte 2)

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

SweetNotification: un widget personalizado para SAP Analytics Cloud Cool Notification
Previo
SAP Build Process Automation: consuma API de S/4 HANA On-Prem a través de RAP BTP ABAP o BTP CAP
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.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar