已閱讀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)介
金蝶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)中,都可以引用該流程變量,來完成業(yè)務(wù)功能,保證業(yè)務(wù)數(shù)據(jù)的一致性。例如:在憑證的審批流程中,新增憑證審批,審批的時(shí)候?yàn)槭裁纯梢哉_定為到剛剛提交的那張憑證,而不是別的憑證?流程變量起到了重要的作用。在憑證新增之后,將可唯一標(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è)值來展現(xiàn)特定的單據(jù),展現(xiàn)特定的功能。 任務(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ù)流的特性,提取可以抽象出來公用的東西,分析是否可以進(jìn)行優(yōu)化等,好的業(yè)務(wù)流程可以直接映射為工作流流程。l 利用“流程變量”的威力,建立單據(jù)和流程之間數(shù)據(jù)交換的橋梁。輸入輸出參數(shù)用來在流程和單據(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ù)定義功能無法滿足的需求,可以采用自己開發(fā)功能,根據(jù)輸入?yún)?shù)和輸出參數(shù)來與工作流交互,如在單據(jù)中增加function,綁定到自動(dòng)節(jié)點(diǎn)執(zhí)行,或者是利用腳本節(jié)點(diǎn),獲取一些有用的信息輸出到流程變量中在工作流中使用。還可以利用工作流的一些新增功能,比如利用函數(shù)節(jié)點(diǎn),BOTP節(jié)點(diǎn)等來執(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),除了可設(shè)置模式外,還可以對(duì)流程圖進(jìn)行美化。l 一些公用的業(yè)務(wù)邏輯可以單獨(dú)抽取出來配置為子流程給其他流程共用,減少維護(hù)的流程數(shù)量,比如一些常用的審批流程等。1.3. 基本流程的配置示例1.3.1單流程說明:流程只有一個(gè)人工型活動(dòng),完成憑證提交的任務(wù),流程結(jié)束。沒有具體的業(yè)務(wù)含義。以憑證提交的業(yè)務(wù)為例。流程圖如下:定義步驟:1、拖入開始、結(jié)束活動(dòng)2、拖入人工型活動(dòng),用連接弧連接起來。3、定義人工型活動(dòng)首先,定義人工型活動(dòng)的任務(wù),選擇任務(wù)選定任務(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ù)需要做出判斷。 說明所有人工型任務(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)橐话銇碚f,通過這樣一個(gè)類型的值,就可以完全定位一個(gè)業(yè)務(wù)單據(jù),并且拿到這個(gè)業(yè)務(wù)單據(jù),就可以滿足大部分的業(yè)務(wù)需求了。 這里,將ID屬性輸出,并且選定輸出的流程變量是billID憑證提交完畢后,將可以唯一標(biāo)示一張憑證的ID屬性保存在流程變量billID中,在后續(xù)的活動(dòng)中,如果還需要操作這張憑證,就可以通過billID來唯一定位這張憑證,保證業(yè)務(wù)的一致性。 參與人定義中,分為了默認(rèn)參與人和條件參與人。工作流在獲取執(zhí)行人的時(shí)候,首先根據(jù)條件來逐個(gè)掃描條件參與人,發(fā)現(xiàn)沒有符合,那么會(huì)取默認(rèn)參與人。 這里簡(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),如圖畫連接弧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ù)輸出,選擇將審批結(jié)果輸出到一個(gè)枚舉型的流程變量 審批結(jié)果 中。 定制審批消息流程定義完畢。發(fā)布,在EAS中執(zhí)行。 提交憑證,在消息中心收到一條消息,審批,通過。然后回到憑證序時(shí)簿,察看該流程,發(fā)現(xiàn),憑證的狀態(tài)還是“提交”而不是“審核”。 這是因?yàn)楣ぷ髁髦械亩鄻O審批,只是單純的驅(qū)動(dòng)流程,做一個(gè)選擇而已,不會(huì)修改業(yè)務(wù)數(shù)據(jù)。 為了能夠讓憑證打上審批標(biāo)記,按照如下方式修改流程定義 最后的這個(gè)自動(dòng)活動(dòng),就完成給憑證打?qū)徍藰?biāo)記的功能。 任務(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ù)輸出。 誰提交的誰修改,參與人設(shè)置為流程發(fā)起人本人 定制修改消息3、 編輯連接弧首先編輯“審批”到“自動(dòng)”的連接弧。建模工具會(huì)自動(dòng)根據(jù)之前的定義識(shí)別枚舉,然后將枚舉的值也會(huì)自動(dòng)列在選擇范圍內(nèi)。然后編輯“審批”到“修改”的連接弧。按照如下方式設(shè)置條件保存。流程定制完畢。發(fā)布。 說明業(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)行審批,審批不通過的要能夠來回進(jìn)行審批。直到審批通過,也即是多級(jí)審批,每級(jí)審批不通過回到相應(yīng)的審批節(jié)點(diǎn)繼續(xù)進(jìn)行審批。流程配置面對(duì)此種問題首先想到的應(yīng)該是通過流程變量來設(shè)置審批節(jié)點(diǎn)的標(biāo)志,在每級(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)參考如下的說明:在工具菜單 窗口-顯示視圖,查找選擇工作流視圖組-函數(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ù)視圖中按照右鍵菜單提示進(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)行審批。配置步驟:首先畫出流程草圖,將大致的圖形先畫出來。在提交單據(jù)節(jié)點(diǎn)輸出提交人的部門到流程變量“歸口部門”,并在后置腳本中根據(jù)歸口部門的值設(shè)置流程變量“是否財(cái)務(wù)部”的值。在審批節(jié)點(diǎn)設(shè)置條件參與人,根據(jù)流程變量 “是否財(cái)務(wù)部”來設(shè)置相關(guān)的條件參與人,并將審批人輸出到流程變量“審批人”中。在審批節(jié)點(diǎn)后設(shè)置一腳本節(jié)點(diǎn)-負(fù)責(zé)人判斷,用來判斷上級(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é):充分利用了條件參與人與流程變量,并通過腳本來獲取流程必須的信息。2. 工作流腳本2.1.JAVA腳本在工作流中經(jīng)常會(huì)需要使用到一些腳本來獲取單據(jù)的信息或者是執(zhí)行一些特殊的操作,腳本應(yīng)如何寫?需要注意那些地方?有沒有更好的定義和使用方法?解決方法工作流腳本利用的是java語法,所有的java代碼都可以被工作流解析,但所有的類必須是全路徑名稱(除了java.lang.*包下的類),如List 必須寫成java.util.List。在工作流中內(nèi)置了一些變量和函數(shù)可以進(jìn)行使用,如:“_bosContext”內(nèi)置變量表示服務(wù)端的context。在工作流腳本中可以直接使用定義好的流程變量,腳本執(zhí)行過程中會(huì)將腳本的值自動(dòng)賦值給相應(yīng)的流程變量。在內(nèi)置函數(shù)節(jié)點(diǎn)可以用來封裝腳本,減輕腳本維護(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(_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();if (info != null) String personId = info.getId().toString();.IPositionMemberiPositionMember =.PositionMemberFactory.getLocalInstance(_bosContext);.PositionMemberInfopositionMemberInfo = iPositionMember.getPositionMemberInfo(selectposition.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、 在新增節(jié)點(diǎn)的任務(wù)輸出中,輸出組織的ID到adminId變量中3、 增加腳本節(jié)點(diǎn),其中腳本如下:companyId =com.kingdee.eas.basedata.person.app.PersonToWFAdapter.getCompanyIdByAdminId(_bosContext,adminId);.INewOrgUnitFacadeiOrg =.NewOrgUnitFacadeFactory.getLocalInstance(_bosContext);.CompanyOrgUnitInfofiInfo =(.CompanyOrgUnitInfo)iOrg.getDelegateUnit(companyId,.OrgType.Company);if (fiInfo != null) companyNum =fiInfo.getNumber();l 判斷有無直接上下級(jí)的腳本首先定義一流程變量,類型為布爾:有直接上級(jí)com.kingdee.bos.workflow.service.ormrpc.IEnactmentServiceservice = newcom.kingdee.bos.workflow.service.ormrpc.EnactmentService(_bosContext);com.kingdee.bos.workflow.ProcessInstInfoprocInstInfos =service.getProcessInstanceByHoldedObjectId(billID.toString();com.kingdee.bos.workflow.ProcessInstInfocurProcInst = null;for (int i = 0, n =procInstInfos.length; i 0 & persons0 != null) 有直接上級(jí) = true; else 有直接上級(jí) = false;l 委托時(shí),判斷審批人是否是部門負(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é)果值,用來在流程中判斷com.kingdee.bos.workflow.enactment.WfEngineengine =com.kingdee.bos.workflow.enactment.WfEngine.getEngine(_bosContext);com.kingdee.bos.workflow.ProcessInstInfoinfos =engine.getProcessInstanceByHoldedObjectId(單據(jù)Id);if(infos!= null & infos.length0)ProcessControlDataKScriptAdapteradapter = newProcessControlDataKScriptAdapter(infos0,engine.getLocale(),engine);String constituentUserId=adapter.getTopConstituent(審批節(jié)點(diǎn)名稱);if(constituentUserId !=null& !constituentUserId.trim().equals()/有委托人,判斷委托人是否是部門負(fù)責(zé)人 是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal ( _bosContext ,constituentUserId , 歸口部門) ;else/沒有委托人,直接判斷審批人是否有直接上級(jí) 是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal ( _bosContext ,審批人 ,歸口部門) ; else 是否部門負(fù)責(zé)人=com.kingdee.bos.workflow.participant.ParticipantHelper.isOrgPrincipal ( _bosContext ,審批人 ,歸口部門) ; l在腳本中執(zhí)行SQL語句java.lang.StringBuffersql = java.lang.new StringBuffer();/將SQL語句保存到sql對(duì)象中/java.sql.Connectioncon =com.kingdee.bos.framework.ejb.EJBFactory.getConnection(_bosContext);java.sql.StatementbatchStatement = con.createStatement();batchStatement.execute(sql.toString();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內(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)容:.AdminOrgUnitInfoadminInfo=.AdminOrgUnitFactory.getRemoteInstance().getAdminOrgUnit(var_orgUnitId);if(adminInfo!=null&adminInfo.getResponPosition!=null).IPositioniPosition=.PositionFactory.getRemoteInstance();com.kingdee.eas.basedata.person.PersonCollectionpColl=iPosition.getAllPersons(adminInfo.getResponPosition.getId();var_principal=newStringpColl.size();for(inti=0;ipColl.size();i+)com.kingdee.eas.basedata.person.PersonInfopi=pColl.get(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 + , + chauffeur + , +regnumber + , + contact + .; java.lang.HashMap map = newjava.lang.HashMap(); for (int i=0; irecords.size(); i+) /請(qǐng)?zhí)鎿Q成出車單的分錄對(duì)象 com.kingdee.eas.fi.gl.VoucherEntryInforecord = records.get(i); java.lang.String s =record.get(wareName) +( + record.get(wareNumber) + )已發(fā)往 + record.get(customer) + ; java.langString op =record.(operator).getId().toString(); if (map.get(op) = null) map.put(op, s); else map.put(map.get(op) + s); userList = new java.util.ArrayList(); msgList = new java.util.ArrayList(); /此段已廢棄 beginfor (java.lang.Iterator i = map.getKeySet.iterator();i.hasNext();) Object key = i.next(); Object msg = map.get(key); userList.add(key); msgList.add(commonStr + msg); /此段已廢棄 end修改為:list = new java.util.ArrayList();list.addAll(map.keySet();for (int i=0; i 0) user = userList.get(0); msg = msgList.get(0); 2.2.多UI相同實(shí)體需要觸發(fā)不同的流程,條件啟動(dòng)流程在EAS中經(jīng)常碰到這種情形,有兩套UI對(duì)應(yīng)一個(gè)實(shí)體,此兩個(gè)UI綁定的功能(Function)和操作(Operate)是一樣。由于工作流是根據(jù)功能和操作來進(jìn)行流程匹配的,這兩個(gè)ui執(zhí)行后都啟用了同一個(gè)流程,需要在兩套UI上提交的時(shí)候觸發(fā)不同的工作流,如何實(shí)現(xiàn)?解決辦法工作流目前支持兩種方式的流程匹配方式:一種是根據(jù)Function和Operate以及用戶信息來進(jìn)行流程的匹配,如果兩套UI使用的用戶范圍是不一樣的,可以通過在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 淄博市巡游出租汽車駕駛員區(qū)域科目考試題庫(kù)及答案(供參考)
- 2025年河北女子職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 普通合伙合同協(xié)議書
- 隔音降噪合同范本
- 幼兒園中班建康活動(dòng)策劃方案五篇
- 信號(hào)工勞務(wù)合同
- 標(biāo)準(zhǔn)鋼材購(gòu)銷合同樣本
- 智能設(shè)備研發(fā)與生產(chǎn)合作合同
- 代理的合同范本
- 2024年數(shù)字化教育平臺(tái)推廣合同
- 走新型城鎮(zhèn)化道路-實(shí)現(xiàn)湘潭城鄉(xiāng)一體化發(fā)展
- 芯片可靠性分析
- 2023年貴州省畢節(jié)市中考物理試題(原卷+解析版)真題含答案
- 口腔種植技術(shù)臨床應(yīng)用能力評(píng)估報(bào)告范本
- 從中國(guó)制造到中國(guó)創(chuàng)造(優(yōu)秀課件)
- 新華字典第12版電子版
- 【考試版】蘇教版2022-2023學(xué)年四年級(jí)數(shù)學(xué)下冊(cè)開學(xué)摸底考試卷(五)含答案與解析
- 血液透析個(gè)案護(hù)理兩篇
- 第八章 客戶關(guān)系管理
- 新版人教版高中英語選修一、選修二詞匯表
- 2022年河北邯鄲世紀(jì)建設(shè)投資集團(tuán)有限公司招聘筆試試題及答案解析
評(píng)論
0/150
提交評(píng)論