Example #1
0
        /// <summary>
        /// 获取到这些ids当中和这个value不一样的数量
        /// </summary>
        public int GetSameValueCount(DicEnum.UDF_CATE cate, string ids, string fileName, string value)
        {
            var    dal = new sys_udf_field_dal();
            string sql = $"SELECT COUNT(1) from {GetTableName(cate)} where parent_id in ({ids}) and {fileName} = '{value}' ";

            return(int.Parse(dal.GetSingle(sql).ToString()));
        }
Example #2
0
        /// <summary>
        /// 修改自定义字段某个值
        /// </summary>
        public bool EditUdf(DicEnum.UDF_CATE cate, long objectId, int udfId, string value, string desc, long user_id, DicEnum.OPER_LOG_OBJ_CATE operType)
        {
            // 更新自定义字段值
            var    udfList   = GetUdf(cate);
            var    udfValues = GetUdfValue(cate, objectId, udfList);
            var    user      = new UserResourceBLL().GetSysUserSingle(user_id);
            int    index     = udfValues.FindIndex(f => f.id == udfId);
            object oldVal    = udfValues[index].value;

            udfValues[index].value = value;
            UpdateUdfValue(cate, udfList, objectId, udfValues,
                           new UserInfoDto {
                id = user_id, name = user.name
            }, operType);
            var  colName = udfList.Find(f => f.id == udfId).name;
            bool result  = true;

            switch (cate)
            {
            case DicEnum.UDF_CATE.PROJECTS:
                result = new ProjectBLL().AddUdfActivity(objectId, colName, oldVal, value, desc, user_id);
                break;

            default:
                break;
            }

            return(result);
        }
Example #3
0
        /// <summary>
        /// 根据记录id获取字段值
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="objId"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public List <UserDefinedFieldValue> GetUdfValue(DicEnum.UDF_CATE cate, long objId, List <UserDefinedFieldDto> fields)
        {
            var    list  = new List <UserDefinedFieldValue>();
            string table = GetTableName(cate);

            string sql = $"SELECT * FROM {table} WHERE parent_id={objId}";
            var    tb  = new sys_udf_field_dal().ExecuteDataTable(sql);

            if (tb == null)
            {
                return(list);
            }

            if (tb.Rows.Count > 0)
            {
                var dal = new sys_udf_field_dal();
                foreach (var field in fields)
                {
                    var udfField = dal.FindById(field.id);
                    list.Add(new UserDefinedFieldValue {
                        id = field.id, value = tb.Rows[0][udfField.col_name]
                    });
                }
            }
            return(list);
        }
Example #4
0
        /// <summary>
        /// 根据多个记录id获取字段值
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="ids">记录的id值,如 2,5,6</param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public Dictionary <long, List <UserDefinedFieldValue> > GetUdfValue(DicEnum.UDF_CATE cate, string ids, List <UserDefinedFieldDto> fields)
        {
            var    dic   = new Dictionary <long, List <UserDefinedFieldValue> >();
            string table = GetTableName(cate);

            string sql = $"SELECT * FROM {table} WHERE parent_id IN ({ids})";
            var    tb  = new sys_udf_field_dal().ExecuteDataTable(sql);

            if (tb == null)
            {
                return(dic);
            }

            var dal = new sys_udf_field_dal();

            foreach (System.Data.DataRow row in tb.Rows)
            {
                var list = new List <UserDefinedFieldValue>();
                foreach (var field in fields)
                {
                    var udfField = dal.FindById(field.id);
                    list.Add(new UserDefinedFieldValue {
                        id = field.id, value = row[udfField.col_name]
                    });
                }
                dic.Add(long.Parse(row["parent_id"].ToString()), list);
            }

            return(dic);
        }
