miércoles, 20 de enero de 2010

Conectar SAP con DB SQL e insertar registros en el SQL directamente

En ABAP podemos grabar directamente en una DB externa a pedido de algún cliente, en este caso había que conectarse con una DB SQL Server, esto se realiza manteniendo una conexión con la DB y desde abap usando SQL NATIVO.

Pasos a seguir.
1- Establecer la conexión via tx DBCO


Enlace DB: es el nombre que nosotros queramos es el nombre con el cual dsp en el Código usaremos.
SGBD: Es el tipo de Server MSS (SQL Server)
Usuario y Password para acceder a la DB
Info Con.: El string de conexión con la DB.

2- Código Fuente
El SQL Nativo debemos ejecutarlo dentro de sentencias.
EXEC SQL
...
ENDEXEC.

"Primero nos conectamos
EXEC SQL.
CONNECT TO 'MULTINT3R' AS 'R'
ENDEXEC.

EXEC SQL.
SET CONNECTION 'R'
ENDEXEC.

"Loopeamos la tabla interna que deseamos grabar e insertamos los valores
LOOP AT IT_SQL.
EXEC SQL.
INSERT INTO ZRemito
(Remito, RemitoInterno, OT, Modelo, IMEI, ModReemp, IMEIReemp, Garantia, Precio, Moneda, NroFormularioSIC,Operador, TipoReg, codFallaAccionParte, FallaAccionParte, TextoFallaAccionParte, Cantidad, FechaHora,Usuario)
VALUES (:IT_SQL-REMITO, :IT_SQL-remito_sap, :IT_SQL-aufnr,:IT_SQL-Modelo, :IT_SQL-imei, :IT_SQL-modreemp,:IT_SQL-IMEIReemp, :IT_SQL-Garantia, :IT_SQL-Precio, :IT_SQL-Moneda, :IT_SQL-FSIC, :IT_SQL-Operador,:IT_SQL-LETRA, :IT_SQL-COD, :IT_SQL-Falla, :IT_SQL-Falla_t, :IT_SQL-Cantidad, :IT_SQL-Fecha, :IT_SQL-Usuario)
ENDEXEC.
ENDLOOP.

EXEC SQL.
SET CONNECTION DEFAULT
ENDEXEC.

Como buscar BADIs

Para buscar las badis que pasan en algún momento dado. Debemos poner un break point en la Clase. SE24 -> CL_EXITHANDLER
Doble click en el método GET_INSTANCE.

Poner un break en la llamada del metodo get_class_name_by_interface.

METHOD get_instance.

CLASS cl_badi_flt_data_trans_and_db DEFINITION LOAD.

DATA: exit TYPE REF TO object,
type_ref TYPE REF TO cl_abap_typedescr,
class_name TYPE seoclsname,
abs_type_classname TYPE string,
def_impl TYPE seex_boolean VALUE seex_false.

CALL METHOD cl_exithandler=>get_class_name_by_interface
EXPORTING
instance = instance
IMPORTING
class_name = class_name
CHANGING
exit_name = exit_name
EXCEPTIONS
no_reference = 1
no_interface_reference = 2
no_exit_interface = 3
data_incons_in_exit_managem = 4
class_not_implement_interface = 5
OTHERS = 6.

Cuando salte el break point hay que ver el valor de exit_name, ahi pasarán todos los nombres de las BADIS. en la SE18 encontramos esos nombres, en la SE19 se implementa.

Otra forma para buscar las BADI, es buscando por Paquete (clase de desarrollo) obtener el paquete de la tx que deseamos en la se93 -> visualizar tomamos el paquete y en la se18 después en la búsqueda ampliada buscamos por paquete y nos devuelve todas las BADIS del paquete.

Extraer estructura de pantalla desde una BADI

Con esta forma, peculiar, podemos levantar datos de pantalla. No me puse a investigarlo a fondo porque no tenía tiempo. Según tengo entendido tmb sirve para levantar hasta tablas internas.
En este caso levanto la estructura resbd de la tx IW32.
DATA:l_field(60) TYPE C VALUE '(SAPLCOIH)RESBD',
ls_resbd TYPE resbd.

FIELD-SYMBOLS: TYPE ANY.
* Fetching the Component Item from the Screen. This is for read-only
* purpose and content should not be changed.
ASSIGN (l_field) to .
if sy-subrc eq 0.
ls_resbd = .
UNASSIGN .
endif.

martes, 19 de enero de 2010

Creación de Field Exits

Un Field Exit sirve y funciona como un exit común, pero existen ciertas particularidades y ademas el dominio abarca un solo campo (data element) y el dominio puede ser Global o especifico a Programa - Dynpro.
Para Acceder al menu de Field Exits.
Tx CMOD y en el browser poner PRFB.
Si creamos un Field Exit, debemos primero crear un grupo de funciones ya que trabaja como una función con un parametro de import y otro de export equivalentes al valor que ingresa y al que sale.
Luego de su creacion se debe activar para que surga efecto(para poder activar el Field Exit se debe tener el parametro abap/fieldexit = YES).
Cuando se crea un Field Exit no se puede utilizar las instrucciones:
  • BREAK-POINT.
  • CALL SCREEN.
  • CALL DIALOG.
  • SUBMIT.
  • CALL TRANSACTION.
  • COMMIT WORK.
  • ROLLBACK WORK.
  • MESSAGE I.
  • MESAGGE W.