+ All Categories
Home > Documents > Implementar Business Transaction Events

Implementar Business Transaction Events

Date post: 02-Jul-2015
Category:
Upload: carlos-gutierrez
View: 449 times
Download: 0 times
Share this document with a friend
Popular Tags:
35
Implementar Business Transaction Events ( BTE's ) - SAP En esta oportunidad hablaremos de como podemos implementar un Business Transaction Events (BTE) en SAP. Los BTE's son un tipo especial de extensión para el modulo de FI; al igual que los enhancement, user exit, BADI's, etc... nos permite adaptar el sistema a las necesidades del cliente. También el BTE es un functionmodule (ejecutado por el cliente) que tiene una interfaz estándar definida por SAP, y este es llamado por el programa estándar de SAP por una llamada a la función OPEN_FI_PERFORM_(BTE-number) o por OUTBOUND_CALL_(BTE-number). Existen 2 Tipos de Interfases: Publish and Subscribe (Modulos P/S) .- No es posible actualizar los Datos o devolver al estandar de SAP. Process interfaces (Modulos de proceso) .- Puede Devolver o entregar Datos a la aplicacion SAP.
Transcript
Page 1: Implementar Business Transaction Events

Implementar Business Transaction Events ( BTE's ) - SAP

En esta oportunidad hablaremos de como podemos implementar un

Business Transaction Events (BTE) en SAP.

Los BTE's son un tipo especial de extensión para el modulo de FI; al

igual que los enhancement, user exit, BADI's, etc... nos permite adaptar

el sistema a las necesidades del cliente. También el BTE es un

functionmodule (ejecutado por el cliente) que tiene una interfaz

estándar definida por SAP, y este es llamado por el programa estándar

de SAP por una llamada a la función OPEN_FI_PERFORM_(BTE-

number) o por OUTBOUND_CALL_(BTE-number).

Existen 2 Tipos de Interfases:

Publish and Subscribe (Modulos P/S) .- No es posible actualizar

los Datos o devolver al estandar de SAP.

Process interfaces (Modulos de proceso) .- Puede Devolver o

entregar Datos a la aplicacion SAP.

Funcionamiento de un BTE:

Page 2: Implementar Business Transaction Events

Pregunta:

¿Como saber si existe un BTE en la Trx de SAP o programa?

Para esto particularmente utilizo un programa Z que me identifica si

existen User Exit,BADI,... y también BTE. (descargar programa z)

Ejemplo: Utilizando el programa Z para identificar un BTE podemos

apreciar:

Ingresamos el nombre del Programa o la Transacción:

Page 3: Implementar Business Transaction Events

Resultado de la búsqueda:

Tomaremos como ejemplo el BTE: OPEN_FI_PERFORM_00001420_P,

cabe aclarar que esta función en algún momento es invocado desde la

Tx.

Podemos comprobar el BTE ingresando a la Tx FIBF, y cuando

entramos en la tx en la parte del menu ingresamos a: Entorno->Sistema

Info (procesos), seguido ejecutamos la interfaz y nos muestra una lista

de BTE's y en esta lista encontramos el BTE que estamos utilizando

Page 5: Implementar Business Transaction Events

Despues de haber realizado la copia de la funcion, volvemos a la Tx

FIBF ir al menu: Opciones->Productos->...de un cliente.

En esta seccion registramos un nombre de producto a utilizar en los

BTE (como si fuera un nombre de proyecto):

Despues de haber creado el producto, volvemos al menu principal de la

Tx FIBF e ingresamos al menu: Opciones->Modulo de Proceso->... de

un cliente

En esta seccion, seleccionamos nuestro numero de BTE (00001420) e

ingresmos nuestra funcion Z (la que hicimos una copia) y seleccionamos

el nombre del producto creado anteriormente.

De esta forma nuestro BTE ya se encuentra listo para usarlo y escribir

nuestro codigo (ampliar el estandar):

Page 6: Implementar Business Transaction Events

Espero que les sea util, Saludos ....

PUBLICADO POR CARLOS E. FLORES JOSEPH EN 15:47 0 COMENTARIOS

ENVIAR POR CORREO ELECTRÓNICO ESCRIBE UN BLOG COMPARTIR CON

TWITTER COMPARTIR CON FACEBOOK COMPARTIR CON GOOGLE BUZZ

Reaccion

es:

M I É R C O L E S 1 9 D E A G O S T O D E 2 0 0 9

ALV Object Model (cl_salv_table)

En esta oportunidad vamos a ver como hacer nuestro ALV con el nuevo

modelo que nos proporciona SAP para hacerlo mas rápido y sencillo

utilizando clases estandar.

ALV Object Model:

Page 7: Implementar Business Transaction Events

El nuevo Modelo de Objetos de Lista (SAP List Viewer) es un objeto

orientado a la encapsulación de la herramienta ALV que ya existe:

ALV Simple, 2 Dimensiones

ALV Jerarquico

ALV Tree.

Para cada tipo de ALV se trabaja con una clase diferente:

CL_SALV_TABLE, CL_SALV_HIERSEQ_TABLE, CL_SALV_TREE. mas

detalles

En el ejemplo utilizaremos la tabla SPFLI (Itinerarios de vuelos) para

luego mostrarlo en un ALV GRID utilizando la clase CL_SALV_TABLE.

Creamos una estructura ZES_SPFLI:

El codigo del programa queda de la siguiente manera:

REPORT zalv_om01.

Page 8: Implementar Business Transaction Events

DATA: t_spfli TYPE TABLE OF zes_spfli,

t_table TYPE REF TO cl_salv_table,

g_sort TYPE REF TO cl_salv_sorts,

g_functions TYPE REF TO cl_salv_functions,

g_dsp TYPE REF TO cl_salv_display_settings,

g_columns TYPE REF TO cl_salv_columns_table,

g_column TYPE REF TO cl_salv_column_table,

g_color TYPE lvc_s_colo,

g_agg TYPE REF TO cl_salv_aggregations.

START-OF-SELECTION.

PERFORM cargar_data.

PERFORM llamar_alv.

*&---------------------------------------*

*& Form cargar_data

*&---------------------------------------*

* text

*----------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------*

FORM cargar_data .

SELECT

carrid

connid

countryfr

cityfrom

airpfrom

countryto

cityto

airpto

Page 9: Implementar Business Transaction Events

distance

INTO TABLE t_spfli

FROM spfli.

ENDFORM. " cargar_data

*&---------------------------------------*

*& Form llamar_alv

*&---------------------------------------*

* text

*----------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------*

FORM llamar_alv .

cl_salv_table=>factory(

IMPORTING

r_salv_table = t_table

CHANGING

t_table = t_spfli

).

"Para los botones en el status

g_functions = t_table->get_functions( ).

g_functions->set_all( abap_true ).

"Para mostar el titulo del alv

g_dsp = t_table->get_display_settings( ).

g_dsp->set_list_header( 'ALV OBJECT MODEL' ).

"Para poner color a una columna

g_columns = t_table->get_columns( ).

Page 10: Implementar Business Transaction Events

g_column ?= g_columns->get_column( 'CONNID' ).

g_color-col = '6'.

g_color-int = '1'.

g_color-inv = '0'.

g_column->set_color( g_color ).

"Para ordernar por el campo CARRID y indicar un subtotal

g_sort = t_table->get_sorts( ).

g_sort->add_sort( columnname = 'CARRID' subtotal = abap_true ).

"Para que funcione el subtotal y las sumatorias

g_agg = t_table->get_aggregations( ).

g_agg->add_aggregation( 'DISTANCE' ).

"Para mostrar el alv

t_table->display( ).

ENDFORM. " llamar_alv

Ejecutamos...

Page 11: Implementar Business Transaction Events

Esta nueva forma de hacer nuestros ALVs nos ayuda en reducir el

código de nuestro programa, minimizar el tiempo de estar escribiendo

nuestros layout, fliedcat, etc.....

PUBLICADO POR CARLOS E. FLORES JOSEPH EN 12:26 5 COMENTARIOS

ENVIAR POR CORREO ELECTRÓNICO ESCRIBE UN BLOG COMPARTIR CON

TWITTER COMPARTIR CON FACEBOOK COMPARTIR CON GOOGLE BUZZ

Reaccion

es:

M A R T E S 1 4 D E J U L I O D E 2 0 0 9

Ejemplo Aplicacion Web con BSP en SAP

En esta oportunidad vamos a crear nuestra primera Aplicacion Web

utiliando BSP en SAP.

BSP significa Bussines Server Pages, al igual que otras tecnologias

Page 12: Implementar Business Transaction Events

como Java Server Pages o los Active Server Pages, etc... para desarrollo

de aplicaciones web, esta es la tecnología que nos provee SAP para la

programación basadas en páginas con scripting del lado del servidor.

La ventaja que tiene el scripting del lado del servidor, es que nos

permite el acceso directo a todos los elementos del servidor de

aplicaciones (tales como modulos de funcion, tablas, abap object, etc).

Para mas informacion.. clic aqui

Antes de empezar a crear nuestra aplicaciones bsp, 1ero crearemos una

tabla Z que utilizaremos en el ejemplo.

Estructura de la Tabla: ZZWST_USUARIO

Despues de haber creado nuestra tabla de usuarios, ingresamos a la

transaccion SE80, para crear la aplicacion bsp, seleccionamos "BSP

Application" e ingresamos un nombre y le damos crear (nos pedira

algunas datos comunes: nombre corto, ot, paquete).

Page 14: Implementar Business Transaction Events

En la pestaña "Layout" diseñamos nuestro formulario, para eso

podemos utilizar cualquier editor de html.

Codigo HTML - Layout.

<%@page language="abap"%>

<%@extension name="htmlb" prefix="htmlb"%>

<html>

<head>

<title>REGISTRO DE USUARIO</title>

</head>

<body>

<form id="form1" name="form1" method="post" action="">

<table width="360" border="0" align="center" cellpadding="0"

cellspacing="0">

<tr>

<td colspan="2">REGISTRO DE USUARIO </td>

</tr>

<tr>

<td width="105">Codigo</td>

<td width="255"><input name="TXTCODIGO" type="text" VALUE="" /></td>

</tr>

<tr>

<td>Nombre</td>

<td><input name="TXTNOMBRE" type="text" VALUE="" /></td>

</tr>

<tr>

<td>User Name </td>

<td><input name="TXTUSERNAME" type="text" VALUE="" /></td>

</tr>

<tr>

<td>User Password </td>

<td><input name="TXTUSERPASSWORD" type="text" VALUE="" /></td>

Page 15: Implementar Business Transaction Events

</tr>

<tr>

<td>Tipo Usuario </td>

<td><select name="CBTIPO">

<option value="A">Administrador</option>

<option value="U">Usuario</option>

</select> </td>

</tr>

<tr>

<td>&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<td>&nbsp;</td>

<td><input type="submit" name="oninputprocessing(btnGrabar)"

value="Enviar" />

<input type="reset" name="Submit2" value="Limpiar" /></td>

</tr>

<tr>

<td>&nbsp;</td>

<td><a href="lista_usuario.htm">Ver Lista</a> </td>

</tr>

</table>

</form>

</body>

</html>

Ya teniendo nuestra interfaz para registrar usuario, pasaremos a

realizar el evento Grabar. Para eso fijemonos en esta parte del Código

del Layout : name="oninputprocessing(btnGrabar)"

Page 16: Implementar Business Transaction Events

En esta petaña ponemos todas las variables globales de la página.

Declaracion de los tipos de datos.

Luego ejecutamos nuestra página, y podemos realizar la grabacion.

Pero como lo visualizamos, para esto crearemos otra pagina con logica

de proceso para visualizar y poder eliminar los registros.

Page 17: Implementar Business Transaction Events

Creamos la nueva pagina con logica de proceso de nombre

"lista_usuario".

El codigo en la pestaña del Layout.

<%@page language="abap" %>

<html>

<head>

<title>Listar Usuarios</title>

<style>

body{

font-family:sans-serif;font-size:11px;

}

.CABECERA_TABLA{

color: #003366;font-weight:bold; text-align:center;

font-family:"Trebuchet MS";font-size:12px;

Page 18: Implementar Business Transaction Events

}

</style>

</head>

<body>

<table width="635" border="0" align="center" >

<tr>

<td class="CABECERA_TABLA">LISTA USUARIOS</td>

</tr>

</table>

<BR />

<table width="635" height="25" border="1" cellpadding="2" cellspacing="0"

bordercolor="#CCCCCC" align="center" style="font-family:Verdana, Arial,

Helvetica, sans-serif;font-size:11px">

<tr style="background-color:#A9CEED;">

<td width="100">Codigo</td>

<td width="400">Apellidos y Nombres </td>

<td width="100">Usuario</td>

<td width="100">Eliminar</td>

</tr>

<%

field-symbols: <fs_usuario> like LINE OF ti_usuario.

loop at ti_usuario ASSIGNING <fs_usuario>.

%>

<tr>

<td><%= <fs_usuario>-codus%></td>

<td><%= <fs_usuario>-nomus%></td>

<td><%= <fs_usuario>-usern%></td>

<td><a href="lista_usuario.htm?accion=E&codusu=<%=<fs_usuario>-codus

%>">Eliminar</a></td>

</tr>

<%

endloop.

%>

Page 19: Implementar Business Transaction Events

</table>

<center><a href="registro_usuario.htm">Formulario</a></center>

<input name="ACCION" type="hidden" />

<input name="CODUSU" type="hidden" />

</body>

</html>

Con la variable "accion" indicamos si estamos eliminando el registro.

Atributos de la Pagina

Declaracion de tipos globales

Ejecutamos la pagina y podemos ver la lista de registros y ademas de

Page 20: Implementar Business Transaction Events

poder eliminar.

PUBLICADO POR CARLOS E. FLORES JOSEPH EN 07:58 2 COMENTARIOS

ENVIAR POR CORREO ELECTRÓNICO ESCRIBE UN BLOG COMPARTIR CON

TWITTER COMPARTIR CON FACEBOOK COMPARTIR CON GOOGLE BUZZ

Reaccion

es:

V I E R N E S 2 6 D E J U N I O D E 2 0 0 9

Conectar Java con SAP JCO Connector

En este ejemplo veremos como conectarnos a SAP desde Java y

consultar los datos de una tabla de SAP, para lograr esto utilizaremos el

driver JCO Connector, que tambien se podría usar WebService para la

coneccíon pero esto sera otro tema.

Ahora debemos bajarnos el Conector del siguiente link SAP

Marketplace nos pedirá un usuario y contraseña este usuario lo tienen

las empresas, partners, y otros que tienen alguna relación con SAP,

pero si no tenemos el usuario para poder acceder a la página los

bajamos de este link click aqui

Ingresamos a SAP y creamos una función RFC que no hará mas que

traernos una lista de registros de una tabla de SAP para luego

procesarlo en nuestra aplicación en java.

Entramos a la transacción SE37 para crear nuestra función:

ZRCF_SPFLI_LIST

Page 21: Implementar Business Transaction Events

Seleccionamos la pestaña "Import"...

El parámetro "CARRID" será opcional, luego en la pestaña "Tables":

El parámetro "FLIGHT_LIST" nos devolverá los valores que

recogeremos en nuestra aplicación en java.

En la pestaña "Source code" escribiremos el código que obtendrá los

datos de la tabla de SAP.

Page 22: Implementar Business Transaction Events

Para terminar con nuestra función tenemos que indicarle que será un

RFC (Remote Function Call) para poder acceder a el desde la

aplicación.

Grabamos y Activamos la función, y ya se encuentra listo para usarlo.

Antes de pasar a crear nuestra aplicacion, debemos colocar las librerias

Page 23: Implementar Business Transaction Events

del jco connector en la carpeta de windows, cuando descargamos el

conector nos adjunta una dll:

librfc32.dll : colocar en la carpeta "C:\WINDOWS\system32\"

Ahora pasaremos a crear la aplicación en java que accederá a la función

rfc, para esto creamos un nuevo proyecto "Java Application" e

ingresamos el nombre del proyecto, seguidamente agregamos la

librería al proyecto "sapjco":

Escribiendo en nuestra clase:

Importamos la librería:

Page 25: Implementar Business Transaction Events

Ejecutamos y el resultado es...

Código Completo:

package test_sap_jco;

import com.sap.mw.jco.*;

/**

*

* @author carlos

*/

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

JCO.Client client = null;

JCO.Function funcion = null;

JCO.Table t_spfli = null;

IRepository repositorio = null;

IFunctionTemplate ftemplate = null;

try {

client = JCO.createClient("000",

"bcuser",

"minisap",

"EN",

"localhost",

"00");

Page 26: Implementar Business Transaction Events

//Creando el repositorio para las funciones

repositorio = JCO.createRepository("MiRepositorio", client);

//Indicamos que funciones queremos utilizar

ftemplate =

repositorio.getFunctionTemplate("ZRCF_SPFLI_LIST".toUpperCase());

//Obtenemos la funcion del SAP

funcion = ftemplate.getFunction();

//Pasamos parametros a la funcion

funcion.getImportParameterList().setValue("AA", "CARRID");

//Ejecutamos la funcion

client.execute(funcion);

//Capturamos el parametro de Salida

t_spfli =

funcion.getTableParameterList().getTable("FLIGHT_LIST");

System.out.println("Nro de Filas:" +t_spfli.getNumRows());

for (int i= 0;i<t_spfli.getNumRows();i++){

t_spfli.setRow(i);

System.out.println(t_spfli.getString("CARRID") + " "

+

t_spfli.getString("CONNID") + " "

+

t_spfli.getString("COUNTRYFR") + " "

+

t_spfli.getString("CITYFROM") + " "

+

t_spfli.getString("AIRPFROM") + " "

+

t_spfli.getString("COUNTRYTO") + " "

+

t_spfli.getString("CITYTO"));

}

Page 27: Implementar Business Transaction Events

} catch (Exception e) {

System.out.println("Error:" +e.getMessage());

}

}

}

