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

SAP HR infotipo 0003: Modificar los campos bloqueados

$
0
0

El infotipo 0003 del módulo de Administración de Personal (PA) de SAP HCM, sirve para almacenar el status de la nómina y de la evaluación de tiempos de un empleado. A continuación se va a explicar qué opciones existen en el infotipo 0003, para modificar los campos bloqueados.

El infotipo 0003 almacena información importante cómo:

  • Fecha límite del cálculo de la nómina
  • Fecha de la modificación más temprana de los datos maestros: Si esta fecha es anteriovolver r al último cálculo de la nómina el sistema realizará una retroactividad para a calcular las nóminas que se puedan ver afectadas por los resultados.
  • Indicador de número de personal bloqueado.

SAP HR - Infotipo 0003

Este infotipo está protegido contra modificaciones para asegurar un correcto resultado de la nómina. De todas formas, SAP deja abierta una puerta para su modificación, aunque queda en manos del usuario asegurarse de los efectos de los cambios. Si aun así se desea modificar el infotipo 0003, se debe acceder a la transacción PU03 (o desde la transacción PA30 Utilidades -> Modificar status de nómina).

SAP HR - Modificar infotipo 0003

Aparecerá el infotipo 0003, pero ahora con los campos abiertos para modificarlos.

SAP HR - Infotipo 0003 - Modificación campos bloqueados


Eliminar bloqueos SAP

$
0
0

Las tablas de customizing de SAP sólo pueden ser modificadas por un usuario a la vez. Esto es debido a que están protegidas por bloqueos que no permiten la actualización simultánea de los datos. En ocasiones puede ser interesante eliminar bloqueos SAP, como por ejemplo en un curso de formación donde varios usuarios deben actualizar la misma tabla al mismo tiempo. En el siguiente artículo se muestra cómo se pueden desbloquear tablas SAP que hayan sido bloqueadas automáticamente por el sistema.

Para eliminar los bloqueos SAP sobre las tablas de customizing, y así poder acceder varios usuarios a modificar las mismas tablas hay que seguir los siguientes pasos:

1. Crear tabla de bloqueos SAP

En primer lugar, se debe crear una tabla de bloqueos SAP del diccionario para guardar qué mandantes están desbloqueados. La tabla debe tener la siguiente estructura:

Crear tabla de bloqueos SAP

En esta tabla, si el registro de un mandante tiene `X` el campo FLAG, querrá decir que en ese cliente existen bloqueos. Si por el contrario en el campo se pone el carácter ‘O’ no funcionará el bloqueo de tablas, por lo tanto dos o más usuarios podrán modificar simultáneamente la misma tabla.

2. Programas para bloquear/desbloquear tablas SAP

Se pueden crear dos programas, uno para bloquear y otro para desbloquear tablas SAP, que guardarán en la tabla anterior el estado del mandante donde se ejecute.

Desbloquear mandante SAP

Creamos un programa con el nombre ZSEQOFF y le pegamos el siguiente código:

TABLES: zenq.
DATA: off.
IF sy-mandt = '000'.
  MESSAGE 'Esta función no se permite en el mandante 000' TYPE 'A'.
ENDIF.
SELECT SINGLE FOR UPDATE * FROM zenq WHERE sysname = syst-sysid
                                     AND mandt = syst-mandt.
IF sy-subrc = 0.
  zenq-flag = 'O'.
  UPDATE zenq.
  IF sy-subrc = 0.
    off = 'X'.
  ELSE.
    off = ' '.
  ENDIF.
ELSE.
  zenq-sysname = syst-sysid.
  zenq-mandt = syst-mandt.
  zenq-flag = 'O'.
  INSERT zenq.
  IF sy-subrc = 0.
    off = 'X'.
  ELSE.
    off = ' '.
  ENDIF.
ENDIF.
IF off = 'X'.
  WRITE: / 'Desbloqueos desactivados (dependiente de mandante)'.
ELSE.
  WRITE: / 'Error al desactivar los desbloqueos'.
ENDIF.

Al ejecutar este programa, se crea o modifica un registro en la tabla con el nombre de la máquina y el cliente en el que se está ejecutando. A este registro se le pone en el campo FLAG de la tabla ‘O’, de manera que se eliminarán los bloqueos SAP automáticos.

Bloquear mandante SAP

Creamos un programa con el nombre ZSEQON y le copiamos el siguiente código:

TABLES: zenq.
DATA: on.
SELECT SINGLE FOR UPDATE * FROM zenq WHERE sysname = syst-sysid
                                     AND mandt = syst-mandt.
IF sy-subrc = 0.
  zenq-flag = 'X'.
  UPDATE zenq.
  IF sy-subrc = 0.
    on = 'X'.
  ELSE.
    on = ' '.
  ENDIF.
ELSE.
  on = 'X'.
ENDIF.
IF on = 'X'.
  WRITE: / 'Bloqueos activados (dependiente de mandante'.
ELSE.
  WRITE: / 'Error al activar los bloqueos'.
ENDIF.

Este programa tiene la misma funcionalidad que el programa anterior, con la diferencia que escribe ‘X’ en el campo FLAG del registro. Con ello se consigue que los bloqueos en el sistema se encuentren activados.

3. Modificar include

Para que los desbloqueos de las tablas SAP surtan efecto, es necesario modificar un include estándar. Para ello vamos a la transacción SE80 y elegimos el objeto de desarrollo LSENAF01. Para modificar un objeto estándar hay que registrar el objeto en SAP. En la línea 242, introducimos tras el código rc = SY-SUBRClas siguientes líneas:

IF syst-mandt <> '000'.
  DATA e_zenq TYPE zenq.
  SELECT SINGLE * FROM zenq INTO e_zenq
    WHERE sysname = syst-sysid AND mandt = syst-mandt.
  IF  e_zenq-flag = 'O'.
    rc = 0.
    EXIT.
  ENDIF.
ENDIF.

Este include se ejecuta cada vez que se intenta acceder a una tabla o vista de actualización de una tabla de customizing. Si el campo RC es distinto de 0, querrá decir que la tabla está bloqueada por algún usuario. Al introducir este código, leemos de la tabla el registro del cliente en el que nos encontremos, y si su campo FLAG está marcado, omitirá el aviso de que la tabla SAP se encuentra bloqueada.

Con estos pasos podremos hacer que las tablas de la SPRO no sean bloqueadas por un usuario, de manera que varios puedan modificarlas al mismo tiempo. Hay que tener cuidado con esto, ya que es algo peligroso ya que si dos usuarios modifican un mismo registro de manera inadecuada puede dar lugar a errores graves. Por lo tanto, se recomienda sólo eliminar bloqueos SAP en cursos y máquinas de formación, para poder agilizar el tiempo del curso.

