Kingdee K3Cloud二开 根据基础资料判断是否可以多次下推

Java集成K3Cloud WebApi实战:认证、会话管理与数据交互详解 在企业级应用开发中,系统集成是实现数据互通和业务流程自动化的核心技术。通过Web API进行跨系统通信,其核心原理是基于HTTP协议,通过标准化的接口规范完成数据交换。这项技术的价值在于能够连接异构系统,打破信息孤岛,提升企业运营效率。典型的应用场景包括ERP与自研业务系统、移动应用及供应链平台的对接。本文聚焦于Java语言调用金蝶K3Cloud WebApi这一具体实践,深入剖析其特有的动态密码认证机制和基于Cookie的会话管理,并提供了使用Apache HttpClient进行稳定调用的完整方案与避坑 阅读详情

       在基础资料上面增加复选框,复选框打钩就是允许多次下推,复选框不打勾,该基础资料在单据中,该项只能下推一次。

导包:

      

封装类

using System;

namespace SenGe.k3cloud.Util
{
    /// <summary>
    /// 类名:Upper
    /// 描述:工具类
    /// 作者:SenGe
    /// 创建时间:<2019-01-09>
    /// 最后修改人:无
    /// 最后修改时间:<YYYY-MM-DD>
    /// 版权所有:SenGe
    /// </summary>
    [Kingdee.BOS.Util.HotUpdate]
    public class Upper
    {
        /// <summary>
        /// 实现:在下推的时候,保存下推的数据,其中之保存分项工程名称不允许多次下推的数据,存储下来用来进行判断下游单据是否下推过
        /// </summary>
        /// <param name="e"></param>
        
        //上游单据组织
        private String f_pion_orgid;
        //下推单据的fid
        private String fid;
        //上游单据单据头编号
        private String fbillno;
        //单据体需要下推的单据FEntryID
        private System.Int64 fentryid;
        //是否可以多次下推
        private Boolean f_isitretractable;
        //分项工程名称的fid
        private String feachName;

        public Upper()
        {

        }
        public Upper(string f_pion_orgid, string fid, string fbillno, long fentryid, bool f_isitretractable, string feachName)
        {
            this.f_pion_orgid = f_pion_orgid;
            this.fid = fid;
            this.fbillno = fbillno;
            this.fentryid = fentryid;
            this.f_isitretractable = f_isitretractable;
            this.feachName = feachName;
        }
        public string F_pion_orgid
        {
            get
            {
                return f_pion_orgid;
            }

            set
            {
                f_pion_orgid = value;
            }
        }
        public string Fid
        {
            get
            {
                return fid;
            }

            set
            {
                fid = value;
            }
        }
        public string Fbillno
        {
            get
            {
                return fbillno;
            }

            set
            {
                fbillno = value;
            }
        }
        public long Fentryid
        {
            get
            {
                return fentryid;
            }

            set
            {
                fentryid = value;
            }
        }
        public bool F_isitretractable
        {
            get
            {
                return f_isitretractable;
            }

            set
            {
                f_isitretractable = value;
            }
        }
        public string FeachName
        {
            get
            {
                return feachName;
            }

            set
            {
                feachName = value;
            }
        }
    }
}

下推代码

using System;
using System.Collections.Generic;

using Kingdee.BOS.App.Data;
using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Resource;
using System.Data;

namespace SenGe.k3cloud.Util
{
    /// <summary>
    /// 类名:IsItRetractable
    /// 描述:工具类
    /// 作者:SenGe
    /// 创建时间:<2019-01-09>
    /// 最后修改人:无
    /// 最后修改时间:<YYYY-MM-DD>
    /// 版权所有:SenGe
    /// </summary>
    [Kingdee.BOS.Util.HotUpdate]
    public class IsItRetractable : AbstractConvertPlugIn
    {
        /// <summary>
        /// 实现:下推的时候运行下面两个方法,
        ///     第一个方法是记录下推的数据库名和要下推的数据的fid,在判断分项工程名是否允许多次下推
        ///     第二个方法时获取下推目标单据的数据库名和进行查询是否有当前要下推的单据是否下推过,判断分项工程是否下推过,如果只允许下推一次,下推过,这里禁止下推
        /// </summary>
        /// <param name="e"></param>

        // 上游单据-单据头-数据库表名
        private String upperBill;
        //上有单据-单据体-数据库表名
        private String upperBody;
        //上游单据-单据体需要下推的数据的FEntryID
        private List<System.Int64> lsUpperBodyFEntryID;
        //上游单据进行下推的所有数据集合
        private List<Upper> lsUpper;


