コード例 #1
0
ファイル: QMetaLoader.cs プロジェクト: 0anion0/IBN
        public static void AddHeaderInformation(XmlDocument xmlDoc, QMaker qMaker)
        {
            StringBuilder sbH = new StringBuilder();
            StringWriter tempWriterH = new StringWriter(sbH);
            XmlTextWriter writerH = new XmlTextWriter(tempWriterH);

            writerH.WriteStartElement("Headers");

            foreach (QField gField in qMaker.Groups)
            {
                writerH.WriteStartElement("Header");
                writerH.WriteAttributeString("Name", gField.Name);
                writerH.WriteAttributeString("Description", gField.FriendlyName);
                writerH.WriteEndElement();//Header
            }
            foreach (QField fField in qMaker.Fields)
            {
                writerH.WriteStartElement("Header");
                writerH.WriteAttributeString("Name", fField.Name);
                writerH.WriteAttributeString("Description", fField.FriendlyName);
                writerH.WriteEndElement();//Header
            }

            writerH.WriteEndElement();//Headers
            writerH.Flush();

            XmlDocumentFragment xmlHeaders = xmlDoc.CreateDocumentFragment();
            xmlHeaders.InnerXml = sbH.ToString();

            xmlDoc.SelectSingleNode("Report").AppendChild(xmlHeaders);
        }
コード例 #2
0
ファイル: IBNReportTemplate.cs プロジェクト: 0anion0/IBN
 public IBNReportTemplate(QMaker	maker, SortCollection	coll, string Name, string ObjectName, string ViewType, string Author, DateTime Created)
     : this(maker,coll)
 {
     this.Name = Name;
     this.ObjectName = ObjectName;
     this.Author  = Author;
     this.ViewType = ViewType;
     this.Created = Created;
 }
コード例 #3
0
ファイル: IBNReportTemplate.cs プロジェクト: 0anion0/IBN
        public IBNReportTemplate(QMaker	maker, SortCollection	coll)
        {
            if(maker!=null)
            {
                foreach(Mediachase.SQLQueryCreator.QField field in maker.Fields)
                {
                    this.Fields.Add(new FieldInfo(field.Name,field.DataType.ToString()));
                }

            //				foreach(Mediachase.SQLQueryCreator.FilterCondition filter in maker.Filters)
            //				{
            //					FilterInfo info = new FilterInfo(filter.OwnerField.Name,filter.OwnerField.DataType.ToString());
            //
            //					this.Filters.Add(info);
            //				}

                foreach(Mediachase.SQLQueryCreator.QField group in maker.Groups)
                {
                    this.Groups.Add(new FieldInfo(group.Name,group.DataType.ToString()));
                }
            }

            if(coll!=null)
            {
                foreach(SortInfo info in coll)
                {
                    this.Sorting.Add(info);
                }
            }
        }
コード例 #4
0
ファイル: IBNReportTemplate.cs プロジェクト: 0anion0/IBN
 public IBNReportTemplate(QMaker	maker)
     : this(maker,null)
 {
 }
