Inventory API - Para asignar articulos a almacenes de inventarios
El día de hoy quiero compartir un script donde uso un API para asignar artículos a almacenes de inventarios. Es un ejemplo sencillo con un articulo pero puede utilizarse una tabla temporal que ayude cargar masivamente varios artículos. Sin duda es muy útil si necesita realizar una asignación a varios artículos y varios almacenes.
/* Script de API para asginar artiuclos de inventarios */
DECLARE
g_user_id fnd_user.user_id%TYPE := NULL;
l_appl_id fnd_application.application_id%TYPE;
l_resp_id fnd_responsibility_tl.responsibility_id%TYPE;
l_api_version NUMBER := 1.0;
l_init_msg_list VARCHAR2 (2) := fnd_api.g_false;
l_commit VARCHAR2 (2) := fnd_api.g_false;
x_message_list error_handler.error_tbl_type;
x_return_status VARCHAR2 (2);
x_msg_count NUMBER:= 0;
l_error_msg VARCHAR2(1000);
l_organization_id NUMBER := 0;
BEGIN
SELECT fa.application_id
INTO l_appl_id
FROM fnd_application fa
WHERE fa.application_short_name = 'INV';
SELECT fr.responsibility_id
INTO l_resp_id
FROM fnd_application fa, fnd_responsibility_tl fr
WHERE fa.application_short_name = 'INV'
AND fa.application_id = fr.application_id
AND UPPER (fr.responsibility_name) = 'INVENTORY';
SELECT organization_id
into l_organization_id
FROM mtl_parameters
WHERE ORGANIZATION_CODE ='P7U';--almacén a asignar
fnd_global.apps_initialize (g_user_id, l_resp_id, l_appl_id);
FOR r1 IN (
SELECT inventory_item_id FROM mtl_system_items_B
WHERE SEGMENT1||'.'||SEGMENT2||'.'||SEGMENT3||'.'||SEGMENT4='&inventory_item'
AND ORGANIZATION_ID IN ( SELECT organization_id
FROM mtl_parameters
WHERE master_organization_id = organization_id
AND nvl(ATTRIBUTE11, 'N') = 'Y')
)---ejemplo cargamos un articulo, puede usar una tabla temporal
LOOP
--El API se activa por cada articulo ingresado para asignar
ego_item_pub.assign_item_to_org (p_api_version => l_api_version,
p_inventory_item_id => r1.inventory_item_id,
p_organization_id => l_organization_id,
x_return_status => x_return_status,
x_msg_count => x_msg_count
);
COMMIT;
l_error_msg := 'Status: ' || x_return_status||' for inventory item id : '||r1.inventory_item_id;
DBMS_OUTPUT.put_line (l_error_msg);
IF (x_return_status <> fnd_api.g_ret_sts_success)
THEN
DBMS_OUTPUT.put_line ('Error Messages :');--Mensajes de errores del api
error_handler.get_message_list (x_message_list => x_message_list);
FOR j IN 1 .. x_message_list.COUNT
LOOP
DBMS_OUTPUT.put_line (x_message_list (j).MESSAGE_TEXT);
END LOOP;
END IF;
END LOOP;
DBMS_LOCK.SLEEP(6); --se coloca una espera de 6 segundos para procesar
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Exception Occured :');
DBMS_OUTPUT.put_line (SQLCODE || ':' || SQLERRM);
END;
Comentarios
Publicar un comentario