金蝶EAS BOS工作流開發(fā)_第1頁(yè)
金蝶EAS BOS工作流開發(fā)_第2頁(yè)
金蝶EAS BOS工作流開發(fā)_第3頁(yè)
金蝶EAS BOS工作流開發(fā)_第4頁(yè)
金蝶EAS BOS工作流開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、金蝶EAS BOS工作流開發(fā)1.  流程配置基本知識(shí)及示例1.1. 重要概念1.1.1流程變量流程變量是工作流引擎和業(yè)務(wù)系統(tǒng)的數(shù)據(jù)交互的橋梁。工作流承載業(yè)務(wù),驅(qū)動(dòng)業(yè)務(wù)流程,但是不會(huì)執(zhí)行業(yè)務(wù)。工作流中的業(yè)務(wù)執(zhí)行,全部都會(huì)委托給具體的業(yè)務(wù)模塊執(zhí)行。那么,這些被工作流分割的業(yè)務(wù)功能,在工作流中被調(diào)用執(zhí)行的時(shí)候,如何保證做操作的數(shù)據(jù)的一致性?通過流程變量,在每一步的業(yè)務(wù)功能執(zhí)行的過程中,將業(yè)務(wù)數(shù)據(jù)保存在流程變量中,那么整個(gè)流程的后續(xù)活動(dòng)中,都可以引用該流程變量,來(lái)完成業(yè)務(wù)功能,保證業(yè)務(wù)數(shù)據(jù)的一致性。例如:在憑證的審批流程中,新增憑證審批,審批的時(shí)候?yàn)槭裁纯梢哉_定為到剛剛提交的那張憑證,而不

2、是別的憑證?流程變量起到了重要的作用。在憑證新增之后,將可唯一標(biāo)示憑證的ID保存到流程變量中,在審批的時(shí)候?qū)⒘鞒套兞恐械闹祩鬟f給憑證,就可以根據(jù)這個(gè)ID獲取到一張憑證了。流程變量在流程實(shí)例的生命周期內(nèi)都是有效的。1.1.2任務(wù)輸入輸出         任務(wù)輸入:在業(yè)務(wù)發(fā)生之前,有工作流傳遞給業(yè)務(wù)的數(shù)據(jù)。以憑證的過賬為例,某個(gè)用戶收到一條憑證過賬的消息,雙擊消息處理。在雙擊之后、憑證的界面彈出之前,工作流會(huì)把定義的入口參數(shù)變量中的值傳遞給憑證,憑證根據(jù)這個(gè)值來(lái)展現(xiàn)特定的單據(jù),展現(xiàn)特定的功能。  &

3、#160;      任務(wù)輸出:在業(yè)務(wù)發(fā)生之后,由業(yè)務(wù)系統(tǒng)傳遞給工作流,需要保存在流程變量中的數(shù)據(jù)。仍以憑證過賬為例,在用戶操作完憑證過賬之后,工作流繼續(xù)流轉(zhuǎn)之前,如果流程定義中定義了任務(wù)的輸出,那么,就會(huì)將憑證對(duì)應(yīng)的屬性的數(shù)據(jù),保存在流程變量中。已備在后續(xù)的流程活動(dòng)中使用。1.2. 注意事項(xiàng)l   繪畫工作流圖之前一定要先將業(yè)務(wù)流整理清楚,分析業(yè)務(wù)流的特性,提取可以抽象出來(lái)公用的東西,分析是否可以進(jìn)行優(yōu)化等,好的業(yè)務(wù)流程可以直接映射為工作流流程。l   利用“流程變量”的威力,建立單據(jù)和流程之間數(shù)據(jù)交換

