通过列表插件控制引出原创
金蝶云社区-eris
eris
10人赞赏了该文章 1,237次浏览 未经作者许可,禁止转载编辑于2021年11月04日 17:11:47

由于各种原因,可能需要对列表引出进行控制

1)防止资源消耗太多,禁止引出数据太多

2)安全原因,禁止外网引出

3)特定用户,禁止引出数据等等等


下面示例通过列表插件,引出菜单点击事件,对引出进行控制

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Text.RegularExpressions;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Util;
using Kingdee.BOS.Model.List;
 namespace Kingdee.BOS.TestPlugIn.ListPlugIn
{
    [HotUpdate]
    [Description("列表引出点击事件")]
    public class ControlExportListPlugIn : AbstractListPlugIn
    {
        /// <summary>
        /// 控制列表引出
        /// </summary>
        /// <param name="e"></param>
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (!StringUtils.EqualsIgnoreCase(e.BarItemKey, "btnExport"))//列表引出按钮key
                return;
             var isForbid  = this. ForbidExportAtOver() 
               var isForbid  = this. IsOuterIp() 
              e.Cancel = isForbid  ;
        }
        
        //数据太多禁止引出
       private  bool ForbidExportAtOver()
        {
            var isForbid = false;
            int rowCount = 100000;// 比较阀值,自行定义
            var listMode = this.Model as ListModel;
           // var rowCount = listMode.GetRowCount()["billrowcount"];//得到单据数
            var listRowCount = listMode.GetRowCount(""); //得到列表行数
            if (listRowCount > 100000) //超过阀值不允许引出
            {
                 isForbid  = true;
                var msg = string.Format("列表行数超过了{0}行,不允许引出,请减少数据引出。", rowCount);
                this.View.ShowMessage(msg);
            }
           return isForbid  ;
        }
        
     //是否为外网
     public  bool IsOuterIp(String ip)
        {
            //匹配10.0.0.0 - 10.255.255.255的网段
            String pattern_10 = "^(\\D)*10(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){3}";
            //匹配172.16.0.0 - 172.31.255.255的网段
            String pattern_172 = "172\\.([1][6-9]|[2]\\d|3[01])(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){2}";
            //匹配192.168.0.0 - 192.168.255.255的网段
            String pattern_192 = "192\\.168(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){2}";
            //合起来写
            String pattern = "((192\\.168|172\\.([1][6-9]|[2]\\d|3[01]))"
                    + "(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){2}|"
                    + "^(\\D)*10(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){3})";
            Match matc = Regex.Match(this.Context.IpAddress, pattern);
            var isSucc = matc.Success;
           if (!isSucc ) //外网
            {
                  this.View.ShowWarnningMessage("外网不允许引出数据");
            }
            return !isSucc;
        }
    }
}


图标赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!