Пример использования API для удаления резервирований позиции:
declare
l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
l_serial_number_tbl_type inv_reservation_global.serial_number_tbl_type;
--
lx_return_status varchar2(1);
lx_msg_data varchar2(4000);
lx_msg_count number;
begin
fnd_global.apps_initialize(-1, 20634, 401); --Запасы - Запасы
for i_cur in (select * from mtl_reservations t
where 1=1
and rownum=1
-- and ...
)
loop
l_rsv_rec.reservation_id := i_cur.reservation_id;
l_rsv_rec.organization_id := i_cur.organization_id;
l_rsv_rec.inventory_item_id := i_cur.inventory_item_id;
l_rsv_rec.demand_source_type_id := i_cur.demand_source_type_id;
l_rsv_rec.demand_source_header_id := i_cur.demand_source_header_id;
l_rsv_rec.demand_source_line_id := i_cur.demand_source_line_id;
l_rsv_rec.primary_uom_code := i_cur.primary_uom_code;
l_rsv_rec.reservation_uom_code := i_cur.reservation_uom_code;
-- l_rsv_rec.reservation_quantity := 1;--i_cur.reservation_quantity;
-- l_rsv_rec.primary_reservation_quantity := 1;--i_cur.primary_reservation_quantity;
l_rsv_rec.supply_source_type_id := i_cur.supply_source_type_id;
inv_reservation_pub.delete_reservation(p_api_version_number => 1.0
,p_rsv_rec => l_rsv_rec
,p_serial_number => l_serial_number_tbl_type
,x_return_status => lx_return_status
,x_msg_count => lx_msg_count
,x_msg_data => lx_msg_data
);
dbms_output.put_line(lx_return_status);
if (lx_return_status <> 'S') then
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => lx_msg_count,
p_data => lx_msg_data);
dbms_output.put_line('ERROR delete_reservation for reservation_id ='
||l_rsv_rec.reservation_id ||':');
if lx_msg_count = 1 then
dbms_output.put_line(lx_msg_data);
else
FOR i IN 1 .. lx_msg_count
LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,fnd_api.g_false));
END LOOP;
end if;
end if;
commit;
end loop;
end;
Categories: API, Oracle e-Business Suite Tags: API, delete_reservation, INV, inv_reservation_pub, inventory, inventory_item_id, OEBS, reservation, позиция, резервирование, удаление
Пример использования API для получения текущего или доступного для резервирования количества для позиции:
declare
p_organization_id NUMBER := 155;
p_inventory_item_id NUMBER := 546;
--
p_revision VARCHAR2(3);
p_lot_number VARCHAR2(80);
p_subinventory_code VARCHAR2(10) := 'VAlVALVAL';
p_locator_id NUMBER;
--
lx_qoh NUMBER; -- Total Quantity (Onhand)
lx_rqoh NUMBER;
lx_qr NUMBER;
lx_qs NUMBER;
lx_att NUMBER; -- Available to Transact
lx_atr NUMBER; -- Available to Reserve
--
lx_return_status VARCHAR2(1);
lx_msg_count NUMBER;
lx_msg_data VARCHAR2(4000);
begin
inv_quantity_tree_grp.clear_quantity_cache;
inv_quantity_tree_pub.query_quantities(
p_api_version_number => 1.0,
p_init_msg_lst => fnd_api.g_false,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
--
p_organization_id => p_organization_id,
p_inventory_item_id => p_inventory_item_id,
p_tree_mode => apps.inv_quantity_tree_pub.g_transaction_mode,
p_is_revision_control => case when p_revision is null then FALSE else TRUE end,
p_is_lot_control => case when p_lot_number is null then FALSE else TRUE end,
p_is_serial_control => FALSE,
p_revision => p_revision,
p_lot_number => p_lot_number,
p_subinventory_code => p_subinventory_code,
p_locator_id => p_locator_id,
x_qoh => lx_qoh, -- OnHand Quantity
x_rqoh => lx_rqoh,
x_qr => lx_qr,
x_qs => lx_qs,
x_att => lx_att, -- Available To Transact
x_atr => lx_atr -- Available To Reserve
);
if lx_return_status ='S' then
DBMS_OUTPUT.put_line ('Общее количество: ' || lx_qoh);
DBMS_OUTPUT.put_line ('Доступно для резервирования: ' || lx_atr);
DBMS_OUTPUT.put_line ('Доступно для транзакции: ' || lx_att);
else
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => lx_msg_count,
p_data => lx_msg_data);
dbms_output.put_line('ERROR for p_inventory_item_id='||p_inventory_item_id);
if lx_msg_count = 1 then
dbms_output.put_line(lx_msg_data);
else
FOR i IN 1 .. lx_msg_count LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,
fnd_api.g_false));
END LOOP;
end if;
end if;
end;
Так же есть запрос для просмотра текущего количества Модуль INV – Текущее количество для позиции
Categories: API, OEBS Tags: API, INV, inv_quantity_tree_pub, inventory, inventory_item_id, OEBS, onhand, query_quantities, доступно для резервирования, доступное, количество, текущее количество
Скрипт вывода столбцов таблицы в XML шаблон данных( BI Publisher Data Template )
declare
p_table_owner varchar2(30) := 'APPLSYS';
p_table_name varchar2(30) := 'FND_USER';
begin
for i_cur in (
select t.column_name
,t.data_type
,max(length(t.column_name)) over()
- length(t.column_name) as cur_gap_length
from all_tab_columns t
where 1=1
and t.owner = p_table_owner
and t.table_name = p_table_name
order by t.column_id
)
loop
dbms_output.put_line('<element name="' ||i_cur.column_name
||'"'||rpad(' ',i_cur.cur_gap_length)||' value="'||i_cur.column_name
||'" />');
end loop;
end;
-- Пример вывода
<element name="USER_ID" value="USER_ID" />
<element name="USER_NAME" value="USER_NAME" />
<element name="LAST_UPDATE_DATE" value="LAST_UPDATE_DATE" />
<element name="LAST_UPDATED_BY" value="LAST_UPDATED_BY" />
<element name="CREATION_DATE" value="CREATION_DATE" />
<element name="CREATED_BY" value="CREATED_BY" />
<element name="LAST_UPDATE_LOGIN" value="LAST_UPDATE_LOGIN" />
<element name="ENCRYPTED_FOUNDATION_PASSWORD" value="ENCRYPTED_FOUNDATION_PASSWORD" />
<element name="ENCRYPTED_USER_PASSWORD" value="ENCRYPTED_USER_PASSWORD" />
<element name="SESSION_NUMBER" value="SESSION_NUMBER" />
<element name="START_DATE" value="START_DATE" />
<element name="END_DATE" value="END_DATE" />
<element name="DESCRIPTION" value="DESCRIPTION" />
<element name="LAST_LOGON_DATE" value="LAST_LOGON_DATE" />
<element name="PASSWORD_DATE" value="PASSWORD_DATE" />
<element name="PASSWORD_ACCESSES_LEFT" value="PASSWORD_ACCESSES_LEFT" />
<element name="PASSWORD_LIFESPAN_ACCESSES" value="PASSWORD_LIFESPAN_ACCESSES" />
<element name="PASSWORD_LIFESPAN_DAYS" value="PASSWORD_LIFESPAN_DAYS" />
<element name="EMPLOYEE_ID" value="EMPLOYEE_ID" />
<element name="EMAIL_ADDRESS" value="EMAIL_ADDRESS" />
<element name="FAX" value="FAX" />
<element name="CUSTOMER_ID" value="CUSTOMER_ID" />
<element name="SUPPLIER_ID" value="SUPPLIER_ID" />
<element name="WEB_PASSWORD" value="WEB_PASSWORD" />
<element name="USER_GUID" value="USER_GUID" />
<element name="GCN_CODE_COMBINATION_ID" value="GCN_CODE_COMBINATION_ID" />
<element name="PERSON_PARTY_ID" value="PERSON_PARTY_ID" />
Oracle Application Framework: Пример кода для передачи параметра с кириллицей в URL.
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import oracle.apps.fnd.framework.OANLSServices;
import oracle.apps.fnd.framework.server.OAApplicationModuleImpl;
...
OAApplicationModuleImpl am = (OAApplicationModuleImpl)pageContext.getApplicationModule(webBean);
OANLSServices nls = am.getOADBTransaction().getOANLSServices();
try {
pAssignmentSet = URLEncoder.encode(pAssignmentSet, nls.getJAVAClientEncoding());
} catch (UnsupportedEncodingException e) {
throw new OAException(e.getMessage());
}
...
Пример использования API для перевода контрагента (таблица HZ_PAPTIES) с типом “PERSON” в статус “Неактивно”:
declare
p_party_id number := 17323325;
--
l_person_rec HZ_PARTY_V2PUB.PERSON_REC_TYPE;
l_party_rec HZ_PARTY_V2PUB.PARTY_REC_TYPE;
l_object_version_number number;
--
x_profile_id NUMBER;
x_return_status VARCHAR2(1);
x_msg_count NUMBER;
x_msg_data VARCHAR2(4000);
begin
fnd_global.apps_initialize(-1, 20639, 200); --Диспетчер кредиторов - Кредиторы
l_party_rec.party_id := p_party_id;
l_party_rec.status := 'I';
l_person_rec.party_rec := l_party_rec;
select hp.object_version_number into l_object_version_number
from hz_parties hp where hp.party_id = l_party_rec.party_id;
hz_party_v2pub.update_person (
p_init_msg_list => fnd_api.g_false,
p_person_rec => l_person_rec,
p_party_object_version_number => l_object_version_number,
x_profile_id => x_profile_id,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data
);
dbms_output.put_line(x_return_status);
if (x_return_status <> 'S') then
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => x_msg_count,
p_data => x_msg_data);
dbms_output.put_line('ERROR update for party_id='||l_party_rec.party_id||':');
if x_msg_count = 1 then
dbms_output.put_line(x_msg_data);
else
FOR i IN 1 .. x_msg_count LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,
fnd_api.g_false));
END LOOP;
end if;
end if;
commit;
end;
Пример использования API для перевода контрагента (таблица HZ_PAPTIES) с типом «organization» в статус “Неактивно”:
declare
p_party_id number := 2661479911;
--
l_organization_rec HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE;
l_party_rec HZ_PARTY_V2PUB.PARTY_REC_TYPE;
l_object_version_number number;
--
x_profile_id NUMBER;
x_return_status VARCHAR2(1);
x_msg_count NUMBER;
x_msg_data VARCHAR2(4000);
begin
fnd_global.apps_initialize(-1, 20639, 200); --Диспетчер кредиторов - Кредиторы
l_party_rec.party_id := p_party_id;
l_party_rec.status := 'I';
l_organization_rec.party_rec := l_party_rec;
select hp.object_version_number into l_object_version_number
from hz_parties hp where hp.party_id = l_party_rec.party_id;
HZ_PARTY_V2PUB.update_organization(p_init_msg_list => fnd_api.g_false,
p_organization_rec => l_organization_rec,
p_party_object_version_number => l_object_version_number,
x_profile_id => x_profile_id,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
dbms_output.put_line(x_return_status);
if (x_return_status <> 'S') then
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => x_msg_count,
p_data => x_msg_data);
dbms_output.put_line('ERROR update for party_id='||l_party_rec.party_id||':');
if x_msg_count = 1 then
dbms_output.put_line(x_msg_data);
else
FOR i IN 1 .. x_msg_count LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,
fnd_api.g_false));
END LOOP;
end if;
end if;
commit;
end;
Пример использования API для перевода счета заказчика в статус «Неактивно» — деактивация счета заказчика.
declare
l_cust_account_rec hz_cust_account_v2pub.cust_account_rec_type;
l_object_version_number number;
--
x_return_status varchar2(1);
x_msg_data varchar2(4000);
x_msg_count number;
begin
l_cust_account_rec := null;
l_cust_account_rec.cust_account_id := 9787987;
l_cust_account_rec.status := 'I';
select ca.object_version_number into l_object_version_number
from hz_cust_accounts ca
where cust_account_id = l_cust_account_rec.cust_account_id;
-- Call the procedure
hz_cust_account_v2pub.update_cust_account(p_init_msg_list => 'T',
p_cust_account_rec => l_cust_account_rec,
p_object_version_number => l_object_version_number,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
dbms_output.put_line('x_return_status='||x_return_status);
commit;
end;
Categories: API, OEBS Tags: API, cust_account_id, Customer, hz_cust_account_v2pub, status, деактивация, Заказчики, неактивный, статус, счет заказчика
SQL*Loader — мощный инструмент для импорта различных данных из файла в базу данных.
Если надо загрузить что-либо из файла в БД, то этот инструмент, как раз то что вам поможет.
Возможности SQL*Loader
- Загрузка данных из разных файлов в одной сессии
- Загрузка данных в разные таблицы в одной сессии
- Указание кодировки файла данных
- Использование SQL функций перед загрузкой
- Генерация уникальных ключей для колонок
- Ограничение вставляемых данных по условию
- Загрузка двоичных данных
- Запись ошибочных данных в файл ошибок

Читать дальше про “Oracle SQL*Loader” »
Если при построении отчета XML Publisher Reports получили ошибку типа:
****Warning!!! Due to high volume of data, got out of memory exception…***
****Please retry with scalable option or modify the Data template to run in scalable mode…***
то могут помочь следующие параметры:

Заходим в параллельную программу и в поле «Параметры» ставим одно из значений
(a) -Xmx512m -Xss1024k
(b) -Xmx512m -Xss2048k
(c) -Xmx512m -Xss4096k
(d) -Xmx1024m -Xss1024k
(e) -Xmx1024m -Xss2048k
(f) -Xmx1024m -Xss4096k
-Xmx (-mx): maximum heap size
-Xss : Java stack size

Запрос для поиска страниц или регионов OEBS OAF с отключенной персонализацией:
select *
from (select att.att_value base_path
,jdr_mds_internal.getDocumentName(pat.path_docid) custom_path
,regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
'.*/customizations/([[:alpha:]]*)/.*',
'\1') custom_level
,decode(regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
'.*/customizations/([[:alpha:]]*)/.*',
'\1'),
'site',
'SITE',
(regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
'.*/customizations/([[:alpha:]]*)/([0-9A-Za-z_]*)/.*',
'\2'))) custom_level_value
,nvl((select 'N'
from jdr_attributes cat
where cat.att_comp_docid = pat.path_docid
and cat.att_name = 'MDSActiveDoc'
and cat.att_value = 'false'),
'Y') is_active
,pat.created_by
,pat.creation_date
,pat.last_updated_by
,pat.last_update_login
,pat.LAST_UPDATE_DATE
from jdr_paths pat
join jdr_attributes att on (pat.path_docid = att.att_comp_docid)
where att_comp_seq = 0
and att_name = 'customizes'
--and regexp_like( jdr_mds_internal.getDocumentName(path_docid), 'apps/(iby|fnd)' )
)
where is_active = 'N'
Читать дальше про “OAF: Поиск страниц с отключенной персонализацией” »
Последние комментарии