金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#)

最近在做金蝶相关的技术支持,记录一下插件开发步骤。使用C#开发

需求:实现表单点击保存,自动进行提交审核

1、打开VS,新建项目,选择类库

2、类继承Kingdee.BOS.Core.DynamicForm.PlugIn.AbstractOperationServicePlugIn

3、以下是实现代码

 public class Save : AbstractOperationServicePlugIn{//加载单据字段public override void OnPreparePropertys(PreparePropertysEventArgs e){base.OnPreparePropertys(e);//是否内部交易e.FieldKeys.Add("FIsInner");}public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e){base.OnPrepareOperationServiceOption(e);//为了在BeginOperationTransaction里检查数据抛出异常时//只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会//循环为每一张单据创建事务调用操作 e.SupportTransaction = true;e.SurportBatchTransaction = false;}/// <summary>/// 保存操作完毕,事务结束之前,进行自动提交、审核,只有内部交易的发货通知单才自动提交审核/// </summary>/// <param name="e"></param>public override void EndOperationTransaction(EndOperationTransactionArgs e){if (e.DataEntitys.IsNullOrEmpty() || e.DataEntitys.Count() == 0){return;}DynamicObject objs;List<Object> list = new List<Object>();for (int i = 0; i < e.DataEntitys.Length; i++){objs = e.DataEntitys[i];if (objs["FIsInner"].ToString().Trim().Equals("True")){list.Add(objs["Id"]);}else{continue;}}if (list.Count() == 0){return;}// 取到需要自动提交、审核的单据内码object[] pkArray = list.ToArray();// 设置提交参数// using Kingdee.BOS.Orm;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 = ServiceFactory.GetSubmitService(this.Context);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<KeyValuePair<object, object>> pkEntityIds = new List<KeyValuePair<object, object>>();foreach (var pkValue in pkArray){pkEntityIds.Add(new KeyValuePair<object, object>(pkValue, ""));}List<object> paras = new List<object>();paras.Add("1");paras.Add("");// 调用审核操作ISetStatusService setStatusService = ServiceFactory.GetSetStatusService(this.Context);// 如下调用方式,需显示交互信息IOperationResult auditResult = setStatusService.SetBillStatus(this.Context, this.BusinessInfo, pkEntityIds, paras, "Audit", auditOption);// 判断审核结果,如果失败,则内部会抛出错误,回滚代码if (CheckOpResult(auditResult) == false){return;}}/// <summary>/// 判断操作结果是否成功,如果不成功,则直接抛错中断进程/// </summary>/// <param name="opResult"></param>/// <returns></returns>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;}}

4、生成.dll文件,将插件加入表单的操作列表-保存服务中

分享小技巧,金蝶到7.几的版本以后才支持热更新,所以每次修改插件都要重启IIS,是不是觉得很麻烦,特别是有很多用户在使用的时候,只能下班时间搞。

告诉你们一个办法,修改插件的名字,每次用一个新名字插件在第一次就会生效,如果修改了代码,就再修改插件名字。虽然也比较麻烦,但是不用重启IIS,不用加班搞,爽不爽。。。。

如果对你有用,请给个赞,哈哈!!!

金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#)相关推荐

  1. 单据保存,提交以及审批处理

    保存 保存指定自定义action类 找到单据节点相关xml文件,更改指向自定义的类,如:nc.ui.bm.bm_budgetadjust.action.Bm_budgetadjustSaveActio ...

  2. 金蝶K3cloud python插件之更新物料列表自定义字段(成本更新)

    适用场景: 金蝶k3cloud物料表(数据库对应表:t_bd_material)缺少成本字段,这对于日常进行销售单据毛利预估造成一定困难,为了解决这一问题需要在物料表中,通过BOS开发平台进行自定义添 ...

  3. 火车票订票插件,可自动登陆,自动刷票,自动提交

    一年一度的抢票大战已经上演,因为现在铁道部改成分节点的放票策略, 打算在网上购票的朋友们要掌握好放票的时间,避免错过放票时间.  前几天在往上看到的别人介绍的一个Chrome的插件 ,可以自动登录火车 ...

  4. 首发 ZBlog神马MIP数据自动提交插件

    介绍: 这个是ZBlog程序用的插件如果没有ZBlog程序就请看其他文章或者点我主页看其他文章 注:这个插件是需要mip模板才可以使用.如果没有mip模板的话.我这边也打包了mip支持插件 首先登录你 ...

  5. 金蝶k3rpc服务器不可用_金蝶K3CLOUD高并发阿里云部署架构方案

    金蝶作为中大型企业信息化管理的ERP管理软件,其特点在于对于服务器配置要求较高,作为针对性的云计算服务厂商我会讲解一下K3cloud高并发如何部署在阿里云上. 做项目的都知道,小客户比较关注的是成本, ...

  6. Hexo 每天自动提交网站url到搜索引擎、百度、必应、谷歌

    百度收录很蛋疼 在此之前用过@小康写的hexo-baidupush很不错. 由于Bing和Google只爬sitemap.xml收录已经很快了,但总是爬sitemap.xml效率肯定没Api提交的快. ...

  7. linux svn自动提交,svn 定时自动提交

    Linux 端的svn 定时自动提交如果一个提交操作是定向定时的重复动作,我们可以把commit 的操作和参数对象抽象出来,封装在脚本中执行.并将脚本配置在crontab 中定时执行. commit ...

  8. php 表单提交2次,微信开发之php表单微信中自动提交两次问题解决办法

    前言: 最近做微信开发,在微信中访问PHP页面,页面中有个表单.测试发现偶尔会出现表单被自动提交两次的情况,导致流程出错. 问题原因 暂时未找到原因,不过怀疑跟微信本身的机制有关. 解决方法 用ses ...

  9. cms是什么意思啊_织梦CMS网站如何自动提交百度快速收录(详细教程)

    前不久,站长们发现百度搜索资源平台把链接提交"的功能改为"普通收录",同时新增了"快速收录"的功能.普通收录,我相信很多站长们都知道怎么去提交,但是快 ...

最新文章

  1. 中国太阳能热水器市场营销模式探析与品牌格局调研报告2022版
  2. spring框架所有包解释
  3. spring 事务的实现方式和原理_spring整合atomikos实现分布式事务
  4. 苹果要弃用LCD屏,便宜的iPhone XR面临绝版
  5. 黑客泄露50多万服务器、路由器和物联网设备的密码
  6. 苹果CMSv10首涂第四套自适应视频站正版原创挖片网高级DIY模板
  7. ASO秘籍:教你如何学会积分墙优化套路
  8. [Wondgirl]从零开始学React Native之Text(五)
  9. 康托尔集合论-罗素悖论-公理化集合论-不完全性定理
  10. 母亲的牛奶 Mother's Milk(usaco)
  11. 群晖docker安装cms_群晖docker安装蚂蚁笔记安装教程
  12. 如果不能从做事转入治人,那么经年的螺丝钉岁月,会让你既无暇提高自己,也无法积累资源,在锈迹斑斑以后被新的螺丝钉换掉。
  13. 声纹识别中pooling总结
  14. LSTM论文翻译-《Understanding LSTM Networks》
  15. 分享文章:如何提高你的学习能力,也许对你会有用
  16. 网站引用阿里云oss里面的远程字体图标不显示解决方案
  17. 1060 爱丁顿数 (25分)
  18. 显示器偏色测试软件,电脑显示器偏色怎么调?电脑显示器偏色校正方法(2)
  19. RabbitMQ(详解)
  20. ECharts:免费,开源,超炫的可视化作品

热门文章

  1. 老庞学习笔记:段永平语录
  2. 推荐:适合小白的AI算法工程师高效学习路径!!
  3. 贴吧引流效果怎么样?当机会来了你在做什么?
  4. 基于ASP.NET C#的服装商城管理系统
  5. 阿里云华为云腾讯云被攻击的危害有多大
  6. 机器人运动学-加速度问题
  7. 怎么使用口袋迷你U盘PE制作工具的ISO模式制作U盘系统
  8. keycloak集群配置
  9. 这篇文章,我们来谈一谈Spring中的属性注入
  10. Django Templete模板逻辑语法简单运用(二)