【解决方案】原创
金蝶云社区-王尚策
王尚策
74人赞赏了该文章 805次浏览 未经作者许可,禁止转载编辑于2023年08月02日 16:35:24

【需求背景】

单据编辑界面上,有个保存时自动提交、提交时自动审核的选项。

但此选项,在自动下推保存下游单据时,不会生效。下游单据保存后,还是创建状态。

现在需要在自动下推时,生成的下游单据,也能够自动提交、审核。


【解决方案】

在下游单据的保存操作上,编写插件,使用插件实现自动提交、审核。


//保存操作完毕,事务结束之前,进行自动提交、审核
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
    // 取到需要自动提交、审核的单据内码
    object[] pkArray = (from p in e.DataEntitys
    select p[0]).ToArray();
    
    // 设置提交参数
    OperateOption submitOption = OperateOption.Create();
    submitOption.SetIgnoreWarning(this.Option.GetIgnoreWarning());
    submitOption.SetInteractionFlag(this.Option.GetInteractionFlag());
    submitOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
    
    // 创建提交服务:using Kingdee.BOS.Contracts; using Kingdee.BOS.App;
    ISubmitService submitService = ServiceHelper.GetService();
    IOperationResult submitResult = submitService.Submit(this.Context, this.BusinessInfo,pkArray, "Submit", submitOption);
    
    // 判断提交结果,如果失败,则内部会抛出错误,回滚代码
    if (CheckOpResult(submitResult) == false)return;
    
    // 构建操作可选参数对象
    OperateOption auditOption = OperateOption.Create();
    auditOption.SetIgnoreWarning(this.Option.GetIgnoreWarning());
    auditOption.SetInteractionFlag(this.Option.GetInteractionFlag());
    auditOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
    
    // 构建单据主键参数
    List> pkEntityIds = new List>();
    foreach (var pkValue in pkArray)
    {
        pkEntityIds.Add(new KeyValuePair(pkValue, ""));
    }
    List paras = new List();
    paras.Add("1");
    paras.Add("");
   
    // 调用审核操作
    ISetStatusService setStatusService = ServiceHelper.GetService();
   
    // 如下调用方式,需显示交互信息
    IOperationResult auditResult = setStatusService.SetBillStatus(this.Context,this.BusinessInfo,pkEntityIds,paras,
    "Audit",
    auditOption);
    
    // 判断审核结果,如果失败,则内部会抛出错误,回滚代码
    if (CheckOpResult(auditResult) == false)return;
    
    
    ///判断操作结果是否成功,如果不成功,则直接抛错中断进程
    private bool CheckOpResult(IOperationResult opResult)
    {
        bool isSuccess = false;
        if (opResult.IsSuccess == true)
        isSuccess = true;// 操作成功
    else
    {
        if (opResult.InteractionContext != null && opResult.InteractionContext.Option.GetInteractionFlag().Count > 0)
        {
        // 有交互性提示
        // 传出交互提示完整信息对象
        this.OperationResult.InteractionContext = opResult.InteractionContext;
        // 传出本次交互的标识,
        // 用户在确认继续后,会重新进入操作;
        // 将以此标识取本交互是否已经确认过,避免重复交互
        this.OperationResult.Sponsor = opResult.Sponsor;
        // 抛出错误,终止本次操作
        throw new KDBusinessException("", "本次操作需要用户确认是否继续,暂时中断");
    }
    else
    {
        // 操作失败,拼接失败原因,然后抛出中断
        opResult.MergeValidateErrors();
        if (opResult.OperateResult == null)
        {// 未知原因导致提交失败
        throw new KDBusinessException("", "未知原因导致自动提交、审核失败!");
    }
    else
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("自动提交、审核失败,失败原因:");
    foreach (var operateResult in opResult.OperateResult)
    {
        sb.AppendLine(operateResult.Message);
    }
        throw new KDBusinessException("", sb.ToString());
    }
    }
    }
    return isSuccess;
}


图标赞 74
74人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!