Quantcast
Channel: SAP Netweaver archivos - Blog de SAP: Actualidad SAP, Business Intelligence, SAP HCM, Abap...
Viewing all 72 articles
Browse latest View live

SAP Fiori UX: Tipos de aplicaciones

$
0
0

En anteriores artículos conocimos un poco más sobre qué es SAP Fiori UX y los componentes necesarios para montar su arquitectura. En esta ocasión, vamos a conocer qué tipos de aplicaciones SAP Fiori UX existen a día de hoy y cuáles son sus características principales.

Mediante el launchpad se pueden publicar tres tipos de aplicaciones SAP Fiori UX:

1. Transactional Applications

Las aplicaciones transaccionales SAP Fiori UX son aplicaciones para los empleados, para los responsables, etc. Cada una de estas aplicaciones transaccionales requiere de la instalación de un Add-On específico en el sistema.

SAP Fiori UX - Aplicaciones transaccionales

Es el único tipo de aplicación SAP Fiori UX que no está necesariamente ligado a SAP HANA, sino que soporta cualquier otro tipo de Base de Datos en la que tengamos nuestro sistema.

2. Fact Sheets

Este tipo de aplicaciones SAP Fiori UX permite al usuario, tal y como dice SAP, navegar por la información en diferentes capas. Podemos quedarnos en información global a un nivel contextual, luego acceder a unos pocos detalles y si lo queremos, navegar hasta lo más profundo del dato y acceder a toda la información relacionada con él.

SAP Fiori UX: Fact Sheets

Requiere sí o sí  de SAP HANA. Se necesita no sólo SAP HANA a nivel de Base de Datos, sino el SAP Web Dispatcher que veíamos en nuestro artículo sobre arquitecura.

3. Analytical Applications

A veces llamadas Smart Business Applications, por lo que la documentación de SAP a veces (una vez más) puede llegar a ser confusa en este aspecto ya que se refieren con estos dos nombres indistintamente a lo mismo.

Las aplicaciones analíticas SAP Fiori UX requieren SAP HANA con una Arquitectura 2-Tier usando Modelos Virtuales (VDM) y las aplicaciones vienen incluidas como paquetes en cada componente de SAP (ERP, CRM…)

Así que ya sabéis, familiarizaros con los diferentes tipos de aplicaciones SAP Fiori UX: Transactional Applications, Fact Sheets y Analitical Applications


SAP PI/XI: Transportes entre diferentes versiones

$
0
0

No es nada raro que una vez que se dispone de un escenario SAP PI en funcionamiento, se quiera transportar a otro sistema diferente propio de la misma organización o de otra organización distinta.

En este artículo, vamos explicar cuestiones relativas a la compatibilidad de versiones, que hay que tener en cuenta a la hora de llevar a cabo un transporte en SAP PI/XI.

En este tipo de escenarios SAP PI/XI en los que se ponen en marcha aplicaciones que requieren comunicación entre diferentes sistemas, es necesario crear interfaces y mapeos (entre otras cosas) para permitir la integración entre estos diversos sistemas.

Estas interfaces, mappings y objetos se registran en el ESR (Enterprise Services Repository) y es el contenido de este el que hay que exportar e importar en el nuevo sistema para poder configurar posteriormente las comunicaciones en el Integration Directory.

Transportes automáticos en SAP PI/XI

Estos transportes pueden ser, por diferentes razones y/o circunstancias hacia versiones posteriores o hacia versiones anteriores. Sin embargo, realizar un transporte en SAP PI/XI no es siempre automático.

En la siguiente tabla se representan las combinaciones de versiones de SAP Netweaver para los que es posible llevar a cabo el transporte de manera automática:

SAP PI/XI: Transportes automáticos

Periodos desfasados en SAP HCM

$
0
0

Últimamente se está volviendo a hablar sobre los periodos desfasados en SAP HCM, una funcionalidad que aunque exista en SAP desde hace mucho tiempo, para muchos es aún desconocida. Pero,  ¿qué es exactamente el “periodo desfasado”? ¿Necesito activarlo yo?

La necesidad del periodo desfasado viene de una carencia en el proceso de la nómina habitual:

Supongamos que se realiza un proceso normal para el cálculo de la nómina de Enero. Una vez cerrado el registro de gestión y contabilizadas las nóminas se detectan incidencias en el mes de enero que tienen efectos en la nómina. Estas incidencias provocarán que al ejecutar la nómina en Febrero se realice una retroactividad con los datos de Enero correctos y las diferencias en los pagos. En el siguiente diagrama se puede ver un esquema del proceso:

SAP HCM - Periodos desfasados

La duda viene cuando generamos los ficheros FAN o dentro de unos meses los ficheros de bases de Cret@. ¿Cuál de los dos resultados tenemos que recoger?

    • Resultados de Enero calculados en Febrero: Tiene sentido que sean estos los resultados que se deben seleccionar para el envío del TC, ya que  son los resultados correctos. Pero si se envían en el TC estos resultados, sin activar los periodos desfasados, se corre el riesgo de que los resultados sean sobrescritos.  Como el registro de gestión de Febrero todavía no está cerrado, es posible volver a ejecutar el cálculo 01 en 02 y en caso de diferencias los datos usados para el TC se sobrescribirían y se generarían inconsistencias. ¿Cómo calcular una complementaría si han desaparecido los importes que se usaron para el TC?
    • Resultados de Enero calculados en Enero: Si entregamos el fichero FAN con estos resultados no se crearán inconsistencias en la base de datos, pero se pagarán recargos a la Seguridad Social . ¿Tiene sentido pagar recargos por no entregar una información correcta, a pesar de que se fuese ya consciente del error? Además con la entrada de Cret@ los empleados deberán ser consolidados con la información de la Seguridad Social, por lo que esta opción quedaría descartada.

El proceso habitual, nos obliga a retrasar el máximo posible el cierre de nómina del mes o a pagar recargos. Al usar los periodos desfasados, se podrán seleccionar los resultados de Enero calculados en Febrero sin miedo a que estos resultados sean sobrescritos. Bueno, esto no es 100% verdad, los resultados de nómina se sobrescribirán, pero el sistema hará una copia antes en el cluster PCL4 de los resultados usados para los TCs. De esta forma se tendrá la información necesaria para calcular los TCs complementarios en caso de que sea necesario y nos evitaremos la mayor parte de los recargos a la Seguridad Social.

En conclusión, activar la funcionalidad de los periodos desfasados te permitirá disminuir los recargos a la Seguridad Social. El proceso es sencillo y se realiza de forma casi transparente al usuario. Por lo tanto es recomendable que si usas SAP HCM, actives los periodos desfasados: disminuirás los recargos de los ficheros FAN y estarás preparado para cuando entre Cret@.

SAP HCM – Dependencia temporal en tablas

$
0
0

En ocasiones, al acceder a la transacción SM30, vemos que en función de la tabla/vista que queramos actualizar se muestran las opciones ‘Limitar‘ y ‘Desglosar <-> Ocultar‘, que otras veces no aparecen. ¿A qué se debe que se muestren o no estos botones? La respuesta es, a si los registros de la tabla son dependientes de fechas o no.

En SAP HCM por ejemplo, hay muchas tablas estándar que condicionan su contenido a los campos BEGDA (Inicio de la validez) y ENDDA (Fin de la validez), por lo que en la vista de actualización de dichas tablas, la función de limitar aparece habilitada.

Dependencias temporales en tablas

Dependencia temporal en tablas cliente

Al igual que ocurre en las tablas estándar, cualquier tabla cliente dependiente de fechas puede disponer también de esta funcionalidad. Para ello, solo es necesario seguir algunos pasos.

En primer lugar y para definir el periodo de validez de cada uno de los registros, la tabla contendrá los campos BEGDA y ENDDA, que cumplirán a su vez los siguientes requisitos:

Campo ENDDA

  • Último campo clave
  • Para definirlo se podrán utilizar los elementos de datos ENDDA, ENDDATUM o VIM_ENDDA.

Campo BEGDA

  • Primer campo no clave
  • Para definirlo se podrán utilizar los elementos de datos BEGDA, BEGDATUM o VIM_BEGDA.

SAP HCM - Dependencias temporales en tablas cliente

Al crear de esta forma los campos y acceder a la tabla/vista en la transacción SM30, veremos que ya se han habilitado los botones de ‘Limitar‘ y ‘Desglosar <-> Ocultar. Pero aún es necesario realizar un segundo paso para que, a la hora de utilizarlos y actualizar los datos, se cree un nuevo registro limitando a su vez el registro ya existente.

