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 ¡¡¡¡¡¡
24 de junio de 2010
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.txtexplain=apps/apps
¡¡¡ 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.
Ejecutamos nuestro concurrent.
3- Desactivamos la traza, en el mismo menú, marcamos "Sin Rastreo"
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
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
Suscribirse a:
Entradas (Atom)