        /// <summary>
        /// 实现:查询到上游单据的数据库名字
        ///     获取当前下推的数据FEntryID,进行数据库查询找到当前单据的FID,编号,进行保存到lsUpper集合里面
        /// </summary>
        /// <param name="e"></param>
        public override void OnInSelectedRow(InSelectedRowEventArgs e)
        {
            base.OnInSelectedRow(e);
            upperBill = e.SourceBusinessInfo.Entrys[0].TableName;
            upperBody = e.SourceBusinessInfo.Entrys[1].TableName;
            lsUpper = new List<Upper>();
            lsUpperBodyFEntryID = new List<System.Int64>();
            String FEntity_FEntryID = e.InSelectedRowsSQL;
            FEntity_FEntryID = FEntity_FEntryID.Remove(0, FEntity_FEntryID.IndexOf("(") + 1);
            while (true)
            {
                if (FEntity_FEntryID.ToLower().Contains(","))
                {
                    lsUpperBodyFEntryID.Add(Convert.ToInt64(FEntity_FEntryID.Substring(0, FEntity_FEntryID.IndexOf(","))));
                    FEntity_FEntryID = FEntity_FEntryID.Remove(0, FEntity_FEntryID.IndexOf(",") + 1);
                }
                else
                {
                    lsUpperBodyFEntryID.Add(Convert.ToInt64(FEntity_FEntryID.Substring(0, FEntity_FEntryID.IndexOf(")"))));
                    break;
                }
            }
            foreach (Int64 upperBodyFentryID in lsUpperBodyFEntryID)
            {
                String strSQL = "SELECT f_pion_orgid,fid,fbillno,fentryid,f_isitretractable,feachname FROM(" +
                                "SELECT t0.FID AS FID, t0.F_PION_ORGID AS F_PION_OrgId, t0.FBILLNO AS FBillNo FROM " + upperBill + " t0 ) e0 INNER JOIN(" +
                                "SELECT t1.FEntryID AS FEntryID, t0.FID AS FID3, t1.FEACHNAME AS FeachName FROM " + upperBill + " t0  LEFT JOIN  " + upperBody + " t1 ON(t0.FID = t1.FID)" +
                                ") e1 ON e0.FID = e1.FID3 INNER JOIN  ( SELECT t0.FID AS FID2, t0.F_ISITRETRACTABLE AS F_IsItRetractable FROM T_EachProjectData t0" +
                                ") e2 ON e1.FeachName = e2.FID2 WHERE(e1.FID3 = '" + upperBodyFentryID + "')";
                IDataReader dataReader = DBUtils.ExecuteReader(this.Context, strSQL);
                while (dataReader.Read())
                {
                    String f_pion_orgid = Convert.ToString(dataReader["f_pion_orgid"]);
                    String fid = Convert.ToString(dataReader["fid"]);
                    String fbillno = Convert.ToString(dataReader["fbillno"]);
                    Int64 fentryid = Convert.ToInt64(dataReader["fentryid"]);
                    Int64 f_isitretractable = Convert.ToInt64(dataReader["f_isitretractable"]);
                    String feachname = Convert.ToString(dataReader["feachname"]);
                    if (f_isitretractable == 1)
                    {
                        Upper upper = new Upper(f_pion_orgid, fid, fbillno, fentryid, true, feachname);
                        lsUpper.Add(upper);
                    }
                }
                dataReader.Close();
            }
        }

        /// <summary>
        /// 实现:该方法获取下游单据的数据库表名
        ///     通过OnInSelectedRow方法获取到的数据在这里进行判断是否下推过,如果分项工程名称不允许多次下推的在这里查询到了,那么禁止下推
        /// </summary>
        /// <param name="e"></param>
        public override void OnCreateTarget(CreateTargetEventArgs e)
        {
            base.OnCreateTarget(e);
            String lowerBill = e.TargetBusinessInfo.Entrys[0].TableName;
            String lowerBody = e.TargetBusinessInfo.Entrys[1].TableName;
            String strSQL;
            foreach (Upper upper in lsUpper)
            {
                strSQL = "SELECT fid, f_pion_orgid, fsourcebillno, feachname, fname, f_isitretractable FROM(" +
                        "SELECT t0.FID AS FID, t0.F_PION_ORGID AS F_PION_OrgId, t0.FSOURCEBILLNO AS FsourceBillNo FROM " + lowerBill + " t0) e0 INNER JOIN(  SELECT t0.FID AS FID2, t1.FEACHNAME AS FeachName FROM " + lowerBill + " t0  LEFT JOIN  " + lowerBody + " t1 ON(t0.FID = t1.FID)" +
                        ") e1 ON e0.FID = e1.FID2 INNER JOIN  ( SELECT t0.FID AS FID3, t0_L.FEACHNAME AS FName, t0.F_ISITRETRACTABLE AS F_IsItRetractable FROM T_EachProjectData t0 LEFT JOIN T_EachProjectData_L t0_L ON(t0.FID = t0_L.FID AND t0_L.FLocaleId = 2052) ) e2 ON e1.FeachName = e2.FID3 WHERE(e0.FsourceBillNo = '" + upper.Fbillno + "'  AND    e0.F_PION_OrgId = '" + upper.F_pion_orgid + "'  AND    e2.F_IsItRetractable = '1' AND    e1.FeachName =" + upper.FeachName + ")";
                IDataReader dataReader = DBUtils.ExecuteReader(this.Context, strSQL);
                while (dataReader.Read())
                {
                    String fname = Convert.ToString(dataReader["fname"]);
                    dataReader.Close();
                    throw new KDExceptionValidate("convert", ResManager.LoadKDString("禁止重复下推,基础资料名为:" + fname + " 禁止重复下推!", "004002030004060", SubSystemType.SCM, new object[0]),
                        ResManager.LoadKDString("基础资料名为:" + fname + " 禁止重复下推。", "004002030004063", SubSystemType.SCM, new object[0]));
                }
                dataReader.Close();
            }
        }
    }
}

