Пример #1
0
        public void GetFilterSQL()
        {
            //QueryParameterInfo[]  parInfos = new MB.Util.Serializer.QueryParameterXmlSerializer().DeSerializer(xmlFilterParams);
            //string sqlFilter = MB.Orm.DbSql.SqlShareHelper.Instance.QueryParametersToSqlString(null, parInfos);


            QueryParameterInfo info1 = new QueryParameterInfo("Code", "111", Util.DataFilterConditions.Equal);
            QueryParameterInfo info2 = new QueryParameterInfo("Date", "222", Util.DataFilterConditions.Between);

            info2.Value2 = "333";
            QueryParameterInfo info3 = new QueryParameterInfo("Name", "4444", Util.DataFilterConditions.Like);

            QueryParameterInfo[] parInfos = new QueryParameterInfo[3];
            parInfos[0] = info1;
            parInfos[1] = info2;
            parInfos[2] = info3;


            string sqlFilter = MB.Orm.DbSql.SqlShareHelper.Instance.QueryParametersToSqlString(null, parInfos);

            string xmlFilterParams = @"<FilterRoot AdvanceFilter='False'><Parameter><PropertyName>CREATE_DATE</PropertyName><Value><![CDATA[2007/5/3 0:00:00]]></Value><Value2><![CDATA[2012/5/17 0:00:00]]></Value2><Condition>Between</Condition><DataType>DateTime</DataType><OrderIndex>0</OrderIndex><Limited>False</Limited><MultiValue>False</MultiValue></Parameter><Parameter><PropertyName>LAST_MODIFIED_DATE</PropertyName><Value><![CDATA[2007/5/17 0:00:00]]></Value><Value2><![CDATA[2012/5/17 0:00:00]]></Value2><Condition>Between</Condition><DataType>DateTime</DataType><OrderIndex>0</OrderIndex><Limited>False</Limited><MultiValue>False</MultiValue></Parameter></FilterRoot>";

            parInfos = new MB.Util.Serializer.QueryParameterXmlSerializer().DeSerializer(xmlFilterParams);

            sqlFilter = MB.Orm.DbSql.SqlShareHelper.Instance.QueryParametersToSqlString(null, parInfos);
        }
        //反系列化 查询字符窜。
        private void fillListEntity(List <QueryParameterInfo> lstData, XmlNodeList nodeList)
        {
            foreach (XmlNode node in nodeList)
            {
                QueryParameterInfo info = new QueryParameterInfo();
                if (string.Compare(node.Name, GROUP_NAME, true) == 0)
                {
                    if (node.ChildNodes.Count == 0)
                    {
                        continue;
                    }

                    info.IsGroupNode = true;
                    if (node.Attributes["GroupNodeLinkType"] != null && !string.IsNullOrEmpty(node.Attributes["GroupNodeLinkType"].Value))
                    {
                        info.GroupNodeLinkType = (QueryGroupLinkType)Enum.Parse(typeof(QueryGroupLinkType), node.Attributes["GroupNodeLinkType"].Value);
                    }
                    else
                    {
                        info.GroupNodeLinkType = QueryGroupLinkType.AND;
                    }
                    List <QueryParameterInfo> childs = new List <QueryParameterInfo>();
                    info.Childs = childs;

                    fillListEntity(childs, node.ChildNodes);
                }
                else
                {
                    fillSingleProperty(info, node);
                }

                lstData.Add(info);
            }
        }
Пример #3
0
        /// <summary>
        /// 追加参数。
        /// </summary>
        /// <param name="paramName"></param>
        /// <param name="value"></param>
        /// <param name="condition"></param>
        /// <returns></returns>
        public QueryParameterInfo AddParameterInfo(string paramName, object value, DataFilterConditions condition)
        {
            QueryParameterInfo newParm = new QueryParameterInfo(paramName, value, condition);

            _DataList.Add(newParm);
            return(newParm);
        }