Example #5
0
        /// <summary>
        /// 获取一个对象包含的用户自定义字段信息
        /// </summary>
        /// <param name="cate">对象分类</param>
        /// <returns></returns>
        public List <UserDefinedFieldDto> GetUdf(DicEnum.UDF_CATE cate)
        {
            var    dal        = new sys_udf_field_dal();
            var    udfListDal = new sys_udf_list_dal();
            string sql        = dal.QueryStringDeleteFlag($"SELECT id,col_name,col_comment as name,description,data_type_id as data_type,default_value,decimal_length,is_required as required,is_protected FROM sys_udf_field WHERE is_active=1 and delete_time=0 and cate_id = {(int)cate} ORDER BY sort_order");
            var    list       = dal.FindListBySql <UserDefinedFieldDto>(sql);

            foreach (var udf in list)
            {
                if (udf.data_type == (int)DicEnum.UDF_DATA_TYPE.LIST)
                {
                    var valList = udfListDal.FindListBySql <DictionaryEntryDto>(udfListDal.QueryStringDeleteFlag($"SELECT id as 'val',name as 'show',is_default as 'select' FROM sys_udf_list WHERE udf_field_id={udf.id} and delete_time=0 and status_id=0 ORDER BY sort_order"));
                    if (valList != null && valList.Count != 0)
                    {
                        udf.value_list = valList;
                    }
                }
            }

            return(list);
        }
Example #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string colName = Request.QueryString["colName"];

            objectId = Convert.ToInt64(Request.QueryString["object_id"]);

            var objType = Request.QueryString["object_type"];

            switch (objType)
            {
            case "project":
                cate = DicEnum.UDF_CATE.PROJECTS;
                break;

            default:
                break;
            }
            thisUdfInfo = new DAL.sys_udf_field_dal().GetInfoByCateAndName((int)cate, colName);

            //if (!IsPostBack)
            //{
            var bll     = new UserDefinedFieldsBLL();
            var udfList = bll.GetUdf(cate);

            udf = udfList.First(f => f.name.Equals(colName));
            var udfValues = bll.GetUdfValue(cate, objectId, udfList);

            udfValue = udfValues.First(v => v.id == udf.id).value;
            //}


            if (thisUdfInfo == null)  // 没有找到该自定义相关信息,停止响应
            {
                Response.End();
            }
        }
Example #7
0
        /// <summary>
        /// 获取用户自定义字段表名
        /// </summary>
        /// <param name="cate"></param>
        /// <returns></returns>
        private string GetTableName(DicEnum.UDF_CATE cate)
        {
            string table = "";

            switch (cate)
            {
            case DicEnum.UDF_CATE.COMPANY:
                table = "crm_account_ext";
                break;

            case DicEnum.UDF_CATE.CONTACT:
                table = "crm_contact_ext";
                break;

            case DicEnum.UDF_CATE.SITE:
                table = "crm_account_site_ext";
                break;

            case DicEnum.UDF_CATE.CONFIGURATION_ITEMS:
                table = "crm_installed_product_ext";
                break;

            case DicEnum.UDF_CATE.OPPORTUNITY:
                table = "crm_opportunity_ext";
                break;

            case DicEnum.UDF_CATE.SALES:
                table = "crm_sales_order_ext";
                break;

            case DicEnum.UDF_CATE.CONTRACTS:
                table = "ctt_contract_ext";
                break;

            case DicEnum.UDF_CATE.PRODUCTS:
                table = "ivt_product_ext";
                break;

            case DicEnum.UDF_CATE.PROJECTS:
                table = "pro_project_ext";
                break;

            case DicEnum.UDF_CATE.TASK:
            case DicEnum.UDF_CATE.TICKETS:
                table = "sdk_task_ext";
                break;

            case DicEnum.UDF_CATE.FORM_RECTICKET:
                table = "sys_form_tmpl_recurring_ticket_ext";
                break;

            case DicEnum.UDF_CATE.FORM_TICKET:
                table = "sys_form_tmpl_ticket_ext";
                break;

            // TODO: 其他类别
            default:
                break;
            }
            return(table);
        }
