二开案例.表单插件.执行SQL
【应用场景】在插件中执行SQL语句。
【案例演示】采购订单,菜单集合添加多个菜单,用于执行不同类型的SQL语句。
【实现步骤】
<1>编写表单插件(代码可从文末附件中下载),代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】执行SQL
/// </summary>
[Description("【表单插件】执行SQL"), HotUpdate]
public class ExecuteSQLFormPlugIn : AbstractDynamicFormPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.Equals("tbExecuteStoreProcedure", StringComparison.OrdinalIgnoreCase))
{
// 执行存储过程
var procedureName = "P_Pur_Order";
var sqlParameterList = new List<SqlParam>();
sqlParameterList.Add(new SqlParam("@P1", KDDbType.AnsiString, "CGDD"));
sqlParameterList.Add(new SqlParam("@P2", KDDbType.AnsiString, "") { Size = 200, Direction = ParameterDirection.InputOutput });
sqlParameterList.Add(new SqlParam("@ReturnValue", KDDbType.Decimal, 0) { Direction = ParameterDirection.ReturnValue });
# 不管是Out参数还是Return参数,都放入returnParameterList集合中了
var returnParameterList = DBUtils.ExecuteStoreProcedure(this.Context, procedureName, sqlParameterList);
var msg = string.Join(";", returnParameterList.Select(o => o.Name + ":" + o.Value));
this.View.ShowMessage(msg);
return;
}
if (e.BarItemKey.Equals("tbExecute", StringComparison.OrdinalIgnoreCase))
{
// 执行SQL并返回受影响行数
var sql = "UPDATE T_PUR_POORDER SET FCHANGEREASON=N'货物破损' WHERE FBILLNO=@BillNo";
var sqlParameterList = new List<SqlParam>();
sqlParameterList.Add(new SqlParam("@BillNo", KDDbType.AnsiString, "CGDD000519"));
var returnValue = DBUtils.Execute(this.Context, sql, sqlParameterList);
var msg = "受影响行数:" + returnValue.ToString();
this.View.ShowMessage(msg);
return;
}
if (e.BarItemKey.Equals("tbExecuteDataSet", StringComparison.OrdinalIgnoreCase))
{
// 执行SQL并返回DataSet
var sql = "SELECT * FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo";
var sqlParameterList = new List<SqlParam>();
sqlParameterList.Add(new SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%"));
var ds = DBUtils.ExecuteDataSet(this.Context, sql, sqlParameterList);
var idList = new List<string>();
foreach (DataRow row in ds.Tables[0].Rows)
{
idList.Add(row["FID"].ToString());
}
var msg = "满足条件的订单内码集合:" + string.Join(",", idList);
this.View.ShowMessage(msg);
return;
}
if (e.BarItemKey.Equals("tbExecuteReader", StringComparison.OrdinalIgnoreCase))
{
// 执行SQL并返回DataReader
var sql = "SELECT * FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo";
var sqlParameterList = new List<SqlParam>();
sqlParameterList.Add(new SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%"));
var idList = new List<string>();
using (var reader = DBUtils.ExecuteReader(this.Context, sql, sqlParameterList))
{
while (reader.Read())
{
idList.Add(reader["FID"].ToString());
}
}
var msg = "满足条件的订单内码集合:" + string.Join(",", idList);
this.View.ShowMessage(msg);
return;
}
if (e.BarItemKey.Equals("tbExecuteScalar", StringComparison.OrdinalIgnoreCase))
{
// 执行SQL并返回首行首列的值
var sql = "SELECT COUNT(*) FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo";
var sqlParam = new SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%");
var orderCount = DBUtils.ExecuteScalar(this.Context, sql, 0, sqlParam);
var msg = "满足条件的订单数量:" + orderCount.ToString();
this.View.ShowMessage(msg);
return;
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,菜单集合新增多个菜单,如下图所示,注册表单插件,保存元数据。
如果使用Python插件,注册方式如下图。
#【Python】【表单插件】执行SQL
import clr
clr.AddReference("mscorlib")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("System.Data")
from Kingdee.BOS import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
from System import *
from System.Collections.Generic import *
from System.Data import *
def BarItemClick(e):
if (e.BarItemKey.Equals("tbExecuteStoreProcedure", StringComparison.OrdinalIgnoreCase)):
# 执行存储过程
procedureName = "P_Pur_Order"
sqlParameterList = List[SqlParam]()
sqlParameterList.Add(SqlParam("@P1", KDDbType.AnsiString, "CGDD"))
p2= SqlParam("@P2", KDDbType.AnsiString, "", ParameterDirection.InputOutput)
p2.Size = 200
sqlParameterList.Add(p2)
sqlParameterList.Add(SqlParam("@ReturnValue", KDDbType.Decimal, 0, ParameterDirection.ReturnValue))
returnParameterList = DBUtils.ExecuteStoreProcedure(this.Context, procedureName, sqlParameterList)
#msg = string.Join(";", returnParameterList.Select(o => o.Name + ":" + o.Value))
msg = "返回结果:" + ";".join((o.Name + ":" + o.Value.ToString()) for o in returnParameterList)
this.View.ShowMessage(msg)
return
if (e.BarItemKey.Equals("tbExecute", StringComparison.OrdinalIgnoreCase)):
# 执行SQL并返回受影响行数
sql = "UPDATE T_PUR_POORDER SET FCHANGEREASON=N'货物破损' WHERE FBILLNO=@BillNo"
sqlParameterList = List[SqlParam]()
sqlParameterList.Add(SqlParam("@BillNo", KDDbType.AnsiString, "CGDD000519"))
returnValue = DBUtils.Execute(this.Context, sql, sqlParameterList)
msg = "受影响行数:" + returnValue.ToString()
this.View.ShowMessage(msg)
return
if (e.BarItemKey.Equals("tbExecuteDataSet", StringComparison.OrdinalIgnoreCase)):
# 执行SQL并返回DataSet
sql = "SELECT * FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo"
sqlParameterList = List[SqlParam]()
sqlParameterList.Add(SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%"))
ds = DBUtils.ExecuteDataSet(this.Context, sql, sqlParameterList)
idList = List[String]()
for row in ds.Tables[0].Rows:
idList.Add(row["FID"].ToString())
msg = "满足条件的订单内码集合:" + ",".join(o for o in idList)
this.View.ShowMessage(msg)
return
if (e.BarItemKey.Equals("tbExecuteReader", StringComparison.OrdinalIgnoreCase)):
# 执行SQL并返回DataReader
sql = "SELECT * FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo"
sqlParameterList = List[SqlParam]()
sqlParameterList.Add(SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%"))
reader = DBUtils.ExecuteReader(this.Context, sql, sqlParameterList)
idList = List[String]()
while reader.Read():
idList.Add(reader["FID"].ToString())
reader.Close()
msg = "满足条件的订单内码集合:" + ",".join(o for o in idList)
this.View.ShowMessage(msg)
return
if (e.BarItemKey.Equals("tbExecuteScalar", StringComparison.OrdinalIgnoreCase)):
# 执行SQL并返回首行首列的值
sql = "SELECT COUNT(*) FROM T_PUR_POORDER WHERE FBILLNO LIKE @BillNo"
sqlParam = SqlParam("@BillNo", KDDbType.AnsiString, "%CGDD%");
orderCount = DBUtils.ExecuteScalar(this.Context, sql, 0, sqlParam)
msg = "满足条件的订单数量:" + orderCount.ToString();
this.View.ShowMessage(msg)
return
############################################################
<4>连接业务账套所在数据库,创建测试用存储过程,开发完毕。
-- 创建存储过程
DROP PROCEDURE P_Pur_Order
GO
CREATE PROCEDURE P_Pur_Order
(
@P1 VARCHAR(200), -- 这是传入参数
@P2 VARCHAR(200) OUT -- 这是传出参数
)
AS
BEGIN
DECLARE @ReturnValue INT -- 这是返回值
SELECT @P2=CAST(MAX(FID)AS VARCHAR(200)),@ReturnValue=COUNT(*) FROM T_PUR_POORDER WHERE FBILLNO LIKE '%'+@P1+'%'
RETURN @ReturnValue
END
GO
-- 执行存储过程
DECLARE @RVal INT
DECLARE @P1 VARCHAR(200)
DECLARE @P2 VARCHAR(200)
SET @P1= 'CGDD'
SET @P2 = ''
EXEC @RVal=P_Pur_Order @P1,@P2 OUT
SELECT @P2 AS P2,@RVal AS ReturnValue
-----------------------------------------------------------------------------------------
现在可以登录业务站点,打开采购订单,检验一下插件的运行效果啦。
【温馨提醒】
<1>BOSIDE提示的各种Python错误无需理会,一切以运行时的表现为准。
<2>如果您不是Python程序员,请勿尝试直接写Python插件,前人已反复多次证明,非专业人士的尝试结果,通常都是让人奔溃的,会浪费您宝贵的开发时间和好脾气,如果您有一定的C#编程基础,建议您先写C#插件,待一切运行正常后,再把C#代码一句一句翻译成Python代码,变成Python插件,如果拿着一堆各种错误的Python插件来寻求帮忙,估计大部分人都不会想看这种代码的。
<3>复制此案例的代码后,如果本地运行不过的,请认真仔细核对代码,本示例的代码需要完整拷贝后才能正常运行,运行报错时,建议优先分析自己的代码是否出了其它问题。
<4>关于存储过程的参数类型,如不清楚的,建议百度先把概念高清楚。
IN:传入参数
OUT:传出参数
RETURN:返回值
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.执行SQL
本文2024-09-23 04:20:41发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164701.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf