报表(双击普通单元格、单击超链接单元格),整理了一下
示例代码://******************************************************
using System;using System.Collections.Generic;using System.Linq;
using System.Text;using System.Data;
using System.ComponentModel;using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Core.Report.PlugIn;
using Kingdee.BOS.Core.Report.PlugIn.Args;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.ServiceHelper;
namespace JDSample.FormPlugIn.Report{
[Description("用户点击报表单元格式时,打开指定单据")]
public class S160615ShowLinkBillRptPlug : AbstractSysReportPlugIn {
/// /// 表格行双击事件:简单账表,不会触发此事件 /// ///
public override void EntityRowDoubleClick(EntityRowClickEventArgs e) { base.EntityRowDoubleClick(e); }
/// /// 方案一,用户双击单元格:读取焦点单元格记录的单据编号,打开对应单据 /// /// /// /// 单元格不需要显示为超链接格式; ///
public override void CellDbClick(CellEventArgs Args) {
// 略过系统的标准联查单据处理
Args.Cancel = true;
int rowSeq = Args.CellRowIndex; // 行序号,以1开始
string fldKey = Args.Header.FieldName; // 根据当前所选的单据编号字段名,确定需要打开的单据类型
// 示例代码,以打开采购订单为例
string formId = string.Empty;
if (fldKey.EqualsIgnoreCase("FBillNo")) {
// 以打开采购订单为例
formId = "PUR_PurchaseOrder"; }
if (string.IsNullOrWhiteSpace(formId)) {
// 双击的是普通单元格,不需要显示单据
return; }
string billNo = this.GetBillNo(fldKey, rowSeq - 1);
if (string.IsNullOrWhiteSpace(billNo)) {
// 单元格无内容,不确定需要打开那张单据
return; }
// 根据单据编号,加载单据内码
string pkValue = this.LoadPKValue(formId, billNo);
// 显示指定单据
this.ShowForm(formId, pkValue); }
/// /// 方案二,用户点击带链接的单元格:读取此单元格记录的单据编号,打开对应单据 /// /// public override void EntryButtonCellClick(EntryButtonCellClickEventArgs e) {
int rowSeq = e.Row; // 行序号,以1开始
string fldKey = e.FieldKey; // 根据当前所选的单据编号字段名,确定需要打开的单据类型
// 示例代码,以打开采购订单为例
string formId = string.Empty;
if (fldKey.EqualsIgnoreCase("FBillNo")) {
// 以打开采购订单为例
formId = "PUR_PurchaseOrder"; }
if (string.IsNullOrWhiteSpace(formId)) {
// 双击的是普通单元格,不需要显示单据
return; }
string billNo = this.GetBillNo(fldKey, rowSeq - 1);
if (string.IsNullOrWhiteSpace(billNo)) {
// 单元格无内容,不确定需要打开那张单据
return; }
// 根据单据编号,加载单据内码
string pkValue = this.LoadPKValue(formId, billNo);
// 显示指定单据
this.ShowForm(formId, pkValue); }
/// /// 获取指定行指定列对应的单据编号值 /// /// 焦点单元格列名 /// 焦点行号 ///
private string GetBillNo(string fldKey, int rowIndex) {
// 方案一:使用行索引,到报表数据源中自行获取行 // 报表显示的数据源
DataTable dt = ((ISysReportModel)this.View.Model).DataSource;
if (dt.Rows.Count == 0 || rowIndex >= dt.Rows.Count) {
return string.Empty; }
DataRow currRow = dt.Rows[rowIndex];
string billNo = Convert.ToString(currRow[fldKey]);
// 方案二:获取报表当前选择的数据行
DataRow[] rows = ((ISysReportView)this.View).SelectedDataRows;
//billNo = Convert.ToString(rows[0][fldKey]);
return billNo; }
/// /// 根据单据编号,读取单据内码 /// /// /// ///
private string LoadPKValue(string formId, string billNo) {
FormMetadata meta = MetaDataServiceHelper.Load(this.Context, formId) as FormMetadata; // 构建取数参数
QueryBuilderParemeter queryParam = new QueryBuilderParemeter(); // 指定单据FormId及其元数据 queryParam.FormId = formId;
queryParam.BusinessInfo = meta.BusinessInfo; // 指定需要加载的字段:使用单据设计时的字段标识(Key) // 单据主键
queryParam.SelectItems.Add(new SelectorItemInfo(meta.BusinessInfo.GetForm().PkFieldName));
// 取单据编号字段
var fldBillNo = meta.BusinessInfo.GetBillNoField(); // 构造过滤条件:根据单据编号取数, 单据编号值以SQL参数的形式传入
queryParam.FilterClauseWihtKey = string.Format(" {0} = @FBillNo ", fldBillNo.Key);
SqlParam billNoParam = new SqlParam("@FBillNo", KDDbType.String, billNo); queryParam.SqlParams.Add(billNoParam);
// 读取数据
var rows = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam);
string pkValue = string.Empty;
if (rows != null && rows.Count > 0) {
pkValue = Convert.ToString(rows[0][0]);
}
return pkValue;
}
/// /// 打开单据界面,显示指定的单据 /// /// ///
private void ShowForm(string formId, string pkValue) {
// using Kingdee.BOS.Core.Bill;
string pageId = Guid.NewGuid().ToString();
BillShowParameter showParameter = new BillShowParameter();
showParameter.FormId = formId;
showParameter.OpenStyle.ShowType = ShowType.Floating;
showParameter.PageId = pageId;
showParameter.Status = OperationStatus.EDIT;
showParameter.PKey = pkValue;
this.View.ShowForm(showParameter);
}
}}
报表(双击普通单元格、单击超链接单元格),整理了一下
本文2024-09-16 18:12:58发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-20698.html