Example #8
0
        /// <summary>
        /// 更新自定义字段值,并记录日志
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="fields"></param>
        /// <param name="id"></param>
        /// <param name="vals"></param>
        /// <param name="user"></param>
        /// <param name="oper_log_cate"></param>
        /// <returns></returns>
        public bool UpdateUdfValue(DicEnum.UDF_CATE cate, List <UserDefinedFieldDto> fields, long id, List <UserDefinedFieldValue> vals, UserInfoDto user, DicEnum.OPER_LOG_OBJ_CATE oper_log_cate)
        {
            if (vals == null || vals.Count == 0)
            {
                return(true);
            }
            var oldVal = GetUdfValue(cate, id, fields);
            Dictionary <string, string> dict = new Dictionary <string, string>();
            StringBuilder updateSb           = new StringBuilder();

            foreach (var val in vals)
            {
                var oldv = oldVal.Find(f => f.id == val.id);
                if (oldv != null && object.Equals(oldv.value, val.value))
                {
                    continue;
                }
                var fld = fields.Find(f => f.id == val.id);
                if (val.value == null)
                {
                    updateSb.Append(fld.col_name).Append("=null,");    // 组合sql更新语句
                }
                else
                {
                    string v = val.value.ToString().Replace("'", "''");                // 转义单引号
                    updateSb.Append(fld.col_name).Append("='").Append(v).Append("',"); // 组合sql更新语句
                }

                dict.Add(fld.col_name, (oldv == null?"":oldv.value) + "→" + val.value); // 生成操作日志
            }
            if (dict.Count == 0)                                                        // 无修改
            {
                return(true);
            }

            string updateStr = updateSb.Remove(updateSb.Length - 1, 1).ToString();
            string sql       = $"UPDATE {GetTableName(cate)} SET {updateStr} WHERE parent_id={id}";

            if (new sys_udf_field_dal().ExecuteSQL(sql) <= 0)
            {
                return(false);
            }

            sys_oper_log log = new sys_oper_log()
            {
                user_cate           = "用户",
                user_id             = user.id,
                name                = user.name,
                phone               = user.mobile == null ? "" : user.mobile,
                oper_time           = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now),
                oper_object_cate_id = (int)oper_log_cate,
                oper_object_id      = id,   // 操作对象id
                oper_type_id        = (int)DicEnum.OPER_LOG_TYPE.UPDATE,
                oper_description    = new Tools.Serialize().SerializeJson(dict),
                remark              = "修改自定义字段值"
            };                                  // 创建日志

            new sys_oper_log_dal().Insert(log); // 插入日志

            return(true);
        }
Example #9
0
        /// <summary>
        /// 保存记录中的自定义字段值,并记录日志
        /// </summary>
        /// <param name="cate">客户、联系人等类别</param>
        /// <param name="userId">操作用户id</param>
        /// <param name="objId">记录的id</param>
        /// <param name="fields">自定义字段信息</param>
        /// <param name="value">自定义字段值</param>
        /// <param name="oper_log_cate"></param>
        /// <returns></returns>
        public bool SaveUdfValue(DicEnum.UDF_CATE cate, long userId, long objId, List <UserDefinedFieldDto> fields, List <UserDefinedFieldValue> value, DicEnum.OPER_LOG_OBJ_CATE oper_log_cate)
        {
            // 无自定义字段信息
            if (value == null)
            {
                value = new List <UserDefinedFieldValue>();
            }

            StringBuilder select             = new StringBuilder();
            StringBuilder values             = new StringBuilder();
            Dictionary <string, object> dict = new Dictionary <string, object>();

            foreach (var val in value)
            {
                var field = fields.FindAll(s => s.id == val.id);
                if (field == null || field.Count == 0)
                {
                    continue;
                }
                string fieldName = field.First().col_name;
                if (val.value != null)
                {
                    select.Append(",").Append(fieldName);
                    string v = val.value.ToString().Replace("'", "''"); // 转义单引号
                    values.Append(",'").Append(v).Append("'");
                    dict.Add(fieldName, val.value);
                }
            }

            string table  = GetTableName(cate);
            var    dal    = new sys_udf_field_dal();
            string insert = $"INSERT INTO {table} (id,parent_id{select.ToString()}) VALUES ({dal.GetNextIdCom()},{objId}{values.ToString()})";

            try
            {
                int rslt = dal.ExecuteSQL(insert);
                if (rslt <= 0)
                {
                    return(false);
                }

                var          user = new sys_resource_dal().FindById(userId);
                sys_oper_log log  = new sys_oper_log()
                {
                    user_cate           = "用户",
                    user_id             = user.id,
                    name                = user.name,
                    phone               = user.mobile_phone == null ? "" : user.mobile_phone,
                    oper_time           = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now),
                    oper_object_cate_id = (int)oper_log_cate,
                    oper_object_id      = objId,   // 操作对象id
                    oper_type_id        = (int)DicEnum.OPER_LOG_TYPE.ADD,
                    oper_description    = new Tools.Serialize().SerializeJson(dict),
                    remark              = "新增自定义字段值"
                };                                  // 创建日志
                new sys_oper_log_dal().Insert(log); // 插入日志
            }
            catch
            {
                return(false);   // TODO: 异常处理
            }

            return(true);
        }
