背景介绍:
当前K/3 Cloud不支持把源单的附件列表,携带到目标单。
但实际业务中,却需要在目标单上,直接看到源单的附件列表。
解决方案:
在目标单,增加一个菜单,用户点击菜单时,读取本单的直接源单,显示其附件列表。
示例代码(特别说明:示例代码并非用于显示跨级源单的附件):
//*************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Attachment;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.List;
namespace JDSample.FormPlugIn.Bill
{
///
/// 在下游单据上,显示源单附件列表
///
///
/// 案例背景:
/// 销售订单下推到发货通知单,
/// 需要在发货通知单上,增加一个菜单,调出销售订单的附件列表
///
[Description("在目标单据上,显示源单附件")]
public class S150918ShowSrcBillAttEdit : AbstractBillPlugIn
{
///
/// 菜单点击事件,在验权通过之后触发
///
///
public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
{
if (e.BarItemKey.EqualsIgnoreCase("tbShowSrcAttachment"))
{
string srcFormId = string.Empty;
HashSet
// 读取源单内码
this.GetSrcBillIds(ref srcFormId, ref srcBillIds);
if (srcBillIds.Count == 0)
{
this.View.ShowMessage("本单没有源单!");
return;
}
// 显示指定源单的附件列表
this.ShowAttachmentList(srcFormId, srcBillIds);
}
}
///
/// 获取本单据的全部源单内码
///
///
///
private void GetSrcBillIds(ref string srcFormId, ref HashSet
{
var form = this.Model.BillBusinessInfo.GetForm();
if (form.LinkSet == null
|| form.LinkSet.LinkEntitys == null
|| form.LinkSet.LinkEntitys.Count == 0)
{
return;
}
ExtendedDataEntitySet dataEntitySet = new ExtendedDataEntitySet();
dataEntitySet.Parse(
new DynamicObject[] { this.Model.DataObject },
this.Model.BillBusinessInfo);
// 获取单据的关联子单据体
var linkRows = dataEntitySet.FindByEntityKey(form.LinkSet.LinkEntitys[0].Key);
foreach (var linkRow in linkRows)
{
long srcBillId = Convert.ToInt64(linkRow["SBillId"]);
// 源单内码已经存在,忽略
if (srcBillId == 0 || srcBillIds.Contains(srcBillId))
{
continue;
}
// 把源单内码加入到集合中
srcBillIds.Add(srcBillId);
if (string.IsNullOrWhiteSpace(srcFormId))
{// 取源单FormId
string srcTableNumber = Convert.ToString(linkRow["STableName"]);
srcFormId = Kingdee.BOS.ServiceHelper.BusinessFlowServiceHelper.LoadTableDefine(
this.Context, srcTableNumber).FormId;
}
}
}
///
/// 显示源单附件列表
///
///
///
private void ShowAttachmentList(string formId, HashSet
{
// 构建附件列表过滤条件
AttachmentKey attachmentKey = new AttachmentKey();
attachmentKey.BillType = formId;
attachmentKey.BillNo = string.Empty;
attachmentKey.BillInterID = Convert.ToString(srcBillIds.ElementAt(0));
// 设置为查看状态,禁止修改源单附件列表
attachmentKey.OperationStatus = Kingdee.BOS.Core.Metadata.OperationStatus.VIEW;
// 本案例不显示单据体附件,如下单据体行参数全部设置为空白
attachmentKey.EntryKey = " ";
attachmentKey.EntryInterID = "-1";
attachmentKey.RowIndex = 0;
// 列表过滤条件
string filter = string.Format(@"FBILLTYPE='{0}' and FINTERID IN ('{1}') and FENTRYKEY='{2}' and FENTRYINTERID='{3}'",
attachmentKey.BillType,
string.Join("','", srcBillIds),
attachmentKey.EntryKey,
attachmentKey.EntryInterID);
// 构建列表显示参数
ListShowParameter listpara = new ListShowParameter();
listpara.IsLookUp = false;
listpara.CustomParams.Add(KeyConst.AttachmentKey, AttachmentKey.ConvertToString(attachmentKey));
listpara.OpenStyle.ShowType = ShowType.Floating;
listpara.Caption = "附件管理";
listpara.FormId = FormIdConst.BOS_Attachment;
listpara.MultiSelect = false;
listpara.PageId = string.Format("{0}_{1}_F7", this.View.PageId, listpara.FormId);
listpara.ListFilterParameter.Filter = filter;
listpara.IsShowQuickFilter = false;
this.View.ShowForm(listpara);
}
}
}