コード例 #5
0
ファイル: Report.cs プロジェクト: 0anion0/IBN
        public static XmlDocument GetIncidentXMLReport(IBNReportTemplate repTemp, string _lang, string _timeoffset)
        {
            QIncident objI = new QIncident();

            QMaker qMaker = new QMaker(objI);
            qMaker.Language = _lang;
            qMaker.TimeOffset = _timeoffset;

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

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

            #region Filters
            bool PrjFilterExist = false;
            foreach (FilterInfo fti in repTemp.Filters)
            {
                if (fti.FieldName == "IncProjectId")
                    PrjFilterExist = true;
                QField qField = objI.Fields[fti.FieldName];
                QDictionary qDic = objI.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(objI.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(objI.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Equal));
                                        break;
                                    case "1":
                                        qMaker.Filters.Add(new SimpleFilterCondition(objI.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Great));
                                        break;
                                    case "2":
                                        qMaker.Filters.Add(new SimpleFilterCondition(objI.Fields[fti.FieldName], fti.Values[1].ToString(), SimpleFilterType.Less));
                                        break;
                                    case "3":
                                        qMaker.Filters.Add(new IntervalFilterCondition(objI.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(objI.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(objI.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(objI.Fields[fti.FieldName], "CONVERT(datetime,'" + DateTime.Parse(fti.Values[1]).ToString("yyyy-MM-dd") + "', 120)", SimpleFilterType.GreatOrEqual));
                                }
                                else
                                {
                                    qMaker.Filters.Add(new IntervalFilterCondition(objI.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(objI.Fields[fti.FieldName], GetApString(fti.Values[0]), SimpleFilterType.Like));
                            }
                            break;
                    }
                }
            }
            if (!PrjFilterExist &&
                    !(Security.IsUserInGroup(InternalSecureGroups.PowerProjectManager) || Security.IsUserInGroup(InternalSecureGroups.ExecutiveManager)))
            {
                ArrayList alPrj = new ArrayList();
                using (IDataReader reader = Project.GetListProjects())
                {
                    while (reader.Read())
                        alPrj.Add(((int)reader["ProjectId"]).ToString());
                }
                alPrj.Add("NULL");
                string[] _str = new string[alPrj.Count];
                int i = 0;
                foreach (string s in alPrj)
                    _str[i++] = s;
                qMaker.Filters.Add(new SimpleFilterCondition(objI.Fields["IncProjectId"], _str, SimpleFilterType.Equal));
            }
            #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;
        }
コード例 #6
0
ファイル: Report.cs プロジェクト: 0anion0/IBN
        public static XmlDocument GetDocumentXMLReport(IBNReportTemplate repTemp, string _lang, string _timeoffset)
        {
            QDocument objD = new QDocument();
            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
            if (!Security.IsUserInGroup(InternalSecureGroups.PowerProjectManager) &&
                !Security.IsUserInGroup(InternalSecureGroups.ExecutiveManager))
            {
                qMaker.PrevSqlQuery.Add(String.Format("DECLARE @DocumentIdTable TABLE(Id INT) " +
                    "INSERT INTO @DocumentIdTable " +
                    "SELECT DISTINCT TD.DocumentId As Id FROM DOCUMENTS AS TD " +
                    "WHERE TD.DocumentId IN (SELECT DocumentId FROM DOCUMENT_SECURITY_ALL WHERE PrincipalId = {0} AND (IsManager = 1 OR IsResource = 1)) " +
                    " OR (TD.ProjectId IN (SELECT ProjectId FROM PROJECT_SECURITY_ALL WHERE PrincipalId = {0} AND (IsTeamMember = 1 OR IsSponsor = 1 OR IsStakeHolder = 1 OR IsManager = 1 OR IsExecutiveManager = 1)))",
                    Security.CurrentUser.UserID));
                qMaker.Filters.Add(new SimpleFilterCondition(qMaker.OwnerObject.Fields["DocId"], "(SELECT Id FROM @DocumentIdTable)", SimpleFilterType.In));
            }

            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;
        }
コード例 #7
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;
        }