Consumir servicio web SAP con PHP

$
0
0

Hace un tiempo publicamos dos artículos sobre cómo publicar un servicio web SAP. En esta ocasión, vamos a ver cómo consumir un servicio web SAP desde una plataforma completamente diferente como puede ser una aplicación web, concretamente cómo consumir un web service de SAP con PHP.

Realmente el método para consumir un servicio web con PHP es equivalente sea este un servicio web SAP o no. Tomamos el ejemplo de un servicio web SAP para dar continuidad a los artículos anteriores y ver cómo pasarle las credenciales de usuario.

Acceso al WSDL para consumir servicio web SAP

En primer lugar, a la hora de consumir un servicio web SAP o no SAP, debemos obtener los datos de este disponibles en su descriptor WSDL.

Tal y como vimos en el segundo artículo sobre publicar servicios web en SAP, desde la transacción SOAMANAGER se puede acceder al fichero WSDL del servicio web a consumir de donde es posible extraer las funciones disponibles desde ese servicio web y la manera en la que pueden ser accedidas.

Consumir web service SAP php

Cliente SOAP para consumir servicio web SAP

Para consumir un web service SAP, php es una buena opción ya que definiendo unas pocas líneas de código podemos acceder y utilizar funciones SAP desde una aplicación web.

En primer lugar se debe crear un cliente SOAP a partir de la URL del fichero WSDL del servicio web SAP y de la localización del servicio que se va a consumir.

$location_URL = 'http://ruta_sevicio_web.com/zlast_news2/100/zlast_news2/zb_last_news2';
$wsdl = 'http://ruta_servicio_web.com/wsdl/srvc_00505692214C1EE3B6D524ADE1ECD0F4/wsdl11/allinone/standard/document?sap-client=100?wsdl';

Para ello se crea una instancia de la clase SoapClient de PHP, indicando las opciones que correspondan en cada caso.

Según el nivel de autenticación indicado al crear el servicio web puede ser necesario la especificación de usuario y contraseña. Estos datos se han de pasar al crear el cliente SOAP y no al llamar a una acción. En realidad esta información se transfiere a través de la cabecera del mensaje SOAP. Por tanto, un ejemplo de cliente SOAP para consumir un web service SAP con PHP sería el siguiente:

$client = new SoapClient($wsdl, array(
			'location' => $location_URL,
			'uri'      => "",
			'trace'    => 1,
			'login'    => $usuario,
			'password' => $pass
			));

Consumir web service SOAP de SAP con PHP

Una vez disponemos del cliente SOAP creado en PHP, hay que llevar a cabo una llamada a la acción del servicio web SAP que se desee. En PHP existe un método propio de SoapClient que devuelve la lista de funciones disponibles en el servicio web: __getFunctions.

Suponiendo que la función que deseemos consumir del servicio web SAP sea ZNEWS_FM_GET_ULTIMAS_NOTICIAS la forma de llamarla y pasarle los parámetros de entrada necesarios es la siguiente:

try{
		$response = $client->ZNEWS_FM_GET_ULTIMAS_NOTICIAS(array("IM_NUM_NOTICIAS" => "5"));
		$xml = simplexml_load_string($order_return);
		foreach( $xml->children() as $child ) {
			echo $child->FECHA_CREACION;
		}
	}
	catch (SoapFault $exception){
		var_dump(get_class($exception));
		var_dump($exception);
	}

En la variable $response obtendremos el resultado de la llamada a la función que tendrá el formato indicado en el WSDL como mensaje de respuesta.

Una vez disponemos de la respuesta en PHP podemos extraer de esta los datos que deseemos y formatearla como sea conveniente en cada caso. Como se puede comprobar una vez se dispone del descriptor WSDL, es muy sencillo consumir un servicio web con PHP.

Clases de asistencia en Web Dynpro

$
0
0

Web Dynpro for Abap es un lenguaje de programación basado en la orientación a objetos. Dentro de nuestros componentes, podemos instanciar objetos para utilizar los métodos y atributos de diferentes clases. Una utilidad que nos presenta Web Dynpro son las clases de asistencia, una clase que podemos referenciar en el componente Web Dynpo para que pueda usarse en cualquier controlador. En el siguiente artículo se muestra como y para qué utilizar la clase de asistencia en Web Dynpro.

Crear una clase de asistencia en Web Dynpro

Lo primero de todo es crear dicha clase de asistencia. Para ello, en la transacción SE24 crearemos una nueva clase de manera normal. El único requerimiento para esta clase es que debe heredar de la clase CL_WD_COMPONENT_ASSISTANCE.

Crear clase de asistencia en Web Dynpro

Usar una clase de asistencia en componente Web Dynpro

Con esta relación, conseguimos que esta clase pueda ponerse como clase de asistencia en un componente Web Dynpro. Para ello, debemos ir a la pestaña de propiedades de nuestro componente Web Dynpro, y en el campo clase de asistencia escribiremos el nombre de la clase que acabamos de crear.

Asignar clase de asistencia a componente Web Dynpro

Al rellenar este campo, lo que conseguimos es que en todos los controladores del componente se cree un atributo llamado WD_ASSIST. Este atributo será una instancia de la clase de asistencia Web Dynpro, por lo que podremos utilizar cualquier método o atributo de la misma.

Una gran utilidad que nos ofrece es la posibilidad de crear símbolos de texto en nuestra clase de asistencia Web Dynpro. Como en cualquier programa ABAP, si nos dirigimos al menú Pasar a -> Símbolos de texto, podremos crear textos, para no tener que escribir literales en el código de nuestra aplicación, y que luego no puedan ser traducidos a otros idiomas.

Crear símbolos de texto en clase de asistencia Web Dynpro

Todos los textos que creemos pueden ser accedidos usando esta clase con el siguiente código. Este puede ser generado gracias al Wizard de Web Dynpro:

DATA: lv_text TYPE string.
lv_text = wd_assist->if_wd_component_assistance->get_text( key = '<num_text>' ).

Con esto lo que conseguimos es tener una clase donde desarrollar métodos o crear atributos que puedan ser utilizados por todos los controladores del componente. Además, no será necesario preocuparse de instanciar la clase y se podrá acceder a ellos de manera muy sencilla con el atributo WD_ASSIST.

SAP Web Dynpro 4 Abap: Manejo de mensajes

