Архив

Архив автора

SYS_CONTEXT

15 Февраль 2012 Нет комментариев

Стандартная функция SYS_CONTEXT служит для получения атрибутов контекста.
Пример использования SYS_CONTEXT для получения общей информации:

select SYS_CONTEXT('USERENV', 'TERMINAL') terminal
      ,SYS_CONTEXT('USERENV', 'LANGUAGE') language
      ,SYS_CONTEXT('USERENV', 'LANG') lang     
      ,SYS_CONTEXT('USERENV', 'SESSIONID') sessionid
      ,SYS_CONTEXT('USERENV', 'INSTANCE') instance
      ,SYS_CONTEXT('USERENV', 'ENTRYID') entryid
      ,SYS_CONTEXT('USERENV', 'ISDBA') isdba
      ,SYS_CONTEXT('USERENV', 'NLS_TERRITORY') nls_territory
      ,SYS_CONTEXT('USERENV', 'NLS_CURRENCY') nls_currency
      ,SYS_CONTEXT('USERENV', 'NLS_CALENDAR') nls_calendar
      ,SYS_CONTEXT('USERENV', 'NLS_DATE_FORMAT') nls_date_format
      ,SYS_CONTEXT('USERENV', 'NLS_DATE_LANGUAGE') nls_date_language
      ,SYS_CONTEXT('USERENV', 'NLS_SORT') nls_sort
      ,SYS_CONTEXT('USERENV', 'CURRENT_USER') current_user
      ,SYS_CONTEXT('USERENV', 'CURRENT_USERID') current_userid
      ,SYS_CONTEXT('USERENV', 'CURRENT_SCHEMAID' ) current_schemaid
      ,SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA' ) current_schema
      ,SYS_CONTEXT('USERENV', 'SESSION_USER') session_user
      ,SYS_CONTEXT('USERENV', 'SESSION_USERID') session_userid
      ,SYS_CONTEXT('USERENV', 'PROXY_USER') proxy_user
      ,SYS_CONTEXT('USERENV', 'PROXY_USERID') proxy_userid
      ,SYS_CONTEXT('USERENV', 'DB_DOMAIN') db_domain
      ,SYS_CONTEXT('USERENV', 'DB_NAME') db_name
      ,SYS_CONTEXT('USERENV', 'HOST') host
      ,SYS_CONTEXT('USERENV', 'OS_USER') os_user
      ,SYS_CONTEXT('USERENV', 'EXTERNAL_NAME') external_name
      ,SYS_CONTEXT('USERENV', 'IP_ADDRESS') ip_address
      ,SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') network_protocol
      ,SYS_CONTEXT('USERENV', 'BG_JOB_ID') bg_job_id
      ,SYS_CONTEXT('USERENV', 'FG_JOB_ID') fg_job_id
      ,SYS_CONTEXT('USERENV', 'AUTHENTICATION_TYPE') authentication_type
      ,SYS_CONTEXT('USERENV', 'AUTHENTICATION_DATA') authentication_data
      ,SYS_CONTEXT('USERENV', 'CURRENT_SQL') current_sql
      ,SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') client_identifier
      ,SYS_CONTEXT('USERENV', 'GLOBAL_CONTEXT_MEMORY') global_context_memory
from dual

Oracle® Database SQL Language Reference
11g Release 2 (11.2): Table 5-11 Predefined Parameters of Namespace USERENV

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

Java Concurrent Program

10 Январь 2012 1 комментарий

Java Concurrent Program
Как создать Java Concurrent Program:

  1. Создать директорию $FND_TOP/java/cp/request (желательное, но не обязательное место)
  2. Скопировать java класс
  3. Скомпилировать java класс
  4. Регистрируем Concurrent Program Executable
    • Метод выполнения: Параллельная программа JAVA
    • Имя исполняемого файла указываем без формата файла
  5. Регистрируем Concurrent Program
    • Поле формат = Текст
    • Для параметров заполняем также идентификаторы (token)

Шаблон java класса

================= Template.java===========================
package oracle.apps.fnd.cp.request;
// Change the package name to the required one.
// import all the other required classes/packages.

import oracle.apps.fnd.util.*;
import oracle.apps.fnd.cp.request.*;

// Change the name of the class from Template to your concurrent program
// class name
public class Template implements JavaConcurrentProgram
{
/** Optionally provide class constructor without any arguments.
* If you provide any arguments to the class constructor then while
* running the program will fail.
*/

public void runProgram(CpContext pCpContext)
{
  ReqCompletion lRC = pCpContext.getReqCompletion();
  String CompletionText = "";

  /* Code your program logic here.
  * Use getJDBCConnection method to get the connection object for any
  * JDBC operations.
  * Use CpContext provided commit,rollback methods to commit/rollback
  * data base transactions.
  * Don't forget to release the connection before returning from this
  * method.
  */

  /* Call setCompletion method to set the request completion status and
  * completion text.
  * Status values are ReqCompletion.NORMAL,ReqCompletion.WARNING,
  * ReqCompletion.ERROR.
  * Use Completion text message of length 240 characters. If it is more
  * than 240 then full string will appear in log file and truncated 240
  * characters will be used as request completion text.
  */
  lRC.setCompletion(ReqCompletion.NORMAL, CompletionText);
}

}
==================End of Template.java===========================

Читать дальше про “Java Concurrent Program” »

