三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
案例需求:在销售订单上新增一个按钮,在订单明细中新增一个字段,命名[即时库存]。
点击按钮,弹出“Hello World!”,并获取订单明细物料的即时库存,填入字段[即时库存]。
开发工具:Visual Studio 2012
开发语言:Asp.net C#
=================================
目录:
1、BOS单据加按钮 - -【测试按钮】
2、BOS单据加字段 - -[即时库存]
3、创建Visual C#类库
4、引入命名空间
5、编写按钮点击事件,建议用不带任何代码的空白事件进行测试
6、编译代码,生成DLL文件
7、插件注册
8、IIS重启
9、代码调试,确保事件是否成功触发
10、代码调试过程分析
=================================
1、BOS单据加按钮 - - 【测试按钮】
打开【金蝶K3 Cloud BOS集成开发平台】,右键点击【销售订单】,选择扩展(在扩展/继承模板才可加字段),
在【销售订单属性】窗口,点击【菜单集合】,在单据头新增按钮【测试按钮】。

在菜单编辑中,右键点击【工具条】,新增按钮【测试按钮】,标识为 “HelloWorld”。标识在插件代码中识别。


2、BOS单据加字段 - - [即时库存]

3、创建Visual C#类库
打开Visual Studio 2012,在菜单【文件】 - - 【新建】,点击【项目】,新建Visual C# 类库。

4、引入命名空间


5、编写按钮点击事件,建议用不带任何代码的空白事件
没有代码的空白事件如下,并设置断点调试:

这是完全代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS;
using Kingdee.K3.MFG.App;
using System.Data; namespace MyTest.K3.FIN.SE.FirstPlugIn
{
public class Class1:AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey == "HelloWorld") --HelloWorld是测试按钮的标识
{
this.View.ShowMessage("Hello world!", MessageBoxType.Notice); decimal jskc; //及时库存量
string FNumber;//物料代码
string FBillNo = "";
DynamicObject docSCDDIds1 = this.View.Model.DataObject;
FBillNo = docSCDDIds1["Date"].ToString(); --单据头订单编号取值,BillNo是订单编号的标识,在BOS中查看
--获取单据体对象,并循环取单据体字段。FSaleOrderEntry是销售订单明细的单据体标识,在BOS中查看
EntryEntity entryEntity = this.View.BusinessInfo.GetEntryEntity("FSaleOrderEntry");
DynamicObjectCollection docCGSQIds = this.View.Model.GetEntityDataObject(entryEntity);
StringBuilder sb = new StringBuilder();
OrganizationInfo og = this.Context.CurrentOrganizationInfo;--取当前组织机构
for (int i = ; i < docCGSQIds.Count; i++)
{
jskc = ;
FNumber = "";
//算出物料代码
sb.AppendLine("select FNumber from T_BD_Material ");
sb.AppendLine("where (1=1) ");
sb.AppendLine(string.Format("and FMaterialID={0}", docCGSQIds[i]["MaterialId_Id"]));
FNumber = AppServiceContext.DbUtils.ExecuteScalar<string>(Context, sb.ToString(), "", null);
sb.Remove(, sb.Length);//清空StringBuilder的方法 //更新及时库存,排除报废仓、不良品仓、默认库存状态:不良
sb.AppendLine("select isnull(SUM(t1.FBASEQTY),0) from T_STK_INVENTORY t1 ");
sb.AppendLine("inner join t_BD_Material t2 on t1.FMaterialID=t2.FMaterialID ");
sb.AppendLine("where (1=1) ");
sb.AppendLine(string.Format("and t2.FNumber='{0}' and t1.FKEEPERID={1} ", FNumber, og.ID));
using (IDataReader dr = AppServiceContext.DbUtils.ExecuteReader(Context, sb.ToString()))
{
while (dr.Read())
{
//entity.DataEntity["F_Dnk_JSKC"] = dr[0];
jskc = Convert.ToDecimal(dr[]);
}
}
sb.Remove(, sb.Length);//清空StringBuilder的方法 this.View.Model.SetValue("F_Dnk_JSKC", jskc, i); --单据体即时库存赋值
}
this.View.UpdateView("F_Dnk_JSKC");
}
} }
}
6、编译代码,生成DLL文件
右键点击【类库】,选择【属性】,在【生成】页签中,浏览DLL生成路径(安装根目录下):


DLL生成路径如下:C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin

在解决方案,右键点击【生成解决方案】或【重新生成解决方案】,成功生成MyTest.K3.FIN.SE.FirstPlugIn.DLL


7、插件注册
在BOS开发平台,在销售订单属性中,点击【表单插件】。打开插件注册窗口,点击【注册】,浏览DLL。并启用DLL

8、IIS重启
在操作系统的开始菜单,打开【运行】,输入cmd,打开DOS窗口,输入iisreset命令,重启IIS

9、代码调试,确保事件是否成功触发
在代码窗口,点击菜单【调试】 - - 【附加到进程】,选择进程【w3p】,用户名为:NetWork Service
重点提示:每次代码修改,都要点击【重新生成解决方案】,重新生成DLL,并且IIS要重新重启,新的改动才生效,
调试也要重新附加进程,因为IIS重启后,进程ID变更了。



