24 de junio de 2010

Selects Utiles ADMINISTRADOR DEL SISTEMA

En esta entrada se adjuntan algunas selects utiles relacionadas con la administración de la eBS.
Algunas pueden ser útilies para tener alguna información sobre la BBDD a la hora de abrir algún SR
en Oracle o para tener control de patches,..... y NO queréis molestar al DBA.

Justo después de algunas SELECT se adjunta ejemplos de salida.


- COMPROBAR LOS PATCHES INSTALADOS Y EN QUE APLICACION

select substr(a.APPLICATION_NAME,1,60) "Application Name"
, substr(i.PRODUCT_VERSION,1,4) "Version"
, i.PATCH_LEVEL "Patch Level"
, i.APPLICATION_ID "Application ID"
, i.LAST_UPDATE_DATE "Last Update"
from APPS.FND_PRODUCT_INSTALLATIONS i
, APPS.FND_APPLICATION_ALL_VIEW a
where i.APPLICATION_ID = a.APPLICATION_ID
order by a.APPLICATION_NAME

Application Name Version Patch Level Application ID Last UPDATE
---------------- ------ ----------- ----------- ----------------
dvanced Benefits 12.0 R12.BEN.A.5 805 24/01/2008 2:16:55
Advanced Outbound Telephony 12.0 R12.IEC.A.4 545 24/01/2008 2:16:56
Advanced Pricing 12.0 R12.QP.A.4 661 24/01/2008 2:16:56

-NOMBRE DE LA BASE DE DATOS
Select name from v$database;

NAME
----
MIBBDD

-INSTANCIA
select instance_name from v$instance;

INSTANCE_name VERSIONS
------------ -------
mi instancia 10.2.0.3.0

-INFORMACION DE LA SESION ESTA PUEDE SER UTIL PARA MATAR ALGUN PROCESO O PONER EN PROCESOS QUE SE QUEDAN COLGADOS Y DESPUES
SON DIFICILES DE ENCONTRAR.

select /*s.machine */ * from v$session s where s.audsid = userenv('sessionid');

SID USER USERNAME STATUS ........
--- ------ -------- --------

110 USUARIO USERNAME ACTIVE

-DETECTAR BUGS RECONOCIDOS
select * from ad_bugs


-VERSION DE LA eBS QUE CON LA QUE TRABAJAMOS Y OTROS DATOS IMPORTANTES DE CONFIGURACOIN

SELECT * from apps.fnd_product_groups;

-PATCHES APLICADOS

select * from AD_APPLIED_PATCHES

-SABER SI TENEMOS ACTIVADO EL MULTIORG

select multi_org_flag from fnd_product_groups;

IREMOS COLOCANDO MAS SELECTS UTILES.

¡¡¡¡¡¡¡¡¡¡¡ SE AGRADECEN APORTACIONES ¡¡¡¡¡¡

22 de junio de 2010

Trazas en Oracle e-Business suite (tkprof)

En esta entrada, vamos a comentar una de las formas de hacer una traza de todas las selects y su coste a nivel de recursos y tiempos de los procesos que se ejecutan cuando entramos en cualquier pantalla de la eBS.

¡¡¡ ES IMPORTANTE DESACTIVAR LA TRAZA UNA VEZ SALGAMOS
DE LA PANTALLA O TERMINE NUESTRO PROCESO PARA NO
CARGAR EL SISTEMA !!!!!!

1- Para activar la traza por ejemplo para ver las selects que se realizan antes de lanzar un concurrent, vamos al menu Ayuda-->Diagnósticos-->Rastro y marcamos Rastreo con sustituciones y espera.













2- En este momento, ya tenemos activada la traza.
Ejecutamos nuestro concurrent.

3- Desactivamos la traza, en el mismo menú, marcamos "Sin Rastreo"

4- Nos mostrara un mensaje con la ruta donde ha dejado el archivo.

5- Vamos al sistema operativo y nos colocamos en el directorio que nos ha mostrado la aplicacion y en caso de UNIX ejecutamos el siguiente comando para convertir el fichero a txt y que sea más legible.

sintáxis: tkprof archvo.trc nuestro_nuevo_archivo.txt explain=apps/apps

14 de junio de 2010

Modificar listas de Precios con API's en Oracle e-Business Suite