Список группы запросов для параллельных программ

10 Январь 2012 Нет комментариев

Простой, но довольно полезный запрос для определения группы запросов параллельной программы.

select  rg.request_group_name
      , rg.description
      , cp.concurrent_program_name
      , cp.user_concurrent_program_name
  from fnd_request_group_units    rgu
     , fnd_concurrent_programs_vl cp
     , fnd_request_groups         rg
 where 1=1
       -- rg
       and rg.request_group_id=rgu.request_group_id
       -- cp
       and cp.concurrent_program_id=rgu.request_unit_id
       and cp.application_id=rgu.unit_application_id
       and cp.concurrent_program_name like 'XX%'
order by rg.request_group_name, cp.concurrent_program_name

HOST BASED CONCURRENT PROGRAM

26 Декабрь 2011 1 комментарий

Как создать concurrent основаный на sh скрипте:

  1. Создаем скрипт, расширение файла указываем .prog
  2. Скрипт должен находиться в директории $XX_TOP/bin
  3. Выставляем права на выполнение для файла скрипта
  4. Создаём ссылку fndcpesr: ln -s $FND_TOP/bin/fndcpesr $XX_TOP/bin/filename.
    Название скрипта указываем без расширения
  5. Регистрируем Concurrent Program Executable
  6. Регистрируем Concurrent Program
  7. Добавляем в полномочия
  8. Возможно, надо будет перегрузить concurrent manager:
    $ADMIN_SCRIPTS_HOME/adcmctl.sh stop apps/apps
    $ADMIN_SCRIPTS_HOME/adcmctl.sh start apps/apps

Первые 4 параметра передаваемые в скрипт, служебные:

#!/bin/sh
 p_orauser_pwd=${1}
 p_user_id=${2}
 p_user_name=${3}
 p_request_id=${4}

 echo "p_orauser_pwd=${p_orauser_pwd}"
 echo "p_user_id=${p_user_id}"
 echo "p_user_name=${p_user_name}"
 echo "p_request_id=${p_request_id}"

 ...

Ссылка на metalink: How To Setup A Custom Concurrent Host Program [ID 147455.1]

Объединенный скрипт создания пользователя

15 Декабрь 2011 Нет комментариев

oebs_create_user
Объединенный скрипт создания пользователя включает в себя

  1. Создание пользователя
  2. Заполнение профилей
  3. Добавление полномочий

Читать дальше про “Объединенный скрипт создания пользователя” »

R12: таблицы HZ (Заказчики)

14 Декабрь 2011 Нет комментариев

Рассмотрим назначение основных HZ таблиц и связи между ними.



HZ_PARTIES

Содержит основную информацию о сущностях (сторонах). Разные сущности могу иметь одинаковое имя.

Типы сущностей

  1. Person — лицо
  2. Organization — организация
  3. Group — группа
  4. Relationship — отношение
Поле Описание
PARTY_ID (PK) ID сущности
PARTY_NUMBER (PK) Номер  сущности
PARTY_NAME Имя  сущности
PARTY_TYPE Тип  сущности

Читать дальше про “R12: таблицы HZ (Заказчики)” »

API добавления полномочия для пользователя

3 Ноябрь 2011 2 comments

С помощью данного API можно добавить полномочие пользователю

begin
  -- Call the procedure
  fnd_user_pkg.addresp(username       => :username,
                       resp_app       => :resp_app,
                       resp_key       => :resp_key,
                       security_group => :security_group, -- в основном 'STANDARD'
                       description    => :description,    -- любой коммент
                       start_date     => :start_date,
                       end_date       => :end_date);
  commit;                    
  dbms_output.put_line('Responsibility Added Successfully');
exception
 when others then
   dbms_output.put_line(' Responsibility is not added due to ' 
                        || substr(SQLERRM, 1, 100));
   rollback;
end;

И весьма полезный скрипт, c помощью которого можно быстро перетянуть полномочия с одного инстанса на другой.
Читать дальше про “API добавления полномочия для пользователя” »

Как посмотреть OPP service log

При выполнении concurrent request в Oracle E-business suite, который строится с использованием XML Publisher, можно столкнуться с тем что concurrent завершается со статусом Warning.

В логе будет следующая запись:

+————- 1) PUBLISH ————-+
Запуск заключительной обработки запроса 565518 в узле PART4: 03-НОЯ-2011 10:37:15.
Ошибка заключительной обработки запроса 565518: 03-НОЯ-2011 10:37:15. Сообщение об ошибке:
One or more post-processing actions failed. Consult the OPP service log for details.
+—————————————+

Эта запись говорит о том, что по каким-то причинам не смог прицепиться шаблон отчета.

Читать дальше про “Как посмотреть OPP service log” »

Иерархия организаций

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

Запрос для вывода иерархии организаций.
Список существующих иерархий можно увидеть в таблице hr.per_organization_structures.

 SELECT LPAD(' ', 10 * (LEVEL - 1)) || org.name hierarchy,
       org.organization_id
  FROM hr_all_organization_units org, per_org_structure_elements pose
 WHERE 1 = 1
   AND org.organization_id = pose.organization_id_child
   AND pose.org_structure_version_id = &p_structure_version_id
-- START WITH org.organization_id =
CONNECT BY PRIOR pose.organization_id_child = pose.organization_id_parent
 ORDER SIBLINGS BY org.location_id, pose.organization_id_child;