Add Word document to ABAP Program Documentation

Con la transacción SO72 podemos crear un doc. Word. De esta forma podemos agregar imágenes, tablas o cualquier cosa que querramos que funcione en Word.

  1. Seleccionar la clase de documento WORD
  2. Elegir el nombre del objecto y elegir Crear
  3. Se abrirá un Word embebido en SAP ahí ponemos lo que deseamos, podemos también pegar el contenido de un Word ya existente.
  4. Con el objeto ya creado despues tenemos que crear documentación (si nos aparece el Word editor, cambiar el editor para obtener el viejo de líneas) y agregar lo siguiente:

    <DS:WORD.NOMBRE_OBJETO>Texto del vínculo</>

De esta forma aparecerá el ícono en la pantalla de selección del programa y al abrirlo aparecerá la documentación con el hipervínculo como para ver la documentación.

Como usar BAPI_SALESORDER_SIMULATE

La BAPI BAPI_SALESORDER_SIMULATE nos permite simular pedidos de SD, es útil para por ejemplo hacer un carrito de compra para mostrar los montos sin haber creado ningún pedido o justamente como previsualización de algún proceso de generación de pedidos.

ORDER_HEADER_IN (posee los datos de cabecera)

  • DOC_TYPE (obligatorio)
  • SALES_ORG
  • DISTR_CHAN
  • DIVISION
  • PRICE_DATE
  • etc

ORDER_ITEMS_IN

Al menos un interlocutor con función “SO”

ORDER_ITEMS_IN

  • MATERIAL
  • TARGET_QTY (Importante multiplicar por 1000)
  • TARGET_QU
  • REQ_QTY
  • SALES_UNIT

En tablas ORDER_ITEMS_OUT y ORDER_CONDITION_EX podremos ver los montos de los resultados, impuestos, etc

Configurar destinos en SAP Cloud Platform para ser usados en WebApps Fiori

Primero se requiere tener instalado y configurado el Cloud Connector. Ver post Instalar y Configurar el Cloud Connector

Dentro del SCP ir a la sección Connectivity y primero verificaremos que el Cloud Connectors este conectado y funcionando correctamente
image

