コード例 #1
0
ファイル: Report.cs プロジェクト: 0anion0/IBN
        public static XmlDocument GetUsersXMLReport(IBNReportTemplate repTemp, string _lang, string _timeoffset)
        {
            QDirectory objD = new QDirectory();
            QMaker qMaker = new QMaker(objD);
            qMaker.Language = _lang;
            qMaker.TimeOffset = _timeoffset;

            #region Fields
            foreach (FieldInfo fi in repTemp.Fields)
            {
                qMaker.Fields.Add(objD.Fields[fi.Name]);
            }
            #endregion

            #region GroupFields
            foreach (FieldInfo fi1 in repTemp.Groups)
            {
                qMaker.Groups.Add(objD.Fields[fi1.Name]);
            }
            #endregion

            #region Filters
            foreach (FilterInfo fti in repTemp.Filters)
            {
                QField qField = objD.Fields[fti.FieldName];
                QDictionary qDic = objD.GetDictionary(qField);
                if (qDic != null)
                {
                    if (fti.Values.Count > 0)
                    {
                        string[] _str = new string[fti.Values.Count];
                        int i = 0;
                        foreach (string s in fti.Values)
                            _str[i++] = s;
                        qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[qDic.FieldId.Name], _str, SimpleFilterType.Equal));
                    }
                }
                else
                {
                    switch (qField.DataType)
                    {
                        case DbType.Decimal:
                        case DbType.Int32:
                        case DbType.Time:
                            if (fti.Values.Count > 0)
                            {
                                switch (fti.Values[0])
                                {
                                    case "0":
                                        qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Equal));
                                        break;
                                    case "1":
                                        qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Great));
                                        break;
                                    case "2":
                                        qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Less));
                                        break;
                                    case "3":
                                        qMaker.Filters.Add(new IntervalFilterCondition(objD.Fields[fti.FieldName], fti.Values[1].ToString(), fti.Values[2].ToString()));
                                        break;
                                }
                            }
                            break;
                        case DbType.DateTime:
                        case DbType.Date:
                            if (fti.Values.Count > 0)
                            {
                                DateTime _Start = DateTime.MinValue;
                                DateTime _Finish = DateTime.MaxValue;
                                string sVal = fti.Values[0];
                                SetDates(sVal, out _Start, out _Finish);
                                if (sVal != "9")
                                {
                                    qMaker.Filters.Add(new IntervalFilterCondition(objD.Fields[fti.FieldName], "CONVERT(datetime,'" + _Start.ToString("yyyy-MM-dd") + "',120)", "CONVERT(datetime,'" + _Finish.ToString("yyyy-MM-dd") + "',120)"));
                                }
                                else if (DateTime.Parse(fti.Values[1]) == DateTime.MinValue)
                                {
                                    qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], "CONVERT(datetime,'" + DateTime.Parse(fti.Values[2]).ToString("yyyy-MM-dd") + "',120)", SimpleFilterType.LessOrEqual));
                                }
                                else if (DateTime.Parse(fti.Values[2]) >= DateTime.MaxValue.Date)
                                {
                                    qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], "CONVERT(datetime,'" + DateTime.Parse(fti.Values[1]).ToString("yyyy-MM-dd") + "',120)", SimpleFilterType.GreatOrEqual));
                                }
                                else
                                {
                                    qMaker.Filters.Add(new IntervalFilterCondition(objD.Fields[fti.FieldName], "CONVERT(datetime,'" + DateTime.Parse(fti.Values[1]).ToString("yyyy-MM-dd") + "',120)", "CONVERT(datetime,'" + DateTime.Parse(fti.Values[2]).ToString("yyyy-MM-dd") + "',120)"));
                                }
                            }
                            break;
                        case DbType.String:
                            if (fti.Values.Count > 0)
                            {
                                qMaker.Filters.Add(new SimpleFilterCondition(objD.Fields[fti.FieldName], GetApString(fti.Values[0]), SimpleFilterType.Like));
                            }
                            break;
                    }
                }
            }
            #endregion

            string sql = qMaker.Create();
            XmlDocument doc = DBReport.GetXMLReport(sql);
            QMetaLoader.AddHeaderInformation(doc, qMaker);
            //QMetaLoader.AddSortInformation(doc, repTemp);
            //QMetaLoader.AddFilterInformation(doc, repTemp);
            AddTemplateInfo(doc, repTemp);
            ProcessResourceValues(doc);
            return doc;
        }