void _bgWorkerLoad_DoWork(object sender, DoWorkEventArgs e) { // 取得就學生畢業異動資料 _StudHasGraduateRecDict.Clear(); List <SHUpdateRecordRecord> recList = SHUpdateRecord.SelectByStudentIDs(_StudentIDList); foreach (SHUpdateRecordRecord rec in recList) { // 不是畢業異動跳過 if (rec.UpdateCode != "501") { continue; } if (!_StudHasGraduateRecDict.ContainsKey(rec.StudentID)) { _StudHasGraduateRecDict.Add(rec.StudentID, rec); } } // 取得最後一筆異動 _StudLastupdateRecDict.Clear(); foreach (string sid in _StudentIDList) { List <SHUpdateRecordRecord> recL = (from data in recList where data.StudentID == sid && data.ADDate.Trim() != "" orderby DateTime.Parse(data.ADDate) descending, int.Parse(data.ID) descending select data).ToList(); if (recL.Count > 0) { SHUpdateRecordRecord r1 = recL[0]; if (!_StudLastupdateRecDict.ContainsKey(r1.StudentID)) { _StudLastupdateRecDict.Add(r1.StudentID, r1); } } } // 學生資料 _StudentDict.Clear(); foreach (SHStudentRecord rec in SHStudent.SelectByIDs(_StudentIDList)) { _StudentDict.Add(rec.ID, rec); } // 畢業證書 _LeaveInfoRecordDict.Clear(); foreach (SHLeaveInfoRecord rec in SHLeaveInfo.SelectByStudentIDs(_StudentIDList)) { if (!_LeaveInfoRecordDict.ContainsKey(rec.RefStudentID)) { _LeaveInfoRecordDict.Add(rec.RefStudentID, rec); } } // 班級 _ClassRecDict.Clear(); foreach (SHClassRecord rec in SHClass.SelectAll()) { if (!_ClassRecDict.ContainsKey(rec.ID)) { _ClassRecDict.Add(rec.ID, rec); } } // 科別 _DeptRecDict.Clear(); foreach (SHDepartmentRecord rec in SHDepartment.SelectAll()) { if (!_DeptRecDict.ContainsKey(rec.ID)) { _DeptRecDict.Add(rec.ID, rec); } } }
void _bgw_DoWork(object sender, DoWorkEventArgs e) { Document document = new Document(); Byte[] template = (custConfigs[current].Template != null) //單頁範本 ? custConfigs[current].Template.ToBinary() : new Campus.Report.ReportTemplate(Properties.Resources.證明書範本, Campus.Report.TemplateType.Word).ToBinary(); List <string> ids = K12.Presentation.NLDPanels.Student.SelectedSource; List <SHStudentRecord> srl = SHStudent.SelectByIDs(ids); //離校資訊 Dictionary <string, SHLeaveInfoRecord> dshlir = SHLeaveInfo.SelectByStudentIDs(ids).ToDictionary(x => x.RefStudentID, x => x); //畢業異動 Dictionary <string, SHUpdateRecordRecord> dshurr = new Dictionary <string, SHUpdateRecordRecord>(); foreach (SHUpdateRecordRecord shurr in SHUpdateRecord.SelectByStudentIDs(ids)) { if (shurr.UpdateCode == "501") { if (dshurr.ContainsKey(shurr.StudentID)) { if (dshurr[shurr.StudentID].UpdateDate.CompareTo(shurr.UpdateDate) == 1) { dshurr[shurr.StudentID] = shurr; } } else { dshurr.Add(shurr.StudentID, shurr); } } } //入學照片 Dictionary <string, string> dphoto_p = K12.Data.Photo.SelectFreshmanPhoto(K12.Presentation.NLDPanels.Student.SelectedSource); Dictionary <string, string> dphoto_g = K12.Data.Photo.SelectGraduatePhoto(K12.Presentation.NLDPanels.Student.SelectedSource); //科別中英文對照表 Dictionary <string, string> dic_dept_ch_en = new Dictionary <string, string>(); XmlElement Data = SmartSchool.Customization.Data.SystemInformation.Configuration["科別中英文對照表"]; foreach (XmlElement var in Data) { if (!dic_dept_ch_en.ContainsKey(var.GetAttribute("Chinese"))) { dic_dept_ch_en.Add(var.GetAttribute("Chinese"), var.GetAttribute("English")); } } Dictionary <string, object> mailmerge = new Dictionary <string, object>(); string 校內字號 = textBoxX1.Text, 校內字號英文 = textBoxX2.Text, 校長姓名 = "", 校長姓名英文 = ""; if (K12.Data.School.Configuration["學校資訊"] != null && K12.Data.School.Configuration["學校資訊"].PreviousData.SelectSingleNode("ChancellorChineseName") != null) { 校長姓名 = K12.Data.School.Configuration["學校資訊"].PreviousData.SelectSingleNode("ChancellorChineseName").InnerText; } if (K12.Data.School.Configuration["學校資訊"] != null && K12.Data.School.Configuration["學校資訊"].PreviousData.SelectSingleNode("ChancellorChineseName") != null) { 校長姓名英文 = K12.Data.School.Configuration["學校資訊"].PreviousData.SelectSingleNode("ChancellorEnglishName").InnerText; } Document each; foreach (SHStudentRecord sr in srl) { mailmerge.Clear(); mailmerge.Add("學校全銜", School.ChineseName); mailmerge.Add("學校英文全銜", School.EnglishName); mailmerge.Add("目前學期", School.DefaultSemester); mailmerge.Add("目前學年度", School.DefaultSchoolYear); mailmerge.Add("校長姓名", 校長姓名); mailmerge.Add("校長姓名英文", 校長姓名英文); mailmerge.Add("民國年", DateTime.Today.Year - 1911); mailmerge.Add("英文年", DateTime.Today.Year); mailmerge.Add("月", DateTime.Today.Month); mailmerge.Add("英文月", DateTime.Today.ToString("MMMM", new System.Globalization.CultureInfo("en-US"))); mailmerge.Add("英文月3", DateTime.Today.ToString("MMM", new System.Globalization.CultureInfo("en-US"))); mailmerge.Add("日上標", daySuffix(DateTime.Today.Day.ToString())); mailmerge.Add("日", DateTime.Today.Day); mailmerge.Add("校內字號", 校內字號); mailmerge.Add("校內字號英文", 校內字號英文); #region 學生資料 mailmerge.Add("學生姓名", sr.Name); mailmerge.Add("學生英文姓名", sr.EnglishName); mailmerge.Add("學生身分證號", sr.IDNumber); SHClassRecord tmpcr; if ((tmpcr = sr.Class) != null) { mailmerge.Add("學生目前班級", tmpcr.Name); mailmerge.Add("學生目前年級", tmpcr.GradeYear); if (tmpcr.Department != null) { mailmerge.Add("學生目前科別", tmpcr.Department.Name); } } mailmerge.Add("學生目前座號", sr.StudentNumber); if (sr.Birthday.HasValue) { mailmerge.Add("學生生日民國年", sr.Birthday.Value.Year - 1911); mailmerge.Add("學生生日英文年", sr.Birthday.Value.Year); mailmerge.Add("學生生日月", sr.Birthday.Value.Month); mailmerge.Add("學生生日英文月", sr.Birthday.Value.ToString("MMMM", new System.Globalization.CultureInfo("en-US"))); mailmerge.Add("學生生日英文月3", sr.Birthday.Value.ToString("MMM", new System.Globalization.CultureInfo("en-US"))); mailmerge.Add("學生生日上標", daySuffix(sr.Birthday.Value.Day.ToString())); mailmerge.Add("學生生日日", sr.Birthday.Value.Day); } if (dphoto_p.ContainsKey(sr.ID)) { mailmerge.Add("入學照片1吋", dphoto_p[sr.ID]); mailmerge.Add("入學照片2吋", dphoto_p[sr.ID]); } if (dphoto_g.ContainsKey(sr.ID)) { mailmerge.Add("畢業照片1吋", dphoto_g[sr.ID]); mailmerge.Add("畢業照片2吋", dphoto_g[sr.ID]); } //畢業資訊 if (dshlir.ContainsKey(sr.ID)) { mailmerge["畢業資訊西元年"] = dshlir[sr.ID].SchoolYear + 1911; mailmerge["畢業資訊學年度"] = dshlir[sr.ID].SchoolYear; mailmerge["畢業資訊證書字號"] = dshlir[sr.ID].DiplomaNumber; mailmerge["畢業資訊證書字號數字"] = getCertificateNumberNumber(dshlir[sr.ID].DiplomaNumber); mailmerge["畢業資訊科別中文"] = dshlir[sr.ID].DepartmentName; string tmp_dept = dshlir[sr.ID].DepartmentName; mailmerge["畢業資訊科別英文"] = (tmp_dept != null && dic_dept_ch_en.ContainsKey(tmp_dept)) ? dic_dept_ch_en[tmp_dept] : ""; } //畢業異動 if (dshurr.ContainsKey(sr.ID)) { //int ExpectGraduateSchoolYear; //if (int.TryParse(dshurr[sr.ID].ExpectGraduateSchoolYear, out ExpectGraduateSchoolYear)) // mailmerge["畢業異動西元年"] = ExpectGraduateSchoolYear + 1911; if (!string.IsNullOrEmpty(dshurr[sr.ID].UpdateDate)) { int ADYear; int.TryParse(dshurr[sr.ID].UpdateDate.Split('/')[0], out ADYear); mailmerge["畢業異動西元年"] = ADYear; int republicYaer; if (ADYear > 1911) { republicYaer = ADYear - 1911; mailmerge["畢業異動民國年"] = republicYaer; } int UpdateDateMonth; int.TryParse(dshurr[sr.ID].UpdateDate.Split('/')[1], out UpdateDateMonth); int UpdateDateDate; int.TryParse(dshurr[sr.ID].UpdateDate.Split('/')[2], out UpdateDateDate); mailmerge["畢業異動月"] = UpdateDateMonth; mailmerge["畢業異動日"] = UpdateDateDate; } mailmerge["畢業異動學年度"] = dshurr[sr.ID].ExpectGraduateSchoolYear; mailmerge["畢業異動證書字號"] = dshurr[sr.ID].GraduateCertificateNumber; mailmerge["畢業異動證書字號數字"] = getCertificateNumberNumber(dshurr[sr.ID].GraduateCertificateNumber); mailmerge["畢業異動科別中文"] = dshurr[sr.ID].Department; string tmp_dept = dshurr[sr.ID].Department; mailmerge["畢業異動科別英文"] = (tmp_dept != null && dic_dept_ch_en.ContainsKey(tmp_dept)) ? dic_dept_ch_en[tmp_dept] : ""; } #endregion each = new Document(new MemoryStream(template)); //each.MailMerge.CleanupOptions = Aspose.Words.Reporting.MailMergeCleanupOptions.RemoveUnusedFields; each.MailMerge.FieldMergingCallback = new merge(); each.MailMerge.Execute(mailmerge.Keys.ToArray(), mailmerge.Values.ToArray()); each.MailMerge.DeleteFields(); document.Sections.Add(document.ImportNode(each.FirstSection, true)); } document.Sections.RemoveAt(0); e.Result = document; }