二开案例.表达式函数.获取文件名

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表达式函数.获取文件名

【应用场景】获取附件字段对应的附件的文件名。

【案例演示】新增函数,用于获取文件名。

【实现步骤】

<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

【函数】获取文件名.rar

二开案例.表达式函数.获取文件名

【应用场景】获取附件字段对应的附件的文件名。【案例演示】新增函数,用于获取文件名。【实现步骤】<1>编写函数,代码如下。using Kingde...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息