$
0
0

Los mensajes en Web Dynpro son utilizados para ofrecer al usuario información de estado de la aplicación, y para mostrar errores y avisos. En el siguiente artículo mostraremos como Web Dynpro permite definir qué tipo de mensaje es enviado, dónde se muestra y cómo es visualizado.

¿Dónde mostrar los mensajes WD4A?

Lo primero es saber dónde mostrar los mensajes WD4A. Existe un área reservada para los mismos, que por defecto está ubicada en la parte superior de la pantalla. Otra opción, es ubicarla donde el usuario lo requiera. Para ello se debe definir en el layout de la vista un elemento Message Area y ubicarlo donde se quiera.

Áreas de mensajes en Web Dynpro Abap

¿Cuándo mostrar los mensajes WD4A?

Además, se puede elegir cuándo mostrar el área de mensajes WD4A: si mostrarlo siempre o sólo cuando existan mensajes a mostrar. Para ello, en la pestaña Properties de la aplicación Web Dynpro, se puede elegir una de las dos opciones con el siguiente radioButton:

Cuándo mostrar mensajes WD4ASi se decide mostrar siempre el área de mensajes WD4A, cuando no haya mensajes se visualizará este área de la siguiente manera:

Área de mensajes Web Dynpro  vacía

¿Cómo mostrar mensajes WD4A?

Para reportar un mensaje en una aplicación Web Dynpro, deben utilizarse los métodos del interfaz IF_WD_MESSAGE_MANAGER. Web Dynpro instancia automáticamente esta clase en cada controlador, y se puede recoger la misma de la siguiente manera:

DATA: l_controller TYPE REF TO if_wd_controller,
l_message_manager TYPE REF TO if_wd_message_manager.
l_controller ?=  wd_this->wd_get_api( ).
l_message_manager = l_controller->get_message_manager( ).

Una vez instanciada la interfaz, ya se pueden utilizar los distintos métodos de la clase para lanzar mensajes WD4A de error, warning, success… También existe una opción en el Code Wizard, para utilizar cualquier método de reporte de mensajes.

Todos los métodos para reportar mensajes Web Dynpro pueden ser agrupados en tres categorías:

  • TEXT*: Los mensajes pertenecientes a esta categoría permiten mensajes conteniendo un texto arbitrario. Los textos traducidos pueden venir del OTR, de texto definido en clases ABAP, o del diccionario de datos.
  • T100.*: Estos métodos utilizan texto definidos en la tabla de base de datos T100 como mensajes de entorno Web Dynpro.
  • EXCEPCIONES: Errores recogidos en tiempo de ejecución y los texto relacionados pueden ser usado al escoger un mensaje de esta categoría.

Todos estos mensajes Web Dynpro Abap pueden relacionarse con un elemento UI. Los tipos de mensajes con * pueden recibir parámetros, para personalizar los mensajes según la aplicación.

Tutorial SAP: Configurar LSMW (Legacy System Migration Workbench) (1/2)

$
0
0

La LSMW es una herramienta que sirve para cargar datos en SAP de manera masiva desde un fichero externo. Mediante la LSMW es posible migrar a SAP datos de los siguientes tipos:

  • Datos maestros: clientes, proveedores, cuentas, centros de coste, órdenes de gasto…
  • Datos transaccionales: asientos financieros, pedidos….

Para realizar una carga de datos con esta herramienta, primero tendremos que configurar LSMW, y en este artículo os vamos a explicar cómo hacerlo en seis sencillos pasos. Este tutorial SAP incluye pantallazos paso a paso.

 Antes de nada, se creará un proyecto, un subproyecto y un objeto de carga: Configurar LSMW: pasos previos

Configurar LSMW SAP en seis pasos

A continuación habrá que llevar a cabo cada uno de los seis pasos que aparecen en pantalla e ir rellenando los parámetros necesarios para la carga de datos con LSMW:

Configurar LSMW en seis pasos

Paso 1: Actualizar atributos del objeto

En este primer paso definiremos el método para importar los datos, en este caso el ejemplo está basado en la creación de una grabación que genera un batch input: Configuración LSMW: Paso 1 - Metodo de importacionPulsaremos el botón  lsmw-sap-configuracion y podremos hacer la grabación del primer registro: Configurar LSMW: Crear nuevo registro configuracion-codigo-transaccion Crear primer registro LSMW Una vez que hayamos rellenado los datos de un cliente nos aparece en pantalla los campos que tendremos que incluir en nuestra plantilla de carga: Configurar LSMW: Plantilla de carga

Paso 2: Actualizar estructuras de origen

En este punto crearemos una estructura y le daremos un código que podría ser el mismo que el de la transacción: Configurar LSMW: Actualizar estructuras de origen

Paso 3: Actualizar campos de origen

Pulsando el botón lsmw-sap-definir-campos-origen definiremos el tipo y la longitud de cada campo a cargar: Configuración LSMW: Campos de origen

Paso 4: Actualizar relaciones

En este punto sólo es necesario entrar y visualizar que la relación entre la grabación y la estructura es correcta: Configurar LSMW: Actualización de relaciones

Paso 5: Actualizar campos y reglas de conversión

En este punto asignaremos los campos del fichero a los campos de la transacción donde se va a cargar: Configur LSMW: Actualizar campos y reglas de conversiónConfigurar SAP LSMW: Actualización valores fijos y reglas

Paso 6: Actualizar valores fijos, conversiones y rutinas

En este paso para el ejemplo que se está realizando no será necesario actualizar nada, así que ya tendremos nuestra LSMW configurada de carga de datos maestros de clientes.

 

En el siguiente artículo explicaremos los pasos para llevar a cabo la carga de datos en SAP propiamente dicha mediante la herramienta de SAP LSMW.

Tutorial SAP: Configurar LSMW (Legacy System Migration Workbench) (2/2)

$
0
0

En el artículo anterior vimos los primeros pasos para configurar la LSMW (Legacy System Migration Tool), la herramienta de SAP para carga masiva de datos, desde la creación del proyecto hasta la actualización de valores fijos, conversiones y rutinas.

En esta segunda parte del tutorial continuamos con la configuración de SAP LSMW, concretamente con los pasos de la carga de datos propiamente dicha.

LSMW SAP: Carga de datos

Una vez que se tiene creada la LSMW se accederá a la misma y se seguirán los pasos siguientes para llevar a cabo la carga de datos:

Paso 1: Especificar el fichero a cargar

SAP LSMW: Especificación del fichero a cargarSeleccionaremos la opción para subir ficheros desde el PC y elegiremos el fichero a cargar:

SAP LSMW: Elegir fichero a cargar

Paso 2: Asignar el fichero elegido

Comprobaremos que el fichero se ha asignado a la estructura correcta:

SAP LSMW: Asignación del fichero elegido

Paso 3: Leer datos del fichero

En este punto el sistema leerá los datos del fichero asignado:

Carga de datos LSMW: Lectura de fichero

Paso 4: Mostrar datos leídos

Comprobaremos que la información se ha leído correctamente:

SAP LSMW: Comprobar datos cargados de ficheroSAP LSMW: Comprobar datos cargados

Paso 5: Convertir datos

En este paso el sistema adapta los datos a la carga:

LSMW SAP: Conversión datos leídos

Paso 6: Visualizar datos convertidos

LSMW: Visualizar datos adaptados a la cargaLSMW: Datos convertidos

Paso 7: Crear Batch Input

En este punto se genera el batch input de carga.

Paso 8: Ejecutar Batch Input

En este último paso se ejecutará el Batch Input de carga de datos.

Siguiendo los pasos especificados en estos dos artículos conseguiremos configurar y utilizar SAP LSMW (Legacy System Migration Workbech) para llevar a cabo cargas masivas de datos o migraciones de datos.

 

Configuración SAP SNC sin Single Sign-On en Linux/UNIX (1/2)

$
0
0

Cuando un usuario utiliza el cliente SAP GUI para conectarse a un servidor SAP ABAP, por defecto, se establece una comunicación no segura. SAP proporciona unas librerías criptográficas llamadas SAP Cryptolib y la nueva versión SAP Commoncryptolib, para proteger esta conexión. Se puede encontrar más información sobre estas librerías en la SAP Community Network, en la sección de Single Sign-On.

SAP dispone de documentación para la configuración de estas librerías, pero suele estar basada en instalaciones sobre Windows. Su utilización en entornos GNU/Linux o UNIX suele ser más complicada, por ello resumimos en este artículo los pasos para configurar el SAP SNC en Linux/Unix.

1. Revisión de notas sobre SAP GUI

A modo de prerrequisito es recomendable revisar las siguientes notas de SAP relativas al cliente SAP GUI, versión de Kernel del sistema y componentes SAP Basis del sistema:

2. Descarga de paquetes: SAP Cryptographic Software

Para la configuración es necesario descargar los siguientes paquetes de: SAP’s Software Distribution Center -> Support Packages and Patches -> Browse our Download Catalog -> SAP Cryptographic Software:

Configuración SAP SNC: SAP Cryptographic Software

  • SNC Client Encryption/Libraries: Se puede descargar el paquete de instalación, pero es recomendable actualizarlo con el último SP disponible.
  • SAPCryptoLib: La última versión es SAPCRYPTOLIB 5.5.5, aunque se recomienda descargar directamente el paquete COMMONCRYPTOLIB en su versión 8 o posterior, que incluye características adicionales. Para más detalles sobre las diferencias se puede visitar el artículo: http://scn.sap.com/community/sso/blog/2014/07/16/sap-s-new-cryptographic-library-commoncryptolib
  • SNC Client Encryption 1.0.: El paquete necesario para poder utilizar la funcionalidad SNC con el cliente SAP GUI.

Configuracion SAP SNC: Librería SAPCRIPTOLY

3. Instalación de los paquetes descargados

Para instalar las librerías hay que descomprimir los paquetes descargados:

  • El SNC Client Encryption/Libraries se descomprime en un directorio llamada SLL en el directorio de la instancia: /usr/sap/<SID>/<INSTANCIA>
  • SAPCryptoLib hay que descomprimirlo en el directorio del kernel /sapmnt/<SID>/exe/
  • El ejecutable SNC Client Encryption se debe instalar en los equipos Windows de los usuarios para habilitar el SNC en el SAP GUI.

4. Crear un usuario en Active Directory

Para que la configuración de SNC funcione, hace falta crear un usuario en el MS Active Directory, dentro de un dominio. El nombre de usuario que se cree no tiene por qué seguir ningún patrón.

Al usuario creado hay que añadirle un atributo “Service Principal Name” (SPN) y debe seguir el patrón: SAP/nombre.

Esta parte es bastante importante y es necesaria para que la conexión funcione. Si el usuario intenta conectarse desde un equipo que no esté dentro del dominio o no tenga acceso al usuario creado, el intento de logon fallará por no disponer de los credenciales adecuados.

En la siguiente artículo se detallarán los pasos a seguir para terminar de configurar SNC en el servidor ABAP.


SAP BW: Particionado semánticamente

$
0
0

A la hora de trabajar con grandes volúmenes de datos en SAP BW, puede ser interesante dedicar un momento a decidir si existe una manera lógica de dividir estos datos en unidades más pequeñas. A partir de la versión 7.3, SAP BW ofrece el llamado particionado semántico, que ofrece una manera sencilla y rápida de hacer esta separación. En este artículo trataremos de explicar cómo y cuándo utilizar esta opción, así como mostrar el resultado final.

Particionado semántico en SAP BW: ¿Por qué? 

Resulta interesante en ocasiones dividir un infositio en partes más pequeñas. Generalmente cuando la cantidad de datos a almacenar es muy grande o simplemente se quiere tener organizada la información en objetos más manejables.

La principal ventaja del particionado semántico en SAP BW es, por tanto, la mejora de rendimiento con volúmenes grandes, pero no es la única.

La gestión de errores también se ve beneficiada. Supongamos, por ejemplo, un cubo dividido en diferentes particiones por cada año cargado. Un error en la carga puede provocar que no se pueda realizar ningún análisis sobre el cubo entero. Con el cubo particionado sin embargo, sólo el año de la carga afectada quedará inservible, pudiendo analizarse todo el resto.

Otro típico ejemplo en que el particionado semántico nos puede ayudar es cuando se trabaja con diferentes zonas horarias. Particionando el infositio según las diferentes zonas horarias, las tareas de carga y administración pueden planearse independientemente.

Particionado semántico en SAP BW: ¿Cómo? 

Hasta la versión 7.3, la única manera de llevar a cabo el particionado semántico en SAP BW era hacerlo manualmente. Creando los cubos u ODS necesarios y cargándolos aplicando los filtros correspondientes. El acceso único a los datos se conseguía mediante un multisitio.

A partir de ésta versión, se incluye a la hora de crear un cubo o un ODS el flag “Particionado semánticamente”.

SAP BW: Particionado semánticamente

