易飞审核员说明
易飞所有的单据审核都是调用审核元进行审核的,但是该审核员接口又没有开放,所以只能通过一些老的代码中分析出审核员接口及功能。使用该审核员接口主要是可以与其它系统集成实现单据的审核。
审核元相关分析
DELPHI代码
uses
ComObj
//调用审核元方法
TransManager := CreateOleObject('TRANSMANAGER.TXNMANAGER');
//调用审核的方法
mResult := TransManager.Doit(mInitParam);
//相关参数说明
mAction:= VarArrayCreate([0,8],VarVariant);
mAction[1] //日志保存 N 不保存日志, Y保存日志
mAction[2] //审核状态执行 DO 执行 UNDO 取消执行。
mAction[3] //单别
mAction[4] //单号 或者 底稿编号
mAction[5] // 序号或版本号
mAction[6] //flag
mAction[7] //审核日期
mAction[8] //确认日期
mInitParam := VarArrayCreate([0,5],VarVariant);
mInitParam[0] := 'TXNMOCI03'; // 作业程序代号
mInitParam[1] := 8888; // 公司ID
mInitParam[2] := YFDEMO; //数据库名称
mInitParam[3] := DS; //用户ID
mInitParam[4] := '';
mInitParam[5] := mAction ;
封装审核元接口
DELPHI代码
procedure TYFerpfrm.CallTransManager(SlipType,SlipCode,TransDate,ProID,CompanyID,UserId,TODO,ISModi,Ver:string);
var
tmpmsg: string;
k:Integer;
mResultDesc:OleVariant;
submResultDesc:OleVariant;
mInitParam,mAction:OleVariant;
mResult:Boolean;
TransName:string;
begin
mAction:= VarArrayCreate([0,8],VarVariant);
mAction[0] :='';
mAction[1] :='N'; //Y保存执行日志 ,N不保存执行日志
if TODO='Y' then
begin
mAction[2] :='DO'; //DO 审核执行,UNDO 取消审核执行
end
else
begin
mAction[2] :='UNDO'; //DO 审核执行,UNDO 取消审核执行
end;
mAction[3] :=trim(SlipType); //单别或者底稿编号
mAction[4] :=trim(SlipCode); //单号或者生效日期,为底稿编号时,这里为flag
mAction[5] :=0; //审核时为0,审核成功。 //录入发票审核时为1 //版本号,审核单据没有版本本号,所以为 0
mAction[6] :=''; //flag
mAction[7] :=trim(TransDate);
//变更单单据处理。
if ((ProID='COPI07') OR (ProID='PURI08') OR (ProID='MOCI11') OR (ProID='PURI13') OR (ProID='MOCI12')) then
begin
if (VarIsEmpty(Ver) or VarIsNull(Ver)) then
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+'-'+trim(Ver)+' '+'版本号或序号为空,无法审核!';
mylogList.Add(msg);
exit;
end;
mAction[5]:=trim(Ver);
mAction[6] :=0;
mAction[8] :=trim(TransDate);
end;
adoquery2.Connection:= ADOConnection1;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Text:='select MB001,MB002,MB003 from DSCMB where MB001 ='''+trim(CompanyID)+'''';
adoquery2.Open;
mInitParam := VarArrayCreate([0,5],VarVariant);
mInitParam[0] := 'TXN'+UpperCase(trim(ProID)); // 作业代号
mInitParam[1] := trim(adoquery2.fieldbyname('MB001').AsString); // 公司ID
mInitParam[2] := trim(adoquery2.fieldbyname('MB003').AsString); //数据库名称
mInitParam[3] := trim(UserId); //用户ID
mInitParam[4] := '';
mInitParam[5] := mAction ;
if ISModi='N' then //连接审核元接口
begin
TransManager := CreateOleObject('TRANSMANAGER.TXNMANAGER');
end
else
begin
adoquery3.Connection:= ADOConnection1;
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Text:='SELECT MC001,MC003,MC004 FROM DSCMC where MC001 = '''+UpperCase(trim(ProID))+'''';
adoquery3.Open;
mInitParam[0] := 'TXN'+UpperCase(trim(adoquery3.fieldbyname('MC004').AsString)); // 作业代号
if trim(adoquery3.fieldbyname('MC003').AsString) ='TransModi_DPM.Class1' then
begin
TransName:='TRANSMANAGER.TXNMANAGER';
end
else
begin
TransName:=UpperCase(trim(adoquery3.fieldbyname('MC003').AsString));
end;
TransManager := CreateOleObject(TransName);
end;
if not (VarIsEmpty(TransManager) or VarIsNull(TransManager)) then
begin
try
mResult := TransManager.Doit(mInitParam);
except on E: Exception do
begin
mylogList.Add(E.Message);
exit;
end;
end;
if mResult =false then //执行失败时反馈
begin
mResultDesc:=TransManager.ResultDesc;
if (VarIsEmpty(mResultDesc) or VarIsNull(mResultDesc)) then //判断是否有异常报错反馈内容,如果没有就直接输出结果报错。如果有就取报错数据进行组合
begin
if (VarIsEmpty(Ver) or VarIsNull(Ver)) then
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+' '+TransManager.ErrorDescript;
end
else
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+'-'+trim(Ver)+' '+TransManager.ErrorDescript;
end;
mylogList.Add(msg);
exit;
end
else
begin
submResultDesc:= mResultDesc[2];
end;
adoquery4.Connection:= ADOConnection1;
adoquery4.Close;
adoquery4.SQL.Clear;
adoquery4.SQL.Text:='SELECT TYPE,ID,MSG from MSGCHT where ID = '''+mResultDesc[1]+''' and TYPE= '''+mResultDesc[0]+'''';
adoquery4.Open;
tmpmsg:=adoquery4.fieldbyname('MSG').AsString;
K := 0;
msg:='';
while Pos('%S',tmpmsg) > 0 do
begin
tmpmsg := StringReplace(tmpmsg,'%S', submResultDesc[K],[]);
K:=K+1;
end;
if (VarIsEmpty(Ver) or VarIsNull(Ver)) then //有版本号或者序号时,消息增加序号或版本号
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+' '+mResultDesc[0]+':'+mResultDesc[1]+'-'+tmpmsg;
end
else
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+'-'+trim(Ver)+' '+mResultDesc[0]+':'+mResultDesc[1]+'-'+tmpmsg;
end;
end
else
begin //执行成功时反馈结果
if (VarIsEmpty(Ver) or VarIsNull(Ver)) then
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+' '+TransManager.ErrorDescript;
end
else
begin
msg:=trim(SlipType)+'-'+trim(SlipCode)+'-'+trim(Ver)+' '+TransManager.ErrorDescript;
end;
end;
mylogList.Add(msg);
end;
TmRet:=mResult;
end;
//调用方法
CallTransManager(单别,单号,审核日期,作业编号,公司ID,用户名,审核码,个案码,序号/版本号);
其它说明
以上接口分析只能完成一些常规单据(工单、采购单、销售单等)的审核,而无法实现特殊单据的审核,如(库存交易单、采购发票、DPM个案等),不知道需要配置哪些参数,有知道大神的还望可以告知。