4、的橋梁。輸入輸出參數(shù)用來(lái)在流程和單據(jù)之間進(jìn)行數(shù)據(jù)的傳遞。輸入輸出參數(shù)和流程變量搭建了流程和單據(jù)之間的數(shù)據(jù)聯(lián)系通道。l   流程變量賦值時(shí)需注意:變量是否在另外地方被改變,有子流程時(shí)變量關(guān)系如何匹配,對(duì)應(yīng)的是否正確,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的變量是否正確,不同的節(jié)點(diǎn)可能對(duì)應(yīng)不同的單據(jù)id,給變量賦值時(shí)需特別細(xì)心。l   如存在一些系統(tǒng)預(yù)定義功能無(wú)法滿足的需求,可以采用自己開發(fā)功能,根據(jù)輸入?yún)?shù)和輸出參數(shù)來(lái)與工作流交互,如在單據(jù)中增加function,綁定到自動(dòng)節(jié)點(diǎn)執(zhí)行,或者是利用腳本節(jié)點(diǎn),獲取一些有用的信息輸出到流程變量中在工作流中使用。還可以利用工作流的一些新增功能

5、,比如利用函數(shù)節(jié)點(diǎn),BOTP節(jié)點(diǎn)等來(lái)執(zhí)行特殊需求。l   參與人動(dòng)態(tài)變化或根據(jù)條件變化時(shí),可以充分利用“參與人變量”作為動(dòng)態(tài)值,變量的值可以通過各種方式獲取,比如腳本式(后置腳本或腳本活動(dòng))、或者任務(wù)輸出屬性方式等。(流程變量中可以定義類型為參與人的變量)l   利用條件參與人設(shè)置一些動(dòng)態(tài)的參與人場(chǎng)景。比如當(dāng)某條件滿足時(shí),設(shè)置為某些參與人,當(dāng)條件不滿足或?yàn)榱硗馇闆r時(shí),設(shè)置為另外的參與人,通過條件參與人和參與人變量可以滿足大部分復(fù)雜的參與人場(chǎng)景。條件參與人的參與人范圍還可以做為運(yùn)行期指定下一步活動(dòng)的參與人范圍。l   善于利用路由節(jié)點(diǎn),

6、除了可設(shè)置模式外,還可以對(duì)流程圖進(jìn)行美化。l   一些公用的業(yè)務(wù)邏輯可以單獨(dú)抽取出來(lái)配置為子流程給其他流程共用,減少維護(hù)的流程數(shù)量,比如一些常用的審批流程等。1.3. 基本流程的配置示例1.3.1單流程說明:流程只有一個(gè)人工型活動(dòng),完成憑證提交的任務(wù),流程結(jié)束。沒有具體的業(yè)務(wù)含義。以憑證提交的業(yè)務(wù)為例。流程圖如下:定義步驟:1、 拖入開始、結(jié)束活動(dòng)2、 拖入人工型活動(dòng),用連接弧連接起來(lái)。3、 定義人工型活動(dòng)首先,定義人工型活動(dòng)的任務(wù),選擇任務(wù)        

7、0;選定任務(wù)后,定制任務(wù)的輸入輸出。          輸入?yún)?shù)是由任務(wù)定義帶出的        根據(jù)任務(wù)輸入的意義,指的是在憑證提交之前,由工作流告知憑證的數(shù)據(jù)。新建一個(gè)流程變量,綁定該輸入。         這里綁定的意思是:在提交之前,工作流會(huì)將billID這個(gè)流程變量中的數(shù)據(jù)傳遞給業(yè)務(wù)。業(yè)務(wù)拿到這個(gè)值之后,會(huì)根據(jù)業(yè)務(wù)需要做出判斷。

8、         說明所有人工型任務(wù)的輸入?yún)?shù),全部是在定義任務(wù)的時(shí)候就定義好的。每個(gè)任務(wù)的輸出參數(shù)可能不同,是由于各個(gè)不同的業(yè)務(wù)系統(tǒng)對(duì)于業(yè)務(wù)開始之前,所需要的數(shù)據(jù)不同導(dǎo)致。但是在EAS系統(tǒng)中,基本上任務(wù)的輸入?yún)?shù)只有一個(gè)BOID類型的參數(shù)。這是因?yàn)橐话銇?lái)說,通過這樣一個(gè)類型的值,就可以完全定位一個(gè)業(yè)務(wù)單據(jù),并且拿到這個(gè)業(yè)務(wù)單據(jù),就可以滿足大部分的業(yè)務(wù)需求了。         這里,將ID屬性輸出,并且選定輸出的流程變量是billID&