Una vez seleccionado, se han de seguir los 6 pasos mostrados por pantalla que te guían a través de todo el proceso. Se empieza definiendo el cubo que se quiere crear. Se crean las condiciones que crearán las diferentes particiones y se activa. Se crea la transformación que rellenará todas las particiones y un DTP por cada partición. Por último, se crea la cadena de proceso que llenará todas las particiones.

SAP BW: Como realizar particionado semántico

Particionado semántico en SAP BW: Resultado

El resultado son tantos cubos como particiones se hayan seleccionado, de igual estructura y tamaño, con todo lo necesario para cargarlos (DTP, Cadena de proceso…) y con una capa superior de acceso único e igual estructura.

 

Resultado del particionado semántico en SAP BW

 

 

Fuente: http://help.sap.com/saphelp_nw73/helpdata/en/d1/468956248e4d9ca351896d54ab3a78/content.htm

SAP HCM – Parametrizar hojas de horario de trabajo (CATS) [2/3]

$
0
0

Continuando con la serie de artículos que iniciamos hace unos días sobre la creación de hojas horarias (CATS) en SAP, aquí os presentamos la segunda parte que explicará cómo configurar en SAP HCM las columnas de visualización para un perfil temporal CATS concreto.

2. Configuración de columnas a visualizar

Mediante la transacción SPRO accederemos a la Guía de Implementación de Customizing SAP.

La configuración de columnas se realiza a través de la siguiente ruta:

Componentes multiaplicaciones → Hoja de horario de trabajo → Parametrizaciones especiales para CATS regular → CATS regular → Registro de horario de trabajo → Especificar selección de campos

Una vez en ella, accedemos a una tabla con las tres secciones de la que está compuesta una hoja horaria en CATS y de las cuales se puede configurar los diferentes campos a visualizar.

sap-hr-configuracion-de-columnas-a-visualizar

Secciones de campos a configurar para hoja horaria CATS:

  • Opciones: Permite parametrizar los campos de visualización de la cabecera de la hoja horaria.
  • Pool de trabajo: Permite parametrizar los campos de visualización del pool de trabajo.
  • Sección de entradas: Permite parametrizar los campos de entrada de datos del empleado (Sociedad, orden, tipo de actividad, Absentismo/presencia…)

Seleccionamos el que se quiera y accedemos a ver el listado de campos que se pueden visualizar en esa sección:

SAP HR: Selección de campos a visualizar en cabecera hoja horaria CATS

Para cada cada campo existen varias opciones:

  • Entr – El campo es de entrada
  • Obl – El campo es obligatorio
  • Vis – Solo se puede visualizar
  • Supr- El campo no es visible en la pantalla
  • Vis – El campo está resaltado

Configuración de campos para diferentes perfiles CATS 

La configuración de los campos dependerá del perfil de tiempos SAP HCM que se esté seleccionando. Para poder configurar diferentes campos para diferentes perfiles de CATS se debe utilizar el botón: SAP HR: Configurar campos para diferentes perfiles CATS

Al seleccionarlo, todas las configuraciones que se realicen para los campos solo influirán a ese perfil concreto.

En el siguiente artículo que publicaremos esta misma semana, completaremos el tutorial con los pasos necesarios para configurar campos de cliente y grupos de autorización.

SAP HCM – Parametrizar hojas de horario de trabajo (CATS) [3/3]

$
0
0

Continuando con el tutorial que iniciamos hace unos días sobre la creación de hojas horarias (CATS) en SAP, aquí os presentamos la tercera parte que explicará cómo configurar campos de cliente en hojas horarias y como crear y asignar grupos de autorización.

3. Configurar campos de clientes en una hoja horaria 

A parte de los campos estándar que se pueden configurar en cada sección de una hoja de trabajo en SAP HCM, se pueden configurar hasta 10 campos de cliente para rellenar con la información deseada.

Configurar campos de cliente en hojas horarias

La asignación de dichos campos a la hoja horaria se realiza a través de la siguiente ruta en la SPRO:

Componentes multiplicaciones → Hoja de horario de trabajo → Parametrizaciones para superficies de aplicación → Ajustes según las necesidades individuales de cliente → Crear campos clientes → Efectuar asignación de campos

Se accederá a una tabla donde se asigna qué campo adicional se relaciona con el campo de cliente.

Por ejemplo: El campo ZKTEXT se asigna el campo adicional 4. Asignar campo de cliente a hoja horaria CATS

Con lo que si se configura como entrada el campo adicional 4, el empleado podrá introducir datos para ese campo en la hoja horaria.

4. Creación y asignación de grupos de autorización 

Puede que se necesite que para un cierto colectivo de empleados funcione un perfil de CATS concreto. Para ello, se puede crear grupos de autorizaciones que permitan el acceso a ellos.

Para crear un grupo de autorizaciones se accederá a la siguiente ruta:

Componentes multiplicaciones → Hoja de horario de trabajo → Parametrizaciones para superficies de aplicación → Autorizaciones → Crear autorizaciones para perfil de entrada → Crear grupo de autorizaciones perfil

Se accederá a una tabla donde se definen los grupos de autorización a crear:

SAP HR: Crear grupo de autorizaciones para perfil CATS

El siguiente paso una vez creado el grupo de autorizaciones es asignar dicho agrupador al perfil CATS.

Asignar grupo de autorizaciones a perfil CATS

Ese grupo de autorizaciones será configurado en el perfil de acceso del empleado para darle acceso a él.

Reutilización de componentes SAP Web Dynpro ABAP (1/2)

$
0
0

La reutilización de componentes es un aspecto fundamental de la programación, de manera que elementos que creas una vez para una aplicación, puedas volver a usarlos en otra sin tener que reprogramarlos o copiarlos. En el siguiente artículo veremos cómo reutilizar un componente Web Dynpro, ya sea estándar o zeta.

Declarar componentes WD4A a reutilizar

Un componente Web Dynpro encapsula diferentes elementos de manera que puedan ser reutilizados por otros componentes Web Dynpro. Ejemplos de elementos estándar que se suelen reutilizar son: WDR_OVS para ayudas OVS, WDR_MESSAGE_AREA para mostrar mensajes, SALV_WD_TABLE para ALVs, o WDR_SELECT_OPTIONS para definir select options en Web Dynpro.

1. Declarar componente Web Dynpro ABAP a reutilizar

Si un componente (padre) necesita acceder a la funcionalidad de otro componente (hijo) para reutilizarla, el primero tiene que declarar el uso del segundo. Esto se realiza en la pestaña Componentes Usados en las propiedades del componente Web Dynpro tal y como se puede ver en la imagen mostrada al inicio del artículo.