插件生成dll后,打开单据转换规则,将该dll放到里面即可

实战指南:通过Postman高效测试金蝶云K3Cloud OpenAPI 本文提供了一份详细的实战指南,教你如何使用Postman高效测试金蝶云K3Cloud的OpenAPI。内容涵盖从获取访问凭证、理解API文档,到在Postman中配置环境变量、构建登录请求,再到核心业务接口(如单据查询与保存)的实战测试与高级排错技巧,旨在帮助开发者快速上手并优化API集成流程。 阅读详情

相关推荐

金蝶K3 后台增加新单下推老单单据转换流程明细字段对应关系

金蝶K3 后台增加新单下推老单单据转换流程明细字段对应关系 --例如要增加委外订单的【字段A】下推到调拨单的【字段B】的效果 --只需在后台增加一条对应单据转换流程的【字段A】下推【字段B】的明细对应关系即可,即向明细表ICSelBills插入一条正确记录

金蝶K3Cloud二次开发插件实现不重启IIS热更新

1、打开WebSite\App_Data\Common.config,修改appSettings,设置IsEnablePlugInHotUpdate为true,重启IIS; 若appSetting中没有IsEnablePlugInHotUpdate,可自行添加: 2、使用IIS开发时,需要在WebSite\TempfilePath目录下新建PluginLoaderTempBin目录,并赋予IIS进程(或EveryOne)读写权限; 3、在插件类上添加特性[Kingdee.BOS.Util.HotUpda

weixin_41120428的博客 579

k3cloud初始化上线七个步骤 第三步 个性配置篇

k3cloud初始化上线七个步骤 第三步 个性配置篇 , 傻瓜式的按照文档步骤一步步学习k3cloud初始化;

金蝶云星空-不重启IIS开发插件

1、打开WebSite\App_Data\Common.config,修改appSettings,设置IsEnablePlugInHotUpdate为true,重启IIS;若有特殊情况,如插件热更新后不能正常工作,可用Kingdee.BOS.Util.DisableHotUpdate特性标记之,热更新时忽略该插件;2、使用IIS开发时,需要在WebSite\TempfilePath目录下新建PluginLoaderTempBin目录,并赋予IIS进程(或EveryOne)读写权限;

qq_18932003的博客 385

Rocfall安装包&安装教程

Rocfall 第一步:下载安装包 下载路径: 链接:https://pan.baidu.com/s/1Dzvxzv67dSPRi7f7ZT9EeA 提取码:o9pl 第二部:安装 安装包解压 选择part1进行解压 点击Setup.exe启动安装 生成Serial Number 替换启动程序 安装完毕 素材来源于网络(禁止用于商业仅用于完成毕业设计和研究使用) 谢谢! ...

cym的博客 8697

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

云星空二次开发插件热更新

1、打开安装目录下WebSite\App_Data\Common.config,修改appSettings,设置IsEnablePlugInHotUpdate为true,重启IIS;二次开发若是每次开发调试都需要重启IIS那是非常要命的,但是这个产品是支持热更新的,非常的优秀。2、使用IIS开发时,需要在WebSite\TempfilePath目录下新建PluginLoaderTempBin目录,并赋予IIS进程(或EveryOne)读写权限;4、编译之后,一定要关闭单据,重新打开,代码才能生效。

佳乐阁 691

全新RGB-D及平面法线数据集DIODE

丰田工业大学联合芝加哥大学和北航发布全新RGB-D及平面法线数据集 DIODE (Dense Indoor and Outdoor DEpth)。

qq_43477338的博客 1539

KingdeeERP-全类事件

拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。打开采购订单编辑界面,观察表单插件的事件的触发顺序。

房东的猫的博客 681

【Cadence】Virtuoso@LayoutXL 差分电路版图镜像同步技巧详解

本文详细介绍了在Cadence Virtuoso LayoutXL中实现差分电路版图镜像同步的技巧,包括核心需求、环境配置、分步操作指南及高级技巧。通过使用LayoutXL的Group功能,工程师可以高效保持差分电路的对称性,提升版图迭代效率,确保高速信号处理的稳定性。特别适用于深亚微米工艺下的差分放大器设计。

weixin_29215391的博客 323

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1281

手把手搭建K3cloud插件开发环境

最近几天在配置K3cloud开发环境,发现不论是产品论坛还是百度出来的结果,都不够满意,很多大咖给提供的环境搭建手册都是那个云山雾罩的PPT 也就是这个open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=109261 博主表示看完了只是理解了概念,但是如何打开K3cloud开发的第一扇门,还是无法理解(好吧,可能做产品实施时间过长了,好

在实施道路上越走越远的老鸟程序猿 3万+

libVLC 视频抓图

libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 1939

金蝶云星空开发记录-二开登录页面,提示下载组件存在错误

解决方法:将二开登录页面生的dll放至,安装目录\Kingdee\K3Cloud\DeskClient\K3CloudClient中一份。

分享开发过程中踩到的坑,共勉~ 478

2023年高教社杯全国大学生数学建模竞赛 E 题:《黄河水沙监测数据分析》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 903

汇川Easy系列PID_AT指令弹簧质量阻尼系统闭环控制仿真测试

汇川Easy系列PLC系统PID指令(温度控制PID应用编程)

RXXW_Dor的博客 762

请你在CSharp中对Kingdee二开插件登录、保存接口写一个示例代码

由于我的知识库截止日期为2021年,Kingdee二开插件的登录和保存接口可能已经发生变化。但是,以下是C#中使用Kingdee二开插件进行登录和保存的示例代码: 登录: using Kingdee.K3.KFO.Common.Core; using Kingdee.K3.KFO.Common.PlugIn; //... //登录 K3Connect conn = new K3Connect(...

weixin_35753431的博客 115

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[K/3Cloud]K3Cloud平台开发之Python插件

有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个对象而已。我不想写插件,因为K3Cloud是基于.net 4.0的,它对动态语言有了支持,于是我选择使用python来实现这个简单逻辑,以下是我的py插件,有注释,小伙伴们应该读得懂:

范永强的专栏 6385

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

K3Cloud二次开发插件实现不重启IIS热更新

K3Cloud二次开发插件实现不重启IIS热更新: 1、打开WebSite\App_Data\Common.config,修改appSettings,设置IsEnablePlugInHotUpdate为true,重启IIS; 若appSetting中没有IsEnablePlugInHotUpdate,可自行添加: &lt;!--是否启用插件热更新(开发时启用,正式服务器必须设为false,以免影响...

dwzjs的专栏 1877

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[K/3Cloud]K3Cloud的移动审批方面

基于最新的K3Cloud2的SP2,当前K3Cloud上所有的工作流都可以在移动手机上进行移动审批,具体如下: K/3 Cloud 支持移动审批,支持安卓和IOS。 关于申请试用: 1、打开浏览器,进入mcloud网站(http://mCloud.kingdee.com),注册用户。 2、注...

chiju9336的博客 545

K3Cloud简单报表超过35列解决方法

using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Util; using System.ComponentModel; namespace SenGe.k3cloud.ReportFormAnalysis { [Description("简单报表超过35列插件加载")] [Kingdee.BOS.Util....

senge_com的博客 624

C#开发J-Link RTT上位机:从零实现稳定低延迟嵌入式通信

RTT(Real-Time Transfer)是SEGGER推出的基于内存共享的嵌入式实时通信协议,无需UART或SWO硬件资源,通过J-Link调试器直接读写MCU RAM实现微秒级双向数据交互。其核心原理在于RTT控制块与环形缓冲区的内存映射机制,依赖JLinkARM.dll等底层驱动完成安全跨平台访问。该技术显著提升固件调试、产线日志采集与远程指令下发的实时性与可靠性,广泛应用于GD32、STM32、nRF52等MCU平台的BMS、IoT设备及工业控制场景。本文聚焦C#语言实现高稳定性J-Link R

weixin_34226182的博客 503
上一篇: JAVA ArrayList自动过滤重复数据案例
下一篇: html轮播图
影孓
博客等级 码龄10年 1928粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影孓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值