Se ha producido un error en este gadget.

miércoles, 29 de septiembre de 2010

Interfaz Asincrona

SAP XI/PI

Que es SAP XI/PI?

Bueno...a estas alturas del partido hay mucha informacion sobre los que es XI/PI por lo que tampoco es mi intencion detenerme mucho en esto...lo que si es intentar poner lo mas sobresaliente sobre la construccion de interfaces en XI....


SAP XI/PI es un ambiente de integracion de sistema por lo que nos sirve para conectar sistemas en alguna de estas categorias:

-Sistemas SAP con SAP
-Sistemas no SAP con SAP
-Sistemas no SAP con no SAP

En este punto deberia de explicar la arquitectura y demas cositas pero pasare de alto este punto y dare por hecho que conoces algo ( busca en internet el TBIT40) de esto por lo que solo desarrollare algunos puntos.

Componentes:
System Landscape Directory (SLD): Es el repositorio central donde tendremos toda la información referente a software y sistemas data center.
Integration Builder: Una extrúctura cliente-servidor para acceder y editar en sus dos pilas de Shared Collaboration Knowledge.
Integration Repositori (IR): Lo utilizamos para el diseño y desarrollo de interface, procesos, y mapeo de objetos que seran empleados en la implementación de los escenarios.
Integration Directori (ID): Lo utilizamos para la configuración de escenarios, utilizando las interafaces, procesos y mapeos definidos en nuestro Integration Repositori (IR).
Integration Server (IS): Es el motor central de procesamiento de SAP XI/PI. Todos los mensajes, SAP o no-SAP, A2A o B2B, independientemente de la tecnología o el proveedor backend, son procesados de una forma consistente y coherente.
Central Monitoring: Podemos monitorizar todos los componentes y procesos en tiempo de ejecución.
Adapter Engine: Es un conector Java denominado Java Conector Architecture (JCA), necesario para conectar los sistemas backend con SAP XI/PI



Construccion.

¿Que necesito saber para empezar?
Lo mas imporante al construir una interfaz es identificar los siguientes puntos:
1.- Reconocer si es una interfaz sincrona o una interfaz asincrona.
Este punto es crucial. Las interfaces sincronas son aquellas que requieren una respuesta del sistema destino para terminar su ejecucion mientras que las interfaces asincronas solo envian informacion al sistema destino sin requerir una respuesta para terminar su ejecucion.
2.- Reconocer que es lo que vas a enviar al sistema destino.
Me refiero al hecho de saber exactamente que datos quieres enviar al sistema destino.
3.. Reconocer como enviaremos la informacion al sistema destino.
Esto implica conocer que tipo de adaptador usaremos...y aqui te preguntaras que es un adaptador? Bueno, de manera burda, una adapatador es la "forma" en que XI escribira o leera los datos de los sistemas.


¿Como voy a empezar?
Cuando queremos construir una interfaz debemos de seguir esta serie de pasos:
Integration Repository
1. Importar el Software Component Version en el Integration Reposity (IR)
2. Crear los Namespaces
3. Crear los Data Types de las estructuras de Origen y de Destino
4. Crear los Message Types
5. Crear los Message Interfaces
6. Crear el Message Mapping
7. Crear la Interface Mapping
Integration Directory
8. Crear Scenario
10. Crear el Service de Origen y El Service de destino
11. Crear el Communication Channel de origen y el Communication Channel de destino
12. Crear el Sender Agreement y Receiver Agreement
13. Crear el Receiver Determination y Interface Determination

En otras entradas del blog veras un escenario basico asincrono y un escenario básico sincrono...

Al ser un tema mas complicado ire poniendo la configuracion por adapatadr para hacer mas util la informacion...

lunes, 15 de febrero de 2010

Funciones FIPI

Las funciones FIPI sirven para generar un batch pero utilizando un grupo de funciones que generara automaticamente el batch indicandole los campos que se quieren cargar.

La funcion que contabiliza es esta:
POSTING_INTERFACE_DOCUMENT
Si todo va bien generara un documento financiero. Si no generara un BATCH en la sm35 para poder visualizar el error.

Primero se debe de abrir el juego de datos con esta funcion:
CALL FUNCTION 'POSTING_INTERFACE_START'
EXPORTING
i_client = sy-mandt
i_function = 'C'
i_group = 'DES847'
* I_HOLDDATE = ' '
* I_KEEP = ' '
i_mode = ld_mode
i_update = 'S'
i_user = sy-uname
i_xbdcc = 'X'
EXCEPTIONS
client_incorrect = 1
function_invalid = 2
group_name_missing = 3
mode_invalid = 4
update_invalid = 5
OTHERS = 6.



Ahora tendremos que cargar los datos al juego de datos y es aqui lo interesante ya que en los programas para batch teniamos que cargar el tipico SCREEN y CAMPO en las funciones FIPI bastara con indicar la esctructura a la cual le queremos pasar datos:


PERFORM informar_ftpost TABLES p_it_ftpost
USING c_k l_cont 'BKPF-BUKRS' g_bukrs.

* Clase de documento
PERFORM informar_ftpost TABLES p_it_ftpost
USING c_k l_cont 'BKPF-BLART' g_blart. "T1