En la segunda columna escribiremos el nombre del componente Web Dynpro a reutilizar en el padre. El nombre introducido en la primera columna será un alias que será usado cuando queramos usar métodos o vistas del hijo.

2. Referenciar componente Web Dynpro en controlador

Una vez declarado el hijo en el componente padre, también habrá que referenciar el componente Web Dynpro ABAP en el controlador donde se quieran usar las funcionalidades del hijo. Para ello, en la pestaña de propiedades del controlador volveremos a referenciar al hijo:

Referenciar componente WD4A a reutilizar en controlador

Por ejemplo si queremos usar un ALV en una vista, haremos esa referencia en su controlador. Si nos fijamos, todos los controladores de un componente tienen referenciado el component controller del propio componente.

Ahora en este controlador, podríamos llamar a métodos de la interfaz del componente Web Dynpro hijo. Para llamar a uno, recomiendo utilizar el wizard de Web Dynpro, que hará las declaraciones e instancias necesarias para que todo funcione correctamente.

Reutilizar métodos de componentes Web Dynpro ABAP mediante wizard

3. Mapear el contexto del componente Web Dynpro a reutilizar

Así mismo, también es posible mapear contexto del componente Web Dynpro hijo para poder usarlo en el padre. Desde la pestaña  Context, al igual que se mapea desde el component controller se puede mapear desde la interfaz del hijo.

Mapear contexto del componente Web Dynpro ABAP hijo

 3. Reutilizar vista de componente Web Dynpro ABAP

La última opción que tenemos es reutilizar una interfaz de vista del componente Web Dynpro ABAP  hijo en el componente padre. Para ello en el controlador de la ventana, debemos embeber la vista del hijo. Como si de una vista normal del controlador se tratase, debemos pulsar la opción embeber vista en la pestaña Window. En la ayuda de búsqueda, además de las vistas propias del componente nos aparecerán las de los componentes Web Dynpro ABAP referenciados. En el ejemplo, la vista ALV:

Reutilizar interfaz vista de componente Web Dynpro ABAP

De esta manera, sabiendo qué métodos o vistas o nodos del hijo necesitamos, podremos reutilizar las funcionalidades de otro componente Web Dynpro ABAP.

 

Web Dynpro: UI Table Cell Variants

$
0
0

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

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

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

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

WebDynpro ABAP: UI Table Cell Variant

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

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

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

WD4A: Binding de la propiedad selectedCellVariant

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

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

WD4A: UI Table Cell Variant de tipo link

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

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

SAP HCM – Parametrización de absentismos y presencias

$
0
0

En este artículo se va a explicar cómo parametrizar absentismos y/o presencias en SAP HCM, mediante la parametrización de los campos en  la tabla T554S.

Imaginemos que queremos crear  una presencia en SAP con descripción “Horas Regulares”:

Para ello se accede a la tabla de detalle de modificación de clases de Absentismo/Presencia mediante la transacción SM30 y se pulsa el botón “Entradas nuevas”. 

La tabla a tratar es la tabla T554S:

Parametrizacion de absentismos/presencias SAP HCM

En esta pantalla se definen los siguientes campos para parametrizar absentismos y presencias en SAP:

  • Agrupador de subdivisión, clase de presencia y descripción.
  • Opciones generales: Se define si es una presencia (P) o absentismo (A) y la clase de enlace temporal para poder provocar colisiones entre absentismos y presencias.
  • Verificación entrada: Definimos como se va a comportar el sistema en caso de querer generar presencia en un día no laborable (W: Mensaje Warning, E: Mensaje Error).
    Aquí también definimos el máximo de días que puede durar esta presencia (en este caso 999).
  • Cómputo y liquidación de contingente: Se define el contingente asociado a esta presencia. En este caso no existe contingente asociado, en caso de existir se indicaría en el campo “reglamento de cómputo”, que definiría como se computa dicho contingente en el infotipo 2005.
  • Control de calendario: Se define la letra del calendario que generaría dicha presencia en caso de generación de calendario para temas de bajas por IT…
  • Evaluación de tiempos: Se indica la clase de tiempos con la que está relacionada para que al lanzar la evaluación de tiempos se generen las clases de tiempos en función de lo definido en la tabla T555Y.

Estos son los campos básicos a parametrizar para definir un absentismo/presencia en el sistema. En futuros artículos se explicará cómo definir un reglamento de cómputo para un contingente de tiempos.

Web Dynpro Abap Layout: Modificaciones dinámicas

$
0
0

Cualquier elemento de la interfaz de usuario de una vista Web Dynpro Abap se puede tanto crear  como modificar mediante código. De esta manera, existe la posibilidad de modificar dinámicamente el layout WD4A de una vista en tiempo de ejecución.

En este artículo vamos a ver algunas técnicas y métodos para hacer este tipo de modificaciones dinámicas en Web Dynpro Abap.

Layout dinámico en WD4A: wddomodifyview

Lo primero y más importante es hablar del método wddomodifyview. El código fuente para todos los cambios dinámicos tiene que ser definido en este método Hook estándar, ya que es el único método que recibe una referencia válida al nodo raíz de la jerarquía de elementos UI.

El método wddomodifyview es llamado justo antes de que el layout sea renderizado, por lo tanto, se ejecutará siempre que se desencadene un evento.

Principios para modificar dinámicamente WD4A UI

Se deben utilizar los siguientes principios a la hora de realizar manipulaciones dinámicas de UI:

  • Sólo se deben realizar manipulaciones de elementos UI cuando no es posible controlar el comportamiento a través de binding con el contexto en tiempo de diseño.
  • La manipulación de elementos UI sólo está permitida en el método wddomodifyview.
  • wddomodifyview tiene un parámetro booleano llamado first_time, que será abap_true la primera vez que se ejecuta, y abap_false en cualquier otro caso.
  • No se debe implementar código que modifica el contexto dentro de wddomodifyview. El contexto debería considerarse como de sólo lectura durante la ejecución de este método.

Modificación del layout WD4A mediante código

El siguiente paso para acceder o crear un elemento UI dinámicamente en WD4A es conseguir una referencia al elemento contenedor.

Este elemento contenedor podría ser RootUIElementContainer, elemento que existe por defecto en todos los controladores de vistas. Para obtener esta referencia, se deben utilizar métodos del parámetro de entrada view. Para acceder a un elemento arbitrario se puede llamar al método get_element(), pasando el ID del elemento como parámetro.

