четверг, 10 апреля 2014 г.

Multy check box for big table

1. Открываем EO VO на основе таблицы с большим количеством записей

2. В EO добавляем атрибут Attr (Transient, boolean, NUMBER, editable allways)

3. Добавляем Attr в VO

4. Создаем session bean StateHolderBean.java


public class StateHolderBean {
    private MyCheckBoxHolder valholder = new MyCheckBoxHolder();

    public void setValholder(StateHolderBean.MyCheckBoxHolder valholder) {
        this.valholder = valholder;
    }

    public StateHolderBean.MyCheckBoxHolder getValholder() {
        return valholder;
    }

    public StateHolderBean() {
        super();
    }


    private class MyCheckBoxHolder extends HashMap<Object, Boolean> {
        @Override
        public Boolean get(Object key) {

            //System.out.println("getting key "+key+" val "+super.get(key));
            if (!this.containsKey(key) && this.containsKey("allselect")) {
                return super.get("allselect");
            }
            if (super.get(key) == null) {
                return false;
            }
            return super.get(key);
        }

        @Override
        public Boolean put(Object key, Boolean b) {
            System.out.println("Putting key: " + key + " val " + b);
            if (b != null && key != null) {

                return super.put(key, b);
            } else {
                return super.put(key, false);
            }
        }
    }
}


5. Создаем форму untitlead1.jspx с таблицей

6. Создаем view bean untitlead1B.java

7. Байндим таблицу t1 на t1 в untitlead1B
#{viewScope.untitlead1B.t1}

8. В форме у checkbox Attr ставим в Value
value="#{StateHolderBean.valholder[row.bindings.EmployeeId.inputValue]}"

и выставляем autoSubmit="true"

9. process


    public  String process() {
        HashMap checkval = (HashMap) getValueObject("#{InOperationsB.valholder}");
        Iterator it = checkval.entrySet().iterator();
        while (it.hasNext())  {
            Map.Entry pairs = (Map.Entry)it.next();
            System.out.println(pairs.getKey()+" : "+pairs.getValue());
        }
       return  null;
    }








  

вторник, 18 марта 2014 г.

Валидация поля номера счета


    public void onEdateToValidation(FacesContext facesContext, UIComponent uIComponent, Object object) {
            if (object != null)
            {
              String name = object.toString();
              //      String expression = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
              String expression = "[0-9]{1,20}";
              CharSequence inputStr = name;
              Pattern pattern = Pattern.compile(expression);
              Matcher matcher = pattern.matcher(inputStr);
              String msg = "Кореспондентский счет может содержать только цифры. Длинна поля - в точности 20 символов.";
              if ((matcher.matches() && inputStr.length() == 20) || name.isEmpty())
              {

              }
              else
              {
                throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, null));
              }
            }
    }

вторник, 25 февраля 2014 г.

ADF_FACES-60097- Oracle ADF

ADF_FACES-60097- Oracle ADF





Possible Causes- 
  • Mainly occurs in editable af:table
  • Problem with Primary Key
  • af:column's component's property is being used in any EL, inside or outside of table
        Exp- #{row.bindings.xyz.inputValue==0} 
  • Updateable primary key, and autosubmit true
Possible Solution -
  • Never use primary key as updateable column in af:table, if you have to use then remove primary key from Entity Object
  • Try to validate in RowImpl instead of Expression of Table
  • Surrogate Primary Key
  • Avoid LOV (List of Values) on primary key
  • Change Event Policy of af:table and iterator to none
    these solutions are not rules or conventions, you can only try , and may one of it will work for you

среда, 19 февраля 2014 г.

Invoking af:exportCollectionActionListener from Java

ADF_FACES-60003:Компонент с идентификатором r9:0:r1:0:pc1:t1 не зарегистрирован для активных данных

В общем, хуйня. Выгрузку в Эксель нужно писать на java  ручками.

----

Напоролся на ошибку ADF_FACES-60003:Компонент с идентификатором r9:0:r1:0:pc1:t1 не зарегистрирован для активных данных

Она возникла при попытке перейти на другую страницу, после того как на первой был выполнен вывод данных в Excel файл.

ссыль с инфой о вркароунд:
http://tompeez.wordpress.com/2011/11/16/jdev-11-1-2-1-0-dealing-with-adf_faces-60003-error-component-with-id-r11cb1-not-registered-for-active-data/


Из той же оперы:
Automatic PPR stops working in jdev 11.1.2.x when using an af:exportCollectionActionListener

ссылка ADFEMG-65

WORKAROUND: навесить partial triggers на кнопку вызова экспорта в Excel на таблицы где возникает ошибка.



воскресенье, 2 февраля 2014 г.

Создание коннекции к БД

1. В WLS создаем коннекцию с именем jndi/rkoDS


2. Настраиваем коннекцию для модуля


3. В свойствах приложения убираем галочку синхронизации



4. Свойства коннекции передаются в файле <имя коннекции>_jdbc.xml


четверг, 30 января 2014 г.

Ограничение кол-ва выводимых строк





        oracle.jbo.domain.Number n = new oracle.jbo.domain.Number(maxrows);
        TrInOperationsEOViewImpl v = (TrInOperationsEOViewImpl)this.getVoImpl();
        v.setbndMaxRows(n);



В классе TrInOperationsEOViewImpl должна быть определена 

    /**
     * Sets <code>value</code> for bind variable bndMaxRows.
     * @param value value to bind as bndMaxRows
     */
    public void setbndMaxRows(Number value) {
        setNamedWhereClauseParam("bndMaxRows", value);
    }

понедельник, 20 января 2014 г.

Переход на 12с

1. Типы атрибутов boolean в отображениях поставить в default

2. Убрать фильтрацию в формах по транзиентным полям

  

среда, 15 января 2014 г.

Integrated WLS стартует с опцией -jrockit

Выдает ошибку "unrecognize option -jrockit"

чтобы устранить нужно вставить

set JAVA_VM=-server

в  setDomainEnv.com
c:\Users\roman_eremeev\AppData\Roaming\JDeveloper\system12.1.2.0.40.66.68\DefaultDomain\bin\setDomainEnv.com

понедельник, 13 января 2014 г.

ADFLogger

Чтобы заюзать нужно

1. в кодах создать логеры

    private static final ADFLogger LOGGER =
        ADFLogger.createADFLogger(SessionB.class);
    
        LOGGER.info("---I--- SessionB() was constructed");
        LOGGER.warning("---W--- SessionB() was constructed");
        LOGGER.log(ADFLogger.NOTIFICATION.INFO, "---I--- SessionB() was constructed");


2. в logging.xml настроить логеры
%JDEV_USER_DIR%\system11.1.2.1.38.60.81\
DefaultDomain\config\fmwconfig\servers\DefaultServer


3. в опциях java (свойства проекта) включить логирование
-Djbo.debugoutput=adflogger -Djbo.adflogger.level=FINEST

Можно в project Properties dialog and selecting the Run/Debug/Profile если запускается из JDev





----------------------------------------------

***** Adventures in ADF Logging - Part 1



Доступ к базе через JNDI

Делаем через JNDI

1. Настраиваем сервер WLS


2. Настроить конфигурацию модуля в приложении