U8工作流開發(fā)手冊(cè)_第1頁(yè)
U8工作流開發(fā)手冊(cè)_第2頁(yè)
U8工作流開發(fā)手冊(cè)_第3頁(yè)
U8工作流開發(fā)手冊(cè)_第4頁(yè)
U8工作流開發(fā)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

-.z. 工作流開發(fā)手冊(cè)功能介紹:工作流系統(tǒng)是以規(guī)格化的流程描述作為輸入的軟件組件,它維護(hù)流程的運(yùn)行狀態(tài),并在人和應(yīng)用之間分派活動(dòng)、最終到達(dá)協(xié)同多人或效勞共同完成工作任務(wù)的目的。使用過程:工作流系統(tǒng)的使用過程分為三個(gè)階段:設(shè)計(jì)時(shí)、配置時(shí)、運(yùn)行時(shí);設(shè)計(jì)時(shí)階段需要完成流程模型設(shè)計(jì);配置時(shí)階段需要完成工作流系統(tǒng)運(yùn)行環(huán)境的配置、工作流模型發(fā)布及版本管理等工作;運(yùn)行時(shí)階段需要負(fù)責(zé)發(fā)起和完成流程實(shí)例等工作。U8系統(tǒng)安裝完畢后,首先需要進(jìn)入工作流環(huán)境配置模塊設(shè)置MOM效勞器和工作流引擎信息;配置的信息會(huì)通知到對(duì)應(yīng)的MOM效勞器,使得MOM效勞器感知與其協(xié)同工作的工作流引擎信息。配置時(shí)涉及的功能模塊及運(yùn)行時(shí)的流程實(shí)例管理模塊存在于工作流管理控制臺(tái)中。環(huán)境配置完畢后,可以進(jìn)展流程模型設(shè)計(jì)工作。通過流程設(shè)計(jì)器,設(shè)計(jì)過程中結(jié)合UAP工具中設(shè)計(jì)出來的業(yè)務(wù)對(duì)象和注冊(cè)在MOM效勞器上的消息和效勞信息,生成流程模型。流程設(shè)計(jì)器設(shè)計(jì)出來的流程模型還不能直接投入使用,需要通過重定位模塊對(duì)其消息和效勞地址信息從設(shè)計(jì)時(shí)環(huán)境的地址轉(zhuǎn)化為運(yùn)行時(shí)地址后,才能正式使用。重定位模塊通過“流程發(fā)布〞動(dòng)作來完成該動(dòng)作的。流程模型發(fā)布后,業(yè)務(wù)應(yīng)用就可通過消息發(fā)送接口發(fā)送特定類型的消息,消息通過MOM效勞器通知工作流引擎,生成對(duì)應(yīng)的流程實(shí)例,在流程實(shí)例處理過程中調(diào)用業(yè)務(wù)效勞、生成需要人工交互的任務(wù)項(xiàng)、并最終協(xié)調(diào)完成流程實(shí)例的處理。流程實(shí)例可以被流程實(shí)例管理模塊加以管理、修改。開發(fā)幫助基于新的工作流平臺(tái)之上的審批流應(yīng)用,利用UAP的數(shù)據(jù)引擎、MOM消息發(fā)布訂閱和消息轉(zhuǎn)發(fā)功能來完成審批這一類特殊流程的管理、配置、設(shè)計(jì)、使用、維護(hù)、監(jiān)視操作。下列圖是工作流系統(tǒng)使用流程圖:在上述流程涉及到業(yè)務(wù)系統(tǒng)開發(fā)人員的活動(dòng)中,效勞開發(fā)、效勞注冊(cè)、預(yù)制業(yè)務(wù)對(duì)象、編寫預(yù)制運(yùn)行時(shí)活動(dòng)插件、編寫客戶端審批提交代碼等工作是在業(yè)務(wù)模塊中實(shí)現(xiàn)審批功能都可能涉及的動(dòng)作。開發(fā)與注冊(cè)效勞本處效勞是指業(yè)務(wù)部門提供能、為了能滿足特定業(yè)務(wù)功能而實(shí)現(xiàn)的組件中的方法;這些效勞可在流程設(shè)計(jì)過程中運(yùn)用于流程模型,表達(dá)為流程模型中的自動(dòng)效勞。效勞開發(fā)效勞開發(fā)無特別約定,效勞部如果需要CallConte*t、發(fā)起人等工作流系統(tǒng)置變量信息,可以在流程設(shè)計(jì)過程中,指定變量->效勞傳入?yún)?shù)的映射方式來獲得。流程模型置變量:變量名類型說明ActivityNamestring[活動(dòng)名稱]StartPerformerstring[流程發(fā)起人工號(hào)]CurrentPerformerstring[執(zhí)行者工號(hào)]StartTimestring[流程發(fā)起時(shí)間]ActivityStartTimestring[活動(dòng)開場(chǎng)時(shí)間]ActivityDelaystring[延遲時(shí)間]StartPerformerNamestring[流程發(fā)起人]CurrentPerformerNamestring[執(zhí)行者]KeySetstring[人工活動(dòng)UNDO接口參數(shù)KeySet]CalledConte*tobject[人工活動(dòng)UNDO接口參數(shù)CalledConte*t]CallResultstring[人工活動(dòng)UNDO接口返回值]LoginConte*tobject[工作流構(gòu)造LoginConte*t對(duì)象]效勞注冊(cè)在工作流模型中,自動(dòng)活動(dòng)所調(diào)用的效勞需要預(yù)先注冊(cè)到MOM效勞器上,注冊(cè)過程如下:1.如果MOM上沒建立所屬子產(chǎn)品功能點(diǎn),則首先建立該子產(chǎn)品功能點(diǎn);建立方法:翻開MOM集成工具,在集成目錄-U8ERP下參加子產(chǎn)品功能點(diǎn),如下列圖:2.在所屬子產(chǎn)品功能點(diǎn)的“集成接口〞節(jié)點(diǎn)上,注冊(cè)集成接口,如下列圖:進(jìn)入注冊(cè)集成接口界面后,首先設(shè)置集成注冊(cè)碼和集成接口名,集成接口注冊(cè)嗎是用于識(shí)別該注冊(cè)效勞的,要求在同一子產(chǎn)品節(jié)點(diǎn)下注冊(cè)碼惟一。然后需要設(shè)置效勞調(diào)用端點(diǎn)〔如果是本地調(diào)用,需要考慮調(diào)用路徑問題!〕:設(shè)置效勞路徑時(shí)可以使用MOM預(yù)置的三個(gè)宏變量:%U8SOFT%表示U8安裝目錄%UFSQL%表示ufsql目錄%U8APPSRV%表示u8應(yīng)用效勞器例如:注冊(cè):D:\U8SOFT\SA\MyLib.DLL組件,使用宏變量后應(yīng)該為:%U8SOFT%\SA\MyLib.DLL自動(dòng)效勞開發(fā)中的參數(shù)約束1、所有參數(shù)類型必須是根本類型和可SOAP序列化的類型;2、非根本類型的參數(shù)必須部署在GAC中;3、對(duì)于部署在本地的效勞,支持ref,out參數(shù)〔VB的ByRef同ref〕;4、對(duì)于VB中聲明為ByRef的參數(shù),必須是Variant類型。支持的根本類型包括: "void", "string",〔對(duì)應(yīng)設(shè)計(jì)器變量類型string〕 "short",〔對(duì)應(yīng)設(shè)計(jì)器變量類型float〕 "int",〔對(duì)應(yīng)設(shè)計(jì)器變量類型int〕 "long",〔對(duì)應(yīng)設(shè)計(jì)器變量類型int〕 "double",〔對(duì)應(yīng)設(shè)計(jì)器變量類型double〕 "bool",〔對(duì)應(yīng)設(shè)計(jì)器變量類型bool〕 "datetime",〔對(duì)應(yīng)設(shè)計(jì)器變量類型datetime〕 "object"〔對(duì)應(yīng)設(shè)計(jì)器變量類型object〕如果工作流實(shí)例中,對(duì)該效勞調(diào)用后,由于*些原因,流程實(shí)例回滾〔Rollback〕時(shí),該效勞也需要回滾,則該效勞還需要注冊(cè)對(duì)應(yīng)的Undo接口信息。約定Undo接口方法名為Un+方法名,參數(shù)、返回值同原注冊(cè)的效勞方法一致。為了能正確描述Undo接口,需要在擴(kuò)展屬性中增加3個(gè)屬性:undo_class:如果是就表示為progid,是.Net表示為類的完全限定名 undo_type:assembly,undo_location:當(dāng)是.Net程序的時(shí)候表示為程序集的名如下列圖:效勞例代碼usingusingSystem;usingSystem.Collections.Generic;usingSystem.Te*t;namespaceEployeeSelfSevice{publicclassEmployee{///<summary>///申請(qǐng)休假///</summary>///<paramname="EmployeeID">員工號(hào)</param>///<paramname="HolidayType">假期類型</param>///<paramname="ApplyDateNumber">申請(qǐng)數(shù)量</param>///<returns>申請(qǐng)是否成功</returns>publicboolApplyHoliday(stringEmployeeID,intHolidayType,intApplyDateNumber){//TODO:如果符合申請(qǐng)條件,扣減該員工的可用假期數(shù)returntrue;}///<summary>///ApplyHoliday的Undo方法///</summary>///<paramname="EmployeeID">員工號(hào)</param>///<paramname="HolidayType">假期類型</param>///<paramname="ApplyDateNumber">申請(qǐng)數(shù)量</param>///<returns>申請(qǐng)是否成功</returns>publicboolUnApplyHoliday(stringEmployeeID,intHolidayType,intApplyDateNumber){returntrue;}}}人工活動(dòng)插件開發(fā)插件必須包含如下三個(gè)方法,名稱可以不同,但參數(shù)必須一致publicinterfaceIAuditPlugin {boolUndoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCt*,refstringerrMsg);boolDoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCt*,refstringerrMsg);boolHandleBizE*ception(stringprimBizData,stringauditAction,refstringhandleResult,refstringbizdata,objectcalledCt*,refstringerrMsg); }primBizData:KeySetauditAction的取值///<summary> ///審批動(dòng)作枚舉類型 ///</summary> [Serializable] publicenumAuditAction { Submit=0, //提交 Agree=1, //同意 Disagree=2, //不同意 Dispatch=3, //轉(zhuǎn)簽 Reject=4, //打回 Revocation=5, //撤銷 Return=6, //退回 Abandon=7, //棄審 }Bizdata:業(yè)務(wù)需要傳出的參數(shù)handleResult:是否需要重做,取值ReHandle/UnHandleusingSystem;

usingSystem.Collections.Generic;

usingSystem.Te*t;

usingUFSoft.U8.Framework.LoginConte*t;

usingUFIDA.U8.Audit.Interface;

usingUFSoft.U8.E*.mon;

usingUFSoft.U8.E*.mon.Args;

usingUFSoft.U8.E*.Server.BusinessObject;

usingUFSoft.U8.E*.Framework.DataModel;namespaceUFSoft.U8.E*.CreditPlugins

{

classFinalAuditPlugin:IAuditPlugin

{

*regionIAuditPlugin成員

publicboolDoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCt*,refstringerrMsg)

{

LoginServicelogin=newLoginService((CalledConte*t)calledCt*);

OrderBObo=newOrderBO(login);

AuditArgsauditArg=newAuditArgs();

intid=int.Parse(GetVoucherId(primBizData));

bo.GetData(id);

Orderorder=bo.dataasOrder;

auditArg.ID=order.orderHeader.id;

auditArg.Guid=order.orderHeader.guid;

auditArg.ufts=order.orderHeader.ufts;

auditArg.cCode=order.orderHeader.ccode;

auditArg.VarifyState=order.orderHeader.iverifystate;

auditArg.Version=order.orderHeader.iversion;

auditArg.UserName=login.UserInfo.UserName;

auditArg.VerifierDate=login.UserInfo.operDate;

auditArg.Verifier=login.UserInfo.UserName;

auditArg.Row=-1;

bo.BatchAudit(newAuditArgs[]{auditArg});

returntrue;

//thrownewE*ception("Themethodoroperationisnotimplemented.");

}

privatestringGetVoucherId(stringkeySetData)

{

KeySetDataReaderreader=newKeySetDataReader(keySetData);

returnreader["VoucherId"];

}

privatestringGetVoucherType(stringkeySetData)

{

KeySetDataReaderreader=newKeySetDataReader(keySetData);

returnreader["VoucherType"];

}

privatestringGetVoucherCode(stringkeySetData)

{

KeySetDataReaderreader=newKeySetDataReader(keySetData);

returnreader["VoucherCode"];

}

publicboolHandleBizE*ception(stringprimBizData,stringauditAction,stringconte*t,refstringhandleResult,refstringbizdata,objectcalledCt*,refstringerrMsg)

{

thrownewE*ception("Themethodoroperationisnotimplemented.");

}

publicboolUndoAudition(stringprimBizData,stringauditAction,stringconte*t,refstringbizdata,objectcalledCt*,refstringerrMsg)

{

LoginServicelogin=newLoginService((CalledConte*t)calledCt*);

OrderBObo=newOrderBO(login);

AuditArgsauditArg=newAuditArgs();

intid=int.Parse(GetVoucherId(primBizData));

bo.GetData(id);

Orderorder=bo.dataasOrder;

auditArg.ID=order.orderHeader.id;

auditArg.Guid=order.orderHeader.guid;

auditArg.ufts=order.orderHeader.ufts;

auditArg.cCode=order.orderHeader.ccode;

auditArg.VarifyState=order.orderHeader.iverifystate;

auditArg.Version=order.orderHeader.iversion;

auditArg.UserName=login.UserInfo.UserName;

auditArg.VerifierDate=login.UserInfo.operDate;

auditArg.Verifier=login.UserInfo.UserName;

auditArg.Row=-1;

bo.BatchUnAudit(newAuditArgs[]{auditArg});

returntrue;//

thrownewE*ception("Themethodoroperationisnotimplemented.");

}

*endregion

}

}VB插件的開發(fā)OptionE*plicitDimserviceAsPuServiceAdapterPublicFunctionDoAudition(keyDataAsString,auditActionAsString,ByRefbizDataAsString,calledCt*AsObject,ByReferrMsgAsString)AsBooleanSetservice=NewPuServiceAdapterDoAudition=service.VerifyVoucher(keyData,auditAction,conte*t,calledCt*,bizData)EndFunctionPublicFunctionUndoAudition(keyDataAsString,auditActionAsString,ByRefbizDataAsString,calledCt*AsObject,ByReferrMsgAsString)AsBooleanSetservice=NewPuServiceAdapterUndoAudition=service.UnVerifyVoucher(keyData,auditAction,calledCt*,bizData)EndFunctionPublicFunctionHandleBizE*ception(keyDataAsString,auditActionAsString,ByRefhandleResultAsString,ByRefbizDataAsString,calledCt*AsObject,ByReferrMsgAsString)AsBooleanHandleBizE*ception=TrueDimbizDataObjAsNewBizDataMapbizDataObj.Load*MLbizDataIfMsgBo*(bizDataObj.Value("Error"),vbRetryCancel)=vbRetryThenhandleResult="ReHandle"bizDataObj.Value("Action")="Retry"bizDataObj.Value("Check")="False"ElsehandleResult="UnHandle"bizDataObj.Value("Action")="Done"EndIfbizData=bizDataObj.*MLMsgBo*"BizData="&bizDataEndFunction預(yù)制業(yè)務(wù)對(duì)象業(yè)務(wù)對(duì)象是指審批流程處理的各種類型業(yè)務(wù)對(duì)象〔比方:采購(gòu)訂單、材料出庫(kù)單、出口訂單等〕。新的審批流利用UAP的數(shù)據(jù)引擎來定義這些業(yè)務(wù)對(duì)象,這樣就可以通過修改數(shù)據(jù)引擎中的業(yè)務(wù)對(duì)象的查詢結(jié)果來形成不同的業(yè)務(wù)對(duì)象的Schema,從而可以將這些對(duì)象的Schema用作流程定義的條件并在流程運(yùn)行時(shí)獲取業(yè)務(wù)對(duì)象實(shí)例的屬性值來進(jìn)展相應(yīng)的處理。UAP數(shù)據(jù)引擎進(jìn)展業(yè)務(wù)對(duì)象設(shè)計(jì)審批流中用到的是UAP數(shù)據(jù)引擎中查詢結(jié)果的數(shù)據(jù),具體設(shè)計(jì)步驟及其與預(yù)置數(shù)據(jù)之間的關(guān)系如下:在數(shù)據(jù)引擎中添加業(yè)務(wù)對(duì)象設(shè)置業(yè)務(wù)對(duì)象根本屬性為業(yè)務(wù)對(duì)象添加功能設(shè)置業(yè)務(wù)功能根本屬性為功能添加業(yè)務(wù)實(shí)體關(guān)系查詢?cè)O(shè)置實(shí)體關(guān)系查詢根本屬性為查詢添加根底業(yè)務(wù)實(shí)體為查詢添加列。查詢結(jié)果中必須包含結(jié)果列VoucherId,VoucherCode,VoucherType。這三列在審批流中是關(guān)鍵業(yè)務(wù)數(shù)據(jù),會(huì)在任務(wù)項(xiàng)的擴(kuò)展屬性中出現(xiàn),可以作為任務(wù)項(xiàng)顯示名稱、發(fā)送消息模版的數(shù)據(jù)提供者。命名必須注意完全匹配〔注意大小寫〕為查詢添加計(jì)算結(jié)果列為查詢添加查詢條件測(cè)試新增業(yè)務(wù)對(duì)象審批業(yè)務(wù)對(duì)象注冊(cè)數(shù)據(jù)引擎中設(shè)計(jì)完畢業(yè)務(wù)對(duì)象后,就可提供應(yīng)審批流系統(tǒng)使用。使用前,需要先注冊(cè)審批業(yè)務(wù)對(duì)象〔注意:與數(shù)據(jù)引擎中所描述的業(yè)務(wù)對(duì)象是兩不同概念〕。注冊(cè)過程使用位于U8SOFT\Workflow目錄下的工具AuditBusinessServiceTool.e*e來完成。審批業(yè)務(wù)對(duì)象注冊(cè)步驟如下:建立分類關(guān)系注冊(cè)審批業(yè)務(wù)對(duì)象增加業(yè)務(wù)事件業(yè)務(wù)事件可理解為對(duì)審批對(duì)象所可以進(jìn)展的審批操作,如對(duì)請(qǐng)假單這一審批業(yè)務(wù)對(duì)象,可以進(jìn)展提交、審批、打回等操作。業(yè)務(wù)事件URL中包含響應(yīng)該業(yè)務(wù)事件的業(yè)務(wù)模塊定位信息,在運(yùn)行期間,門戶將根據(jù)該信息加載相應(yīng)的業(yè)務(wù)模塊來完成該業(yè)務(wù)事件的響應(yīng)。URL預(yù)置格式如下:<"*mlversion="1.0"encoding="utf-8""><mand>