9、#160;        憑證提交完畢后,將可以唯一標(biāo)示一張憑證的ID屬性保存在流程變量billID中,在后續(xù)的活動(dòng)中,如果還需要操作這張憑證,就可以通過billID來(lái)唯一定位這張憑證,保證業(yè)務(wù)的一致性。         參與人定義中,分為了默認(rèn)參與人和條件參與人。工作流在獲取執(zhí)行人的時(shí)候,首先根據(jù)條件來(lái)逐個(gè)掃描條件參與人,發(fā)現(xiàn)沒有符合,那么會(huì)取默認(rèn)參與人。      

10、0;  這里簡(jiǎn)單處理,選擇任意人。          提交就可以匹配到該流程         到現(xiàn)在為止,這條簡(jiǎn)單的流程就已經(jīng)定義完畢。發(fā)布。到EAS中提交憑證,然后到工作流監(jiān)控中,會(huì)發(fā)現(xiàn)有一條流程實(shí)例,并且狀態(tài)是已完成。1.3.2審批流程說明:?jiǎn)螕?jù)提交之后,經(jīng)過一層審批,流程結(jié)束。以憑證為示例。流程圖如下  定義步驟:1、  同場(chǎng)景1.3.1拖入活動(dòng)2、  增加一個(gè)審批活動(dòng),

11、如圖畫連接弧3、  配置提交活動(dòng)。和場(chǎng)景1.3.1中一樣選擇任務(wù),參與人也是任意人。但是任務(wù)的輸出奪一項(xiàng)。由于在后續(xù)的消息中想展現(xiàn)出單據(jù)的編碼,所以多輸出一個(gè)單據(jù)編碼到一個(gè)流程變量number中 4、  配置審批活動(dòng)。為了方便測(cè)試,參與人設(shè)定為流程發(fā)起人的本人 這一部分,就是任務(wù)輸入。對(duì)于現(xiàn)在的場(chǎng)景,審批憑證,那么在業(yè)務(wù)單據(jù)內(nèi)碼這一欄選中billID。此時(shí)billID已經(jīng)在提交之后,保存了剛剛提交的憑證的ID。一旦這個(gè)審批任務(wù)發(fā)生執(zhí)行,那么,在執(zhí)行前,工作流會(huì)將billID這個(gè)變量中保存的值傳給業(yè)務(wù)系統(tǒng)。那么審批時(shí)就可以唯一定位到一條業(yè)務(wù)單據(jù)。任務(wù)輸出,

12、選擇將審批結(jié)果輸出到一個(gè)枚舉型的流程變量 審批結(jié)果 中。         定制審批消息 流程定義完畢。發(fā)布,在EAS中執(zhí)行。         提交憑證,在消息中心收到一條消息,審批,通過。然后回到憑證序時(shí)簿,察看該流程,發(fā)現(xiàn),憑證的狀態(tài)還是“提交”而不是“審核”。              

13、0;   這是因?yàn)楣ぷ髁髦械亩鄻O審批,只是單純的驅(qū)動(dòng)流程,做一個(gè)選擇而已,不會(huì)修改業(yè)務(wù)數(shù)據(jù)。         為了能夠讓憑證打上審批標(biāo)記,按照如下方式修改流程定義                   最后的這個(gè)自動(dòng)活動(dòng),就完成給憑證打?qū)徍藰?biāo)記的功能。      

14、0;  任務(wù)選擇如下:保存、發(fā)布,再到EAS中執(zhí)行一下。發(fā)現(xiàn)審批狀態(tài)打上了。1.3.3帶分支的審批流程說明:審批通過,則打?qū)徟鸂顟B(tài)。審批不通過,返回修改。仍以憑證為例。流程定義如下:         定義步驟1、  提交、審批、自動(dòng)節(jié)點(diǎn)的設(shè)置和場(chǎng)景2中一樣。2、  增加一個(gè)人工型活動(dòng),修改。選擇的任務(wù)和“提交”一樣。但是由于單據(jù)的ID和單據(jù)的編碼是新增的時(shí)候就定好的,無(wú)法修改。所以只需要定義任務(wù)輸入就可以了,不需要定義任務(wù)輸出。    