PUBLICADO POR CARLOS E. FLORES JOSEPH EN 09:52 12 COMENTARIOS

ENVIAR POR CORREO ELECTRÓNICO ESCRIBE UN BLOG COMPARTIR CON

TWITTER COMPARTIR CON FACEBOOK COMPARTIR CON GOOGLE BUZZ

Reaccion

es:

M I É R C O L E S 2 4 D E J U N I O D E 2 0 0 9

Generando Clases en C# .Net con base de datos

Alguna vez nos a tocado crear las clases de las modelo de base de

datos, y nos encontramos con una gran cantidad de tablas y realizar

una por una estas clases nos demandaría mucho tiempo además que se

vuelve algo mecánico, y lo que buscamos es minimizar tiempo en el

desarrollo. En uno de los proyecto que estuve tenía que crear las clases

para cada tabla donde debían contener los gets sets y los métodos de

"crear", "modificar", "eliminar", "buscar por Id" (más conocido como

CRUD), es entonces que decidí realizar un programa que me genere

automáticamente estas clases con sus respectivos métodos, basados en

una arquitectura de desarrollo de la empresa...

El programa está desarrollado en C# y traer los datos de SQL Server

2005, la lógica consiste en:

Primero traerse todas las tablas que contiene nuestra base de datos,