A continuación vemos un ejemplo de cómo coger un elemento UI, en este caso el RootUIElementContainer:

DATA: lr_ui_element   TYPE REF TO if_wd_view_element,
      lr_container TYPE REF TO cl_wd_uielement_container.
  CHECK first_time = abap_true.
 *Se coge la referencia al nodo raíz por ID:
  lr_ui_element = view->get_element( id = 'ROOTUIELEMENTCONTAINER' ).
* Cast necesario 
  lr_container ?= lr_ui_element.

Esta acción se puede realizar con cualquier elemento UI que exista en el layout, pasando su correspondiente ID y creando la referencia a su clase de elemento. Para cada elemento UI existe una clase describiendo el elemento existente. Todas estas clases son subclases de CL_WD_UIELEMENT. Estas clases usan la convención de nombres CL_WD_<tipo de elemento>, por ejemplo CL_WD_LABEL o CL_WD_TABLE.

Ahora vamos a mostrar cómo se añadiría un input_field con su etiqueta al nodo raíz. Primero creamos los elementos:

DATA:   lr_label TYPE REF TO cl_wd_label,
        lr_input TYPE REF TO cl_wd_input_field.
*se crea un inputField relacionado con un atributo del contexto
  lr_input = cl_wd_input_field =>new_input_field(
                  bind_value   = '<node_name>.<atribute_name>'
                  id           = 'INPUT_FIELD_<attribute_name>' ).
*se crea una etiqueta para el inputField
  lr_label = cl_wd_label=>new_label(
                id        = 'LABEL_<attribute_name>' 
                label_for = lr_input->id ).

Una vez creados y antes de añadirlos a un elemento contenedor, se deben ajustar las propiedades del elemento contenedor al que se va a añadir. Esto es especialmente importante en el caso de la propiedad Layout, ya que ésta influencia las propiedades de los elementos hijos.

Para asignar el layout deseado al elemento contenedor, debe ser llamado un método estático de la clase que representa el layout. Todas las clases de layout son sub-clases de CL_WD_LAYOUT. Por lo tanto, en el ejemplo que nos ocupa, en el que queremos añadir un input_field con su etiqueta al nodo raíz haríamos lo siguiente:

*se define el layout data para los elementos creados
  cl_wd_matrix_head_data=>new_matrix_head_data(
      element = lr_label ).
  cl_wd_matrix_data=>new_matrix_data(
      element = lr_input ).

En este ejemplo se utiliza el tipo de layout MatrixLayout. Es importante que el elemento contenedor donde se van a añadir los elementos tenga el mismo tipo indicado.

Modificación dinámica del layout Web Dynpro Abap

Por último, se añaden los elementos creados al contenedor:

  lr_container->add_child( the_child = lr_label ).
  lr_container->add_child( the_child = lr_input ).

Así es como se consigue crear elementos UI por código en Web Dynpro Abap.

Para modificarlos, deberíamos cogerlos de la misma manera que hemos cogido el elemento raíz, y utilizar los diferentes métodos disponibles en las diferentes clases de los elementos.

Por ejemplo, para modificar alguna propiedad, todos tienen un método llamado SET_<nom_propiedad>() por cada propiedad del elemento.

Para más información, se puede acceder a las clases de cada elemento (como hemos comentado CL_WD_<nom_elemento>) o en la ayuda de SAP, donde se encuentran descritos todos los elementos.


Procesamiento de XML en ABAP (1/3)

$
0
0

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

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

1. Objetivo del tratamiento de XML con ABAP

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

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

2. Proceso del tratamiento de XML con ABAP

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

1) Creación de los objetos del Diccionario ABAP

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

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

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

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

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

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

Tratamiento XML con ABAP: Creación de tabla

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

SAP Enterprise Portal: Configurar acceso anónimo

$
0
0

En ocasiones puede ser de utilidad ofrecer a través de nuestro portal de SAP contenido para usuarios no registrados, es decir contenido anónimo. En este artículo vamos a explicar cómo configurar acceso anónimo a SAP Enterprise Portal en cuatro sencillos pasos.

Para ilustrar este proceso vamos a crear una página de portal que contenga un iView para subir documentos a un directorio del KM (Knowledge Management). De todas formas, el proceso es equivalente para cualquier otro tipo de iView.

A continuación se describe uno a uno los pasos para acceder anónimamente a este contenido del portal de SAP.

1. Crear un rol de portal Anónimo

En primer lugar, desde Portal Content Management, crearemos un rol de portal al que asignaremos el contenido que queremos ofrecer a los usuarios que accedan al SAP Enterprise Portal de manera anónima.

SAP Portal: Configurar acceso anónimo

2. Asignar rol de portal al grupo Anonymous

En segundo lugar desde Identity Management, asignamos al grupo Anonymous el rol de portal creado en el paso anterior. De esta manera conseguimos que cuando se acceda al portal de SAP a través de la URL anónima, se visualice el contenido asignado a este rol de portal.

SAP Portal: Configurar acceso anónimo asignando grupo anonymous al nuevo rol

3. Crear el contenido anónimo

Después desde Portal Content Management crearemos el contenido anónimo propiamente dicho. Para el ejemplo que estamos tratando, en primer lugar crearemos un iView de tipo  KM Upload y después una página de portal a la que añadiremos un enlace delta de este iView:

A) iView para acceso anónimo a portal SAP

Siguiendo los pasos habituales para la creación de iViews, creamos un nuevo iView del tipo que corresponda (en este caso, un iView de KM Upload).

Creación de contenido anónimo para el portal de SAP

Lo más importante de este paso es establecer la propiedad Authentication Scheme con el valor anonymous.

Esquema de autenticación anónimo en SAP Enterprise Portal

B) Portal Page para acceso anónimo a portal SAP

De igual manera, creamos en este caso una página de portal con el layout que deseemos. Lo más importante, de nuevo es establecer la propiedad Authentication Scheme con el valor anonymous.

Esquema de autenticación anónimo portal de SAP

4. Asignar contenido anónimo al rol del portal SAP 

Como paso final, añadiremos la página de portal creada en el paso anterior al rol de portal inicialmente creado, marcando las opciones Entry Point y Visible.

Asignar contenido anónimo a rol de portal SAP

De esta manera, si accedemos al SAP Enterprise Portal a través de la URL anónima http://dominiodelportal:puerto/irj/anonymous sin necesidad de login previo visualizaremos el contenido anónimo.

Visualizar contenido anónimo SAP Enterprise Portal

