Está en la página 1de 233

Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.

html

1 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.html

Tendríamos esto:

El primer ejemplo es un componente genérico en HTML, con sus eventos genéricos y al que le
podemos aplicar estilos con la correspondiente hoja de estilos.

El segundo, es un componente específico construido mediante SAPUI5. Se trata de un botón


que nos proporciona distintas funcionalidades para modificarlo mediante Javascript: Determinar
qué hace cuando lo pulsan, añadir un icono, habilitarlo o deshabilitarlo, asignar qué tipo de
botón es, etc.

DÓNDE ENCUENTRO DOCUMENTACIÓN DE SAPUI5


La documentación de SAPUI5 la podemos obtener en la web UI Development Toolkit for
HTML5, donde podemos encontrar, entre otras cosas:

Una sección con guías de desarrollo muy completa.


Una sección Explored para buscar ejemplos de componentes (que podemos usar para
copiar y pegar vilmente).
Una sección con la API Reference para obtener la información de cada componente.
Una sección con los iconos disponibles en SAPUI5.
Para nuestro ejemplo del botón, podríamos obtener la referencia al botón sap.m.Button para
saber los métodos que podemos utilizar, así como códigos de ejemplo de botones que podemos
aprovechar para no partir de cero.

QUÉ TENGO QUE USAR PARA DESARROLLAR EN


SAPUI5
¿Y cómo puedo desarrollar las aplicaciones para SAPUI5? Podríamos hacerlo con Eclipse, pero
SAP nos proporciona un entorno web de desarrollo muy completo, el SAP Web IDE.

Se trata de un editor web que nos proporciona diversas plantillas para poder crear nuestras
aplicaciones SAPUI5 y basadas en Fiori. Porque generar una aplicación SAPUI5 de cero es todo
un engorro, y lo mejor es partir de dichas plantillas.

Para poder acceder al SAP Web IDE, necesitas una cuenta en el SAP HANA Cloud Platform. Para
probarlo (en modo trial) puedes crearte una cuenta gratuita mediante tu usuario OSS de SAP
(si lo tienes) o con una cuenta de correo.

Desde tu cuenta de HCP, en la sección Services, puedes acceder al Web IDE.

TUTORIAL DE HOLA MUNDO EN SAPUI5

2 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.html

Ya en el Web IDE, puedes crearte una aplicación partiendo de una plantilla

En nuestro caso, como es una aplicación que no se conectará a ningún Backend, la hemos
creado de tipo SAPUI5 en lugar de hacerla de tipo Fiori:

Después vamos rellenando la información que nos pide. Lo primero es asignarle un nombre al
proyecto (cumpliendo con las típicas normas de nomenclatura: sin símbolos raros, sin espacios
en blanco, etc.) y un namespace. El proyecto será cómo lo veremos en el árbol de proyectos,
mientras que el namespace será el nombre interno de la aplicación. En mi caso, si es que me
acuerdo para posteriores ejemplos, el namespace será
jorgcalleja.nombre_especifico_de_la_app...

Después asignamos nombre a la página principal. Cada aplicación web puede estar compuesta
por varias páginas, entre las que navegaremos. Para este ejemplo, en principio sólo creamos
una página.
El tipo de vista puede ser XML, JSON, Javascript o HTML. Como estoy pensando en orientarme
a aplicaciones Fiori, la haré de tipo XML. Al principio puede parecer un lío (yo me volvía loco
hasta que las entendí), pero luego no puedes vivir sin ella... ay, que romántico que soy.

3 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.html

Cuando finalicemos el proceso, se nos habrá creado una estructura de carpetas en nuestro
proyecto HOLA_MUNDO. La estructura se basa en la arquitectura modelo-vista-controlador
(MVC), para quien sepa lo que demonios signifique eso. Así, la página que nos hemos generado
antes tendría tres partes:

Lo que se pinta (la "Vista"), que se guarda en view/principal.view.xml.


Lo que se ejecuta (el "controlador"), que se guarda en
controller/principal.controller.js,
Lo que se trata (el modelo), que serían los datos que se recuperan del backend, de
un fichero plano o que generamos dinámicamente mediante código. El controlador se
encargaría de tratar ese modelo y volcarlo en la vista.
Aparte de esos tres componentes (en este caso no tenemos modelo), se crea un fichero
Component.js, que es el fichero "central" de la aplicación SAPUI5. Ese fichero (junto al
manifest.json) es el que determina cual es la aplicación inicial, cómo se navega entre páginas,
etc. Es lo que se va a invocar para crear el contenido (algo parecido al index.html).

Ok, pues ya tenemos nuestra aplicación, pero sin botón ni nada. Pues para poder pintarlo sin
tener que tirar código, seleccionamos la vista (principal.view.xml) y pulsamos botón derecho ->
Open With -> Layout Editor.

Y en el layout ya podemos arrastrar el elemento gráfico que queramos añadir y modificar las
propiedades: El texto que se muestra, el ancho, etc.

4 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.html

Ahora sólo hay que pulsar el botón de Play (Run) que hay en la barra de herramientas para
ejecutar la aplicación y, ¡tachán! ¡Ya tenemos nuestro primer Hola Mundo!

Lógicamente, el botón no hace nada. Por Dios, que es un triste Hola Mundo, no se puede pedir
más. Ya hemos creado nuestra aplicación y sabemos un poco más sobre SAPUI5.

Eso sí, todavía no lo hemos publicado y sólo podemos acceder nosotros. Pero tiempo al tiempo.

Publicado por JorGCalleja

Etiquetas: hcp, holamundo, sapui5, tutorial, webide

7 comentarios:
Unknown 14 de octubre de 2017, 18:23

Hola!. Excelente explicación!. estoy comenzando, por cuestiones laborales, a aprender a utilizar
SAPUI5 y quisiera pedirte si podrías explicar como usar las vistas JS. Y ampliar un poco más el
uso en Eclipse. Muchas gracias. Saludos.

Responder

Respuestas

JorGCalleja 15 de octubre de 2017, 10:04

¡Muchas gracias!

La verdad es que vistas puras en js nunca he creado más que algún Hola mundo para
probar hace tiempo, es una asignatura pendiente, al comenzar con desarrollos para
Fiori comencé con vistas xml y,aunque al principio me parecía complejo, al final son
fáciles de entender y me da la impresión de que visualmente el código queda más claro
que con vistas js. Una opinión propia, claro. Además, te obliga a respetar más la
arquitectura mvc y para lo que no te llegue, lo amplías en el controlador (que al final
no deja de ser modificar la vista en js pero en el controlador... así que ahí ya no
respetas el mvc,qué paradoja :D ,aunque eso ya es más filosofía que programación).
En cualquier caso quería hacer algún post sobre crear o modificar objetos con js así
que en algún momento alguno caerá. Pero no sé para cuando :(

Sobre eclipse, por temas de máquina yo lo usaba en la versión kepler para ampliar
estándar, pero se me quedaba corto cuando tocó crear nuevas vi que por tema
plantillas era más fácil usar el web ide y,además, el kepler sólo me dejaba actualizar a
la 1.28, así que lo acabé olvidando. A ver si pruebo a instalar el eclipse oxygen para
ver cómo están ahora las cosas con el eclipse (y a instalar también el web ide personal
edition).

Responder

5 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: SAPUI5: Cómo comenzamos http://www.uxsap.com/2016/12/sapui5-como-comenzamos.html

6 of 6 9/25/2019, 8:00 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

1 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

medio podría haber, por ejemplo, un balanceador de carga o proxy inverso como el mayo (6)
SAP Web Dispatcher. Pero para entendernos y no liarnos, vamos a pensar que sí que abril (8)
nos conectamos directamente al front-end.
marzo (7)

febrero (8)
Aunque SAP recomienda tener siempre un servidor como front-end y otro (o varios) enero (11)
como back-end, es posible tener front-end y back-end sean la misma máquina. Pero a
la hora de hablar de Fiori, siempre aclaramos de qué hablamos, aunque estén en el 2016 (4)
mismo servidor. Vulgarmente, podríamos decir que back-end son las tablas con los
datos y el código ABAP, y front-end la parte SAPUI5 y el Gateway.
ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Y ahora veamos dónde podemos tener instalados los componentes de Fiori, en on-premise o en
cloud:

On-premise: Cuando se dice que tenemos Fiori on-premise, es porque lo tenemos


instalado en nuestros servidores. Estos servidores pueden estar en nuestra oficina,
escondidos en el CPD, debajo de la mesa del de sistemas o en una ubicación remota.
Pero el servidor es nuestro y nosotros nos encargamos de trastear con él y gestionar
todas las instalaciones de componentes y seguridad.

Cloud: Cuando hablamos de Fiori en la nube (cloud-based) o de cualquier otro


servicio, como pueden ser los servicios que nos proporciona SAP Cloud Platform, no
tenemos acceso físico al servidor en el que está instalado. Puede estar en cualquier
parte, en un Data Center ubicado en Rotterdam, Tokyo, Almiruete o Mordor, pero
nosotros no nos encargamos de gestionarlo, sino sólo de acceder a los servicios que
hemos contratado. Nos quitamos de encima la gestión de la máquina y todo el tema
de seguridad.

Por supuesto, no tiene que estar todo en un sitio o en otro. Se puede tener el front-
end on cloud y, sin embargo, el back-end on-premise.
Si quieres entrar más en detalle, puedes ir a este post.

FIORI
Fiori puede entenderse de dos formas. La primera, su forma "técnica", que viene a ser un
portal web con un punto de acceso llamado Fiori Launchpad (que vamos a ver más adelante) y
que usa SAPUI5 como librería principal.

Pero también hay que entender lo que realmente se vende, que es el paradigma Fiori: Una
filosofía de diseño de aplicaciones para SAP, para que tengamos un portal web molón y
coherente, siguiendo para ello cinco principios:

Basado en roles, donde cada usuario tendrá acceso sólo a las aplicaciones que
realmente necesita en su puesto, ni más ni menos. En mi opinión, esto no cambia
mucho respecto a la configuración del antiguo SAP Portal, pero ahora se hace más
fácil de gestionar.

2 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

Responsive (adaptivo), las aplicaciones se adaptan al tamaño del dispositivo. Esto no


es automático (o no siempre) y hay que programarlo específicamente para cada
aplicación, pero SAP UI5 añade funcionalidad fácil de usar para garantizar este
principio. De todas maneras, hay que tener en cuenta que no todas las aplicaciones
están pensadas para ser usadas en el móvil (¿una gráfica con infinidad de valores en
un móvil, en serio?) así que puede que ciertas tareas no nos interese que sean
adaptativas.

Simples: Nos tenemos que olvidar de las transacciones en SAP que mostraban miles
de millones de campos, para que distintos tipos de usuario las pudiesen usar. Una
aplicación para Fiori debe estar pensada para una Persona específica (y por Persona
me refiero a tipo de usuario), para un único caso de uso. Además, no debería realizar
más de tres navegaciones (tres ventanas). Es lo que llaman la regla del 1-1-3 (1
persona, 1 caso de uso, 3 navegaciones).

Coherente: Las aplicaciones tienen que tener la misma lógica de uso y de diseño, de
manera que la experiencia sea la misma independientemente de la aplicación
utilizada.

Experiencia encantadora, deliciosa (delightful, la verdad que la traducción queda


horrible). Inicialmente este principio era valor instantáneo, que indicaba que las
aplicaciones se instalaban rápidamente y ya se podían comenzar a usar. Luego lo
cambiaron por delightful, que significa que el usuario debe poder establecer una
relación emocional con la aplicación. Vamos, que le va a molar la aplicación más que
a Mortadelo una fiesta de disfraces.

Supongo que lo de valor instantáneo no siempre era tan cierto como nos gustaría, ya
que no sólo vale con instalar la aplicación y activar los servicios, sino que muchas
llevan por debajo su parametrización, sus BAdIs y posiblemente varias ampliaciones
para adaptarlas al cliente.

FIORI LAUNCHPAD
Fiori Launchpad es la parte tangible de Fiori, el punto de acceso del usuario al portal web. Se
trata de un shell que nos muestra las barra de menú, las aplicaciones que tenemos disponibles,
nos permite navegar a la aplicación que abramos y personalizar nuestro escritorio web de
trabajo. Es decir, básicamente es "la página web".

Podemos imaginarnos que el Fiori Launchpad es como el index.html de cualquier página web,
que nos muestra los distintos menús disponibles y el contenido de la sección (aplicación) que
hayamos elegido.

La página inicial a la que accedemos cuando entramos en Fiori Launchpad se llama Home Page,
"página de inicio". Ahí se cargan los mosaicos (tiles), que son los accesos directos de las
aplicaciones que más usamos. Cuando pulsamos sobre uno de esos mosaicos, se carga la
aplicación correspondiente.

Después, tenemos una sección de Catálogos donde podemos ver todas las aplicaciones que
tenemos disponibles, así como configurar cuales queremos ver en nuestra página de inicio.

3 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

Para ver un ejemplo parecido, pensemos en un móvil, donde tenemos unas pantalla de inicio y
ahí hemos asignado un acceso directo a las aplicaciones que más usamos. Después, tenemos
un apartado "Aplicaciones" para ver todas las aplicaciones instaladas en el móvil y desde donde
podemos añadirlas a la página de inicio.

El Fiori Launchpad funciona igual: Tenemos nuestra página de inicio (un "escritorio web") donde
podemos mostrar y organizar las aplicaciones que más usemos y ocultar el resto. Luego
tenemos una sección de Catálogos donde vemos todos los catálogos disponibles (tendremos
asignados aquellos relacionados con nuestro rol en la empresa) y, por tanto, todas las
aplicaciones que podemos usar. Desde allí podremos asignar las aplicaciones que nos interesen
a la página de inicio.

La diferencia más importante a clarificar entre cómo funciona un móvil y cómo funciona el Fiori
Launchpad es que Fiori es un portal web, así que no tenemos que instalarnos aplicaciones en
nuestro equipo, ya que estas realmente son "páginas web" que se incrustan en el Fiori
Launchpad cuando las abrimos.

SAP UI5
Aquí ya estamos hablando del lenguaje de programación que vamos a usar. Podríamos añadir a
nuestro currículum aquello de "yo sé programar en SAP UI5" pero no "yo sé programar en Fiori"
(aunque podríamos decir "yo sé programar para Fiori").

Realmente no es un lenguaje en sí propiamente dicho, sino una librería HTML5 que nos
proporciona una infinidad de funcionalidades, como crear tiles, botones, textos, formularios,
posicionarlos en la página, reaccionar a eventos, hacer los componentes responsive para que se
adapten al tamaño del dispositivo... Llamémoslo framework para desarrollar aplicaciones web,
para que suene más cool.

El lenguaje de programación que usaremos será Javascript y, como lenguaje de etiquetado,


XML.

SERVICIOS ODATA
Las aplicaciones de SAP Fiori obtienen los datos de SAP mediante servicios oData, un protocolo
de comunicación abierto basado en HTTP: Solicitas los datos y los recibes mediante URLs.
Harían las veces de Web Services o módulos de funciones remotos que hayamos podido hacer
en SAP para otros desarrollos.

Estos servicios oData se crean y gestionan en SAP mediante un componente llamada SAP
NetWeaver Gateway y obtienen los datos de negocio mediante clases ABAP.

En resumen, la aplicación web hace una llamada mediante un método HTTP al Gateway de SAP,
que ejecuta una clase en ABAP para obtener los datos y devuelve dichos valores como
respuesta a la llamada HTTP.

Puedes echar una ojeada a este post para entrar más en detalle.

NETWEAVER GATEWAY
SAP NetWeaver Gateway (o "el Gateway" a secas) es el componente de SAP que se va a
encargar de extraer la información que tenemos almacenada en SAP y publicarla para poder ser
utilizada en nuestro portal Fiori (o cualquier otra herramienta, que no tiene por qué ser Fiori,
por supuesto). Viene por defecto instalado con SAP NetWeaver 7.40.

El Gateway estará instalado en el front-end, donde expone los servicios oData al exterior para
que puedan ser consumidos. Por ejemplo, por las aplicaciones SAP UI5 que estaremos
desarrollando para Fiori.

La información la obtiene consultando el SAP back-end, donde hay una pequeña parte del
Gateway instalada (el componente BEP), que nos permite crear unas clases ABAP (las Data
Provider Classes) a partir de las cuales obtendremos la información.

4 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

SAP Portal no dispone de Gateway. En este escenario, SAP Portal lo único que hace es "pintar"
la parte web. Pero para la obtención de datos siempre necesitará un front-end ABAP al que
consultar (que a su vez le solicitará la información al back-end).

Por su lado, SAP Cloud Platform dispone de un servicio llamada oData Provisioning que hace las
veces de Gateway en la nube, que consultaría a su vez con el SAP back-end que tenemos.

Puedes ver más detalles del Gateway en este post.

FIORI LAUNCHPAD DESIGNER


A la hora de crear Catálogos y Grupos, SAP (en on-premise) nos proporciona una herramienta
para crearlos. Es el Fiori Launchpad Designer, la fábrica de los catálogos.

Es un servicio web al que podemos acceder con la url:

https://<servidor>:<puerto>/sap/bc/ui5_ui5/sap/arsrvc_upb_admn/main.html?sap-
client=<tu_mandante>&scope=CONF

Scope hace referencia al tipo de alcance, que puede ser CONF (configuración) y CUST
(customizing).

El primero (CONF), es común para todos los mandantes. Es donde SAP despliega sus
catálogos estándar.

El segundo (CUST), es específico para cada mandante. Lo suyo suele ser trabajar en
este scope.

Los catálogos disponibles en CONF también lo están en todos los CUST y cualquier modificación
en CONF se aplica a CUST, excepto si lo hemos modificado, en cuyo caso deberíamos
restablecer la herencia si quisiésemos aplicar los cambios.

5 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

Y ojo, quien habla de catálogos, también habla de grupos, que se configuran en la misma
herramienta y de forma muy parecida.

CATÁLOGOS
El catálogo es el "objeto" que vamos a usar para agrupar las aplicaciones por funcionalidad. Un
usuario con un determinado catálogo asignado tendrá acceso a todas las aplicaciones de ese
catálogo.

Hay que dejar claro que a los usuarios nunca les vamos a asignar aplicaciones sueltas, sino
catálogos. Si un usuario tiene X catálogos con Y aplicaciones, el usuario tendrá acceso a todas
esas X * Y aplicaciones.

Por ejemplo, en Fiori HCM existe el catálogo "Employee Self-Service", ESS, que contiene las
aplicaciones comunes para todos los empleados de la empresa: Solicitar absentismos, ver datos
personales, visualizar la estructura organizativa y buscar datos de compañeros, etc. Todos los
empleados de la empresa (al menos los internos) tendrían este catálogo asignado.

Por otro lado, existe el catálogo "Manager Self-Service", MSS, que es sólo para aquellos que
tienen gente a su cargo (vamos, los jefes): Validar absentismos, ver el calendario de su equipo.
etc.

Un empleado común (por ejemplo, Mortadelo) sólo tendría asignado el ESS, mientras que un
jefe (Filemón), tendrá el ESS y el MSS.

La forma en la que se crea un catálogo es diferente dependiendo del escenario en el que


estemos trabajando:

Si nuestro SAP es on-premise, el catálogo lo creamos a través del Fiori Launchpad


Designer que hemos mencionado antes. A los usuarios se los asignamos mediante
roles PFCG.

El catálogo define las aplicaciones disponibles mediante dos tipos de elementos:


Target-Mappings (que nos dicen cómo cargar la aplicación) y tiles (que nos muestran
el recuadro en la pantalla y llaman al target-mapping correspondiente).

Si usamos SAP Portal, los catálogos se llaman categorías y se definen como


propiedades en una iView única. Después, a cada iView en el portal le asignamos las
categorías en las que están incluidas.

Las iViews se asignan a los usuarios como toda la vida, mediante la asignación de
roles de portal. En el desktop de Fiori, se visualizarán aquellas iViews que tengan
asignada una o más categorias. Podemos verlo más claro en este post.

Si usamos SAP Cloud Platform, los catálogos se asignan a los usuarios mediante
funciones o roles. Es muy similar al on-premise, pero no almacenan tiles y target-
mappings, sino sólo un tipo de elemento, aplicaciones. Podemos ver más información
en este post.

GRUPOS
Los grupos nos sirven para hacer conjuntos de aplicaciones dentro la página de inicio del Fiori
Launchpad.

6 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

Pueden ser de dos tipos. Esta definición no existe como tal, sino que la hago yo para que quede
claro:

En el Fiori Launchpad, un usuario se puede crear un grupo propio y asignar


aplicaciones de sus catálogos a ese grupo. Puede darle el nombre que quiera y
asignar las aplicaciones que quiera, aunque no tengan relación. También puede borrar
el grupo en cualquier momento que él quiera.

Por otro lado, el administrador Fiori también puede crear grupos, una configuración
similar a la que se hace con los catálogos, mediante el Fiori Launchpad Designer en
SAP on-premise. Estos grupos se asignan mediante roles (en la PFCG si estamos en
on-premise, como roles de SAP Cloud Platform y como una propiedad de las iViews
en SAP Portal).

Cuando un usuario tiene un grupo asignado de esta forma, dicho grupo le va a


aparecer automáticamente en el portal, incluso aunque él no lo haya creado ni
asignado. Puede borrar las aplicaciones del grupo y asignar nuevas, pero no puede
borrar el grupo, sólo reiniciarlo (con lo que se volverán a ver las aplicaciones
asignadas inicialmente).

¿Y para qué nos pueden valer los grupos configurados en Fiori? Para dos cosas:

Para proponer las aplicaciones iniciales del Fiori Launchpad. Cuando un usuario
accede por primera vez a Fiori, si no tiene grupos asignados, le aparecerá una página
de inicio en blanco. Seguro que entonces pone una incidencia diciendo que su portal
web no funciona, que no le muestra nada. Posiblemente no se habrá leído el manual
básico que se habrá creado para que la gente sepa cómo usar el portal. Si se asignan
grupos, tendrán unas aplicaciones iniciales propuestas y luego ya se podrá organizar
como quiera.

Para evitar la personalización: Un error muy común con SAP Portal era que los
usuarios ocultaban enlaces, tablas, botones, en su portal mediante una opción de
personalización que aparecía al pulsar el botón derecho sobre un elemento. Esto
generaba muchísimas incidencias que no eran tales, en plan "es que no me aparece
la tabla... no, no, yo no he tocado nada", pero sí que había tocado algo, lo que pasa
que no se acordaba o no se había enterado.

Aunque hemos dicho que un usuario puede organizar su página de inicio como quiera,
se puede elegir desactivar esta opción para evitar esos errores de personalización. El
usuario no podría eliminar aplicaciones de su Fiori Launchpad. Pero claro, tampoco
podría añadirlas. Así que con los grupos crearíamos una asignación de aplicaciones
por defecto en la página de inicio, común para todos e intocable. Esto sería útil para
portales que tienen pocas aplicaciones y todas son muy usadas.

A tener en cuenta una cosa muy importante: En el grupo asignamos mosaicos (o aplicaciones)
de forma similar a como se hace con los catálogos. No obstante, el grupo no da autorización
para ejecutar la aplicación, simplemente nos muestra el mosaico. Si esa aplicación no la
tenemos asignada en algún catálogo, no podremos acceder y nos dará error. Así que tendremos
que duplicar dicha información: Un catálogo para ver qué aplicaciones tenemos y un grupo para
ver lo que se muestra en nuestra página de inicio. Y os preguntaréis, ¿eso no es como duplicar

7 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

la configuración? Pues sí, la verdad, para qué engañarnos.

En SAP Portal no existen los grupos "de administrador" como tal. En su lugar, las iViews tienen
una propiedad, "Default App in Home Page", para hacer que la aplicación se muestre por
defecto en la página de inicio, sin necesidad de que el usuario la seleccione.

MOSAICOS (TILES)
Los mosaicos o tiles son los recuadros que nos aparecen en Fiori Launchpad y que, cuando
pulsamos, carga una aplicación. Básicamente es un link en forma de botón cuadrado grande
dentro de nuestro Fiori Launchpad.

Los mosaicos pueden ser estáticos, dinámicos (que muestran un número informativo, por
ejemplo el número de solicitudes que tenemos pendientes; de esta manera sólo entramos en la
aplicación si vemos que hay algo pendiente) o incluso KPIs (que nos muestran un indicador
clave y, si nos interesa ver el detalle, lo pulsamos; esto es más para aplicaciones analíticas).

Los usuarios pueden ordenar los mosaicos dentro de su página de inicio como queramos (a no
ser que se haya desactivado la personalización).

Los tiles, en on-premise, los configura el administrador Fiori mediante el Fiori Launchpad
Designer, dentro de cada catálogo.Pero esta configuración no guarda la aplicación web que van
a ejecutar, sino un objeto semántico y una acción. Si el usuario pulsa ese tile, estará llamando
a ese objeto semántico y acción, haciendo una especie de llamada por eventos que se llama
navegación por intención.

Este elemento es exclusivo como tal de SAP on-premise. En SAP CP forma parte de las
aplicaciones, como una propiedad adicional, pero no como un objeto independiente, mientras
que en SAP Portal los mosaicos serán las iViews que hayamos configurado para ser visualizadas
en el desktop de Fiori.

TARGET MAPPINGS
El target mapping es el que se encarga de determinar dónde está la aplicación a la que se
navega. Se define gracias a la combinación de dos elementos, un objeto semántico y
una acción.

Este elemento hace las veces de "escuchador de eventos". Si alguien llama a ese objeto
semántico y acción, el target mapping se entera y determina la aplicación a la que se navega.

El administrador de Fiori los crea en cada catálogo mediante el Fiori Launchpad Designer.

Este elemento es exclusivo de SAP on-premise y no existe como tal ni en SAP CP ni en SAP
Portal.

8 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

APLICACIONES
Las aplicaciones son los elementos específicos que hemos instalado en nuestro SAP on-premise
o que hemos configurado en SAP CP: Crear una solicitud de viajes, ver nuestro inbox de tareas,
hacer un pedido de compras, etc.

Son un componente SAP UI5 que realmente no necesita un index.html porque serán cargadas
dentro del Fiori Launchpad.

No tenemos que instalarnos nada en nuestro ordenador o en nuestro móvil, pero sí tenemos
que hacerlo en SAP on-premise.

Podemos ver las aplicaciones Fiori estándar en la librería de Fiori.

Pero además de eso, dentro de un sitio de SAP CP las aplicaciones son un objeto dónde
indicamos qué aplicación específica se ejecuta, a qué catálogos y grupos está asignada, cómo
está configurado el mosaico que se va a mostrar en el portal y qué objeto semántico y acción
estará escuchando. Aquí podemos ver cómo configurarlas.

OBJETO SEMÁNTICO, ACCIÓN Y NAVEGACIÓN POR


INTENCIÓN.
Cuando asignamos aplicaciones en Fiori on-premise, les tenemos que asignar un mosaico y un
target-mapping (o definir la aplicación en SAP Cloud Portal). Estos dos elementos se asocian, a
su vez, por algo similar a "eventos: La navegación por intención (intent navigation).

Esta navegación, a su vez, se compone de dos elementos, objeto semántico y acción.

Lo que tenemos es una especie de navegación "por escucha de eventos". Es más o menos lo
mismo. El target mapping guarda la información de dónde está la aplicación que se va a

9 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

ejecutar, así como un objeto semántico y una acción (siempre vienen en parejas, como los
droides de Star Wars).

Después, a los mosaicos les asignamos también un objeto semántico y acción, pero no la
aplicación.

Cuando el usuario pulsa en el portal un tile, lo que está haciendo es "invocar" esa navegación
por intención. Después, se comprueban los distintos target mappings y se ejecuta aquel que
tiene asignada esa navegación.

Técnicamente, esta operación la realiza el servicio oData INTEROP, que es uno de los servicios
básicos que hay que activar para que funcione Fiori.

Los que hayan montado sus portales en SAP Portal y en NetWeaver Business Client (que sería
la versión SAP Portal puramente en ABAP, sin depender de una pila Java), puede que se hayan
encontrado con el concepto de OBN (Object-based Navigation, navegación basada en objetos).
La navegación por intención, a la hora de la verdad, viene a ser lo mismo.

¿Y dónde se definen los objetos semánticos y las acciones?

Los objetos semánticos, para on-premise, existen en dos tablas: Una estándar de SAP (que no
deberíamos tocar), que es la /UI2/V_SEMOBJ, y una para cliente, /UI2/V_SEMOBJC, donde
podemos crearnos nuevos objetos semánticos.

Las acciones no se tienen que definir en ninguna parte y pondremos la que nos dé la gana en
cada target-mapping (pudiendo reutilizar el mismo objeto semántico para múltiples target-
mappings). SAP recomienda definirlas con formato camel (esteEsUnEjemploDeAccion).

LAUNCHPAD EN EL ECC
Cuidado, que ya no estamos hablando del Fiori Launchpad, sino de la rampa de lanzamiento o
Launchpad que está dentro de SAP. Se ejecuta con la transacción LPD_CUST.

El Launchpad se usa como contenedor de aplicaciones, guardando la información de qué tipo de


aplicación es (URL, transacción, Web Dynpro ABAP) y dónde está ubicada.

No es algo específico de Fiori, viene ya de antiguo. Por ejemplo, el Autoservicio del Empleado
(ESS) de HCM en Web Dynpro ABAP usaba el Launchpad para determinar qué aplicaciones se
mostrarán en el portal.

Los target-mappings estándar, por defecto, determinan la aplicación que se ejecuta leyendo
una entrada dentro del LPD_CUST. Se les pasa tres parámetros: El rol e instancia del
launchpad donde está la aplicación, y el alias de dicha aplicación (que es una propiedad de las
aplicaciones).

Esto ya ha cambiado y no es necesario usar el Launchpad en las versiones más modernas (lo
puedes rememorar en este post).

Cada launchpad, que agrupa aplicaciones por funcionalidad, tiene un nombre compuesto por
dos valores: Rol e instancia. Es decir, para identificar una rampa de lanzamiento específica
tienes que indicar estos dos valores.

Después, dentro del launchpad, habrá una organización de carpetas y aplicaciones. Cada una
de estas aplicaciones contiene la información de cómo ejecutarla: Si es una URL (por ejemplo,
para aplicaciones SAP UI5), si es una Web Dynpro, si es una transacción, etc.

TEMA

10 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

El tema (theme) es la combinación de colores, imágenes, fuentes y hojas de estilos que


permiten definir cómo se va a visualizar el portal. Existen varios temas por defecto, pero lo
suyo es crearse un tema específico para la empresa, para poder así aplicar los colores
corporativos. Para crearlo siempre partiremos de uno estándar.

Los temas se crean mediante el UI Theme Designer, herramienta que está disponible tanto en
SAP on-premise (mediante la transacción /UI5/THEME_DESIGNER) como en SAP Portal (dentro
del Content Administration) y en SAP CP (como servicio del portal).

Para transportarlos, hay que usar una herramienta adicional: la transacción /UI5/THEME_TOOL
en on-premise, el método genérico de transporte en SAP Portal (en System Administration) o la
propia herramienta de diseño en SAP CP.

Por último, en SAP on-premise el tema utilizado por defecto está definido en la tabla
/UI2/NWBC_CFGV, con los valores filter = SAP_FLP y parameter name = THEME. Pero si
queremos cambiarlo, lo debemos hacer en la tabla de cliente /UI2/NWBC_CFGV.

El tema actual estándar para Fiori 2.0 es el Belize, mientras que para Fiori es BlueCrystal. Se
pueden ver los distintos temas estándar en esta página.

FIORI 2.0
Se trata de un paso adicional en la filosofía de diseño de Fiori, añadiendo nuevos componentes
técnicos adicionales: Un nuevo tema llamado Belize, un área de notificación de mensajes, un
tipo de componente (Overview Page), etc.

Para poder usar Fiori 2.0 necesitaremos instalar una versión bastante reciente de SAP UI5 en
nuestro front-end, no nos vale cualquiera (el Fiori Front-End server 3.0 (que es el SAP_UI
7.51).

11 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

OVERVIEW PAGE
El Overview Page es un componente que viene con Fiori 2.0. Como bien indica su nombre, es
un tipo de "página".

Este componente se puede usar para crear aplicaciones en las que agrupar, en una misma
página, toda la información relacionada con una línea de negocio o funcionalidad en una misma
página. Por tanto, nos podemos crear una aplicación que use este componente y que se abra
desde la página de inicio, tras pulsar un mosaico, como cualquier aplicación normal.

La información que se muestra lo hace agrupada en tarjetas (recuadros con listas y/o gráficos),
que además nos permiten navegar a una aplicación específica.

De esta manera, no sólo agrupamos la información, sino que añadimos un nivel adicional de
navegación en Fiori, ya que hasta ahora sólo se podía tener un listado de tiles en nuestra
página inicial y de ahí navegar a una aplicación específica, no a otro grupo de aplicaciones.

Publicado por JorGCalleja

Etiquetas: fiori, gateway, oData, sapui5

11 comentarios:
Naoto Amari 12 de enero de 2018, 17:47

jajajajja esta es como la cuarta cosa que leo de ti es que esta muy bueno gracias de nuevo, una
cosita si me puedes aclarar a la hora de crear un targin mapping stiene que especificar el objeto
semantico y este es igual al nombre de la aplicacion es que asi lo vi en el libro que estoy leyendo
crean un launchpad y una aplicacion y luego le dan el alias de SalesOrder cuando van a target en
la parte de objeto semantico le dan el mismo nombre al alias, esto es realmente necesario o
puede ser otro nombre?; y una accion (no entendi mucho su funcionalidad es como un nombre
solamente?) luego en este mismo paso se configura el target y aqui se le indica el rol, instancia y
el nombre de la aplicacion pero no entendi mucho lo de LPD_CUST si me lo podrias aclarar un
poco

Responder

Respuestas

JorGCalleja 13 de enero de 2018, 1:19

Cuando tienes una aplicación en SAP (es decir, el front-end es SAP y no SAP Cloud
Platform), una de las formas de crear el target mapping es usando los objetos
almacenados en la transacción LPD_CUST, que en este artículo se llama "Launchpad en
ECC". En la LPD_CUST (para nuestro interés) guardas la información de las
aplicaciones que se van a llamar desde Fiori.

Si amplias la imagen de ese apartado, en la parte derecha y abajo del todo verás que
hay un campo llamado "Aplication Alias". Ahí pondrás el nombre que quieras, y ese
nombre lo usarás luego en el target mapping para que Fiori sepa cómo recuperar la
aplicación: Lo hará con la terna Rol-Instancia-Alias de aplicación

12 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

Responder

LaZurda1234 16 de julio de 2018, 17:55

Hola, que tal.


Tengo un problema y quisiera consultar a ver si me pueden ayudar.
Quiero activar una aplicacion estandar que encuentro el app library, la aplicacion es la 'Confirm
Jobs' y el catalogo en el que se encuentra es el 'SAP_TC_EAM_BE_APPS'. El problema es que
cuando ingreso al launchpad designer, y busco el catalogo, no lo encuentra. Alguna idea de como
activarlo/verlo en el launchpad designer? para poder activar esta aplicacion. Muchas gracias.

Responder

Respuestas

JorGCalleja 17 de julio de 2018, 19:15

¿Tienes instalado el componente correspondiente en el front-end?


Mira en la ayuda de la aplicación, para ver el componente necesario, en
Implementation Information - Installation - Front end component. En este caso, es el
UIS4HOP1 300
https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#/detail
/Apps('EAMS_WDA_CONF_OIF%2520(EAMS_WDA_CONF_OIF_CFG)')/S11OP

Responder

Unknown 5 de septiembre de 2018, 21:00

Hola, hay alguna manera de ver los catalogos o grupos de catalogos como se ven las
transacciones asignadas a un x role? Gracias!!

Responder

Respuestas

Unknown 5 de septiembre de 2018, 21:01

O sea, quiero ver los catalogos o grupos que estan en una cierta cantidad de roles. Por
ejemplo alguna tabla o algo?

JorGCalleja 6 de septiembre de 2018, 9:01

Hola,

Puedes ver los catálogos y todas sus propiedades, como por ejemplo roles de la PFCG
en la que están asignados, con la transacción /n/ui2/flc.

Tienes una selección, Adaptation Layer, para elegir si quieres ver los catálogos de CONF
o de CUST, así que tendrás que ejecutarlo dos veces para obtener todo el listado (a no
ser que sólo trabajes con CUST).

Unknown 6 de septiembre de 2018, 15:23

Muchas gracias!! Me ha sido de mucha ayuda su explicación. Saludos Andres Ruiz

Responder

Edgar 18 de septiembre de 2018, 19:03

Buenas tardes, muy buen aporte y se entiende muy facil, quisiera pedir un poco tu ayuda, tengo
el siguiente inconveniente a la hora de activar una apps estandar, especificamente la VA01,
busque el catalogo y lo asigne a un rol y puedo verlo en el launchpad, pero a la hora de acceder
a la aplicacion me da error y me indica que el servicio SMART_BUSINESS_RUNTIME_SRV no esta
disponible, lo busco en la transaccion para mantenimiento de servicios pero no me aparece para
activarlo ni para agregarlo, que crees pueda estar faltando?

Muchas gracias por tu ayuda.

Responder

Respuestas

JorGCalleja 19 de septiembre de 2018, 7:19

Hola, Edgar, es complicado saberlo :( , ¿Has comprobado si el componente oData está


instalado? ¿el servicio oData está en el mismo servidor que la app o en otro servidor?
En este segundo caso tendrías que revisar el alias utilizado

13 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Primero de Fiori: Los palabros http://www.uxsap.com/2017/10/primero-de-fiori-los-palabros.html

14 of 14 9/25/2019, 8:17 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData.html

1 of 5 9/25/2019, 8:01 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData.html

Cada servicio oData es una agrupación "temática" de información. Generalmente se crea un


servicio oData por cada aplicación que vayamos a construir. El servicio tendrá, a su vez:
Una o varias entidades (entities), que son como las "estructuras" de información que
posee el servicio. Cada entidad tiene una serie de propiedades, que son los campos
de la entidad.
Por cada entidad puede existir una colección (o entitySet), que es la "tabla" que nos
devolverá la información.
Un documento de servicio, que se obtiene llamando directamente a la URL del
servicio oData, y que nos mostrará la colecciones disponibles en el servicio.
El documento metadata (EDMX), que podemos obtener con la URL
MI_SERVICIO/$metadata, y que nos proporciona toda la información del servicio
(entidades y sus propiedades, colecciones, y otros elementos).
Mediante el documento de servicio y el documento metadata, obtendremos la información del
servicio. Las entidades nos proporcionan la estructura del documento. Mediante las colecciones,
obtendremos la información.

Vamos a poner dos ejemplos, uno teórico y uno práctico.

Ejemplo 1: Servicio oData de Solicitud de absentismos


La aplicación de Fiori "Solicitud de absentismos" (My leave requests) se usa para que un
empleado pueda pedir y comunicar ausencias a su manager (vacaciones, enfermedad, etc).
Esta aplicación utiliza un servicio oData para mostrar dicha información, llamado
HCM_LEAVE_REQ_CREATE_SRV. Algunas de sus colecciones son:
AbsenceTypeCollection: Que es la que nos devuelve los tipos de ausencia que
podemos elegir, y que luego la aplicación añadirá a la ayuda de búsqueda.
ApproverCollection: Nos devuelve los aprobadores del empleado. Así sabe a quién le
va a llegar la solicitud.
LeaveRequestCollection: Nos devuelve los absentismos que tenemos creados en el
sistema para nuestro número de personal. De esta manera sabemos lo que hemos
pedido y en qué estado se encuentra.
TimeAccountCollection; Nos devuelve los derechos de ausencia que tenemos. Así
sabemos cuantos días de vacaciones aún tenemos por solicitar.

Ejemplo 2: Servicio oData de Nothwind


Podemos ver un ejemplo práctico, gracias al servicio oData de Northwind, que es accesible
públicamente sin pedir usuario ni contraseña, mediante los siguientes enlaces:
Documento de servicio: http://services.odata.org/V4/Northwind/Northwind.svc/
Documento metadata: http://services.odata.org/V4/Northwind/Northwind.svc
/$metadata
Ejemplo de colección Customers: http://services.odata.org/V4/Northwind
/Northwind.svc/Customers

La URL del servicio oData en SAP


El formato de la URL para solicitar cualquier colección de un servicio oData en SAP es /sap/opu
/odata/sap/MISERVICIO/NombreDeLaColeccion.

La llamada es case-sensitive, es decir, que debemos tener cuidado con las mayúsculas y
minúsculas.

Para que esta URL esté accesible, es necesario activar el servicio oData en la SICF. Aunque eso
también lo hará el Gateway automáticamente por nosotros.

Y ojo, esto es importante... cuando envías datos mediante un servicio oData, aunque luego en

2 of 5 9/25/2019, 8:01 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData.html

la aplicación no pintes todos eso datos, el usuario puede ser capaz de ver todos los datos. ¡Le
vale con consultar en su navegador las herramientas de desarrollador, F12! ¿Qué quiere decir
esto? Que nunca debemos crear un servicio oData con más información de la que pueda ver el
usuario, aunque pensemos que no lo va a mostrar la web. Siempre enviamos la justa (o la que
no sea confidencial). Los datos tendremos que filtrarlos, por tanto, en la parte ABAP.

ARQUITECTURA
Un último detalle a tener en cuenta, referente al Gateway, es la arquitectura sobre la que está
montado.

Pensando tanto en un entorno Fiori o sólo aplicaciones SAP UI5 independientes (aquello que
llaman aplicaciones standalone), la arquitectura más básica se basará en dos servidores, que
no son más que dos SAP NetWeaver.

Uno de ellos hará de Front-End, que es donde están las páginas web que el usuario visitará y
donde el Gateway publica los servicios oData para que la gente los pueda usar.

El otro (u otros) será el Back-End, que es donde estarán los datos y donde habrá una pequeña
porción del Gateway (un componente llamado IW BEP) que usaremos para desarrollar nuestras
clases DPC.

El Front-End mostrará la página web al usuario y le pedirá al Back-End (mediante una conexión
segura y de confianza) los datos para enlazarlos en la web. Hará las veces de traductor (la URL
la transformará a ABAP y el ABAP a XML) y de proxy inverso (el usuario creerá que los datos
están en el Front-End pero realmente vienen del Back-End... ¡el usuario nunca sabrá de dónde
salío esa información!). Esto añade, además, más seguridad, ya que se puede hacer que el
Front-End esté expuesto al exterior (vulnerable a ataques) pero no el Back-End (los datos están
a salvo).

¿Y por qué puede haber varios Back-End? Pues porque puede que tengamos un servidor Back-
End para HR, otro para Finanzas, otro para MM, etc. El Front-End tendrá parametrizado una
serie de conexiones (los Alias de Sistema) que le dirán, en todo momento, de donde obtener
los datos de cada servicio oData.

Básicamente y hablando mal y rápido (es una analogía para entenderlo mejor), el Front-End
haría las veces de lo que hasta ahora teníamos en el SAP Portal. Las aplicaciones Web estarán
en el Front-End (como pasaba con las Web Dynpro Java) y los datos en el Back-End.

El esquema básico, que es lo que SAP llama despliegue en Hub es el siguiente:

Una posible disposición más sencilla es montar el Front-End y Back-End la misma máquina. En
ese caso, el Gateway "se conecta consigo mismo": Todavía hace falta crear un alias de sistema
y una conexión de confianza, pero será para conectarse él. El Gateway no se fía ni de si mismo,
oye.

Esta arquitectura es la denominada Embedded deployment, o despliegue integrado. No es la


aconsejada, sobre todo si tienes varios Back-End, pero si sólo tienes un Back-End está claro
que será más barata. Aunque eso supondrá que si la expones al exterior expones toda la
máquina, no sólo la parte web.

3 of 5 9/25/2019, 8:01 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData.html

¡Pero todavía lo podemos complicar un poco más! Si tenemos la aplicación en el SAP HCP (ya
sea porque estamos desarrollándola o porque la hayamos colgado en el portal de SAP HCP), el
despliegue será el siguiente:

Y si queremos aprovechar que nuestra cuenta también dispone de su propio Gateway,


podríamos incluso llevar todo el Front-End al HCP. En ese caso, no necesitaríamos un servidor
Front-End propio, sólo losBack-End, al que apuntaríamos desde HCP con un destination por
cuenta.

Pero siempre que usemos el SAP HCP, tendremos que pensar también en cuentas de usuario e
historias de esas. Cosas que de momento dejamos, para que no nos quiten el sueño.

El próximo paso es ponernos con la parte práctica: crear nuestro propio servicio oData en SAP.

Publicado por JorGCalleja

Etiquetas: gateway, Northwind, oData, teoria

5 comentarios:
Iván castillo 5 de junio de 2017, 19:27

Excelente, síntesis...

4 of 5 9/25/2019, 8:01 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData.html

5 of 5 9/25/2019, 8:01 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

1 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Aquí activaremos el servicio oData, indicaremos un alias de sistema y lo publicaremos


al exterior, activándolo en la SICF,
Para que el servicio oData entienda lo que le preguntan (la solicitud realizada por la
aplicación web) y sepa lo que tiene que enviar, tiraremos código en las clases que nos
ha generado el proyecto. Y no nos preocuparemos por tener que parsear la URL que
nos llega, ni por tener que generar un fichero XML. Lo haremos todo en ABAP y es el
Gateway el que hará de traductor oficial con la aplicación web.

PERMISOS Y ALIAS DE SISTEMA


Antes de nada, vamos a necesitar un alias de sistema para que el Gateway sepa donde
consultar los datos del servicio que expone. Si alguien ya ha montado Fiori o alguna aplicación
independiente antes que nosotros, seguramente ya estará creado y podemos utilizarlo. Pero a
lo mejor nos toca crearlo a nosotros. Es más, si nadie ha montado ningún servicio oData hasta
ahora puede que la parametrización esté en pelotas y este tutorial se quede corto.

El alias de sistema es una parametrización que nos indica dónde está realmente el servicio
oData. ¿Qué quiere decir esto? Pues que el servicio oData realmente se genera en un Back-
End, que es el servidor SAP donde están los datos. Pero la aplicación que llama al servicio está
en el Front-End, que es otro servidor SAP. El Gateway del Front-End usa los alias para saber en
qué servidor está cada servicio oData.

Por supuesto, podemos usar como Back-End y Front-End el mismo servidor (distribución
integrada), pero el alias lo necesitaremos igualmente.

El alias se puede crear en la IMG, SAP NetWeaver -> Gateway -> OData Channel ->
Configuration -> Connection Settings -> SAP NetWeaver Gateway to SAP System -> Manager
SAP System Aliases.

Cada entrada apunta a una back-end en particular. Si nuestro Back-End y Front-End es el


mismo, nos valdría algo como lo siguiente:
SAP System Alias: LOCAL. O el nombre que quieras.
Local GW: Marcado.
RFC Destination: NONE. Apunta a sí mismo.
Software version: DEFAULT.
Podríamos crearnos un alias usando una RFC o indicando directamente un sistema y un
mandante, pero esto último en un entorno de desarrollo-calidad-productivo nos daría
problemas porque esta tabla se transporta, y el alias se asigna al servicio oData... así que al
final tendríamos un servicio oData en producción asignado a un alias de sistema que apunta a
un back-end de desarrollo. Así que mejor tirar de RFC que de sistema-mandante.

Además de tener en cuenta el alias de sistema, debemos tener en cuenta los permisos.

Digamos que trabajamos en un entorno de desarrollo donde tenemos SAP_ALL. Genial,


estamos en modo Dios, ¿todo solucionado? Pues no.

Para los servicios oData se utiliza un objeto de autorización que no está incluido en el SAP_ALL.
así que tenemos que asignárnoslo igualmente. Este objeto de autorización es el S_RFCACL. Por
no entrar en detalles de configuración, podemos crearnos un rol con este objeto y todo
asteriscos, sólo para pruebas. Lo suyo es generarlo bien y no con *, pero no es el objetivo de la
práctica.

También se necesita una autorización específica para cada servicio oData creado, pero como
todavía no tenemos nuestro servicio creado, ¿cómo narices vamos a crear esta autorización?
Eso lo vemos una vez creemos el servicio. Se puede obtener más información en este enlace.

LA ESTRUCTURA Y LA TABLA DONDE TENEMOS LOS


DATOS
Para poder trabajar en SAP con los datos, nos crearemos una estructura en el diccionario de
datos (la SE11). En nuestro caso, sería algo como esto.

2 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Después, nos creamos una tabla con la misma estructura (aquí sí que iría mandante, claro). El
Id y el idioma (spras) serán campos clave. Hacemos la tabla de tipos aplicación, le creamos
una vista... vamos, lo normal para que podamos introducir datos por la SM30 y no nos pida
orden de transporte.

CREAR EL PROYECTO
Ahora entramos en la SEGW, para crear el proyecto. Una vez creado y activado el proyecto se
nos creará el servicio oData y las clases ABAP.

Nada más entrar, le damos a la hoja en blanco para crear el proyecto.

Después, definimos las entidades. En nuestro caso, sólo una entidad.

3 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Cuando la creamos, nos pregunta el nombre y si queremos añadir una nueva colección (entity
set) relacionada con dicha entidad. Marcamos el checkbox para que nos la cree
automáticamente.

Tenemos que enlazar la entidad con la estructura ABAP en la que se va a basar.

Después definimos los campos que va a tener la entidad. Estos campos no tenemos por qué
llamarlos igual que los de la estructura, ni tenemos por qué usar todos. CUIDADO: El nombre
de las propiedades es case-sensitive (sí, ABAP nos tiene mal acostumbrados).

Para cada propiedad hay que especificar de qué tipo es (por ejemplo, Edm.String si queremos
que sea una cadena de caracteres) y mapearla con un campo de la estructura. El tipo que
elijamos es algo específico del protocolo oData, así que no se va a ajustar al 100% a nuestros
elementos de datos de ABAP (al activar puede darnos muchos warning diciendo algo así como
"ojo, que el ajuste no es perfecto"... poco le podemos hacer).

Un cambio importante si vamos a utilizar el servicio oData con el Web IDE, es marcar la casilla

4 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Addressable para la colección. Para este tutorial no nos va a aportar nada, pero sí que nos
influirá al construir nuestra aplicación en el Web IDE, ya que si no lo marcamos no nos
aparecerá en los desplegables del Template. Esto lo veremos en el siguiente tutorial.

Por ahora, lo que hacemos es ir a la carpeta Entity Set, seleccionar la colección (doble clic) y
nos aparecerá a la derecha un listado con todas las colecciones. Pues ahí marcamos la casilla
Addressable.

Tras estos cambios, activamos.

Al hacer esto nos aparece una pantalla preguntándonos que nombre le queremos dar a las
Provider Classes, que son las clases con las que vamos a trabajar. Específicamente
trabajaremos con la Data Provider Class (la que acaba con _DPC_EXT, aunque la podemos
renombrar).

También nos pregunta el nombre que recibirá el modelo (que se usará en diversas
parametrizaciones) y el nombre técnico del servicio. Este último campo es precisamente el
nombre con el que llamaremos a nuestro servicio oData (/sap/opu/odata
/sap/NOMBRE_DE_TU_SERVICIO).

LEER LA INFORMACIÓN
Al activar el servicio, nos crea las clases con las que vamos a trabajar. De esas cuatro clases, la
que más nos interesa ahora mismo es la DPC_EXT.

Esa clase (que hereda de la DPC), tendrá cinco métodos por cada entidad para tratar los datos:
Uno para leer un registro específico, otro para leer una colección, otro para actualizar datos,
otro para crear y otro para borrar. Es lo que llaman operaciones CRUD: Create, Read, Update
and Delete. En la SEGW podemos ver qué método tenemos que implementar para realizar la
operación correspondiente.

5 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

No hay por qué implementar todas las operaciones, sólo las que realmente nos interesen. Si
sólo queremos leer datos, ¿por qué vamos a definir una operación de borrado?

ACTIVAR EL SERVICIO
Que hayamos creado el servicio no quiere decir que podamos usarlo.

Antes de eso debemos activarlo. Y eso lo haremos con la transacción /n/IWFND


/MAINT_SERVICE. O, para los amantes de la IMG, SAP NetWeaver -> Gateway -> OData
Channel -> Administration -> General Settings -> Activate and Maintain Services.

Pulsamos el botón "Añadir servicio" para buscar el servicio que nos ha generado la SEGW.
Elegimos nuestro Alias de Sistema y pulsamos enter. Nos aparecerán un montón de servicios
externos, entre los que buscamos el nuestro. Lo seleccionamos y pulsamos "Añadir servicios
seleccionados".

Lo siguiente es rellenar los datos del servicio. En general, podemos dejar lo que nos
proporciona (sólo nos hará falta especificar el paquete, yo le he puesto el paquete local).

Pues si todo va bien y volvemos atrás, ya tendremos nuestro servicio creado. Además, nos
habrá activado dos cosas: La entrada en la ICF (transacción SICF), que en la imagen siguiente
es el recuadro inferior izquierdo, y la asignación al alias que hayamos escogido, en el recuadro

6 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

inferior derecho.

AUTORIZACIÓN AL SERVICIO
Ojo, si no tenemos un SAP_ALL vamos a necesitar autorización para usar dicho servicio. Se
necesitaría un rol en el Front-End y otro en el Back-End, cada uno con una entrada de menú de
tipo Propuesta de autorización - Servicio TADIR:
En el Back-End, se usaría el tipo de objeto IWSV e indicariamos el servicio.
En el Front-End, se usaría el tipo de objeto IWSG y nuestro servicio.

Una vez asignado el menú, iríamos a autorizaciones a dejar que se genere automáticamente la
autorización.

PROBAR EL SERVICIO
Tras activar el servicio, ya lo podemos probar. Podemos hacerlo dentro del Gateway o en un
navegador.

Si es en el Gateway, vamos a la opción "Gateway Client", donde obtenemos una pantalla como
la siguiente. Ahí podemos indicar, en Request URI, nuestro servicio. Si invocamos la colección
que hemos creado, lógicamente no nos mostrará datos, ¡todavía no hemos tirado ni una línea
en ABAP!

7 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

A TIRAR CÓDIGO
Ahora vamos a añadir el código. Nos vamos a la SE24, a la clase y método que nos indicaba en
la SEGW. El método estará sin implementar (hereda de la clase DPC), así que pulsaremos en el
botón de "Volver a definir método" para implementarlo.

Primero podemos crear el método GET_ENTITY. Este método nos devolverá una única entrada,
y requiere que se le pasen todos los parámetros clave en la URL del navegador. Eso se pasa en
este formato: /sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet(Id='00000001',Idioma=''). Ojo, no dejes
espacios en blanco entre los parámetros clave.

Podemos imaginar que el get_entity equivale a un select single.

En el parámetro del método IT_KEY_TAB recibiremos los parámetros pasados desde la URL, y en el parámetro
ER_ENTITY devolveremos el resultado. ¿Qué estructura tiene ER_ENTITY? La que definimos al principio, en la SE11,
y mapeamos con el servicio oData en la SEGW.

Después definiremos el método GET_ENTITYSET. Este método nos devolverá un listado de


valores, no sólo uno. Aquí no pasaremos campos clave, sino un filtro. Por ejemplo, algo como
esto...

/sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet

...para obtener toda la colección, o esto...

/sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet?$filter=Idioma eq 'EN'

...para obtener todos los textos en inglés.

El parámetro filter no es automático. Si queremos que se filtre por una propiedad específica, ¡lo tenemos que programar!
Si ponemos un filtro que no se usa, simplemente no se tratará. A la hora de determinar el uso del servicio seremos
nosotros los que establezcamos como se tiene que usar.

El filtro lo podemos recuperar de varios parámetros de entrada del método. En el ejemplo se recupera del parámetro
it_filter_select_options, que es una tabla de select options.

En este ejemplo sólo trato el filtro para el idioma e ignoro si viene con un EQ, BT, LT, etc... lo trato siempre como EQ...
porque yo lo valgo. Y si no se indica idioma, cojo el idioma por defecto del usuario SAP.

8 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

VER LOS RESULTADOS


Cuando ya hemos programado el ABAP, ya podemos ver los resultados en el Gateway Client.

Ahí tenemos un campo de texto, Request URI, donde podemos indicar la consulta que realizaremos. Nos puede resultar
muy útil los dos botones en la parte superior derecha: EntitySet, que nos mostrará un matchcode con las colecciones que
podemos usar; y 'Add URI Option', para añadir cadenas chulas como pueden ser $format=json para ver el resultado en
formato JSON en lugar de en XML o $metadata para leer el documento metadata.

Podemos probar las tres siguientes líneas para ver los resultados:

/sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet?$format=json

/sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet?$filter=Idioma eq 'EN'&$format=json

/sap/opu/odata/sap/ZMIS_TEXTOS_SRV/TextosGeneralesSet(Id='00000001',Idioma='')?$format=json

9 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Y con esto, ya hemos generado nuestro primer servicio oData y ya exponemos datos al exterior.
El siguiente paso es enlazarlo con nuestra aplicación web. Pero eso es ya otra historia.

Publicado por JorGCalleja

Etiquetas: ABAP, backend, frontend, gateway, IWSG, IWSV, oData, s_rfcacl, SEGW, tutorial

21 comentarios:
Mauro Herrera 19 de octubre de 2017, 18:44

Muy buena explicación, la verdad es que aprender a implementar servicios con SAP GATEWAY
será demasiado esencial para el futuro de SAP como base de datos y su exposición a sistemas de
MICROSOFT como sahare point, excel, además de otros sistemas, sin la necesidad de tener que
configurar proxys o procesos en PI, ya que el protocolo oData está siendo ampliamente usado en
arquitecturas REST. Gracias por el tutorial.

Responder

Respuestas

JorGCalleja 19 de octubre de 2017, 22:45

¡Muchas gracias por el comentario y por el aporte!

Responder

Santo A. Mota C. 28 de diciembre de 2017, 22:56

Buenisimo material, estoy esperando la sengunda parte.

Responder

Respuestas

JorGCalleja 5 de enero de 2018, 9:06

¡Gracias! Aunque esta era ya la segunda parte de la extracción de servicios oData. Si te


refieres a como enlazarlo con la parte web, mira en la página de tutoriales para ver los
distintos post relacionados ;) https://uxsap.blogspot.com.es/p/tutoriales.html

Responder

Naoto Amari 26 de febrero de 2018, 21:23

Una duda, la estructura y la tabla la creo en mi back end y alla la lleno ? sirve conectarme como
back end pero a desarrollo? es que algo asi me dijeron que esta configurado

Responder

Respuestas

JorGCalleja 26 de febrero de 2018, 21:59

Si, la estructura y el proyecto con la transacción segw se crean en backend, en


desarrollo, y posteriormente lo vas transportando a otros entornos.
La clase que editas para rellenar datos también está en el backend. Y lo suyo es que tu
web ide o eclipse se conecten con desarrollo para que crees tu app web, hasta que lo
despliegues en desarrollo->calidad->producción

10 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Naoto Amari 27 de febrero de 2018, 13:57

ok muchas gracias esa era mi duda, ese rol que creo en mi back end luego de
transportar de mi back end a mi servidor front-fiori luego de esto es que creo el rol con
permiso de usar ese servicio no ?Muchas gracias !

huanguelito 12 de abril de 2018, 16:45

Hola Jorge, Carlos, los felicito por el blog!


Consulta, si tengo el Gateway y Backend en distintos servidores. Antes creaba el
servicio odata en el Gateway e invocaba a RFC al Backend. Entiendo que seria mejor,
crear el servicio odata desde el Backend para evitar el uso de RFCs y declarar tantas
estructuras, pero como logro llegar al gateway que está en otro servidor?, sólo por la
configuración de los "Alias" en la vista "/IWFND/V_MGDEAM"?...necesito aclarar esta
parte. Agradezco sus comentarios! Saludos.

JorGCalleja 12 de abril de 2018, 18:46

Hola huanguelito,

Tienes que crearte, en el front-end, un alias que apunte al back-end. Recomendación,


no uses máquina-mandante al creártelo ya que hay que transportarlo, mejor crea una
RFC (SM59) en el front-end que apunte al back-end y usa esa RFC en la tabla de alias.

Una vez creado el alias, te creas el servicio oData en el back-end y, cuando lo tengas
terminado, en el front-end lo añades usando dicho alias.

huanguelito 12 de abril de 2018, 21:02

Gracias Jorge!, pero desde el Front-end, debo generar por la SEGW nuevamente el
servicio con el mismo nomrbre que en el Back-end?, Cómo lo agregaria desde el GW al
servicio odata del Back-end?

JorGCalleja 13 de abril de 2018, 9:18

No, sólo se genera en el back-end.

En el front-end, en la transacción /IWFND/MAINT_SERVICE, cuando vas a añadir un


nuevo servicio, utilizas el alias creado que apunta al back-end y así ya te aparece para
añadirlo.

huanguelito 16 de abril de 2018, 15:49

Muchas gracias!, logré que funcionara, aunque al principio no podia por la version del
componente SAP_GWFND que tenia.

Responder

idmir levi de la cruz clemente 9 de octubre de 2018, 7:35

Buen Material, quisiera que me puedan orientar de como configurar el Destination para el Odata
en el Web Ide.
En mi caso el servicio ya está publicado http://201.230.xxx.155:8000/sap/opu/odata
/sap/ZPERSONA_SRV/ZPERSONASET , en cual se puede acceder desde internet.
Ya he configurado el Destination con la url anterior, pero al momento de querer seleccionar el
Service URL no se muestra el Destination.

Responder

Respuestas

JorGCalleja 9 de octubre de 2018, 17:12

Hola,

Quizá te falten los parámetros necesarios en la configuración del destination, como por
ejemplo el WebIDEEnabled = true.

Mira en los siguientes post, a ver si te ayudan a resolver tu duda:

http://www.uxsap.com/2017/01/destination-para-odata.html
http://www.uxsap.com/2017/08/desplegar-app-sapui5-onpremise.html

Responder

11 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

Unknown 7 de diciembre de 2018, 12:21

Muchas gracias Jorge, muy interesante y útil.

Responder

David Enrique Chan Yah 8 de marzo de 2019, 19:52

Hola, muchas gracias por el aporte. Logré hacer que funcione el servicio, pero solo puedo
acceder a desde el Gateway Client, no puedo acceder desde un Explorador o desde el Postman.
Sabes que configuración hace falta para poder visualizar el servicio desde fuera de Sap. Saludos!

Responder

Respuestas

JorGCalleja 4 de abril de 2019, 10:34

¿Está bien la url de tu servidor en el navegador, incluyento https o http y el puerto?


Desde el propio Gateway puedes llamar al navegador para que te acceda al servicio, en
lugar de llamar al Gateway Client (el botón que está justo al lado, llamar al
navegador).

Responder

Reinaldo Vergara 29 de marzo de 2019, 22:09

Muchas Gracias, Gran aporte....

Responder

Respuestas

JorGCalleja 4 de abril de 2019, 10:31

¡Gracias!

Responder

Daniel Rangel 9 de abril de 2019, 4:13

Excelente aporte, sólo una consulta, estoy intentando crear un Entity Type de una Data Source la
cual es un RFC pero al momento de importar me pide que asigne al menos un campo clave, las
estructuras que utilizo tanto en el import como en el export no requieren campos claves, ¿cómo
puedo importar mi RFC así de la misma manera en que se utiliza en el proceso de creación de
servicios web SOAP en SAP mediante el wizard? Gracias.

Responder

Respuestas

JorGCalleja 12 de abril de 2019, 9:08

Hola Daniel, cuando te creas un Entity Type siempre tiene que haber al menos un
campo clave. Si tienes en la RFC variables de tipo import o changing, quizá las puedas
usar precisamente como campo clave.

Por ejemplo, si tengo un módulo de funciones al que le tengo que pasar un número de
personal para que me devuelva el nombre del empleado, está claro que el número de
personal tiene que ser un campo clave.

En cualquier caso, si no quieres usar un campo clave, o haces un poco de trampas y


marcas uno como clave pero que siempre llegará vacío o con un valor constante (un
poco guarrete y ni siquiera sé si te valdrá), o te creas una función import con un
complex type. Tendrás que codificar en el método del EXECUTE_ACTION en lugar de
mapear la RFC, pero ya no necesitarás campo clave.

Responder

12 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Cómo extraer los datos de SAP: Gateway y ser... http://www.uxsap.com/2016/12/Gateway-y-oData-ejemplo.html

13 of 13 9/25/2019, 8:02 PM
Trasteando con SAP UX: Acceso al servicio oData desde HCP: Crear des... http://www.uxsap.com/2017/01/destination-para-odata.html

1 of 4 9/25/2019, 8:02 PM
Trasteando con SAP UX: Acceso al servicio oData desde HCP: Crear des... http://www.uxsap.com/2017/01/destination-para-odata.html

OnPremise. Vuelve HTML5 en Miriada X


El tipo de autenticación. Si entras a SAP con un usuario-contraseña, puedes Cursos de Fiori y SAPUI5
seleccionar autenticación básica y después indicar dicho usuario-contraseña. interesantes
Con ese usuario podremos debuggear el servicio oData cuando sea invocado, si Periodo Desfasado / Lagged Period
tenemos una sesión de SAP abierta. Y si tenemos los permisos apropiados, claro. (parte 3 de 4)
Una propiedad adicional, WebIDEEnabled con valor true. Crear una app SAPUI5 con Web
Esto es necesario para que el destination esté disponible en la selección de servicios IDE y servicio oData ...
oData al crear una aplicación en el Web IDE. Periodo Desfasado / Lagged Period
(parte 2 de 4)
Una propiedad adicional, WebIDESystem, con las tres letras del sistema SAP al que
nos conectamos. Crear una app SAPUI5 con Web
IDE y servicio oData ...
Una propiedad adicional, WebIDEUsage, para indicar la disponibilidad del destination.
Ahí podemos indicar para un uso Periodo Desfasado / Lagged Period
(parte 1 de 4)
cotidiano la cadena odata_abap,ui5_execute_abap,dev_abap. Podemos consultar los
posibles valores en la ayuda de HCP, y representan, respectivamente: servicios oData Presentación: Colaborando con
Jorge
en ABAP, ejecutar aplicaciones SAPUI5 desde un repositorio ABAP y proyectos de
ampliación (extensibility). Si, por ejemplo, no ponemos odata_abap, cuando Plantillas en el Web IDE y versión
tengamos que seleccionar el servicio oData al crear un proyecto, no nos aparecerá SAPUI5

este Destination. Acceso al servicio oData desde


HCP: Crear destinat...

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Una vez creado el destination, podemos chequear si la conexión funciona bien con el botón
Check Destination. Si es así, ¡enhorabuena! ¡Ya tienes la conexión para permitir que tus
aplicaciones SAPUI5 obtengan datos de un sistema SAP!

INTRANET INACCESIBLE
Si nuestro front-end no está expuesto al exterior (necesitamos tener el culo sentado en la
oficina o acceder mediante VPN), nuestro pobre SAP HCP no podrá llegar hasta él, ya que
aunque trabajemos desde dentro de la intranet ¡SAP HCP esta fuera!

2 of 4 9/25/2019, 8:02 PM
Trasteando con SAP UX: Acceso al servicio oData desde HCP: Crear des... http://www.uxsap.com/2017/01/destination-para-odata.html

Cuando esto ocurra, lo podemos arreglar pidiéndole al departamento/compañero responsable


de los peliagudos temas de seguridad que nos permita la exposición del servicio oData al
exterior. Ante esta solicitud podemos recibir tres respuestas:
Ok, yo te lo hago (poco probable).
Habla con tu jefe para que hable con el mío, con los de sistemas, con los de
arquitectura y con el del fondo de la sala que nadie sabe a qué se dedica (¿has leído
las doce pruebas de Astérix?) (probable).
Que directamente nos manden a la m... (también probable).
Afortunadamente, tenemos otra posibilidad, también segura y que no requiere abrir puertos en
el firewall de la empresa: Usar el SAP Cloud Connector.

Esto lo veremos más adelante, ya que ahora no es el tema del tutorial. De momento nos vale
con saber que existe esta opción. Además, nuestro destination debe ser creado con la
propiedad Proxy Type con valor OnPremise.

En cualquier caso, si necesitamos hacer pruebas con una aplicación SAPUI5 y un servicio oData
cualquiera, podemos crearnos un destination para apuntar al servicio gratuito de Northwind. En
este caso las propiedades adicionales cambian:

La url es http://services.odata.org/V3/Northwind/Northwind.svc/, que es la url del


propio servicio oData.
No necesitamos usar la propiedad adicional WebIDESystem.
El valor WebIDEUsage tendrá la cadena odata_gen (según se ve en la imagen):

Publicado por JorGCalleja

Etiquetas: destination, frontend, hcp, Northwind, oData, sapcc, tutorial

4 comentarios:
Naoto Amari 12 de enero de 2018, 20:04

creo que hay un problema con el servidor de northwind porque me trato de conectar y me dice
Failure reason: "Not Implemented" Received status code: "501" ;(

Responder

Respuestas

JorGCalleja 13 de enero de 2018, 1:24

Mira este post a ver si lo has configurado bien: https://uxsap.blogspot.com.es/2017/06


/configurar-odata-northwind.html

Naoto Amari 1 de febrero de 2018, 15:04

lo elimine y lo volvi a crear y me funciono :D gracias !

Naoto Amari 2 de febrero de 2018, 15:00

una pregunta una vesz configure esto y suba mi aplicacion al servidor cuando un
usuario se conecta al launchpad e ingresa su suario y por consiguiente a la aplicacion le
pediria los datos para conectarse con los suyos al servidor? o hay una forma que

3 of 4 9/25/2019, 8:02 PM
Trasteando con SAP UX: Acceso al servicio oData desde HCP: Crear des... http://www.uxsap.com/2017/01/destination-para-odata.html

4 of 4 9/25/2019, 8:02 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

1 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

Vuelve HTML5 en Miriada X


Cursos de Fiori y SAPUI5
interesantes
Periodo Desfasado / Lagged Period
(parte 3 de 4)
Crear una app SAPUI5 con Web
IDE y servicio oData ...
Periodo Desfasado / Lagged Period
(parte 2 de 4)
Crear una app SAPUI5 con Web
IDE y servicio oData ...
Periodo Desfasado / Lagged Period
(parte 1 de 4)
Presentación: Colaborando con
Jorge
Plantillas en el Web IDE y versión
SAPUI5
En el siguiente paso le asignamos a la app el nombre de proyecto, sin espacios en blanco ni Acceso al servicio oData desde
caracteres raros, y es así como se nos mostrará en nuestra área de trabajo (workspace). Es el HCP: Crear destinat...
equivalente al nombre de "Aplicación BSP" con el que se guarda en SAP (en la SE80), pero no
nos preocupemos en ponerle una Z delante si no nos interesa, eso lo podremos hacer cuando lo 2016 (4)
subamos a SAP.
ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Después tenemos que elegir el servicio oData que vamos a utilizar. Sólo nos permite elegir uno
durante la creación, así que si fuésemos a necesitar más, lo tendríamos que añadir luego
nosotros en el código. Pero, como dije al principio, lo suyo es usar sólo un servicio oData.

Seleccionamos"Service Catalog" y el sistema (destination) que apunta a nuestro servidor SAP.


Entonces nos saldrán los servicios disponibles, donde elegiremos el que nos habíamos creado
antes.

El siguiente paso es añadir las propiedades de la aplicación. Dependiendo del tipo de aplicación,
tendremos una serie diferente de campos.

El namespace será como el "nombre propio interno" de la aplicación, que se usará dentro del
código. Podemos usar nomenclatura de puntos para definir el nombre. Por ejemplo, yo usaré
jorgcalleja.mistextos. Las aplicaciones estándar de sap para HCM, por ejemplo, se llaman
hcm.nombreaplicacion.

En oData Collection especificaremos el nombre de la colección que vamos a usar en la página


principal.

Los demás campos se usan para mostrar en distintas partes de la aplicación el correspondiente
atributo del servicio oData. Podemos jugar con ellos para ver qué obtenemos.

2 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

Para este ejemplo, la página 1 será una tabla de resumen. El campo Item Title se mostrará en
la primera columna y el campo Atribute (que no se ve en la captura) en la segunda. Después se
mostrará un atributo numérico con medida (por ejemplo, un importe y su moneda),
correspondiente a los campos Numeric Attribute y Unit of Measure. Y un último elemento de
status, en la quinta columna, correspondiente con Status Attribute.

La página dos es la de detalle, donde se nos va a abrir información adicional de la selección que
hagamos en la primera página (la maestra).

Además, nos permite añadir una navegación, que es un tipo de elemento del servicio oData que
nos permite enlazar dos colecciones, de tal forma que a partir de los datos de una colección
podamos obtener los datos de otra. Como si trabajásemos con tablas relacionales, enlazadas
entre sí.

Como nuestro servicio sólo tiene una colección (hemos sido vaguetes al crearla), aquí no nos
saldrá nada de nada.

3 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

Al finalizar habremos creado nuestra primera aplicación. ¡Hip, hip, hurra! Si ejecutamos la
aplicación, obtendremos algo como esto:

Si pulsamos una de las entradas, navegaremos a los detalles de ese texto. Hay una tabla en la
parte inferior, que es en la que mostraríamos los datos de la navegación, si es que hubiésemos
tenido alguna que indicar. Como no es el caso, nos vendrá vacía. Ya la eliminaremos más tarde.

¿Y CÓMO LA EJECUTAMOS?
Para ejecutarlo, seleccionamos la aplicación en el workspace y pulsamos el botón verde de play
que aparece en la barra de herramientas.

Junto al play (a la izquierda) aparece un recuadro desplegable, donde podemos elegir en qué
formato realizamos la ejecución: como aplicación independiente (partiendo de un fichero
index.html), integrado en un Fiori Launchpad, etc. La primera vez nos aparecerá en blanco,
pero luego podremos añadir nuestras configuraciones.

Si es la primera vez que ejecutamos una aplicación desde el Web IDE, puede que no nos
aparezca nada y que nos quedemos con cara de bobos. Pero si somos observadores (o si el
propio Web IDE nos avisa) veremos que hay uno de esos malditos mensajes de aviso del
navegador, indicando que el Web IDE está intentando hacer alguna travesura e intenta abrir un
pop-up. Así que le tenemos que dar autorización.

4 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

Así se ejecutará nuestra aplicación correctamente.

Para configurar la forma en la que podemos ejecutar dicha aplicación (cada app se hace de
forma independiente), seleccionamos la carpeta en el workspace y elegimos en el menú Run ->
Run Configurations.

Obtenemos una ventana como la siguiente, para poder crear nuestras opciones de ejecución:

En el botón + podemos añadir nuevas opciones de configuración, donde nos interesará una de
dos:
Web Application si lo usaremos como una aplicación independiente. Entonces
tendremos que indicar como archivo de inicio (en el campo File Name) el index.html
que el Web IDE suele crear por nosotros.
SAP Fiori Component on Sandbox si lo integraremos con el Fiori Launchpad. En este
caso indicaremos como fichero de inicio el Component.js.
En ambos casos, la opción With Frame nos permite, en la ejecución, añadir una barra superior
para hacer pruebas con el tamaño de la pantalla (por aquello de ser responsive y tal).

¿DÓNDE Y CÓMO SE GUARDAN LOS DATOS?


Con esta plantilla que nos hemos creado, hemos conseguido un montón de código y no hemos
añadido nada. ¿Y dónde está todo ese código tirado por la cara? Repartido entre multitud de
ficheros. Pero eso lo veremos en el siguiente tutorial.

5 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata.html

6 of 6 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

1 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

Vuelve HTML5 en Miriada X


Ahí entran en juego dos cosas: el destination y el fichero neo-app.json. Cursos de Fiori y SAPUI5
interesantes
Este fichero se usa sólo en SAP HCP (en el Web IDE o en el portal). Cuando lo transportemos a Periodo Desfasado / Lagged Period
nuestro Front-End, ya no tendremos que preocuparnos por él porque la url relativa se referirá (parte 3 de 4)
al propio servidor SAP. Sin embargo, mientras lo ejecutemos en SAP HCP el neo-app se usará Crear una app SAPUI5 con Web
para poder redireccionar las llamadas que se hagan al servicio hacia el front-end, sin que el IDE y servicio oData ...
navegador web del usuario se entere de que está cambiando de dominio. Hará las veces de un Periodo Desfasado / Lagged Period
proxy inverso (como si fuese un SAP Web Dispatcher). (parte 2 de 4)
Crear una app SAPUI5 con Web
El fichero neo-app.json contiene esta información: IDE y servicio oData ...
Periodo Desfasado / Lagged Period
(parte 1 de 4)
Presentación: Colaborando con
Jorge
Plantillas en el Web IDE y versión
SAPUI5
Acceso al servicio oData desde
HCP: Crear destinat...

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Esto SAP HCP lo interpreta así: "Si se hace una llamada a una ruta que comienza por /sap/opu Apuntes SAP de Rubens, trasteando
/odata (lo que pone en el atributo path), entonces voy a usar un destination (especificado con HCP
en type) que se llama UXSAP (especificado en name). Además, a la url que me proporcione el Para fotos guapas, las de KESS
destination añadiré /sap/opu/odata (que es lo que pone en entryPath)".

Así que cuando se llama al servicio oData que se especifica en el Component.js, el neo-app y el
destination en combinación se encargan de traducir la dirección. Trabajo en equipo.

¿Y por qué es necesario indicar el entryPath si va a ser igual que el path? Podríamos pensar
(erróneamente) que al llamar al destination, la aplicación va a coger la url del destination y
añadir lo que pone en el path, pero no lo hace así. Simplemente entiende algo así: "si en algún
sitio pone /sap/opu/odata, uso el destination X". Así que con el entryPath nosotros le decimos
"para que no te olvides de agregar /sap/opu/odata, te lo pongo en el entryPath".

Parece una chorrada redundante, pero esto nos puede dar más versatilidad, sobre todo para
enmascarar urls si no vamos a subir la aplicación a un front-end sino a dejarla en el portal del
SAP HCP. Ahí podríamos decirle "si tienes una cadena que pone supercalifragi, en lugar de eso
me vas a usar el destination X y añadir /sap/opu/odata". Nadie que visite la página verá que
estamos llamando a una url con el texto /sap/opu/odata, sino con el texto supercalifragi.

Claro que, a nosotros, que nuestro objetivo es subir la aplicación a nuestro SAP front-end, nos
interesa mantenerlo así. Y cuando subamos la aplicación, no tendremos que cambiar nada.

PANTALLA INICIAL: SECCIÓN MASTER


La aplicación de tipo full screen tiene dos bloques importantes, una Master (la página inicial,
que te muestra el listado completo en una tabla) y una Detail (la página que se muestra
cuando seleccionas algo en la Master).

La Master es la primera página que el usuario va a ver cuando ejecute la aplicación.


Internamente la aplicación habrá pasado por otros elementos (onInit del Component.js, el
createContent, el Main.view.xml), pero para entender la funcionalidad nos vale con saber que lo
primero que verá el usuario será el Master.

Pero el master no es un único fichero, sino dos, la vista (Master.view.xml, donde está el fichero
xml, que sería equivalente a un html) y el controlador (Master.controller.js, donde está el
código javascript). Cumpliendo toda aquella historia del MVC, o Modelo-Vista-Controlador.

Es aquí (en la vista Master.view.xml) donde tenemos que meterle mano para modificar lo que
se verá en la tabla de inicio. El código es algo tal que así:

2 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

Se trata de una tabla donde vamos a mostrar una colección del servicio oData. ¿Qué colección?
La que se ve en el atributo items. Cuando se cargue este XML, se invocará automáticamente a
la colección para luego pintar los valores que recibamos mediante binding (en unas pocas líneas
veremos que es eso).

Esa tabla tiene un elemento llamado "columns", y dentro de él varios elementos llamados
Column. Cada elemento Column es una de las columnas que tendremos en la tabla. Estos
elementos nos sirven para definir la estructura de la tabla y asignarle una cabecera a cada
columna, aunque aún no mostrarán datos. En nuestro caso, como sólo mostrábamos un campo,
podríamos borrar todos los elementos Column menos el primero.

El contenido de la tabla (las filas) se carga más adelante. Cuando acaba el elemento columns
(con la etiqueta </columns>) tenemos el elemento "ColumnListItem".

Dentro de ese elemento, tenemos otro elemento, cells, que es donde estarán las celdas que
componen la fila.

Habrá una celda por cada columna, y cada una tendrá asociado un texto (guardado en el
atributo text, recuadrado en la imagen), que es lo que se mostrará al ejecutar la aplicación. En
nuestro caso, la primera celda es un elemento de tipo Text

Si en el atributo text hubiésemos puesto algo como text="hola", al ejecutar la aplicación se


verá "hola" (sin comillas). Pero cuando le ponemos unas llaves {}, le estamos indicando que
nos muestre una información dinámica (como si fuese una variable en cualquier lenguaje de
programación), en este caso la propiedad Id de cada entrada de TextosGeneralesSet (que es la
colección que indicamos en la tabla, en el atributo items).

Eso quiere decir que los datos se mostrarán dinámicamente, enlazando esa propiedad con lo
que nos devolverá el servicio oData (lo que se llama binding).

Como las tres restantes entradas no las usamos, las podríamos borrar (habiendo borrado
inicialmente las columnas).

Así que si borramos todas las columnas menos la primera, tendríamos algo así:

3 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

También hay que saber cómo navegamos al detalle. Eso lo conseguimos pulsando una entrada
de la tabla. Esa entrada lanza el evento press, que está dentro del elemento "ColumnListItem".
Ese press nos indica qué función se ejecutará al ser pulsada una fila. ¿Y dónde está esa
función? En el controlador, Main.controller.js. Siempre que tengamos una función, iremos a
buscarla a un fichero javascript (js).

Lo que hace la función es leer la fila pulsada y hacer una navegación a la ventana de detalle.
Pero eso es tema de enrutamiento y ya son palabras mayores para este tutorial :P.

INFORMACIÓN ADICIONAL: SECCIÓN DETAIL


La sección detalle se cargará cuando pulsemos una fila de la tabla, tras ejecutarse la función
onLineItemPressed, que realiza una navegación. Las navegaciones se configuran en el
Component.js, en el bloque routing.

En el detail teníamos unos elementos con los datos de la selección hecha en la tabla del Master.
Además, tenemos una nueva tabla, que se carga con una navegación y que nos aparecerá
vacía porque no habíamos incluida nada.

4 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

Podemos ver en el fichero Detail.view.xml un elemento que pone ObjectHeader. Se trata


del bloque que se muestra en la parte superior de la página. Ahí tenemos los campos que
habíamos escogido para mostrar al usar la plantilla del Web IDE, todos ellos entre llaves, {Id} y
{Texto}.

Así que para cambiar los datos que se van a ver (o cómo se van a ver), cambiaríamos este
objeto. Podemos añadir más propiedades del servicio oData. Y si no nos gusta el ObjectHeader,
podríamos cambiarlo por una tabla, un formulario, o lo que nos de la gana.

¿Pero dónde se indica la colección que se usa? En el master lo teníamos a la vista y en la vista
(en el Master.view.xml).

Para el detalle, nos toca bucear en el controlador. Lo acabaremos encontrando en el fichero


Detail.controller.js.

En la función _onRoutePatternMatched se recupera la selección hecha en el master (la línea que


pone this._sItemPath = ...) y lo enlaza con la parte recuadrada (bindElement). Ahí es donde se
van a enlazar nuestros datos. Ya sólo necesitamos indicar las propiedades entre llaves,
{nombre_de_propiedad}, dentro del XML. Esos campos del XML se cargarán vacíos durante
breves segundos, pero cuando se ejecute el código del controlador, se refrescarán
dinámicamente.

Ahora vamos a eliminar las cosas que no necesitamos.

Al final del Detail.view.xml, tenemos un elemento de tipo Table... que es la navegación que no
hemos usado. Es un elemento que podemos borrar si no vamos a utilizar, o que modificaremos
si al final añadimos una asociación.

Podemos borrar el elemento de la vista sin piedad, pero también tenemos que revisar el
controlador, ya que en él hay referencias a dicha tabla y, si no las quitamos, luego se pondrá a
dar errores de javascript como un loco.

En el controlador nos cepillaríamos los bloques de código que hagan referencia a la navegación,
tales como estas líneas que están distribuidas alegremente por el controlador:

this._oNavigationTable = this.byId("navigationTable");
this._oItemTemplate = this.byId("navigationListItem").clone();
this._sNavigationPath = this._sItemPath + "/" + "";
// Bind Review Table using oData Reviews Entity
this._bindNavigationTable(this._sNavigationPath);
_bindNavigationTable : function (toda la función completa);

5 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

y la definición de las variables que ya no usamos.

RESULTADO
Si hemos eliminado lo que no queríamos, al final tendremos una aplicación sencillota como
ésta:

¿Y QUÉ ES ESO DEL MANIFEST.JSON?


Si te has creado la aplicación con la versión SAP Innovation, en el Component.js no te
aparecerá el servicio oData. En su lugar, habrá un fichero manifest.json, que es invocado desde
el component, dónde estará guardada esta información.

El formato es similar al del component, pero algunas cosas pueden cambiar. Por ejemplo, el
servicio oData se indica en "dataSources" y, dentro de ésta, en "mainService".

Además, la estructura de carpetas del proyecto será diferente, existiendo una carpeta para las
vistas (view) y otra para los controladores (controller). Se puede ver una pequeña comparativa
de los cambios en este post.

Por lo demás, el funcionamiento debería ser más o menos parecido. Aunque para SAP
Innovation, al menos cuando he creado este post, no había aplicaciones de tipo Full Screen
Application sino de tipo Worklist.

Publicado por JorGCalleja

Etiquetas: frontend, sapui5, tutorial, webide

7 comentarios:
Naoto Amari 1 de febrero de 2018, 15:16

6 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

Holal al principio me confundi hasta que llegue a lo ultimo ya que he usado la version sap
innovation, seria bueno que introdujeras algun post sobre sap web ide enterprise edition que es
como el web ide pero local y aca las odatas son un poco distintos a mi parecer ya que se debe
crear las configuracion en un texto y guardarlos en la carpeta destination
https://tools.hana.ondemand.com/#sapui5 y tengo una gran duda, al momento de subir la
aplicacion como se hace? eso lo hace un basis ?y por lo menos si ves el fiori launchpad hay
muchos tiles (mosaicos) cuando uno sube una app al servidor se crea un nuevo tile para mi
aplicacion??? muchisimas gracias tu blog me ha sido de muchisisisma utilidad

Responder

JorGCalleja 1 de febrero de 2018, 18:30

Para la Enterprise Edition, tengo pendiente trastear con ella.

Para desplegar en SAP, hay un tutorial, https://uxsap.blogspot.com.es/2017/08/desplegar-app-


sapui5-onpremise.html , aunque es para la versión Web IDE y no para la Enterprise Edition :( .

Al desplegar, se sube la aplicación al back-end pero no te crea tiles, sólo te sube la "BSP", que
podrás ver en la SE80. Una vez subida, ya tendrías que desplegar el tile de la forma normal, con
el Fiori Launchpad Designer y el LPD_CUST. Con las últimas versiones ya no hace falta el
LPD_CUST si quieres, ojea este post https://uxsap.blogspot.com.es/2017/10/target-mapping-
sin-lpdcust.html

Responder

Respuestas

Naoto Amari 2 de febrero de 2018, 18:00

Gracias por tu respuesta, me acabo de dar cuenta que se llama es SAP Web IDE
Personal Edition. xD revisare esos enlaces que dejaste :D gracias!!!!

Responder

Unknown 3 de abril de 2019, 10:45

Este comentario ha sido eliminado por el autor.

Responder

Alberto Marcos Blasco 3 de abril de 2019, 14:02

Hola, querría saber si tienes el código subido a algún repositorio público para poderlo ver. Un
saludo!

Responder

Respuestas

JorGCalleja 4 de abril de 2019, 10:30

No, lo siento, este ejemplo en particular no está en ningún repositorio subido.

Alberto Marcos Blasco 5 de abril de 2019, 10:38

De acuerdo! Muchas gracias por tu respuesta.


Un saludo

Responder

Comentar como:

Publicar

Entrada más reciente Página principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

7 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: Crear una app SAPUI5 con Web IDE y servici... http://www.uxsap.com/2017/01/app-sapui5-y-odata-mod.html

8 of 8 9/25/2019, 8:03 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

1 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

abrir puertos en el Firewall para dar acceso al Gateway. Ojo, que esa es otra opción, claro; pero Evolución del portal del empleado
para eso lo mismo tienes que pedir autorizaciones (¿me abres un agujerito para acceder desde de SAP (Parte 3 ...
fuera?), justificar dicho acceso (oye, que es que quiero trabajar), puede que todo un lío. ¿Usar SAP Fiori o SAP Screen
También podría ser que la propia empresa quiera usar el SAP CC dentro del propio servidor Personas?
para no abrir el Firewall. Como el peor caso es que no nos quieran hacer caso, pues para eso Evolución del portal del empleado
tenemos este post. de SAP (Parte 2 ...
¿Intranet inaccesible para el Web
SAP CC no es más que un pequeño programa que nos va a permitir conectar nuestra cuenta IDE? SAP Cloud C...
HCP con nuestro equipo (o con el propio servidor) y que éste haga de "puente" de conexión con Evolución del portal del empleado
el Gateway. de SAP (Parte 1 ...
¿Intranet inaccesible para el Web
IDE? SAP Cloud C...

enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Cuando nos lo instalemos, haremos una configuración inicial para que nuestra cuenta de SAP
HCP se pueda conectar al servidor SAP que le digamos. En SAP HCP también tendremos que
configurar un destination de tipo onPremise para poder establecer la conexión.

Una vez instalado y configurado, nos ponemos a trabajar: Si nosotros levantamos el SAP CC,
nuestra cuenta de SAP HCP podrá conectarse a SAP; si lo cerramos, pues entonces SAP HCP ya
no puede.

Se puede descargar en SAP Development Tools, en la sección Cloud.

Aquí nos encontraremos con dos posibles versiones: La versión autoinstalable y la versión
portable (que antes llamaban versión de developer). ¿Cuál elegimos?

La versión autoinstalable (en la que sólo indica el sistema operativo) es el típico


paquete de instalación que requiere permisos de administrador. El programa te guiará
en la instalación y tú le vas dando a aceptar... aceptar... aceptar... hasta que lo
instalas.
La versión portable es un archivo comprimido (un zip) que puedes descargarte y
descomprimir en cualquier parte. Lo bueno que tiene es que NO necesita permisos de
administrador. Además, podremos tener varias instalaciones en el mismo equipo (si
es que fuese necesario).

2 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

Esta segunda versión, la portable, es la que voy a explicar. ¿Por qué? Porque muchas veces los
de sistemas no se fían de nosotros y nos dan portátiles sin permisos de administrador ni nada,
¡como si nos los fuésemos a cargar... por tercera vez... en lo que llevamos de año... :O!

Así que descargamos y nos ponemos manos a la obra. De momento, en este post, vamos a
instalar y arrancar SAP Cloud Connector portable en nuestro equipo (Windows) y en el
siguiente lo configuraremos para poder dar vía libre a SAP HCP para consumir nuestros
servicios oData.

INSTALANDO SAP CC PORTABLE Y CONFIGURANDO


WINDOWS
Bueno, bueno, instalación, lo que se dice instalación... en mi caso, más bien extracción.

Elegimos la aplicación, aceptamos las condiciones (pulsa aquí si vendes tu alma al diablo y todo
eso), nos descargamos un archivo zip y lo descomprimimos donde nos plazca. ¡Ya está la
aplicación instalada! La tendremos en una carpeta, que es desde donde la vamos a ejecutar.

¿Cuál es el archivo para iniciar el SAP CC? En Windows es el go.bat, en Linux es go.sh. Si
ejecutamos este fichero, debería funcionarnos a la de ya... a no ser que aún nos falten algunas
cosicas por configurar en el sistema operativo.

Java
Lo primero de todo es tener instalado en nuestro ordenador a nuestro amigo "el Java". Pero no
una versión cualquiera, no. Necesitamos la versión 6 (o superior) de 64 bits.

Nos vale el Java Runtime (JRE), aunque en alguna documentación leí que se necesitaba el
JDK... pero a mí con el JRE me ha servido.

Si no lo tienes instalado, te lo puedes descargar de la página de Java de Oracle. Recuerda elegir


siempre la versión de 64 bits. Eso sí, para instalártelo sí que necesitarás permisos de
administrador en tu sistema operativo.

Si ya tienes Java y no sabes qué versión tienes, puedes averiguarlo de varias (¡suponiendo que
tienes un sistema operativo de 64 bits!)

En un símbolo del sistema (botón de windows - ejecutar - cmd) pones "java


-version". Ahí te dirá tu versión y si es de 64 bits.
En el panel de control de Windows, aparecerá una entrada que pone Java. Si pone
Java (32 bits)... pues eso, que es de 32 bits, mala suerte.
Otro truco es ver dónde está instalado. Si has usado la ubicación por defecto, se te
habrá instalado en C:/Archivos de programa/Java si es de 64 bits o C:/Archivos de
programa (x86)/Java si es de 32 bits.
Si lo que tienes es de 32 bits, no te vale, así que no te queda otra que instalarte de nuevo la de
64 bits.

Cómo cambiar variables de entorno


Una vez instalado SAPCC y Java, tenemos que indicar algunas variables de entorno que
necesitamos. Eso se consigue en las Propiedades del sistema (llegar ahí depende de la versión
de Windows, pero puedes probar suerte pulsando con el botón derecho sobre el icono de Mi PC
-> Propiedades y luego Configuración avanzada del sistema. Ahí es donde tenemos el botón de
Variables de entorno.

3 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

Pero imagínate que no tienes permisos de administrador... caray, que contrariedad. Entonces a
lo mejor no puedes cambiar las variables de entorno. Bueno, hay una solución, que es cambiar
las variables de entorno de tu usuario. Eso lo puedes hacer desde Panel de control - Cuentas de
usuario y luego Cambiar las variables de entorno (mira este enlace para más ayuda, aunque
esté en inglés).

Variables de entorno a definir


En las variables de entorno tienes que definir la ruta de Java. Esto lo puedes hacer de dos
formas (en principio con con una debería valer, pero si quieres puedes hacer las dos):

Crea una variable de entorno JAVA_HOME donde indicas la ubicación de la carpeta


donde está Java. Por ejemplo, C:\Program Files\Java\jre7. Si ya existe esta variable,
comprueba que apunta a tu Java de 64 bits (no sea que se trate de una versión
antigua).

4 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

Añade a la variable de entorno PATH la ubicación de dónde está instalado el


ejecutable de java. Este suele estar en la carpeta bin del lugar donde se haya
instalado Java. En el ejemplo anterior sería C:\Program Files\Java\jre7\bin. Cada
nueva ruta que añades a PATH tienes que separarla con punto y coma (;).

Y nos falta una última variable de entorno, que no se suele indicar y por cuya culpa no permite
que iniciemos el SAPCC, y es indicar dónde está una librería que utiliza SAPCC. En la versión
autoinstalable supongo que te la crea por defecto, pero no en la portable. Se trata de la librería
sapscc20jni.dll, que está en la carpeta donde hemos instalado SAPCC\auditor.

Es esa carpeta la que tenemos que añadir a la variable de entorno PATH.

Una vez hemos configurado las variables de entorno, tenemos que reiniciar la sesión (o el
equipo)... aunque hay otra posibilidad, un pequeño truquito por si no queremos esperar tanto.
Abre el Administrador de Tareas y mata al proceso explorer.exe (el explorador de windows).
Eso hace que se te cierren todas las ventanas y desaparezca la barra de inicio. Sin salir del
administrador, escoge Archivo - Ejecutar nueva tarea y ejecuta explorer.exe (es decir, lo estás
reiniciando). Te volverá a aparecer la barra de inicio (las carpetas no se vuelven a abrir) y
encima habrás actualizado las variables de entorno.

ARRANCAR SAP CLOUD CONNECTOR


Pues si todo ha ido bien, ya podemos arrancar SAP CC. Lo podemos hacer ejecutando el archivo
go.bat, que nos abrirá un símbolo de sistema. Cuando queramos finalizar SAP CC, valdrá con
cerrar dicho símbolo de sistema.

Esperamos uno poco a que arranque bien y entonces abrimos un navegador web y vamos a la
url https://localhost:8443. Si todo está correcto y nos sale una página invitándonos a
autenticarnos, es que lo hemos hecho bien.

Como acceso inicial, usaremos usuario Administrator y contraseña manage (luego te pedirá
cambiar la contraseña).

Puede que, en lugar de aparecernos esa pantalla, nos aparezca un error de certificado. No hay

5 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

peligro, los piratas informáticos no intentan hacerse con nuestro equipo, podemos continuar
adelante.

Y entonces ya estaremos en la configuración de SAP CC. Pero eso lo vamos a dejar para el
siguiente tutorial.

Y si no nos funciona la página (y ya hemos esperado un buen rato)... podemos consultar


posibles errores en la carpeta log, donde se generan los ficheros de traza. Puede que a
nosotros no nos digan gran cosa, pero siempre podemos buscarlo en google ;).

RESUMIENDO

Descargar SAP Cloud Connector.


Comprobar si tenemos Java 6+ de 64 bits. Si no, nos lo instalamos.
Crear en la variable de entorno JAVA_HOME (o modificarla si procede) para que
apunte a la carpeta de instalación de Java (por ejemplo, C:\Archivos de
programa\Java\jre8.x.x).
O modificar la variable PATH para que apunte a la carpeta bin de Java (por ejemplo,
C:\Archivos de programa\Java\jre8.x.x\bin).
Modificar la variable PATH para apuntar a la carpeta de instalación de sapcc\auditor,
donde está la librería sapscc20jni.dll.
Ejecutar el archivo go.bat (en Windows) o go.sh (en Linux).
Arrancar un navegador web y abrir la url https://localhost:8443, con usuario
Administrador y contraseña manage.
Configurar SAP Cloud Connector y SAP HCP... en el siguiente tutorial.

Publicado por JorGCalleja

Etiquetas: destination, gateway, oData, sapcc, sapui5, tutorial, webide

8 comentarios:
jose orozco orozco 30 de marzo de 2017, 18:35

Gracias por el aporte! Ha sido de gran ayuda

Responder

Respuestas

JorGCalleja 3 de abril de 2017, 9:28

De nada, está bien saber que resulta útil.

6 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

Responder

José López 15 de abril de 2017, 8:35

Hola, gran aporte, podrian hacer mas de SAPUI5 con este enlace?
https://sapui5.hana.ondemand.com/#docs/guide/8b49fc198bf04b2d9800fc37fecbb218.html

Responder

Leandro Garrido C. 20 de abril de 2017, 13:58

Muchas gracias!!

Responder

Joel 27 de abril de 2017, 17:46

Hola! Primero felicitar! otro excelente aporte! Les hago una consulta, ¿cuales son los puertos que
se deben abrir en el servidor? Pasa lo siguiente, que solicite permiso para instalar SAP CC en mi
ambiente DEV pero me dijeron que querian saber que puertos deben estar disponibles para
garantizar que es eso lo que está impidiendo mi conexión desde afuera.

Muchas gracias

Responder

Respuestas

JorGCalleja 28 de abril de 2017, 9:42

Espero no pecar de desconomiento con la respuesta completa (que me corrija alguien


si me equivoco en algo de lo que digo, ya que yo no soy de sistemas, pero el puerto
debería ser el que tengas configurado para la salida http o https. Vamos, el mismo que
se usa para las web dynpro. Eso quiere decir que si puedes acceder a una web dynpro
del servidor desde fuera (o al NWBC, o al SAP GUI for HTML, por ejemplo), deberías
poder acceder también a un servicio oData. Podrías verlo por la SMICM, o simplemente
en la SE80 ejecutando una web dynpro, o en el SAP Gateway Client ejecutando un
servicio oData.

A no ser que para acceder al servidor tengáis algo entre medias (como un SAP Web
Dispatcher), que pueda estar filtrando o redirigiendo el tráfico.

Además, el dominio debería estar publicado, una ip privada no valdría porque sí o sí


tendrías que acceder por VPN.

Te comento nociones, no estoy seguro al 100% pero seguro que tus compañeros de
sistemas pueden corroborrarlo o al menos guiarse.

De todas maneras, la conexión que tú abres es una conexión segura entre tu máquina
y tu cuenta de SAP CP, así que lo mismo es más seguro trabajar con el SAP CC que dar
acceso a la máquina de desarrollo.

Responder

Unknown 4 de enero de 2018, 11:34

Eres un crack. Gracias por el tuto muy bien explicado y de gran ayuda :)

Responder

Respuestas

JorGCalleja 5 de enero de 2018, 9:06

Muchas gracias, me alegra leer que es útil :D

Responder

7 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-instalar.html

8 of 8 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

1 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

Administrador y elegir el tipo de instalación, donde indicamos que será Master y le damos una Evolución del portal del empleado
descripción. de SAP (Parte 3 ...
¿Usar SAP Fiori o SAP Screen
Personas?
Evolución del portal del empleado
de SAP (Parte 2 ...
¿Intranet inaccesible para el Web
IDE? SAP Cloud C...
Evolución del portal del empleado
de SAP (Parte 1 ...
¿Intranet inaccesible para el Web
IDE? SAP Cloud C...

enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Conectarnos con la cuenta


Después, definimos la cuenta SAP HCP que vamos a utilizar. Esto se hace en Define Account y
hay que indicar:
Landscape Host: El host de HCP con el que nos vamos a conectar. Si estás usando
una cuenta trial, será hanatrial.ondemand.com
Account Name: El nombre de tu cuenta HCP, no el de tu usuario. Si tu cuenta es una
trial, el nombre será tu usuario seguido por trial. Por ejemplo, s12345678trial. Eso sí,
las letras en minúscula.
Account User: Tu cuenta de usuario del SAP HCP. En el ejemplo de antes, sería
S12345678. Aquí ya da igual la mayúscula y minúscula.
Password: Pues esto, la contraseña con la que accedes al HCP.
Si para conectarte a internet usas, además, un servidor proxy, lo debes indicar en esta
página. Eso lo puedes ver en la configuración de conectividad de tu navegador web.

Siempre puedes crear cuentas nuevas (o editar/borrar las existentes) yendo a Connector.

Crear el mapeo con el host

Para crear el mapeo de la nube con nuestro servidor SAP nos vamos a Define Account - Cloud
To On-Premise y pulsamos el botón +.

2 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

Y empezamos a rellenar datos a lo loco. Lo primero, el tipo de Back-End. En mi caso es un


ABAP.

Especificamos si el protoloco es HTTP o HTTPS.

Después indicamos el host y puerto donde está nuestro servidor SAP. Estos datos tienen que
ser los datos reales de la máquina (que se pueden obtener a través de la transacción SMICM o
con algunos truquitos como ejecutando la transacción NWBC para que nos cargue el NetWeaver
Business Client). No es necesario indicar el protocolo porque lo hicimos en el paso anterior.

Lo siguiente es indicar el host virtual. ¿Qué es esto? Pues es el servidor al que creerá

3 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

conectarse nuestra cuenta SAP HCP. Nos puede servir para enmascarar el nombre del servidor
real sin tener que publicarlo. Podemos indicar el mismo que el servidor real (por facilidad, si
sólo lo vamos a usar nosotros) o poner el servidor y puerto que nos dé la gana (y que será un
nombre que nos inventemos si no queremos publicar el nombre real).

En cualquier caso, el destination que utilicemos en el SAP HCP tendrá que apuntar a ESTE host
virtual, no al host real.

Otro detalle a tener en cuenta es que, una vez creado el mapeo, el virtual host no se puede
modificar. Si quisiésemos cambiar algo (el host o el puerto), tendríamos que volver a crear el
mapeo.

El siguiente paso es indicar el tipo de seguridad utilizado para autenticarse, si es que lo hay.

Añadimos una descripción.

Y tras aparecernos un resumen...

...¡Tachán! ¡Ya tenemos el mapeo listo!

4 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

Crear listado de recursos accesibles

¿Pero ya hemos acabado? Pues no, nos falta por hacer una cosa más en SAP CC: Indicar los
recursos (o rutas) disponibles. De esta manera podemos controlar que no todo está accesible,
sino sólo lo que nosotros queramos. Básicamente, daremos acceso a aquellos paths del ICF
(transacción SICF) que nos sean útiles para el desarrollo web. Si es sólo para nosotros,
podemos darnos acceso a todo y punto.

Así que volvemos a la pestaña de Access Control para indicar los paths y pulsamos el botón +
de la tabla Resources Accessible On... En el pop-up que nos sale podemos ir indicando los
distintos recursos (carpetas, path de url o como quieras llamarlo) accesibles.

La opción Path and all sub-paths nos permite indicar un path y dar acceso a todas las carpetas
que cuelguen de ella, que será, en general, la opción que escogeremos.

Si queremos dar acceso a todo (porque, por ejemplo, sólo vamos a acceder nosotros),
podemos indicar como url / y marcar la opción Path and all sub-paths.

Pero si lo que queremos es acotarlo más, podríamos indicar los siguientes paths (y siempre con
la opción Path and all sub-paths) para permitir exclusivamente crear y ampliar aplicaciones con
acceso a servicios oData:
/sap/bc/adt si vamos a utilizar el Web IDE para ampliaciones de estándar.
/sap/bc/ui5_ui5 si vamos a llamar remotamente aplicaciones web del servidor SAP
desde SAP HCP.
/sap/opu/odata/sap si vamos a llamar servicios oData. Éste es el primero que nos va
a interesar para nuestros nuevos desarrollos, los dos anteriores están más orientados
a ampliaciones.
Puedes ver otros accesos en la documentación de SAP.

5 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

CONFIGURAR SAP HCP


Ya estamos en el último paso, ¡por fin! Que esto es más largo que un día sin pan.

En SAP HCP sólo tenemos que configurar una cosa, y es el destination. En un post anterior,
contaba cómo crearlo. El proceso es el mismo, pero con un pequeño cambio: El valor de Proxy
Type tiene que ser OnPremise.

En este destination, la URL que indicaremos será la del host virtual que habíamos definido en
SAP Cloud Connector.

Si tenemos abierto SAP CC y el destination creado en SAP HCP, podemos ir a la sección


Connectivity - Cloud Connector. Ahí veremos si la conexión funciona correctamente y podremos
gritar aquello de ¡Eureka!, ¡Está vivo, está vivo!, o lo que más nos plazca.

Ya podemos desarrollar la aplicación oportuna y usar ese destination de tipo OnPremise para
obtener los datos correctamente.

Eso sí, no tenemos que olvidarnos de iniciar el SAP Cloud Connector cada vez que queramos
probarla.

Publicado por JorGCalleja

Etiquetas: destination, hcp, oData, onpremise, sapcc

4 comentarios:
Unknown 9 de abril de 2017, 23:00

6 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: ¿Intranet inaccesible para el Web IDE? SAP C... http://www.uxsap.com/2017/02/sapcc-configurar.html

7 of 7 9/25/2019, 8:04 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

1 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

Evolución del portal del empleado


de SAP (Parte 3 ...
El servicio oData tiene una única colección llamada TextosGeneralesSet, con varias ¿Usar SAP Fiori o SAP Screen
propiedades, entre ellas una llamada Texto para mostrar una línea de texto. En nuestra Personas?
aplicación vamos a mostrar una tabla para mostrar todas esas líneas. Evolución del portal del empleado
de SAP (Parte 2 ...
Pero, además, queremos mostrar debajo de la tabla el total de líneas que tiene dicha colección. ¿Intranet inaccesible para el Web
De esta forma tan tonta vamos a ver dos formas de recuperar los datos y enlazarlos. IDE? SAP Cloud C...
Evolución del portal del empleado
La vista es la siguiente, y lo que nos interesa son los atributos que vienen con llaves, {}. Esos de SAP (Parte 1 ...
son las propiedades que estamos "bindeando"... que digo yo que "enlazando" suena mejor. ¿Intranet inaccesible para el Web
IDE? SAP Cloud C...

enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

ENTENDIENDO EL BINDING
Para mostrar los datos en la vista, nos crearemos uno o varios modelos en el controlador, y en
ellos almacenaremos la información. Después, enlazaremos (binding) dichos modelos con la
vista.

Para crear un modelo de tipo oData, podemos usar la clase ODataModel, con la que
indicaremos la URL en la que está nuestro servicio oData. Después, gracias a este modelo,
podremos consultar las distintas colecciones del mismo para obtener los datos (y cada vez que
solicitemos una colección, en el back-end se ejecutará la magia del ABAP correspondiente).

Pero como no sólo de oData vive el desarrollador de SAPUI5, también nos podemos crear
modelos de tipo JSONModel, cosa que haremos normalmente cuando calculemos valores en
javascript y los queramos volcar en la vista. Muy a menudo, por cierto.

Finalmente, para enlazar (binding) el modelo con la vista, tenemos que hacer dos cosas:

La primera, asignar el modelo a la vista.


La segunda, enlazar los campos (propiedades) que queremos mostrar en la vista

Asignar el modelo a la vista


El modelo se puede crear como una simple variable, instanciando la clase oDataModel o la clase
JSONModel, según nos interese. Algo como:

var oModelo = new sap.ui.model.json.JSONModel();

Después, asignamos el modelo a la vista, con una sentencia como la siguiente:

this.getView().setModel(oModelo, "mis_lineas");

2 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

El segundo parámetro es el nombre que le queramos dar al modelo. Y es un parámetro


opcional, ya que podemos elegir usar un modelo "sin nombre":

this.getView().setModel(oModelo);

Enlazar los campos (o hacer el binding)


Para poder mostrar esta información en la vista, lo que hacemos es enlazarla con el elemento
XML donde queramos mostrarlo, con lo que se llama binding.

La pista de que estamos haciendo un binding nos la dan las llaves, {}, que se usan para indicar
el modelo enlazado y la propiedad a mostrar. El formato con el que se indica el datos es

{nombre_del_modelo>/propiedad/subpropiedad/etc}

Por ejemplo, si tenemos un modelo llamado "mis_lineas" con los siguientes datos:

{
linea: {
texto : "hola, que tal",
id: 1
}
}

Lo podemos enlazar en un elemento de texto de la siguiente forma:

<Text text="{mis_lineas>/linea/texto}" />

Si resulta que usamos el modelo por defecto, sin nombre, se podría dejar así:

<Text text="{/linea/texto}" />

La barra (/) se usa siempre como punto de inicio (raíz) del modelo, y para separar las
propiedades anidadas. Igual que si fuesen carpetas y subcarpetas en un sistema operativo.

Pero en ocasiones podemos encontrarnos conque no se indica la primera barra y nos aparece
algo así:

<Text text="{texto}" />

Cuando esto ocurre es porque ese elemento XML está anidado en otro elemento XML (por
ejemplo, en una tabla). Es este segundo elemento XML el que tiene la navegación inicial:

<Table items="{/linea}">

Así que lo único que tenemos que hacer es, mentalmente, concatenar ambos binding para
saber a qué hace referencia.

Después de esta pseudoexplicación teórica que me he cascado, vamos a ver si explicando el


ejemplo lo entendemos mejor.

EXPLICAMOS LA VISTA
Volvemos a poner la imagen para tenerla a mano:

3 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

En ella tenemos una tabla que hace un binding a {/TextosGeneralesSet}. En nuestro caso, es la
colección principal del servicio oData, así que ya nos podemos imaginar que ahí vamos a
enlazar directamente un modelo con esos datos. Por cierto, es el modelo Voldemort... digoooo,
que me lío... el modelo "innombrable".

Además, dentro de la tabla quiero mostrar la propiedad {Texto}. Como lo asigno en un


elemento anidado en la tabla (un Text), no es necesario que indique toda la ruta, ya que la
parte inicial me lo proporciona el items de la tabla.. Pero es como si estuviese leyendo
/TextosGeneralesSet/Texto.

Finalmente, fuera de la tabla, añadiemos un elemento de texto que pone "Total de líneas". Ahí
ya estamos usando un modelo con nombre, "datosVarios". Aquí podemos pensar que es un
modelo al que vamos a dar un tratamiento adicional en Javascript.

Y AHORA VAMOS A POR EL CONTROLADOR


Ahora pasamos al controlador. Vamos a dividirlo en dos bloques: el del binding directo y
tratamiento de los datos.

Binding directo

En el primero, nos creamos un modelo a partir de un servicio oData. Como no nos interesa
tratar los datos, sino sólo mostrarlos, hacemos directamente el binding. Es esto mismo lo que
hace el Web IDE cuando usamos un Template que usa oData. Echemos un ojo a la función
cargarTabla:

4 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

Las dos primeras líneas de cargarTabla nos permite recuperar la URL del servicio oData que
usaremos (y que habremos definido en el Component.js). Básicamente nos recupera /sap/opu
/odata/sap/ZMIS_TEXTOS_SRV, que es lo que me había definido en el Component.js.

En la tercera línea (var oDataModel) nos creamos el modelo a partir de nuestro servicio oData,
gracias a la clase ODataModel.

Finalmente, en la cuarta, asignamos ese modelo a la vista. Básicamente, hacemos el binding.


Como hacemos el setModel sin especificar un nombre, estamos creando el modelo por defecto.

En cuanto la vista XML se cargue, al crearse la tabla (que tiene items="


{TextosGeneralesSet}"), se llamará al servicio oData solicitando dicha colección. Por detrás, en
el back-end, se cargará el ABAP. Y habremos recuperado los datos en un visto y no visto.

Binding con tratamiento adicional

¿Pero qué ocurre si queremos darle un tratamiento adicional a los datos que nos vienen del
Back-End antes de enlazaros? En ese caso, podemos usar el método read de la clase
ODataModel, como se hace en la función cargarDatosVarios:

Nos creamos un modelo que llame a un servicio oData. Como ya lo habíamos creado y
asignado en la función anterior (esto es un poco de trampa :P) , lo recuperamos con
this.getView().getModel("nombre_del_modelo"). O, si es el modelo sin nombre,
con this.getView().getModel().

5 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

Ya tenemos el modelo. Ahora consultamos la colección que nos interesa con el método read y le
pasamos dos parámetros:
El primer parámetro es el nombre de la colección que vamos a consultar,
/TextosGeneralesSet.
El segundo parámetro es un objeto con dos propiedades:
success, que ejecutará una función que le pasemos si la llamada tiene
éxito.
error, que ejecutará una función que le pasemos si la llamada falla.
Ese segundo parámetro, con su success y su error, lo cargamos como variable de tipo JSON, de
la siguiente forma:

{
success : function(los_datos) : { código para tratar lo datos },
error : function( ) : { código para gestionar el error}
}

Una vez se reciben los datos con éxito del servicio oData, se ejecuta la función success, que
recibe los datos recibidos en el parámetro de entrada (yo a ese parámetro lo he llamado data).
En nuestro ejemplo, en data.results tenemos un array con los datos recibidos del servicio
oData, y podemos hacer con ellos lo que queramos.

Siguiendo con el ejemplo, como lo que me interesa es mostrar el número de líneas, recupero
ese valor y lo asigno en un nuevo modelo de datos, de tipo JSON. Dicho modelo de datos se lo
asigno a la vista como un nuevo modelo. Pero como ya había usado el modelo sin nombre, a
éste le tengo que poner un nombre:

this.oView.setModel(new JSONModel( { aqui los datos } ), "datosVarios")

Y ya está. En cuanto ese dato se cargue, estará disponible en la vista.

El resultado final es algo así:

Vale, no es una aplicación muy elaborada, pero ¿y todo lo que hemos aprendido?

6 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5: Maneras de cargar un servicio oData ... http://www.uxsap.com/2017/02/odata-y-binding.html

7 of 7 9/25/2019, 8:06 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

1 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

RETOCANDO EL SERVICIO ODATA Recibo de Nómina de SAP:


Evolución versiones ERP (...
Gamificación Made in SAP (Parte 3
Lo primero que tenemos que hacer es conseguir que nuestro servicio oData filtre los datos de 3)
correctamente. No tenemos que añadir un filtro para todas y cada una de las propiedades de SAPUI5, oData y filtros: Consultar
cada entidad, pero sí al menos de aquellas que nos interesen. sólo los datos ...
Gamificación Made in SAP (2 de 3)
¿Dónde hacíamos esto? En la clase proveedora de datos, la Data Provider Class. Al crearnos el
Dios mío, ¿dónde está mi
servicio oData, si usamos los datos que nos proporciona SAP por defecto, nos lo habremos
Gateway?
creado con un nombre con formato ZCL_NOMBRE_DE_SERVICIO_DPC_EXT.
febrero (8)
Si buscamos una entidad mediante campos clave, estaremos invocando al método enero (11)
NOMBRECOLECCION_GET_ENTITY. Uno de los parámetros de entrada, IT_KEY_TAB, nos trae
los valores de las propiedades clave. Recuperando esos valores, ya podemos hacer el 2016 (4)
tratamiento que queramos.

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Si lo que buscamos es una colección con filtro, entonces llamamos al método


NOMBRECOLECCION_GET_ENTITYSET. En este caso, lo que vamos a usar es el parámetro
IT_FILTER_SELECT_OPTIONS para recuperar los distintos valores del filtro.

La diferencia con el post anterior en el que habíamos creado este servicio, es que aquí hemos
añadido el filtro para leer el Id.

Tenemos que recordar que los filtros no se calculan automáticamente sólo porque alguien llame
a la URL directamente. Todo lo que queramos filtrar lo tenemos que programar, y si no lo
hacemos entonces ese filtro, simplemente, no se va a tratar.

2 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

UNA VISTA SENCILLITA


La vista es facilona, que no nos queremos complicar la vida, pero comprensible: Una tabla para
mostrar los datos de la colección, que enlazaremos al modelo de datos genérico (sin nombre).
Si se selecciona una fila de la tabla (evento itemPress), se llamará a la función cargarEntrada
para cargar el Id seleccionado en el texto que hay debajo de la tabla. Para cargar ese dato
usaremos un modelo de datos llamado select.

Pero, además, añadimos en la página una cabecera para poder filtrar el ID a buscar, con dos
opciones: "Desde" y "Hasta". Cuando el pulse el botón "Buscar" (evento press) la tabla
recargará los valores mediante la función cargarTabla. Para poder enlazar los datos usaremos
un modelo de datos llamado filterID.

Y AHORA VAMOS AL MEOLLO, EL CONTROLADOR


Lo primero que hacemos en el controlador, en el onInit, es cargar los valores iniciales:

Creamos una instancia de tipo oDataModel para apuntar al servicio oData que
tenemos. Ya lo usaremos más adelante.
También nos creamos un modelo de datos de tipo JSONModel para poder guardar los

3 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

datos del filtro. Si miramos el nombre del modelo, filterID, podemos ver en la vista
que está enlazado con el filtro. Cuando refresquemos el filtro en la vista, este modelo
se alimentará automáticamente. Que guay, oye.
Finalmente llamamos a la función cargarTabla para poder recuperar los datos.

La función cargarTabla es el encargado de leer los datos mediante filtro. Se llama al inicio, con
el filtro en blanco, así que realmente recuperará todo. Pero cuando pulsemos el botón "Buscar"
de la vista, vemos que ese botón también llama a esta función. De esta manera podemos
volver a cargar la colección con el filtro que hayamos indicado.

¿Y cómo lo hacemos para pasar el filtro? Pues en el método read del oDataModel. Uno de los
parámetros de este método es filters, donde podemos indicar los filtros.

El filtro lo podemos crear con la clase sap.ui.model.Filter. En este ejemplo, estamos


construyendo un filtro con formato $filter=Id ge <valor_desde> and Id le <valor_hasta>

Después hacemos la llamada al método read, al que pasamos la url de la entidad y el filtro que
hemos creado. Si la llamada tiene éxito, el valor obtenido lo guardamos en el modelo de datos
general (sin nombre). Así lo estaremos enlazando con la tabla (que tenía items={/}).

4 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

Lo siguiente es buscar una entrada específica (unívoca) de la colección. Es decir, el


GET_ENTITY. Eso lo vamos a hacer con la función cargarEntrada, que hemos enlazado al
evento itemPress de la tabla.

Cuando enlazamos una función al evento itemPress, recibiremos un parámetro que nos va a
permitir identificar la selección hecha. Es el parámetro que he llamado evt.

Mediante evt.getParameter("listItem").getBindingContext() podemos obtener el contexto


enlazado a la selección hecha. Es decir, la entidad que se está mostrando en la fila de la tabla.
Gracias a getProperty conseguiremos el valor de la propiedad que queramos de dicha entidad.

Con el Id obtenido mediante las dos primeras líneas ya podemos generar la URL a consultar,
añadiendo así las propiedades clave entre paréntesis.

El resultado que obtenemos tras llamar al read, lo pasamos al modelo de datos select, que está
enlazado con el texto donde mostramos la selección hecha. ¡Listo, ya obtenemos la selección y
la mostramos en pantalla!

Y EL RESULTADO ES...
Tenemos una tabla que se carga con todos los valores de la colección al iniciarse la aplicación.

5 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

Podemos filtrar los datos buscando por el Id.

Y si seleccionamos una entrada, debajo nos muestra el Id de la selección hecha.

Sí, sí, ya lo sé, la aplicación podría ser mucho más bonita y adaptativa (responsive), la tabla
podía tener más columnas, el filtro podía ser más chulo y el resultado se podría mostrar en un
formulario como el MEV manda. Pero lo suyo era ver cómo funciona el read con filtros. Y lo
hemos conseguido, ¿no? ;)

Publicado por JorGCalleja

Etiquetas: filtros, oData, sapui5

11 comentarios:
Joel 2 de agosto de 2017, 23:44

Hola de nuevo chicos, como siempre excelente material, queria hacer una consulta que va un
poco mas allá de este articulo, hice esta aplicación en eclipse y me funciono todo correcto! hasta
la pasé al servidor para ejecutarla desde allí y practicar un poco los catálogos. Ahora quise hacer
lo mismo pero haciendo la aplicación desde el web ide y funciona igual,el problema es al deployar
al servidor no me muestra la aplicación, abro la consola del navegador y me muestra errores de
html. Mi consulta en concreto sería como deployar desde el web ide al servidor ya que con
eclipse no se presentan problemas. Muchas gracias si me pueden orientar. Saludos,

Responder

Respuestas

JorGCalleja 3 de agosto de 2017, 0:08

Hola, Joel

Tengo un post en el tintero para explicar como desplegar una app en SAP, ¡parece que
me has leído la mente!

En principio la operación es muy sencilla y deberías poder configurarla como la del

6 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

eclipse sin problemas,así que a bote pronto se me ocurre que hayas creado la app en el
WebIDE con una versión superior de SAPUI5 que la de tu servidor SAP. Si tu sapui5 en
sap es una 1.28 y la del webide una 1.32 o superior, ni siquiera te arrancará. En ese
caso tendrías que volver a crearte la app de nuevo.

Si no es el caso, habría que ver el error de javascript a ver si dice algo interesante.

Joel 3 de agosto de 2017, 19:05

Efectivamente, mi webide está en la versión 1.40 y sap en la 1.28, pensé que al hacer
la aplicación en modo 1.28 iba a funcionar pero hasta ahora no he podido mostrar la
primera, voy a tratar de conseguir el webide 1.28 a ver si asi no tengo problemas.
Muchas Gracias!

JorGCalleja 3 de agosto de 2017, 20:24

¿Estás usando el web ide local? En el del Cloud Platform, debería valer con poner que la
app es de la 1.28 cuando la creas. El principal problema es que la 1.28 no entiende el
manifest,además de otros problemas de compatibilidad con el component.

En su momento a mí me dio problemas al crear una app en la 1.28 para subir a un sap
que también era 1.28 con una subversion mayor, al final lo tuve que crear en la 1.26,
pero esa versión creo que ya no está disponible en el webide. Pero más tarde si que
pude subir otra app 1.28... meigas :(

Joel 3 de agosto de 2017, 21:12

Si, el web ide local ya que con el de cloud plataform si pude crear el destino a mi sap,
lo pruebo y me dice que funciona, pero cuando creo la aplicación no me puedo conectar
a él y no me muestra el catalogo :(

Responder

JorGCalleja 4 de agosto de 2017, 8:59

¿Quizá necesitas instalar el SAP Cloud Connector porque el servidor SAP está detrás de un
firewall?

Responder

Respuestas

Joel 4 de agosto de 2017, 15:40

Mi maquina sap no está detras de un firawall y consultando a los basis se supone que
el puerto 8000 está libre. De hecho el demo que hice desde eclipse se conecta
perfectamente desde fuera de la red :S

Responder

Vlady 9 de marzo de 2018, 17:54

muy buen post amigo, especialmente para los que estamos empezando con esto de SAPUI 5
recien , pero seria bueno que compartas el codigo de las aplicaciones que realizas , para un
mejor entendimiento, codigo en mano es otra cosa , saludos y gracias

Responder

Respuestas

JorGCalleja 14 de marzo de 2018, 14:50

¡Gracias!

La mayor parte del código se genera de forma automática, con el propio editor, y sólo
pongo las partes que toco, intentanto dejar siempre claro lo que modifico. En alguna
ocasión se me ha pasado por la cabeza la idea de crearme una cuenta en GitHub, pero
tampoco he tenido tiempo para pelearme con ello.

Responder

Vlady 2 de abril de 2018, 21:43

Hola jorge como estas, estoy con un problema, esta vez necesito ayuda para exportar los datos
de una tabla sap.m.table aformato excel o CSV pero no toda la coleccion del Odata sino por
ejemplo en la barra de busqueda pongo filtrar por usuarios que pertenescan al dep de ventas ,y

7 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros.html

8 of 8 9/25/2019, 8:07 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros2.html

1 of 3 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros2.html

Recibo de Nómina de SAP:


Evolución versiones ERP (...
Gamificación Made in SAP (Parte 3
de 3)
SAPUI5, oData y filtros: Consultar
sólo los datos ...
Gamificación Made in SAP (2 de 3)
Dios mío, ¿dónde está mi
Gateway?

febrero (8)
enero (11)

2016 (4)
Básicamente, recupera el valor que se ha guardado en el elemento xml searchField y crea un
filtro para la propiedad que elijamos (en este caso es el Id) con el operador Contains (que es
como si buscásemos *texto*). ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR

Después, recupera la tabla donde cargamos los datos para poder así recuperar la colección que
Blog de Antonio de Ancos
habíamos enlazado en la agregación items (con getBinding).
Apuntes SAP de Rubens, trasteando
con HCP
Ya sólo nos queda asignar el filtro mediante el método filter para tenerlo todo hecho. En cuanto
Para fotos guapas, las de KESS
se ejecute esta función, se volverá a consumir la colección, aplicando el nuevo filtro.

Y si no te lo crees, siempre puedes poner un breakpoint en el método _GET_ENTITYSET


correspondiente para comprobarlo ;).

CARGAR UNA ENTIDAD INDIVIDUAL


Respecto a la búsqueda de una entidad única. eso lo hace en el Details.controller.js, pero
previamente le tiene que pasar la entidad seleccionada mediante navegación. No entraremos
en detalles de navegación, eso ya es nivel avanzado. Ahora mismo nos vale con creernos que
eso funciona así.

En la tabla tiene que existir una función que se ejecutará cuando se pulse en una fila. Su
nombre lo podemos encontrar en el elemento ColumnListItem , evento press.

Lo que estamos haciendo en esa función es realizar una navegación, pasando como parámetro
la entidad seleccionada.

2 of 3 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAPUI5, oData y filtros: Consultar sólo los dat... http://www.uxsap.com/2017/03/sapui5-y-filtros2.html

3 of 3 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand.html

1 of 5 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand.html

Curso de Portal en SAP Cloud


Platform
SAP UI5 y oData: Asociaciones,
navegación y expand...

abril (8)

marzo (7)
febrero (8)

enero (11)

2016 (4)

Esta información la obtenemos de dos tablas en SAP, del famoso componente "SAP for freakies"
(S4F). Una primera tabla guarda las sagas de películas (Star Wars, Star Trek, etc.) y otra, los ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR
personajes (Luke Skywalker, James Tiberius Kirk, Comandante Adama, Malcom Reynolds y
más). Blog de Antonio de Ancos
Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

De lo que partimos

Previamente habremos creado un servicio oData con dos tipos de entidad: Saga y Personaje (y
las colecciones correspondientes). Nada nuevo que no hayamos contado ya. Ojo, dos tipos de
entidad, pero un único servicio oData.

El cambio con post anteriores, es que en esta aplicación vamos a mostrar información de los
dos tipos de entidad, tanto de la saga (el nombre y cualquier otro dato que queramos añadir)
como de los personajes, todo ello en la misma pantalla.

Gracias a las asociaciones, podremos obtener, con una única llamada, toda la información de
ambos tipos de entidad.

La asociación

Lo primero que haremos será crear una asociación, que nos indicará cómo se relacionan los dos
tipos de entidad.

La navegación

Lo siguiente es crear la navegación, que toma como referencia la asociación creada. Es decir, la
asociación dice cómo se relacionan, y la navegación cómo se usan... por explicarlo de alguna
manera.

Podemos crear una única navegación (por ejemplo, sólo de Saga para obtener sus Personajes
pero no al revés, porque no nos interese) o dos navegaciones (de Saga hacia Personaje y de
Personaje hacia Saga). Lo que estaremos diciendo con la navegación es algo como "cuando
consulto una saga, puedo obtener sus personajes mediante la navegación LosPersonajes".

2 of 5 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand.html

Lógicamente, esto no es directo, luego mediante ABAP (en la data provider class) tendremos
que programar el código para obtener la información.

Consumir el servicio y usar el expand

Hecho esto (y programado todo), podremos obtener los personajes de una saga con una única
llamada. Lo podremos hacer de dos formas:

/sap/opu/odata/sap/ZSAGAS_SRV/Sagas('STARWARS')/LosPersonajes
/sap/opu/odata/sap/ZSAGAS_SRV/Sagas('STARWARS')?$expand=LosPersonajes
La primera nos dará los datos de los personajes de la saga Star Wars, pero no los datos de la
saga. Es como si le pidiésemos "dime los personajes de Star Wars... pero no me sueltes rollos
de Star Wars, sólo quiero los personajes".

La segunda, que usa el expand, nos dará los datos de la entidad Star Wars y una propiedad
adicional, que es la navegación LosPersonajes, donde tenemos todos los personajes. Estamos
diciendo "dame los datos de Star Wars y sus personajes". Es decir, con una única llamada,
tendré toda esa información. Esta segunda es la que, en general, nos puede resultar más
interesante (aunque no tiene por que ser siempre, claro).

Esta información, por supuesto, la podemos encontrar en el documento metadata del servicio

3 of 5 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand.html

Atención: Hay que estar atento con el nombre de la navegación, ya que hay que indicar el
nombre de la navegación, no el nombre de la entidad a la que navegas. Es decir:
Saga('STARWARS')?$expand=Personajes => MAL
Saga('STARWARS')?$expand=LosPersonajes => BIEN

¿Por qué digo esto, que puede parecer evidante? Porque al principio nos podemos confundir,
pensando que lo que indicamos es el nombre del entityset, así que no está de más
mencionarlo. Si resulta que veis un ejemplo en el que se usa el nombre del entityset... es
porque a lo mejor la navegación se llama igual ;).

Con esto, ya hemos explicado la parte teórica con un ejemplo. Un poco más largo que en la
explicación básico del principio, ¿verdad?

¿Y AHORA QUÉ?
En los siguientes post veremos cómo programar el servicio oData en ABAP y cómo hacer la
aplicación SAP UI5 para usar el expand. Pero podéis ver ejemplos reales de como funciona con
el servicio de ejemplo de Northwind:

http://services.odata.org/V2/Northwind/Northwind.svc/$metadata para ver el


metadata y experimentar con las distintas asociaciones que proporciona.
http://services.odata.org/V2/Northwind/Northwind.svc
/Regions(1)?$expand=Territories&format=json para ver un ejemplo de expand.

Publicado por JorGCalleja

Etiquetas: asociacion, expand, navegacion, oData, sapui5

4 comentarios:
Oscar Ramirez 16 de febrero de 2018, 22:32

Hola, muy buen aporte, sigan así ! Tengo un servicio OData que lo importo de una RFC y al
momento de hacer una prueba desde la /n/IWFND/MAINT_SERVICE a mi servicio, me arroja un
estatus de OK, pero no trae ningún resultado en las propiedades. Mando algo como esto
ZBOLTESTDR_SRV/BolSet(PiCustomerId='1000053',PiBolNumber='TESTBOL2').

4 of 5 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand.html

5 of 5 9/25/2019, 8:08 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

1 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

(entidad de saga, entityset de saga y navegación hacia personajes). Curso de Portal en SAP Cloud
Reprogramar el método que nos permite expandir la saga de un personaje Platform
(navegación de un personaje hacia su saga). SAP UI5 y oData: Asociaciones,
navegación y expand...

Como he metido mucha chicha, siempre podéis leer en diagonal y prestar atención a las abril (8)
imágenes ;).
marzo (7)
febrero (8)
CREAR ESTRUCTURAS Y TABLAS enero (11)

El primer paso es crear las estructuras y tablas que necesitaremos en la SE11 y rellenarlas con 2016 (4)
datos por la SM30. Eso ya no es ni oData, ni SAP UI5 ni nada, es SAP puro y duro de toda la
vida. ¡No todo va a ser hacer cosas nuevas!
ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR
En la estructura y tabla de Saga crearemos un campo de Id como campo clave que identificará
cada entrada de forma unívoca, y en la tabla de Personajes crearemos un campo Saga que Blog de Antonio de Ancos
servirá para almacenar el id de la saga. Es decir, ese campo Personajes-Saga es el que nos Apuntes SAP de Rubens, trasteando
sirve para relacionar ambas tablas. con HCP
Para fotos guapas, las de KESS

CREAR EL PROYECTO EN LA SEGW


El servicio lo creamos como un nuevo proyecto en la transacción SEGW. Mi servicio luce tal que
así, con dos tipos de entidad y cada uno con sus correspondientes propiedades, enlazadas con
las estructuras definidas en la SE11.

Hasta aquí no hemos visto nada nuevo. Pero como diría el capitán Tani (¿o era general?), ¡al
turrón!

Lo primero es crearse una asociación, ya que las navegaciones se basan en asociaciones. En el


apartado Associations, con el botón derecho, escogemos Create para crearnos nuestra primera
asociación.

2 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

Los datos que le ponemos son:

Un nombre chulo. Es obligatorio que el nombre sea chulo. Yo le he puesto


PersonajesXSaga, la bomba de nombre.

Después, elegimos entidad principal y entidad dependiente:


La entidad principal sera Saga, y a partir de esa entidad obtendremos los
personajes. Las navegaciones podrán ir en ambos sentidos (sólo creamos
una asociación para ambos sentidos), pero cuando relacionemos
propiedades, de la entidad principal sólo podremos relacionar las
propiedades clave.
La entidad dependiente será Personaje.

En Cardinality, indicamos la cardinalidad que va a tener cada "nodo" de la asociación.


Para entenderlo con un ejemplo, en nuestro caso para cada saga puede haber de 0 a
N personajes, así que en la entidad de Personaje indicamos cardinalidad "0...n". Para
cada personaje, puede que tenga Saga o no, pero si tiene sólo tendrá una. Así que le
ponemos cardinalidad "0...1". También le podríamos haber puesto 1, obligando a que
un personaje siempre tenga Saga. A gusto del consumidor.

Marcamos la opción de "Create related Navigation Property" para que nos cree la
navegación de forma automática, tanto para la entidad principal como para la
dependiente. Para nuestra aplicación básica sólo necesitaríamos la navegación
principal, pero voy a crear las dos navegaciones para aprender más.

Y le ponemos nombre a las navegaciones. Este nombre es el que usaremos cuando


llamemos a la navegación o hagamos el expand, para indicar "que ruta seguiremos
para recuperar los datos relacionados". Podríamos poner el mismo nombre de la
entidad relacionada, pero a mí me gusta diferenciarlos para no liarme luego. Les
pongo LosPersonajes y LaSaga.

Seguimos con el proceso de creación. El siguiente paso es indicar las propiedades relacionadas.
En nuestro caso, la relación es entre Saga-Id y Personaje-Saga.

3 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

El último paso es crear el set de asociación y con eso ya habremos creado nuestra asociación.

¡Tachán! Ya tenemos la asociación creada, y las correspondientes navegaciones.

¿Nos falta algo? Por supuesto, activar los cambios.

Con esto, ya tenemos el servicio oData creado. Ahora lo podemos activar en la transacción
/n/IWFND/MAINT_SERVICE, para ponerlo disponible para su consumo.

Con estas navegaciones y si ABAPeamos todas las posibilidades, podríamos usar combinaciones
como las siguientes (todas comenzando con el nombre del servicio, /sap/opu/odata
/sap/zsagas_srv):

Sagas?$expand=LosPersonajes para obtener todas las sagas y sus personajes.


Sagas('STARWARS')/LosPersonajes para obtener los personajes de Star Wars.
Sagas('FIREFLY')?$expand=LosPersonajes para obtener los datos de Firefly así como
sus personajes.
Personajes?$expand=LaSaga para todos los personajes y, para cada uno, los datos
de su saga.
Personajes('ADAMA')/LaSaga para obtener los datos de la saga a la que pertenece
Adama.

CODIFICANDO
Sí, ya hemos creado el servicio, pero no nos va a devolver nada. Hay que recordar que para
recuperar los datos, tenemos que programar en ABAP las clases que la SEGW nos ha generado
(las Data Provider Classes).

4 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

Así que vamos a la SE24 para codificar. ¿Qué clase es? Pues como he usado el nombre
propuesto por la SEGW al activar, mi clase es ZCL_SAGAS_DPC_EXT.

¿Y qué tenemos que codificar? Podríamos codificar los siguientes métodos:

SAGAS_GET_ENTITY: Nos permitirá consultar Sagas('STARWARS') y la saga de los


distintos personajes mediante navegación y expand, como por ejemplo
Personajes?$expand=LaSaga.
SAGAS_GET_ENTITYSET: No permitirá consultar todas las sagas (Sagas). No hace
falta navegación ni expand, porque cada personaje sólo tendrá una saga.
PERSONAJES_GET_ENTITY: Nos permitirá consultar un personaje específico, como
Personajes('MALCOM').
PERSONAJES_GET_ENTITYSET: Nos permitirá consultar todos los personajes
(Personajes) así como los personajes de las sagas mediante navegación y expand,
como por ejemplo Sagas('STARWARS')/LosPersonajes y
Sagas?$expand=LosPersonajes.

Para la aplicación sencillita que nos vamos a marcar con el Web IDE (un Master con las sagas y
un Detail con los personajes de la saga seleccionada), lo mínimo que necesitamos es:

Al cargar el Master se llama a Sagas: Implementar el método


SAGAS_GET_ENTITYSET en plan sencillito, un simple SELECT como ejemplo nos
valdría. No hace falta implementar navegación.
Al seleccionar una saga carga sus datos: Implementar el método
SAGAS_GET_ENTITY, inicialmente también sin navegación, recuperando en
IT_KEY_TAB el id de la saga y haciendo un SELECT SINGLE. Más adelante le
aplicaremos la navegación, aunque para la aplicación básico no es necesario.
Al seleccionar una saga, carga sus personajes, Sagas('STARTREK')/LosPersonajes:
Implementar el método PERSONAJES_GET_ENTITYSET para recuperar todos los
personajes. Aquí sí que añadiríamos el código para permitir la navegación y el
expand. Aquí empiezan las diferencias con lo que ya sabíamos de oData.

Codificando la navegación LosPersonajes

Así que vamos a implementar PERSONAJES_GET_ENTITYSET para permitir obtener los datos
sin y con navegación (con Personajes y con Sagas('STARWARS')/LosPersonajes).

Primero debemos identificar si hemos navegado o no para llegar a este método. Obtener esa
información es sencillo, y podemos usar uno de los dos siguientes parámetros de entrada, el
que mejor nos venga:

IV_SOURCE_NAME, con el nombre de la entidad origen que ha hecho la navegación


(Saga). Yo voy a implementar el código sobre este parámetro.
IT_NAVIGATION_PATH, con los datos de la navegación (LosPersonajes).

Si IV_SOURCE_NAME viene con el valor Saga, es que estamos navegando desde la Saga ¿Pero,
de qué saga? Pues de la que nos venga en el parámetro IT_KEY_TAB. Sólo tenemos que leer
ese parámetro y añadir un WHERE en nuestro SELECT.

Así que el código tendrá dos SELECT diferentes, uno si no viene de navegación (devolverá
todos los personajes), y otro si viene de la navegación (devolverá todos los personajes de una
saga específica).

5 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

Así que con este código ya tendremos dos funcionamientos diferentes del mismo entityset.
¡Genial! Podemos comprobar la diferencia simplemente invocando el servicio de estas formas y
poniendo un breakpoint, para ver cómo funciona:

Si ponemos /sap/opu/odata/sap/ZSAGA_SRV/Personajes, nos devolverá a todos los


personajes.
Si ponemos /sap/opu/odata/sap/ZSAGA_SRV/Saga('STARWARS')
/?$expand=LosPersonajes, sólo nos devolverá a Luke Skywalker y sus compañeros
de saga.

El resultado cuando hacemos el expand es algo como lo siguiente:

Obtener la Saga de los personajes: Codificando la navegación LaSaga

6 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

Con el apartado anterior ya tendríamos suficiente para crear nuestra aplicación de forma rápida
con el Web IDE.

Pero ahora vamos a implementar otra navegación para complicar un poco la materia. Vamos a
obtener los datos de saga de cada personaje mediante Personajes?$expand=LaSaga.

En ese caso, como lo que tenemos es una (o ninguna) saga por personaje, cada iteración de
personaje pasará por el método SAGAS_GET_ENTITY.

El funcionamiento es similar al caso anterior, en IV_SOURCE_NAME nos vendrá el nombre del


tipo de entidad del que venimos. Sólo hay una diferencia: En un GET_ENTITY siempre nos
viene relleno el parámetro IT_KEY_TAB, y tenemos que datos nos vienen ahí:

Si no hemos navegado, nos vendrá el id de la Saga que estamos buscando. Haremos


el tratamiento sencillo.
Si hemos navegado, nos vendrá el id del Personaje. Buscaremos ese id en la tabla de
personajes y de ahí obtendremos el id de su saga. Ya sólo nos queda buscar en la
tabla de sagas.

El resultado (editado en el Notepad++ para verlo bonito) sería:

Podemos rizar más el rizo, para cuando la llamada sea


Personaje('SKYWALKER')/?$expand=LaSaga. Ahí ya codificaríamos el método
PERSONAJES_GET_ENTITY. Más de lo mismo, la idea ya está ahí ;).

Y DESPUÉS...
¡Dios mío, que coñazo de post! La verdad que me ha tocado retocar mucho el post porque esto
del oData es todo un lío. Espero que haya quedado algo claro.

Ahora ya nos queda la parte entretenida, que es hacer la aplicación SAP UI5. Pero eso lo
veremos en el siguiente post.

Publicado por JorGCalleja

Etiquetas: asociacion, expand, navegacion, oData, SEGW

7 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand2.html

8 of 8 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

1 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

Curso de Portal en SAP Cloud


Platform
SAP UI5 y oData: Asociaciones,
navegación y expand...

abril (8)

marzo (7)
febrero (8)

enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Y un poquito más abajo es donde nos pide la navegación, que se utilizará para rellenar una Para fotos guapas, las de KESS
tabla de datos cada vez que seleccionemos una saga en el maestro. Ahí indicamos
LosPersonajes como propiedad.

Y al finalizar, ¡ya está! Nos ha funcionado sin haber hecho nada especial. Cada vez que
seleccionemos en el Master una saga, en el Detail nos mostrará una tabla con sus personajes.
Estamos hechos unos máquinas.

¿Pero cómo consigue Web IDE enlazar la navegación?

Para saber cómo se enlaza la navegación, buscamos la tabla (<Table>) en la vista de detalle,
Detail.view.xml e investigamos un poco.

Ahí encontraremos un atributo que pone items="{LosPersonajes}". Este atributo (que es una
agregación) es el que va a invocar la navegación. Lo que hace es decir "en esta tabla tengo
ciertos items -las filas- y las voy a pintar con lo que me venga en la navegación LosPersonajes,
así que voy a invocarla". Después, en el bloque items que hay más adelante, ya especifico las
propiedades de los personajes que voy a pintar (en nuestro ejemplo, el nombre y el id).

2 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

¿Pero cómo sabe de qué entidad de Saga debe mostrar los personajes? Podemos revisar este
post donde se explica el código generado de forma automática, pero voy a explicarlo
rápidamente.

Cuando se pinta el detalle, LosPersonajes no vale nada, es una entidad vacía, así que la tabla
puede venir inicialmente en blanco. Pero cuando el controlador (Detail.controller.js) enlaza la
entidad seleccionada a la vista (busca el código this.getView().bindElement), entonces ya
tenemos datos en la vista.

Por ejemplo, si hemos seleccionado como serie Firefly (mi favorita, dónde va a parar), en la
vista se enlaza /Sagas('FIREFLY') y, por tanto, los items de la tabla realizarán la
llamada /Sagas('FIREFLY')/LosPersonajes. ¡Caray, nuestra navegación!

VAMOS A EXPANDIR
Queremos añadir una nueva opción en la tabla, el nombre de la saga de cada personaje. Sí, sí,
lo sé, no tiene mucho sentido, porque cada personaje es de la saga que se ha seleccionado en
el maestro, pero esto sólo tiene un objetivo práctico.

LaSaga era la navegación que llamaremos desde Personajes. Así que cambiamos la propiedad
Id por la propiedad LaSaga/Nombre.

Esto, tal cual, no nos mostrará nada. Hemos enlazado el campo, pero no lo hemos expandido ni
se hace la navegación de forma automática como ocurre con el items.

3 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

¿Cómo hacemos para obtenerlo? Podemos elegir hacerlo en dos sitios diferentes:

Podemos hacerlo en el controlador, en el lugar en el que enlazamos la entidad


seleccionada con la vista. Buscamos el método bindElement, donde sObjectPath es la
saga seleccionada (por ejemplo, /Sagas('FIREFLY'). ¿Os dije que era la que más me
molaba?).

Dentro del parámetro parameters, podemos añadir el parámetro expand sobre dicho
sObjectPath. Como lo que estamos enlazando es una entidad de /Sagas, lo que
tenemos que expandir es LosPersonajes y luego LaSaga, así que nos queda algo
como:

parameters: {expand: "LosPersonajes/LaSaga"}

Pero también podemos hacerlo en la vista. En lugar de hacer el expand donde hemos
dicho antes, vamos a la tabla de la vista y modificamos el valor de items. Ahora ya
tenemos varios parámetros que indicar, así que no nos vale con hacer items=
{LosPersonajes}, sino que tenemos que indicar el path que enlazamos y los
parámetros adicionales, donde estará el expand. Nos quedará esto:

items="{path: 'LosPersonajes', parameters : { 'expand' : 'LaSaga' }}".

4 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

Con ambos modos, estaremos haciendo el expand tras seleccionar una nueva saga, y la tabla
ya tendrá datos que mostrar correctamente.

Todo esto parece un jeroglífico, pero al final acaba teniendo su lógica y todo.

TRATAR LOS DATOS DEL EXPAND EN EL


CONTROLADOR
Vamos a imaginarnos un nuevo caso. Queremos recuperar los datos pero tenemos que hacerles
algún tratamiento dentro del código, así que no nos vale con enlazarlo directamente a la vista.
¿Cómo hacemos ahí el expand?

Pues fácil, cuando hagamos el read del modelo de datos, simplemente le tenemos que añadir el
parámetro urlParameters, donde indicamos que queremos hacer el expand, tal que así:

urlParameters: { "$expand" : "LaNavegacionQueQueramos" }

Ahora veamos el ejemplo: Mostraremos una tabla con todos los personajes que tenemos en la
base de datos, no sólo los de la saga elegida. Y entre los campos que vamos a mostrar, estará
el nombre de la saga. Así que usaremos la colección /Personajes y expandiremos LaSaga.

5 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

En este código, leemos la colección Personajes, le hacemos el expand para poder obtener el
nombre de sus sagas, y asignamos dicho resultado a un nuevo modelo de datos llamado PJs.

En oData (dentro de la función del success, que se ejecuta cuando se lee con éxito la entidad)
tenemos todos los datos de la colección, incluido el expand. Si hubiésemos querido, podríamos
haber recorrido ese parámetro en un bucle y obtener el nombre de la saga con
oData.results[i].LaSaga.Nombre.

Y para mostrarlo, basta con ir a la vista de detalle y crear una nueva tabla, donde enlazamos el
nuevo modelo de datos que hemos creado, PJs.

Con eso, ya tenemos una tabla debajo de la otra, y hemos aprendido bastante de asociaciones,
navegaciones y expand. Y a mí me han entrado ganas de volver a ver ciertas series de
televisión, ¿os imagináis cuáles?

6 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: SAP UI5 y oData: Asociaciones, navegación y... http://www.uxsap.com/2017/05/asociaciones-y-expand3.html

7 of 7 9/25/2019, 8:09 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

1 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

mayo (6)
abril (8)

marzo (7)

febrero (8)
enero (11)

2016 (4)

Vale, pues me parece que nos vamos a tener que dar las autorizaciones necesarias para
ALGUNOS ENLACES QUE TE PODRÍAN
acceder al servicio.
INTERESAR

Nos vamos a encontrar con dos tipos de roles disponibles para este servicio: GW_Admin para Blog de Antonio de Ancos
administrador y GW_User para usuarios. Apuntes SAP de Rubens, trasteando
con HCP
Para nuestras pruebas, nos crearemos un grupo (en Security - Authorizations del cockpit de CP) Para fotos guapas, las de KESS
y le asignaremos ambos roles, con los siguientes datos:

Subaccount: gwaas
Application: gwaas
Role: Primero GW_Admin y luego otro con GW_User

¡Que no se nos olvide asignar nuestro usuario al grupo!

Pues con estos pasos, ya deberíamos poder acceder al servicio, vamos a probar suerte otra
vez:

2 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

Vale, vamos a registrar un servicio. Pulsamos el botón "Register" y nos aparece una pantalla
donde elegimos el destination que apunta a nuestro back-end. Pero no nos sale nada.

Espera, quizá nos hace falta crear un destination específico para esto, ¿no? Pues va a ser que
sí.

Tenemos que indicarle al CP dónde está ese pequeño componente del back-end que nos va a
devolver los servicios. Se trata del IWBEP, que es el componente del Gateway que siempre
tiene que instalarse en el back-end para permitirnos crear servicios oData y comunicarse con el
front-end.

Si tenemos un NetWeaver 7.40 o superior, ya lo tendremos instalado de serie con el propio


Gateway. En cualquier caso, tenemos que comprobar que está activo en la SICF.

3 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

Una vez activo, nos creamos el destination para que apunte a este componente, con la url
http://<servidor>:<puerto>/sap/iwbep?sap-client=<mandante>.

El destination lo tenemos que crear dentro de la configuración del servicio ODP, no en el


Destinations del cockpit de Cloud Platform. Al menos yo he probado a crearlo desde el
destination global pero después no me aparece en el servicio del ODP (incluso indicando el
parámetro WebIDEUsage = odata_hcp_odp).

El tipo de destination puede cambiar respecto a la imagen, dependiendo de si nuestro back-end


no está expuesto a internet (en tal caso es de tipo onPremise y tenemos que usar el SAP Cloud
Connector) o si sí que está expuesto a internet (en tal caso, será de tipo Internet).

Con este nuevo cambio, ya podemos escoger el destination correspondiente en el ODP y ver los
servicios oData disponibles.

4 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

Hala, ahora buscamos y escogemos el servicio que nos interesa y lo registramos:

Una vez registrado, ya nos aparece en la pantalla de administración de ODP:

Pulsando sobre el nombre del servicio, podemos ver sus propiedades. De aquí nos interesa la
URL para poder usarlo, ya que la necesitaremos para crear un nuevo destination (sí, otro más)
y para invocar el servicio al crear la aplicación en el Web IDE.

5 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

Ahora que ya tenemos el servicio oData disponible, ¿cómo podemos usarlo?

Lo primero es crear el destination que va a apuntar a nuestro Gateway en la nube. Sólo nos
hace falta crearlo una vez para todos los servicios oData que vayamos a usar.

Nos dirigimos al cockpit de SAP CP para crearlo ahí. Tiene que apuntar al dominio y subdominio
del Gateway (lo obtenemos a partir de la URL que obtuvimos al principio).

Tenemos que añadir las propiedades WebIDEEnabled = true para que esté disponible en el Web
IDE y WebIDEUsage = odata_gen para tenerlo disponible en el listado de destination de tipo
Service URL.

Ya sólo nos hace falta crear una aplicación SAP UI5 y ver que podemos consultar nuestro
Gateway en la nube, a través de la opción Service URL. Así que nos vamos ahora al Web IDE y
nos creamos una aplicación eligiendo una plantilla que nos permita usar servicios oData.

Para obtener el servicio oData que queremos usar, indicamos como url adicional el resto de la
URL que teníamos del servicio, algo como odata/sap/nombre_del_servicio.

6 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

Genial, ya tenemos nuestra aplicación que apunta a nuestro Gateway en la nube.

Publicado por JorGCalleja

Etiquetas: destination, gateway, hcp, iwbep, oData, odata provisioning

No hay comentarios:
Publicar un comentario

Comentar como:

Publicar

Entrada más reciente Página principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

7 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: OData Provisioning: Configurar el Gateway en ... http://www.uxsap.com/2017/06/configurar-gateway-nube.html

8 of 8 9/25/2019, 8:10 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

1 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

Una vez creada la aplicación, creamos una tabla en la vista. Podemos hacerlo a mano, como mayo (6)
unos campeones, o podemos aprovecharnos del Layout Editor, que se puede abrir pulsando abril (8)
sobre el nombre de la vista, botón derecho, "Open with -> Layout editor". Con esta opción
marzo (7)
podemos añadir un elemento Table de forma rápida para que nos genere el esqueleto.
febrero (8)
enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

El código que nos genera, que he agrupado un poco para poder verlo en una única captura, y
teniendo en cuenta la abreviatura xmlns="sap.m", es el siguiente:

¿Y qué es lo que conforma la tabla?

La tabla va a estar definida por columnas y filas. Las columnas se definen dentro del agregado
columns, y las filas del items.

<Table>
<columns>aquí las columnas </columns>
<items>aquí las filas</items>
</Table>

Podemos poner el columns antes o después del items, como más nos guste. A mí,
personalmente, me gusta más poner delante el columns. me parece más ordenado (se ve antes
la estructura de la tabla que los datos), pero ahora me ha vencido la pereza y he usado el
Layout editor :D.

Columnas

Las columnas nos van a servir para tres cosas: Dar estructura a la tabla (cuantas columnas
hay, cómo se alinean, su comportamiento de adaptabilidad, etc.) y poner los títulos de los
encabezados y el pie de la tabla.

Todas las columnas las pondremos dentro del agregado columns:

<columns>...</columns>

Para cada columna que tenga la tabla, usaremos un elemento de tipo sap.m.Column y dentro

2 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

del mismo indicamos el título con la etiqueta header y el pie con la etiqueta footer.

En nuestro ejemplo vamos a crear los encabezados (header) con elementos de tipo
sap.m.Label, que va a ser lo más sencillo.

Además, vamos a alinear la columna "Posición" a la derecha (al final de la columna), para que
quede bonico. Eso se consigue con el atributo hAlign="End".

Así que para nuestro ejemplo, en el que tenemos tres columnas, nos quedará algo así:

Filas

Ahora vamos a por las filas, para lo que usaremos el agregado items. Es ahí donde vamos a
indicar los datos a mostrar.

<items>....</items>

Cada fila, dentro de items, estará contenida en un elemento de tipo sap.m.ColumnListItem.


Olvidémonos de cabecera y pie, ya que estos no son filas, sino que forman parte de la
configuración de las columnas.

Como nosotros teníamos seis filas, nos crearemos seis ColumnListItem.

<items>
<ColumnListItem>fila 1</ColumnListItem>
<ColumnListItem>fila 2</ColumnListItem>
<ColumnListItem>fila 3</ColumnListItem>
<ColumnListItem>fila 4</ColumnListItem>
<ColumnListItem>fila 5</ColumnListItem>
<ColumnListItem>fila 6</ColumnListItem>
</items>

Dentro de cada una fila, tenemos que especificar las celdas. Eso lo hacemos dentro de las
etiquetas <cells></cells>. Cada elemento que creemos aquí dentro, será una celda de esa fila,
pudiendo haber tantas celdas como columnas creadas en el paso anterior.

Por tanto, como cada fila va a tener tres celdas (porque hemos definido tres columnas), el
contenido lo mostraremos usando tres elementos de tipo sap.m.Text.

<items>
<ColumnListItem>
<cells>
<Text /><Text /><Text />
</cells>
</ColumnListItem>
...

¿El resultado? El siguiente:

3 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

Aunque en la celda de "posición" no hemos indicado su alineación, como la columna tiene


alineación "al final", la celda correspondiente de cada fila tendrá la misma alineación.

RESULTADO FINAL
El resultado final será el siguiente: Una tabla con tres columnas, un encabezado y seis filas. Y
la columna central (Posición), alineada al final.

Complicando las celdas

¿Y qué ocurre si queremos poner varios elementos en una misma celda? Por ejemplo,
imaginemos que en la primera fila, segunda columna (la celda de posición), queremos poner
una imagen y un texto.

Si añadimos todos los elementos sin más, sólo se mostrarán tantos como columnas haya, el
resto no se mostrarán.

Que se ve así:

4 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

La solución pasa por usar un elemento de tipo Layout, dentro del cual incluiremos los
elementos que necesitamos. Por ejemplo, nos valdría una "caja horizontal" (sap.m.HBox) y,
dentro de ella, la imagen y el texto. En ese caso, todo el conjunto que hay dentro del HBox se
tratará como una única celda.

¡Y con eso ya tenemos lo que buscábamos!

Y LO SIGUIENTE ES...
El siguiente paso es crear una tabla recuperando los datos de un servicio oData. ¿Pero cómo
vamos a saber cuantas filas tenemos que crear? Que a lo mejor el servicio un día nos devuelve
20 entradas y otro, 40.

Pues eso lo veremos en el siguiente artículo.

Publicado por JorGCalleja

Etiquetas: sapui5, tabla, tutorial

No hay comentarios:
Publicar un comentario

5 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (I, tabla con datos est... http://www.uxsap.com/2017/06/crear-tabla-1.html

6 of 6 9/25/2019, 8:12 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

1 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

móvil? ¡Anda ya!


junio (4)
mayo (6)

abril (8)
marzo (7)

febrero (8)
enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Después, en la sección Models, añadimos una nueva entrada pulsando también el botón +.

Ahí escogemos la fuente de datos creada antes y lo marcamos como modelo por defecto (¡el
modelo sin nombre!).

Con estos pasos nuestra aplicación instanciará el modelo por defecto usando como fuente el
servicio oData de Northwind.

2 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

CREAR LA TABLA DE FORMA SENCILLOTA

En el fichero Tabla.view.xml nos creamos una tabla, recordando lo que habíamos visto de los
agregados items y columns.

Os recuerdo que estamos usando la abreviatura xmlns="sap.m", por eso donde ponga <Table>
realmente es como si dijésemos <sap.m.Table>.

Definir la colección

Lo primero, es indicar qué colección vamos a cargar en la tabla. Eso lo hacemos usando el
atributo items dentro de la etiqueta de la tabla:

<Table items="{nombre_del_modelo>/Coleccion}">

Como el modelo que estamos usando es el por defecto (sin nombre) y la colección es
Employees, ponemos lo siguiente:

<Table items="{/Employees}">

Ojo, que en la tabla vamos a tener realmente dos "secciones" llamadas items: El atributo (lo
que acabamos de definir ahora mismo), que nos indica la colección a usar, y el agregado (lo
que viene entre la etiqueta <items></items>), que veremos al Definir las filas.

Definir las columnas

Después definimos las columnas que vamos a mostrar. Serán seis: Apellido, Nombre, ID, Título,
Nacimiento y Contratación. Esto lo hacíamos en el agregado <columns>.

Definir las filas

Y en el agregado items... tachán tachán... ¡sólo creamos una línea!

En este caso, lo que estamos haciendo en items es definir una especie de plantilla, que se
repetirá una vez por cada registro de la colección Employees.

<Table items="{/Employees}">
<columns>aquí las columnas</columns>
<items>
<ColumnListItem>
<cells>aquí las celdas de la plantilla</cells>
</ColumnsListItem>
</items>
</Table>

Vale, pues vamos a definir la plantilla. Tenemos que saber las propiedades de la colección que
mostraremos en la tabla. Cada propiedad la mostraremos entre llaves, en plan:

<Text text="{NombrePropiedad}">

3 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

Podemos añadir textos fijos si queremos, sin meterlos entre llaves (<Text text="el valor es
{NombrePropiedad}">), pero no nos vamos a complicar.

¿Cómo sabemos las propiedades que queremos mostrar? Venga, a visitar la entidad Employee
en el metadata:

Con toda esta información ya podemos definir "la plantilla" de las filas, y el todo nos queda así:

Pues si ejecutamos la aplicación y todo ha ido bien, tendremos el resultado que buscábamos.

4 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

DARLE UN POQUITO DE COLOR A LA TABLA


Vamos a dejar la tabla un pelín más bonita. Sólo para ver alguna cosa que podemos hacer.

Os pongo el código a continuación y vamos comentando los cambios hechos:

Lo primero que hacemos es ordenar la tabla por el apellido (LastName). Eso lo conseguimos
cambiando el atributo items, con este formato:

<Table items="{ path: '/NombreColeccion',


sorter: { path: 'NombreDeLaPropiedadParaOrdenar',
descending: false
}
}/>

5 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

Además, para evitar que la tabla cargue demasiados datos (sobre todo cuando usamos un
dispositivo móvil), podemos usar el atributo growing, que nos permite definir cuantas filas va a
cargar la tabla, independientemente de que la colección tenga más. Las opciones que he puesto
en el ejemplo son:

growing = true para activar esta propiedad


growingThreshold=5 para mostrar sólo 5 filas. Si no se indica este atributo, por
defecto muestra 100.
growingScrollToLoad=true para que, cuando hagamos scroll al final de la tabla,
cargue más entradas (otras 5 en nuestro caso).

También añadimos un título a la tabla, gracias a headerToolbar.

Por último, las fechas mostradas por defecto quedan un poco feunas, así que le damos un
formato para que se vean más cortitas. Hay varias opciones que podemos ver aquí, yo he
elegido un formato medio (por ejemplo, 11 jul. 2017).

Eso lo conseguimos con este formato:

<Text text="{ path: 'NombreDeLaPropiedad',


type: 'sap.ui.model.type.Date',
formatOptions: { style: 'medium' } }"/>

Con estos cambios, nos queda la siguiente tabla:

Y PARA FINALIZAR
Para finalizar, vamos a hacer unos ajustes adicionales para que la tabla se adapte al tamaño del
dispositivo. Pero esto lo veremos en el siguiente post.

Publicado por JorGCalleja

Etiquetas: growing, Northwind, oData, sapui5, tabla, tutorial

4 comentarios:
Jose FSM 12 de julio de 2017, 14:34

Muy buen artículo, como siempre. Te sigo desde hace tiempo pero hoy es la primera vez que me
voy a atrever a hacerte una pregunta. Es algo que mis compañeros y yo llevamos tiempo
dándole vueltas y no sabemos resolver. Es para alguien verdaderamente experto en el Gateway
que une SAPUI5 y los módulos de función ABAP. Allá va:

6 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

¿sabrías como hacer llegar los parámetros $top, $skip y $count de una llamada OData a las
funciones ABAP? Tenemos un problema, y es que cuando llamamos a una función ABAP que
devuelve un listado no podemos pasarle los parámetros de paginación (skip y top), por lo que la
función en ABAP siempre tiene que devolver todos los registros (si son 10.000 pues los 10.000).
No nos pasa lo mismo con el $filter, que si se lo podemos pasar y gracias a eso realizamos el
filtrado. Es en el Gateway donde se aplica el skip y el top y nos los devuelven a la aplicación
SAPUI5 ya paginado. Sin embargo, como en ABAP si que se realiza todo el esfuerzo de devolver
los 10.000 registros, pues tarda muchísimo. Parece que el único parámetro OData capaz de
recibir ABAP es el $filter, que es donde vienen todos los campos.

La solución más sencilla sería añadir a cada entidad OData dos parámetros más que hagan la
función del $top y el $skip, pero eso lo vemos una chapuza y no queremos hacerlo. ¿Tu sabrías
como se puede hacer?

Un saludo y felicidades por tu blog.

Responder

Respuestas

JorGCalleja 12 de julio de 2017, 14:58

Hola,

¿Habéis probado usando el parámetro io_tech_request_context del get_entityset? Mira


en este ejemplo y busca io_tech_request_context->get_top() a ver si hay suerte y os
vale.

https://help.sap.com/saphelp_nw74/helpdata/en/30
/116c10d4ff42908d4a4ad023b77634/frameset.htm

Responder

Naoto Amari 7 de marzo de 2018, 18:20

Hola una consulta estaba repasando a ver si daba con la respuesta, como le puedo pasar a mi
odata un parametro que ingrese desde la aplicacion, por ejemplo supongamos que le digo al
usuario que ingrese un material para buscar ese material en la mara y que me devuelva el
resultado en una lista o tabla

Seria algo tipo https://:/...//Products?$filter=Materials eq 'IDMATERIAL'

este filtro donde lo programaria en abap ? a parte de marcarle el check de filter. Si tienes un
ejemplo bajo manga te lo agradeceria esta y la otra vida jaja

Responder

Respuestas

JorGCalleja 3 de abril de 2018, 0:09

Mira este post, aunque creo que llego tarde con la respuesta
https://uxsap.blogspot.com.es/2017/03/sapui5-y-filtros.html

Responder

Comentar como:

Publicar

Entrada más reciente Página principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

Política de privacidad y cookies

7 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (II, tabla enlazada co... http://www.uxsap.com/2017/07/crear-tabla-2.html

8 of 8 9/25/2019, 8:11 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

1 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

móvil? ¡Anda ya!


junio (4)
mayo (6)

abril (8)
marzo (7)

febrero (8)
enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Realmente nos valdría cualquier aplicación cutrecilla que hagamos, incluso una que tenga dos simples textos, para
Así que vamos a usar el componente meter cada uno en "un icono"
sap.m.IconTabBar. Este componente tendrá una serie de
items, de los que vamos a ver dos, con las propiedades más interesantes para este caso:

IconTabFilter, que será cada uno de los iconos que tenemos en la barra. Cada vez
que se pulse uno de estos iconos, se mostrará el contenido que tiene asignado y se
ocultará el contenido de los restantes IconTabFilter.
En él podemos usar las siguientes propiedades, todas opcionales:
icon para indicar el icono que se va a mostrar. Los iconos podemos
encontrarlos en el Explorador de Iconos. Ojo, también es opcional, aunque
sea una barra de iconos ;).
text para añadir un texto debajo del icono.Un texto mediante la propiedad
text.
iconColor para aplicarle un color/estado al icono: Positive (verde), Critical
(amarillo), Negative (rojo). De esta manera le podemos dar un significado
de prioridad al icono. El color, por supuesto, dependerá de cómo hayamos
configurado los estilos, el que indico es el de por defecto.
count para informar de un dato numérico en el icono. Aquí normalmente, si
ponemos algo, será el número de entradas de la tabla o lista que se va a
mostrar al pulsar ese icono. De momento, para este ejemplo, sólo vamos a
meter el número de entradas de la leyenda a capón, aunque más adelante
de este mismo post os cuento algo interesante respecto al count.
IconTabSeparator, que es un separador vertical que nos sirve para agrupar/separar
visualmente los iconos. Este objeto va a venir sin propiedades ni contenido.

Para nuestro ejemplo, añadimos tres IconTabFilter y un IconTabSeparator. El tercer


IconTabFilter lo he metido de forma simbólica, como si fuese una ayuda adicional de la
aplicación. Una chorradilla, vaya, una excusa para usar el IconTabSeparator y que se
entendiese mejor.

<IconTabBar>
<items>
<IconTabFilter>aquí es donde irá la primera tabla</IconTabFilter>
<IconTabFilter>aquí ira la segunda tabla</IconTabFilter>
<IconTabSeparator />
<IconTabFilter>Aquí irá información explicativa</IconTabFilter>
</items>
</IconTabBar>

2 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

Y tenemos algo como lo siguiente:

Ahora lo que tenemos que hacer es meter, en cada IconTabFilter, el código correspondiente que
queremos que se muestre al pulsar el icono:

<IconTabBar>
<items>
<IconTabFilter><Table>Tabla 1</Table></IconTabFilter>
<IconTabFilter><Table>Tabla 2</Table></IconTabFilter>
...
</items>
</IconTabBar>

Y nos queda:

3 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

Con esto, habremos ordenado la aplicación para que luzca más bonita.

¡Buen trabajo! Good job! majQa'.

Ya ordenada la aplicación de tablas, sólo nos queda hacer la tabla de empleados responsive.
Eso lo dejamos para otra semana.

EXTRA 1: COUNT DINÁMICO

4 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

Hemos dicho que el atributo count nos permite indicar un número informativo. Nos valdría, por
ejemplo, para indicar el número de entradas de la tabla que va a mostrar, la de empleados, que
se obtiene con esta url del servicio oData Northwind.

Así que podríamos pensar algo como "¡Genial! Lo enlazamos con count="{/Employee/$count} y
así me muestra el número de empleados"...

Pues no, eso no nos valdrá :(. El count no es capaz de hacer la llamada oData, así que cargaría
un modelo vacío.

Lo que habrá que hacer es enlazarlo con un modelo que calcularemos dentro del controlador
(ya sabéis, el Javascript). Pero eso lo veremos en un próximo post, ¡que no me da la vida para
más!

EXTRA 2: ICONTABBAR COMO FILTRO DE TABLA


El IconTabBar nos vale no sólo para mostrar u ocultar el contenido según pulsemos un icono u
otro. Lo podemos usar para aplicar filtros (u otras operaciones) sobre contenido fuera del
propio IconTabBar.

Por ejemplo, podríamos tener un IconTabBar con tres iconos y, después, una tabla que muestra
un listado de productos. Uno de los iconos servirá para mostrar los productos de peso ligero,
otro para los de peso medio y otro para los pesos pesados. Ese ejemplo lo podemos ver en el
Explored.

Publicado por JorGCalleja

Etiquetas: icontabbar, icontabfilter, sapui5, tutorial

No hay comentarios:
Publicar un comentario

Comentar como:

Publicar

Entrada más reciente Página principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

5 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Separar contenido mediante barras de... http://www.uxsap.com/2017/07/sapui5-icontabbar.html

6 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

1 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

móvil? ¡Anda ya!


junio (4)
mayo (6)

abril (8)
marzo (7)

febrero (8)
enero (11)

2016 (4)

ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR

Blog de Antonio de Ancos


Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

o se han colocado debajo de la primera (el nombre y el id).


Comparándola con la tabla original:

ENTENDAMOS LAS PROPIEDADES DE


SAP.M.COLUMN QUE USAREMOS
Primero, veamos un extracto del código para entender dónde estamos. Lo que nos interesan
son las propiedades de Column:

<Table>
<columns>
<Column><Label text="Apellido" /></Column>
<Column minScreenWidth="50em"
demandPopin="true"
popinDisplay="Inline"><Label text="Nombre" /></Column>
... más columnas ...

2 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

</columns>
<items>aquí van las celdas</items>
<Table>

Para aquellas columnas que queremos que se comporten de forma adaptativa (responsive),
usaremos las tres siguientes propiedades:

minScreenWidth: Nos indica que la columna es responsive. Aquí indicaremos un


ancho en píxeles, en em... o utilizando el enumerador sap.m.ScreenSize. Si el ancho
del navegador es inferior a este valor, entonces la columna se adaptará como
corresponda. Por defecto, se ocultará.

demandPopin: Aquí viene la joya de la corona responsive. Si asignamos


minScreenWidth y añadimos demandPopin="true", la columna no se ocultará, sino
que se colocará debajo de la primera columna.

popinDisplay: Cuando demandPopin sea true, podemos indicar cómo se va a mostrar


la columna de forma adaptativa usando uno de los tres posibles valores
de sap.m.PopinDisplay. Block, Inline y WithoutHeader.

La diferencia entre estas tres opciones la vamos a ver con un ejemplo, una tabla con
la guardia de Ankh-Morpork, donde "Nombre" es responsive:

Apellido Nombre
Vimes Sam
Fundidordehierroson Zanahoria
von Uberwald Angua

Si usamos Block se mostrará la columna como un bloque, primero el texto


de la cabecera y luego el contenido:

Apellido
Vimes
Nombre
Sam
Fundidordehierroson
Nombre
Zanahoria
von Uberwald
Nombre
Angua

Si usamos Inline mostrará la columna en una única línea, con formato


Nombre: Sam:

Apellido
Vimes
Nombre: Sam
Fundidordehierroson
Nombre: Zanahoria
von Uberwald
Nombre: Angua

Si usamos WithoutHeader mostrará el contenido de la celda pero no el título


de la columna:

Apellido
Vimes
Sam
Fundidordehierroson
Zanahoria
von Uberwald
Angua

HACEMOS LOS CAMBIOS EN NUESTRO CÓDIGO


Hala, a hacer unos cambios en nuestra tabla de empleados. En nuestro ejemplo, sólo la primera

3 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

columna será fija, en resto se adaptará según las necesidades:

El nombre se mostrará debajo de la primera columna cuando el ancho sea inferior a


50em. Lo mostrará todo en una línea: Nombre: Faramir.

El identificador se pondrá también debajo cuando el ancho sea inferior a 50em. Sin
embargo, no mostrará la cabecera (ID), sólo el número.

El título (Sr., Sra.) no nos aporta mucha información, así que lo ocultaremos
directamente cuando el ancho sea inferior a 50em.

Si reducimos más el ancho y se hace inferior al de una Tablet (600px), tanto la fecha
de nacimiento como la de contratación se pondrán debajo en modo bloque.

Tras tanto blablabla que os he soltado, el código que tenemos es el siguiente:

En la cabecera de la aplicación, hemos usado como abreviatura xmlns="sap.m", así que donde dice
<Column> realmente hace referencia a sap.m.Column, y donde dice <Table>... pues a sap.m.Table.

Y EL RESULTADO ES EL SIGUIENTE
Si reducimos el ancho del navegador hasta que sea inferior a 50em, el nombre, el ID y el título
se verán afectados y se verá tal que así:

4 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

Y si reducimos aún más el ancho, todas las columnas acabarán viéndose afectadas, cada una
con un formato diferente (Inline, WithoutHeader o Block).

Con esta opción, podremos ver los datos en el pc, en una tablet o en el móvil, y no
necesitaremos usar el scroll horizontal. ¡Ya hemos hecho nuestra tabla responsive!

Publicado por JorGCalleja

Etiquetas: responsive, sapui5, tabla

No hay comentarios:
Publicar un comentario

5 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Crear una tabla (III, tabla responsive) http://www.uxsap.com/2017/07/crear-tabla-3.html

6 of 6 9/25/2019, 8:13 PM
Trasteando con SAP UX: SAPUI5: Mostrar el tamaño de una tabla en el ... http://www.uxsap.com/2017/08/mostrar-tam-de-tabla.html

1 of 4 9/25/2019, 8:14 PM
Trasteando con SAP UX: SAPUI5: Mostrar el tamaño de una tabla en el ... http://www.uxsap.com/2017/08/mostrar-tam-de-tabla.html

oData, por cierto).

Finalmente, debemos tener en cuenta que la propiedad que queremos cambiar se


llama count, y que la podemos modificar en el XML directamente (por ejemplo,
asignando un modelo de datos) o en Javascript, mediante el método setCount(valor).
Lo vamos a hacer con esta segunda opción.

PRIMER INTENTO, EL INCORRECTO


Podríamos pensar en modificar la propiedad asignando directamente el tamaño de la colección
invocada, mediante /Employees/$count.

Pero eso no nos vale. La propiedad count no es capaz de invocar por su cuenta al servicio
oData como hace el items de la tabla. Así que nuestro icono de Empleados siempre aparecerá
en pelotillas, sin numerito.

¿Y por qué lo sé? Pues porque ya lo he intentado yo con esas artimañas :D.

CONSULTANDO EL NÚMERO DE ENTRADAS DE LA


TABLA
Ahora sí que le vamos a meter mano al controlador. Ahí nos crearemos una función llamada
cargarTam, que asignamos al evento updateFinished de la tabla. Dicha función puede recibir un
parámetro, que yo he llamado evt y que usaremos más adelante.

En esa función lo que hacemos es recuperar la tabla mediante su id y el método byId, ver
cuantos elementos tiene con getItems().length y asignar dicho valor al IconTabFilter gracias
a setCount.

2 of 4 9/25/2019, 8:14 PM
Trasteando con SAP UX: SAPUI5: Mostrar el tamaño de una tabla en el ... http://www.uxsap.com/2017/08/mostrar-tam-de-tabla.html

¿Y esto nos valdrá? Pues sólo a medias.

Tenemos que recordar que la tabla tenía una propiedad, growingThreshold, a la que le pusimos
un valor de 5, y que significaba que la tabla sólo nos mostraría las primeras 5 entradas (para
no sobrecargar la tabla en dispositivos pequeños) y luego añadiría la opción de cargar otras 5
entradas según bajásemos con el scroll.

En este caso, con getItems SÓLO recuperaremos las entradas que se están mostrando, así que
el icono sólo nos mostrará un 5 la primera vez, y lo irá aumentando según carguemos más
datos.

RECUPERANDO EL VALOR TOTAL Y EL VALOR


ACTUAL DE LÍNEAS CARGADAS
Lo que tenemos que hacer es aprovecharnos del parámetro que pasa el evento updateFinished,
y que hemos llamado evt.

Dicho parámetro tiene, a su vez, dos parámetros, total y actual, que con esos nombres ya os
podéis imaginar lo que significan: Total es el número total de entradas de la tabla, y actual el
número que está mostrando.

¿Cómo recuperamos dichos valores? De la siguiente forma:

var nTotal = evt.getParameter("total");


var nActual = evt.getParameter("actual");

Y lo demás, ya nos lo sabemos: Modificar el count del IconTabBar con setCount(nTotal).

Y, para hacerlo aún más chulo, aprovechamos para cambiar el título de la tabla y que, en lugar
de Empleados, ponga "Empleados: X de 9".

Todo eso se conseguiría con este pequeño código en la función cargarTam:

Y, como resultado, tenemos lo siguiente:

3 of 4 9/25/2019, 8:14 PM
Trasteando con SAP UX: SAPUI5: Mostrar el tamaño de una tabla en el ... http://www.uxsap.com/2017/08/mostrar-tam-de-tabla.html

4 of 4 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (I) http://www.uxsap.com/2018/06/OpenUI5-en-blog.html

1 of 3 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (I) http://www.uxsap.com/2018/06/OpenUI5-en-blog.html

una versión específica; en este ejenplo, la versión específica es la 1.52.11. enero (6)
https://openui5.hana.ondemand.com/resources/sap-ui-core.js si queremos usar la 2017 (73)
versión estable más moderna.
2016 (4)

Lo suyo sería usar una versión estable fija y no arriesgarse a que alguna actualización cambie
alguna funcionalidad inesperadamente. Cuando queramos cambiar, probaremos a actualizar la ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR
versión en una copia del blog y ver que todo va bien y, entonces, activarla en el blog "de
productivo" ;). Blog de Antonio de Ancos
Apuntes SAP de Rubens, trasteando
Podemos ver aquí las versiones disponibles de OpenUI5. con HCP
Para fotos guapas, las de KESS
INTEGRÁNDOLO EN EL BLOG CON HTML
DECLARATIVO
Al principio, cuando pensé en probar a integrar OpenUI5 en Blogger, se me ocurrió hacerlo con
Javascript. Pero, personalmente, prefiero algo más "intuitivo", poder visualizar los componentes
en una etiqueta y no mediante su creación dinámica con código. Es más fácil de ver y de
mantener, aunque supongo que el rendimiento se verá empeorado (ya que al final tiene que
renderizar los componentes a HTML real). Es una opinión personal, por supuesto.

Pero claro, XML no lo podemos utilizar. Blogger nos permite tocar su código HTML pero no es
XML, así que no podemos trabajar como lo hemos hecho hasta ahora.

Entonces me acordé de que había una opción adicional: Usar HTML declarativo. ¡Qué bien, una
oportunidad para aprender algo más!

Mediante HTML declarativo, añadiremos componentes OpenUI5 y sus propiedades mediante


etiquetas div, añadiendo los atributos específicos. Por ejemplo, para añadir un botón de tipo
sap.m.Button, lo haremos con <div data-sap-ui-type="sap.m.Button" data-text="Texto del
boton" data-press="funcion_al_presionar"></div>

APRENDER A USAR LAS ETIQUETAS DE BLOGGER


Aparte de todo esto, hay otra cosa que habrá que aprender si queremos que todo el blog utilice
componentes OpenUI5: A usar las propias etiquetas que nos proporcione nuestro proveedor del
servicio para crear el blog.

En el caso que nos ocupa, tenemos las etiquetas que usa Google para Blogger. Para estos
artículos no creo que entre en detalle de las mismas, pero si decidimos hacer una plantilla
decente para Blogger deberíamos empaparnos de ellas.

Las etiquetas de Blogger tiene el formato <b:nombre_etiqueta></b:nombre_etiqueta>.


Por ejemplo:

<b:section></b:section> para crear secciones


<b:loop></b:loop> para crear bucles.

Por otra parte, para mostrar los datos del blog (título del blog, los artículos, etc.), se utiliza la
etiqueta <data>. El título del blog se muestra con:

<data:blog.pageTitle/>

¿Y si queremos utilizar datos del blog en las propias etiquetas HTML? Por ejemplo, en el HREF
de un enlace. Entonces tenemos que usar expresiones, añadiendo expr: al atributo
correspondiente. Un enlace a la página principal (información guardada en
data:blog.homepageUrl) se indicará con:

<a expr:href='data:blog.homepageUrl'>Ir a la página principal</a>

Publicado por JorGCalleja

Etiquetas: blogger, html declarativo, openui5, sapui5

2 comentarios:
Naoto Amari 6 de junio de 2018, 15:22

2 of 3 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (I) http://www.uxsap.com/2018/06/OpenUI5-en-blog.html

3 of 3 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

1 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

nos preocuparíamos en escoger el tema qué más nos guste, establecer el diseño, configurar la enero (6)
hoja de estilos, etc. 2017 (73)
2016 (4)
Atentos: Si no vamos a user Blogger, este apartado es menos útil que un hobbit sin anillo
único, así que nos lo podemos saltar.
ALGUNOS ENLACES QUE TE PODRÍAN
En Blogger, hay una sección Tema donde podemos escoger el tema a utilizar de entre las INTERESAR
plantillas disponibles. En esa sección, podemos elegir el tema y configurarlo pulsando el botón
Blog de Antonio de Ancos
Personalizar.
Apuntes SAP de Rubens, trasteando
con HCP
Para fotos guapas, las de KESS

Yo simplemente he escogido un tema de estilo Sencillo. Lo suyo sería escoger uno que más o
menos nos sirviese para lo que tenemos en mente, para tener una plantilla generada de la que
partir y, después, meterle mano para añadirle nuestras adaptaciones. No me he molestado en
configurar los colores, ya que el propósito, de momento, es puramente técnico y no visual.

En la opción de diseño escogemos cómo se mostrarán los distintos bloques del blog. Aquí he
optado por un diseño con una única columna, sin barras laterales, pensando que en un futuro
podría usar una malla adaptativa para que el contenido se recolocase dinámicamente con la
dimensión del navegador.

2 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

Ahora, ya con el tema escogido, vamos a lo chulo: Usar la librería OpenUI5.

INTEGRAR LA LIBRERÍA OPENUI5 EN BLOGGER


Para poder añadir la librería, tenemos que acceder al código HTML de nuestro sitio web. Que si
usamos Blogger, podemos pensar "huy, eso no se puede". Pero sí, podemos hacerlo yendo de
nuevo a la configuración de Tema y escogiendo la opción Editar HTML.

Aquí vamos a ver mucho código HTML, incluyendo etiquetas propias de Blogger, que se utiliza
para añadir las secciones y widgets que queremos mostrar en nuestro blog. Estas etiquetas
comienzan con <b:xxxx> o <data>.

En la cabecera del documento, etiqueta <head>, añadimos un script para cargar la librería.
Ahí indicaremos la ubicación donde está la librería OpenUI5. Como no podemos (o no sabemos)
instalar la librería en nuestro sitio, lo que haremos será usar la CDN de OpenUI5 con la versión
que nos interese, como vimos en el post anterior. En este ejemplo, la versión de la librería será
la 1.52.11.

En ese mismo script, debemos cargar un plugin, que es el que nos va a permitir usar el HTML
declarativo. Para hacerlo, añadimos el módulo sap.ui.core.plugin.DeclarativeSupport.

El resultado del script sería el siguiente:

<script data-sap-ui-libs='sap.m'
data-sap-ui-modules='sap.ui.core.plugin.DeclarativeSupport'
data-sap-ui-theme='sap_belize'
id='sap-ui-bootstrap'
src='https://openui5.hana.ondemand.com/1.52.11/resources/sap-ui-
core.js'
type='text/javascript'/>

AÑADIR HTML DECLARATIVO


Ahora queremos añadir los componentes y sus eventos. ¿Cómo lo hacemos? Mediante etiquetas
HTML de tipo <div>. Dentro de las mismas, usaremos una serie de atributos para definir el
componente UI5 que vamos a utilizar y sus propiedades.

Estos atributos van a comenzar siempre con la palabra data-, seguidos por un texto que nos
permitirá identificar si es un tipo de componente, un evento o una propiedad.

Con el atributo data-sap-ui-type indicaremos el tipo de componente que vamos a


usar. Por ejemplo:

3 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

<div data-sap-ui-type="sap.m.Button"></div>

Para indicar el id y las clases, usaremos los atributos de html de siempre... id y class:

<div data-sap-ui-type="sap.m.Button" id="botoncico"></div>

Para añadir una propiedad, utilizamos el atributo data-nombre_de_la_propiedad. Por


ejemplo, para añadir texto al botón, usaremos data-text:

<div data-sap-ui-type="sap.m.Button" data-text="Botoncico"></div>

Ojo aquí, que a mí me ha costado descubrirlo (ya lo leeréis en el último post).


Cuando una propiedad tiene un nombre en formato camelCase, por estar formado por
varias palabras (por ejemplo, iconFirst), en HTML declarativo lo tenemos que separar
por guiones: data-icon-first.
Si queremos usar un evento, utilizamos data-nombre_del_evento. Vamos, igual que
con la propiedad. Por ejemplo:

<div data-sap-ui-type="sap.m.Button" data-press="meHanPulsado"></div>

La función la definiremos en un bloque de script, en javascript.

<script>function meHanPulsado(event) { codigo; } </script>

Si un componente tiene otros componentes anidados (es decir, una agregación),


definimos la agregación como un div anidado con el atributo data-sap-ui-
aggregation="nombre_agregación". Este div, a su vez, tendrá anidados otros div con
los componentes hijos. Si es la agregación por defecto, no hace falta ni añadir este
nivel.

<div data-sap-ui-type="sap.ui.layout.Grid">
<div data-sap-ui-aggregation="content">
<div data-sap-ui-type="sap.m.Label" ...></div>
<div data-sap-ui-type="sap.m.Label" ...></div>
</div> <!-- estamos cerrando el content -->
</div> <!-- estamos cerrando el grid -->

Añadir el botón

Ya tenemos la librería incluida y ya sabemos cómo usar las etiquetas HTML para poder incluir
nuestros componentes UI5. Ahora vamos a añadir un botón.

No vamos a ponernos a buscar el mejor sitio para ubicarlo, lo vamos a poner arriba. Existe una
sección en Blogger que se utiliza para navegar entre los distintos blogs, y la podemos encontrar
como <b:section ... id='navbar'>. Pues lo colocaremos justo debajo de ese sitio.

La entrada para nuestro botón, y que incluye un texto que diga Invocar a Cthulhu, será:

<div data-sap-ui-type='sap.m.Button' data-text='Invocar a Cthulhu'/>

El resultado es el siguiente, aunque de momento nuestro botón no hace nada, pero ya lo


tenemos colocado.

4 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

Mostrar mensaje cuando se pulsa el botón

Ahora nos toca crear un evento y enlazarlo al botón. Tenemos que modificar la definición del
div del botón para incluir el evento, con data-press="nombre_de_la_funcion"

<div data-press='invocar' ...>

Después, añadimos un simple script en javascript donde añadiremos la función, que va a


mostrar un mensaje para poder invocar a Cthulhu tranquilamente. Para el mensaje usaremos
otro componente OpenUI5, el sap.m.MessageToast:

<script>
function invocar(oEvt) {
sap.m.MessageToast.show("Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl
fhtagn");
}
</script>

Pues ya está, podemos probar el botón y ver que, al pulsarlo, nos sale el mensajito que
habíamos añadido. ¡Ya tenemos nuestra primera chapuchilla hecha!

5 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (II) http://www.uxsap.com/2018/06/OpenUI5-en-blog2.html

6 of 6 9/25/2019, 8:14 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (III): Usand... http://www.uxsap.com/2018/07/OpenUI5-en-blog3.html

1 of 4 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (III): Usand... http://www.uxsap.com/2018/07/OpenUI5-en-blog3.html

TRASTEAR 2017 (73)


2016 (4)

Editamos el HTML de nuestro tema (podemos ver cómo hacerlo en el post anterior). Nuestro
objetivo es descubrir dónde hay que poner nuestro código para que se vean los tiles en lugar ALGUNOS ENLACES QUE TE PODRÍAN
de resumen normal. INTERESAR

Blog de Antonio de Ancos


¿Dónde está eso en Blogger? Nos toca buscar la etiqueta de LOOP, que Blogger utiliza para
Apuntes SAP de Rubens, trasteando
mostrar todos los posts. Dicho loop está dentro del widget Blog1, que podemos encontrar con HCP
pulsando en Ir al widget.
Para fotos guapas, las de KESS

Como referencia, también podemos usar el comentario <!-- post -->

Ahí encontramos la etiqueta b:loop y, algo más abajo, el bloque que nos interesa, <b:include
data='post' name='post' />

Ahí es donde vamos a trabajar. Intuimos que el loop, en cada iteración, nos va a mostrar un
artículo, así que justo debajo del loop añadimos el código que queremos para añadir tiles.

AÑADIR EL TILE CON HTML DECLARATIVO


Para nuestro tile, vamos a hacer lo siguiente:

Añadir un tile de tipo genérico, sap.m.GenericTile.


Como el tile genérico nos permite añadir contenido (su agregación principal), le
añadiremos una imagen, la primera que aparece en el post. Hay una propiedad del
tile para añadir imágenes, headerImage, pero tengo que admitir que la he usado y no
me ha funcionado :(... en cualquier caso, como quería usar agregaciones, para este
ejemplo tampoco me aportaba demasiado.
El código que nos interesa es algo como el siguiente, el bloque entre los comentarios <!--
uxsap -->:

¿Y qué significa todo eso? Vamos a verlo paso a paso:

Lo primero es añadir el tile genérico. En la propiedad data-header añadimos el nombre del

2 of 4 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (III): Usand... http://www.uxsap.com/2018/07/OpenUI5-en-blog3.html

post, que podemos recuperar con data:post.title:

<div data-sap-ui-type='sap.m.GenericTile' expr:data-header='data:post.title'>


</div>

Hemos cerrado con </div> porque dentro del mismo queremos añadir otro div, en el que
añadiremos las agregaciones. Estas agregaciones las añadimos con un div como el siguiente,
con el atributo data-sap-ui-aggregation='nombre_de_la_agregacion' y el tipo de elemento que
usamos para dicha agregación.

<div data-sap-ui-type='sap.m.GenericTile' expr:data-header='data:post.title'>


<div data-sap-ui-aggregation='tileContent' data-sap-ui-
type='sap.m.TileContent'>
</div>
</div>

Si vemos la documentación de GenericTile, veremos que tileContent sólo permite añadir entre 0
y 1 elementos. Nosotros sólo queremos añadir una imagen, pero por si quisiésemos usar más
elementos, podríamos añadir un elemento de layout como el HBox

<div data-sap-ui-type='sap.m.GenericTile' expr:data-header='data:post.title'>


<div data-sap-ui-aggregation='tileContent' data-sap-ui-
type='sap.m.TileContent'>
<div data-align-content='sap.m.FlexAlignContent.Center' data-sap-ui-
type='sap.m.HBox'>
</div>
</div>
</div>

Finalmente, dentro de ese HBox, añadimos la imagen con sap.m.Image y le damos un ancho y
alto para que quepa dentro del tile.

La imagen la podemos recuperar de Blogger mediante data:post.firstImageUrl. Recordamos


que, para poder usar elementos variables de Blogger, el atributo debe comenzar por expr, así
que será expr:data-src='data:post.firstImageUrl'.

<div data-sap-ui-type='sap.m.GenericTile' expr:data-header='data:post.title'>


<div data-sap-ui-aggregation='tileContent' data-sap-ui-
type='sap.m.TileContent'>
<div data-align-content='sap.m.FlexAlignContent.Center' data-sap-ui-
type='sap.m.HBox'>
<div data-height='5em' data-sap-ui-type='sap.m.Image' data-width='5em'
expr:data-src='data:post.firstImageUrl'/>
</div>
</div>
</div>

Con esto ya tenemos una primera versión de la página inicial, mostrando un tile con el título del
post y la imagen.

3 of 4 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (III): Usand... http://www.uxsap.com/2018/07/OpenUI5-en-blog3.html

4 of 4 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (IV): Página ... http://www.uxsap.com/2018/08/OpenUI5-en-blog3.html

1 of 5 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (IV): Página ... http://www.uxsap.com/2018/08/OpenUI5-en-blog3.html

Así, data-alignContent debería ser data-align-content. febrero (5)


enero (6)

NAVEGANDO DESDE EL TILE 2017 (73)

2016 (4)
¿Queremos navegar al artículo tras pulsar un tile? Pues lo primero que vamos a hacer es crear
un manejador que realice dicha navegación. Eso lo tenemos chupado. Dicha función recibirá,
como argumento, el evento que la ha invocado y, a partir de dicho argumento, podremos ALGUNOS ENLACES QUE TE PODRÍAN
INTERESAR
obtener su origen, el tile que la invocó.
Blog de Antonio de Ancos
function navegar(oEvt) { Apuntes SAP de Rubens, trasteando
var elTilePulsado = oEvt.getSource(); con HCP
} Para fotos guapas, las de KESS

Como no tenía muy claro dónde asignar la url en el GenericTile, he optado por añadirla en la
propiedad Tooltip. Sí, estoy haciendo un poco de trampa :P. Cuando pulsemos el tile, a través
del evento press, éste llamará a la función. Recuperaremos el tile que hizo la invocación y, una
vez conseguido, su propiedad tooltip. La navegación la haremos con un simple código
javascript, que nos va a permitir mantener el histórico de navegación.

window.location.href = sUrl;

El código completo es el siguiente:

Ahora tenemos que añadir el manejador en el evento press del tile. Antes, teníamos el
siguiente código para el tile:

Lo retocamos un poco para conseguir lo que queremos. Primero, en el evento press, añadimos
la llamada a la función navegar

data-press='navegar'

Después, en el tooltip, añadimos la url del artículo. Para recordar como usar variables de
Blogger, eso lo conseguíamos añadiendo, al inicio del nombre del atributo HTML, la
cadena expr:, de la siguiente forma:

expr:data-tooltip='data:post.url'

Si no pusiésemos el expr:, la url sería, literalmente, data:post.url.

Ahora nuestro tile luce tal que así:

2 of 5 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (IV): Página ... http://www.uxsap.com/2018/08/OpenUI5-en-blog3.html

MOSTRANDO EL TILE SÓLO EN LA PÁGINA


PRINCIPAL
Ahora vamos con la parte complicada, conseguir que el tile sólo se vea en la página principal y
que el contenido sólo se vea al navegar al artículo. Puro código Blogger.

Para ello, analizamos el funcionamiento del LOOP. Al inicio, tenemos una serie de condicionales
que parecen mostrar la fecha y el título.

En nuestra página principal, con los tiles, no vamos a querer mostrar dicha información. Esa
parte no nos interesa para la página principal. Si quisiésemos añadir la fecha, podríamos
hacerlo aprovechando una propiedad del tile, pero no fuera del mismo.

Así que movemos nuestro GenericTile justo antes de ese código.

¿Pero cómo sabemos si estamos en la página principal o no? Blogger nos permite identificarlo
mediante la siguiente condición:

<b:if cond='data:blog.pageType == &quot;index&quot;'>

Así que vamos a usarlo para separar el artículo del tile. Colocando el GenericTile entre el inicio
del LOOP y el bloque de fechas, tenemos lo siguiente:

Por supuesto, ese IF lo tenemos que cerrar en algún sitio, justo donde acaba el bloque del post.
Podemos cerrarlo justo antes del fin del LOOP.

NOTA: En este caso en particular, lo he cerrado un poco antes, justo delante del bloque de
publicidad,<!-- Ad -->. La verdad es que podría borrar ese bloque porque no utilizo publicidad
para nada, o incluso podría haberlo dejado dentro del ELSE. Depende de dónde quiera mostrar
los anuncios.

3 of 5 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (IV): Página ... http://www.uxsap.com/2018/08/OpenUI5-en-blog3.html

Con este cambio, lo que estamos haciendo en el LOOP es:

Si estamos en la página principal, mostramos todos los artículos en tiles.


Si estamos en un artículo específico, mostramos el post (el loop sólo se ejecutará una
vez, para ese artículo).

El resultado final sería el siguiente:

Y si pulsamos un tile, navegaremos al artículo correspondiente.

Ya hemos organizado un poco más el blog.

4 of 5 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (IV): Página ... http://www.uxsap.com/2018/08/OpenUI5-en-blog3.html

5 of 5 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

1 of 6 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

AÑADIENDO EL LAYOUT ADAPTABLE febrero (5)


enero (6)

Vamos a usar un control de layout sencillo, como es el sap.ui.layout.Grid. Es un control que 2017 (73)
ya habíamos utilizado en una serie de post que comenzaban con éste. Lo configuraremos para 2016 (4)
que muestre tres tiles en tamaño grande, dos en tamaño mediano y uno en tamaño pequeño.

<div data-sap-ui-type="sap.ui.layout.Grid" ALGUNOS ENLACES QUE TE PODRÍAN


INTERESAR
data-default-span="XL4 L4 M6 S12"
data-width="100%"> Blog de Antonio de Ancos
Apuntes SAP de Rubens, trasteando
La ubicación para poner el Grid la tenemos más o menos clara: en el LOOP. Pero, si nos con HCP
paramos a pensar (o nos ponemos a modificar y vemos que falla, claro), veremos que no lo Para fotos guapas, las de KESS
podemos poner dentro del LOOP. Si no, para cada tile, crearía una malla.

Por tanto, es el LOOP el que tiene que estar dentro del Grid. Y no nos olvidemos, claro está, de
cerrar el Grid al final del LOOP.

<div data-sap-ui-type="sap.ui.layout.Grid"
data-default-span="XL4 L4 M6 S12"
data-width="100%">

<b:loop values='data:posts' var='post'>


... código para mostrar página principal o artículos ...
</b:loop>
</div>

Lo último que debemos tener en cuenta es que sólo queremos el Grid para la página principal,
para ordenar los tiles. Eso es sencillo, sólo tenemos que recordar la condición que vimos en el
post anterior:

<b:if cond='data:blog.pageType == &quot;index&quot;'>


... aquí el inicio del grid ...
</b:if>

Por tanto, nuestro código será:

Ojo aquí con lo que nos encontramos, un montón de letrujas raras. ¿Por qué hemos
reemplazado varios caracteres especiales de HTML por su código HTML equivalente, con &.
Por ejemplo, hemos puesto &lt; en lugar de <. Podríamos pensar que es por meter etiquetas
HTML dentro del IF, pero eso ya lo habíamos hecho antes y no había pasado nada.

Hay una pequeña diferencia. Hasta ahora, cuando habíamos metido algún DIV dentro de un IF,
lo habíamos cerrado dentro del mismo IF. Pero si el DIV no se cierra dentro, Blogger no nos lo
permite, nos dará un error. Nos obliga a cerrar las etiquetas HTML dentro del mismo bloque, tal
que así:

<b:if>
<div ...></div>
</b:if>

Pero eso nos vale menos que a Thor un martillo de juguete de los de pito, ya que el Grid debe
incluir todos los tiles y se tiene que cerrar al final del LOOP.

Precisamente para poder hacer eso, debemos reemplazar los caracteres HTML por su código
HTML.

< por &lt;


> por &gt;
' por &#39;

2 of 6 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

" por &#34;

Sabiendo eso, lo dejamos como en la imagen y procedemos a cerrar el Grid, justo al final del
LOOP, y teniendo en cuenta el mismo problema con los caracteres HTML:

<b:if cond='data:blog.pageType == &quot;index&quot;'>


... aquí el inicio del grid ...
</b:if>

<b:loop values='data:posts' var='post'>


... código para mostrar página principal o artículos ...
</b:loop>

<b:if cond='data:blog.pageType == &quot;index&quot;'>


... aquí el cierre del grid ...
</b:if>

El resultado se verá así:

Ya lo hemos conseguido, tenemos nuestro código hecho y lo vamos a probar.

Tenemos nuestra página con los tres tiles. No vemos el borde de los tiles, es algo que no ha
quedado bien del todo, pero parece que los tiles se ordenan.

Vamos a probar ahora si los tiles se reordenan al reducir el tamaño de la página. Intentamos
ver como quedaría en tamaño medio, y vemos cómo se colocan, dos tiles arriba y uno debajo.

Pero, si nos fijamos en una cosa, nos daremos cuenta de que, aunque la distribución ha
cambiado, el ancho de la página de fondo no lo ha hecho, sigue siendo igual de ancho. ¿Qué ha
ocurrido?

3 of 6 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

MODIFICAR EL ANCHO MÍNIMO Y MÁXIMO DEL


BLOQUE CENTRAL
Nos hemos preocupado tanto por poner el Grid, que se nos ha olvidado que esta disposición de
Blogger tiene un ancho fijo, que se puede configurar en las propiedades del tema. En este caso
en particular, era de 960 píxeles. Lo podemos ver dentro del propio tema, en la sección
<b:template-skin>, que puede aparecernos plegada, así que la desplegaremos pulsando
sobre el número de línea o sobre los tres puntos.

Al desplegarla, veremos las definiciones de estilo de la página. Ahí nos encontramos pronto con
el culpable, una variable de Blogger, content.width, con el ancho que definimos en las
propiedades del tema, y dos bloques de estilo CSS, para BODY y para .CONTENT-OUTER, que
usan dicha variable.

Ok, pues vamos a modificar dicha definición para que se ajuste a un ancho máximo y un ancho
mínimo. Nos olvidamos ya de OpenUI5, esto es puro CSS.

Nos creamos dos variables nuevas, que yo he llamado content.maxwidth y content.minwidth,


para definir un ancho mínimo y máximo para el marco exterior. Y con esas variables definimos
las propiedades CSS de ancho.

min-width y max-width no es compatible con todos los navegadores, así que usamos
también _width por temas de compatibilidad.

Podríamos probar a jugar con porcentajes, con márgenes, con padding... bueno, todo es
probar, que a lo mejor lo que hemos hecho aquí queda mal en algún caso. Lo que veremos será
lo siguiente:

4 of 6 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

El ancho de la página también se reduce, y los tiles se reorganizan. Así que ya tenemos nuestra
página principal con tiles en un layout adaptativo. Bueno, no está mal, creo yo, ya le hemos
dado nuestro toque fiorístico al Blogger.

ESO ES TODO, AMIGOS


Nos ha costado 5 post hacer algo medianamente aceptable, pero vemos que esto del HTML
declarativo puede tener su buen uso.

Me ha quedado pendiente que se vean los bordes del tile. Es un problema de márgenes, que al
meterle un margin de 1px con el F12 funciona bien, pero no he conseguido reproducirlo en
OpenUI5. En cuanto lo tenga, actualizaré este post.

Ahora sólo nos queda hacer un diseño de cero, en lugar de usar uno genérico de Blogger, pero
eso sí que es mucho trabajo, ¡así que no os lo voy a poner tan fácil! :P

Como comentario de todo lo que he ido aprendiendo por el camino, hasta última hora no he
descubierto algo que estaba haciendo mal. Cuando usaba algunas propiedades de un control en
HTML, no me las cogía. Al principio pensaba que a lo mejor no todas eran compatibles.

Nada más lejos de la verdad, resulta que sí que lo son. El problema son las mayúsculas y
minúsculas, ya que la librería no entiende cosas como data-defaultSpan, pues lo traduce a
defaultspan... así que, cuando tengamos una propiedad con varias palabras en OpenSAP (en
formato camelCase), tenemos que separar las letras con guiones. Por tanto, data-defaultSpan
tiene que ser data-default-span. Con eso, lo tenemos solucionado. ¡Anda que no me ha costado
descubrirlo! Pero bueno, aprovecho a actualizar algún post anterior en referencia ese error ;)-

Publicado por JorGCalleja

Etiquetas: blogger, openui5

No hay comentarios:
Publicar un comentario

Comentar como:

Publicar

5 of 6 9/25/2019, 8:15 PM
Trasteando con SAP UX: Integrar OpenUI5 en nuestro blog (y V): Págin... http://www.uxsap.com/2018/08/OpenUI5-en-blog5.html

6 of 6 9/25/2019, 8:15 PM
Guía práctica | PÚBLICO
Servidor de aplicaciones ABAP 7,53 SP00

Documento Version: 1.0 - 21/09/2018

Guía de migración de código personalizado para SAP S / 4HANA 1809

Pila paquete de funciones 00


© 2018 SAP SE o una compañía de SAP afiliado. Todos los derechos reservados.

EL MEJOR FUNCIONAMIENTO
Contenido

1 Guía de migración de código personalizado para SAP S / 4hana 1809.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Empezando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1 Descripción general del proceso de conversión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Requisitos del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Opcional: Análisis de código personalizado durante la fase de preparación. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1 Preparación del sistema facturado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Configuración del usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

La aplicación de SAP Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2 Preparación de la comprobación del sistema central. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Configuración del usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

La aplicación de SAP Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Configuración de las conexiones RFC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Importación de la base de datos de simplificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Ajuste del papel como comprobación del sistema central. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

La creación de grupos de sistemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Configurar proveedores de objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3 Ejecución de SAP verifica S / 4hana remoto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Configuración de un ATC Serie marcha remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

La programación de una serie ATC marcha remota. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dieciséis

Supervisión de una serie Run ATC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Analizando ATC Resultados de ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 El código personalizado Adaptación después de la conversión del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1 Las transacciones que se ejecutan SPDD y SPAU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.2 Ejecución de SAP verifica S / 4hana locales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Importación de la base de datos de simplificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Configuración de serie Run ATC local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

La programación de la serie Run ATC local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.3 La adaptación de código personalizado en ADT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Visualización de los resultados Activo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

La fijación de resultados ATC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Control posterior de la de resultados activos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4 Volver a ejecutar SAP verifica S / 4hana locales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 ¿Que sigue?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Guía de migración de código personalizado para SAP S / 4HANA 1809

2 PUBL IC Contenido
6 Glosario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Guía de migración de código personalizado para SAP S / 4HANA 1809

Contenido PUBL IC 3
1 Guía de migración del código personalizado para SAP S /
4HANA 1809

Código de migración personalizado es parte del proceso de conversión del sistema de la clásica SAP Business Suite que se ejecuta en cualquier base de datos al

sistema SAP S / 4hana. En el contexto de esta conversión del sistema, código ABAP encargo tiene que adaptarse, ya que una gran cantidad de código dentro de

SAP SAP S / 4hana se simplificó y en algunos casos ha cambiado de una manera no compatible.

Algunos de los objetos de código personalizado ya no son válidas y, o bien no funcionar como se espera o producen errores de sintaxis o vertederos
(objetos de color rojo en la imagen). Es casi seguro que tiene otros objetos que rinda como es debido y no necesitan ser cambiadas (objetos de color
verde en la foto).

SAP proporciona herramientas, basadas en la base de datos de simplificación, que detectan cualquier código personalizado que tiene que adaptarse a SAP S / 4hana.

La base de datos de simplificación es una tabla de base de datos en el sistema SAP S / 4hana que contenga todos los elementos de simplificación que se refieren a

objetos SAP simplificadas en SAP S / 4hana. Cada elemento de simplificación describe cambiar o quitar objetos de SAP y se refiere a un dedicado Nota SAP que

describe el impacto del cambio y la forma en que el código personalizado relacionado se puede adaptar.

Para analizar las adaptaciones necesarias, es necesario establecer un sistema basado en SAP NetWeaver AS ABAP 7,52 que funciona como una comprobación del

sistema central. El uso de este Comprobación del sistema central, puede realizar comprobaciones remotas de código personalizado en ABAP prueba de la carlinga (ATC)

para uno o más sistemas de su paisaje.

Guía de migración de código personalizado para SAP S / 4HANA 1809

4 PUBL IC Guía de migración de código personalizado para SAP S / 4HANA 1809


2 Primeros pasos

Esta guía se centra en el proceso relacionado con código personalizado, a partir de la comprobación de código personalizado de forma remota, a continuación, analizar los resultados y,

finalmente, la adaptación del código personalizado. Lea esta guía con cuidado para obtener instrucciones sobre cómo adaptar su código personalizado para SAP S / 4hana 1809.

2.1 Visión general del proceso de conversión

SAP proporciona un proceso para la conversión del sistema a SAP S / 4hana. La siguiente figura le da una visión general de las herramientas, las fases y
las actividades involucradas en el proceso.

El proceso de migración personalizado Código describe las herramientas y actividades necesarias que le ayudan a migrar código personalizado. El proceso

consiste en análisis preparatorio ( Análisis de código personalizado) y la adaptación del código personalizado ( El código personalizado Adaptación) después de la

conversión técnica.

Análisis código personalizado

Para preparar la conversión del sistema, recomendamos que evalúe el código personalizado y eliminar cualquier código obsoleto como se indica en el

Procedimiento de uso Log (UPL / SCMON). Para más información, ver ABAP Monitorización de llamadas (SCMON) - Analizar el uso de su código

Además, el código personalizado necesita ser comprobada con ABAP prueba de la carlinga (ATC) contra las simplificaciones / 4hana SAP S en el Base de Datos de

simplificación y para cualquier SAP HANA relacionados con los cambios. El resultado es una lista de resultados, donde el código personalizado no cumple con la

estructura de alcance y los datos de SAP S / 4hana. En este paso se puede estimar el esfuerzo requerido necesaria para adaptar el código personalizado para migrar

a SAP S / 4hana.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Empezando PUBL IC 5
• Nota

El único propósito de la fase de análisis de código personalizado es estimar el esfuerzo requerido para el Código de Adaptación a medida para la
conversión del sistema en su actual entorno SAP Business Suite. Esta fase puede ser un largo tiempo antes de la conversión del sistema real para
SAP S / 4hana.

Sin embargo, en esta fase también se puede preparar a su código personalizado para la conversión futura del sistema. Para obtener más información,

consulte el blog Lo que puede hacer hoy para preparar el código personalizado para SAP S / 4hana . Sólo después de que se cumplió la conversión del

sistema a SAP S / 4hana puede llevar a cabo la adaptación funcional localmente en el sistema SAP S / 4hana.

Código Adaptación personalizada

En la conversión del sistema, es necesario adaptar las modificaciones relacionadas con el Diccionario ABAP objetos utilizando la transacción SPDD.

Después de realizar la conversión del sistema SAP a S / 4hana con Software Update Manager (SUM), que necesita para adaptarse a cualquier modificaciones

relacionadas con los objetos del repositorio utilizando la transacción SPAU.

Después de esto, se recomienda que ejecute ABAP prueba de la carlinga (ATC) Con SAP cheques S / 4hana en Herramientas de desarrollo ABAP (ADT). El resultado es

una lista de los resultados ATC que están relacionados con SAP simplificaciones S / 4hana y se refieren a notas de SAP que describen cómo resolver los problemas.

Sobre la base de estos hallazgos ATC, puede empezar a adaptar el código personalizado.

Para obtener más información sobre el proceso de conversión del sistema en general, véase http://help.sap.com/s4hana_op_1809

Guía de conversión de documentación de productos .

• Nota

Si actualiza de liberación inferior de SAP S / 4hana a SAP S / 4hana 1809, también es necesario adaptar algunas de código personalizado. Para obtener más

información sobre el proceso de actualización, consulte http://help.sap.com/ s4hana_op_1809 Guía de actualización del producto Documentación .

2.2 Requisitos del sistema

Para realizar el análisis de código personalizado, es necesario establecer un sistema centralizado de SAP NetWeaver AS ABAP para el sistema como el 7,52 Comprobación

del sistema central dentro de su entorno de sistemas SAP.

• Nota

La comprobación del sistema central puede ser utilizado para marcar uno o más sistemas de SAP Business Suite.

Para el acceso remoto, el Sistema de Registro Central necesita destinos RFC para cada sistema pertinente que desee comprobar el uso de ATC. Cuando se

ejecuta, la comprobación del sistema central tiene acceso a la Sistema comprobado utilizando Talones remoto y la conexión RFC. Estos códigos auxiliares

remotos son una interfaz entre el Sistema de Registro Central y la comprobación del sistema y devolver un modelo de código personalizado que necesita ser

comprobada.

Guía de migración de código personalizado para SAP S / 4HANA 1809

6 PUBL IC Empezando
Para analizar el código personalizado, es necesario cumplir con los siguientes requisitos del sistema:

Sistema SAP Componente de software

Comprobación del sistema central SAP_BASIS 7,52 o más alto

Sistema comprobado SAP_BASIS 7.00, 7.01, 7.02, 7.31, 7.40, 7.50, 7.51 o 7.52

Para adaptar el código personalizado, necesita las herramientas de desarrollo ABAP (ADT) en la última versión del cliente también. Ver

https://tools.hana.ondemand.com/ para más información.

• Recomendación

Recomendamos que utilice las herramientas de desarrollo ABAP (ADT) desde transacción SE80 en SAP GUI ya no es compatible con todos los

objetos de desarrollo (como CDS) Vistas necesarias en SAP S / 4hana.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Empezando PUBL IC 7
3 Opcional: Análisis de código personalizado Durante
Fase de preparación

El análisis de código personalizado se lleva a cabo antes de la conversión técnica y es Opcional. En esta fase, se puede estimar el esfuerzo necesario para

adaptar el código personalizado para SAP simplificaciones S / 4hana.

• Nota

La adaptación funcional de código personalizado se realiza después de la conversión técnica. Si no desea estimar el esfuerzo requerido por

adelantado, continuar con el El código personalizado Adaptación después de la conversión del sistema [página 19] .

3.1 Preparación del sistema de cuadros

Para permitir que su comprobación del sistema central para comprobar el código personalizado de forma remota, es necesario configurar el usuario y aplicar algunas notas

de SAP necesaria en su sistema facturado.

3.1.1 Configuración del usuario

El usuario necesita RFC las siguientes autorizaciones en la comprobación del sistema:

Nombre del objeto ción

autorizaciôn Actividad Tipo de Objeto RFC Nombre del Objeto Descripción RFC

S_RFC 16 (Ejecutar) FUGR SABP_COMP_PROCS _E, Autorización para:

SCA_REMOTE_DATA
● Configurar
_access proveedores ob

● Ejecución de SAP S

cheques / 4hana
FUNC REPOSITORY_ENVI

RONMENT_ALL,

RFC_GET_NAMETAB,

function_exists, RFCPING

* *
S_DEVELOP 03 (Display)

Guía de migración de código personalizado para SAP S / 4HANA 1809

8 PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


3.1.2 La aplicación de Notas SAP

Aplicarán las siguientes notas de SAP en la comprobación del sistema:

● 2485231 - Los cheques ATC remotas de modificaciones y mejoras

● 2270689 - RFC Extractor para realizar comprobaciones estáticas

● 2190065 - / CI ATC: Análisis de código remoto - Trozo proveedor de objetos

● 2196792 - RFC-Talón de CVA / SLIN-remoto

3.2 Preparación de la comprobación del sistema central

Para comprobar el código personalizado de forma remota en ABAP prueba de la carlinga (ATC), es necesario instalar y configurar un Registro central Sistema de ATC.

Este sistema verifica uno o más sistemas de SAP en su paisaje de los cambios relacionados con SAP S / 4hana.

3.2.1 Configuración del usuario

Se necesita el siguiente usuario a utilizar la transacción ATC para realizar comprobaciones de código personalizado:

Rol del usuario Descripción

SAP_SATC_ADMIN La autorización para la creación de ABAP prueba de la carlinga (ATC) para la comprobación de

calidad central

Además, es necesario el siguiente objeto de autorización:

Nombre del objeto de autorización Nombre del campo de autorización Valor del campo de autorización

Descripción

S_YCM SYCM_AREA SDB Autorización para la importación de la

base de datos Simplificación

ACTVT UL

3.2.2 La aplicación de Notas SAP

En la comprobación del sistema central, aplicar todas las notas de SAP relevantes que se mencionan en las siguientes notas de SAP para que pueda utilizar las últimas

características:

● 2436688 - Notas SAP recomendadas para el uso de SAP S / 4hana cheques de código personalizado en el ATC

Guía de migración de código personalizado para SAP S / 4HANA 1809

Opcional: Análisis de código personalizado durante la fase de preparación PUBL IC 9


● 2364916 - Recomendado notas de SAP para el uso de ATC para realizar el análisis remoto

3.2.3 Configuración de las conexiones RFC

Utilice la transacción SM59 para crear conexiones RFC para cada sistema facturado.

• Nota

La conexión RFC debe ser utilizable sin un cuadro de diálogo de inicio de sesión.

3.2.4 Importación de la base de datos de Simplificación

Para comprobar el código personalizado contra las simplificaciones SAP S / 4hana, es necesario importar la base de datos de simplificación en el Sistema de

Registro Central.

3.2.4.1 La descarga de la base de datos Simplificación

SAP proporciona contenido para la Base de Datos de Simplificación de un producto de SAP como un archivo ZIP en SAP Service Marketplace (SMP). El contenido de la

base de datos de simplificación se puede descargar como un archivo ZIP. Este archivo ZIP entonces tiene que ser cargado en el sistema de registro central.

Procedimiento

1. Abra la SAP Centro de Descarga de software .

2. Elija Descargas de software y la búsqueda de CCMSIDB .

3. Seleccione el archivo ZIP correspondiente y seleccione la cesta de descarga .

• Nota

Para encontrar el contenido más reciente de la base de datos de simplificación prevista SAP S / 4hana, véase también la nota SAP 2241080 .

resultados

El archivo ZIP se descarga y se guarda en la unidad seleccionada. Contiene el contenido de la base de datos de simplificación.

Guía de migración de código personalizado para SAP S / 4HANA 1809

10 PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


3.2.4.2 Importación de la base de datos de Simplificación

Para agregar el contenido de la base de datos de simplificación de su sistema para su posterior análisis, es necesario cargar el archivo ZIP descargado a la

comprobación del sistema central.

Procedimiento

1. Inicie sesión en el Sistema de Registro Central.

2. Ejecutar transacción SYCM.

los Simplificación de visualización de contenido de bases de datos se abre vista.

3. Elegir Importación de base de datos de la simplificación del archivo ZIP la barra de menús.

4. Seleccione el archivo ZIP con la base de datos Simplificación descargado desde la unidad y confirmar con Abierto .

resultados

La base de datos de simplificación se carga en el Sistema de Registro Central y ahora está disponible para el análisis de la transacción SYCM.

3.2.4.3 Visualización del contenido de la base de datos de Simplificación

Se puede visualizar el contenido de la base de datos de simplificación para obtener una visión general de todos los cambios o modificaciones específicas y los

correspondientes objetos SAP que se simplifican en SAP S / 4hana.

Procedimiento

Para obtener una lista de todos los elementos de simplificación, seleccione Ctrl + F8 o la Visión de conjunto botón.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Opcional: Análisis de código personalizado durante la fase de preparación PUBL IC 11


• Nota

Para limitar el número de elementos de simplificación que se muestra, introduzca los criterios de filtro relevantes de la transacción SYCM

y seleccione Ejecutar.

resultados

los Simplificación de base de datos de contenido se abre vista. Desde aquí se puede ordenar la lista que se muestra, por ejemplo, por su Tipo de objeto SAP , el

asignado simplificación Categoría , o del correspondiente Nota Número de SAP .

A partir de la información general, se puede visualizar la lista de los objetos contenidos en un elemento de simplificación.

• Nota

Para averiguar si un determinado objeto se relaciona con un elemento de simplificación, introduzca el nombre del objeto (por ejemplo, MATNR ) en el Nombre

del objeto campo y ejecutar ( F8). A continuación, puede navegar hasta el SAP correspondiente Nota para obtener más información.

3.2.5 Ajuste del papel como comprobación del sistema central

El papel del sistema necesita ser especificado como comprobación del sistema central de SAP remoto cheques S / 4hana.

Procedimiento

1. Ejecutar transacción ATC.

los ABAP prueba de la carlinga general Aparece la pantalla.

2. En el panel de navegación, expanda el nodo Configuración Administración ATC y haga doble clic El papel del sistema .

3. Interruptor para cambiar el modo ( F6).

4. En la Rol sistema de cambio pantalla, seleccione ATC controles por parte de los proveedores de objeto sólo .

Guía de migración de código personalizado para SAP S / 4HANA 1809

12 PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


5. Guarde los nuevos valores y volver a la ABAP prueba de la carlinga general pantalla.

3.2.6 Creación de Grupos de sistemas

Un grupo sistema contiene múltiples sistemas SAP. Cada proveedor de objetos debe ser asignado a un grupo de sistemas y por lo tanto es necesario crear un

grupo de sistemas antes de configurar un proveedor de objetos.

Procedimiento

1. En el panel de navegación, en una transacción ATC, expanda el nodo Configuración Administración ATC y DoubleClick Los proveedores de objetos .

2. Haga doble clic en el elemento Grupos de sistemas para la selección.

3. Interruptor para cambiar el modo ( F6).

4. Elija el Nuevas entradas botón en la barra de herramientas.

5. Introduzca una CARNÉ DE IDENTIDAD y corto Descripción para el nuevo grupo de sistemas que desee agregar.

6. Guardar la nueva entrada.

3.2.7 Configuración de Proveedores de objetos

Un proveedor de objetos define la conexión RFC para ser utilizado para el análisis en un sistema de SAP remoto. Mientras se está ejecutando una carrera de

verificación, el marco ATC utiliza esta conexión RFC a revisar el sistema para extraer un modelo del código personalizado.

Procedimiento

1. En el Los proveedores de objeto RFC Ver, haga doble clic en el elemento Los proveedores de objeto RFC para la selección.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Opcional: Análisis de código personalizado durante la fase de preparación PUBL IC 13


2. Interruptor para cambiar el modo ( F6).

3. Elija el Nuevas entradas botón en la barra de herramientas.

4. Especificar las siguientes indicaciones relativas al proveedor de objetos que desea crear:

Campos Descripción

<ID> ID que especifica el proveedor de objetos

• Nota
Este ID se utiliza para configurar una serie ATC plazo.

<Descripción> breve texto que especifica el proveedor de objetos

<System Group> El grupo del sistema al que pertenece el proveedor de objetos

<Sistema SAP> Identificación del sistema remoto, a la que desea conectar u so del proveedor

de objetos

<Destino RFC> destino RFC válido para la conexión RFC a la comprobación del sistema

• Nota
Esta conexión RFC debe ser utilizable sin un cuadro de diálogo de inicio de sesión.

5. Guarde la nueva entrada.

Guía de migración de código personalizado para SAP S / 4HANA 1809

14 PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


3.3 Ejecución de SAP remoto cheques S / 4hana

En la comprobación del sistema central, puede realizar comprobaciones de SAP S / 4hana para analizar objetos de desarrollo en un sistema controlado de forma remota. En

este paso, se puede estimar el esfuerzo necesario para adaptar su código fuente ABAP a los cambios relacionados con el 4hana SAP S /.

3.3.1 Configuración de un ATC Serie marcha remota

Procedimiento

1. En el panel de navegación, en una transacción ATC, expandir los nodos Administración ATC Runs y DoubleClick Se ejecuta horario .

La pantalla que aparece muestra una lista de las series de ejecución existente.

2. Elija el Crear botón en la barra de herramientas.

3. Introduzca el nombre de la serie que desea crear y confirmar.

4. Especificar las siguientes entradas para la serie de ejecución que desee crear:

Campo Descripción

<Descripción> Introduzca una breve descripción de la serie de ejecución ATC desea configurar.

• Propina

Puede utilizar la plantilla proporcionada por el Descripción


campo. Cuando se ejecuta la serie de ejecución, la incorporada en iables var

están llenos de datos para el sistema, el día de la semana, la semana del

calendario, y para el año. Cómo siempre, también se puede añadir más textos

para estas variables, cambiar su posición, o sustituir las variables incorporadas

con su propio texto.

<Check variante> Introduzca la variante de verificación S4HANA_READINESS_1809

• Nota
Este a productos específicos de variantes de verificación mundial sólo comprueba las

simplificaciones relativas a SAP S / 4HANA 1809.

<Proveedor de objetos> Introduzca el ID del proveedor de objetos relevantes que representa el sistema

remoto que desea comprobar.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Opcional: Análisis de código personalizado durante la fase de preparación PUBL IC 15


Campo Descripción

<Objetos comprobar> Especificar el conjunto de desarrollo de objetos que desea comprobar en el Sistema

facturado. Sobre el Los espacios de nombres checkable pestaña, la opción por consulta

le permite especificar objetos por nombre (por ejemplo, por el nombre del paquete), por la capa

de transporte, o por componentes. La opción Por Conjunto de objetos le permite especificar un

conjunto de objetos que ha definido en Inspector de código en el sistema facturado.

• Propina

Se puede utilizar el valor de ayuda para elegir los paquetes o el objeto

establecido en el sistema remoto.

Sobre el Objetos modificados ficha, puede especificar los objetos código fuente

modificado que desea comprobar.

5. Guarde la configuración.

3.3.2 Programación de un ATC Serie marcha remota

Procedimiento

1. En la lista de series de ejecución, seleccione la serie de ejecución en cuestión y haga clic en el Calendario botón en la barra de herramientas.

2. En el cuadro de diálogo que aparece, adaptar la configuración de la Esperanza de vida de la serie y para Ejecución para usted

necesidades. De lo contrario, deje estos ajustes sin cambios.

• Nota

los Esperanza de vida define el tiempo (en días) el resultado ATC se mantiene en el sistema. Después de esto, el resultado ATC se elimina

automáticamente en el sistema.

3. Elegir Ejecutar ( F8).

• Nota

Puede utilizar la opción Ejecutar en segundo plano ( F9) para programar una serie ejecute a intervalos regulares.

Guía de migración de código personalizado para SAP S / 4HANA 1809

dieciséis PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


3.3.3 Supervisión de una serie Run ATC

En este paso, puede supervisar el estado de la serie de ejecución remota ATC.

Procedimiento

1. En el panel de navegación, en una transacción ATC, expandir los nodos Administración ATC Runs y DoubleClick Vigilancia y control se ejecuta .

2. Deje el campo vacío serie de ejecución y ejecutar ( F8).

los ATC Ejecutar monitor se muestra la vista. La vista muestra el estado de verificación se ejecuta como correr, finalizado o error.

3.3.4 Análisis de Resultados de ejecución ATC

Procedimiento

1. En el panel de navegación, en una transacción ATC, expandir los nodos Administración ATC Runs y DoubleClick administrar los resultados .

2. Deje el campo vacío run serie y seleccione Ejecutar ( F8).

• Nota

Por defecto, el ATC ejecutar se muestran los resultados de los últimos 10 días. Si usted quiere ver resultados theATC ejecuta desde un período de tiempo

diferente, cambiar la configuración de horario de datos .

los Administrar los resultados de ATC se muestra la vista. La vista muestra una lista de ATC Resultados de ejecución de las fechas en cuestión de tiempo.

3. En el Administrar los resultados de ATC Ver, seleccionar una serie de ejecución y seleccione Monitor para inspeccionar los resultados.

Una lista de todos los resultados ATC se muestra en la transacción SE80.

4. Elegir Ver las estadísticas .

5. Elija Elija Estadística para agrupar los resultados ATC (por ejemplo, mediante la nota SAP Número).

Guía de migración de código personalizado para SAP S / 4HANA 1809

Opcional: Análisis de código personalizado durante la fase de preparación PUBL IC 17


Los resultados ATC se agrupan por las estadísticas seleccionadas.

6. Haga doble clic en un grupo de estadísticas para mostrar la lista de los resultados ATC asignados a las estadísticas seleccionadas.

7. Haga doble clic en un hallazgo ATC para abrir la información detallada. Aquí se puede encontrar el número de la nota SAP en referencia a un dedicado Nota

SAP y el objeto referenciado.

8. Haga clic en el nombre del objeto para desplazarse hasta el código fuente para ver donde se produce el código incompatibles.

Guía de migración de código personalizado para SAP S / 4HANA 1809

18 PUBL IC Opcional: Análisis de código personalizado durante la fase de preparación


4 Después de código personalizado Adaptación del Sistema
Conversión

Después de Software Update Manager (SUM) ha realizado la conversión técnica, puede empezar a adaptar el código personalizado.

• Nota

Esta fase se separa cronológicamente desde el análisis de código personalizado y se puede realizar mucho más tarde (incluso años) después de que el primer

análisis se llevó a cabo.

4.1 Transacciones en ejecución SPDD y SPAU

SAP proporciona las herramientas de ajuste SPDD y SPAU, lo que le permitirá volver a implementar las modificaciones relacionadas con objetos ABAP

diccionario y objetos de desarrollo (como los programas, módulos de función, pantallas, interfaces y documentación) en las actualizaciones del sistema.

Para adaptar estas modificaciones, consulte http://help.sap.com/s4hana_op_1809 Asistencia del producto Inglés Empresa Tecnología Plataforma ABAP

desarrollo ABAP en la plataforma de desarrollo de conceptos y herramientas de desarrollo de aplicaciones en AS ABAP específicos del cliente

Desarrollo ABAP Cambio del estándar de SAP (BC)

Instalación de actualizaciones, paquetes de soporte, y Enhancement Packages y la nota SAP 2168190


para más información.

• Nota

Transacción SPDD se realiza durante la conversión del sistema mientras que todas las demás adaptaciones se llevan a cabo después de la conversión.

Guía de migración de código personalizado para SAP S / 4HANA 1809

El código personalizado Adaptación después de la conversión del Sistema PUBL IC 19


4.2 Ejecución de SAP S / cheques locales 4hana

Para comprobar si hay hallazgos ATC en el sistema convertido, es necesario configurar una serie de ejecución local de ATC que comprueba los objetos de desarrollo

requerido.

4.2.1 Importación de la base de datos de Simplificación

Para detectar un código personalizado que necesita ser adaptada a SAP S / 4hana, SAP proporciona herramientas basadas en la base de datos de simplificación.

Procedimiento

Importar la base de datos de simplificación. Para más información, ver Importación de la base de datos de simplificación [página 10] .

4.2.2 Configuración local ATC serie Run

Procedimiento

1. Inicie sesión en el sistema convertido.

2. Ejecutar transacción ATC .

los ABAP prueba de la carlinga general Aparece la pantalla.

3. En el panel de navegación, expanda los nodos Administración ATC Runs y haga doble clic en el Calendario
Carreras entrada.

La pantalla que aparece muestra una lista de las series de ejecución existente.

4. Elija el Crear botón en la barra de herramientas.

5. Introduzca un nombre para la nueva serie y confirme.

6. Especificar las siguientes entradas para la nueva serie de ejecución:

Guía de migración de código personalizado para SAP S / 4HANA 1809

20 PUBL IC El código personalizado Adaptación después de la conversión del Sistema


Campo Descripción

<Descripción> Introduzca una breve descripción de la serie de ejecución ATC desea configurar.

• Propina

Puede utilizar la plantilla proporcionada por el Descripción


campo. Cuando se ejecuta la serie de ejecución, la incorporada en iables var

están llenos de datos para el sistema, el día de la semana, la semana del

calendario, y el año. Sin embargo, también se puede añadir más textos para

estas variables, criarlos alcance, o sustituir las variables incorporadas con su

propio texto.

<Check variante> Introduzca la variante de verificación S4HANA_READINESS.

• Nota
Esta variante de verificación proporciona controles para SAP S / 4hana disposición (por

ejemplo, las búsquedas de las operaciones de base de datos o extensiones de longitud de

campo).

<Objetos comprobar> Especificar el conjunto de desarrollo de objetos que desea comprobar. Sobre el Los espacios

de nombres Checkabable pestaña, la opción por consulta

le permite especificar objetos por nombre (por ejemplo, por el nombre del paquete), por la capa de

transporte, o por componentes. La opción Por Conjunto de objetos le permite especificar un conjunto

de objetos que se han convertido de una multa en el Inspector de código en el sistema facturado.

• Propina

Se puede utilizar el valor de ayuda para elegir los paquetes o el objeto

establecido en el sistema remoto.

Sobre el Objetos modificados ficha, puede especificar los objetos código fuente

modificado que desea comprobar.

7. Guarde la configuración.

4.2.3 Programación Local ATC serie Run

Procedimiento

1. En la lista de series de ejecución, seleccione la serie de ejecución en cuestión y haga clic en el Calendario botón en la barra de herramientas.

2. En el cuadro de diálogo que aparece, seleccione Ajuste a resultados activos .

Guía de migración de código personalizado para SAP S / 4HANA 1809

El código personalizado Adaptación después de la conversión del Sistema PUBL IC 21


3. Adaptar la configuración de la Esperanza de vida de la serie y para Ejecución a sus necesidades. De lo contrario, deje estos

ajustes sin cambios.

• Nota

los Esperanza de vida define el tiempo (en días) el resultado ATC se mantiene en el sistema. Después de esto, el resultado ATC se elimina

automáticamente en el sistema.

4. Elegir Ejecutar en segundo plano ( F9) para programar la serie de carreras en intervalos de tiempo regulares.

• Recomendación

Recomendamos que Usted de programar la serie ATC local dirigido a intervalos de tiempo regulares ya que los nuevos hallazgos ATC podrían surgir durante

la adaptación de código personalizado.

4.3 Adaptación de código personalizado en ADT

Después de un ATC local dirigido serie ha comprobado los objetos de desarrollo solicitados, puede empezar a adaptar el código personalizado mediante la fijación de

los hallazgos de ATC ATC el resultado carrera con herramientas de desarrollo ABAP (ADT).

4.3.1 Visualización de los resultados Activo

Prerrequisitos

Ha instalado la versión más reciente de herramientas de desarrollo ABAP (ADT) en Eclipse. En Eclipse, ha creado una Proyecto ABAP que está conectado a su

sistema SAP S / 4hana convertido. Para obtener más información, consulte la Contenido de la ayuda en ADT.

Guía de migración de código personalizado para SAP S / 4HANA 1809

22 PUBL IC El código personalizado Adaptación después de la conversión del Sistema


Procedimiento

1. En ADT, iniciar sesión en el sistema convertido.

2. Abra la Resultado ATC navegador ver y seleccionar su sistema convertido.

3. Seleccione el Resultado activa para visualizar la lista de los resultados del ATC.

• Nota

Por defecto, todos los hallazgos ATC son filtrados por su nombre de usuario y sólo se muestran los resultados ATC pertenecientes a su usuario. Para mostrar

los resultados ATC de todos los usuarios, abra el menú contextual de la Proyecto ABAP en el

Resultado ATC navegador vista, elija Cambio de filtro del usuario , e introduzca * como nombre de usuario.

4. Elegir Grupo con cheque para mostrar los resultados ATC ordenados por los diferentes controles de la verificación

variante S4HANA_READINESS.

5. Seleccione el grupo de verificación S / 4hana: la búsqueda de S 4 errores de sintaxis / relacionados y elige Volver a revisar en el contexto

menú.

Guía de migración de código personalizado para SAP S / 4HANA 1809

El código personalizado Adaptación después de la conversión del Sistema PUBL IC 23


4.3.2 Fijación resultados ATC

Procedimiento

1. Abra la Problemas ATC ver.

La vista muestra una Lista de trabajo de los resultados de ATC resultantes de la Volver a comprobar en el grupo de verificación S / 4hana: Búsqueda de S / 4 errores de sintaxis

relacionados.

2. Seleccionar un hallazgo ATC para mostrar más información sobre qué y dónde los estados con problemas y qué se puede hacer para
solucionar el hallazgo ATC.

3. Haga doble clic en un ATC encontrar para saltar al código fuente en la posición en la que el ATC se encontró una declaración con un problema.

4. Fijar cada ATC encontrar en el Lista de trabajo como se describe en el detalles vista y el SAP asignado Nota.

• Nota

También puede fijar hallazgos ATC mediante el uso de soluciones rápidas. Ver La aplicación de soluciones rápidas [página 24] para más información.

4.3.2.1 La aplicación de soluciones rápidas

Soluciones rápidas le permiten resolver los errores y advertencias en el código fuente ABAP utilizando las funciones previstas en el Arreglo rapido surgir.

Procedimiento

• Nota

hallazgos ATC que se puede fijar con una solución rápida se muestran con un icono de bombilla .

1. Seleccione un ATC encontrar con un icono de bombilla en el Problemas ATC ver.

2. Haga clic con el hallazgo del ATC y seleccione Arreglo rapido ( Ctrl + 1).

Guía de migración de código personalizado para SAP S / 4HANA 1809

24 PUBL IC El código personalizado Adaptación después de la conversión del Sistema


los Arreglo rapido vista se abre.

3. Seleccionar la solución rápida que se muestra y seleccione Terminar .

• Recomendación

Si hay más de una corrección rápida disponible para un hallazgo ATC, se recomienda que seleccione la primera corrección rápida visualizada.

4.3.2.2 Uso de pseudo Comentarios

Pseudo comentarios son una forma de suprimir hallazgos ATC. A veces se da el caso de que ciertos hallazgos ATC no se pueden arreglar (el
llamado falsos positivos). En este caso, y especialmente en el contexto del Código adaptación personalizada a SAP S / 4hana, recomendamos que
utilice seudo comentarios para suprimir el hallazgo específico ATC.

Procedimiento

• Nota

Si seudo comentarios relacionados con SAP 4hana S / están disponibles para un hallazgo ATC, que fácilmente se pueden aplicar como una solución rápida.

Aplicar la solución rápida. Para más información, ver La aplicación de soluciones rápidas [página 24] .

Guía de migración de código personalizado para SAP S / 4HANA 1809

El código personalizado Adaptación después de la conversión del Sistema PUBL IC 25


El seudo comentario se añade al final de la línea de código en cuestión.

4.3.3 Control posterior de la de resultados activos

Una vez que haya solucionado los hallazgos ATC del grupo de verificación S / 4hana: Búsqueda de S / 4 errores de sintaxis relacionados, lo que necesita para volver a comprobar el

resultado activa y solucionar todos los otros hallazgos del ATC.

Procedimiento

1. Abra la Resultado ATC navegador ver.

2. Haga clic Resultado activa y elige Volver a revisar .

3. Abra la Problemas ATC ver.

La vista muestra una Lista de trabajo de los resultados de ATC resultantes de la Volver a comprobar en el resultado activo.

4. Fijar los hallazgos en el ATC Lista de trabajo .

5. Vuelva a comprobar la Resultado activa en Resultado ATC navegador ver de nuevo para validar que los hallazgos ATC son fijos.

• Nota

Repita los pasos 4 y 5 si hay hallazgos aún en el ATC Lista de trabajo después de que la vuelva a comprobar.

4.4 Nueva ejecución de SAP S / cheques locales 4hana

Vuelva a ejecutar el ATC local de funcionamiento de la serie una vez que todos los hallazgos ATC son fijos, ya que los nuevos hallazgos ATC podrían haber surgido durante la adaptación

de su código personalizado.

Guía de migración de código personalizado para SAP S / 4HANA 1809

26 PUBL IC El código personalizado Adaptación después de la conversión del Sistema


5 ¿Qué sigue?

Hay algunas más cosas que puede hacer después de la migración del código personalizado:

● Prueba de aplicaciones: Probar las aplicaciones para comprobar si sus programas se ejecutan en SAP S / 4hana.

• Nota

ATC no es capaz de encontrar todos los posibles problemas (por ejemplo, la codificación dinámica no está cubierto por Código de los controles estáticos).

● ATC de controles periódicos con S4HANA_READINESS: Añadir los controles SAP S / 4hana con la variante de verificación S4HANA_READINESS a

sus controles periódicos ATC.

● Los controles de tiempo de ejecución: Encender el monitor de tiempo de ejecución Comprobar en el nuevo sistema productivo y corregir los hallazgos adicionales que se

encuentran por la comprobación en tiempo de ejecución.

● optimizaciones de rendimiento: Conectar el Monitor SQL en el sistema productivo. Clasificar los resultados por SQL Monitor Tiempo de ejecución y
optimizar los 10-20 top LSQ en el código personalizado que afectan a los procesos de negocio relevantes. Después de optimizaciones de
rendimiento llegan al sistema productivo, este proceso debe repetirse 2-3 veces para lograr los mejores resultados.

● La optimización de su código para SAP HANA: Después de la migración con éxito, ahora puede empezar a pensar en la optimización de sus procesos de negocio

mediante el uso de código de empujar hacia abajo las técnicas de SAP HANA, como los Servicios de Datos Básicos (CDS) y los procedimientos de bases de datos

ABAP gestionados (AMDP) implementadas por el lenguaje SQL HANA nativa guión.

Guía de migración de código personalizado para SAP S / 4HANA 1809

¿Que sigue? PUBL IC 27


6 Glosario

Los siguientes términos se utilizan en el contexto de esta guía de migración personalizado Código:

Término Definición

ABAP prueba de la carlinga (ATC) Herramienta para realizar la comprobación estática y dinámica calidad de código ABAP y

el repositorio de objetos asociados tanto de forma remota y local

Encontrando ATC Mensaje con información de apoyo y la funcionalidad que alerta a un

desarrollador a un problema con el código ABAP o algún otro objeto en ABAP

Repositorio

Comprobación del sistema central SAP NetWeaver AS para el sistema de ABAP 7,52 que comprueba cus código tom en

sistemas de una o múltiples de SAP remotamente

Sistema comprobado Sistema con código personalizado que consigue comprobado de forma remota por la comprobación del

sistema central

Base de Datos de simplificación tabla de base de datos en el sistema / S 4hana SAP que contiene todos los elementos de

simplificación que se refieren a objetos SAP simplificadas en SAP S / 4hana

Guía de migración de código personalizado para SAP S / 4HANA 1809

28 PUBL IC Glosario
Aviso legal Importante información legal

hipervínculos

Algunos enlaces están clasificados por un icono y / o un texto al pasar el ratón. Estos enlaces proporcionan información adicional. Acerca de los iconos:

● Los vínculos con el icono : Usted está entrando en un sitio Web que no es recibido por SAP. Mediante el uso de estos enlaces, usted está de acuerdo (a menos que se indique expresamente lo contrario en su

acuerdos con SAP) a este:

● El contenido de la documentación de SAP unido a sitio que no es. El usuario no puede deducir ninguna información sobre el medicamento contra SAP en base a esta información.

● SAP no está de acuerdo o en desacuerdo con el contenido de la orden de SAP unido a sitio, ni la disponibilidad y exactitud. SAP no será responsable de los daños causados ​por el uso de dicho
contenido menos que los daños han sido causados ​por la negligencia de grave o dolo de SAP.

● Los vínculos con el icono : Usted está saliendo de la documentación de ese producto o servicio en particular de SAP y está entrando en un sitio Web de SAP-organizada. Mediante el uso de tales

enlaces, que están de acuerdo en que (a menos que se indique expresamente lo contrario en sus acuerdos con SAP) es posible que no inferir ninguna información sobre el medicamento contra SAP en base a esta información.

Beta y otras características experimentales

características experimentales no son parte del alcance entregado oficialmente que SAP garantías para futuras versiones. Esto significa que funciones experimentales pueden ser cambiados por SAP en cualquier momento por cualquier motivo y

sin previo aviso. características experimentales no son para un uso productivo. El usuario no puede demostrar, probar, examinar, evaluar o utilizar las características experimentales en un entorno operativo activo o con datos que no ha sido

suficientemente respaldados arriba.

El propósito de las características experimentales es obtener información desde el principio, permitiendo a los clientes y socios para influir en el futuro producto en consecuencia. Al proporcionar sus comentarios (por ejemplo, en la Comunidad SAP),

usted acepta que los derechos de propiedad intelectual de las contribuciones o trabajos derivados seguirán siendo propiedad exclusiva de SAP.

ejemplo de código

Cualquier fragmentos de codificación de software y / o código son ejemplos. No son para uso productivo. El código de ejemplo sólo se diseñó para explicar y visualizar las reglas de sintaxis y de fraseo mejor. SAP no
garantiza la exactitud e integridad del código de ejemplo. SAP no será responsable de los errores o daños producidos por el uso de ejemplo de código menos que los daños han sido causados ​por la negligencia de
grave o dolo de SAP.

Relativo al Género Idioma

Tratamos de no utilizar formas y formulaciones de palabras específicas de género. Según sea apropiado para el contexto y la legibilidad, SAP puede utilizar formas de las palabras masculinas para referirse a todos los géneros.

Guía de migración de código personalizado para SAP S / 4HANA 1809

Aviso legal Importante información legal PUBL IC 29


www.sap.com / contactsap

© 2018 SAP SE o una compañía de SAP afiliado. Todos los derechos reservados. Ninguna parte de

esta publicación puede ser reproducida o transmitida en cualquier forma o para cualquier propósito sin

el permiso expreso de SAP SE o una compañía de SAP afiliado. La información contenida en este

documento puede modificarse sin previo aviso. Algunos productos de software comercializados por

SAP SE y sus distribuidores contienen componentes de software propiedad de otros proveedores de

software. Las especificaciones de los productos pueden variar. Estos materiales los proporciona SAP

SE o una empresa filial de SAP sólo para fines informativos, sin representación o garantía de ningún

tipo y SAP o sus compañías afiliadas no se hace responsable de los errores u omisiones con respecto a

los materiales. Las únicas garantías de los productos y servicios de la compañía SAP o SAP de

afiliados son los que se establecen en las declaraciones expresas de garantía que acompañan a dichos

productos y servicios, si las hubiera. Nada en este documento debe interpretarse como una garantía

adicional.

SAP y otros productos y servicios de SAP mencionados, así como sus respectivos logotipos son

marcas comerciales o marcas comerciales registradas de SAP SE (o una empresa filial de SAP) en

Alemania y en otros países. Todos los demás nombres de productos y servicios mencionados son

marcas comerciales de sus respectivas compañías. Por favor mira https://www.sap.com/about/legal/trademark.html

para la información y las comunicaciones de la marca adicional.

EL MEJOR FUNCIONAMIENTO
HOW-TO GUIDE | PUBLIC
Application Server ABAP 7.53 SP00
Document Version: 1.0 – 2018-09-21

Custom Code Migration Guide for SAP S/4HANA


1809
Feature Package Stack 00
© 2018 SAP SE or an SAP affiliate company. All rights reserved.

THE BEST RUN


Content

1 Custom Code Migration Guide for SAP S/4HANA 1809. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Overview of the Conversion Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 System Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

3 Optional: Custom Code Analysis During Preparation Phase. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8


3.1 Preparing the Checked System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Configuring the User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Applying SAP Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
3.2 Preparing the Central Check System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Configuring the User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Applying SAP Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Configuring RFC Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Importing the Simplification Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Setting the Role as Central Check System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Creating System Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Configuring Object Providers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
3.3 Running Remote SAP S/4HANA Checks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Configuring a Remote ATC Run Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Scheduling a Remote ATC Run Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Monitoring an ATC Run Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Analyzing ATC Run Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Custom Code Adaptation After System Conversion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19


4.1 Running Transactions SPDD and SPAU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 Running Local SAP S/4HANA Checks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Importing the Simplification Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Configuring Local ATC Run Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Scheduling Local ATC Run Series. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 Adapting Custom Code in ADT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Displaying Active Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Fixing ATC Findings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Rechecking the Active Result. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4 Rerunning Local SAP S/4HANA Checks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 What's Next?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Custom Code Migration Guide for SAP S/4HANA 1809


2 PUBLIC Content
6 Glossary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Custom Code Migration Guide for SAP S/4HANA 1809


Content PUBLIC 3
1 Custom Code Migration Guide for SAP S/
4HANA 1809

Custom Code Migration is part of the system conversion process from the classic SAP Business Suite running
on any database to the SAP S/4HANA system. In the context of this system conversion, custom ABAP code
needs to be adapted, since a lot of SAP code within SAP S/4HANA was simplified and in some cases changed
in a non-compatible way.

Some of your custom code objects are not valid anymore and either do not perform as expected or produce
syntax errors or dumps (red objects in the picture). You almost certainly have other objects that do perform as
expected and do not need to be changed (green objects in the picture).

SAP provides tools, based on the Simplification Database, that detect any custom code that needs to be
adapted to SAP S/4HANA. The Simplification Database is a database table in the SAP S/4HANA system that
contains all Simplification Items that refer to SAP objects simplified in SAP S/4HANA. Each simplification item
describes changed or removed SAP objects and refers to a dedicated SAP Note that describes the impact of
the change and how the related custom code can be adapted.

To analyze the required adaptations, you need to set up a system based on SAP NetWeaver AS for ABAP 7.52
that operates as a Central Check System. Using this Central Check System, you can perform remote custom
code checks in ABAP Test Cockpit (ATC) for one or more systems in your landscape.

Custom Code Migration Guide for SAP S/4HANA 1809


4 PUBLIC Custom Code Migration Guide for SAP S/4HANA 1809
2 Getting Started

This guide focuses on the custom code related process, from checking custom code remotely, then analyzing
the findings, and finally adapting the custom code. Read this guide carefully to get instructions on how to adapt
your custom code to SAP S/4HANA 1809.

2.1 Overview of the Conversion Process

SAP provides a process for the system conversion to SAP S/4HANA. The following figure gives you an overview
of the tools, the phases, and the activities involved in the process.

The Custom Code Migration process describes the tools and necessary activities that help you to migrate
custom code. The process consists of preparatory analysis (Custom Code Analysis) and the adaptation of the
custom code (Custom Code Adaptation) after the technical conversion.

Custom Code Analysis

To prepare the system conversion, we recommend that you evaluate your custom code and remove any
obsolete code as indicated in the Usage Procedure Log (UPL/SCMON). For more information, see ABAP Call
Monitor (SCMON) – Analyze usage of your code .

In addition, your custom code needs to be checked with ABAP Test Cockpit (ATC) against the SAP S/4HANA
simplifications in the Simplification Database and for any SAP HANA related changes. The result is a list of
findings where your custom code does not comply with the scope and data structure of SAP S/4HANA. At this
step you can estimate the required effort required to adapt custom code to migrate to SAP S/4HANA.

Custom Code Migration Guide for SAP S/4HANA 1809


Getting Started PUBLIC 5
 Note

The only purpose of the Custom Code Analysis phase is to estimate the effort required for the Custom
Code Adaptation for system conversion in your current SAP Business Suite landscape. This phase can be a
long time before the actual system conversion to SAP S/4HANA.

Nevertheless, in this phase you can also prepare your custom code for the future system conversion. For
more information, see the blog What you can do today to prepare your custom code for SAP S/4HANA .

Only after the system conversion to SAP S/4HANA was fulfilled can the functional adaptation be carried
out locally on the SAP S/4HANA system.

Custom Code Adaptation

In the system conversion, you need to adapt any modifications related to ABAP Dictionary objects using
transaction SPDD.

After you performed the system conversion to SAP S/4HANA with Software Update Manager (SUM), you need
to adapt any modifications related to repository objects using transaction SPAU.

After this, we recommend that you run ABAP Test Cockpit (ATC) with SAP S/4HANA checks in ABAP
Development Tools (ADT). The result is a list of ATC findings that are related to SAP S/4HANA simplifications
and refer to SAP Notes which describe how to solve the issues. Based on these ATC findings, you can start
adapting your custom code.

For more information on the overall system conversion process, see http://help.sap.com/s4hana_op_1809
Product Documentation Conversion Guide .

 Note

If you upgrade from lower release of SAP S/4HANA to SAP S/4HANA 1809, you also need to adapt some of
your custom code. For more information on the upgrade process, see http://help.sap.com/
s4hana_op_1809 Product Documentation Upgrade Guide .

2.2 System Requirements

To perform the Custom Code Analysis, you need to set up a centralized SAP NetWeaver AS for ABAP 7.52
system as the Central Check System within your SAP system landscape.

 Note

The Central Check System can be used to check one or more SAP Business Suite systems.

For remote access, the Central Check System needs RFC destinations for each relevant system that you want
to check using ATC. When executed, the Central Check System accesses the Checked System using Remote
Stubs and the RFC connection. These Remote Stubs are an interface between the Central Check System and
the Checked System and return a model from custom code that needs to be checked.

Custom Code Migration Guide for SAP S/4HANA 1809


6 PUBLIC Getting Started
To analyze your custom code, you need to meet the following system requirements:

SAP System Software Component

Central Check System SAP_BASIS 7.52 or higher

Checked System SAP_BASIS 7.00, 7.01, 7.02, 7.31, 7.40, 7.50, 7.51 or 7.52

To adapt your custom code, you need the ABAP Development Tools (ADT) in the latest client version too. See
https://tools.hana.ondemand.com/ for more information.

 Recommendation

We recommend that you use the ABAP Development Tools (ADT) since transaction SE80 in SAP GUI no
longer supports all development objects (such as CDS Views) needed in SAP S/4HANA.

Custom Code Migration Guide for SAP S/4HANA 1809


Getting Started PUBLIC 7
3 Optional: Custom Code Analysis During
Preparation Phase

The Custom Code Analysis is performed before the technical conversion and is optional. In this phase, you can
estimate the effort required to adapt the custom code to SAP S/4HANA simplifications.

 Note

The functional adaptation of custom code is done after the technical conversion. If you do not want to
estimate the effort required in advance, continue with the Custom Code Adaptation After System
Conversion [page 19].

3.1 Preparing the Checked System

To enable your Central Check System to check your custom code remotely, you need to configure your user
and apply some required SAP Notes in your Checked System.

3.1.1 Configuring the User

The RFC user needs the following authorizations in the Checked System:

Name of Authoriza­
tion Object Activity Type of RFC Object Name of RFC Object Description

S_RFC 16 (Execute) FUGR SABP_COMP_PROCS Authorization for:


_E, ● Configuring Ob­
SCA_REMOTE_DATA ject Providers
_ACCESS ● Running SAP S/
4HANA checks
FUNC REPOSITORY_ENVI
RONMENT_ALL,
RFC_GET_NAMETAB,
FUNCTION_EXISTS,
RFCPING

S_DEVELOP 03 (Display) * *

Custom Code Migration Guide for SAP S/4HANA 1809


8 PUBLIC Optional: Custom Code Analysis During Preparation Phase
3.1.2 Applying SAP Notes

Apply the following SAP Notes in the Checked System:

● 2485231 - Remote ATC Checks of Modifications and Enhancements


● 2270689 - RFC Extractor for performing static checks
● 2190065 - ATC/CI: Remote Code Analysis - Object Provider Stub
● 2196792 - RFC-Stub for CVA/SLIN-Remote

3.2 Preparing the Central Check System

To check custom code remotely in ABAP Test Cockpit (ATC), you need to install and configure an ATC Central
Check System. This system checks one or more SAP systems in your landscape for SAP S/4HANA related
changes.

3.2.1 Configuring the User

You need the following user to use transaction ATC to perform custom code checks:

User Role Description

SAP_SATC_ADMIN Authorization for setting up ABAP Test Cockpit (ATC) for


central quality checking

In addition, you need the following authorization object:

Name of the Authorization Name of the Authorization Value of the Authorization


Object Field Field Description

S_YCM SYCM_AREA SDB Authorization for importing


the Simplification Database
ACTVT UL

3.2.2 Applying SAP Notes

In the Central Check System, apply all the relevant SAP Notes that are mentioned in the following SAP Notes so
that you can use the latest features:

● 2436688 - Recommended SAP Notes for using SAP S/4HANA custom code checks in ATC

Custom Code Migration Guide for SAP S/4HANA 1809


Optional: Custom Code Analysis During Preparation Phase PUBLIC 9
● 2364916 - Recommended SAP Notes for using ATC to perform remote analysis

3.2.3 Configuring RFC Connections

Use transaction SM59 to create RFC connections for each Checked System.

 Note

The RFC connection must be usable without a logon dialog.

3.2.4 Importing the Simplification Database

To check your custom code against the SAP S/4HANA simplifications, you need to import the Simplification
Database into the Central Check System.

3.2.4.1 Downloading the Simplification Database

SAP provides content for the Simplification Database of an SAP product as a ZIP file in SAP Service
Marketplace (SMP). The content of the Simplification Database can be downloaded as a ZIP file. This ZIP file
then has to be uploaded to the central check system.

Procedure

1. Open the SAP Software Download Center .


2. Choose Software Downloads and search for CCMSIDB.
3. Choose the relevant ZIP file and choose Download Basket.

 Note

To find the most recent content of the Simplification Database provided for SAP S/4HANA, see also
SAP Note 2241080 .

Results

The ZIP file is downloaded and saved on your selected drive. It contains the content of the Simplification
Database.

Custom Code Migration Guide for SAP S/4HANA 1809


10 PUBLIC Optional: Custom Code Analysis During Preparation Phase
3.2.4.2 Importing the Simplification Database

To add the content of the Simplification Database to your system for further analysis, you need to upload the
downloaded ZIP file to the Central Check System.

Procedure

1. Log on to the Central Check System.


2. Run transaction SYCM.

The Display Simplification Database Content view is opened.

3. Choose Simplification Database Import from ZIP File from the menu bar.

4. Choose the ZIP file with the downloaded Simplification Database from your drive and confirm with Open.

Results

The Simplification Database is uploaded to the Central Check System and is now available for analysis in
transaction SYCM.

3.2.4.3 Displaying the Content of the Simplification


Database

You can display the content of the Simplification Database to get an overview of all changes or specific changes
and the corresponding SAP objects that are simplified in SAP S/4HANA.

Procedure

To get a list of all Simplification Items, choose Ctrl + F8 or the Overview button.

Custom Code Migration Guide for SAP S/4HANA 1809


Optional: Custom Code Analysis During Preparation Phase PUBLIC 11
 Note

To limit the number of Simplification Items displayed, enter the relevant filter criteria in transaction SYCM
and choose Execute.

Results

The Simplification Database Content view is opened. From here you can order the displayed list, for example by
their SAP Object Type, the assigned Simplification Category, or the relevant SAP Note Number.

From the overview, you can display the list of objects contained in a Simplification Item.

 Note

To find out whether a certain object is related to a Simplification Item, enter the name of the object (for
example MATNR) in the Object Name field and execute ( F8 ). Then you can navigate to the corresponding
SAP Note to get more information.

3.2.5 Setting the Role as Central Check System

The system role needs to be specified as Central Check System for remote SAP S/4HANA checks.

Procedure

1. Run transaction ATC.

The ABAP Test Cockpit Overview screen appears.

2. In the navigation pane, expand the node ATC Administration Setup and double-click System Role.
3. Switch to change mode ( F6 ).
4. On the Change System Role screen, choose ATC Checks by Object Providers Only.

Custom Code Migration Guide for SAP S/4HANA 1809


12 PUBLIC Optional: Custom Code Analysis During Preparation Phase
5. Save the new settings and return to the ABAP Test Cockpit Overview screen.

3.2.6 Creating System Groups

A system group contains multiple SAP systems. Every Object Provider must be assigned to a system group and
therefore you need to create a system group before you configure an Object Provider.

Procedure

1. In the navigation pane in transaction ATC, expand the node ATC Administration Setup and double-
click Object Providers.
2. Double-click the item System Groups for selection.

3. Switch to change mode ( F6 ).


4. Choose the New Entries button in the toolbar.
5. Enter an ID and short Description for the new system group you want to add.
6. Save the new entry.

3.2.7 Configuring Object Providers

An Object Provider defines the RFC connection to be used for analysis in a remote SAP system. While a check
run is being executed, the ATC framework uses this RFC connection to the Checked System to extract a model
from the custom code.

Procedure

1. In the RFC Object Providers view, double-click the item RFC Object Providers for selection.

Custom Code Migration Guide for SAP S/4HANA 1809


Optional: Custom Code Analysis During Preparation Phase PUBLIC 13
2. Switch to change mode ( F6 ).
3. Choose the New Entries button in the toolbar.
4. Specify the following entries for the Object Provider you want to create:

Fields Description

<ID> ID that specifies the Object Provider

 Note
This ID is used when configuring an ATC run series.

<Description> Short text that specifies the Object Provider

<System Group> The system group to which the Object Provider belongs

<SAP System> ID of the remote system, to which you want to connect us­
ing the Object Provider

<RFC Destination> Valid RFC destination for RFC connection to the Checked
System

 Note
This RFC connection must be usable without a logon
dialog.

5. Save the new entry.

Custom Code Migration Guide for SAP S/4HANA 1809


14 PUBLIC Optional: Custom Code Analysis During Preparation Phase
3.3 Running Remote SAP S/4HANA Checks

In the Central Check System, you can perform SAP S/4HANA checks to analyze development objects in a
Checked System remotely. In this step, you can estimate the effort required to adapt your ABAP source code to
SAP S/4HANA-related changes.

3.3.1 Configuring a Remote ATC Run Series

Procedure

1. In the navigation pane in transaction ATC, expand the nodes ATC Administration Runs and double-
click Schedule Runs.

The screen that appears displays a list of existing run series.


2. Choose the Create button in the toolbar.
3. Enter the name for the series you want to create and confirm.
4. Specify the following entries for the run series you want to create:

Field Description

<Description> Enter a short description for the ATC run series you want
to configure.

 Tip
You can use the template provided by the Description
field. When you execute the run series, the built-in var­
iables are filled with data for the system, the day of
the week, the calendar week, and for the year. How­
ever, you can also add further texts to these variables,
rearrange them, or replace the built-in variables with
your own text.

<Check Variant> Enter the check variant S4HANA_READINESS_1809

 Note
This product-specific global check variant checks only
the simplifications relating to SAP S/4HANA 1809.

<Object Provider> Enter the ID of the relevant object provider that represents
the remote system you want to check.

Custom Code Migration Guide for SAP S/4HANA 1809


Optional: Custom Code Analysis During Preparation Phase PUBLIC 15
Field Description

<Objects to Check> Specify the set of development objects you want to check
in the Checked System.

On the Checkable Namespaces tab, the option By Query


lets you specify objects by name (for example, by package
name), by transport layer, or by component. The option By
Object Set lets you specify an object set you defined in
Code Inspector in the Checked System.

 Tip
You can use the value help to choose the packages or
the object set in the remote system.

On the Modified Objects tab, you can specify the modified


source code objects you want to check.

5. Save the configuration.

3.3.2 Scheduling a Remote ATC Run Series

Procedure

1. In the list of run series, select the run series in question and click the Schedule button in the toolbar.
2. In the dialog that appears, adapt the settings for the Life Span of the series and for Execution to your
needs. Otherwise, leave these settings unchanged.

 Note

The Life Span defines how long (in days) the ATC result is kept in the system. After this, the ATC result
is automatically deleted in the system.

3. Choose Execute ( F8 ).

 Note

You can use the option Execute in Background ( F9 ) to schedule a run series at regular intervals.

Custom Code Migration Guide for SAP S/4HANA 1809


16 PUBLIC Optional: Custom Code Analysis During Preparation Phase
3.3.3 Monitoring an ATC Run Series
In this step, you can monitor the status of the remote ATC run series.

Procedure

1. In the navigation pane in transaction ATC, expand the nodes ATC Administration Runs and double-
click Monitor and Control Runs.
2. Leave the run series field empty and execute ( F8 ).

The ATC Run Monitor view is displayed. The view shows the status of check runs as running, finished, or
failed.

3.3.4 Analyzing ATC Run Results

Procedure

1. In the navigation pane in transaction ATC, expand the nodes ATC Administration Runs and double-
click Manage Results.
2. Leave the run series field empty and choose Execute ( F8 ).

 Note

By default, the ATC run results of the last 10 days are displayed. If you want to see theATC run results
from a different period of time, change the settings in Schedule Data.

The ATC Manage Results view is displayed. The view shows a list of ATC run results from your requested
period of time.
3. In the ATC Manage Results view, select a run series and choose Display to inspect the results.

A list of all ATC findings is displayed in transaction SE80.


4. Choose Statistics View.
5. Choose Choose Statistic to group the ATC findings (for example, by SAP Note Number).

Custom Code Migration Guide for SAP S/4HANA 1809


Optional: Custom Code Analysis During Preparation Phase PUBLIC 17
The ATC findings are grouped by the selected statistics.
6. Double-click a statistics group to display the list of ATC findings assigned to the selected statistics.
7. Double-click an ATC finding to open detailed information. Here you can find the SAP Note number referring
to a dedicated SAP Note and the referenced object.

8. Click the object name to navigate to the source code to see where the incompatible code occurs.

Custom Code Migration Guide for SAP S/4HANA 1809


18 PUBLIC Optional: Custom Code Analysis During Preparation Phase
4 Custom Code Adaptation After System
Conversion

After Software Update Manager (SUM) has performed the technical conversion, you can start adapting your
custom code.

 Note

This phase is separated chronologically from the Custom Code Analysis and can be performed much later
(even years) after the first analysis took place.

4.1 Running Transactions SPDD and SPAU

SAP provides the adjustment tools SPDD and SPAU, which enable you to reimplement any modifications related
to ABAP Dictionary objects and development objects (such as programs, function modules, screens,
interfaces, and documentation) in system upgrades.

To adapt these modifications, see http://help.sap.com/s4hana_op_1809 Product Assistance English


Enterprise Technology ABAP Platform Developing on the ABAP Platform Development Concepts and
Tools Application Development on AS ABAP Customer-Specific ABAP Development Changing the SAP
Standard (BC) Installing Upgrades, Support Packages, and Enhancement Packages and SAP Note 2168190
for more information.

 Note

Transaction SPDD is performed during the system conversion whereas all other adaptations take place after
the conversion.

Custom Code Migration Guide for SAP S/4HANA 1809


Custom Code Adaptation After System Conversion PUBLIC 19
4.2 Running Local SAP S/4HANA Checks

To check for ATC findings in the converted system, you need to configure a local ATC run series that checks the
requested development objects.

4.2.1 Importing the Simplification Database

To detect custom code which needs to be adapted to SAP S/4HANA, SAP provides tools based on the
Simplification Database.

Procedure

Import the Simplification Database. For more information, see Importing the Simplification Database [page
10].

4.2.2 Configuring Local ATC Run Series

Procedure

1. Log on to your converted system.


2. Run transaction ATC.

The ABAP Test Cockpit Overview screen appears.

3. In the navigation pane, expand the nodes ATC Administration Runs and double-click the Schedule
Runs entry.

The screen that appears displays a list of existing run series.


4. Choose the Create button in the toolbar.
5. Enter a name for the new series and confirm.
6. Specify the following entries for the new run series:

Custom Code Migration Guide for SAP S/4HANA 1809


20 PUBLIC Custom Code Adaptation After System Conversion
Field Description

<Description> Enter a short description for the ATC run series you want
to configure.

 Tip
You can use the template provided by the Description
field. When you execute the run series, the built-in var­
iables are filled with data for the system, the day of
the week, the calendar week, and the year. However,
you can also add further texts to these variables, rear­
range them, or replace the built-in variables with your
own text.

<Check Variant> Enter the check variant S4HANA_READINESS.

 Note
This check variant provides checks for SAP S/4HANA
readiness (for example, searches for DB operations or
field length extensions).

<Objects to Check> Specify the set of development objects you want to check.

On the Checkabable Namespaces tab, the option By Query


lets you specify objects by name (such as by package
name), by transport layer, or by component. The option By
Object Set lets you specify an object set that you have de­
fined in Code Inspector in the Checked System.

 Tip
You can use the value help to choose the packages or
the object set in the remote system.

On the Modified Objects tab, you can specify the modified


source code objects you want to check.

7. Save the configuration.

4.2.3 Scheduling Local ATC Run Series

Procedure

1. In the list of run series, select the run series in question and click the Schedule button in the toolbar.
2. In the dialog that appears, choose Set to Active Result.

Custom Code Migration Guide for SAP S/4HANA 1809


Custom Code Adaptation After System Conversion PUBLIC 21
3. Adapt the settings for the Life Span of the series and for Execution to your needs. Otherwise, leave these
settings unchanged.

 Note

The Life Span defines how long (in days) the ATC result is kept in the system. After this, the ATC result
is automatically deleted in the system.

4. Choose Execute in Background ( F9 ) to schedule the run series in regular time intervals.

 Recommendation

We recommend that youto schedule the local ATC run series in regular time intervals since new ATC
findings could emerge during custom code adaptation.

4.3 Adapting Custom Code in ADT

After a local ATC run series has checked the requested development objects, you can start adapting the
custom code by fixing the ATC findings of the ATC run result with ABAP Development Tools (ADT).

4.3.1 Displaying Active Results

Prerequisites

You installed the latest version of ABAP Development Tools (ADT) in Eclipse. In Eclipse, you created an ABAP
Project which is connected to your converted SAP S/4HANA system. For more information, see the Help
Contents in ADT.

Custom Code Migration Guide for SAP S/4HANA 1809


22 PUBLIC Custom Code Adaptation After System Conversion
Procedure

1. In ADT, log on to your converted system.


2. Open the ATC Result Browser view and select your converted system.

3. Select the Active Result to display the list of ATC findings.

 Note

By default, all ATC findings are filtered by your user name and only ATC findings belonging to your user
are displayed. To display the ATC findings of all users, open the context menu of the ABAP Project in the
ATC Result Browser view, choose Change User Filter, and enter * as the user name.

4. Choose Group By Check to display the ATC findings sorted by the different checks of the check
variant S4HANA_READINESS.

5. Select the check group S/4HANA: Search for S/4 related syntax errors and choose Recheck in the context
menu.

Custom Code Migration Guide for SAP S/4HANA 1809


Custom Code Adaptation After System Conversion PUBLIC 23
4.3.2 Fixing ATC Findings

Procedure

1. Open the ATC Problems view.

The view shows a Worklist of ATC findings resulting from the recheck on the check group S/4HANA: Search
for S/4 related syntax errors.
2. Select an ATC finding to display further information about what and where the statements with problems
are and what you can do to fix the ATC finding.
3. Double-click an ATC finding to jump to the source code at the position where the ATC found a statement
with a problem.
4. Fix each ATC finding in the Worklist as described in the Details view and the assigned SAP Note.

 Note

You can also fix ATC findings by using Quick Fixes. See Applying Quick Fixes [page 24] for more
information.

4.3.2.1 Applying Quick Fixes

Quick Fixes enable you to resolve errors and warnings in the ABAP source code using the functions provided in
the Quick Fix popup.

Procedure

 Note

ATC findings that can be fixed with a Quick Fix are displayed with a lightbulb icon .

1. Select an ATC finding with a lightbulb icon in the ATC Problems view.
2. Right-click the ATC finding and choose Quick Fix ( Ctrl + 1 ).

Custom Code Migration Guide for SAP S/4HANA 1809


24 PUBLIC Custom Code Adaptation After System Conversion
The Quick Fix view opens.
3. Select the displayed Quick Fix and choose Finish.

 Recommendation

If there is more than one Quick Fix available for an ATC finding, we recommend that you select the first
Quick Fix displayed.

4.3.2.2 Using Pseudo Comments

Pseudo comments are one way of suppressing ATC findings. Sometimes it is the case that certain ATC findings
cannot be fixed (so-called false positives). In this case and especially in the context of the Custom Code
Adaptation to SAP S/4HANA, we recommend that you use pseudo comments to suppress the specific ATC
finding.

Procedure

 Note

If SAP S/4HANA-related pseudo comments are available for an ATC finding, they can easily be applied as a
Quick Fix.

Apply the quick fix. For more information, see Applying Quick Fixes [page 24].

Custom Code Migration Guide for SAP S/4HANA 1809


Custom Code Adaptation After System Conversion PUBLIC 25
The pseudo comment is appended at the end of the code line in question.

4.3.3 Rechecking the Active Result

Once you have fixed the ATC findings of the check group S/4HANA: Search for S/4 related syntax errors, you
need to recheck the active result and fix all other ATC findings.

Procedure

1. Open the ATC Result Browser view.


2. Right-click Active Result and choose Recheck.
3. Open the ATC Problems view.

The view shows a Worklist of ATC findings resulting from the recheck on the active result.
4. Fix the ATC findings in the Worklist.
5. Recheck the Active Result in ATC Result Browser view again to validate that the ATC findings are fixed.

 Note

Repeat the steps 4 and 5 if there are still ATC findings in the Worklist after the recheck.

4.4 Rerunning Local SAP S/4HANA Checks

Rerun the local ATC run series once all the ATC findings are fixed, since new ATC findings could have emerged
during the adaptation of your custom code.

Custom Code Migration Guide for SAP S/4HANA 1809


26 PUBLIC Custom Code Adaptation After System Conversion
5 What's Next?

There are a few more things you can do after the Custom Code Migration:

● Testing applications: Test your applications to check whether your programs run on SAP S/4HANA.

 Note

ATC is not able to find all potential issues (for example, dynamic coding is not covered by static code
checks).

● Regular ATC checks with S4HANA_READINESS: Add the SAP S/4HANA checks with check variant
S4HANA_READINESS to your regular ATC checks.
● Runtime Checks: Switch on the Runtime Check Monitor in the new productive system and correct the
additional findings found by the runtime check.
● Performance optimizations: Switch on SQL Monitor in the productive system. Sort the SQL Monitor
results by execution time and optimize the top 10-20 SQLs in your custom code which affect relevant
business processes. After performance optimizations reach the productive system, this process needs to
be repeated 2-3 times to achieve the best results.
● Optimizing your code for SAP HANA: After the successful migration, you can now start to think about
optimizing your business processes by using code push down techniques of SAP HANA, like the Core Data
Services (CDS) and ABAP-managed database procedures (AMDP) implemented by the native HANA
language SQL script.

Custom Code Migration Guide for SAP S/4HANA 1809


What's Next? PUBLIC 27
6 Glossary

The following terms are used within the context of this Custom Code Migration guide:

Term Definition

ABAP Test Cockpit (ATC) Tool for performing static and dynamic quality checking of
ABAP code and associated repository objects both remotely
and locally

ATC Finding Message with supporting information and functionality that


alerts a developer to a problem with ABAP code or some
other object in ABAP Repository

Central Check System SAP NetWeaver AS for ABAP 7.52 system that checks cus­
tom code in one or multiple SAP systems remotely

Checked System System with custom code that gets checked remotely by the
Central Check System

Simplification Database Database table in the SAP S/4HANA system that contains all
the Simplification Items referring to SAP objects simplified
in SAP S/4HANA

Custom Code Migration Guide for SAP S/4HANA 1809


28 PUBLIC Glossary
Important Disclaimers and Legal Information

Hyperlinks
Some links are classified by an icon and/or a mouseover text. These links provide additional information.
About the icons:

● Links with the icon : You are entering a Web site that is not hosted by SAP. By using such links, you agree (unless expressly stated otherwise in your
agreements with SAP) to this:

● The content of the linked-to site is not SAP documentation. You may not infer any product claims against SAP based on this information.
● SAP does not agree or disagree with the content on the linked-to site, nor does SAP warrant the availability and correctness. SAP shall not be liable for any
damages caused by the use of such content unless damages have been caused by SAP's gross negligence or willful misconduct.

● Links with the icon : You are leaving the documentation for that particular SAP product or service and are entering a SAP-hosted Web site. By using such
links, you agree that (unless expressly stated otherwise in your agreements with SAP) you may not infer any product claims against SAP based on this
information.

Beta and Other Experimental Features


Experimental features are not part of the officially delivered scope that SAP guarantees for future releases. This means that experimental features may be changed by
SAP at any time for any reason without notice. Experimental features are not for productive use. You may not demonstrate, test, examine, evaluate or otherwise use
the experimental features in a live operating environment or with data that has not been sufficiently backed up.
The purpose of experimental features is to get feedback early on, allowing customers and partners to influence the future product accordingly. By providing your
feedback (e.g. in the SAP Community), you accept that intellectual property rights of the contributions or derivative works shall remain the exclusive property of SAP.

Example Code
Any software coding and/or code snippets are examples. They are not for productive use. The example code is only intended to better explain and visualize the syntax
and phrasing rules. SAP does not warrant the correctness and completeness of the example code. SAP shall not be liable for errors or damages caused by the use of
example code unless damages have been caused by SAP's gross negligence or willful misconduct.

Gender-Related Language
We try not to use gender-specific word forms and formulations. As appropriate for context and readability, SAP may use masculine word forms to refer to all genders.

Custom Code Migration Guide for SAP S/4HANA 1809


Important Disclaimers and Legal Information PUBLIC 29
www.sap.com/contactsap

© 2018 SAP SE or an SAP affiliate company. All rights reserved.

No part of this publication may be reproduced or transmitted in any form


or for any purpose without the express permission of SAP SE or an SAP
affiliate company. The information contained herein may be changed
without prior notice.

Some software products marketed by SAP SE and its distributors


contain proprietary software components of other software vendors.
National product specifications may vary.

These materials are provided by SAP SE or an SAP affiliate company for


informational purposes only, without representation or warranty of any
kind, and SAP or its affiliated companies shall not be liable for errors or
omissions with respect to the materials. The only warranties for SAP or
SAP affiliate company products and services are those that are set forth
in the express warranty statements accompanying such products and
services, if any. Nothing herein should be construed as constituting an
additional warranty.

SAP and other SAP products and services mentioned herein as well as
their respective logos are trademarks or registered trademarks of SAP
SE (or an SAP affiliate company) in Germany and other countries. All
other product and service names mentioned are the trademarks of their
respective companies.

Please see https://www.sap.com/about/legal/trademark.html for


additional trademark information and notices.

THE BEST RUN


Getting Started with the ABAP Test Cockpit for Developers | SAP Blogs https://blogs.sap.com/2012/10/18/getting-started-with-the-abap-test-cockp...

1 of 2 9/25/2019, 8:29 PM
Getting Started with the ABAP Test Cockpit for Developers | SAP Blogs https://blogs.sap.com/2012/10/18/getting-started-with-the-abap-test-cockp...

2 of 2 9/25/2019, 8:29 PM

También podría gustarte