U9二次开发之BP定时任务插件开发

64 篇文章 14 订阅
订阅专栏

采购订单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; // 审核:8
                            approveProxy.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二开的资料也比较少,仅仅做个记录,以备查看。

U9C档案开发文档资源
12-08
U9档案开发
用友 U9 抛异常代码
weixin_30376163的博客
07-05 322
throw new Exception(“”) 转载于:https://www.cnblogs.com/Xanthus/p/11136906.html
用友U9归来:从创新软件到规模化交付产品
u013835992的专栏
06-24 1420
越来越多离散制造行业成功用户成功案例浮出水面,相关的媒体活动逐渐增多…… 沉寂了很长时间,甚至被人认为已经被用友软件(600588,股吧)放弃的U9终于回归。 在过去5年多时间里,用友U9从一个创新型软件产品逐渐发展成为能够规模化交付的产品。 用友U9是带着光环出现的。2009年,被冠名为“世界级管理软件”的用友U9的发布,在我国ERP市场掀起了巨大的波澜。 基于SOA架构
(未解决)UFIDA U9搜索服务无法开启
jialiangliang_2012的专栏
10-12 862
本地服务中UFIDA U9搜索服务无法启动 错误问题: 目前问题尚未解决。 问题原因:不明··· 解决方法:寻找中···
U9接口服务被调用报错怎么查看
何春晖ERP程序员
01-06 2763
当U9服务被调用时报错时我们怎么查看错误呢?  如报错如下:  在 UFSoft.UBF.View.Query.QueryContext.Translate(String oql, GlobalizationContext option)    在 UFSoft.UBF.View.Query.QueryContext.DefineQuery(String name, String oql,
U9二次开发技术资料文档说明
04-08
U9二次开发比较全的word资料,手把手教会学习U9二次开发技术。从档案开发到单据开发、BE开发,UI开发,接口调用,报表、打印开发,都要详细的文档说明
U9二次开发之补丁制作
zhanyd的博客
09-01 1572
我把U9补丁制作的流程记录一下,供你参考。
U9客开操作手册(PPT版).zip
05-20
U9二次开发比较全的word资料,手把手教会学习U9二次开发技术。从档案开发到单据开发、BE开发,UI开发,接口调用,报表、打印开发,都要详细的文档说明
U9二次开发之BE开发
zhanyd的博客
09-01 3504
这就是BE开发的整个过程,没什么难度,只是过程比较繁琐,网上u9二开的资料也比较少,仅仅做个记录,以备查看。
U9二次开发之轻量服务项目开发
最新发布
zhanyd的博客
11-24 477
最近公司要开发一个下载图纸的U9轻量级接口,轻量级接口就是restful api,可以直接通过get、post等方式调用,参数的传送和结果的返回都使用JSON格式,用起来比Webservice接口爽多了。
用友软件U9_UBF_STUDIO使用手册V28
07-12
用友U9二开工具
UBFStudio使用手册 V2.8(用友U9二次开发
08-29
UBFStudio使用手册 V2.8(用友U9二次开发
用友U9_ERP软件实施宝典5-UBF与客开
07-12
用友U9客开资料
基于U9 6.6 二次开发客开资料(功能点)
02-04
报表开发资料,加客开模板方法,件解决方案,U9API示例相关资料,U9调试技巧,U9补丁制作说明,ClassView
U9C单据开发资源文档
12-08
U9C单据开发资源文档
U9 cloud智能工厂APP开发指南
04-23
U9 cloud智能工厂APP开发指南
U9 介绍
天亿的管理软件开发家园
02-05 1883
用友U9作为全球第一款完全基于SOA架构的世界级企业管理软件,用友U9面向快速发展与成长的中大型制造企业复杂应用,以“实时企业、全球商务”为核心理念,完全适应多组织供应链协同、多工厂制造协同、产业链协同、产品事业部和业务中心的管理模式,更能支持多生产模式的混合生产与规划、多经营模式的混合管理、精益生产、全面成本、跨国财务等深度应用,具有高度灵活的产品架构,帮助企业快速响应变化,支持经营、业务与管理
U9开发手册记录不定时更新
jieeeeeeeeeeee的博客
02-16 607
BE件 查看以及停用方法U9菜单客开监控里面 右键新窗口打开 网址后 加上&Admin-true后,按钮可用,选中客开件,暂停运行(临时暂停,永久暂停请干掉配置文件), 暂停的件IIS重启后会自动生效。
U9 调BP 注意事项
hduzh的专栏
03-08 1131
U9用户自定义的BP一定要发布,否则可能调不进去
c# u9系统开发
07-03
c是英文字母表中的第三个字母。它的读音是/si:/,和汉语中的字母“西”发音相似。c是一个非常重要的字母,它在很多单词中都起到了不可或缺的作用。 首先,c在构成英语中很多重要的音/词组中起到了关键作用。例如,c在构成单词“car”(汽车)、“cat”(猫)和“cup”(杯子)等等时形成了清晰有力的音。此外,c与其他字母的组合也形成了很多常见的音/词组,例如“ch”(发音为/Tʃ/)在“chocolate”(巧克力)和“cheese”(奶酪)中,以及“cr”(发音为/kr/)在“crab”(螃蟹)和“cry”(哭)中。 其次,c也是数学中的一个重要符号。在一元一次方程中,c表示常数项,它是方程中没有带未知数的项。例如,在方程2x + 3 = c中,c就表示一个常数,它的具体值需要根据具体的问题来确定。 此外,在计算机科学中,c是一种广泛使用的编程语言的名称。C语言是一种高级的程序设计语言,它被广泛应用于软件开发中,尤其是系统软件和嵌入式系统的开发。 总之,c是一个重要的字母,它不仅在语言中发挥着重要的角色,还在数学和计算机科学中拥有特殊的意义和作用。无论是在日常生活中还是在学术研究中,c都是一个不容忽视的字母。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 5G到底厉害在什么地方?和4G有什么不同? 30265
  • 什么是虚拟内存? 22434
  • 企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充。。。 8901
  • 为什么别人家的ChatGPT比我家的更聪明? 7712
  • Midjourney注册全流程~超详细 6683

分类专栏

  • AI 7篇
  • 学习 7篇
  • 计算机基础 64篇
  • 区块链 1篇
  • 生活 17篇

最新评论

  • AI神助攻!小白也能制作自动重命名工具~

    2401_84141219: 阅读这篇博文真是一次愉快的体验!作者的文字真是动人心弦,语言精准而生动。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 中小学生如何开始创办谷歌?

    CSDN-Ada助手: 推荐 Python入门 技能树:https://edu.csdn.net/skill/python?utm_source=AI_act_python

  • 来吧,开发你的第一个智能合约

    zhanyd: function setName(string memory _name) public { // 函数体 } 加上memory试试

  • U9二次开发之轻量服务项目开发

    zhanyd: 403一般是客户端的问题,是不是参数类型搞错了?

  • U9二次开发之轻量服务项目开发

    qq_19704389: 我弄的轻量级接口,在调用的时候,提示403未授权. 请问老师,你遇到过这种情况么,是在哪一步需要注意呢?

最新文章

  • AI神助攻!小白也能制作自动重命名工具~
  • 中小学生如何开始创办谷歌?
  • 不用写一行代码,就能让你的公众号华丽变身成AI智能,超详细的攻略来了~
2024年10篇
2023年18篇
2022年16篇
2021年27篇
2020年22篇
2019年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司乐山关键词按天收费多少钱大连关键词按天收费珠海至尊标王价格濮阳seo网站推广报价聊城网站优化软件公司东莞网站推广工具价格本溪英文网站建设报价桐城英文网站建设公司兰州网站seo优化价格和田SEO按天扣费推荐湘西百度关键词包年推广价格遵义品牌网站设计公司四平网页制作公司沈阳模板制作宣城网站制作设计公司上饶高端网站设计价格平湖外贸网站建设马鞍山seo网站优化推荐延边网络推广多少钱固原网站推广工具推荐内江seo报价坪地企业网站建设报价辽源网页制作推荐盘锦百度网站优化排名公司海南设计网站报价黔南seo推荐山南企业网站设计报价昌吉百度seo推荐海南百姓网标王推广淮北SEO按天计费报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化