Page 28: Implementar Business Transaction Events

para esto realizamos la siguiente consulta sql:

Una vez que se tiene la lista de las tablas debemos saber cuáles son sus

campos y qué tipo de datos tienen: para eso debemos hacer la siguiente

consulta:

Ahora debemos saber cuál de estos campos es PK, realizamos la

siguiente consulta:

Con esto ya tenemos todos los datos para poder generar nuestras clases

automáticamente, el siguiente paso es crear nuestras plantillas o la

arquitectura que tendrán nuestras clases, por ejemplo mi clase

conexion como se genera en el programa:

Indicamos la ruta donde se generan los archivos, e utilizamos

StreamWriterpara crear y escribir nuestro archivo:

Page 31: Implementar Business Transaction Events

Conclusiones: El objetivos de esto es generar nuestra herramienta que

nos faciliten y minimicen tiempo a la hora de desarrollar nuestros

programas, ver cual de los procesos es una rutina constante (en este

caso crear las clases en basándose en el modelo que se tiene en la base

de datos), no importa el lenguaje que se utilice ni el motor de base de

datos que se trabaje, se puede crear un programa siguiendo la misma

lógica por ejemplo que genere en código en vb.net, java, abap, etc... y la

arquitectura del sistema crearlo de acuerdo a la empresa o la forma