Con la vista de actualización creada, en el menú ‘Entorno’, deberemos generar la dependencia temporal.

Generar dependencia temporal en tabla cliente desde la SM30

Para asegurarnos de que la dependencia temporal se ha generado correctamente, podemos comprobar que en el código de la dynpro, se hayan generado los siguientes modules:

PBO

 LOOP AT EXTRACT WITH CONTROL
  TCTRL_ZDEP_TEMP CURSOR NEXTLINE.
   MODULE LISTE_SHOW_LISTE.
   MODULE LISTE_DEACTIVATE.
 ENDLOOP.

PAI

 CHAIN.
   FIELD ZDEP_TEMP-BEGDA.
   FIELD ZDEP_TEMP-ENDDA.
   MODULE TEMP_DELIMITATION ON CHAIN-REQUEST.
 ENDCHAIN.

Limitar un registro en la SM30

Una vez generada la dependencia temporal, ya podemos acceder a la transacción SM30 y utilizar la funcionalidad. Para ello, seleccionando el registro que queramos actualizar pulsamos ‘Limitar‘.

Limitar registro en la transacción SM30

Al grabar los datos, el sistema generará un nuevo periodo desde la fecha indicada, provocando a su vez un corte en el registro seleccionado. Por defecto el sistema muestra únicamente el periodo activo de cada registro. Para ver todos los periodos, utilizaremos el botón ‘Desglosar <-> Ocultar’.

Tablas dependientes de fecha.

Web Dynpro: UI Table Cell Variants

$
0
0

En artículos anteriores comentamos cómo crear una tabla con el UI Element Table de Web Dynpro y diferentes opciones relacionadas con este elemento Web Dynpro Abap.

En esta ocasión, hablaremos sobre los Web Dynpro UI Table Cell Variants, otra opción más para crear diferentes editores de celda en una misma columna de una tabla WD4A.

Cuando creamos una tabla en Web Dynpro, en cada columna hay que elegir un editor (input field, checkbox, link, text view…) por defecto para mostrar o recoger la información.

Si queremos que en una misma columna haya diferentes editores, lo primero será añadir un cell variant a la columna. Para ello, con el botón derecho sobre la columna, le damos a “insertar CELL VARIANT” y elegimos el tipo TableStandardCell.

WebDynpro ABAP: UI Table Cell Variant

En las propiedades de este elemento, lo importante es dar una clave de variante. Con esta clave se podrá manejar qué tipo de editor se mostrará en la tabla. Este campos es libre, por lo que podremos escribir cualquier texto.

El siguiente paso será crear un atributo en el nodo de la tabla. A la hora de informar el nodo, este atributo lo rellenaremos con la clave que hayamos indicado en la propiedad si queremos que en esa línea se muestre el editor alternativo, o lo dejaremos vacío si queremos que se muestre el que está por defecto.

Después, en las propiedades de la columna, deberemos hacer binding de la propiedad selectedCellVariant con el atributo que acabamos de crear.

WD4A: Binding de la propiedad selectedCellVariant

Con ello conseguiremos que las líneas de la tabla que tengan en su atributo VARIANT_KEY la clave “VARIANT” muestren un link to action en vez de un text view.

Siguiendo con el ejemplo anterior, la siguiente imagen muestra como en la segunda línea hemos indicado la clave de la cell variant, para que muestre un link:

WD4A: UI Table Cell Variant de tipo link

Así podremos personalizar mejor nuestras tablas y adaptarlas a requerimientos que pueda tener el programa a la hora de visualizar datos. Se pueden crear tantas variantes de celda como se quiera por columna.

En caso de  querer que en varias columnas haya diferentes editores, deberemos crear un atributo por cada columna, para que se diferencien unos de otros.

¿Qué es SAPUI5?

$
0
0

En los últimos tiempos SAP se ha propuesto mejorar la experiencia de usuario de sus aplicaciones, en especial las destinadas a usuarios finales de SAP. Para ello, ha creado la SAP User Experience Strategy, una estrategia en base a la que desde diferentes puntos de vista (NEW, RENEW y ENABLE) se quiere conseguir dicho objetivo.

Uno de los medios que han puesto a disposición de los desarrolladores para llevar a cabo la estrategia SAP User Experience es SAPUI5. Si aún no sabes qué es SAPUI5, no te preocupes, en este artículo lo explicamos y conoceremos más sobre su arquitectura.

Qué es SAPUI5

¿Qué es SAPUI5?

SAPUI5 es un conjunto de librerías Javascript para el desarrollo y diseño de aplicaciones de negocio SAP basadas en HTML5. Es un framework de programación que facilita el desarrollo de aplicaciones web de lado cliente que cumplen los principios de la SAP User Experience Strategy.

Principios de las aplicaciones SAPUI5

Las aplicaciones SAPUI5 deben cumplir los principios de la estrategia SAP User Experience. A continuación los presentamos:

1. Aplicaciones SAPUI5 orientadas a roles

Las aplicaciones SAPUI5 deben estar pensadas para los usuarios que van a utilizarlas. Sólo deben mostrar los datos que un determinado rol de negocio quiere ver y ninguno más.

Se trata de dividir las transacciones que conocemos hasta ahora, en pequeñas aplicaciones orientadas a las tareas concretas del rol que las va a utilizar.

2. Aplicaciones SAPUI5 responsive

Las aplicaciones SAPUI5 deben ofrecer una interfaz de usuario atractiva, a la vez que sencilla e intuitiva que ofrezca una experiencia de usuario buena y equivalente sea cual sea la plataforma o dispositivo desde la que se acceda, independientemente de versión, sistema operativo, navegador, resolución etc.

3. Aplicaciones SAPUI5 simples

Las aplicaciones SAPUI5 además de estar orientadas a roles, deben ofrecer la funcionalidad de una manera sencilla y simple.

En el desarrollo de aplicaciones SAPUI5 se sigue la regla 1-1-3: 1 usuario, 1 caso de uso, 3 pantallas como máximo. Si la aplicación que estamos desarrollando no puede resumirse en 3 o menos pantallas, deberemos rediseñarla o dividirla en varias aplicaciones SAPUI5.

4. Aplicaciones SAPUI5 coherentes

Las aplicaciones SAPUI5 deben hablar el mismo idioma. Esto se refiere a que deben utilizar elementos y estilos comunes de manera que un usuario que sepa utilizar una aplicación SAPUI5, sepa utilizar cualquiera otra. Para ello, existen themes y recursos web a disposición de los desarrolladores SAPUI5.

5. Aplicaciones SAPUI5 disponibles al instante

Este principio está más relacionado con las aplicaciones SAP Fiori UX enmarcadas en el enfoque RENEW de la estrategia User Experience de SAP. Se refiere a la disponibilidad de una de estas aplicaciones Fiori, que también son aplicaciones SAPUI5 ya desarrolladas y puestas a disposición por SAP que pueden instalarse y usarse en poco tiempo.

Aplicación SAPUI5 Fiori Type

Arquitectura de las aplicaciones SAPUI5

Como ya se ha comentado anteriormente, las aplicaciones SAPUI5 son aplicaciones de lado cliente que ofrecen una interfaz SAP a través de la que consumir o nutrir de datos a SAP.

Desarrollar una aplicación SAPUI5 significa por tanto, diseñar una interfaz y definir de dónde se va a obtener los datos que va a tratar esta interfaz. Para ello, se utiliza el paradigma MODELO-VISTA-CONTROLADOR del que derivarán 3 tipos de componentes a tener muy en cuenta:

  • Vistas: Ficheros en los que se diseñará la estructura y formato de la aplicación SAPUI5 en cuestión: layouts, controles, tablas, etc. Pueden desarrollarse en los siguientes formatos: Javascript, XML, HTML o JSON.
  • Controlador: Ficheros Javascript en los que se definirá la lógica de negocio de la interfaz, se atenderá a eventos, se realizarán validaciones y se crearán modelos con los que establecer la relación entre la aplicación y el backend de donde procedan los datos a tratar.
  • Modelo: Serán las fuentes de datos de los que se nutrirá la aplicación, podrán ser SAP o no SAP y podrán estar basados en diferentes formatos como JSON, XML u oData.

Esto es sólo una pequeña introducción para saber qué es SAPUI5. A partir de ahora iremos escribiendo artículos con los que acercarnos poco a poco al desarrollo de aplicaciones SAPUI5.