Пример #4
0
        /// <summary>
        /// 追加分组节点。
        /// </summary>
        /// <param name="linkType"></param>
        /// <returns></returns>
        public QueryParameterInfo AddParameterGroup(MB.Util.Model.QueryGroupLinkType linkType)
        {
            QueryParameterInfo newParm = new QueryParameterInfo(linkType);

            _DataList.Add(newParm);
            return(newParm);
        }
            public void AssignParameters(
                IEnumerable <QueryParameterInfo> parameters,
                IEnumerable <ParameterValue> parameterValues,
                List <Tuple <int, string> > parametersQueueForOdbc
                )
            {
                if (parametersQueueForOdbc != null && parametersQueueForOdbc.Any() && parameters != null)
                {
                    foreach (Tuple <int, string> currentTuple in parametersQueueForOdbc)
                    {
                        QueryParameterInfo currentParam = parameters.FirstOrDefault(x => x.Name == currentTuple.Item2);

                        if (currentParam != null)
                        {
                            OdbcParameter p = this._command.CreateParameter();
                            p.ParameterName = currentParam.Name;
                            p.IsNullable    = true;
                            p.DbType        = currentParam.Type.ToDbType();
                            p.Value         = currentParam.GetDefaultValue();

                            this._command.Parameters.Add(p);
                        }
                    }
                }
                else if (parameters != null)
                {
                    foreach (QueryParameterInfo parameter in parameters)
                    {
                        OdbcParameter p = this._command.CreateParameter();
                        p.ParameterName = parameter.Name;
                        p.IsNullable    = true;
                        p.DbType        = parameter.Type.ToDbType();
                        p.Value         = parameter.GetDefaultValue();

                        this._command.Parameters.Add(p);
                    }
                }

                if (parameterValues != null)
                {
                    foreach (ParameterValue value in parameterValues)
                    {
                        List <OdbcParameter> currentParameters =
                            (from OdbcParameter p in this._command.Parameters
                             where p.ParameterName == value.Name
                             select p)
                            .ToList();

                        foreach (OdbcParameter currentParameter in currentParameters)
                        {
                            if (currentParameter != null)
                            {
                                currentParameter.Value = value.GetValue(currentParameter.DbType);
                            }
                        }
                    }
                }
            }
Пример #6
0
        /// <summary>
        /// 删除参数。
        /// </summary>
        /// <param name="paramName"></param>
        public void RemoveParameterInfo(string paramName)
        {
            QueryParameterInfo info = _DataList.Find(o => string.Compare(o.PropertyName, paramName, true) == 0);

            if (info != null)
            {
                _DataList.Remove(info);
            }
        }
        //根据Node 的节点给每个属性赋值。
        private void fillSingleProperty(QueryParameterInfo entity, XmlNode xmlNode)
        {
            PropertyInfo[] pros = entity.GetType().GetProperties();
            foreach (PropertyInfo info in pros)
            {
                if (info.IsSpecialName || !info.CanWrite)
                {
                    continue;
                }

                DataMemberAttribute att = Attribute.GetCustomAttribute(info, typeof(DataMemberAttribute)) as DataMemberAttribute;

                if (att == null)
                {
                    continue;
                }

                //非查询需要的参数属性去除掉
                if (Array.IndexOf(PARAM_EXCEPTION_PROS_NAME, info.Name) >= 0)
                {
                    continue;
                }

                XmlNode propertyNode = getNodeByNodeName(xmlNode.ChildNodes, info.Name);

                if (propertyNode == null)
                {
                    continue;
                }

                if (string.IsNullOrEmpty(propertyNode.InnerText))
                {
                    continue;
                }

                object val = propertyNode.InnerText.Trim();
                //考虑到Enum 的值都是通过描述来配置的,所以这里需要特殊处理一下。
                if (info.PropertyType.IsEnum)
                {
                    val = Enum.Parse(info.PropertyType, val.ToString());
                }

                MB.Util.MyReflection.Instance.InvokePropertyForSet(entity, info.Name, val);
            }
        }
