二开案例.表达式函数.获取文件名
【应用场景】获取附件字段对应的附件的文件名。
【案例演示】新增函数,用于获取文件名。
【实现步骤】
<1>编写函数,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Core;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.Expression.FuncDefine;
using System;
namespace Jac.XkDemo.BOS.Core.Functions
{
/// <summary>
/// 【函数】获取文件名
/// </summary>
[Serializable]
public class GetFileNameFuncDefine : AbstractFuncDefine
{
public GetFileNameFuncDefine()
{
}
public GetFileNameFuncDefine(Context ctx, dynamic obj)
{
m_ctx = ctx;
m_obj = obj;
}
public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj)
{
return new GetFileNameFuncDefine(ctx, obj);
}
public override object GetFuncDefine()
{
return new Func<string, object>(FuncDefine);
}
/// <summary>
/// 获取文件名
/// </summary>
/// <param name="fileId">文件Id</param>
/// <returns>返回文件名</returns>
object FuncDefine(string fileId)
{
if (string.IsNullOrWhiteSpace(fileId))
{
return null;
}
var metadata = (FormMetadata)new MetaDataService().Load(m_ctx, "BOS_FileServerFileInfo");
var objFile = new ViewService().LoadSingle(m_ctx, fileId, metadata.BusinessInfo.GetDynamicObjectType());
if (objFile == null)
{
return null;
}
return objFile["FileName"].ToString();
}
}
}
<2>注册函数(可参考:https://vip.kingdee.com/article/74091717745675520)。
-- 获取文件名
DELETE T_MDL_ELEMENTTYPE WHERE FID=888011;
INSERT INTO T_MDL_ELEMENTTYPE (FID,FIMGKEY,FTYPEID,FISVISIBLE,FELEMENTCLASS,FAPPEARANCECLASS)
VALUES (888011, '', 1, 0, 'Jac.XkDemo.BOS.Core.Functions.GetFileNameFuncDefine,Jac.XkDemo.BOS.Core', 'BOS_GETFILENAME');
DELETE T_MDL_DOMAINMODELELEMENTMAP WHERE FID=1200 and FELEMENTGROUPID=24 and FELEMENTTYPEID=888011;
INSERT INTO T_MDL_DOMAINMODELELEMENTMAP (FID, FENTRYID, FELEMENTTYPEID, FELEMENTGROUPID, FSEQ)
VALUES (1200, 888011, 888011, 24, 81);
DELETE T_MDL_ELEMENTTYPE_L WHERE FID=888011 AND FLOCALEID=2052;
INSERT INTO T_MDL_ELEMENTTYPE_L(FID,FNAME,FDESCRIPTION,FLOCALEID,FPKID)
VALUES (888011,N'获取文件名',N'通过文件内码获取文件名。
使用示例:
GETFILENAME(F_Jac_Attachment)
',2052,(SELECT ISNULL(MAX(FPKID), 0) + 1 FROM T_MDL_ELEMENTTYPE_L WHERE FPKID > 100000));
---------------------------------------------------------------------------------------------------------
<3>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<4>BOSIDE扩展采购订单,单据头新增附件字段和文本字段,附件字段新增值更新事件,保存操作新增校验规则,如下图所示,保存元数据,开发完毕。
附件字段新增值更新事件:
F_Jac_Text = GETFILENAME(F_Jac_Attachment)
保存操作新增校验规则:
GETFILENAME(F_Jac_Attachment) <> FBillNo
如果校验规则为附件文件名是否包含单据编号,可使用以下表达式:
FBillNo not in GETFILENAME(F_Jac_Attachment)
或者
GETFILENAME(F_Jac_Attachment).find(FBillNo)<0
【功能验证】
<1>登录业务站点,打开采购订单编辑界面,上传附件,可通过值更新事件自动获取附件的文件名。
<2>采购订单点击保存按钮,此时校验规则生效。
【参考资料】
【二开案例.元模型.附件(文件服务)】https://vip.kingdee.com/article/169853655049945856
--------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表达式函数.获取文件名
本文2024-09-23 04:19:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164617.html