Procesamiento de XML en ABAP (1/3)

$
0
0

Hoy en día, cada vez es más habitual el intercambio de datos entre diferentes sistemas. Y, aunque en principio esto supone una gran ventaja, también puede llegar a ser un quebradero de cabeza si los sistemas utilizan formatos diferentes o incompatibles. Para facilitar estos intercambios, y definir un estándar que todos los sistemas puedan entender y utilizar, se creó el lenguaje XML (eXtensible Markup Language).

La mayoría de los lenguajes de programación son capaces ya de interpretar y procesar ficheros XML transformando sus contenidos al formato propio del sistema. En esta serie de artículos vamos a ver cómo tratar estos ficheros XML con ABAP de una forma sencilla.

1. Objetivo del tratamiento de XML con ABAP

Para que la explicación sea más clara y se pueda seguir mejor, vamos a explicar el proceso completo con un ejemplo sencillo. El objetivo de este ejemplo será obtener datos de un XML simple e importarlos en una tabla de nuestro sistema SAP. El fichero que vamos a utilizar contiene un catálogo de CDs musicales, que podemos encontrar en la web www.w3schools.com, y tiene la siguiente estructura:

<CATALOG>
	<CD>
		<TITLE>Empire Burlesque</TITLE>
		<ARTIST>Bob Dylan</ARTIST>
		<COUNTRY>USA</COUNTRY>
		<COMPANY>Columbia</COMPANY>
		<PRICE>10.90</PRICE>
		<AIR_YEAR>1985</AIR_YEAR>
	</CD>
	...
	<CD>
		<TITLE>Unchain my heart</TITLE>
		<ARTIST>Joe Cocker</ARTIST>
		<COUNTRY>USA</COUNTRY>
		<COMPANY>EMI</COMPANY>
		<PRICE>8.20</PRICE>
		<AIR_YEAR>1987</AIR_YEAR>
	</CD>
</CATALOG>

2. Proceso del tratamiento de XML con ABAP

El proceso para importar estos datos XML lo podemos dividir en tres pasos principales. Primero crearemos los objetos del Diccionario de Datos ABAP mediante la transacción SE11, después crearemos una Transformación Simple en la STRANS y, para finalizar, programaremos un report sencillo mediante la SE38 en el que utilizaremos lo creado previamente para procesar el fichero XML.

1) Creación de los objetos del Diccionario ABAP

Como hemos comentado, el primero de los pasos es crear todos los objetos en el Diccionario de Datos y, para ello, empezaremos creando los dominios y elementos de datos con los que trataremos los elementos del fichero. Necesitaremos crear un elemento de datos por cada una de las propiedades del CD (título, artista, país, …), y tantos dominios como necesitemos. Podríamos utilizar elementos ya existentes en nuestro sistema, propios o estándar, pero no es muy recomendable.

Una vez que tenemos creados los elementos de datos, crearemos una estructura ABAP que defina la estructura del propio fichero XML.

Procesado ABAP de XML: Creación de objetos de diccionario

Esta estructura define cada uno de los CDs, pero como lo que queremos es recoger varios registros, necesitamos crear un tipo de tabla a partir de esa estructura. De esta manera, podremos recoger cada uno de los CDs en una tabla interna.

Tratamiento XML con ABAP: Creación de tipo de tabla

Finalmente, como lo que queremos es guardar los datos leídos del XML en una tabla ABAP de nuestro SAP ERP, crearemos una tabla de base de datos en el ABAP Dictionary. Utilizaremos lo definido anteriormente indicando, además, cuales son los campos clave, MANDT y TITLE.

Tratamiento XML con ABAP: Creación de tabla

Esto es todo por ahora, en los próximos artículos veremos cómo se crea una Transformación Simple y como se puede utilizar en un programa de carga de datos XML en ABAP.

Procesamiento de XML en ABAP (2/3)

$
0
0

Siguiendo con la serie de artículos sobre el procesamiento de ficheros XML mediante ABAP, vamos a ver cómo se crea la Transformación Simple, el elemento fundamental de este proceso de tratamiento de XML con ABAP. Éste es el paso más importante ya que es ahora cuando vamos a definir cómo convertir los datos XML en datos que SAP pueda tratar.

2. Proceso del tratamiento de XML con ABAP

3) Creación de la Transformación Simple

Después de haber creado todos los objetos necesarios en el artículo anterior, vamos a crear la transformación simple mediante la transacción STRANS. Le pondremos nombre, descripción breve y especificaremos que se trata de una Transformación simple.

Creación de transformación simple para procesamiento XML en ABAP

4) Implementación de la lógica de la Transformación

Una vez creada, tendremos que modificar la lógica de la transformación para añadir nuestra estructura de datos. Para ello podemos cambiar el código de forma manual, o editarlo gráficamente pinchando en el botón de la “varita mágica”.

Implementación de la lógica de la transformación para procesar XML con ABAP

Nos aparecerá un elemento “ROOT” generado automáticamente que borraremos, porque nosotros ya tenemos la estructura que vamos a insertar creada previamente. Así pues, insertaremos un nuevo nodo raíz (botón derecho->Insert new root) y referenciaremos el tipo de tabla ZXML_CD_TT que creamos en el artículo anterior.

Procesamiento XML con ABAP: Referencia a tipo de tabla en la transformación

Esto hace que el sistema busque en el diccionario de datos nuestro objeto y nos traiga cada uno de sus elementos en una estructura de tipo árbol. Ahora, lo que tenemos que hacer es arrastrar estos datos a la ventana de la derecha donde se indican los campos de nuestra transformación simple.

Procesamiento XML con ABAP: Selección datos de la transformación simple

Como se aprecia en la imagen, prácticamente tenemos definida ya la transformación: en la parte de la izquierda tenemos la estructura objetivo (la de nuestro sistema SAP) y en la derecha tenemos la transformación simple correspondiente a nuestro fichero XML. Antes de guardar, eso sí, deberemos renombrar el nodo ZXML_CD_STR de la transformación como CD, ya que este es el nombre que tienen los elementos del XML, y, por lo tanto, el que tendrá que utilizar nuestra transformación.

Renombrar nodo ABAP para procesamiento XML

Ahora ya podemos guardar y activar nuestra transformación simple. Como resultado obtendremos el siguiente código fuente que utilizaremos después para convertir los datos XML en ABAP.

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates"
		  xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"
	        xmlns:def="http://www.sap.com/abapxml/types/defined">
  <tt:root name="CATALOG" type="ddic:ZXML_CD_TT"/>
  <tt:template>
    <CATALOG>
      <tt:loop ref=".CATALOG">
        <CD>
          <tt:cond>
            <MANDT tt:value-ref="MANDT"/>
          </tt:cond>
          <TITLE tt:value-ref="TITLE"/>
          <ARTIST tt:value-ref="ARTIST"/>
          <COUNTRY tt:value-ref="COUNTRY"/>
          <COMPANY tt:value-ref="COMPANY"/>
          <PRICE tt:value-ref="PRICE"/>
          <YEAR tt:value-ref="AIR_YEAR"/>
        </CD>
      </tt:loop>
    </CATALOG>
  </tt:template>
</tt:transform>

Hemos definido una estructura destino del tipo ZXML_CD_TT, por lo que la transformación devolverá los datos que trate en una tabla interna ABAP. De esta manera, cuando ejecutemos esta transformación, lo primero que hará será buscar el nodo <CATALOG>.

Cuando encuentre el nodo lo recorrerá con un bucle buscando los nodos <CD> que cuelguen de él. Así, por cada elemento que encuentre mapeará el campo indicado en la izquierda con el definido en el atributo tt:value-ref, que hace referencia a un campo de nuestra tabla ABAP.

Aclarar también que se ha metido el campo MANDT entre tags <tt:cond> porque este es un campo que NO tenemos en el fichero pero que nuestra tabla ABAP necesita tener. De esta manera, la transformación funcionará correctamente y nuestro sistema informará el campo mandante de forma automática.

Y hasta aquí llega este artículo, con una guía sencilla sobre las transformaciones XML. En el próximo artículo veremos cómo utilizar esta transformación en un programa y cargaremos los datos de los CDs en una tabla ABAP de base de datos.


Registrar un sistema ABAP en SLD con RZ70

$
0
0