Пример #8
0
        /// <summary>
        /// 重新刷新实体对象。
        /// 1)应该先找对应配置的XML 文件中是否已经配置了 RefreshEntity
        /// 2)如果用户没有配置再根据 GetObjects 查找
        /// </summary>
        /// <param name="baseRule"></param>
        /// <param name="dataInDocType"></param>
        /// <param name="entity"></param>
        /// <returns></returns>
        public object RefreshEntity(IBaseRule baseRule, object dataInDocType, object entity, params object[] parValues)
        {
            string keyPropertyName = string.Empty;
            object key             = MB.Orm.Persistence.EntityDataHelper.Instance.GetEntityKeyValue(entity, out keyPropertyName);

            MB.Util.Model.QueryParameterInfo[] pars = new QueryParameterInfo[1];
            pars[0] = new QueryParameterInfo(keyPropertyName, key, MB.Util.DataFilterConditions.Equal);
            List <object> lstData = GetObjects <object>(baseRule, dataInDocType, pars, parValues);

            if (lstData == null || lstData.Count == 0)
            {
                return(null);
            }
            else
            {
                return(lstData[0]);
            }
        }
        //系列化单的对象
        private void serializeSingleObject(StringBuilder sXml, QueryParameterInfo val)
        {
            Type t = val.GetType();

            PropertyInfo[] pros = t.GetProperties();
            foreach (PropertyInfo info in pros)
            {
                if (info.IsSpecialName)
                {
                    continue;
                }
                object[] att = info.GetCustomAttributes(typeof(DataMemberAttribute), true);
                if (att == null || att.Length == 0)
                {
                    continue;
                }
                //非查询需要的参数属性去除掉
                if (Array.IndexOf(PARAM_EXCEPTION_PROS_NAME, info.Name) >= 0)
                {
                    continue;
                }

                Type   proType = info.PropertyType;
                object v       = info.GetValue(val, null);

                if (v != null)
                {
                    writeFirstMarker(sXml, info.Name);

                    if (info.Name == "Value" || info.Name == "Value2")
                    {
                        valueToXmlString(sXml, v, proType);
                    }
                    //sXml.Append(string.Format("<![CDATA[{0}]]>",v.ToString().Trim()));
                    else
                    {
                        sXml.Append(v.ToString());
                    }

                    writeLastMarker(sXml, info.Name);
                }
            }
        }
Пример #10
0
        /// <summary>
        /// 为逗号分割的多个值生成子查询参数,以OR连接.用于模糊查询.
        /// </summary>
        /// <param name="parInfo">原始的查询参数</param>
        private void createChildQueryParameterForMultiValue(QueryParameterInfo parInfo)
        {
            if (parInfo.Condition == Util.DataFilterConditions.BenginsWith ||
                parInfo.Condition == Util.DataFilterConditions.EndsWith ||
                parInfo.Condition == Util.DataFilterConditions.Like)
            {
                // 多值模糊查询
                if (parInfo.MultiValue && parInfo.Value != null)
                {
                    string multipleValue = parInfo.Value.ToString();

                    // 逗号分割
                    if (multipleValue.Contains(","))
                    {
                        parInfo.IsGroupNode       = true;
                        parInfo.GroupNodeLinkType = QueryGroupLinkType.OR;
                        var values = multipleValue.Split(new char[] { ',' });

                        foreach (var value in values)
                        {
                            // 忽略空字符串
                            if (!string.IsNullOrEmpty(value.Trim()))
                            {
                                var childQueryParameter = new QueryParameterInfo(parInfo.PropertyName, value, parInfo.Condition, parInfo.Limited);

                                if (parInfo.Childs == null)
                                {
                                    parInfo.Childs = new List <QueryParameterInfo>();
                                }

                                parInfo.Childs.Add(childQueryParameter);
                            }
                        }
                    }
                }
            }
        }
