二开案例.表单插件.直接SQL账表双击数据行打开新窗体
【应用场景】直接SQL账表双击数据行打开新窗体。
【案例演示】采购订单明细报表,实现双击数据行打开新窗体的功能。
【实现步骤】
<1>基于案例【二开案例.直接SQL账表.从零开始设计直接SQL账表】https://vip.kingdee.com/article/94805228373112064
准备好直接SQL账表。
<2>编写表单插件,实现直接SQL账表双击数据行打开新窗体的功能。
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Web.Report.SQLReport;
using System;
using System.ComponentModel;
using System.Data;
using System.Reflection;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】直接SQL账表双击数据行打开新窗体
/// </summary>
[Description("【表单插件】直接SQL账表双击数据行打开新窗体"), HotUpdate]
public class OpenListByRowDoubleClickFormPlugIn : AbstractDynamicFormPlugIn
{
public override void EntityRowDoubleClick(EntityRowClickEventArgs e)
{
base.EntityRowDoubleClick(e);
var view = this.View as SQLReportView;
if (view == null)
{
return;
}
if (e.ColKey.Equals("单据编号", StringComparison.OrdinalIgnoreCase))
{
// 只有在双击单据编号列时,才打开该编号对应的采购订单
// 版本PT-146850 [7.5.1.202008]前用此方法
var currentRowValue = GetCurrentRowValue(view, "单据编号");
// 版本PT-146850 [7.5.1.202008]后用此方法
//var currentRowValue = view.GetCurrentRowValue("单据编号");
if (currentRowValue == null)
{
return;
}
var billNo = currentRowValue.ToString();
// 使用单据视图打开
ShowBillForm(billNo);
// 使用列表视图打开
//ShowListForm(billNo);
}
}
/// <summary>
/// 使用单据视图打开
/// </summary>
/// <param name="billNo">单据编号</param>
private void ShowBillForm(string billNo)
{
var sql = string.Format("SELECT FID FROM T_PUR_POORDER WHERE FBILLNO='{0}'", billNo);
var pkId = DBServiceHelper.ExecuteScalar<long>(this.Context, sql, 0);
if (pkId <= 0)
{
return;
}
var param = new BillShowParameter();
param.FormId = "PUR_PurchaseOrder"; // 业务对象标识
param.PKey = pkId.ToString(); // 单据内码
param.Status = OperationStatus.VIEW; // 查看模式打开
//param.Status = OperationStatus.EDIT; // 编辑模式打开
this.View.ShowForm(param);
}
/// <summary>
/// 使用列表视图打开
/// </summary>
/// <param name="billNo">单据编号</param>
private void ShowListForm(string billNo)
{
var param = new ListShowParameter();
param.FormId = "PUR_PurchaseOrder"; // 业务对象标识
param.PermissionItemId = PermissionConst.View; // 验证当前用户查看权限
param.OpenStyle.ShowType = ShowType.MainNewTabPage; // 主控台开新页签
param.ListFilterParameter.Filter = string.Format("FBillNo='{0}'", billNo); // 查看指定单据
this.View.ShowForm(param);
}
/// <summary>
/// 获取当前选中行指定列的数据
/// </summary>
/// <param name="view"></param>
/// <param name="columnName"></param>
/// <returns></returns>
private object GetCurrentRowValue(IDynamicFormView view, string columnName)
{
var currentPageData = GetValue(view, "currentPageData") as DataTable;
if (currentPageData == null)
{
return null;
}
if (!currentPageData.Columns.Contains(columnName))
{
return null;
}
if (view.OpenParameter.GetCustomParameter("FLIST_selectedRows") == null)
{
return null;
}
var curRow = view.OpenParameter.GetCustomParameter("FLIST_selectedRows").ToString();
// 反射获取当前账表数据包
var rows = currentPageData.Select(string.Format("{0}={1}", "FIDENTITYID", curRow));
if (rows.Length > 0)
{
return rows[0][columnName];
}
return null;
}
/// <summary>
/// 反射获取当前视图的某个值
/// </summary>
/// <param name="obj"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
private object GetValue(object obj, string propertyName)
{
var field = typeof(SQLReportView).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
return field.GetValue(obj);
}
return null;
}
}
}
<3>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<4>直接SQL账表注册表单插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单明细报表,检验一下插件效果啦。
双击表格指定单元格时,可通过Http数据监控观察到当前行当前列信息:
以列表界面查看
以单据界面查看
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.直接SQL账表双击数据行打开新窗体
本文2024-09-23 04:20:44发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164706.html