帆軟數(shù)據(jù)集權(quán)限參數(shù)寫法

這樣一個(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ù)


    image.png

    image.png
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è)置


image.png

用公司下拉框


image.png

控件值用函數(shù)
image.png

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ù)字典


image.png

這樣就如果用戶為分公司角色舰罚,則數(shù)據(jù)集只能取出該用戶的公司名纽门,假如用戶為集團(tuán)角色,則取出所有的公司名营罢。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赏陵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饲漾,更是在濱河造成了極大的恐慌蝙搔,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考传,死亡現(xiàn)場(chǎng)離奇詭異吃型,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)僚楞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門勤晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泉褐,你說我怎么就攤上這事赐写。” “怎么了膜赃?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵挺邀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)悠夯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任躺坟,我火速辦了婚禮沦补,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咪橙。我一直安慰自己夕膀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布美侦。 她就那樣靜靜地躺著产舞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菠剩。 梳的紋絲不亂的頭發(fā)上易猫,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音具壮,去河邊找鬼准颓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棺妓,可吹牛的內(nèi)容都是我干的攘已。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼怜跑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼样勃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起性芬,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤峡眶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后植锉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幌陕,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年汽煮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搏熄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暇赤,死狀恐怖心例,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鞋囊,我是刑警寧澤止后,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響译株,放射性物質(zhì)發(fā)生泄漏瓜喇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一歉糜、第九天 我趴在偏房一處隱蔽的房頂上張望乘寒。 院中可真熱鬧,春花似錦匪补、人聲如沸伞辛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚤氏。三九已至,卻和暖如春踊兜,著一層夾襖步出監(jiān)牢的瞬間竿滨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工捏境, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姐呐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓典蝌,卻偏偏與公主長(zhǎng)得像曙砂,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骏掀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容