En esta entrada vamos a usar una API muy típica para modificar los precios de nuestras listas de precios ya creadas. Esta es una forma muy sencilla de hacerlo y tan solo necesitamos de una tabla temporal donde hemos cargado nuestros precios nuevos. Normalmente, esto se utiliza para aprovechar una lista existente, copiarla, renombrarla y cambiarle solo los precios. Para copiar la lista de precios y renombrarla, se hace desde el módulo de AR->Lisas de Precios->Copiar A continuación se muestra un ejemplo. La tabla temporal esta los artículos ya existentes y sus precios nuevos. ------------------------------------------------------------------------------------- DECLARE --Declaramos todas las variables posibles que puedan recibir los paquetes. --Realmente solo se suelen usar 3, en los casos sencillos. gpr_return_status VARCHAR2(1) := NULL; gpr_msg_count NUMBER := 0; gpr_msg_data VARCHAR2(2000); v_id_lista_precios NUMBER; gpr_price_list_rec qp_price_list_pub.price_list_rec_type; gpr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; gpr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; gpr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; gpr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; gpr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; gpr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type; gpr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; ppr_price_list_rec qp_price_list_pub.price_list_rec_type; ppr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; ppr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; ppr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; ppr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; ppr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; ppr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type; ppr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; k NUMBER := 1; j NUMBER := 1; BEGIN /***********************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANTE SI CREAMOS UNA NUEVA LISTA DE PRECIOS ASEGURARSE DE QUE LA FECHA DE LA CABECERA, DE LA NUEVA LISTA ES ANTERIOR A DE CUALQUIER ITEM, ES MUY IMPORTANTE, O BIEN MODIFICAR LAS FECHAS DE LOS ITEMS DE LA NUEVA LISTA A LA FECHA ACTUAL */ /***********************************************************************/ mo_global.set_policy_context('S', /*¡¡¡¡ ORG_ID de la maestra en tu proyecto¡¡¡ */); mo_global.init('ONT');--obligatorio --En la pantalla de listas de precios, copiamos el nombre y lo ponemos en esta select para obtener el id. --O bien se mira en ayuda--examinar SELECT price_list_id INTO v_id_lista_precios FROM so_price_lists WHERE NAME = 'LISTA EJEMPLO 2010' ; oe_debug_pub.initialize; oe_debug_pub.setdebuglevel(5); oe_msg_pub.initialize; FOR v_reg in ( select precio_nuevo codigo_articulo , de la talba tmp itm.INVENTORY_ITEM_ID , PRICE_LIST_LINE_ID from so_price_list_lines spll , XX_TEMPORAL_EJEMPLO_PRECIOS prec , mtl_system_items_b itm where prec.CODIGO = itm.segment1 and itm.organization_id = --TU ORG_ID and spll.inventory_item_id = itm.inventory_item_id and spll.price_list_id = v_id_lista_precios ) LOOP gpr_price_list_line_tbl(k).list_header_id := v_id_lista_precios; --Price List Header Id (List_header_id) gpr_price_list_line_tbl(k).list_line_id := V_REG.PRICE_LIST_LINE_ID; -- Price List Line Id (List_Line_id) gpr_price_list_line_tbl(k).list_line_type_code := 'PLL'; GPR_PRICE_LIST_LINE_TBL(K).OPERAND := V_REG.PRECIO; gpr_price_list_line_tbl(k).operation :=qp_globals.g_opr_update; DBMS_OUTPUT.put_line('Carga de Precios.'); DBMS_OUTPUT.put_line('=============================================='); K :=K +1; END LOOP; DBMS_OUTPUT.put_line('LINEAS CARGADA' || K); qp_price_list_pub.process_price_list(p_api_version_number => 1, p_init_msg_list => fnd_api.g_false, p_return_values => fnd_api.g_false, p_commit => fnd_api.g_false, x_return_status => gpr_return_status, x_msg_count => gpr_msg_count, x_msg_data => gpr_msg_data, p_price_list_rec => gpr_price_list_rec, p_price_list_line_tbl => gpr_price_list_line_tbl, p_pricing_attr_tbl => gpr_pricing_attr_tbl, x_price_list_rec => ppr_price_list_rec, x_price_list_val_rec => ppr_price_list_val_rec, x_price_list_line_tbl => ppr_price_list_line_tbl, x_price_list_line_val_tbl => ppr_price_list_line_val_tbl, x_qualifiers_tbl => ppr_qualifiers_tbl, x_qualifiers_val_tbl => ppr_qualifiers_val_tbl, x_pricing_attr_tbl => ppr_pricing_attr_tbl, x_pricing_attr_val_tbl => ppr_pricing_attr_val_tbl); IF ppr_price_list_line_tbl.COUNT > 0 THEN FOR k IN 1 .. ppr_price_list_line_tbl.COUNT LOOP DBMS_OUTPUT.put_line('Registros Borrados=> ' ||k); DBMS_OUTPUT.put_line('Return Status = ' ||ppr_price_list_line_tbl(k).return_status); END LOOP; END IF; IF gpr_return_status = fnd_api.g_ret_sts_success THEN -- Commit; DBMS_OUTPUT.put_line('Modificación realizada correctamente'); Else Rollback; RAISE fnd_api.g_exc_unexpected_error; END IF; FOR k IN 1 .. gpr_msg_count LOOP gpr_msg_data := oe_msg_pub.get(p_msg_index => k, p_encoded => 'F'); DBMS_OUTPUT.put_line(' Error ' ||k ||'|| : '|| gpr_msg_data); NULL; END LOOP; EXCEPTION WHEN fnd_api.g_exc_error THEN gpr_return_status := fnd_api.g_ret_sts_error; WHEN fnd_api.g_exc_unexpected_error THEN gpr_return_status := fnd_api.g_ret_sts_unexp_error; FOR k IN 1 .. gpr_msg_count LOOP gpr_msg_data := oe_msg_pub.get(p_msg_index => k, p_encoded => 'F'); DBMS_OUTPUT.put_line('Error' ||k ||'|| : ' ||gpr_msg_data); NULL; END LOOP; WHEN OTHERS THEN gpr_return_status := fnd_api.g_ret_sts_unexp_error; END; --fin programa