Si no vemos el image pueder por varios motivos:

  • El Servicio no está corriendo
  • Está mal configurado, revisar configuración en el Cloud Connector (https://localhost:8443/)

Si está bien pasamos a la sección Destinations y le damos a image

Y ponemos los datos correspondientes (La URL con el puerto debería ser la misma configurada en el servicio de Cloud Connector)
image

Como la idea es usar luego este destino en el SAP Web IDE debemos agregar las siguientes propiedades adicionales

WebIDEEnabled  true
WebIDESystem  <nombre del servidor de SAP>
WebIDEUsage    odata_abap,ui5_execute_abap,dev_abap,odata_gen

Con esto luego al utilizar el Wizard en el SAP Web IDE en el paso para elegir el OData podremos visualizar nuestro servidor y seleccionar el Servicio OData deseado.

image

Instalar y Configurar el Cloud Connector

Para comunicarse con un server on-premise en SCP es necesario instalar y configurar el Cloud Connector. Es un servicio que se instala y permite la comunicación entre un servidor on-premise y el SCP.

No hace falta instalarlo en el servidor propiamente dicho, se puede instalar en cualquier máquina, ya que asocia la cuenta y subcuenta del SCP.

  1. Bajamos el instalador desde https://tools.hana.ondemand.com/#cloud
  2. Se instala el ejecutable y ejecutamos el servicio el mismo se puede validar viendo los servicios de Windows (services.msc)
  3. Al finalizar la instalación debemos acceder a la url https://localhost:8443
  4. Por defecto debemos ingresar con el siguiente user
  5. User Name
    Administrator

    Password
    manage

  6. Inmediatamente nos pide cambiar la pass (recordarla porque dsp debemos acceder nuevamente si eventualmente se desconfigurara)
  7. Configurar la cuenta con la que trabajaremos en el SCP

    Región: La región que corresponde (si es la trial es hanatrial.ondemand.com)
    Subaccount Name: El ID que aparece en SCP sXXXXXXXXXXtrial
    Subaccount User: El user de logueo de SCP sXXXXXXXXXX
    Password: La pass del user de logueo de SCP

  8. Una vez condigurado podremos ver si estamos conectados OK
  9. Debemos configurar el destino on-premise y para eso vamos en el menú de la izq donde dice Cloud To On-Premise
    En Access Control daremos de alta el sistema
    image
    a. El Back-end Type, elegimos SAP Gateway
    b. El protocolo que corresponda (HTTP, HTTPS, etc)
    c. El host y el puerto
    d. None y luego tildamos el Check internal Host (para que haga un ping) y Finalizamos
  10. IMPORTANTE: Luego debemos seleccionar la entrada recien creada y debajo deberemos crear la entrada para los recursos del servidor que cargamos previamente.

    Tildar Enabled para activarlo y en URL Path poner / y muy importante elegir Path and subpaths del radio button porque sino no podremos utilizar luego esta entrada al crear una App Fiori con Templates
    image

    Si luego deseamos mostrar este servidor para ser usado en una Web App Fiori ver la entrada Configurar destinos en SAP Cloud Platform para ser usados en WebApps Fiori

Como ver la versión de SAPUI5 instalada en el servidor

Cuando se desarrollan App Fiori para ser deployadas en el repositorio ABAP (como BSPs) o sea en el servidor de SAP R/3 o S/4 HANA. Es muy importante al momento de generar un app de Fiori elegir la versión que corresponda a la de nuestro servidor ya que puede ser que no soporte algunos controles o características.

De querer hacer el deploy SAP Web IDE nos advertirá que la versión del servidor es más vieja y que puede atraer problemas.

image

Para evitar esto podemos ver la versión instalada en el servidor con alguno de estos dos métodos habiendo abriendo previamente  el Fiori Launchpad (transacción /UI2/FLP o :/sap/bc/ui5_ui5/ui2/ushell/shells/abap/FioriLaunchpad.html">http://<server>:<port>/sap/bc/ui5_ui5/ui2/ushell/shells/abap/FioriLaunchpad.html) o en una app fiori

  1. Presionando CRTL+ALT+SHIFT+P  nos aparecerá un popup donde podremos ver la versión

    image

  2. Desde la consola en la herramienta de desarrolladores (F12)

    ponemos sap.ui.version y enter

    image

De este modo sabremos con que versión estamos trabajando y esta es la versión que deberíamos respetar para que nuestra APP Fiori desarrollada sea 100% compatible.

SMW0–Como editar un template HTML de forma sencilla

Cuando queremos mandar un mail o un adjunto en formato HTML podemos utilizar la Transacción SMW0 junto con la función WWW_HTML_MERGER.

Esto nos permitirá reemplazar textos predefinidos en el HTML de forma sencilla y de esta forma evitar andar concatenando strings en el código fuente.

1- Debemos armar nuestro HTML template y a los textos que queremos reemplazar definirlos con una “variable” por ejemplo:

<HTML>
    <BODY>
    Fecha del día: !DATE!
    Usuario: !USER!
    </BODY>
< /HTML>

Yo personalmente elegí escribirlos en mayúsculas y entre signos de exclamación pero como reemplazaremos dichas cadenas, pueden estar definidas o también podemos reemplazar masívamente cualquier cadena de textos.

2- Lo subimos al servidor por medio de la transacción SMW0

image

Acá podemos crear nuevos templates o editar, actualizar, subir, bajar ya existentes. Lo importante es el nombre que definamos, ya que luego será usado.

image

3- Código Fuente

" Data Declarations
DATA: lt_merge_table  TYPE  swww_t_merge_table.
DATA: lt_html_table   TYPE  swww_t_html_table.
DATA: ls_merge_table  LIKE LINE OF lt_merge_table.
DATA: ls_html_table   LIKE LINE OF lt_html_table.
DATA: lv_html_string  TYPE string.

    REFRESH lt_html_table.

    " Remplace !DATE!  with value
    CLEAR ls_merge_table.
    ls_merge_table-name    = ‘!DATE!’.
    ls_merge_table-command = ‘R’.      "Replace
    lv_string              = sy-datum.
    APPEND lv_string TO ls_merge_table-html[].
    APPEND ls_merge_table TO lt_merge_table.
       
    " Remplace !USER!  with value
    CLEAR ls_merge_table.
    ls_merge_table-name    = ‘!USER!’.
    ls_merge_table-command = ‘R’.      "Replace
    lv_string              = sy-uname.
    APPEND lv_string TO ls_merge_table-html[].
    APPEND ls_merge_table TO lt_merge_table.

    " Call the HTML MERGE function
    CALL FUNCTION ‘WWW_HTML_MERGER’
      EXPORTING
         template    = ‘ZTEMPLATE_MAIL’ "Valor definido en transacción SMW0
      IMPORTING
        html_table  = lt_html_table[]
      CHANGING
        merge_table = lt_merge_table[].

    LOOP AT lt_html_table INTO ls_html_table.
      lv_html_string = lv_html_string && ls_html_table-line.
    ENDLOOP.

Tendremos como resultado el código html subido al servidor en string con los valores que nosotros definidos reemplazados.

STF4_GET_DOMAIN_VALUE_TEXT–Descripción de un valor de Dominio

Con la Función DDIF_DOMA_GET podemos ver los valores fijos posibles que puede tener un dominio, pero si queremos saber la descripción de un valor directamente sin tener que traer todos los valores podemos usar la función ‘STF4_GET_DOMAIN_VALUE_TEXT’

Recibe como parámetros el Dominio del que deseamos saber la descripción junto con el valor

CALL FUNCTION ‘STF4_GET_DOMAIN_VALUE_TEXT’
EXPORTING
  iv_domname      = ‘ZADTEL00007M’  " The name of the domain with fixed values
  iv_value        = ls_tarea-zzdr_tipo     " Value of Domain 
IMPORTING
  ev_value_text   = lv_value                " Resulting short text for fixed value
EXCEPTIONS
   value_not_found = 1
   others          = 2.

SMUM_XML_PARSE – XML a Tabla Interna

Mientras tengamos el archivo XML en formato string o xstring podremos convertirlo a una tabla interna.

En el caso que lo tengamos en formato string previamente deberemos convertirlo a xstring.

DATA : wa_xmldata       TYPE string,
wa_xmldata_bin TYPE xstring.

DATA: result_xml    TYPE STANDARD TABLE OF smum_xmltb .
DATA: return          TYPE STANDARD TABLE OF bapiret2.

* Convert string to Xstring format
CALL FUNCTION ‘SCMS_STRING_TO_XSTRING’
EXPORTING
text   = wa_xmldata          ” variable type string
IMPORTING
buffer = wa_xmldata_bin.  ” variable type xstring

* Convert Xstring XML to Internal Table
CALL FUNCTION ‘SMUM_XML_PARSE’
EXPORTING
xml_input = wa_xmldata_bin
TABLES
xml_table = result_xml
return      = return.

El resultado es una tabla interna con este formato

image

Donde:

  • HIER: Nivel en el árbol
  • TYPE: Tipo de nodo ( vacío = solo tag, V = que tiene un valor, etc)
  • CNAME: Nombre del nodo
  • CVALUE: Valor que contiene el nodo.

BAPI_ALM_NOTIF_CREATE / BAPI_ALM_NOTIF_DATA_MODIFY– Actualizar campo Duración de Parada (Breakdown duration)

Si necesitamos crear un aviso con la BAPI BAPI_ALM_NOTIF_CREATE o modificarlo vía BAPI_ALM_NOTIF_DATA_MODIFY.

Y debemos actualizar el campo “duración de parada” (Breakdown Duration) deberemos seguir las intrucciones de la nota 

1619709 – Notification breakdown duration not populated by BAPI call

Es una nota informativa, explicando que la funcionalidad no está en dichas BAPIs, por lo cual deberemos implementar la BADI NOTIF_EVENT_SAVE.

method IF_EX_NOTIF_EVENT_SAVE~CHANGE_DATA_AT_SAVE.
IF CS_VIQMEL-AUSZT is initial.
*   Only execute if breakdown time is not already set
     IF ( CS_VIQMEL-MSAUS = 'X' ) AND ( CS_VIQMEL-AUSVN <> 0 ) AND ( CS_VIQMEL-AUSBS >= CS_VIQMEL-AUSVN ).
*       Only if breakdown indicator is set, valid start date, end date not less than start date
        CS_VIQMEL-AUSZT = ( CS_VIQMEL-AUSBS - CS_VIQMEL-AUSVN ) * 24 * 60 * 60.
        CS_VIQMEL-AUSZT = CS_VIQMEL-AUSZT
                  + ( CS_VIQMEL-AUZTB - CS_VIQMEL-AUZTV ).
    ENDIF.
ENDIF.

endmethod.

image