电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例.表单插件.执行SQL

来源:金蝶云社区作者:金蝶2024-09-235

二开案例.表单插件.执行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

【应用场景】在插件中执行SQL语句。【案例演示】采购订单,菜单集合添加多个菜单,用于执行不同类型的SQL语句。【实现步骤】<1>编写表单插...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信