采购订单BP定时任务插件开发

最近我们公司要做采购订单审批和OA的集成,也就是把u9的审批流程搬到OA里去做。当业务员点击标准采购提交按钮的时候,把采购订单的信息触发到OA流程,在OA里做审核,OA审核完成之后,再把审核结果回写到U9。

要实现这个功能需要用到BE插件和BP插件。

BE插件负责在业务员提交审核的时候,把采购订单的信息写到中间表里,然后再触发OA流程。

(请看这篇文章:U9二次开发之BE插件开发)

BP插件负责定时查询中间表,把审核结果写回到u9系统。

这里我讲解下BP插件的开发流程。

生成项目代码

1.打开ubfdev工具新建解决方案

打开ubfdev工具,点击文件-新建解决方案,勾选操作项目,输入解决方案的名称,点击确定按钮。

2.修改项目名称

修改项目名称,并删除自动生成的.ubfbp文件。

点击属性按钮,修改名称:


修改后:

3.新建业务组件

右键项目–新建,选择业务操作组件,填写组件名称,点确定按钮。

选择模型视图,双击项目,就可以打开操作页面。


拖动操作按钮到窗体:


点击操作实体,点击属性按钮,修改名称:

修改事务类型为required:

4.构造代码

右键项目点击构造

在消息列表中可以看到生成代码的路径

编写代码

打开生成的项目,右键引用,添加引用:

注意:BP需要引入*PMISV.Agent.dll,要引入代理。

编写代码:

namespace UpdatePurchaseOrderAuditStatus
{using System;using System.Collections.Generic;using System.Data;using System.Text;using UFIDA.U9.CBO.Pub.Controller;using UFIDA.U9.PM.PO;using UFSoft.UBF.AopFrame;    using UFSoft.UBF.Util.Context;using UFSoft.UBF.Util.DataAccess;using UFIDA.U9.Base.DTOs;using UFIDA.U9.PM.DTOs;/// <summary>/// UpdateStatus partial /// </summary> public partial class UpdateStatus { internal BaseStrategy Select(){return new UpdateStatusImpementStrategy();   }       }#region  implement strategy    /// <summary>/// Impement Implement/// /// </summary>   internal partial class UpdateStatusImpementStrategy : BaseStrategy{public UpdateStatusImpementStrategy() { }public override object Do(object obj){                      UpdateStatus bpObj = (UpdateStatus)obj;//get business operation context is as follows//IContext context = ContextManager.Context  //auto generating code end,underside is user custom code//and if you Implement replace this Exception Code...//throw new NotImplementedException();DataSet ds = new DataSet();DataParamList paras = new DataParamList();StringBuilder sql = new StringBuilder();//查找OA审核通过并未同步的数据,OA审核不通过的不处理sql.Append("select * from PurchaseOrder_Middle where audit_status = 1 and state = 0");DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), sql.ToString(), paras, out ds);if (ds != null){if (ds.Tables.Count > 0){// 生成审核状态BP对象UFIDA.U9.ISV.PO.Proxy.ApprovePOISVProxy approveProxy = new UFIDA.U9.ISV.PO.Proxy.ApprovePOISVProxy();foreach (DataRow dataRow in ds.Tables[0].Rows){try{string auditPerson = Convert.ToString(dataRow["audit_person"]);if (auditPerson != null){//设置审核人setApprovedBy(auditPerson);}List<IDCodeNameDTOData> dtoDatas = new List<IDCodeNameDTOData>();IDCodeNameDTOData dtoData = new IDCodeNameDTOData();dtoData.ID = Convert.ToInt64(dataRow["PRID"]);dtoDatas.Add(dtoData);//审核通过approveProxy.ActionType = 8; // 审核:8approveProxy.POList = dtoDatas;approveProxy.TargetOrgCode = UFIDA.U9.Base.Context.LoginOrg.Code;approveProxy.Do();//修改中间表状态sql.Clear();sql.Append("update PurchaseOrder_Middle set state = 1,memo = '审核状态同步成功',update_by = 'sys',update_time = GETDATE() where id = " + dataRow["id"]);DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), sql.ToString(), paras, out ds);}catch (Exception ex){//记录异常信息sql.Clear();sql.Append("update PurchaseOrder_Middle set state = -1, memo = '" + ex.Message + "',update_by = 'sys',update_time = GETDATE() where id = " + dataRow["id"]);DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), sql.ToString(), paras, out ds);//throw ex;  //throw 异常会导致sql回滚}}}}return null;}//设置审核人private void setApprovedBy(String UserCode){PlatformContext context = PlatformContext.Current;if (!((context == null) || string.IsNullOrEmpty(context.OrgCode))){ContextDTO tdto = new ContextDTO();//传入审核人工号tdto.UserCode = UserCode;tdto.EntCode = context.EnterpriseID;tdto.CultureName = context.Culture;tdto.OrgCode = context.OrgCode;tdto.WriteToContext();}}}#endregion}

编译后,执行AutoBuild.bat批处理程序,会自动拷贝对应的项目的dll文件到u9系统目录中。


如果复制失败,请参考AutoBuild.bat的内容手动复制。

还有记得要运行UBFV60\U9.VOB.Product.Other\Unconfiged\MetadataScript目录下的sql语句。

我忘了运行这里的sql导致在服务权限页面上找不到服务,浪费了很多时间。。。

发布组件

右键解决方案,点击发布服务组件,发布组件:

发布完成之后,会在解决方案目录下生成.sg文件。

在配置组件之前需要先配置environment.xml文件 。

1.配置 environment.xml文件

在\UBFV60\U9.VOB.Product.UBF\UBFStudio\Runtime目录下打开environment.xml文件,配置数据库连接信息。

2.配置组件

在\UBFV60\U9.VOB.Product.UBF\UBFStudio目录下打开BuildupDesigner.exe文件

选择供应链–采购管理,点击增加组件按钮。


载入组件

选择.sg文件:

选择要加载的组件,然后点确定就行了。

然后选择工具–发布即可。


3.添加服务权限

打开u9服务权限页面,选择采购管理模块,选择我们添加的BP服务,一般在最后一页,然后在执行下拉框中选择允许。

4.插入UBF_JOB_NoParaRunableBPSVList表数据

U9 6.0最新补丁优化了请求管理中选择异步程序功能,需要在预制表UBF_JOB_NoParaRunableBPSVList中插入BP相关数据,才可以选择到BP(预制时需要BP的全名)。

预置脚本如下:(每个调度执行的BP都需要预置)

INSERT INTO UBF_JOB_NoParaRunableBPSVList VALUES( NewID(), ‘UpdatePurchaseOrderAuditStatus.UpdateStatus’,‘修改采购单审核状态’)

注意:UBF_JOB_NoParaRunableBPSVList 表的 FullName 字段即:‘UpdatePurchaseOrderAuditStatus.UpdateStatus’,要去服务权限页面中复制,不要搞错了。

5.添加请求管理

打开请求管理页面,填写编码、请求名称,然后选择调度方案,选择应用和异步程序,点击保存即可。

保存后,点击操作–提交请求,有了提交人和提交时间就算成功了。

6.调试程序

注意一下,如果要调试BP,选择附加的进程是ApplicationService.exe而不是w3wp.exe:

制作补丁

关于补丁制作可以参考这篇文章:U9二次开发之补丁制作

1.复制bdxml文件

把ubfdev解决方案路径下的.bdxml文件复制到AssemblyInfo文件夹下:


2.复制bp相关的编译文件

我们把bp相关的编译文件,分别从

项目路径\BpImplement\bin\Debug

项目路径\BpAgent\bin\Debug

复制到Files文件夹下:

如果你不知道要复制哪些文件,可以参考AutoBuild.bat文件里的内容。

3.复制.bulk文件

然后,从UBFV60\U9.VOB.Product.Other\Unconfiged\MetadataScript路径下把.bulk文件复制到Metadata文件夹下:


做好补丁之后就可以发布啦。

最后

这就是BP定时任务插件开发的整个过程,步骤比较繁琐,网上u9二开的资料也比较少,仅仅做个记录,以备查看。

U9二次开发之BP定时任务插件开发相关推荐