Example #10
0
        /// <summary>
        /// 增加自定义字段
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="udf"></param>
        /// <returns></returns>
        public bool AddUdf(DicEnum.UDF_CATE cate, UserDefinedFieldDto udf, long userId)
        {
            string table = GetTableName(cate);
            var    dal   = new sys_udf_field_dal();

            var field = new sys_udf_field();

            field.id                    = dal.GetNextIdCom();
            field.col_name              = GetNextColName();
            field.col_comment           = udf.name;
            field.description           = udf.description;
            field.cate_id               = udf.cate;
            field.data_type_id          = udf.data_type;
            field.default_value         = udf.default_value;
            field.is_protected          = udf.is_protected;
            field.is_required           = udf.required;
            field.is_encrypted          = udf.is_encrypted;
            field.is_visible_in_portal  = udf.is_visible_in_portal;
            field.crm_to_project_udf_id = udf.crm_to_project;
            field.sort_order            = udf.sort_order;
            field.is_active             = udf.is_active;
            field.display_format_id     = udf.display_format;
            field.decimal_length        = udf.decimal_length;
            field.create_user_id        = userId;
            field.update_user_id        = userId;
            field.create_time           = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
            field.update_time           = field.create_time;
            dal.Insert(field);
            OperLogBLL.OperLogAdd <sys_udf_field>(field, field.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED, "新增自定义字段");

            if (udf.data_type == (int)DicEnum.UDF_DATA_TYPE.LIST)       // 字段为列表类型,保存列表值
            {
                if (udf.list != null && udf.list.Count > 0)
                {
                    var listDal = new sys_udf_list_dal();
                    foreach (var listVal in udf.list)
                    {
                        sys_udf_list val = new sys_udf_list();
                        val.id             = listDal.GetNextIdCom();
                        val.is_default     = listVal.is_default;
                        val.name           = listVal.name;
                        val.sort_order     = listVal.sort_order;
                        val.udf_field_id   = field.id;
                        val.status_id      = 0;
                        val.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                        val.update_time    = val.create_time;
                        val.create_user_id = field.create_user_id;
                        val.update_user_id = val.create_user_id;
                        listDal.Insert(val);

                        OperLogBLL.OperLogAdd <sys_udf_list>(val, val.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "新增自定义字段值");
                    }
                }
            }

            string sql = $"alter table {table} add {field.col_name} varchar(";

            if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.SINGLE_TEXT)
            {
                sql += "200)";
            }
            else if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.MUILTI_TEXT)
            {
                sql += "2000)";
            }
            else
            {
                sql += "20)";
            }
            dal.ExecuteSQL(sql);
            if (field.cate_id == (int)DicEnum.UDF_CATE.TICKETS)
            {
                table = GetTableName(DicEnum.UDF_CATE.FORM_RECTICKET);
                sql   = $"alter table {table} add {field.col_name} varchar(";
                if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.SINGLE_TEXT)
                {
                    sql += "200)";
                }
                else if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.MUILTI_TEXT)
                {
                    sql += "2000)";
                }
                else
                {
                    sql += "20)";
                }
                dal.ExecuteSQL(sql);

                table = GetTableName(DicEnum.UDF_CATE.FORM_TICKET);
                sql   = $"alter table {table} add {field.col_name} varchar(";
                if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.SINGLE_TEXT)
                {
                    sql += "200)";
                }
                else if (field.data_type_id == (int)DicEnum.UDF_DATA_TYPE.MUILTI_TEXT)
                {
                    sql += "2000)";
                }
                else
                {
                    sql += "20)";
                }
                dal.ExecuteSQL(sql);
            }

            return(true);
        }
