Скрипт вывода столбцов таблицы в 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" />
Случайно наткнулся на то, что EXCEL2007/2010 число 2,01 хранит как 2.0099999999999998.
Пример: Создаем excel файл и прописываем в ячейки числовые значения с точкой

Сохраняем файл как «Таблица XML 2003» и открываем на просмотр в текстовом редакторе:
Читать дальше про “EXCEL — некорректная точность чисел с десятичной точкой” »
Для написания красивых отчетов в Excel (под OEBS) довольно часто используем XSL шаблон.
Для тестирования XSL шаблона есть несколько вариантов:
- Загружаем XSL в OEBS и запускаем отчет — самый долгий способ.
- Используем мощный редактор Altova XMLSpy, который позволяет накладывать XSL на XML (XSL-Transformation). Основной минус, то что продукт платный.
- Используем javascript скрипт представленный ниже.
var xmlFile = "data.xml"; // xml данные
var xslFile = "tempalate.xsl"; // xsl шаблон
var outFile = "REPORT.xls"; // имя генерируемого файла
//
var Xml = null;
var Xsl = null;
var objTransformer = null;
function init()
{
Xml = new ActiveXObject("MSXML2.DOMDocument");
Xml.async = false;
Xml.load(xmlFile);
Xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
Xsl.async = false;
Xsl.load(xslFile);
// запись в файл
f = new ActiveXObject("ADODB.Stream");
f.Charset = "UTF-8";
f.Open();
f.WriteText(Xml.transformNode(Xsl));
f.SaveToFile(outFile,2);
f.Close();
// запуск файла
//var WshShell = new ActiveXObject("WScript.Shell");
//WshShell.Run(outFile);
}
init();
Для использования скрипта создаем файл с расширением «.js», например «GenerateReportXML-XSL.js». Указываем в скрипте название файлов для шаблона и данных. Запускаем скрипт на выполнение (Windows).
-
В данных после
< ?xml version="1.0" encoding="UTF-8"?>
добавляем новый тег
< ?xml-stylesheet href="XXX.xsl" type="text/xsl"?>
, где XXX.xsl имя xslt преобразования. Затем открываем xml через Excel
Для удобного доступа к логу и xml канкарента, можно использовать следующий запрос
SELECT get_log_bfile('l' || x.request_id || '.req') as log_date,
get_xml_bfile('o' || x.request_id || '.out') as xml_date
FROM fnd_concurrent_requests x
WHERE x.request_id = :p_request_id
Но перед его использованием следует создать директории для доступа к файлам:
create or replace directory CUNCURRENT_XML
as '/oracle/NAME_INSTANCE/inst/apps/NAME/logs/appl/conc/out';
create or replace directory CUNCURRENT_LOG
as '/oracle/NAME_INSTANCE/inst/apps/NAME/logs/appl/conc/log';
и сами функции
create or replace function get_log_bfile(p_filename in varchar2)
return bfile as
l_bfile bfile := bfilename('CUNCURRENT_LOG',p_filename);
begin
return l_bfile;
end;
/
create or replace function get_xml_bfile(p_filename in varchar2 )
return bfile as
l_bfile bfile := bfilename('CUNCURRENT_XML',p_filename);
begin
return l_bfile;
end;
/
Последние комментарии