Hay una serie de casos en los que es necesario registrar un sistema ABAP en un SLD (System Landscape Directory) de un sistema JAVA. Por ejemplo, a la hora de actualizar el sistema ABAP con un stack de parches, hay que crear un fichero .xml desde el Solution Manager. Para ello, es necesario que el sistema ABAP esté registrado en el SLD de la instancia JAVA del propio Solman.

Otro caso puede ser, configurar conexiones JCO entre el sistema ABAP y un EP Java, donde nuevamente, es necesario que el sistema ABAP esté registrado en el SLD del sistema JAVA.

Desde el sistema ABAP se accede a la transacción RZ70 donde se indica el nombre de servidor y el servicio Gateway en el que está registrado un id de programa: SLD_UC o SLD_NUC, en función de si el sistema es un sistema Unicode o NO Unicode respectivamente.

Registrar sistema ABAP en SLD

En la parte inferior de la transacción RZ70 se pueden seleccionar los datos que se transfieren al SLD:

Selección de datos del sistema ABAP a transferir al SLD

Ejecutando la transacción RZ70 se crea automáticamente una conexión RFC de tipo TCP/IP en el repositorio de conexiones, transacción SM59.

Conexión RFC de tipo TCP/IP

Para que estas conexiones funcionen, hay que configurar el SLD para que registre los IDs de programa, SLD_NUC y SLD_UC en el Gateway del sistema ABAP. Para esta configuración hay que acceder al SLD con un usuario con permisos suficientes y entrar a Administration -> Settings y en Section, elegir la opción: datasupplier.

En esta pantalla se deben configurar los parámetros GatewayHost y GatewayService con los datos del sistema ABAP que se quiere registrar en el SLD:

Configuración del SLD

Tras la configuración, es necesario reiniciar el servidor SLD con el botón Stop SLD:

Reiniciar el servidor SLD

Y volver a arrancarlo pulsando Start SLD:

Arrancar servidor SLD

Esto registra los IDs de programa en el Gateway del sistema ABAP para que puedan funcionar las conexiones RFC SLD_NUC y SLD_UC de la transacción SM59.

Si éstas fallan, hay que revisar en el Gateway Monitor, transacción SMGW, para que sistemas externos pueden registrar IDs de programa en el Gateway. Para ello se utiliza el fichero reginfo, que se puede visualizar en el menú Goto -> Expert Functions -> External Security -> … Aquí se encuentras las opciones de visualizar, crear y recargar ficheros de autorizaciones:

Gateway Monitor: registro de sistema ABAP

El fichero se configura al estilo del fichero de permisos del saprouter, indicando una letra P, para permitir el registro y una letra D, para denegar el registro, de lo que figura en la línea:

Fichero de autorizaciones del SLD

En este momento se puede ejecutar la transacción RZ70 y se muestra un mensaje parecido al que se muestra en la siguiente imagen, indicando que la transferencia de datos al SLD se ha realizado correctamente:

Activación del SLD

Una vez ejecutada la RZ70, en pocos segundos aparece el sistema ABAP registrado en el SLD. En el tipo de sistema técnico se elige el tipo AS ABAP:

Sistema ABAP registrado en SLD

Bloquear transacción SAP

$
0
0

Las autorizaciones en SAP se deben realizar siempre a través de las autorizaciones SAP y de esta manera se determinan accesos/bloqueos de las transacciones según cada usuario.

En este artículo vamos a aprender a bloquear una transacción SAP, en un artículo express de nuestro compañero Unax.

Existe la posibilidad de bloquear una transacción de forma más sencilla para un entorno con la transacción SM01 (Bloquear/desbloquear códigos de transacción).

Esta transacción suele ser común usarla en momentos de imprevistos para que no se haga una incorrecta utilización del sistema:

  • Transacciones SAP que están obsoletas.
  • Transacciones SAP que fallan puntualmente y se necesita bloquear momentáneamente.
  • Transacciones SAP que se están actualizando y no deseamos que los usuarios las usen en el momento de dicha actualización.

En la parte superior de la pantalla podrás buscar el código de la transacción que se quiera bloquear.

Bloqueo de transacción SAP

Una vez seleccionada la transacción SAP que se quiera bloquear para todos los usuarios, se guardan los códigos de transacción bloqueados pulsando el botón de guardar.guardar

listatransacciones

En el momento en que un usuario quiera entrar en la transacción que hemos querido bloquear, el sistema nos mostrará un error indicando que la transacción se encuentra bloqueada.

transaccion

error

 

Como hemos aprendido, bloquear transacciones SAP no supone ningún reto, sabiendo manejar las autorizaciones SAP.

Registrar un sistema JAVA en SLD SAP

$
0
0

En esta ocasión, toca registrar sistemas SAP JAVA en un SLD. El propio sistema JAVA dispone de un SLD, pero aun así hay que registrarlo en el SLD. Para ello hay que acceder a la configuración de SLD Data Supplier desde el SAP Netweaver Administrator (/nwa):

SAP SLD Data Supplier Configuration

Y desde ahí, accederemos a toda la configuración necesaria para registrar sistemas SAP JAVA.

En la ventana de SLD Data Supplier se puede lanzar el envío de los datos del sistema al SAP SLD configurado:

SAP SLD: Ventana para lanzar datos al sistema SLD

Es importante tener presente que la URL a la que se conecta el portal para registrar el sistema en el SLD está definida en el destino RFC SLD_Client. A este apartado se puede acceder desde la pestaña: Configuration -> Security -> Destinations:

SAP SLD: Destinations

La conexión que hay que configurar es:

SAP SLD: Configuración de las conexiones del destinatario

En la configuración de la conexión hay que introducir la dirección URL del sistema JAVA indicando http://<hostname>:<puerto> sin añadir más:

SAP JAVA, configuración URL en la pestaña Connection and Transport

Para que la conexión se pueda realizar, hace falta rellenar en la pestaña Logon Data un usuario con roles suficientes:

SAP SLD: Configuración destinatario, pestaña Logon Data

Se indican más detalles sobre el usuario en la ventana emergente de ayuda que se abre al pulsar en el enlace de ayuda de la sección SLD Data Supplier del NWA:

SAP SLD: Ayuda en la configuraciónSAP SLD: Ventana de ayuda en la configuración

Como véis es sencillo registrar un sistema JAVA en SLD de SAP.

Creación de una aplicación SAPUI5 (1 / 2)

$
0
0

Ahora que ya conocemos qué es SAPUI5 y qué librerías SAPUI5 tenemos a nuestra disposición, nos ponemos manos a la obra y vamos a explicar cómo crear una aplicación SAPUI5. Para ello, vamos a ver qué herramientas necesitamos y cuáles son los primeros pasos que debemos dar para ver en funcionamiento una aplicación SAPUI5.

1. Entorno de desarrollo SAPUI5

En primer lugar, para ponernos a desarrollar una aplicación SAPUI5 deberemos tener instalado el entorno de desarrollo por excelencia: Eclipse, para el que deberemos instalar dos plugins especiales propios de SAPUI5:

SAPUI5, Plugins

  • SAPUI5 ABAP Repository Team Provider: Nos proveerá de la funcionalidad necesaria para deployar nuestra aplicación SAPUI5 a un repository ABAP.
  • UI Development toolkit for HTML5: Descargará todas las librerías y recursos necesarios para el desarrollo de aplicaciones SAPUI5.

2. Creación de un proyecto SAPUI5

Una vez que disponemos del entorno de desarrollo Eclipse, con los componentes necesarios instalados, el siguiente paso es crear un proyecto SAPUI5. Para ello, seguimos los siguientes pasos:

1. Desde el menú File de Eclipse: File –> New –> Project
2. Dentro de la carpeta SAPUI5 Application Development, elegir la opción Application Project:

SAPUI5, creación de proyecto de tipo aplicación

3. En la siguiente pantalla, además de elegir el nombre del proyecto, es el momento de elegir la librería SAPUI5 base del proyecto: ui.commons (aplicación escritorio) o sap.m (aplicación móvil). Además, tenemos la opción de crear una vista inicial o no. Normalmente, seleccionamos esta opción para que automáticamente nos cree la primera vista donde vamos a ir creando la interfaz de nuestra aplicación SAPUI5, así como el controlador asociado a esta.

SAPUI5, especificaciones del proyecto

4. Si hemos seleccionado la opción “Create an Initial View” tendremos que dar un nombre a esta vista inicial además de elegir el tipo de vista SAP UI5 que queremos que sea. Las vistas pueden desarrollarse en los siguientes formatos: Javascript, XML, JSON y HTML.