que trabajamos (crear plantillas para generar los archivos)

Acá les dejo el link de descarga del programa Generador de Clases en

C#..

PUBLICADO POR CARLOS E. FLORES JOSEPH EN 17:17 0 COMENTARIOS

ENVIAR POR CORREO ELECTRÓNICO ESCRIBE UN BLOG COMPARTIR CON

TWITTER COMPARTIR CON FACEBOOK COMPARTIR CON GOOGLE BUZZ

Reaccion

es:

Page 32: Implementar Business Transaction Events

Conectar Java con SQL Server 2005 Netbeans

Al igual que el post de Conectar java con mysql realizaremos algo

parecido pero ahora utilizando SQL Server 2005.

Para realizar este ejemplo primero tenemos que realizar unas

configuraciones al SQL Server 2005 Express, aca les dejo un muy buen

post que nos enseña como realizar una configuración correcta click

aqui ... aproposito el blog es de mi Hermano Hugo :) un saludo a la

distancia...

Una vez realizado la configuracion correspondiente nos descargamos el

conector de SQL Server para Java, luego pasamos a crear nuestro

proyecto para realizar las pruebas de conexion.

Abrimos el Netbeans click en Nuevo Proyecto - > java -> Java

Application, ingresamos el nombre de nuestro proyecto, luego en

nuestro proyecto agregamos la librería del SQL Server 2005:

Page 33: Implementar Business Transaction Events

Seleccionamos la librería:

Creamos la clase clsConexion que tendrá los métodos getConexion() y

Listar(), importando las librerías: import java.sql.*;

Método getConexion que tiene los parámetros para la conexion a la

base de datos:

Como se darán cuenta la cadena "connectionUrl" estamos poniendo

como parámetros el usuario y la clave que accederá al motor de bd,

esto se vio en la parte de conflagración del SQL Server.

Luego creamos el método Listar que nos realizar un query a la base de


Recommended