打开K3 Cloud客户端,打开销售订单新增界面,点击【按钮测试】,触发代码调试

代码调试,按F11逐语句调试。按F10逐过程调试。

运行完代码后,弹出“Hello World!”消息框,并把值填入字段【即时库存】。
(由于是个人自己实战训练的帐套,没有维护物料和库存,故库存没有值)

10、代码调试分析
调试过程中,业务单据的所有的对象、变量和值,都可以在局部变量查看到

三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》的更多相关文章
- 四、K3 WISE 开发插件《工业单据老单插件开发新手指导》
开发环境:K/3 Wise 13.0.K/3 Bos开发平台.Visual Basic 6.0 =============================================== 目录 一 ...
- 十一、K3 WISE 开发插件《VB插件开发如何代码调试 - 步骤讲解》
=================================== 目录: 1.配置代码调试启动程序kdmain.exe 2.设置断点 3.触发调试 4.变量跟踪 ================ ...
- 九、K3 WISE 开发插件《工业单据老单序时薄插件工具栏按钮开发实例》
=============================== 目录: 1.添加工具栏按钮 2.查询被添加工具栏按钮的业务单据的FMenuID和FID 3.添加工具栏按钮和业务单据的映射关系 4.工具 ...
- 一、K3 Cloud 开发插件《K3 Cloud开发手册》
1.K3 Cloud打开 提示错误:未能加载文件或程序集“XXXXXXXXX”或它的某一个依赖项 原因:未正常关机导致的Temporary ASP.NET Files文件夹下的文件损坏 解决:删除C: ...
- 四、K3 Cloud 开发插件《K3 Cloud事件、方法、函数》
1.简单帐表/动态表单几个主要事件 //初始化 public override void Initialize() //构建动态列 public override BOS.Core.Report.Re ...
- 二、K3 Cloud 开发插件《K3 Cloud 常用数据表整理》
一.数据库查询常用表 --查询数据表select * from ( ),t1.FKERNELXML.query('//TableName')) as 'Item',t1.FKERNELXML,t2.F ...
- 三、K3 WISE 开发插件《K3 WISE开发手册》
1.VB插件工程的命名.命名空间和生成的DLL命名要一致,否则导致注册不成功! 2.主控台的查询分析工具,添加sql直接报表,代码用到临时表,提示“在对应所需名称或序数的集合中未找到项目” 解决:在代 ...
- K3 WISE 开发插件《K3 WISE常用数据表整理》
在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------ FStatu ...
- 一、K3 WISE 开发插件《K3 WISE常用数据表整理》
在后台数据库ICClassType表中,字段FID<0的是老单,FID>0的是新单. ----------------系统设置------------------------FStatus ...
随机推荐
- 9.4 dubbo异步调用原理
9.1 客户端发起请求源码.9.2 服务端接收请求消息并发送响应消息源码.9.3 客户端接收响应信息(异步转同步的实现) 分析了dubbo同步调用的源码,现在来看一下dubbo异步调用. 一.使用方式 ...
- js,html-点击直接跳转到页面底/顶部
案例一:js控制,无滑动效果 <html> <body> <a href="javascript:void(0);" onclick="ja ...
- 五花八门的Shell 的相关概念和配置方法
使用Linux的过程中少不了使用各种各样的Shell, 而根据启动环境的不同,Shell会读取不同的配置文件. 本文便来详细介绍这些不同名字的配置文件在何时会被Shell读取. 什么是 Shell S ...
- Ubuntu中安装和配置 Java JDK,并卸载自带OpenJDK(以Ubuntu 14.04为例)
1.下载jdk-7u67-linux-x64.tar.gz 2.用ftp客户端工具filezilla上传到ubuntu的合适文件夹.如果如果不能上传到指定文件夹可能是文件夹权限不足,修改文件夹可执行权 ...
- CSS 居中布局
来源:http://www.cnblogs.com/QianBoy/p/8539077.html 水平居中 1)使用inline-block+text-align 原理:先将子框由块级元素改变为行内块 ...
- iOS 在tableview的侧滑事件里执行tableView.selectRow无效的解决办法
很奇怪的问题,在执行默认选中一个cell的时候,突然发现这句话不起作用了 (我的场景是:当前cell侧滑删除后,默认选中上一个cell) 搞了半天,终于发现罪魁祸首竟然是因为:这句话写在了侧滑事件的方 ...
- 如何寻找linux下相关软件
当在linux下运行程序遇到找不到库的时候可以使用yum whatprovides 来找到到需要安装的包. 例如:yum whatprovides libz.so.1 然后安装找到的包 yum in ...
- jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据.
- Android Studio配置Android Annotations框架详解--说说那些坑
我们开发过程中都需要写些findViewByid.serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的.为了节省工作量,运生了很多对应的注解框架.网上的博客 ...
- Atitit 大json文件的结构化查看解决方案,高性能的jsonview attilax总结.docx
Atitit 大json文件的结构化查看解决方案,高性能的jsonview attilax总结.docx 1.1. 实现目标:1 1.2. 实现key与value类型的..一直分析到非 jsonob ...