二开案例.单据插件.WebApi保存单据失败后暂存单据

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.单据插件.WebApi保存单据失败后暂存单据

【应用场景】

WebApi保存单据失败后,暂存单据。


【案例演示】

采购订单,WebApi保存单据失败后,暂存单据

正常情况下,保存失败,接口内部不会暂存单据,只会返回操作失败的响应数据。



【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【单据插件】WebApi保存单据失败后暂存单据
    /// </summary>
    [Description("【单据插件】WebApi保存单据失败后暂存单据"), HotUpdate]
    public class DraftBillAfterSaveFailedBillPlugIn : AbstractBillPlugIn
    {
        public override void AfterSaveFailed(AfterSaveFailedEventArgs e)
        {
            base.AfterSaveFailed(e);
            if (Context.ClientType == ClientType.WebApi)
            {
                if (e.OperationResult.ValidationErrors.Any(o => o.Message.Contains("违反字段唯一性要求:编码唯一")))
                {
                    // 编码重复,暂存单据
                    var result = BusinessDataServiceHelper.Draft(this.Context, this.View.BillBusinessInfo, this.Model.DataObject);
// 执行暂存操作后,将执行结果写入WebApi保存接口的返回数据包中。
                    var validationErrorInfo = new ValidationErrorInfo(
                        "###",
                        this.Model.DataObject["Id"].ToString(),
                        0,
                        0,
                        "E2",
                        "单据暂存" + (result.IsSuccess ? "成功" : "失败"),
                        "",
                        ErrorLevel.Error);
                    e.OperationResult.ValidationErrors.Add(validationErrorInfo);
                }
            }
        }
        public override void OnAfterWebApiOperation(AfterWebApiOperationArgs e)
        {
            base.OnAfterWebApiOperation(e);
            return;
            // TOD:在此事件中也可以暂存,但执行时机太晚,不方便返回暂存结果。
            if (e.WebContext.OperationResult.ValidationErrors.Any(o => o.Message.Contains("违反字段唯一性要求:编码唯一")))
            {
                // 编码重复,暂存单据
                var result = BusinessDataServiceHelper.Draft(this.Context, e.WebContext.View.BillBusinessInfo, e.WebContext.View.Model.DataObject);
                
            }
        }
    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,注册表单插件,保存元数据,开发完毕。



【功能验证】

<1>登录业务站点,打开星空自带的WebApi测试页面,测试采购订单保存接口,保存数据包故意设置已经存在的单据编号,此时保存接口执行失败,但单据数据会暂存。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696


二开案例.单据插件.WebApi保存单据失败后暂存单据

【应用场景】WebApi保存单据失败后,暂存单据。【案例演示】采购订单,WebApi保存单据失败后,暂存单据。正常情况下,保存失败,接口内部不...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息