Aqui le estamos pasando sociedad y clase de documento, este es el detalle del form:

FORM informar_ftpost TABLES p_it_ftpost STRUCTURE ftpost
USING p_tipo TYPE c
p_contador
p_campo
p_valor.

DATA: lw_ftpost TYPE ftpost.
CLEAR lw_ftpost.

*TIPO DE CAMPOS K = CABECERA P = POSICION
lw_ftpost-stype = p_tipo.
*CONTADOR DE LINEAS
lw_ftpost-count = p_contador.
*CAMPO
lw_ftpost-fnam = p_campo.
*VALOR DEL CAMPO INDICADO
lw_ftpost-fval = p_valor.
CONDENSE lw_ftpost-fval.

APPEND lw_ftpost TO p_it_ftpost.
CLEAR lw_ftpost.

ENDFORM. " INFORMAR_FTPOST


Lo mismo para las posiciones:

PERFORM informar_ftpost
TABLES p_it_ftpost
USING c_p
l_cont
'BSEG-BSCHL'
lw_estructura-clavecontdebe.


Y viene la pregunta, como sabemos en que momento estamos hablando de la cabecer o de un debe o de un haber?


Esto vendra regido por una variable que en el form es l_cont que indica la posicion a donde queremos cargar. Para la creacion de una factura tendriamos:
l_cont = 1 Para la cabecera
l_cont = 2 Para el Debe
l_cont = 3 para le Haber



Cuando ya tengamos todos los campos listos contabilizaremos con esta funcion:

CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT'
EXPORTING
i_tcode = g_transaccion
* I_SGFUNCT = ' '
* I_NO_AUTH = ' '
IMPORTING
e_msgid = p_retorno-id
e_msgno = p_retorno-number
e_msgty = p_retorno-type
e_msgv1 = p_retorno-message_v1
e_msgv2 = p_retorno-message_v2
e_msgv3 = p_retorno-message_v3
e_msgv4 = p_retorno-message_v4
* E_SUBRC =
TABLES
t_blntab = p_blntab
t_ftpost = p_ftpost
t_fttax = p_fttax
EXCEPTIONS
account_missing = 1
company_code_missing = 2
posting_key_invalid = 3
posting_key_missing = 4
record_type_invalid = 5
transaction_code_invalid = 6
amount_format_error = 7
too_many_line_items = 8
company_code_invalid = 9
screen_not_found = 10
no_authorization = 11
OTHERS = 12.

De ser todo correcto p_retorno traera el numero de documento generado.
s

Para cerrar el juego de datos no olvidemos :
CALL FUNCTION 'POSTING_INTERFACE_END'.


Para tener un ejemplo completo revisa este link

http://www.sapnet.ru/viewtopic.php?t=2350

martes, 1 de diciembre de 2009

¿Cuándo debo de usar una rutina de conversión y como se cual usar?

¿Cuándo debo de usar una rutina de conversión y como se cual usar?
Retomando el ejemplo de la cuenta tenemos que ir al dominio de datos de esta y en la pestaña de definición veremos esto:


En el campo rutina conv
Veremos la rutina a utilizar, si viene el campo vacio no se requiere rutina de conversión
Para saber que función es, damos doble click sobre ALPHA


Buscando datos maestros...

¿Cómo obtengo los datos maestros?
Para buscar el maestro de cuentas de mayor nos podemos apoyar en el campo del concepto que queremos buscar, ejemplo:
Entro por la SE11 a la bseg

Entro al dominio de datos

Doy doble click sobre el dominio
Entro a ámbito de valores

En tabla de valores esta la tabla de datos maestros

viernes, 22 de mayo de 2009

How to convert time to text ...

Tratando de cargar un fichero de excel a SAP en donde una de las columnas correspondia a datos en formato hora detectamos que la hora se pasaba a la tabla interna como un numero, este numero nos daba un problemon por que no teniamos manera de saber a que hora correspondia, navegando encontramos este codigo:

REPORT ZTEST_VDLL_2.
*eg: 17:39:53
*the excel convert each in days and add up i.e
**17*/24 = 0.708333333
**39*/60/24 = 0.027083333
**53*/60/60/24 = 0.000613426
*Total coming as 0.736030093
*
*so we can do in reverse way as
data: aux2 type f.
data: aux(12) type p decimals 10.
data: v1(12) type p decimals 10.
data: v2(12) type p decimals 10.
data: v3(12) type p decimals 10.
data: hr(2) type n.
data: min(2) type n.
data: sec(2) type n.

aux2 = '0.000127314814814815'.
aux = aux2.
*aux = '0.736030093'.
v1 = aux * 24.
v2 = v1 MOD 1.
v2 = v2 * 60.
v3 = V2 MOD 1.
v3 = v3 * 60.
hr = trunc( v1 ).
min = trunc( v2 ).
sec = trunc( v3 ).

break-point.

martes, 3 de marzo de 2009

Inspector de codigo ABAP

Alguna vez te has preguntado como saber si has programado bien? Pues SAP te da una herramienta que te puede ayudar saberlo, la herramienta es la transaccion SCI que basicamente hace un analisis de tu codigo fuente he aqui un manual de como usarlo:

https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/5037