La elección de un formato u otro depende principalmente de las preferencias del desarrollador. Aunque es cierto que las vistas de tipo Javascript son las que más potencia tienen, pero por otra parte, las vistas XML son las más ligeras en cuanto a lo que a carga de la página se refiere. Para este ejemplo elegiremos Javascript.

SAPUI5, elección del tipo de vista

5. Por último, pulsando “Finalizar” el wizard de creación de proyecto SAPUI5 terminará y en el explorador de proyectos de Explorer ya dispondremos de la estructura inicial de nuestro nuevo proyecto SAPUI5.

3. Estructura básica del proyecto SAPUI5

Nada más crear un proyecto SAPUI5 nos encontraremos con la estructura de ficheros que se puede observar en la siguiente imagen.

SAPUI5, estructura básica del proyecto

En ella podemos encontrar todas las librerías y recursos necesarios para el desarrollo SAPUI5, pero donde tenemos que prestar especial atención es en la carpeta WebContent del proyecto, en la que se encontrarán todos los ficheros que tendremos que manipular para ir desarrollando nuestra aplicación SAPUI5.

  • html: Es el punto de acceso a la aplicación, donde se cargarán todos los recursos necesarios y en donde se encontrará el HTML al que se irá añadiendo contenido para crear la interfaz final de la aplicación.
  • /proyectodeprueba/Prueba.view.js: Fichero Javascript en el que se desarrollará la vista inicial de la aplicación. Como ya se ha comentado, las vistas pueden ser ficheros Javascript, XML, JSON o HTML.
  • /proyectodeprueba/Prueba.controller.js: Fichero Javascript correspondiente al controlador asociado a la vista inicial de la aplicación SAPUI5. En él se implementará la funcionalidad propia de la vista: respuesta a eventos, validaciones, etc. En el caso de los controladores, siempre serán ficheros Javascript.

En la segunda parte de este artículo, incidiremos más en cada uno de estos ficheros y veremos con qué elementos clave cuenta cada uno de ellos, además de empezar a diseñar una interfaz para esta aplicación SAPUI5.

Creación de una aplicación SAPUI5 (2 / 2)

$
0
0

Siguiendo con lo comentado en el artículo anterior sobre creación de aplicaciones SAPUI5, en esta segunda parte vamos a ver con más detalle los ficheros más importantes que forman la base de un proyecto SAPUI5 y los modificaremos para ver en funcionamiento nuestra primera aplicación SAPUI5.

4. Ficheros principales de una aplicación SAPUI5

index.html

