二开案例.表单插件.执行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", KDDb
二开案例.表单插件.执行SQL
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



