Показаны сообщения с ярлыком APPS. Показать все сообщения
Показаны сообщения с ярлыком APPS. Показать все сообщения

15.06.2014

WebADI: атрибуты интерфейса

Цель: ограничивать элементы в атрибуте интерфейса (выпадающий список) в зависимости от входных параметров. В нашем примере - три атрибута CAUSE_1, CAUSE_2, CAUSE_3, содержащих один и тот же комбо-бокс. Нужно выводить только те элементы, которые актуальны на текущий момент (в параметрах интегратора вводится месяц и год)

10.06.2014

JBO-27122: SQL error during statement preparation

Ошибка появляется, если VO выполняется сначала с ограчением в n1 предикатов, затем в n2 предикатов, причем n2 < n1. Пример:
CausesVOImpl causeVO = getAm().getCausesVO1();
// первое выполнение
if (!causeVO.isPreparedForExecution()){
    causeVO.setMaxFetchSize(999);
}
causeVO.executeEmptyRowSet();
causeVO.setWhereClause("CAUSE_NUMBER > :1 and GROUP_ID = :2");
causeVO.setWhereClauseParam(0, causeNumber);
causeVO.setWhereClauseParam(1, groupId);
causeVO.executeQuery();

// второе выполнение
CausesVOImpl causeVO = getAm().getCausesVO1();
if (!causeVO.isPreparedForExecution()){
    causeVO.setMaxFetchSize(999);
}
causeVO.executeEmptyRowSet();
// causeVO.setWhereClause(null);
// causeVO.setWhereClauseParams(null);
causeVO.setWhereClause("GROUP_ID = :1");
causeVO.setWhereClauseParam(0, getEntityId());
try{
    causeVO.executeQuery();
}catch (Exception e){
    System.out.println(e.getMessage());
}
В приведенном примере ошибка возникнет при втором вызове executeQuery(). Как видим, setWhereClause и setWhereClauseParam не перекрывают ранее заданные значения.
Для устранения ошибки достаточно принудительно очистить ограничение (раскомментировать строки во втором выполнении)

09.09.2013

Канкарент на основе Java-класса

По шагам:
1. Создаем наш класс
package oracle.apps.test;

import java.io.IOException;

import java.io.PrintWriter;
import java.io.StringWriter;

import java.lang.reflect.InvocationTargetException;

import java.sql.Connection;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;

import oracle.apps.fnd.common.Message;
import oracle.apps.fnd.cp.request.CpContext;
import oracle.apps.fnd.cp.request.JavaConcurrentProgram;
import oracle.apps.fnd.cp.request.LogFile;
import oracle.apps.fnd.cp.request.ReqCompletion;

public class MyJavaTest implements JavaConcurrentProgram {
    public static final String APPLICATION_SHORT_NAME = "XXXX";
    public static final String CONCURRENT_PROGRAM_NAME = "MY_CONC_PROGRAM";
    
    private Connection connection;
    private int requestId;
    private LogFile logFile;
    private ReqCompletion reqCompletion;

    public void initialize(CpContext cpContext) throws SQLException, 
                                                       XMLParseException, 
                                                       SAXException, 
                                                       IOException, 
                                                       InstantiationException, 
                                                       IllegalAccessException, 
                                                       ClassNotFoundException, 
                                                       NoSuchMethodException, 
                                                       InvocationTargetException {
        connection = cpContext.getJDBCConnection();
        requestId = cpContext.getReqDetails().getRequestId();
        logFile = cpContext.getLogFile();
        reqCompletion = cpContext.getReqCompletion();

        Enumeration params = cpContext.getReqDetails().getParaInfo().elements();
        String Value = (String)params.nextElement();
        int fileId = Integer.parseInt(Value);
        // some code
    }

    public void runProgram(CpContext cpContext) {
        try {
            initialize(cpContext);
            // some code
            connection.commit();

            // успешное заверщение канкарента
            Message normComplMessage = new Message("FND", "CONC-CP SUCCESSFUL TERMINATION");
            reqCompletion.setCompletion(ReqCompletion.NORMAL, normComplMessage.getMessageText(cpContext.getResourceStore()));
        } catch (Exception e) {
            reqCompletion.setCompletion(ReqCompletion.ERROR, e.getMessage());
            StringWriter errStringWriter = new StringWriter();
            PrintWriter errPrintWriter = new PrintWriter(errStringWriter, true);
            e.printStackTrace(errPrintWriter);
            logFile.writeln(errStringWriter.toString(), LogFile.ERROR);
        } finally {
            cpContext.releaseJDBCConnection();
        }
    }

}
2. Создаем канкарент


10.04.2013

OAF: Реализация механизма связывания страниц train

Последовательность действий для реализации train

13.02.2013

XML Publisher: кое-что о больших отчетах

Почему стоит отказаться от гигантских отчетов.

08.08.2012

WF: Бизнес-событие и подписка на основе потока

Выполнения workflow-потока, инициируемого бизнес-событием