Example #11
0
        /// <summary>
        /// 新增编辑自定义字段
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="udf"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditUdf(DicEnum.UDF_CATE cate, UserDefinedFieldDto udf, long userId)
        {
            if (udf.id == 0)
            {
                return(AddUdf(cate, udf, userId));
            }

            var dal   = new sys_udf_field_dal();
            var field = dal.FindNoDeleteById(udf.id);

            if (field == null)
            {
                return(false);
            }

            field.col_comment           = udf.name;
            field.description           = udf.description;
            field.data_type_id          = udf.data_type;
            field.default_value         = udf.default_value;
            field.is_protected          = udf.is_protected;
            field.is_required           = udf.required;
            field.is_encrypted          = udf.is_encrypted;
            field.is_visible_in_portal  = udf.is_visible_in_portal;
            field.crm_to_project_udf_id = udf.crm_to_project;
            field.sort_order            = udf.sort_order;
            field.is_active             = udf.is_active;
            field.display_format_id     = udf.display_format;
            field.decimal_length        = udf.decimal_length;
            field.update_user_id        = userId;
            field.update_time           = Tools.Date.DateHelper.ToUniversalTimeStamp();

            var fieldOld = dal.FindById(field.id);
            var desc     = OperLogBLL.CompareValue <sys_udf_field>(fieldOld, field);

            if (!string.IsNullOrEmpty(desc))
            {
                dal.Update(field);
                OperLogBLL.OperLogUpdate(desc, field.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED, "编辑自定义字段");
            }

            var listDal = new sys_udf_list_dal();
            var list    = dal.FindListBySql <sys_udf_list>($"select * from sys_udf_list where udf_field_id={field.id} and status_id=0 and delete_time=0");

            //var find=udf.list.Find(_=>_.is_default==1)
            foreach (var ufv in udf.list)
            {
                var find = list.Find(_ => _.id == ufv.id);
                if (find == null)
                {
                    sys_udf_list val = new sys_udf_list();
                    val.id             = listDal.GetNextIdCom();
                    val.is_default     = ufv.is_default;
                    val.name           = ufv.name;
                    val.sort_order     = ufv.sort_order;
                    val.udf_field_id   = udf.id;
                    val.status_id      = 0;
                    val.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                    val.update_time    = val.create_time;
                    val.create_user_id = field.create_user_id;
                    val.update_user_id = val.create_user_id;
                    listDal.Insert(val);

                    OperLogBLL.OperLogAdd <sys_udf_list>(val, val.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "新增自定义字段值");
                }
                else
                {
                    if (find.is_default != ufv.is_default)
                    {
                        find.is_default     = ufv.is_default;
                        find.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                        find.update_user_id = userId;

                        var old = listDal.FindById(find.id);
                        listDal.Update(find);
                        OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_udf_list>(old, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "编辑自定义字段值");
                    }
                    list.Remove(find);
                }
            }

            foreach (var ufv in list)
            {
                ufv.delete_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                ufv.delete_user_id = userId;
                listDal.Update(ufv);
                OperLogBLL.OperLogDelete <sys_udf_list>(ufv, ufv.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "删除自定义字段值");
            }

            return(true);
        }