  1. U9二次开发之BE插件开发

    采购订单BE插件开发 最近我们公司要做采购订单审批和OA的集成,也就是把u9的审批流程搬到OA里去做.当业务员点击标准采购提交按钮的时候,把采购订单的信息触发到OA流程,在OA里做审核,OA审核完成之 ...

  2. Datax 插件二次开发之parquet日志问题处理

    Datax 插件二次开发之parquet日志问题处理 Date: December 31, 2021 参考文档: https://blog.csdn.net/wuleidaren/article/de ...

  3. C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处

    我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1.Data2.Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed P ...

  4. C#进行Visio二次开发之Web查看Visio图纸

    前面介绍的Visio开发知识,都是基于Winform的Visio的开发知识,图纸的展示都是基于Winform方式展示的.但很多时候,如果能够通过Web方式可以查看最新的图纸信息,那么系统将更加趋向完美 ...

  5. C#进行MapX二次开发之MapX基础知识

    C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...

  6. Vissim11二次开发之C#---实现仿真时间内实施不同信号控制方案

    Vissim11二次开发之C#-实现仿真时间内实施不同信号控制方案 本文起源:近些日子,由于论文仿真需求,重重重操Vissim旧业. 先说下需求情况吧:路网区域优化前后两种信号控制方案,由于论文场景要 ...

  7. AutoCAD .Net二次开发之Editor选择集

    AutoCAD .Net二次开发之Editor选择集 PickFirst选择集 一般选择集 选择集过滤SelectionFilter Editor的路径: Autodesk.AutoCAD.Appli ...

  8. Revit二次开发之DMU

    Revit二次开发之DMU   Revit是一款三维联动的设计软件,一处修改处处修改, 比如,在三维视图修改了墙的位置,二维视图上墙的位置也跟着变化了,同时,墙上的门窗也会跟着移动. 这种联动关系是R ...

  9. AutoCAD .Net二次开发之JIG动态绘制详解

    AutoCAD .Net二次开发之JIG动态绘制详解 AutoCAD平台动态绘制分两种,单实体绘制EntityJig和多实体绘制DrawJig,需要自己自定义类去继承.(本人的理解全放在了代码注释中, ...

最新文章

  1. NAS之旅--基于centos7搭建netatalk Mac TimeMachine 备份与共享服务器
  2. Laravel5.2之Filesystem源码解析(下)
  3. Java基础之移位运算,为什么高位补1?
  4. 机器学习(5)--化无限为有限
  5. python小括号报错_Python学习记录:括号配对检测问题
  6. C++ 管理数据内存的方法
  7. ssm框架整合_框架整合战斗压缩粮篇SpringCloud+SpringBoot+SSM
  8. 一张图搞懂美国大数据产业(上)
  9. linux 进程间通信机制(IPC机制)一消息队列
  10. Leetcode各种题型题目+思路+代码(共176道题及答案)
  11. C语言面试题---结构体
  12. 摄影测量学空间后方交会Python代码
  13. 惯性系统常用坐标系_惯性导航技术中,NEU是什么坐标系?
  14. YOLOv5 NameError: name ‘SPPF‘ is not defined
  15. 用Python做一个美丽的每日计划
  16. 成人学位英语词汇易混淆的125个词
  17. 知钱俱乐部 php,知钱俱乐部
  18. rm -rf和rm -f和rm
  19. 关于图片的多标签分类(1)
  20. mysql b tree索引原理_B+Tree原理及mysql的索引分析

热门文章

  1. python读取Excel中关联表格的数据(只要是同Excel中
  2. [CTF]-反弹shell[2]
  3. 【python】用turtle画七巧板
  4. Workbook 对象 应用示例
  5. python分析链家二手房信息----数据分析实战(一)
  6. 应用程序错误电脑黑屏_电脑运行程序出现APPCRASH错误的三种解决方法
  7. Chrome浏览器默认打开无痕模式
  8. python中累加函数_对Python实现累加函数的方法详解
  9. PyQt5开发的数据编辑器(一)
  10. 通过微博名查看id html,微博id在哪里查看?