這樣一個(gè)要求:當(dāng)用戶為集團(tuán)公司用戶時(shí)稼病,可以看到所有公司的數(shù)據(jù)选侨,當(dāng)用戶為子公司用戶時(shí),只能看到本公司數(shù)據(jù)然走,而且子公司用戶存在跨公司兼職的情況援制,就是說存在跨公司兼職的用戶,可以看到對(duì)應(yīng)公司的數(shù)據(jù)丰刊。
select replace(name,'-基準(zhǔn)賬簿','') from org_accountingbook
where (replace(name,'-基準(zhǔn)賬簿','') in ('${aaa}') or '集團(tuán)' = '${bbb}')
我們知道當(dāng)條件中存在OR則表示一真為真隘谣,假如參數(shù)bbb='集團(tuán)',那么where '集團(tuán)'='集團(tuán)' 成立啄巧,相當(dāng)于取出所有公司的值寻歧。
而當(dāng)'集團(tuán)' = '${bbb}',bbb參數(shù)為'A公司',那么'集團(tuán)' = 'A公司'不成立秩仆,則需要看aaa參數(shù)的寫法了码泛。
aaa
JOINARRAY(GetRoleCompany(GETUSERDEPARTMENTS(),"集團(tuán)","公司"),"','")
bbb
GetRoleCompany(GETUSERDEPARTMENTS(),"集團(tuán)","公司")
-
只有GetRoleCompany函數(shù)為自定義函數(shù)
package com.fr.function;
import com.fr.general.FArray;
import com.fr.script.AbstractFunction;
/**
* 自定義函數(shù)
*/
public class GetRoleCompany extends AbstractFunction {
/**
* @param args
* 函數(shù)的參數(shù),是經(jīng)過了算子處理了其中特殊參數(shù)的
* @return 經(jīng)過函數(shù)處理的值澄耍,用于參與最終計(jì)算
*/
public Object run(Object[] args) {
if (null == args || args.length == 0) {
return "無參數(shù)";
} else if (args.length == 1) {
return args[0];
} else if (args.length == 2) {
FArray<String> list = new FArray<String>();
if (args[0] instanceof FArray) {
FArray array = (FArray) args[0];
String in = args[1].toString();
for (int i = 0; i < array.length(); i++) {
String item = array.elementAt(i).toString();
String[] str = item.split(",");
for (String s : str) {
if (s.indexOf(in) != -1) {
list.add(s);
}
}
}
} else {
String array = args[0].toString();
String in = args[1].toString();
String[] str = array.split(",");
for (String s : str) {
if (s.indexOf(in) != -1) {
list.add(s);
}
}
}
return list;
} else if (args.length == 3) {
FArray<String> list = new FArray<String>();
FArray<String> list2 = new FArray<String>();
Boolean boo = false;
if (args[0] instanceof FArray) {
FArray array = (FArray) args[0];
String in = args[1].toString();
String out = args[2].toString();
for (int i = 0; i < array.length(); i++) {
String item = array.elementAt(i).toString();
if (item.indexOf(in) != -1 && item.indexOf(out) == -1) {
boo = true;
String[] str = item.split(",");
for (String s : str) {
if (s.indexOf(in) != -1) {
list.add(s);
}
}
} else if (item.indexOf(out) != -1) {
String[] str = item.split(",");
for (String s : str) {
if (s.indexOf(out) != -1) {
list2.add(s);
}
}
} else {
list2.add("31");
}
}
} else {
String array = args[0].toString();
String in = args[1].toString();
String out = args[2].toString();
if (array.indexOf(in) != -1 && array.indexOf(out) == -1) {
boo = true;
String[] str = array.split(",");
for (String s : str) {
if (s.indexOf(in) != -1) {
list.add(s);
}
}
} else if (array.indexOf(out) != -1) {
String[] str = array.split(",");
for (String s : str) {
if (s.indexOf(out) != -1) {
list2.add(s);
}
}
} else {
list2.add("32");
}
}
if (boo) {
return list;
} else {
return list2;
}
} else {
return "4";
}
}
}
這段時(shí)java代碼噪珊,簡(jiǎn)單來說參數(shù)可以有0個(gè)參數(shù),1個(gè)參數(shù)齐莲,2個(gè)參數(shù)痢站,3個(gè)參數(shù),以及4個(gè)以上的情況选酗,
當(dāng)0個(gè)參數(shù)時(shí)阵难,返回?zé)o參數(shù)
當(dāng)1個(gè)參數(shù)時(shí),返回該參數(shù)值
當(dāng)2個(gè)參數(shù)時(shí)芒填,返回一個(gè)list列表
當(dāng)3個(gè)參數(shù)時(shí)呜叫,返回兩個(gè)列表空繁,滿足第二參數(shù)的放在list中,滿足第三參數(shù)放在list2中
當(dāng)4個(gè)及以上參數(shù)時(shí)返回 '4'
- 比較抽象朱庆,套進(jìn)實(shí)際運(yùn)用得場(chǎng)景來解釋:3個(gè)參數(shù)的場(chǎng)景
bbb為
GetRoleCompany(GETUSERDEPARTMENTS(),"集團(tuán)","公司") - 假如小張是集團(tuán)員工盛泡,GETUSERDEPARTMENTS(),返回小張所在的部門:假如取出3個(gè)角色名:
技術(shù)支持,集團(tuán),信息部
則返回集團(tuán)那么'集團(tuán)'='集團(tuán)' 成立 - 假如小紅是A公司員工娱颊,GETUSERDEPARTMENTS()傲诵,返回小張所在的部門:假如取出3個(gè)角色名:
填報(bào)人員,A公司,辦公室
則返回A公司那么'集團(tuán)'='A公司' 不成立 需要重新看參數(shù)aaa的情況
而參數(shù)aaa與參數(shù)bbb的區(qū)別只有外層的joinarray(),這是個(gè)拼接數(shù)組函數(shù)目的也是如果用戶同時(shí)存在A公司,和B公司都任職箱硕,則取出list2 假如是這樣的['A公司','B公司'] 而finereport解讀數(shù)據(jù)沒有列表這個(gè)概念掰吕,需要轉(zhuǎn)為數(shù)組,以',' 進(jìn)行拼接以符合sql語句in('A公司','B公司')
當(dāng)然帆軟的自定義函數(shù)應(yīng)用情況還是少的颅痊,碰到這種情況的話殖熟,只需要調(diào)用知道大概意思就行。
參數(shù)面板設(shè)置
用公司下拉框
控件值用函數(shù)
if(GetRoleCompany(GETUSERDEPARTMENTS(),"集團(tuán)","公司")="集團(tuán)","A公司",INDEXOFARRAY(GetRoleCompany(GETUSERDEPARTMENTS(),"集團(tuán)","公司"),1))
假如獲取的員工部門角色為集團(tuán)斑响,則用A公司作為默認(rèn)值菱属,否則用改員工做在的第一個(gè)公司作為默認(rèn)值。
數(shù)據(jù)集用數(shù)據(jù)字典
這樣就如果用戶為分公司角色舰罚,則數(shù)據(jù)集只能取出該用戶的公司名纽门,假如用戶為集團(tuán)角色,則取出所有的公司名营罢。