コード例 #8
0
ファイル: QMaker.cs プロジェクト: 0anion0/IBN
        public string Create()
        {
            StringBuilder	strBuilder = new StringBuilder();

            if(this.OwnerObject.GetExtensions()!=null&&_AddExObjects)
            {
                _KeyUniquePrefix	=	this.OwnerObject.OwnerTable;
            }

            ArrayList	arrayExObjectList = new ArrayList();

            // Step 1. Create Common SQL Query [4/29/2004]
            CreateSQLQueryList();

            if(this.OwnerObject.GetExtensions()!=null&&_AddExObjects)
            {
                foreach(QObject	exObject in this.OwnerObject.GetExtensions())
                {
                    QMaker	exMaker	=	new QMaker(exObject, this.OwnerObject.OwnerTable,exObject.OwnerTable);

                    // 2006-12-12: Fix Language Problem
                    exMaker.Language = this.Language;

                    foreach(QField	exField	in this.Fields)
                    {
                        exMaker.Fields.Add(exObject.Fields[exField.Name]);
                    }

                    foreach(QField	exGroup	in this.Groups)
                    {
                        exMaker.Groups.Add(exObject.Fields[exGroup.Name]);
                    }

                    foreach(FilterCondition	exFilter	in this.Filters)
                    {
                        if(exFilter is SimpleFilterCondition)
                        {
                            SimpleFilterCondition tmpFilter = (SimpleFilterCondition)exFilter;
                            SimpleFilterCondition newFilter	=	new SimpleFilterCondition(exObject.Fields[tmpFilter.OwnerField.Name],"", tmpFilter.FilterType);
                            newFilter.InternalValue = tmpFilter.InternalValue;

                            if(tmpFilter.OwnerField.DBName!=null)
                            {
                                int iIndexOfKey = newFilter.InternalValue.IndexOf("@"+tmpFilter.OwnerField.DBName);
                                if(iIndexOfKey!=-1)
                                {
                                    newFilter.InternalValue = newFilter.InternalValue.Replace("@"+tmpFilter.OwnerField.DBName,"@"+newFilter.OwnerField.DBName);
                                }
                            }

                            exMaker.Filters.Add(newFilter);
                        }
                        else if(exFilter is IntervalFilterCondition)
                        {
                            IntervalFilterCondition tmpFilter = (IntervalFilterCondition)exFilter;
                            IntervalFilterCondition newFilter	=	new IntervalFilterCondition(exObject.Fields[tmpFilter.OwnerField.Name],tmpFilter.ValueLess, tmpFilter.ValueGreat);

                            exMaker.Filters.Add(newFilter);
                        }
                        else if(exFilter is ExtendedFilterCondition)
                        {
                            ExtendedFilterCondition tmpFilter = (ExtendedFilterCondition)exFilter;
                            ExtendedFilterCondition newFilter	=	new ExtendedFilterCondition(tmpFilter.Query, tmpFilter.Value);

                            exMaker.Filters.Add(newFilter);
                        }
                    }

                    arrayExObjectList.Add(exMaker);

            //					ArrayList	addonQuery = exMaker.CreateSQLQueryList();
            //
            //					for(int iIndex=1;iIndex<addonQuery.Count;iIndex++)
            //					{
            //						QSqlSelectList.Add(addonQuery[iIndex]);
            //					}
                }
            }

            // Add prev SQL Commands [5/7/2004]
            foreach(string PrevCommand in this.PrevSqlQuery)
            {
                strBuilder.Append(PrevCommand);
                strBuilder.Append("\r\n");
            }

            // Create SQL Command
            bool bRunFirst = true;

            foreach(QSqlSelectMaker sqlMaker in QSqlSelectList)
            {
                if(bRunFirst)
                    bRunFirst = false;
                else
                    //strBuilder.Append("\r\nUNION ALL\r\n");
                    strBuilder.Append("\r\nUNION\r\n");
                strBuilder.Append( sqlMaker.Create(this.OwnerObject.OwnerTable,this.Groups));
            }

            foreach(QMaker	exMaker in arrayExObjectList)
            {
                ArrayList	addonQuery = exMaker.CreateSQLQueryList();

                for(int iIndex=1;iIndex<addonQuery.Count;iIndex++)
                {
                    if(bRunFirst)
                        bRunFirst = false;
                    else
                        //strBuilder.Append("\r\nUNION ALL\r\n");
                        strBuilder.Append("\r\nUNION\r\n");

                    strBuilder.Append( ((QSqlSelectMaker)addonQuery[iIndex]).Create(exMaker.OwnerObject.OwnerTable,this.Groups));
                }
            }

            // Add order By Command [4/20/2004]
            if(OrderByFields.Count>0)
            {
                strBuilder.Append("\r\nORDER BY");

                bRunFirst = true;
                foreach(string OrderAlias in OrderByFields)
                {
                    if(bRunFirst)
                    {
                        bRunFirst = false;
                        strBuilder.Append(" ");
                    }
                    else
                        strBuilder.Append(" , ");

                    strBuilder.Append(OrderAlias);
                }
            }

            // Final step [4/20/2004]
            strBuilder.Append("\r\nFOR XML EXPLICIT");

            #if DEBUG
            System.Diagnostics.Trace.WriteLine(strBuilder.ToString());
            #endif

            return strBuilder.ToString();
        }