15、             誰(shuí)提交的誰(shuí)修改,參與人設(shè)置為流程發(fā)起人本人          定制修改消息  3、  編輯連接弧首先編輯“審批”到“自動(dòng)”的連接弧。  建模工具會(huì)自動(dòng)根據(jù)之前的定義識(shí)別枚舉,然后將枚舉的值也會(huì)自動(dòng)列在選擇范圍內(nèi)。然后編輯“審批”到“修改”的連接弧。按照如下方式設(shè)置條件保存。流程定制完畢。發(fā)布。 

16、0;       說明業(yè)務(wù)單據(jù)一旦進(jìn)入工作流,就要受到工作流的約束。例如,剛剛提交完憑證,流程執(zhí)行到審批節(jié)點(diǎn)。這個(gè)時(shí)候工作流要求的行為是“某個(gè)人執(zhí)行審批操作”。如果這個(gè)時(shí)候修改憑證,會(huì)提示:“已在工作流處理中,任務(wù)不匹配”。1.4. 常見的流程配置需求1.4.1配置參與人1.4.2配置多級(jí)審批管理員收到申請(qǐng)單后,傳給多個(gè)領(lǐng)導(dǎo)。由各領(lǐng)導(dǎo)分別進(jìn)行審批,審批不通過的要能夠來(lái)回進(jìn)行審批。直到審批通過,也即是多級(jí)審批,每級(jí)審批不通過回到相應(yīng)的審批節(jié)點(diǎn)繼續(xù)進(jìn)行審批。 流程配置面對(duì)此種問題首先想到的應(yīng)該是通過流程變量來(lái)設(shè)置審批節(jié)點(diǎn)的標(biāo)志,

17、在每級(jí)審批節(jié)點(diǎn)完成后設(shè)置一個(gè)標(biāo)志,標(biāo)志目前走到那個(gè)審批級(jí)別,如果不通過,根據(jù)流程變量上審批標(biāo)志的值直接回到此審批節(jié)點(diǎn)。具體配置請(qǐng)查看下面截圖:完整流程圖綜合處審批節(jié)點(diǎn)后置腳本總結(jié):充分利用流程變量作為流程流轉(zhuǎn)的條件 1.4.3函數(shù)節(jié)點(diǎn)需要重復(fù)使用某些腳本,希望能減低腳本維護(hù)的復(fù)雜度,同時(shí)提高腳本的復(fù)用率和使用效率。解決辦法已經(jīng)內(nèi)置了函數(shù)節(jié)點(diǎn)的支持,函數(shù)節(jié)點(diǎn)本質(zhì)上和腳本節(jié)點(diǎn)沒有任何區(qū)別,所處理的任務(wù)和職責(zé)都是一樣,但腳本節(jié)點(diǎn)腳本散落在流程中各個(gè)地方,維護(hù)和使用非常困難。函數(shù)節(jié)點(diǎn)的目的就是為了減低流程配置中腳本維護(hù)的復(fù)雜度和可重用性低的問題。具體使用請(qǐng)參考如下的說明:在工具菜單 窗口-&

18、gt;顯示視圖,查找選擇工作流視圖組->函數(shù)定義 點(diǎn)擊確定后會(huì)出現(xiàn)函數(shù)定義的界面,其中已經(jīng)內(nèi)置了一些函數(shù),雙擊選擇的某個(gè)函數(shù)可以打開函數(shù)編輯界面  函數(shù)編輯界面,在此可以定義函數(shù)的輸入輸出以及一些描述性的說明,并可在編輯框內(nèi)輸入具體的代碼(目前支持KScript和java代碼),代碼其實(shí)就是腳本。  然后定義工作流,在流程定義中增加一個(gè)函數(shù)節(jié)點(diǎn)。 在函數(shù)任務(wù)界面選擇函數(shù)定義,會(huì)彈出函數(shù)定義選擇界面,選擇合適的函數(shù)即可。 在函數(shù)任務(wù)界面配置好函數(shù)的輸入輸出參數(shù)即可在流程中使用此函數(shù)的輸出值。如需自己定義函數(shù),直接在函數(shù)視

