Scalability Options для XML Publisher Reports
Если при построении отчета 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
OAF: Поиск страниц с отключенной персонализацией
Запрос для поиска страниц или регионов 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: Поиск страниц с отключенной персонализацией” »
OEBS Изменить сообщение ORACLE FORMS
Как в OEBS изменить системное сообщение ORACLE FORMS.
Например, «FRM-41830 LOV не содержит входов» на какое-нибудь другое.
1) Необходимо заменить файл fmfru.msb по адресу
/r12/…/apps/tech_st/10.1.2/forms/mesg
2) перезагрузить OC4J
cd $ADMIN_SCRIPTS_HOME
adoacorectl.sh stop
adoacorectl.sh start
Новое сообщение по длине символов должно быть равно исходному сообщению.
FMDUS.MSB contains default (American) Developer messages
FMGUS.MSB contains default (American) Generate messages
FMFUS.MSB contains default (American) Runform messages
Определение четная или нечетная текущая неделя
Запрос определения четная или нечетная неделя относительно текущей даты
Используем маску ‘IW’ — Week of year (1-52 or 1-53) based on the ISO standard.
select case when mod(to_number(to_char(sysdate, 'IW')), 2) = 0 then 'Четная неделя' else 'Нечетная неделя' end cur_week ,to_number(to_char(sysdate, 'IW')) num_week from dual
Oracle® Database SQL Language Reference 11g Release 2 (11.2) Table Datetime Format Elements
Скрипт обновления параметров профиля
Скрипт обновления параметров профиля. В данном примере изменяется поле SQL_VALIDATION.
declare l_sql VARCHAR2(4000); begin l_sql := 'SQL="SELECT LOOKUP_CODE, MEANING \"Включить проверку\" INTO :PROFILE_OPTION_VALUE, :VISIBLE_OPTION_VALUE FROM FND_LOOKUP_VALUES_VL WHERE LOOKUP_TYPE = ''!!!LOOKUP_NAME'' AND ENABLED_FLAG = ''Y'' AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE,SYSDATE) AND NVL(END_DATE_ACTIVE,SYSDATE) ORDER BY MEANING" COLUMN="\"Включить проверку\"(20)"'; for i in (select profile_option_name , user_profile_option_name , start_date_active , end_date_active , user_changeable_flag , user_visible_flag , read_allowed_flag , write_allowed_flag , site_enabled_flag , site_update_allowed_flag , app_enabled_flag , app_update_allowed_flag , resp_enabled_flag , resp_update_allowed_flag , user_enabled_flag , user_update_allowed_flag , (select a.application_short_name from fnd_application a where a.application_id = t.application_id ) as appl_short_name from fnd_profile_options_vl t where profile_option_name like '!!!%' ) loop dbms_output.put_line('update '||i.profile_option_name); fnd_profile_options_pkg.load_row ( x_profile_name => i.profile_option_name, x_owner => '!!!XX', x_application_short_name => i.appl_short_name, x_user_profile_option_name => i.user_profile_option_name, x_description => i.user_profile_option_name, x_user_changeable_flag => i.user_changeable_flag, x_user_visible_flag => i.user_visible_flag, x_read_allowed_flag => i.read_allowed_flag, x_write_allowed_flag => i.write_allowed_flag, x_site_enabled_flag => i.site_update_allowed_flag, x_site_update_allowed_flag => i.site_update_allowed_flag, x_app_enabled_flag => i.app_enabled_flag, x_app_update_allowed_flag => i.app_update_allowed_flag, x_resp_enabled_flag => i.resp_enabled_flag, x_resp_update_allowed_flag => i.resp_update_allowed_flag, x_user_enabled_flag => i.user_enabled_flag, x_user_update_allowed_flag => i.user_update_allowed_flag, x_start_date_active => to_char(i.start_date_active,'YYYY/MM/DD'), x_end_date_active => to_char(i.end_date_active,'YYYY/MM/DD'), x_sql_validation => l_sql ); dbms_output.put_line('done'); end loop; end;
API Модуль AP: Отмена счет-фактуры
Пример использования API для отмены счет-фактуры
declare l_result BOOLEAN; l_all_count NUMBER := 0; l_not_cancel_count NUMBER := 0; l_error_count NUMBER := 0; l_successful_count NUMBER := 0; -- lx_error_code VARCHAR2(100); lx_debug_info VARCHAR2(400); -- lx_message_name VARCHAR2(400); lx_invoice_amount NUMBER; lx_base_amount NUMBER; lx_temp_cancelled_amount NUMBER; lx_cancelled_by NUMBER; lx_cancelled_amount NUMBER; lx_cancelled_date DATE; lx_last_update_date DATE; lx_original_prepayment_amount NUMBER; lx_pay_curr_invoice_amount NUMBER; lx_token VARCHAR2(400); begin fnd_global.apps_initialize(-1, 20639, 200); --Диспетчер кредиторов - Кредиторы mo_global.init('SQLAP'); for i in (select i.invoice_id, i.invoice_num from ap_invoices_all i where 1=1 ... --and rownum<=5 ) loop l_all_count := l_all_count + 1; l_result :=ap_cancel_pkg.is_invoice_cancellable( p_invoice_id => i.invoice_id, p_error_code => lx_error_code, p_debug_info => lx_debug_info, p_calling_sequence => NULL ); if NOT l_result then l_not_cancel_count:= l_not_cancel_count+ 1; dbms_output.put_line ('Invoice '||i.invoice_num||' is not cancellable' ); continue; end if; l_result := ap_cancel_pkg.ap_cancel_single_invoice( p_invoice_id => i.invoice_id, p_last_updated_by => fnd_global.user_id, p_last_update_login => fnd_global.login_id, p_accounting_date => sysdate, p_message_name => lx_message_name, p_invoice_amount => lx_invoice_amount, p_base_amount => lx_base_amount, p_temp_cancelled_amount => lx_temp_cancelled_amount, p_cancelled_by => lx_cancelled_by, p_cancelled_amount => lx_cancelled_amount, p_cancelled_date => lx_cancelled_date, p_last_update_date => lx_last_update_date, p_original_prepayment_amount => lx_original_prepayment_amount, p_pay_curr_invoice_amount => lx_pay_curr_invoice_amount, p_token => lx_token, p_calling_sequence => NULL ); if NOT l_result then l_error_count := l_error_count + 1; dbms_output.put_line('Error for invoice '||i.invoice_num||':'||lx_message_name); continue; else dbms_output.put_line('Successfully cancelled the invoice '||i.invoice_num ); l_successful_count := l_successful_count + 1; end if; end loop; commit; dbms_output.put_line(''); dbms_output.put_line('----------------------------------------'); dbms_output.put_line('Total info:'); dbms_output.put_line('----------------------------------------'); dbms_output.put_line(' ALL COUNT = '||l_all_count); dbms_output.put_line('IS NOT CANCELLABLE = '||l_not_cancel_count); dbms_output.put_line(' ERROR COUNT = '||l_error_count); dbms_output.put_line(' SUCCESSFUL COUNT = '||l_successful_count); dbms_output.put_line('----------------------------------------'); end;
Поля STATUS_CODE и PHASE_CODE из FND_CONCURRENT_REQUESTS
Расшифровка STATUS_CODE и PHASE_CODE из таблицы канкарентов FND_CONCURRENT_REQUESTS
PHASE_CODE:
select lookup_code ,max(decode(LANGUAGE, 'RU',meaning,null )) as meaning_ru ,max(decode(LANGUAGE, 'US',meaning,null )) as meaning_us from apps.FND_LOOKUP_VALUES where lookup_type = 'CP_PHASE_CODE' and VIEW_APPLICATION_ID = 0 group by lookup_code;
LOOKUP_CODE | MEANING_RU | MEANING_US |
R | Выполнение | Running |
P | Отложено | Pending |
I | Неактивно | Inactive |
C | Завершено | Completed |
STATUS_CODE:
select lookup_code ,max(decode(LANGUAGE, 'RU',meaning,null )) as meaning_ru ,max(decode(LANGUAGE, 'US',meaning,null )) as meaning_us from apps.FND_LOOKUP_VALUES where lookup_type = 'CP_STATUS_CODE' and VIEW_APPLICATION_ID = 0 group by lookup_code;
LOOKUP_CODE | MEANING_RU | MEANING_US |
W | Пауза | Paused |
R | Обычное | Normal |
U | Отключено | Disabled |
H | Заблокирован | On Hold |
P | Запланировано | Scheduled |
I | Обычное | Normal |
D | Отменено | Cancelled |
M | Нет диспетчера | No Manager |
Q | Резервный | Standby |
C | Обычный | Normal |
B | Возобновлен | Resuming |
X | Прекращено | Terminated |
T | Прекращение | Terminating |
A | Ожидание | Waiting |
Z | Ожидание | Waiting |
E | Ошибка | Error |
S | Приостановлено | Suspended |
G | Предупреждение | Warning |
Читать дальше про “Поля STATUS_CODE и PHASE_CODE из FND_CONCURRENT_REQUESTS” »
Регулярные выражения — оставить только цифры или буквы
Пример использования регулярного выражения (regexp_replace)
— оставить только буквы
— оставить только цифры
with t as (select '#2 apps(0_-ORACLE+*.ru_ )ПРИ13мер' str from dual) select str , regexp_replace(str,'[^[[:alpha:]]]*') as only_char , regexp_replace(str,'[^[[:digit:]]]*') as only_number from t / STR ONLY_CHAR ONLY_NUMBER --------------------------------- ------------------------ -------------------- #2 apps(0_-ORACLE+*.ru_ )ПРИ13мер appsORACLEruПРИмер 2013
OAF: Вывести список VO и значения атрибутов
Вывести все View Objects (VO) и значения атрибутов для OAApplicationModule
// Вывод всех значений VO public void printALLVO(OAApplicationModule am) { OADBTransaction tr = am.getOADBTransaction(); if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1); tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " AM "+am.getName(), 1); } String[] rootViewNames = am.getViewObjectNames(); if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " count of VOs from AM = " +rootViewNames.length,1 ); } for (int j =0 ;j < rootViewNames.length ;j++ ) { if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1); tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", "================",1); tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " VO "+rootViewNames[j],1 ); } oracle.jbo.ViewObject lVO = (oracle.jbo.ViewObject)am.findViewObject(rootViewNames[j]); if (lVO!=null && lVO.isExecuted()) { oracle.jbo.server.ViewRowImpl lVORow; int numRow = 1; for(lVORow = (oracle.jbo.server.ViewRowImpl)lVO.first(); lVORow != null; lVORow = (oracle.jbo.server.ViewRowImpl)lVO.next()) { if (lVORow!=null) { int attrCount = lVORow.getAttributeCount(); if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1); tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " [row "+numRow+"]",1); tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " count of attributes = "+attrCount,1); } String[] attributeNames = lVORow.getAttributeNames(); for (int i = 0 ;i< attributeNames.length ;i++ ) { if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", attributeNames[i] +" = " +lVORow.getAttribute(i),1); } } } numRow ++; } if (numRow==1) { if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " not exists rows",1); } } } else { if(tr.isLoggingEnabled(1)) { tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " not executed",1); } } } }
Цикл по вложенным Application Modules (текущий AM не входит во вложенные AM)
String nestedAMArray[]=oapagecontext.getRootApplicationModule().getApplicationModuleNames(); for(int i = 0; i < nestedAMArray.length; i++) { String amName = nestedAMArray[i]; OAApplicationModule amIter = (OAApplicationModule)am.findApplicationModule(amName); oapagecontext.writeDiagnostics(this,"Nested AM Name=>"+amName,1); }
OAF: Как получить дочерний Application Module
Пример получения дочернего Application Module (AM) из контроллера
// Возвращает дочерний AM по его названию public static OAApplicationModule getRequestedAM(OAPageContext oapagecontext, String requestedAMName ) { OAApplicationModule rootAM = oapagecontext.getRootApplicationModule(); OAApplicationModule currentAM = null; oapagecontext.writeDiagnostics(oapagecontext, "XX find applicationModule = " +requestedAMName,1); String amName = ""; String nestedAMArray[] = rootAM.getApplicationModuleNames(); oapagecontext.writeDiagnostics(oapagecontext,"XX Root AM = " + rootAM.getName() + "; count child AMs = " + nestedAMArray.length,1); for(int i = 0; i < nestedAMArray.length; i++) { amName = nestedAMArray[i]; currentAM = (OAApplicationModule)rootAM.findApplicationModule(amName); String originalAmName = currentAM.getDefName(); oapagecontext.writeDiagnostics(oapagecontext,"XX nested AM name = " +originalAmName,1); if (originalAmName.equals(requestedAMName)) { oapagecontext.writeDiagnostics(oapagecontext,"XX found nested AM " + originalAmName ,1); break; } } return currentAM; }
Последние комментарии