Como se puede ver en esta última imagen el acceso a través de esa URL se hace con el usuario j2ee_gst, que es el usuario anónimo del portal de SAP por defecto.

Por tanto, siguiendo los pasos anteriores y con las variaciones pertinentes en función del tipo de iview que se quiera publicar, tendremos preparado el contenido para cualquier usuario que acceda al portal sin identificarse.

Procesamiento de XML en ABAP (2/3)

$
0
0

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

2. Proceso del tratamiento de XML con ABAP

3) Creación de la Transformación Simple

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

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

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

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

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

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

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

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

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

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

Renombrar nodo ABAP para procesamiento XML

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

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

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

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

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

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

SAP PP – Versiones de fabricación

$
0
0

Una versión de fabricación en planificación de la producción de SAP es una dupla (hoja de ruta – lista de materiales) asociada a un material y un centro. Para poder crear una versión de fabricación en SAP PP deben estar previamente creadas al menos una lista de materiales  y una hoja de ruta  para cada material.

Cuando es posible fabricar un material de distintas formas, es decir, con distintos consumos de materiales, en distintos puestos de trabajo o en diferentes periodos de validez; se crearán en el sistema varias versiones de fabricación para el mismo componente.

La creación de de versiones de fabricación en SAP PP se puede realizar desde dos lugares:

1. Versiones de fabricación desde el maestro de materiales

Para crear una versión de fabricación mediante el maestro de materiales accedemos a la siguiente ruta:

Logística -> Producción -> Datos maestros -> Maestro de materiales ->  Material -> Modificar -> Inmediatamente MM02

Una vez ahí seleccionamos la vista “Planif. de necesidades 4“:

SAP PP: Crear versiones de fabricación desde maestro de materiales

En esta pestaña podremos navegar a las versiones de fabricación pulsando el botón Ver versiones de fabricación SAP PP.

Una vez ahí podremos crear tantas versiones de fabricación como necesitemos.

2. Versiones de fabricación desde el maestro de versiones

En caso de utilizar el maestro de versiones para crear versiones de fabricación habrá que acceder a la siguiente ruta:

Logística -> Producción -> Datos maestros -> Versiones fabricación C223

Los datos que debemos rellenar son:

  • Centro: Centro al que pertenece el material
  • Material: Material cuya versión se quiere crear

SAP PP: Crear versiones de fabricación desde el maestro de versiones

Versiones de fabricación en SAP PP

Una vez estén los datos cargados correctamente (tanto creados desde el registro de material como creados desde la transacción propia C223)  se pulsará el botón sap-pp-verificar-version-de-fabricacion para poder mostrar el detalle de la versión de fabricación creada .

De esta manera validaremos que la alternativa de la lista de materiales y la hoja de ruta seleccionada estén operativas para nuestra versión dec fabricación.

Versión de fabricación válida en SAP PP

Procesamiento de XML en ABAP (3/3)

$
0
0

En este último artículo de la serie sobre procesamiento de ficheros XML vamos a utilizar la Transformación Simple que creamos en el artículo anterior para leer los datos de nuestro fichero XML y guardarlos en SAP.

3. Carga de datos XML en SAP

Antes de empezar con el código del report con el que vamos a realizar la carga de los datos XML en SAP, veamos qué es lo que tenemos que hacer en nuestro programa:

  1. Leer los datos del fichero XML
  2. Convertir esos datos a una tabla interna para poderlos tratar
  3. Grabar esos datos en la base de datos

Para que el código se vea mejor y más claro se ha dividido cada uno de estos pasos en una subrutina, así, veamos lo que contienen los forms LEER_XML, TRANSFORMAR_XML y GUARDAR_DATOS.

Programa principal

En el programa principal crearemos dos variables: cds será la tabla interna en la que guardaremos los datos después de transformarlos y xml_cds será el string donde leeremos el fichero XML.

Una vez creadas las variables llamaremos a las tres rutinas mencionadas anteriormente.


************************************************************************
* DECLARACIONES                                                        *
************************************************************************
DATA: cds	  TYPE zxml_cd_tt,  "Tabla interna
xml_cds TYPE string.	  "String para leer el XML

************************************************************************
* PROGRAMA PRINCIPAL                                                   *
************************************************************************
START-OF-SELECTION.

** Leer los datos
  PERFORM leer_xml CHANGING xml_cds.

** Transformar los datos
  PERFORM transformar_xml USING xml_cds
                          CHANGING cds.

** Guardar los datos
  PERFORM guardar_datos USING cds. 

Leer datos del fichero XML

En esta rutina leeremos los datos del fichero XML mediante el método GUI_UPLOAD de la clase estándar CL_GUI_FRONTEND_SERVICES, que nos guarda en una tabla interna los datos leídos. Y después guardaremos esos datos en la variable creada previamente donde tendremos todo el contenido del XML en texto plano.

*&---------------------------------------------------------------------*
FORM leer_xml  CHANGING xml_cds TYPE string.
*&---------------------------------------------------------------------*
  DATA: tabla_xml TYPE TABLE OF string,
        linea_xml TYPE string.

  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      Filename	= 'C:\cd_catalog.xml'
    CHANGING
      data_tab	= tabla_xml.

  LOOP AT tabla_xml INTO linea_xml.
    CONCATENATE xml_cds linea_xml INTO xml_cds.
  ENDLOOP.

ENDFORM.

Transformar datos del XML a SAP

En esta rutina nos valdremos de la Transformación Simple que hemos creado para, a partir del contenido del XML, informar nuestra tabla interna con el catálogo de CDs.

*&---------------------------------------------------------------------*
FORM transformar_xml  USING    xml_cds  TYPE string
                CHANGING cds      TYPE zxml_cd_tt.
*&---------------------------------------------------------------------*

  CALL TRANSFORMATION zxml_cd_ts
    SOURCE XML xml_cds
    RESULT catalog = cds.

ENDFORM. 

Guardar los datos en la base de datos

Como último paso guardaremos los datos temporales en la tabla de base de datos.

*&---------------------------------------------------------------------*
FORM guardar_datos  USING cds TYPE zxml_cd_tt.
*&---------------------------------------------------------------------*

  INSERT zxml_cd FROM TABLE cds.

ENDFORM.

Resultado

Después de ejecutar el programa veremos como ya tenemos todos los registros del XML guardados en la base de datos.

Guardar datos XML en base de datos ABAP

Y eso es todo, hemos visto una manera sencilla de tratar ficheros XML mediante ABAP utilizando una Transformación Simple.

Viewing all 63 articles
Browse latest View live