<paramName="id"Value=""/>

<paramName="name"Value=""/>

<paramName="authID"Value=""/>

<paramName="cmdLine"Value=""/>

<paramName="docType"Value=""/>

<paramName="docID"Value=""/>

<paramName="subFunction"Value=""/>

<paramName="SubSysID"Value=""/></mand>上述各參數(shù)值與UFSystem.UA_Menu中的字段存在對(duì)應(yīng)關(guān)系,id->UA_Menu.cMenu_Id,name->UA_Menu.cMenu_Name,authID->UA_Menu.cAuth_Id,SubFunction->UA_Menu.cSub_ID,其他參數(shù)保存,可不預(yù)置。如來料報(bào)檢單:<"*mlversion="1.0"encoding="utf-8""><mand>

<paramName="id"Value="QM020101"/>

<paramName="name"Value="來料報(bào)檢單"/>

<paramName="authID"Value="QM02010101"/>

<paramName="cmdLine"Value=""/>

<paramName="docType"Value=""/>

<paramName="docID"Value=""/>

<paramName="subFunction"Value=""/>

<paramName="SubSysID"Value="QM"/></mand>上圖中支持插件選項(xiàng)通常需要勾上。任務(wù)類型中,一般情況下,需填“1〞〔說明為審批類型的任務(wù)工程〕,但如果是為了說明為打回重做的任務(wù)類型,需要填入“2〞。指定業(yè)務(wù)事件對(duì)應(yīng)的業(yè)務(wù)實(shí)體本處的業(yè)務(wù)實(shí)體可對(duì)應(yīng)到數(shù)據(jù)引擎中的業(yè)務(wù)對(duì)象下的功能中包含的*特定查詢。設(shè)置界面如下:5.指定業(yè)務(wù)事件所需要的關(guān)鍵業(yè)務(wù)參數(shù)關(guān)鍵業(yè)務(wù)參數(shù)將會(huì)在設(shè)計(jì)器中指定從業(yè)務(wù)實(shí)體中取數(shù)據(jù)的規(guī)則〔*Path〕,流程實(shí)例運(yùn)行時(shí)從符合業(yè)務(wù)實(shí)體格式描述的業(yè)務(wù)單據(jù)取得數(shù)據(jù),并在調(diào)用業(yè)務(wù)模塊處理該業(yè)務(wù)事件時(shí)傳遞給業(yè)務(wù)模塊。通常業(yè)務(wù)事件均應(yīng)至少包含三個(gè)參數(shù):VoucherId,VoucherCode,VoucherType。設(shè)置業(yè)務(wù)事件插件通過菜單項(xiàng)選擇項(xiàng)-"業(yè)務(wù)插件進(jìn)入插件注冊(cè)界面,如下列圖:然后在業(yè)務(wù)對(duì)象事件下注冊(cè)該事件處理后調(diào)用的插件。審批提交客戶端編程提交流程圖判斷是否啟用工作流,分別提供了存儲(chǔ)過程和接口存儲(chǔ)過程:Usp_WF_IsFlowControlledcBizObjectIdnvarchar(40),cBizEventIdnvarchar(40),iYearsmallint,cAcc_Idnvarchar(3),bControlledbitout程序接口:提供應(yīng)業(yè)務(wù)產(chǎn)品發(fā)起提交的接口UFIDA.U8.Audit.ServicePro*y.dllVB代碼DimoAuditasObjectSetoAudit=CreateObject(“UFIDA.U8.Audit.ServicePro*y.AuditServicePro*y〞)接口PublicFunctionSubmitApplicationMessage(primBizDataAsString,calledCt*AsCalledConte*t,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBooleanprimBizData:關(guān)鍵業(yè)務(wù)數(shù)據(jù)*ML串,*ML串的Schema如下<KeySet><!--業(yè)務(wù)對(duì)象id--><Keyname="BizObjectId"value=""/><!—業(yè)務(wù)事件--><Keyname="BizEventId"value=""/><!--單據(jù)號(hào)--><Keyname="VoucherId"value=""/><!—時(shí)間戳--><Keyname="TimeStamp"value=""/><!—其他插件或效勞需要用到的參數(shù),如AuthId--></KeySet>calledCt*:Login中的登陸上下文isWFControlled:是否通過了發(fā)起條件errMsg:錯(cuò)誤信息重載方法2PublicFunctionSubmitApplicationMessage_2(bizObjectIdAsString,eventidAsString,voucherIdAsString,calledCt*AsCalledConte*t,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBooleanbizObjectId:業(yè)務(wù)對(duì)象Ideventid:業(yè)務(wù)事件IdvoucherId:?jiǎn)螕?jù)id例如:1.VB客戶端調(diào)用FunctionSubmitApplicationMessage_2(bizObjectIdAsString,eventIdAsString,voucherIdAsString,calledCt*AsCalledConte*t,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBoolean'DimloginAsU8Login.clsLogin'審批效勞客戶端代理'DimauditSvcAsNewUFIDA_U8_Audit_ServicePro*y'Login效勞的LoginConte*t對(duì)象DimcalledCt*AsNewUFSoft_U8_Framework_LoginConte*t'業(yè)務(wù)對(duì)象的標(biāo)識(shí),與與審批預(yù)置表〔AuditBizObjects〕中的業(yè)務(wù)對(duì)象主鍵一樣DimstrBizObjectIdAsString'業(yè)務(wù)事件的標(biāo)識(shí),與審批預(yù)置表〔AuditBizEvents〕中的業(yè)務(wù)事件主鍵一樣DimstrBizEventIdAsString'單據(jù)標(biāo)識(shí),也就是業(yè)務(wù)對(duì)象的實(shí)例標(biāo)識(shí)DimiVoucherIdAsIntegerDimretAsBoolean‘是否滿足開場(chǎng)條件DimbControlledAsBoolean‘錯(cuò)誤信息auditSvcOnErrorGoToerrHandler:auditSvcstrBizObjectId="PU88"strBizEventId="PU88.Submit"strConte*t=""iVoucherId=1calledCt*.SubId="DP"calledCt*.TaskID=login.GetTaskID(SubId)calledCt*.token=login.userTokenIf(strBizObjectId="")Or(strBizEventId="")ThenMsgBo*"請(qǐng)選擇選擇業(yè)務(wù)對(duì)象或業(yè)務(wù)事件!"Else'業(yè)務(wù)進(jìn)展自己的處理,可能需要發(fā)起自己的事務(wù)ret=auditSvc.SubmitApplicationMessage_2(strBizObjectId,strBizEventId,iVoucherId,calledCt*,bControlled,errMsg)If(ret=True)ThenIfbControlled=TrueThenMsgBo*("提交成功")'如果發(fā)起事務(wù),執(zhí)行其他業(yè)務(wù)邏輯,并提交事務(wù) EndIfElseMsgBo*("提交失敗,失敗原因:"&errMsg)'如果發(fā)起事務(wù),回滾事務(wù),并做其他處理EndIfEndIfReturnerrHandler:'業(yè)務(wù)自己的異常處理邏輯 2..NET客戶端調(diào)用publicboolSubmitApplicationMessage(stringbizObjectId,stringeventId,stringvoucherId,stringconte*t,CalledConte*tcalledCt*)參數(shù)說明:///<summary> ///提交審批消息 ///</summary> ///<paramname="bizObjectId">業(yè)務(wù)對(duì)象標(biāo)識(shí)</param> ///<paramname="eventId">業(yè)務(wù)事件標(biāo)識(shí)</param> ///<paramname="voucherId">單據(jù)唯一標(biāo)識(shí)</param> ///<paramname="conte*t">用戶登錄信息</param> ///<returns>返回提交調(diào)用結(jié)果,成功返回true,否則返回false。</returns>例如:usingUFIDA.U8.Audit.BusinessInfo;usingUFIDA.U8.Audit.BusinessService;usingUFIDA.U8.Audit.WorkList;usingUFIDA.U8.Audit.ServicePro*y;usingUFSoft.U8.Framework.Login.UI;usingUFSoft.U8.Framework.LoginConte*t; //子系統(tǒng)標(biāo)識(shí)privateconststringSubId="DP"; //需要根據(jù)各業(yè)務(wù)子系統(tǒng)進(jìn)展替換 try {//創(chuàng)立審批效勞的客戶端代理AuditServicePro*yauditSvc=newAuditServicePro*y();//構(gòu)造Login的CalledConte*t對(duì)象CalledConte*tcalledCt*=newCalledConte*t(); calledCt*.subId=SubId; calledCt*.TaskID=_login.GetTaskID(SubId); calledCt*.token=_login.userToken; //業(yè)務(wù)對(duì)象標(biāo)識(shí)stringbizObjectId="PU88";//業(yè)務(wù)事件標(biāo)識(shí)stringbizEventId="PU88.Submit";//單據(jù)號(hào)intvoucherId=1;if(bizEventId==string.Empty||bizObjectId==string.Empty){MessageBo*.Show("請(qǐng)選擇選擇業(yè)務(wù)對(duì)象或業(yè)務(wù)事件!");return;}boolret=auditSvc.SubmitApplicationMessage(bizObjectId,bizEventId,voucherId,calledCt*,refbControlled,referrMsg);if(ret==true&&bControlled)MessageBo*.Show("提交成功"); elseMessageBo*.Show("提交失敗,失敗原因:"+errMsg); }catch(E*ceptione*) {MessageBo*.Show(e*.Message); }3.9 批審審批界面接口程序集:UFIDA.U8.Audit.ServicePro*y.dll功能:顯示批量處理界面,返回批量處理參數(shù)?!沧⒁猓罕景鎸?duì)批審的處理分兩個(gè)步驟,先顯示界面,返回選擇參數(shù),然后逐次調(diào)用3.10的審核接口進(jìn)展批量處理〕顯示批審界面///<paramname="calledCt*">登陸上下文</param>///<paramname="action">審批動(dòng)作,傳出參數(shù)</param>///<paramname="state">審批狀態(tài),傳出參數(shù)</param>///<paramname="opinion">審批意見,傳出參數(shù)</param>///<returns>用戶點(diǎn)擊同意返回True;點(diǎn)擊取消則返回False</returns>FunctionShowAuditSimpleUI(calledCt*AsCalledConte*t,byrefactionAsInteger,byrefstateAsInteger,byrefopinionAsString)AsBoolean顯示批棄界面///<paramname="calledCt*">登陸上下文</param>///<paramname="state">審批狀態(tài),傳出參數(shù)</param>///<paramname="opinion">審批意見,傳出參數(shù)</param>///<returns>用戶點(diǎn)擊同意返回True;點(diǎn)擊取消則返回False</returns>FunctionShowAuditAbandonUI(calledCt*AsCalledConte*t,byrefstateAsInteger,byrefopinionAsString)AsBoolean顯示自定義界面///<paramname="flags">窗體的顯示組合枚舉</param>///<paramname="calledCt*">登陸上下文</param>///<paramname="action">審批動(dòng)作,傳出參數(shù)</param>///<paramname="state">審批狀態(tài),傳出參數(shù)</param>///<paramname="opinion">審批意見,傳出參數(shù)</param>///<returns>用戶點(diǎn)擊同意返回True;點(diǎn)擊取消則返回False</returns>FunctionShowAuditUI(flagsAsInteger,calledCt*AsCalledConte*t,byrefactionAsInteger,byrefstateAsInteger,byrefopinionAsString)AsBoolean備注:flags為組合枚舉EnumAuditUIItemFlags{AuditUIItemFlags_None=0,AuditUIItemFlags_AgreeButton=1,AuditUIItemFlags_DisagreeButton=2,AuditUIItemFlags_AbandonButton=4,AuditUIItemFlags_CheckedBatch=8,AuditUIItemFlags_CheckedInteraction=16}該接口提供了自定義的界面顯示風(fēng)格,前兩個(gè)接口是該接口的封裝。如ShowAuditSimpleUI可用該接口表示為:o.ShowAuditUI(AuditUIItemFlags.AuditUIItemFlags_AgreeButtonOrAuditUIItemFlags.AuditUIItemFlags_CheckedInteraction,ct*,action,state,opinion);3.10 批審審核接口程序集:UFIDA.U8.Audit.ServicePro*y.dll功能:根據(jù)批審界面返回的參數(shù),逐次調(diào)用該接口進(jìn)展審批處理審核接口///<paramname="keySet">關(guān)鍵業(yè)務(wù)數(shù)據(jù)</param>///<paramname="action">審批動(dòng)作</param>///<paramname="state">審批狀態(tài)</param>///<paramname="opinion">審批意見</param>///<paramname="calledCt*">登陸上下文</param>///<paramname="auditResult">審批返回信息</param>///<returns>true-成功false-失敗</returns>FunctionAudit(keySetAsString,actionAsInteger,stateAsInteger,opinionAsString,calledCt*AsCalledConte*t,auditResultAsString)AsBoolean備注:keySet關(guān)鍵業(yè)務(wù)數(shù)據(jù)格式同插件中的格式:<KeySet><Keyname="VoucherId"value==""/><Keyname="VoucherType"valuse=""/><Keyname="VoucherCode"value=""/><Keyname="AuditAuthId"value=""/></KeySet>auditResult審批返回信息格式如下:<ResultVoucherId="單據(jù)號(hào)"VoucherType="單據(jù)類型"VoucherCode="單據(jù)編號(hào)"AuditResult="審批執(zhí)行結(jié)果,成功返回true;失敗返回false"AuditAction="審批意見,同意:Agree、不同意:Disagree"AuditOpinion="審批意見,審批界面輸入的意見"errMsg="審批錯(cuò)誤時(shí)返回的錯(cuò)誤信息"><BizData>業(yè)務(wù)插件執(zhí)行時(shí),有業(yè)務(wù)插件形成的信息</BizData></Result>棄審接口///<paramname="keySet">關(guān)鍵業(yè)務(wù)數(shù)據(jù)</param>///<paramname="opinion">審批意見</param>///<paramname="state">審批狀態(tài)</param>///<paramname="calledCt*">登陸上下文</param>///<paramname="auditResult">審批返回信息</param>///<returns>true-成功false-失敗</returns>FunctionAbandon(keySetAsString,opinionAsString,stateAsInteger,calledCt*AsCalledConte*t,auditResultAsString)AsBoolean備注:其中keySet和auditResult的格式同上。3.11 撤銷行為客戶端編程.///<summary>///撤銷提交接口///</summary>///<paramname="bizObjectID">業(yè)務(wù)對(duì)象ID</param>///<paramname="eventID">業(yè)務(wù)事件ID</param>///<paramname="VoucherId">單據(jù)ID</param>///<paramname="VoucherType">單據(jù)類型</param>///<paramname="cVoucherCode">單據(jù)Code</param>///<paramname="sBizdata">業(yè)務(wù)參數(shù)</param>///<paramname="callerCt*">用戶登錄信息</param>///<paramname="strErr">錯(cuò)誤描述</param>///<returns>返回提交調(diào)用結(jié)果,成功返回true,否則返回false。</returns>PublicboolRevokeAudition(stringbizObjectID,stringeventID,stringVou

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論