




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品宣傳活動(dòng)設(shè)計(jì)合同
- 二零二五年度森林生態(tài)保護(hù)樹木移植與生態(tài)補(bǔ)償合同
- 二零二五年度出租車個(gè)人承包合同及乘客安全保障措施
- 2025年度私人公寓裝修工程私人工人勞動(dòng)合同
- 二零二五年度離婚協(xié)議中英文對(duì)照及跨境離婚財(cái)產(chǎn)分割及子女監(jiān)護(hù)合同
- 二零二五年度智能城市建設(shè)項(xiàng)目股東入股合同
- 二零二五年度擔(dān)保合同糾紛法律援助服務(wù)協(xié)議
- 二零二五年度標(biāo)準(zhǔn)勞動(dòng)合同(醫(yī)療健康領(lǐng)域適用)
- 二零二五年度綠色生態(tài)養(yǎng)豬場(chǎng)租賃服務(wù)協(xié)議
- 二零二五年度企業(yè)員工借款信息保密及隱私保護(hù)合同
- 2025年中考百日誓師大會(huì)校長(zhǎng)致辭稿(一)
- 生物產(chǎn)品檢驗(yàn)檢疫基礎(chǔ)知識(shí)單選題100道及答案
- 江蘇省中職《英語(yǔ)》學(xué)業(yè)水平考試備考試題集(含歷年真題)
- 2025年合伙型公司新合伙人加入?yún)f(xié)議
- 2025年安全員之C證(專職安全員)考試題庫(kù)
- 2025城市商鋪買賣合同書
- 醫(yī)院感染及其危害
- 2025年佳木斯職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年春新北師大版物理八年級(jí)下冊(cè)課件 第六章 質(zhì)量和密度 第一節(jié) 物體的質(zhì)量及其測(cè)量
- 2024全國(guó)各省高考詩(shī)歌鑒賞真題及解析
- 《價(jià)值觀培訓(xùn)》課件
評(píng)論
0/150
提交評(píng)論