19、圖中按照右鍵菜單提示進(jìn)行操作即可。 1.4.4用流程變量配置條件參予人員工提交單據(jù)后,進(jìn)行第一級(jí)審批,第一級(jí)審批參與人設(shè)置條件:如果是提交單據(jù)的是財(cái)務(wù)部員工,則參與人為財(cái)務(wù)部某一職員進(jìn)行審批,如果不是財(cái)務(wù)部提交的單據(jù),則提交人所在部門(歸口部門)的直接上級(jí)進(jìn)行審批,如果直接上級(jí)是部門負(fù)責(zé)人則上級(jí)審批完成流程就繼續(xù)往下走,如果直接上級(jí)不是部門的負(fù)責(zé)人則還需要部門的負(fù)責(zé)人進(jìn)行審批。 配置步驟:首先畫出流程草圖,將大致的圖形先畫出來(lái)。在提交單據(jù)節(jié)點(diǎn)輸出提交人的部門到流程變量“歸口部門”,并在后置腳本中根據(jù)歸口部門的值設(shè)置流程變量“是否財(cái)務(wù)部”的值。在審批節(jié)點(diǎn)設(shè)置條件參與人,根據(jù)流

20、程變量 “是否財(cái)務(wù)部”來(lái)設(shè)置相關(guān)的條件參與人,并將審批人輸出到流程變量“審批人”中。在審批節(jié)點(diǎn)后設(shè)置一腳本節(jié)點(diǎn)->負(fù)責(zé)人判斷,用來(lái)判斷上級(jí)審批的人員是否是部門負(fù)責(zé)人。如果是則流程結(jié)束。如果不是則繼續(xù)在部門內(nèi)多級(jí)審批,直到部門負(fù)責(zé)人審批完成(循環(huán)過程)。負(fù)責(zé)人判斷的腳本內(nèi)容為:是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal(_bosContext,審批人,歸口部門);其中,是否為部門負(fù)責(zé)人,審批人,歸口部門為流程變量。 最終流程如下:總結(jié):充分利用了條件參與人與流程變量,并

21、通過腳本來(lái)獲取流程必須的信息。   2.  工作流腳本2.1.JAVA腳本在工作流中經(jīng)常會(huì)需要使用到一些腳本來(lái)獲取單據(jù)的信息或者是執(zhí)行一些特殊的操作,腳本應(yīng)如何寫?需要注意那些地方?有沒有更好的定義和使用方法? 解決方法工作流腳本利用的是java語(yǔ)法,所有的java代碼都可以被工作流解析,但所有的類必須是全路徑名稱(除了java.lang.*包下的類),如List 必須寫成java.util.List。在工作流中內(nèi)置了一些變量和函數(shù)可以進(jìn)行使用,如:“_bosContext”內(nèi)置變量表示服務(wù)端的context。在工作流腳本中可以直接使用定義好的

22、流程變量,腳本執(zhí)行過程中會(huì)將腳本的值自動(dòng)賦值給相應(yīng)的流程變量。在內(nèi)置函數(shù)節(jié)點(diǎn)可以用來(lái)封裝腳本,減輕腳本維護(hù)的復(fù)雜度和提高可重用性。工作流中內(nèi)置的一些函數(shù) 如下是一些腳本的示例:l   根據(jù)人獲取對(duì)應(yīng)主負(fù)責(zé)的行政組織腳本:首先新建一個(gè)流程變量 BOID類型 例如 orgIdString userId = ""/獲取User對(duì)象的遠(yuǎn)程控制接口com.kingdee.eas.base.permission.IUser iUser =com.kingdee.eas.base.permission.UserFactory.getLocalInstance

