Como cambiar el Encoding de un mensaje en SAP PI UTF-8 a ISO-8859-1 octubre 10, 2011
Posted by gstortoni in SAP PI, Uncategorized.Tags: 880173, Encoding, ISO-8859-1, PI, SAP PI, UTF-8
add a comment
El modo correcto y recomendado por SAP. (comprobado)
Abrir el canal de comunicación:
Entrar a la pestaña Modules. y agregar un nuevo módulo..
OJO: Hay que observar BIEN ya que al agregar un nuevo módulo, éste pasará a ser el segundo en ejecutarse, estos se ejecutan en secuencia.. por lo que el primero que aparece es el: CallSapAdapter lo que hace este módulo es como su nombre lo dice, llamar al adaptador… con esto no se ejecutará el siguiente módulo. Lo que nosotros estamos buscando es que antes de llamar al adaptador, se realice la modificación del encoding por lo tanto, moveremos el CallSapAdapter a la segunda posicion, y reemplazaremos su MODULE KEY de 0 a 1.
El modulo a agergar es el: AF_Modules/XMLAnonymizerBean
Type: Local Enterprise Bean
Module Key: 0
Abajo, hay una opción que dice: Module Configuration.
Aquí se agregan los parámetros con los que se ejecutará el nuevo módulo
Parámetros:
Module Key: 0
Parameter Name: anonymizer.encoding
Parameter Value: ISO-8859-1
Module Key: 0
Parameter Name: anonymizer.quote
Parameter Value: ‘
Y listo, grabar activar, y verán que en el mensaje que llega al adaptador, se ha modificado el Encoding de:
<?xml version=”1.0″ encoding=”UTF-8″?> a
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
Nota SAP para que puedan amplir un poco mas esta información:
880173
Adjuntar archivos a una Orden de Compra julio 26, 2011
Posted by gstortoni in Uncategorized.add a comment
El siguiente código permite seleccionar un archivo y adjuntarlo a una orden de compra.
report zmmadjuntar_documentos .
parameter p_mandt like sy-mandt default sy-mandt .
parameter p_ebeln type ebeln .
parameter p_path like ibipparms-path memory id ad_local_path .
parameter p_name(30) default ’Prueba Adjunto’ lower case .
data w_prog like sy-repid .
data w_dynnr like sy-dynnr .
data w_attachement type borident .
initialization .
w_prog = sy-repid .
w_dynnr = sy-dynnr .
data lo_container type ref to cl_gui_container .
at selection-screen on value-request for p_path .
call function ’F4_FILENAME’
exporting
program_name = w_prog
dynpro_number = w_dynnr
field_name = ’P_PATH’
importing
file_name = p_path.
start-of-selection .
data ws_borident like borident .
ws_borident-objkey = p_ebeln.
ws_borident-objtype = ’BUS2012′.
data w_document like sood4 .
data : begin of wt_files occurs 0 .
data fname(128) .
data end of wt_files.
wt_files-fname = p_path .
append wt_files .
data folder_id like soodk .
call function ’SO_FOLDER_ROOT_ID_GET’
exporting
region = ’B’
importing
folder_id = folder_id
exceptions
others = 1.
w_document-foltp = folder_id-objtp .
w_document-folyr = folder_id-objyr .
w_document-folno = folder_id-objno .
w_document-objdes = p_name .
w_document-objnam = p_name .
data w_h_data like sood2 ..
data w_fol_data like sofm2.
data w_rec_data like soos6 .
w_h_data-objdes = p_name .
call function ’SO_DOCUMENT_REPOSITORY_MANAGER’
exporting
method = ’IMPORTFROMPC’
ref_document = w_document
tables
files = wt_files
changing
document = w_document
header_data = w_h_data
folmem_data = w_fol_data
receive_data = w_rec_data.
.
if w_document-okcode = ’CREA’ or w_document-okcode = ’CHNG’.
w_attachement-objtype = ’MESSAGE’.
w_attachement-objkey = w_document(34).
call function ’BINARY_RELATION_CREATE_COMMIT’
exporting
obj_rolea = ws_borident
obj_roleb = w_attachement
relationtype = ’ATTA’
exceptions
no_model = 1
internal_error = 2
unknown = 3
others = 4.
if sy-subrc = 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
commit work.
endif.
endif .
Transacción: ME23N
Suerte y que les Sirva
ALV 00 sin tener que crear estructura en el diccionario mayo 28, 2010
Posted by gstortoni in ALV OO.add a comment
Hola gente,
He visto cosas buenas en SAP y esto que les dejo a continuación, quizas algunos ya lo conozcan, pero no creo que lo hayan visto de la forma en que yo lo modifiqué.
El otro día tenía que sacar un ALV, y me acordé de un manualcillo que me prestó un compañero un día en el trabajo…
Lo bueno que tiene este ALV OO, es que no necesita utilizar DYNPROS… es espectacular para cuando necesitamos sacar un reporte rapidísimo y sin muchas lineas… entre dejar una salida con WRITE y dejarla en un ALV, prefiero el ALV no?
desde aca pueden descargarse el manual :
ALV Object Model – Simple 2D Table – The Basics (esta parte explica el manejo básico de esta clase)
Manual ALV – Lo Básico para empezar
ALV Object Model – Simple 2D Table – Event Handling (esta es la parte del manual que explica como usar los eventos)
Manual ALV – EVENTOS
Bueno, si ven los PDF, se entuciasmarán y comenzarán a copiar y pegar, activar y fuaa el F8 a volar… y quedarán fascinados…
Pero la Fascinación llega hasta que tratan de dar salida en ALV a una tabla interna, que no tiene necesariamente una estructura estandar asociada…
entonces dirán… bueno… este desgraciado en su Blog decía que era algo maravilloso, mejor que el otro que tenían que crear una Dynpro, pero igual me está obligando a crear una estructura en el diccionario…
y si yo les digo que no es necesario crear esa estructura? esa es la gracia de este POST.. me cabecié un rato y logré hacer que el uso de esa estructura no fuese necesario, todo gracias a los tan poco usados Field-Symbols (que en realidad son la 8va maravilla).
Les dejo mi código mas abajo… como siempre: copiar y pegar.
data: begin of ti_salida OCCURS 0,
bukrs type bkpf-bukrs,
belnr type bkpf-belnr,
gjahr type bkpf-gjahr,
end of ti_salida.
ti_salida-bukrs = ’1001′.
ti_salida-belnr = ’0000111111′.
ti_salida-gjahr = ’2009′.
append ti_salida.
ti_salida-gjahr = ’2010′.
ti_salida-belnr = ’0000222222′.
append ti_salida.
ti_salida-gjahr = ’2011′.
ti_salida-belnr = ’0000333333′.
append ti_salida.
FIELD-SYMBOLS <tabla> type ANY TABLE .
data: gr_table type ref to cl_salv_table.
assign ti_salida[] to <tabla>[].
cl_salv_table=>factory( importing r_salv_table = gr_table
changing t_table = <tabla>[] ).
gr_table->display( ).
Ya no tienen que estar matandose, dando salidas con Write que para ser sinceros son bastántes feas…
Que lo disfruten!!!!!!!!
Crear un Matchcode en tiempo de Ejecución en un Report común (SIN DYNPRO) enero 6, 2010
Posted by gstortoni in Uncategorized.add a comment
Estimados,
he tenido el blog más que despreocupado… pero bueno ahora ya no estoy en abap me cambié a PI por lo que tiempo tengo muy poco…
de todas formas una compañera de trabajo que me preguntó si tenia algún codigo para generar un matchcode en tiempo de ejecución pero que fuera para reportes simples es decir sin el uso de Dynpros. La salvedad que tenía que tener este código es que además permitiera extraer todos los valores del matchcode…
Algunas imagenes:
Aqui les dejo el código… copiar, pegar y probar!!!!!
Disculpen si no pongo los colores como dios manda, pero no tengo tiempo.!!!
Saludos a tod@s
REPORT ygs_prueba.
DATA : BEGIN OF list_of_fields OCCURS 10,
fieldname LIKE dd03l-fieldname,
END OF list_of_fields.
DATA : indice LIKE sy-tabix,
fieldname LIKE dd03l-fieldname,
fields LIKE help_value OCCURS 10 WITH HEADER LINE,
shrinkfields LIKE dynpread OCCURS 0 WITH HEADER LINE,
dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF ti_almacen OCCURS 0,
lgort LIKE t001l-lgort,
lgobe LIKE t001l-lgobe,
END OF ti_almacen.
TABLES vbap.
SELECTION-SCREEN BEGIN OF BLOCK blq1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_matnr FOR vbap-matnr NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK blq1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_matnr-low.
REFRESH: ti_almacen, list_of_fields, fields, shrinkfields.
CLEAR: ti_almacen, list_of_fields, fields, shrinkfields.
*select lgort lgobe
*into corresponding fields of table ti_almacen
*from t001l
*.
ti_almacen-lgort = ’C001′.
ti_almacen-lgobe = ’XXXX’.
APPEND ti_almacen.
ti_almacen-lgort = ’C001′.
ti_almacen-lgobe = ’OOOO’.
APPEND ti_almacen.
ti_almacen-lgort = ’C001′.
ti_almacen-lgobe = ’AAAAA’.
APPEND ti_almacen.
list_of_fields-fieldname = ’T001L-LGORT’.
APPEND list_of_fields.
list_of_fields-fieldname = ’T001L-LGOBE’.
APPEND list_of_fields.
fieldname = ’S_MATNR’.
CALL FUNCTION ’TRANSFER_NAMES_TO_FIELDS’
EXPORTING
selectfield = fieldname
TABLES
fields = fields
namelist = list_of_fields
EXCEPTIONS
wrong_format_given = 01.
CALL FUNCTION ’HELP_VALUES_GET_NO_DD_NAME’
EXPORTING
selectfield = fieldname
titel = ’Almacen de destino’
use_user_selections = ’S’
IMPORTING
ind = indice
TABLES
fields = fields
full_table = ti_almacen
user_sel_fields = shrinkfields
EXCEPTIONS
full_table_empty = 01
no_tablestructure_given = 02
no_tablefields_in_dictionary = 03
more_than_one_selectfield = 04
no_electfield = 05.
READ TABLE ti_almacen INDEX indice.
CONCATENATE ti_almacen-lgort ti_almacen-lgobe
INTO s_matnr-low SEPARATED BY ’-’.
Interacción entre ALV OO y Dynpro julio 25, 2008
Posted by gstortoni in Dynpro.Tags: ALV, ALV OO, Dynpro, i_appl_events, Orientacion a objetos
1 comment so far
Ayer, medio aburrido en el trabajo, decidí retomar un poco la programación orientada a objetos, ya que en mis últimos proyectos, no me fue necesaria.
Por lo que decidí hacer una especie de Agenda, en la que al agregar a un personaje, inmediatamente se vería reflejado en mi ALV OO,
Hasta ahi todo bien, ingresaba los datos, y luego apretaba el boton para guardar, y gracias al queridicimo PAI, agregaba a mi tabla interna la persona creada…
Luego se me ocurrió que el usuario hiciera doble click sobre cualquier persona ingresada (ALV) y que en unos campos de la dynpro destinados para modificación aparecieran sus datos, y aqui empezó mi pelea
, manejando el evento de Doble Clic, recogí los datos, y debuggeando verifiqué que las variables de los campos, se estaban seteando correctamente, Pero (maldito pero) no se estaban colocando en los campos de la dynpro…
Coloqué un brakpoint tanto en el PAI como en el PBO, y para mi sorpresa, cuando hacía el doble click, ninguno de estos 2 se ejecutaba…. entonces, me dije a mi mismo: “Mismo, estamos en problemas”… empecé a buscar, y postié en la SDN, luego de unos pocos minutos, obtuve
mi respuesta… es tan simple como hacer lo siguiente:
Cuando declaramos el objeto para crear la “grilla” hay que pasarle el siguiente parámetro: ” i_appl_events = ‘X’ “, ejemplo:
CREATE OBJECT grid
EXPORTING
i_parent = g_custom_container
i_appl_events = ‘X’.
Con esto, el ALV, sabe que al momento que se regitre un evento tendra que pasar nuevamente por el PBO.
por lo que mi problema quedo totalmente solucionado
un pantallazo de la aplicación…
Saludos….
Leer Campo de una Dynpro cuando es inaccesible. julio 17, 2008
Posted by gstortoni in Funciones.Tags: ABAP, campo, Funcion, leer campo dynpro, leer dynpro, SAP
3 comments
Sucede a veces, que uno necesita leer un campo de una Dynpro, pero ese campo es inaccesible por ejemplo, cuando se esta usando un USER EXIT y el campo lo vemos en la pantalla, pero el import del exit, o las tablas, no lo traen, bueno entonces que hacemos??? NO señor llorar no es la solución
existe una Fantástica función que nos permite resolver nuestro dilema, tal vez no sea la forma mas ortodoxa, pero en fin, nos saca del entuerto.
La Dichosa Función es como su nombre lo dice : UA_READ_FIELD_FROM_DYNPRO
manos a la obra.
Ingredientes:
DATA: program TYPE progname,
dynpro TYPE sydynnr,
field_value TYPE dynfieldvalue.
program = sy-cprog. “Aca ingreso el nombre del programa
dynpro = sy-dynnr. “y aca va el numero de la dynpro donde esta mi campo
En mi caso deseo leer el campo FLD_CENTRO al cual no puedo acceder en tiempo de ejecución
CALL FUNCTION ‘UA_READ_FIELD_FROM_DYNPRO’
EXPORTING
id_program = program
id_dynpro = dynpro
id_field_name = ‘FLD_CENTRO’
IMPORTING
ed_field_value = field_value
EXCEPTIONS
failed = 1
OTHERS = 2.
El valor del campo, es retornado en la variable field_value.
Ojo, la verdad no se si sea malo el uso o abuso de esta función, a mi me ha sacado de apuros, pero siempre trato de agotar las instancias para poder sacar de manera “Natural” el valor de los campos.
Saludo2
Crear Match Code en tiempo de ejecucion para una Dynpro julio 17, 2008
Posted by gstortoni in Match Code.Tags: ABAP, Ayuda de Busqueda, Dynpro, Dynpros, Match Code, SAP
1 comment so far
Esta es una forma bastante util e interesante para crear ayudas de busquedas en tiempo de ejecucion, en mi caso lo he usado en una Dynpro, ustedes veran que uso le dan.
En una Dynpro:
Primero que todo, hay que agregar dentro de la logica de proceso, luego del PAI, lo siguiente:
process on value-request.
field campo_que_necesitamos module module_match.
Una vez que tengamos escrito esto en la logica de proceso de la Dynpro, tenemos que crear el Module, hacemos doble click y ustedes deciden donde crearlo, por mi parte lo cree en el programa control.
Primero necesitamos los ingredientes:
data : begin of list_of_fields occurs 10,
fieldname like dd03l-fieldname,
end of list_of_fields.
data : indice like sy-tabix,
fieldname like dd03l-fieldname,
fields like help_value occurs 10 with header line,
shrinkfields like dynpread occurs 0 with header line,
dynpfields like dynpread occurs 0 with header line.
data: begin of ti_almacen occurs 0,
lgort like t001l-lgort,
lgobe like t001l-lgobe,
end of ti_almacen_dest.
En mi caso quiero mostrar los almacenes y su descripcion para un Centro dado.
Para ello, manualmente recojo los campos de la tabla y los almaceno en una TI.
select lgort lgobe
into corresponding fields of table ti_almacen
from t001l
where werks eq ’2000′.
Luego Hay que definir la estructura de la ayuda de busqueda.
list_of_fields-fieldname = ‘T001L-LGORT’.
append list_of_fields.
list_of_fields-fieldname = ‘T001L-LGOBE’.
append list_of_fields.
Defino el campo que quiero que quede en la pantalla cuando haya hecho doble clic sobre mi Match Code
fieldname = ‘LGORT’.
call function ‘TRANSFER_NAMES_TO_FIELDS’
exporting
selectfield = fieldname
tables
fields = fields
namelist = list_of_fields
exceptions
wrong_format_given = 01.
Esta es la funcion que hace toda la maravilla
call function ‘HELP_VALUES_GET_NO_DD_NAME’
exporting
selectfield = fieldname
titel = ‘Almacen de destino’
use_user_selections = ‘S’
importing
ind = indice
tables
fields = fields
full_table = ti_almacen
user_sel_fields = shrinkfields
exceptions
full_table_empty = 01
no_tablestructure_given = 02
no_tablefields_in_dictionary = 03
more_than_one_selectfield = 04
no_electfield = 05.
Ahora solo queda recorrer la tabla e indicar cual fue el indice que el usuario ha seleccionado.
read table ti_almacen index indice.
Con esto, paso el valor de la seleccion en este caso el LGORT a mi campo en pantalla
move ti_almacen-lgort to fld_almacen.
Y eso es todo, queda solo activar y disfrutar de una ayuda de busqueda sencilla. pero Muy efectiva
Imagenes Dinamicas en SmartForms julio 14, 2008
Posted by gstortoni in SmartForms.Tags: dinamica, dinamicas, dinamico, dinamicos, imagen, imagenes, logo, SmartForms
add a comment
Bueno, este es un tema bastante sencillo, pero que a mas de uno le ha dado dolores de cabeza,
veamos
VL_IMAGEN TYPE STRING
luego creen una función gráfica donde deseen… pero en el nombre de la imagen coloquenle &VL_IMAGEN&, completen los otros campos como lo hacen con cualquier imagen…
por mi parte la forma de setear el nombre de la imagen fue agregando una simple linea de codigo…
en variable de salida coloqué VL_IMAGEN
y en el código le puse el nombre de la imagen que necesitaba….
es decir: vl_imagen = ‘ZLOGO’.
y eso es todo.