Como introdujimos en el artículo anterior, este fichero es el punto de entrada a la aplicación SAPUI5. En él encontramos tres partes principales:

  • Bootstrap: El bootstrap es el primer script que se ejecuta al cargar la aplicación SAPUI5. En él se establecen valores de configuración tales como el idioma (data-sap-ui-language) o el tema (data-sap-ui-theme) por defecto a utilizar. Así mismo, se cargan las librerías necesarias para la aplicación (data-sap, tanto las del core como las opcionales que vimos en el artículo sobre librerías SAPUI5: en este caso, al haber elegido m como librería base, la encontramos ya entre las librerías a incluir.

SAPUI5, bootstrap

  • Lógica de negocio: Después del bootstrap se encuentra un segundo script en el que ya sí se comienzan a declarar e instanciar los elementos SAPUI5 necesarios: controles, vistas, etc. para después colocar estas en el área UI. En este casovemos cómo crea un control App a la que se añade la vista SAPUI5 que hemos creado como vista inicial. Después, mediante el método placeAt coloca esta App en content, que no es otra cosa que un DIV HTML declarado en el área UI.

SAPUI5, lógica de negocio

  • Area UI: El área UI es un bloque de código HTML que es la base de la aplicación SAPUI5 a la que se le irá añadiendo código dinámicamente. Inicialmente cuenta únicamente con el elemento <BODY> y un <DIV> cuyo ID es content, al que como hemos visto anteriormente se hace referencia desde la lógica de negocio. Este código HTML se puede modificar cómo se desee, borrando o creando bloques HTML. Mediante el método addContent se irá pegando el código derivado de controles, vistas etc. en estos bloques HTML indicando siempre el ID de cada bloque.

Prueba.view.js

Como hemos visto, al haber generado una vista inicial en el proyecto, desde el index.html automáticamente se hace referencia a una vista SAPUI5, la cual se corresponde directamente con este fichero Prueba.view.js. En esta vista podemos crear diferentes controles que compondrán la interfaz de la aplicación SAPUI5: botones, textos, tablas, listas etc.

En una vista SAPUI5, sea el lenguaje que sea, veremos siempre dos elementos importantes: la referencia al controlador y el contenido.

En este caso al ser una vista Javascript, estos dos elementos se corresponden con dos funciones:

  • getControllerName: En esta función obtenemos la referencia al controlador que dotará de funcionalidad a la vista.

SAPUI5, get controller name

  • createContent: Función en la que iremos creando y añadiendo controles SAPUI5. Para ver un ejemplo sencillo, vamos a añadir una página que dentro tendrá un botón de la librería m. y rellenaremos sus propiedades y eventos.

SAPUI5, función createContent

Prueba.controller.js

Como podemos ver en el ejemplo anterior, a la vista Prueba se le ha asignado un controlador en el que se implementará la lógica necesaria para atender a eventos, realizar validaciones etc. El fichero Prueba.controller.js es el fichero que se corresponde con este controlador.

Por defecto, al crear automáticamente el controlador con el wizard este crea ya una serie de funciones comentadas que se corresponden con los eventos básicos de la aplicación (onInit, onBeforeRendering, onAfterRendering y onExit).

En el código del botón anteriormente creado en la vista, podemos ver que el control sap.m.Button responde a un evento press, para el cual se indica una función propia del controlador. Es decir, cuando se pulse el botón, la aplicación buscará el controlador asociado a la vista y ejecutará la función onPress que este tenga implementado. A continuación vemos el código del controlador:

SAPUI5, controller

Con todo esto, ya podemos ver en funcionamiento nuestro primer proyecto SAPUI5. Para ello, pulsamos con el botón derecho sobre el proyecto en el Project Explorer y seleccionamos la opción Run As –> Web App Preview con lo que se abrirá un navegador integrado en Eclipse donde podremos ver la aplicación SAPUI5 en funcionamiento:

SAPUI5, vista previa del proyecto

Con esto ya hemos creado nuestra primera aplicación SAPUI5.

Novedades ABAP con SAP 7.40 (1 / 2)

$
0
0

En este artículo vamos a hablar de algunas de las novedades que se han introducido en el lenguaje de programación ABAP desde la salida de la versión SAP 7.40. Con el lanzamiento de esta versión se introdujeron algunos cambios interesantes, que, junto con algunos otros añadidos posteriormente, vamos a comentar en las siguientes líneas.

Este será por tanto el primero de dos artículos donde presentamos las primeras novedades ABAP con SAP 7.40

abap-oo

Declaraciones inline

Una de las cosas que muchos programadores ABAP (sobre todo los que conocían también otros lenguajes de programación actuales) echaban en falta eran las declaraciones inline, o en una sola línea. Estas declaraciones son muy útiles ya que permiten declarar las variables en los puntos donde se van a utilizar, cogiendo así el tipo de dato por el contexto y evitando tener que declararlas previamente.

Este tipo de declaración se puede utilizar en muchos sitios, conocidos como posiciones de declaración. A continuación mostramos algunas de esas posiciones de declaración en ABAP, aunque hay muchas más:

Parte izquierda de una asignación

Esta funcionalidad resulta muy útil en muchos casos, ya que nos permite asignar el resultado de un cálculo, o el retorno de un método a una variable en una sola sentencia.

Así, podemos declarar una variable y asignarle un valor en una sola sentencia en ABAP.

DATA(porcentaje_descuento) = 25.

O podemos recoger el resultado de una llamada a un método (si tiene un único valor RETURNING).

CLASS cl_descuentos DEFINITION.
 METHODS calcular_descuento RETURNING VALUE(descuento) TYPE i.
 ...
 DATA(porcentaje_descuento) = cl_descuentos->calcular_descuento( ).

Sentencia LOOP

A partir de ahora no tendremos que crearnos una estructura si queremos recorrer una tabla interna en ABAP para la, nos bastará con utilizar la palabra clave DATA dentro de la sentencia del LOOP.

LOOP AT itab INTO DATA(wa).
 ...
 ENDLOOP.

Sentencia READ TABLE

Relacionado con lo anterior, también podremos leer un registro de una tabla interna en una estructura sin haberla definido previamente.

READ TABLE itab INTO DATA(wa) …

Sentencia SELECT

Otra gran utilidad añadida en ABAP con SAP 7.40,  (con el Support Package 08) es la de poder hacer una consulta SELECT y guardar los datos en una tabla sin tener que crearla previamente. Esto es muy útil porque el sistema determina automáticamente el tipo de la tabla interna necesaria dependiendo de la consulta.

SELECT carrid, connid, cityfrom, cityto
 FROM spfli
 INTO TABLE @DATA(itinerario_vuelos).

Expresiones con tablas

Otra de las novedades es la posibilidad de utilizar corchetes ([ ]) para hacer accesos a las tablas internas de forma que podemos hacer tanto lecturas como escrituras en las tablas internas de una forma más rápida.

Podremos utilizar esta nueva funcionalidad para hacer las lecturas tanto por clave como por índice.

DATA(vuelo) = itinerario_vuelos[ carrid = 'AA' connid = '0007' ].
DATA(vuelo) = itinerario_vuelos[ 1 ].

Además, podremos utilizar estas nuevas expresiones con corchetes incluso dentro de otras expresiones como condiciones o bucles, por ejemplo.

IF itinerario_vuelos[ 1 ]-cityfrom = 'NEW YORK'.
 ...
 ENDIF.
Se han añadido también dos funciones nuevas para trabajar con tablas internas:
 "Obtener un indice concreto
 DATA(idx) = line_index( itab[ … ] ).
"Comprobar si la línea existe
 IF line_exists( itab[ ... ] ).
 ...
 ENDIF.

En el próximo blog seguiremos presentando más novedades ABAP con SAP 7.40

Novedades ABAP con SAP 7.40 (2 / 2)

$
0
0

Como ya comentamos en el anterior artículo sobre las novedades ABAP con SAP 7.40, en este segundo artículo terminaremos de presentar dichas novedades para la programación en ABAP.

A continuación, listamos algunos nuevos operadores, os serán de gran utilidad en vuestro día a día con ABAP.

Nuevos operadores

Entre las novedades ABAP con SAP 7.40 tenemos,  operadores nuevos muy conocidos en otros lenguajes de programación como NEW, VALUE, COND y SWITCH, …
Estos operadores se utilizan con la siguiente sintaxis.

... operator type( ... ) ...

NEW

Muy utilizado en la programación orientada a objetos sirve para crear objetos nuevos y, junto con las declaraciones inline vistas anteriormente nos permite hacer declaraciones como estas:
Antes

DATA oref TYPE REF TO class.
CREATE OBJECT oref exporting ...

Ahora

DATA(oref) = NEW class( ... ).

VALUE

VALUE es un operador que nos permite crear elementos del tipo indicado pero añadiendo los valores directamente.

Antes

DATA itab TYPE t_itab.
DATA wa LIKE LINE OF itab.
wa-col1 = 1. wa-col2 = 2.
APPEND wa TO itab.
wa-col1 = 3. wa-col2 = 4.
APPEND wa TO itab.

Ahora

DATA(itab) =
VALUE t_itab(
( col1 = 1 col2 = 2 )
( col1 = 3 col2 = 4 ) ).

COND y SWITCH

Estos operadores nos permiten escribir expresiones condicionales en nuestros programas, pudiendo sustituir código previo realizado con IF y CASE.

COND construye el resultado en base a una serie de expresiones lógicas (IF).

DATA(time) =
COND string(
WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM| WHEN sy-timlo > '120000'
THEN |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM|
WHEN sy-timlo = '120000' THEN |High Noon|
ELSE
THROW cx_cant_be( ) ).

SWITCH construye el resultado en base a comparaciones de tipo igula (CASE).

DATA(number) =
SWITCH string( sy-index
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
WHEN 3 THEN 'three'
ELSE THROW cx_overflow( ) ).

Estos son por el momento, todas las novedades ABAP con SAP 7.40.


Web Dynpro for Abap: UI Date Navigator

$
0
0

En un artículo anterior describimos el elemento UI Date Navigator. Este elemento ha sido modificado para la versión 7.4 de SAP NetWeaver, por lo tanto ciertas partes del artículo mencionado han quedado obsoletas para las nuevas versiones. A continuación se describen las modificaciones para poder seguir utilizando este elemento UI Date Navigator.

Las propiedades y eventos del propio elemento no han cambiado como tal. Sin embargo, lo que si se ha modificado ha sido el subelemento DateNavigatorMarking, que se encargaba de dar color a los días del calendario. Como antes, se debe añadir un subelemento de este tipo y también se define un nodo (de cardinalidad 0..n ó 1..n), pero en este caso se ha modificado el atributo Category por el atributo DaySemantics.

Si recordamos, el atributo antiguo debía tener un binding con el tipo WDY_MD_DATE_MARKING_CATEGORY, que permitía dar cuatro tipos de colores al calendario. La nueva propiedad, que se debe ligar al tipo WDUI_TABLE_CELL_DESIGN, permite utilizar cualquier color definido en el estándar de Web Dynpro for Abap. Además, se ha añadido la propiedad tooltip, con la que se puede dar una explicación a cada día del calendario, que se mostrará al pasar el cursor por el día correspondiente.

UI Date Navigator, calendario

A parte de esta modificación en el DateNavigatorMarking, se ha eliminado la posibilidad de adjuntar una leyenda al calendario del tipo DateNavigatorLegend. Si se quiere añadir una leyenda al calendario, habrá que hacerlo con el elemento general para las leyendas, que es el Legend.

A este elemento se le pueden añadir dos tipos de subelementos. El primero es el Legend_Item, que sirve para poner una línea en la leyenda, explicando un color o un símbolo. Las propiedades que se le puede dar a este elemento son:

  • ImageSource: para indicar un icono o imagen a explicar.
  • Semantics: para indicar un color a explicar.
  • Striped: para indicar si el color es a rayas o no.
  • Text: para escribir el texto de la explicación.
  • Tooltip: por si se requiere una mayor explicación, que aparezca en un cuadro al poner el cursor por encima de la línea.

Con este elemento podemos poner a mano uno a uno las líneas de la leyenda. El segundo elemento que admite es el Multiple_Legend_Item, que permite con un solo elemento meter varias líneas a la leyenda. Para ello se debe crear un nodo de contexto (cardinalidad 0..n ó 1..n), con los atributos que se quieran rellenar de los mencionados en la lista anterior. Después, si el contexto se rellena con varias líneas, estas serán las que aparezcan en la leyenda. Una vez creada la leyenda, en la propiedad LegendID del calendario habrá que indicarle el ID de la leyenda recién creada.

Con estos cambios se puede seguir usando este elemento UI Date Navigator para Web Dynpro for Abap , con la mejora de que ahora se permiten muchos más colores en los días a resaltar.

Aplicaciones SAPUI5: Funciones de acceso al core

$
0
0

Uno de los aspectos clave a la hora de desarrollar aplicaciones SAPUI5 es la necesidad de acceder a los diferentes elementos de la aplicación desde cualquier punto de la aplicación.

En artículos anteriores ya hablábamos del patrón Modelo-Vista-Controlador usado en SAPUI5 y vimos los ficheros de los que constan las aplicaciones SAPUI5 que se corresponden con cada uno de los componentes en los que se basa este patrón.

Es por tanto, sencillo darse cuenta de que en cualquier momento puede ser necesario por ejemplo, obtener desde un controlador el valor de un control representado en una determinada vista (por ejemplo el nombre de usuario) o acceder a un determinado modelo para utilizar sus datos desde una vista para, por ejemplo rellenar un combobox. ¿Cómo conseguimos conseguir esta información en las aplicaciones  SAPUI5?

La respuesta a esta pregunta es: mediante las funciones de acceso al core.

Diferenciamos entre las siguientes tres funciones:

sap.ui.getCore()

Devuelve una instancia de la propia aplicación o core. En el core se puede guardar información global, almacenar modelos entre otras cosas. A nivel de aplicación sap.ui.getCore() es la más potente e interesante a la hora de desarrollar una aplicación SAPUI5.

A partir de esta instancia obtenida se puede acceder a otros objetos de la aplicación utilizando sap.ui.getCore().byId(“ID”), para como hemos dicho antes como ejemplo, obtener el nombre usuario introducido en un campo de un formulario. A continuación se muestra un ejemplo:

Vista: Definimos en la vista un campo de tipo Input para introducir el nombre con ID “miNombre” y un botón que cuando es pulsado ejecuta la función “onPress” definida en su controlador.

createContent : function(oController) {
return new sap.m.Page({
title: "Title",
content: [
new sap.m.Input("miNombre",{
type: sap.m.Input.Text
}),
new sap.m.Button("miBoton", {
text: "Pulsame",
type: sap.m.ButtonType.Accept,
press: oController.onPress})
] });
}

SAPUI5, Vista de la aplicación

Controlador: Define la función “onPress” mostrando una alerta que informa sobre quién ha pulsado el botón en función del nombre de usuario introducido en el campo.

onPress:function(){
var miNombre = sap.ui.getCore().byId("miNombre");
alert("Boton pulsado por " + miNombre.getValue() + "!!");
}

SAPUI5 funcioón onPress del controlador

jQuery.sap.domById()

Esta función devuelve elementos del DOM de Javascript. Funciona igual que la función document.getElementById(“ID”). Se puede utilizar para manipular el DOM o para asignar eventos.

Controlador: Obtiene la referencia del campo de texto con ID “miNombre” y le asigna funcionalidad al evento “onmouseover”.

onPress:function(){
var miNombreDOM = jQuery.sap.domById("miNombre");
miNombreDOM.setAttribute('onmouseover','alert("hover")');
}

SAPUI5, función onpress

jQuery.sap.byId()

Devuelve un objeto jQuery correspondiente a elementos del DOM de Javascript. Funciona igual que los selectores jQuery(“#ID”) o $(“#ID”). Es muy útil para llevar a cabo efectos visuales colores, efectos, tamaños de letras etc…

Controlador: Modifica el color del elemento cuyo ID sea miNombre y sus hijos.

onPress:function(){
jQuery.sap.byId("miNombre *").css("color","red");
}

SAPUI5, Vista de la aplicación

Con estas tres funciones de acceso al core ya podemos acceder a los diferentes elementos de nuestra aplicación SAPUI5.

Cómo programar bien: Consejos y buenas prácticas de programación

$
0
0

¿Qué es programar bien? Antes de responder a esta pregunta, tal vez debiéramos definir qué es para nosotros “programar bien”, porque seguro que cada uno tenemos una idea diferente sobre este concepto.

Para algunos un programa bien hecho es cualquiera que haga lo que tiene que hacer, para otros es el que menos tiempo tarde en hacerlo, o el que menos recursos necesite…

Parece claro que no hay una única respuesta a esta pregunta, así que vamos a aclarar a que nos referimos con “programar bien” aquí. Todos los factores mencionados son, por supuesto, muy importantes y a tener en cuenta, pero hay otro que muchas veces se nos olvida, y es de lo que vamos a hablar en este artículo, de cómo hacer que nuestros programas sean legibles por todos, ya que, estos consejos nos pueden ahorrar mucho tiempo y esfuerzo en el día a día.

Cómo programar bien: Consejos

Un programa bien hecho tiene que ser fácil de entender, tiene que poder seguirse de un vistazo, sin necesidad de invertir mucho tiempo en ello.

Buenas prácticas en programación: Utilizar nombres claros

Todos hemos visto programas en los que los nombres de las variables, los métodos o las funciones no tienen ninguna relación aparente con su funcionalidad. Y, aunque es cierto que resulta más cómodo llamar a una variable nm o tl, lo más probable es que nadie (incluidos nosotros mismos pasado un tiempo) entienda a que hacen referencia. Pero, si utilizamos numero_de_mes o tipo_de_libro, todos sabremos de lo que estamos hablando. En el siguiente ejemplo se pueden ver claramente las ventajas de utilizar nombres claros.

FORM calc_d.
IF nm = '02' AND tl = 'PO'.
pd = 25.
ENDIF.
IF nm = '06' AND tl = 'CF'.
pd = 15.
ENDIF.
IF nm = '09' AND tl = 'LE'.
pd = 20.
ENDIF.
ENDFORM.

Con este código no sabemos lo que estamos haciendo, ni la subrutina ni las variables tienen nombres que aclaren su funcionalidad. El siguiente, en cambio, empieza a aclararnos qué hace la subrutina y que valores guardan nuestras variables.

FORM calcular_descuento.
IF numero_de_mes = '02' AND tipo_de_libro = 'PO'.
porcentaje_de_descuento = 25.
ENDIF.
IF numero_de_mes = '06' AND tipo_de_libro = 'CF'.
porcentaje_de_descuento = 15.
ENDIF.
IF numero_de_mes = '09' AND tipo_de_libro = 'LE'.
porcentaje_de_descuento = 20.
ENDIF.
ENDFORM.

Aprender a programar bien: Evitar el uso de literales

Una vez que hemos conseguido que las variables tengan nombres que podamos entender, otra clave a tener en cuenta es la utilización de literales. En el ejemplo anterior utilizábamos ‘06’ y ‘CF’ directamente en el código, y, sí, el número de mes se puede intuir por el contexto (06 – Junio), pero, ¿qué significa CF? Justo son estas dudas las que queremos evitar, y, para ello, una manera de programar bien es la utilización de constantes. Nos llevará más tiempo de primeras, pero hará que nuestro código sea más entendible y más fácilmente modificable.

A continuación hemos sustituido los literales del ejemplo anterior por constantes más claras y explicativas.

CONSTANTS: febrero    TYPE string VALUE '02',
junio      TYPE string VALUE '06',
septiembre TYPE string VALUE '09'.
CONSTANTS: policiaco       TYPE string VALUE 'PO',
ciencia_ficcion TYPE string VALUE 'CF',
libro_escolar   TYPE string VALUE 'LE'.
FORM calcular_descuento.
IF numero_de_mes = febrero AND tipo_de_libro = policiaco.
porcentaje_de_descuento = 25.
ENDIF.
IF numero_de_mes = junio AND tipo_de_libro = ciencia_ficcion.
porcentaje_de_descuento = 15.
ENDIF.
IF numero_de_mes = septiembre AND tipo_de_libro = libro_escolar.
porcentaje_de_descuento = 20.
ENDIF.
ENDFORM.

Aquí sí que se aprecia claramente lo que nuestro código hace, de un vistazo, y sin tener que intuir nada. Esta es la diferencia de seguir buenas prácticas a la hora de programar, o no.

Antes de seguir para un momento y vuelve a mirar el código del que partíamos, con dos cambios sencillos hemos conseguido que un código ininteligible sea muy sencillo de seguir.

Cómo programar bien: Organizar el código

Otro de los hábitos más comunes entre muchos programadores es escribir todo el código seguido, sin separarlo u organizarlo de ninguna manera. Y esto también complica mucho su lectura, porque no sabremos qué se está haciendo en cada sitio, ni sabremos a donde ir cuando tengamos que hacer alguna modificación.

En ABAP tenemos varias herramientas para evitar esto: funciones, subrutinas, métodos, clases… La cuestión es utilizarlas para que nuestro código quede bien estructurado y su compresión sea más fácil.

Un buen ejemplo de esto lo podemos encontrar en la serie de artículos sobre Procesamiento de XML en ABAP, en el que se declaran tres subrutinas con objetivos muy claros y que organizan tanto de forma visual como lógica, todo nuestro código. Así, en vez de tener una llamada a una función seguida de un LOOP y un INSERT, todo del tirón, tenemos tres procesos bien definidos (Leer el XML, Transformar el XML y Guardar los datos).

Consejos para programar bien: Conclusión

Aunque a priori nos cueste más trabajo, siguiendo algunas pautas sencillas y cambiando un poco nuestros hábitos, podemos hacer que nuestro código sea mucho más entendible y utilizable por todos. Así, además de alegrarle el día al que tenga que leer nuestros programas podremos decir que sí, que  sabemos programar bien.

SAP HANA: Conceptos clave sobre SAP S/4HANA

$
0
0

En Febrero de este 2015, SAP lanzó la nueva versión de su suite de aplicativos de gestión de negocio, construida sobre SAP HANA y con toda la capacidad que ésta ofrece. SAP S/4HANA es la mayor innovación de SAP desde SAP R/3

SAP HANA: La nueva revolución de SAP

¿Qué es SAP S/4HANA?

SAP S/4HANA es una suite de aplicativos informáticos de gestión integral de negocio de última generación. Se trata de un nuevo producto desarrollado sobre SAP HANA, la plataforma de procesamiento in-memory más avanzada a día de hoy y que se aprovecha de las últimas innovaciones de SAP para optimizar la experiencia de usuario con SAP Fiori.

SAP S/4HANA ofrece una gran simplificación en cuanto a gestión de procesos (modelo de datos, experiencia de usuario nuevo, toma de decisiones, modelos y procesos de negocio) y en cuanto a alineamiento con las últimas innovaciones tecnológicas (Internet of Things, Big Data, Business Networks, Movilidad).

En definitiva, SAP S/4HANA ha sido concebido como la herramienta de gestión idónea para impulsar la economía digital y el modelo de Industria 4.0.

¿De dónde viene el nombre de SAP S/4HANA?

SAP S/4HANA es la abreviatura para SAP Business Suite 4 HANA. Incorpora una cantidad masiva de innovaciones y desde el punto de vista tecnológico supone un salto incluso mayor que el de la transición de SAP R/2 a SAP R/3.

¿Qué opciones de implantación están disponibles?

Los partners de SAP ofrecen modelos de implantación on-premise (en las propias instalaciones del cliente), en la nube y modelos híbridos. Todos estos modelos de implantación están disponibles en el mercado.

¿Cuáles son las ventajas de migrar a SAP S/4HANA para un cliente de SAP?

La visión y estrategia de SAP es ayudar a sus clientes a impulsar la economía digital. Para realizar su visión, SAP está redefiniendo cómo el software de empresa crea valor.

SAP S/4HANA está diseñado para añadir valor en todas las líneas de industria y de negocio gracias a la sofisticación última: la simplicidad.

Desde una perspectiva de valor de negocio, esto significa que SAP S/4HANA crea oportunidades únicas para reinventar el modelo de negocio y organizativo de sus clientes y acompañar en la creación de nuevos modelos de gestión y de beneficio. Por un lado, las empresas ahora se pueden conectar fácilmente a personas, dispositivos y redes de negocio para ofrecer valor a sus clientes por cualquier canal – se trata de sacar partido a los conceptos Internet of Things y Big Data. Por otro lado, las empresas pueden simplificar sus procesos, gestionarlos en tiempos real y cambiarlos según vean necesario para maximizar su eficiencia – aquí el batch processing ya no es necesario.

Por último, los usuarios de negocio pueden consultar los datos que quieran, de la forma y con el nivel de detalle que quieran, en cualquier sitio, a cualquier hora, y en tiempo real: Se pueden controlar todos los aspectos de planificación, ejecución, predicción y simulación.

Desde una perspectiva de valor de sistemas de información, esto significa que SAP S/4HANA crea oportunidades para simplificar infraestructura y reducir el Coste Total de Propiedad (CTO) con SAP HANA. Primero, las empresas pueden concentrar todas sus fuentes de datos en un mismo sistema de gestión que centralice todas las operaciones de la empresa (ERP, CRM, SRM, SCM, PLM), lo cual además de reducir tiempos, permite ahorrar en hardware.

Además, tenemos la posibilidad de crear experiencias de usuarios basadas en roles concretos, lo cual incrementa la productividad a la vez que permite reducir costes de formación. Finalmente, se ofrece a la empresa el modo de implementación que mejor le encaje: cloud, servidores en las propias instalaciones, y modelo híbrido.

Conceptos clave sobre SAP S/4 HANA

  • Menor infraestructura de almacenamiento de datos y en el data footprint (rastros de datos dejados por el usuario)
  • Mayor integración entre procesos
  • Analíticas y reportes más rápidos
  • Simplificación en la gestión de procesos
  • Implementación simultánea de ERP, CRM, SRM, PLM
  • Convivencia de datos actuales (25%) y datos históricos (75%)
  • Capacidad de carga de datos ilimitada
  • Realización sencilla de predicciones, modelos y simulaciones
  • SAP HANA en tenencia múltiple: misma infraestructura que sirve a varias aplicaciones que a su vez pueden servir a varios clientes, organizaciones, etc.
  • Todo tipo de datos: social, textos, numéricos, geográfico, procesamiento, etc
  • Integración con cualquier dispositivo de movilidad
  • Modelo de implementación a la carta

Estas son en resumen las claves sobre la SAP S/4HANA, la suite de negocios más innovadora del grupo SAP.

¿Qué es SAP Netweaver Gateway?

$
0
0

En el artículo “¿Qué es SAPUI5?” comenzábamos a conocer la tecnología SAPUI5,  por la que en los últimos años SAP ha apostado para el diseño de interfaces SAP.

Tras conocer sus librerías, su potencial para diseñar interfaces responsive e incluso empezar a generar código, en este artículo os presento un nuevo componente de SAP que proveerá a nuestras aplicaciones de lo más importante para que estas sean útiles: los datos. Este componente es SAP Netweaver Gateway.

¿Qué es SAP Netweaver Gateway?

Gran parte de los productos que engloba SAP Netweaver ayudan a integrar y aumentar el alcance de los distintos aplicativos de SAP. En este caso, SAP Netweaver Gateway facilita el desarrollo de aplicaciones de negocio SAP tanto en beneficio de los usuarios finales, como de los desarrolladores.

Con SAP Netweaver Gateway se rompen las barreras de la tecnología, haciendo posible explotar los datos SAP desde aplicaciones desarrolladas  en cualquier lenguaje de programación, sin que saber ABAP, sea necesario. La clave de todo esto son los servicios oData.

¿Qué es oData?

oData es un protocolo basado en el paradigma de desarrollo REST.

Este paradigma entre otros aspectos tiene en cuenta 5 comandos ante los que el servidor debe responder: GET, POST, PUT, DELETE y PATCH. Estos comandos se corresponden con las operaciones Create, Retrieve, Update y Delete de las interfaces CRUD.

Los servicios oData soportan este tipo de operaciones, aunque no es obligatorio que implementen todas.

En SAP Netweaver Gateway es posible crear este tipo de servicios oData que permitan crear, leer, actualizar o borrar datos procedentes de por ejemplo un SAP ERP desde una aplicación  desarrollada por ejemplo con HTML5 y Javascript.

Los servicio oData se basan en XML aunque también es posible desplegarlos utilizando JSON. La elección de un formato u otro dependerá del desarrollador y/o de la tecnología a usar para consumir servicios oData.

Servicios oData en SAP Netweaver Gateway

SAP Netweaver Service Builder

Desde la transacción SEGW del SAP Netweaver Gateway se pueden crear servicios oData de manera manual creando las entidades deseadas e implementando las operaciones requeridas o a partir de estructuras ya definidas como por ejemplo:

  • Estructuras de diccionario ABAP
  • Remote Function Call (RFCs)
  • BAPIs del Bussiness Object Repository (BOR)

SAP Netweaver Service Builder

 SAP Netweaver Gateway Client

Esta herramienta del SAP Gateway permite testear los servicios oData creados desde la transacción anterior.

  • Ver la descripción del servicio: operaciones, entidades, tipos de datos…

SAP Netweaver Gateway Client

  • Probar las diferentes operaciones para las entidades disponibles en cada servicio:

SAP Netweaver Gateway, operaciones  disponibles en cada servicio

 

SAP Netweaver Gateway, operaciones  disponibles

 

  • Utilizar todas las opciones de filtrado, selección, formato etc. ofrecidas por el protocolo oData.

SAP Netweaver Gateway, opciones de filtrado

Consumir servicios desde SAPUI5

Siendo ambos productos (tanto SAPUI5 como SAP Netweaver Gateway) productos de SAP, es lógico que al desarrollar un framework de desarrollo como SAPUI5, se haya tenido en cuenta este potencial de publicar servicios oData en el Gateway.

No en vano, SAPUI5 pone a disposición del desarrollador clases y funciones para el consumo de servicios oData, tanto para crear, leer, actualizar y borrar datos SAP a través de lo que se conocen como modelos oData en SAPUI5.

SAP Netweaver Gateway,servicios oData

Está claro que este artículo no es más que un resumen de qué es SAP Netweaver Gateway, qué son los servicios oData y qué potencial nos pueden ofrecer a la hora de desarrollar nuestras apps SAPUI5, pero desde luego debe quedar muy claro que debemos tener muy en cuenta SAP Netweaver Gateway si queremos apostar por la movilidad en los productos SAP de nuestra empresa.

Viewing all 72 articles
Browse latest View live