23、(_bosContext);com.kingdee.eas.base.permission.IUser iUser =com.kingdee.eas.base.permission.UserFactory.getLocalInstance(_bosContext);com.kingdee.eas.basedata.person.PersonInfo info =iUser.getUserInfo(new com.kingdee.bos.dao.ormapping.ObjectUuidPK(com.kingdee.bos.util.BOSUuid.read(userId).getPerson()

24、;if (info != null) String personId = info.getId().toString();.IPositionMemberiPositionMember = .PositionMemberFactory.getLocalInstance(_bosContext);.PositionMemberInfopositionMemberInfo = iPositionMember.getPosi

25、tionMemberInfo("select position.adminOrgUnit.id where person.id = '"+personId + "' and isPrimary = 1");orgId =positionMemberInfo.getPosition().getAdminOrgUnit().getId(); l   根據(jù)組織的id獲取公司的名稱,然后在條件參與人中根據(jù)此進(jìn)行判斷1、 增加一個(gè)流程變量adminId、companyId、companyNum。都是字符串型2

26、、 在新增節(jié)點(diǎn)的任務(wù)輸出中,輸出組織的ID到adminId變量中3、 增加腳本節(jié)點(diǎn),其中腳本如下:companyId = com.kingdee.eas.basedata.person.app.PersonToWFAdapter.getCompanyIdByAdminId(_bosContext,adminId);.INewOrgUnitFacadeiOrg = .NewOrgUnitFacadeFactory.getLocalInstance(_bosConte

27、xt);.CompanyOrgUnitInfofiInfo = (.CompanyOrgUnitInfo) iOrg.getDelegateUnit(companyId,.OrgType.Company);if (fiInfo != null) companyNum =fiInfo.getNumber(); l   判斷有無(wú)直接上下級(jí)的腳本首先定義一流程變量,類型為布爾:有直接上

28、級(jí)com.kingdee.bos.workflow.service.ormrpc.IEnactmentServiceservice = new com.kingdee.bos.workflow.service.ormrpc.EnactmentService(_bosContext);com.kingdee.bos.workflow.ProcessInstInfoprocInstInfos =service.getProcessInstanceByHoldedObjectId(billID.toString();com.kingdee.bos.workflow.ProcessInstI

29、nfocurProcInst = null;for (int i = 0, n =procInstInfos.length; i < n; i+) if(procInstInfosi.getState().startsWith("open.run") curProcInst =procInstInfosi;if (curProcInst != null) initUserId =curProcInst.getInitiatorId();com.kingdee.eas.basedata.person.app.PersonToWFAdapteradapter = new&

30、#160;com.kingdee.eas.basedata.person.app.PersonToWFAdapter();com.kingdee.bos.workflow.participant.Personpersons =adapter.getSupervisor(_bosContext, initUserId);if (persons != null&& persons.length > 0 && persons0 != null) 有直接上級(jí) = true; else 有直接上級(jí) = false; l   委托時(shí),判斷

31、審批人是否是部門負(fù)責(zé)人判斷審批人是否是部門負(fù)責(zé)人,如果審批人是委托任務(wù)處理人,則判斷委托人是否是部門負(fù)責(zé)人 變量聲明:下述腳本使用了如下變量:_bosContext: 系統(tǒng)內(nèi)置變量單據(jù)Id : 單據(jù)內(nèi)碼,一般由單據(jù)直接輸出歸口部門: 類型為字符串,為部門id審批人:   類型為字符串,為審批任務(wù)的處理人,在審批節(jié)點(diǎn)中輸出審批節(jié)點(diǎn)名稱: 類型為字符串,為節(jié)點(diǎn)定義名稱是否部門負(fù)責(zé)人: 類型為布爾,為返回的結(jié)果值,用來(lái)在流程中判斷com.kingdee.bos.workflow.enactment.WfEngineengine =com.kingdee.bos.work

32、flow.enactment.WfEngine.getEngine(_bosContext);com.kingdee.bos.workflow.ProcessInstInfoinfos =engine.getProcessInstanceByHoldedObjectId(單據(jù)Id);if(infos!= null && infos.length>0)ProcessControlDataKScriptAdapteradapter =     newProcessControlDataKScriptAdapter(infos0,engi

33、ne.getLocale(),engine);String constituentUserId=adapter.getTopConstituent(審批節(jié)點(diǎn)名稱);if(constituentUserId !=null&& !constituentUserId.trim().equals("")/有委托人,判斷委托人是否是部門負(fù)責(zé)人             是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participa

34、nt.ParticipantHelper.isOrgPrincipal (                       _bosContext ,constituentUserId ," 歸口部門) ;else/沒有委托人,直接判斷審批人是否有直接上級(jí)          

35、0; 是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal (                       _bosContext ,審批人 ,歸口部門) ; else          

36、          是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal (               _bosContext ,審批人 ,歸口部門) ;          &

37、#160;  l  在腳本中執(zhí)行SQL語(yǔ)句java.lang.StringBuffersql = java.lang.new StringBuffer();/將SQL語(yǔ)句保存到sql對(duì)象中/java.sql.Connectioncon = com.kingdee.bos.framework.ejb.EJBFactory.getConnection(_bosContext);java.sql.StatementbatchStatement = con.createStatement();batchStatement.execute(sql.toS

38、tring();com.kingdee.util.db.SQLUtils.cleanup(batchStatement,con); com.kingdee.util.db.SQLUtils.cleanup(con);  l  將活動(dòng)的參與人設(shè)為單據(jù)對(duì)應(yīng)部門的負(fù)責(zé)人場(chǎng)景:在單據(jù)上有個(gè)“費(fèi)用的承擔(dān)部門”的屬性,現(xiàn)在要將審批活動(dòng)的參與人設(shè)置為該部門的負(fù)責(zé)人。1.     聲明變量 var_principal  外部數(shù)據(jù)類型 var_orgUnitId  

39、;內(nèi)碼(BOID)2.  在做業(yè)務(wù)單據(jù)時(shí)(審核節(jié)點(diǎn)之前)將單據(jù)上的“費(fèi)用的承擔(dān)部門”的ID關(guān)聯(lián)到var_orgUnitId變量中 ,并在該節(jié)點(diǎn)的后繼腳本中填入如下內(nèi)容:.AdminOrgUnitInfo adminInfo = .AdminOrgUnitFactory.getRemoteInstance().getAdminOrgUnit(var_orgUnitId);if(adminInfo != null

40、60;&& adminInfo.getResponPosition != null)    .IPosition iPosition = .PositionFactory.getRemoteInstance();   com.kingdee.eas.basedata.person.PersonCollection pColl

41、60;= iPosition.getAllPersons(adminInfo.getResponPosition.getId();   var_principal = new StringpColl.size();    for (int i=0; i<pColl.size(); i+) com.kingdee.eas.basedata.person.PersonInfo pi = pColl.get

42、(i); var_principali = pi.getId().toString();     3.   在審核節(jié)點(diǎn)中定義參與人,選擇為參與人變量,并把var_princial添加進(jìn)去。l  根據(jù)分錄信息循環(huán)發(fā)送消息給業(yè)務(wù)員    收集:腳本一    java.lang.String commonStr = data +"," + billNumber + ","

43、+ chauffeur + "," +regnumber + "," + contact + "."    java.lang.HashMap map = newjava.lang.HashMap();    for (int i=0; i<records.size(); i+)         /請(qǐng)?zhí)鎿Q成出車單的分錄對(duì)象      

44、0; com.kingdee.eas.fi.gl.VoucherEntryInforecord = records.get(i);        java.lang.String s =record.get("wareName") + "(" + record.get("wareNumber") + ")已發(fā)往" + record.get("customer") + ""  &

45、#160;     java.langString op =record.("operator").getId().toString();        if (map.get(op) = null)             map.put(op, s);        else 

46、0;           map.put(map.get(op) + s);                 userList = new java.util.ArrayList();    msgList = new java.util.ArrayList();    /此段已廢棄 beginfo

47、r (java.lang.Iterator i = map.getKeySet.iterator();i.hasNext();)         Object key = i.next();        Object msg = map.get(key);        userList.add(key);      

48、0; msgList.add(commonStr + msg);        /此段已廢棄 end修改為:list = new java.util.ArrayList();list.addAll(map.keySet();for (int i=0; i<list.size(); i+)     Object key = list.get(i);    Object msg = map.get(key);  userList.add(key);  msgList.add(commonStr + msg);     pos = 0;    count = userList.size();    if (count > 0)     &#

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論