Пример #11
0
        private bool filterObjectsByInput(bool isKeyDown)
        {
            try
            {
                if (!checkCanQueryData())
                {
                    return(false);
                }

                if (_FrmDataAssistant == null || _ColumnEditCfgInfo.NeedCreate)
                {
                    createFilterObjectData();
                }

                if (_ErrorProvider != null)
                {
                    _ErrorProvider.SetError(this, string.Empty);
                }

                int docType = 0;

                bool needValidation = true;//需要验证输入数据

                // 生成查询条件,默认为Equal,该查询仅仅用于验证
                List <MB.Util.Model.QueryParameterInfo> lst = new List <MB.Util.Model.QueryParameterInfo>();
                var queryPara = new QueryParameterInfo(_ColumnEditCfgInfo.TextFieldName, this.btnEdit.Text, DataFilterConditions.Equal);
                lst.Add(queryPara);

                // 在查询窗口或者获取对象助手窗口中,需要根据FilterElementInfo信息进一步处理
                if (this.ParentForm is IQueryFilterForm || this.ParentForm is IGetObjectDataAssistant)
                {
                    if (this.FilterElementInfo != null)
                    {
                        // 多选,进行验证
                        if ((this.FilterElementInfo.FilterCondition == Util.DataFilterConditions.In ||
                             this.FilterElementInfo.FilterCondition == Util.DataFilterConditions.Equal) &&
                            this.MultiSelect)
                        {
                            queryPara.Condition = Util.DataFilterConditions.In;
                        }
                        else if (this.FilterElementInfo.FilterCondition == Util.DataFilterConditions.BenginsWith ||
                                 this.FilterElementInfo.FilterCondition == Util.DataFilterConditions.EndsWith ||
                                 this.FilterElementInfo.FilterCondition == Util.DataFilterConditions.Like)
                        {
                            // 模糊查询,不进行验证
                            needValidation = false;
                        }
                    }
                }

                // 验证输入的值是否正确
                if (needValidation)
                {
                    var lstData = _FrmDataAssistant.GetFilterObjects(docType, lst);

                    if (lstData == null || lstData.Count == 0)
                    {
                        if (_ErrorProvider == null)
                        {
                            _ErrorProvider = new ErrorProvider();
                        }

                        if (isKeyDown)
                        {
                            _ErrorProvider.SetError(this, "当前输入不是合法的数据,请重新输入!");
                        }
                        else
                        {
                            btnEdit.Text = string.Empty;
                        }
                    }
                    else
                    {
                        setSelectValue(lstData, isKeyDown);

                        if (_ErrorProvider != null)
                        {
                            _ErrorProvider = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MB.WinBase.ApplicationExceptionTerminate.DefaultInstance.ExceptionTerminate(ex);
                return(false);
            }
            return(true);
        }
Пример #12
0
        /// <summary>
        /// 根据输入的条件获取查询的参数。
        /// </summary>
        /// <returns></returns>
        public MB.Util.Model.QueryParameterInfo[] GetQueryParameters()
        {
            List <MB.Util.Model.QueryParameterInfo> parameters = new List <MB.Util.Model.QueryParameterInfo>();
            bool validated = true;

            foreach (MB.WinBase.Binding.ColumnBindingInfo bindingInfo in _EditColumnCtlBinding.Values)
            {
                if (!_DataElementCfgs.ContainsKey(bindingInfo.ColumnName))
                {
                    throw new MB.Util.APPException(string.Format("DataFilterElements配置中不包含列 {0}", bindingInfo.ColumnName), MB.Util.APPMessageType.SysErrInfo);
                }

                DataFilterElementCfgInfo          filterCfgInfo = _DataElementCfgs[bindingInfo.ColumnName];
                MB.WinBase.Common.EditControlType controlType   = (EditControlType)Enum.Parse(typeof(EditControlType), filterCfgInfo.EditControlType);
                Control ctl = bindingInfo.BindingControl;
                //先情况错误的消息描述。
                _ErrorProvider.SetError(ctl, string.Empty);
                switch (controlType)
                {
                case EditControlType.TextBox:
                case EditControlType.Combox_DropDown:
                case EditControlType.Combox_DropDownList:
                case EditControlType.ClickButtonInput:
                    if (!string.IsNullOrEmpty(ctl.Text.Trim()))
                    {
                        MB.Util.Model.QueryParameterInfo parInfo = new MB.Util.Model.QueryParameterInfo(bindingInfo.ColumnName, ctl.Text, filterCfgInfo.FilterCondition, filterCfgInfo.LimitColumn);

                        if (controlType == EditControlType.TextBox ||
                            controlType == EditControlType.ClickButtonInput)
                        {
                            parInfo.MultiValue = filterCfgInfo.AllowMultiValue;

                            // 生成子查询条件支持多值模糊查询.XiaoMin
                            createChildQueryParameterForMultiValue(parInfo);
                        }
                        //end
                        parameters.Add(parInfo);
                    }
                    else
                    {
                        if (!filterCfgInfo.Nullable)
                        {
                            _ErrorProvider.SetError(ctl, MSG_NOT_ALLOW_NULL_ABLE);
                            validated = false;
                        }
                    }
                    break;

                case EditControlType.CheckBox:
                    CheckBox cBox = ctl as CheckBox;
                    MB.Util.Model.QueryParameterInfo bparInfo = new MB.Util.Model.QueryParameterInfo(bindingInfo.ColumnName, cBox.Checked, filterCfgInfo.FilterCondition, filterCfgInfo.LimitColumn);
                    bparInfo.DataType = "System.Boolean";
                    parameters.Add(bparInfo);

                    break;

                case EditControlType.ComboCheckedListBox:
                    MB.WinBase.Ctls.ucComboCheckedListBox comboListBox = ctl as MB.WinBase.Ctls.ucComboCheckedListBox;
                    string str = string.Join(",", comboListBox.GetAllCheckedItemsKey());
                    if (!string.IsNullOrEmpty(str))
                    {
                        MB.Util.Model.QueryParameterInfo parInfo = new MB.Util.Model.QueryParameterInfo(bindingInfo.ColumnName, str, filterCfgInfo.FilterCondition, filterCfgInfo.LimitColumn);
                        parInfo.MultiValue = true;     //如果设置为该控件,那么就必须允许输入多个值。
                        parameters.Add(parInfo);
                    }
                    else
                    {
                        if (!filterCfgInfo.Nullable)
                        {
                            _ErrorProvider.SetError(ctl, MSG_NOT_ALLOW_NULL_ABLE);
                            validated = false;
                        }
                    }
                    break;

                case EditControlType.LookUpEdit:
                    ComboBox box = ctl as ComboBox;
                    if (box.SelectedIndex >= 0 && !string.IsNullOrEmpty(box.Text.Trim()))
                    {
                        parameters.Add(new MB.Util.Model.QueryParameterInfo(bindingInfo.ColumnName, box.SelectedValue, filterCfgInfo.FilterCondition, filterCfgInfo.LimitColumn));
                    }
                    else
                    {
                        if (!filterCfgInfo.Nullable)
                        {
                            _ErrorProvider.SetError(ctl, MSG_NOT_ALLOW_NULL_ABLE);
                            validated = false;
                        }
                    }
                    break;

                case EditControlType.DateFilterCtl:
                    MB.WinBase.Ctls.ucEditDateFilter dateFilter = ctl as MB.WinBase.Ctls.ucEditDateFilter;
                    if (dateFilter.DateFilterType != MB.WinBase.Ctls.ucEditDateFilter.DateFilterEditType.None)
                    {
                        MB.Util.Model.DateFilterStruct   dateFilterValue = dateFilter.CurrentSettingValue;
                        MB.Util.Model.QueryParameterInfo dateInfo        = new MB.Util.Model.QueryParameterInfo(bindingInfo.ColumnName,
                                                                                                                dateFilterValue.BeginDate, MB.Util.DataFilterConditions.Between, filterCfgInfo.LimitColumn);
                        dateInfo.DataType = "DateTime";
                        dateInfo.Value2   = dateFilterValue.EndDate;

                        //服务端不在过滤时间的问题
                        if (dateInfo.Value != null)
                        {
                            dateInfo.Value = DateTime.Parse(((DateTime)dateInfo.Value).ToString(filterCfgInfo.Formate));
                        }
                        if (dateInfo.Value2 != null)
                        {
                            dateInfo.Value2 = DateTime.Parse(((DateTime)dateInfo.Value2).ToString(filterCfgInfo.Formate));
                        }

                        parameters.Add(dateInfo);
                    }
                    else
                    {
                        if (!filterCfgInfo.Nullable)
                        {
                            _ErrorProvider.SetError(ctl, MSG_NOT_ALLOW_NULL_ABLE);
                            validated = false;
                        }
                    }
                    break;

                case EditControlType.PopupRegionEdit:
                    MB.WinBase.Ctls.ucPopupRegionEdit regionEdit = ctl as MB.WinBase.Ctls.ucPopupRegionEdit;
                    if (_ClientRule.UIRuleXmlConfigInfo.ColumnsCfgEdit != null && _ClientRule.UIRuleXmlConfigInfo.ColumnsCfgEdit.ContainsKey(filterCfgInfo.Name))
                    {
                        regionEdit.ColumnEditCfgInfo = _ClientRule.UIRuleXmlConfigInfo.ColumnsCfgEdit[filterCfgInfo.Name];

                        var curRegion = regionEdit.CurRegionEdit;
                        foreach (var data in regionEdit.ColumnEditCfgInfo.EditCtlDataMappings)
                        {
                            object obj = MB.Util.MyReflection.Instance.InvokePropertyForGet(curRegion, data.SourceColumnName);
                            if (obj != null && !string.IsNullOrEmpty(obj.ToString()))
                            {
                                MB.Util.Model.QueryParameterInfo param = new QueryParameterInfo(data.ColumnName, obj, MB.Util.DataFilterConditions.Equal);
                                parameters.Add(param);
                            }
                        }
                    }
                    break;

                default:
                    break;
                }
            }
            if (!validated)
            {
                throw new MB.Util.APPException("查询条件输入有误,请检查!", MB.Util.APPMessageType.DisplayToUser);
            }
            return(parameters.ToArray());
        }