コード例 #9
0
        public string Create()
        {
            StringBuilder strBuilder = new StringBuilder();

            if (this.OwnerObject.GetExtensions() != null && _AddExObjects)
            {
                _KeyUniquePrefix = this.OwnerObject.OwnerTable;
            }

            ArrayList arrayExObjectList = new ArrayList();

            // Step 1. Create Common SQL Query [4/29/2004]
            CreateSQLQueryList();

            if (this.OwnerObject.GetExtensions() != null && _AddExObjects)
            {
                foreach (QObject exObject in this.OwnerObject.GetExtensions())
                {
                    QMaker exMaker = new QMaker(exObject, this.OwnerObject.OwnerTable, exObject.OwnerTable);

                    // 2006-12-12: Fix Language Problem
                    exMaker.Language = this.Language;

                    foreach (QField exField in this.Fields)
                    {
                        exMaker.Fields.Add(exObject.Fields[exField.Name]);
                    }

                    foreach (QField exGroup in this.Groups)
                    {
                        exMaker.Groups.Add(exObject.Fields[exGroup.Name]);
                    }

                    foreach (FilterCondition exFilter        in this.Filters)
                    {
                        if (exFilter is SimpleFilterCondition)
                        {
                            SimpleFilterCondition tmpFilter = (SimpleFilterCondition)exFilter;
                            SimpleFilterCondition newFilter = new SimpleFilterCondition(exObject.Fields[tmpFilter.OwnerField.Name], "", tmpFilter.FilterType);
                            newFilter.InternalValue = tmpFilter.InternalValue;

                            if (tmpFilter.OwnerField.DBName != null)
                            {
                                int iIndexOfKey = newFilter.InternalValue.IndexOf("@" + tmpFilter.OwnerField.DBName);
                                if (iIndexOfKey != -1)
                                {
                                    newFilter.InternalValue = newFilter.InternalValue.Replace("@" + tmpFilter.OwnerField.DBName, "@" + newFilter.OwnerField.DBName);
                                }
                            }

                            exMaker.Filters.Add(newFilter);
                        }
                        else if (exFilter is IntervalFilterCondition)
                        {
                            IntervalFilterCondition tmpFilter = (IntervalFilterCondition)exFilter;
                            IntervalFilterCondition newFilter = new IntervalFilterCondition(exObject.Fields[tmpFilter.OwnerField.Name], tmpFilter.ValueLess, tmpFilter.ValueGreat);

                            exMaker.Filters.Add(newFilter);
                        }
                        else if (exFilter is ExtendedFilterCondition)
                        {
                            ExtendedFilterCondition tmpFilter = (ExtendedFilterCondition)exFilter;
                            ExtendedFilterCondition newFilter = new ExtendedFilterCondition(tmpFilter.Query, tmpFilter.Value);

                            exMaker.Filters.Add(newFilter);
                        }
                    }

                    arrayExObjectList.Add(exMaker);

//					ArrayList	addonQuery = exMaker.CreateSQLQueryList();
//
//					for(int iIndex=1;iIndex<addonQuery.Count;iIndex++)
//					{
//						QSqlSelectList.Add(addonQuery[iIndex]);
//					}
                }
            }

            // Add prev SQL Commands [5/7/2004]
            foreach (string PrevCommand in this.PrevSqlQuery)
            {
                strBuilder.Append(PrevCommand);
                strBuilder.Append("\r\n");
            }

            // Create SQL Command
            bool bRunFirst = true;

            foreach (QSqlSelectMaker sqlMaker in QSqlSelectList)
            {
                if (bRunFirst)
                {
                    bRunFirst = false;
                }
                else
                {
                    //strBuilder.Append("\r\nUNION ALL\r\n");
                    strBuilder.Append("\r\nUNION\r\n");
                }
                strBuilder.Append(sqlMaker.Create(this.OwnerObject.OwnerTable, this.Groups));
            }

            foreach (QMaker exMaker in arrayExObjectList)
            {
                ArrayList addonQuery = exMaker.CreateSQLQueryList();

                for (int iIndex = 1; iIndex < addonQuery.Count; iIndex++)
                {
                    if (bRunFirst)
                    {
                        bRunFirst = false;
                    }
                    else
                    {
                        //strBuilder.Append("\r\nUNION ALL\r\n");
                        strBuilder.Append("\r\nUNION\r\n");
                    }

                    strBuilder.Append(((QSqlSelectMaker)addonQuery[iIndex]).Create(exMaker.OwnerObject.OwnerTable, this.Groups));
                }
            }

            // Add order By Command [4/20/2004]
            if (OrderByFields.Count > 0)
            {
                strBuilder.Append("\r\nORDER BY");

                bRunFirst = true;
                foreach (string OrderAlias in OrderByFields)
                {
                    if (bRunFirst)
                    {
                        bRunFirst = false;
                        strBuilder.Append(" ");
                    }
                    else
                    {
                        strBuilder.Append(" , ");
                    }

                    strBuilder.Append(OrderAlias);
                }
            }

            // Final step [4/20/2004]
            strBuilder.Append("\r\nFOR XML EXPLICIT");

#if DEBUG
            System.Diagnostics.Trace.WriteLine(strBuilder.ToString());
#endif

            return(strBuilder.ToString());
        }