Архив

Публикации с меткой ‘xml’

Скрипт вывода полей для XML шаблона данных на основе таблицы

28 Октябрь 2014 Нет комментариев

Скрипт вывода столбцов таблицы в 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" />     

EXCEL — некорректная точность чисел с десятичной точкой

Случайно наткнулся на то, что EXCEL2007/2010 число 2,01 хранит как 2.0099999999999998

Пример: Создаем excel файл и прописываем в ячейки числовые значения с точкой

Сохраняем файл как «Таблица XML 2003» и открываем на просмотр в текстовом редакторе:
Читать дальше про “EXCEL — некорректная точность чисел с десятичной точкой” »

Categories: Oracle e-Business Suite Tags: ,

XSL-Трансформации (XSLT)

6 Февраль 2012 5 comments

Для написания красивых отчетов в Excel (под OEBS) довольно часто используем XSL шаблон.

Для тестирования XSL шаблона есть несколько вариантов:

  1. Загружаем XSL в OEBS и запускаем отчет — самый долгий способ.
  2. Используем мощный редактор Altova XMLSpy, который позволяет накладывать XSL на XML (XSL-Transformation). Основной минус, то что продукт платный.
  3. Используем javascript скрипт представленный ниже.
  4. 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).

  5. В данных после

    < ?xml version="1.0" encoding="UTF-8"?>

    добавляем новый тег

    < ?xml-stylesheet href="XXX.xsl" type="text/xsl"?>

    , где XXX.xsl имя xslt преобразования. Затем открываем xml через Excel

Просмотр лога и xml для concurrent`а

Для удобного доступа к логу и 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;
/