コード例 #1
0
        public override bool Fill()
        {
            SubProgress progress = new SubProgress(MainProgress, WeightTable.GetJobWeight("GetYearSubject"));

            try
            {
                Utility.StartTime("GetYearSubject");
                progress.ReportMessage("取得學年科目成績資料…");

                List <List <string> > packages = Utility.SplitGetPackage(Students, PackageSize);

                int offset = 1;
                foreach (List <string> eachPackage in packages)
                {
                    if (MainProgress.Cancellation)
                    {
                        return(false);                           //這個部份要看的必須是 MainProgress。
                    }
                    DSXmlHelper response = QueryScore.GetSchoolYearSubjectScore(true, Parameters.SchoolYear, eachPackage.ToArray());

                    foreach (XmlElement eachStudent in response.GetElements("SchoolYearSubjectScore"))
                    {
                        DSXmlHelper hlpScore  = new DSXmlHelper(eachStudent);
                        string      studentId = hlpScore.GetText("RefStudentId");
                        string      scoreId   = hlpScore.GetText("@ID");

                        if (Students.ContainsKey(studentId))
                        {
                            Student student = Students[studentId];
                            student.YearSubjects.ScoreRecordIdentity = scoreId;

                            string scoresPath = "ScoreInfo/SchoolYearSubjectScore/Subject";
                            foreach (XmlElement eachScore in eachStudent.SelectNodes(scoresPath))
                            {
                                YearSubjectScore objScore = new YearSubjectScore(eachScore);
                                if (!student.YearSubjects.AddSubject(objScore))
                                {
                                    LogDuplicateSubject(progress, student, objScore);
                                }
                            }
                        }
                    }

                    progress.ReportProgress((int)(((float)offset / packages.Count) * 100));
                    offset++;
                }

                progress.ReportProgress(100);
                Utility.EndTime("GetYearSubject");
                return(true);
            }
            catch (Exception ex)
            {
                progress.ReportException(ex);
                return(false);
            }
        }
コード例 #2
0
        public override bool Fill()
        {
            SubProgress progress = new SubProgress(MainProgress, WeightTable.GetJobWeight("GetSemsMoral"));

            try
            {
                Utility.StartTime("GetSemsMoral");
                progress.ReportMessage("取得學期德行成績資料…");

                List <List <string> > packages = Utility.SplitGetPackage(Students, PackageSize);

                int offset = 1;
                foreach (List <string> eachPackage in packages)
                {
                    if (MainProgress.Cancellation)
                    {
                        return(false);                           //這個部份要看的必須是 MainProgress。
                    }
                    DSXmlHelper response = QueryScore.GetSemesterEntryScoreBySemester(true,
                                                                                      Parameters.SchoolYear,
                                                                                      Parameters.Semester,
                                                                                      QueryScore.EntryGroup.行為,
                                                                                      eachPackage.ToArray());

                    foreach (XmlElement eachStudent in response.GetElements("SemesterEntryScore"))
                    {
                        DSXmlHelper hlpScore  = new DSXmlHelper(eachStudent);
                        string      studentId = hlpScore.GetText("RefStudentId");
                        string      scoreId   = hlpScore.GetText("@ID");

                        if (Students.ContainsKey(studentId))
                        {
                            Student student = Students[studentId];
                            student.SemsMoral = new SemesterEntry("德行", eachStudent);
                        }
                    }

                    progress.ReportProgress((int)(((float)offset / packages.Count) * 100));
                    offset++;
                }

                progress.ReportProgress(100);
                Utility.EndTime("GetSemsMoral");
                return(true);
            }
            catch (Exception ex)
            {
                progress.ReportException(ex);
                return(false);
            }
        }
コード例 #3
0
        public override bool Fill()
        {
            SubProgress progress = new SubProgress(MainProgress, WeightTable.GetJobWeight("GetStudentData"));

            try
            {
                Utility.StartTime("GetStudentData");
                progress.ReportMessage("取得學生資料…");

                int offset = 1;
                foreach (string eachYear in Parameters.TargetGradeYears)
                {
                    if (MainProgress.Cancellation) //這個部份必須要看的是 MainProgress。
                    {
                        return(false);
                    }

                    DSXmlHelper response = QueryStudent.GetAbstractList(eachYear);

                    foreach (XmlElement eachStudent in response.GetElements("Student"))
                    {
                        Students.AddStudent(new RankStudent(eachStudent));
                    }

                    progress.ReportProgress((int)(((float)offset / Parameters.TargetGradeYears.Count) * 100));

                    offset++;
                }

                progress.ReportProgress(100);
                Utility.EndTime("GetStudentData");
                return(true);
            }
            catch (Exception ex)
            {
                progress.ReportException(ex);
                return(false);
            }
        }
コード例 #4
0
        public override bool Update()
        {
            SubProgress progress = new SubProgress(MainProgress, WeightTable.GetJobWeight("SetYearSubject"));

            try
            {
                Utility.StartTime("SetYearSubject");
                progress.ReportMessage("更新學年科目成績排名資料…");

                List <List <Student> > packages = Utility.SplitUpdatePackage(Students, PackageSize);

                int offset = 1;
                foreach (List <Student> eachPackage in packages)
                {
                    if (MainProgress.Cancellation)
                    {
                        return(false);                           //這個部份要看的必須是 MainProgress。
                    }
                    DSXmlCreator request        = new DSXmlCreator(false);
                    bool         updateRequired = false;

                    request.CreateStartElement("Request");
                    foreach (Student eachStudent in eachPackage)
                    {
                        //代表沒有排名。
                        if (eachStudent.YearSubjects.Count <= 0)
                        {
                            continue;
                        }

                        updateRequired = true;
                        request.CreateStartElement("SchoolYearSubjectRating");
                        //學期成績記錄的編號。
                        request.CreateElement("ScoreId", eachStudent.YearSubjects.ScoreRecordIdentity);

                        RatingScope scopeClass = new RatingScope("ClassRating");
                        RatingScope scopeDept  = new RatingScope("DeptRating");
                        RatingScope scopeYear  = new RatingScope("YearRating");

                        foreach (YearSubjectScore eachScore in eachStudent.YearSubjects.Values)
                        {
                            foreach (ResultPlace eachPlace in eachScore.RatingResults.Values)
                            {
                                if (eachPlace.Scope.ScopeType == ScopeType.Class)
                                {
                                    scopeClass.CreateRatingItem(eachScore, eachPlace);
                                }
                                else if (eachPlace.Scope.ScopeType == ScopeType.Dept)
                                {
                                    scopeDept.CreateRatingItem(eachScore, eachPlace);
                                }
                                else if (eachPlace.Scope.ScopeType == ScopeType.GradeYear)
                                {
                                    scopeYear.CreateRatingItem(eachScore, eachPlace);
                                }
                            }
                        }

                        scopeClass.FinalizeCreate();
                        scopeDept.FinalizeCreate();
                        scopeYear.FinalizeCreate();

                        request.CreateSubtree(scopeClass.GetResult());
                        request.CreateSubtree(scopeDept.GetResult());
                        request.CreateSubtree(scopeYear.GetResult());

                        request.CreateEndElement();
                    }
                    request.CreateEndElement();

                    if (updateRequired)
                    {
                        EditRating.UpdateSchoolYearSubjectRating(request.GetResultAsDSXmlHelper());
                    }

                    progress.ReportProgress((int)(((float)offset / packages.Count) * 100));
                    offset++;
                }

                progress.ReportProgress(100);
                Utility.EndTime("SetYearSubject");
                return(true);
            }
            catch (Exception ex)
            {
                progress.ReportException(ex);
                return(false);
            }
        }