[Oracle ADF] Создать программно ViewCriteria
ADFUtils лежат в репозитории Utils
UPD: Не рекомендую так делать Пусть лучше VC будет создано декларативно на VO и всегда будет видно, что к VO может быть применено VC прям в IDE.
UPD:
Можно писать сразу вот так (без всяких равно):
1
vcr1.setAttribute("AttrubuteName", input);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void applyAlphabetFilter(String input){
ViewObject vo = VOUtils.getViewObjectByName(CONSTANTS_VO.VO_NAME);
ViewCriteria vc = vo.createViewCriteria();
vc.setName(CONSTANTS_VC.VC_NAME);
ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();
vcr1.setAttribute("AttrubuteName","= " + input);
vc.add(vcr1);
vo.applyViewCriteria(vc, true);
vo.executeQuery();
VOUtils.printViewObjectInfo(vo);
VOUtils.clearViewCriteriaByName(vo, CONSTANTS_VC.VC_NAME);
AdfFacesContext.getCurrentInstance().addPartialTarget(this.myComponent);
}
AttrubuteName - Case Sensitive. Смотри его в аттрибутах ViewObject.
На самом деле, мне нужно было, чтобы начиналось с входящего параметра.
Получилось вот так:
vcr1.setAttribute("AttrubuteName", input + "%");
можно было бы сделать при необходимости и
vcr1.setAttribute("AttrubuteName", input.toUpperCase() + "%");
Еще варианты с community:
https://community.oracle.com/thread/3916170?start=0&tstart=0
1
2
3
4
5
6
7
ViewCriteria vc = yourViewObject.createViewCriteria();
ViewCriteriaRow vcRow = vc.createViewCriteriaRow();
ViewCriteriaItem vcItem = vcRow.ensureCriteriaItem("YourDateAttr");
vcItem.setOperator(JboCompOper.OPER_BETWEEN);
vcItem.getValues().get(0).setValue(first_date);
vcItem.getValues().get(1).setValue(second_date);
vc.add(vcRow);
Еще 1 рабочий вариант
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public void onMyBeanPriorityChanged (ValueChangeEvent valueChangeEvent) {
ViewObject vo = VOUtils.getViewObjectByName(CONSTANTS_VO.VO_NAME);
ViewCriteria vc = vo.createViewCriteria();
vc.setName("MyViewCriteriaName_VC");
ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();
// -----------------------------------------
ViewCriteriaItem priority = vcr1.ensureCriteriaItem("Priority");
priority.setOperator("=");
// priority.getValues().get(0).setValue(new Integer(1));
priority.getValues().get(0).setValue("1");
// -------------------------------
vc.add(vcr1);
// -------------------------------
vo.applyViewCriteria(vc);
vo.executeQuery();
}
https://docs.oracle.com/middleware/1213/adf/api-reference-model/oracle/jbo/ViewCriteria.html
Еще один пример, уже OR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ViewCriteria vc = vo.createViewCriteria();
vc.setName("MyViewCriteriaName_VC");
ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();
ViewCriteriaRow vcr2 = vc.createViewCriteriaRow();
// -----------------------------------------
// vcr1.setAttribute("Priority","= 1");
vcr1.setAttribute("Priority","IN (1,2)");
vcr2.setAttribute("Id","= 22");
// -------------------------------
vc.add(vcr1);
vc.add(vcr2);
// -------------------------------
vo.applyViewCriteria(vc);
vo.executeQuery();
Вот такой пример остался:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void myMethod(ArrayList<String> selectedListElements){
ViewObject vo = VOUtils.getViewObjectByName(CONSTANTS_VO.MY_VO);
ViewCriteria vc = vo.createViewCriteria();
vc.setName(CONSTANTS_VC.MY_VC);
if (selectedListElements.contains("1")){
ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();
vcr1.setAttribute("Priority","= 1");
vc.add(vcr1);
}
if (selectedListElements.contains("2")){
ViewCriteriaRow vcr2 = vc.createViewCriteriaRow();
vcr2.setAttribute("Priority","= 2");
vc.add(vcr2);
}
if (selectedListElements.contains("3")){
ViewCriteriaRow vcr3 = vc.createViewCriteriaRow();
vcr3.setAttribute("Priority","= 3");
vc.add(vcr3);
}
vo.applyViewCriteria(vc, true);
vo.executeQuery();
}
#№№ Чтобы выполнялось условие AND, просто добавляем аттрибуты:
1
2
vcr1.setAttribute("Priority","= 1");
vcr1.setAttribute("Priority","IN (1,2)");
Самый офигенный пример.
http://sqltech.cl/doc/oas10gR31/web.1013/b25947/bcquerying008.htm
И я даже сделал его копию
https://archive.is/rHwyD
Если нужно разобраться с named критериями (давно разобрался).
http://myadfexp.blogspot.ru/2013/04/programmatically-applying-view-criteria.html
http://sqltech.cl/doc/oas10gR31/web.1013/b25947/bcadvvo004.htm
Working with Named View Criteria Programmatically
https://www.youtube.com/watch?v=6zv7NXUsZnc
http://andrejusb.blogspot.ru/2010/03/applying-view-criteria-from-application.html
Может быть что-то есть:
http://orafmtech.blogspot.ru/2011/03/view-criteria-explained.html
https://ravindranathi.wordpress.com/tag/adf-view-criteria/
Нужно поглубже почитать:
http://adfpractice-fedor.blogspot.ru/2012/09/dynamic-view-criterias-from-where.html