public override void InitializeExport(SmartSchool.API.PlugIn.Export.ExportWizard wizard) { var 匯出代碼 = new SmartSchool.API.PlugIn.VirtualRadioButton("匯出校系代碼", true); var 匯出校系名稱 = new SmartSchool.API.PlugIn.VirtualRadioButton("匯出校系名稱", false); wizard.Options.Add(匯出代碼); wizard.Options.Add(匯出校系名稱); int wishLimint = 5; List <分發設定> list = _AccessHelper.Select <分發設定>(); if (list.Count > 0) { wishLimint = list[0].志願上限; } for (int i = 1; i <= wishLimint; i++) { wizard.ExportableFields.Add("第" + i + "志願"); } wizard.PackageLimit = 200; wizard.ExportPackage += delegate(object sender, SmartSchool.API.PlugIn.Export.ExportPackageEventArgs e) { Dictionary <string, SmartSchool.API.PlugIn.RowData> dicRowDatas = new Dictionary <string, SmartSchool.API.PlugIn.RowData>(); foreach (var refStudentID in e.List) { SmartSchool.API.PlugIn.RowData rowData = new SmartSchool.API.PlugIn.RowData(); rowData.ID = refStudentID; dicRowDatas.Add(refStudentID, rowData); e.Items.Add(rowData); } FISCA.UDT.Condition.InCondition condition = new FISCA.UDT.Condition.InCondition(); condition.Field = "RefStudentID"; condition.Values.AddRange(e.List); var datas = _AccessHelper.Select <推甄學生資料>(condition); datas.取得志願組(); foreach (var item in datas) { int index = 1; foreach (var wish in item.志願組) { dicRowDatas[item.StudentRecord.ID].Add("第" + index + "志願", (wish.校系資料 == null ? "校系資料已遺失" : (匯出代碼.Checked ? wish.校系資料.代碼 : (wish.校系資料.校名 + " " + wish.校系資料.系名)))); index++; } } foreach (var item in dicRowDatas.Values) { for (int i = 1; i <= wishLimint; i++) { if (!item.ContainsKey("第" + i + "志願")) { item.Add("第" + i + "志願", ""); } } } }; }
public static void 取得志願組(this IEnumerable <推甄學生資料> items) { FISCA.UDT.Condition.InCondition RefStudentIDCondition = new FISCA.UDT.Condition.InCondition() { Field = "RefStudentID" }; Dictionary <推甄學生資料, List <志願> > dicNewList = new Dictionary <推甄學生資料, List <志願> >(); foreach (var item in items) { RefStudentIDCondition.Values.Add(item.StudentRecord.ID); if (!dicNewList.ContainsKey(item)) { dicNewList.Add(item, new List <志願>()); } } if (RefStudentIDCondition.Values.Count != 0) { foreach (var wish in new AccessHelper().Select <志願>(RefStudentIDCondition)) { foreach (var item in items) { if (item.StudentRecord.ID == wish.StudentRecord.ID) { dicNewList[item].Add(wish); break; } } } } foreach (var item in items) { dicNewList[item].Sort(delegate(志願 o1, 志願 o2) { return(o1.志願排序.CompareTo(o2.志願排序)); }); item.填入志願組(dicNewList[item].AsReadOnly()); } }
public override void InitializeImport(SmartSchool.API.PlugIn.Import.ImportWizard wizard) { List <推甄學生資料> importRecords = new List <推甄學生資料>(); List <string> validatedID = new List <string>(); //可以匯入這麼多欄位喔~ wizard.ImportableFields.AddRange("排名", "總分", "成績內容", "分發校系代碼", "分發學校", "分發科系", "確定分發結果", "組別", "梯次", "備註"); //開始驗證前先收集一些資訊於驗證過程中使用 wizard.ValidateStart += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateStartEventArgs e) { FISCA.UDT.Condition.InCondition condition = new FISCA.UDT.Condition.InCondition(); condition.Field = "RefStudentID"; condition.Values.AddRange(e.List); importRecords = new AccessHelper().Select <推甄學生資料>(condition); importRecords.取得志願組(); }; //每一列資料會觸發一次驗證 wizard.ValidateRow += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateRowEventArgs e) { if (validatedID.Contains(e.Data.ID)) { e.ErrorMessage = "同一學生不應出現兩筆資料。"; } else { #region 驗證各欄位資料 validatedID.Add(e.Data.ID); foreach (var field in e.SelectFields) { string value = e.Data[field]; switch (field) { case "排名": int i = 0; if (!int.TryParse(value, out i) || i <= 0) { e.ErrorFields.Add(field, "必需是大於0之整數。"); } break; case "總分": decimal d; if (e.Data[field] != "" && (!decimal.TryParse(value, out d) || d < 0m)) { e.ErrorFields.Add(field, "必需為空白或大於等於0之數字。"); } break; case "成績內容": break; case "分發校系代碼": if (value != "") { if (!校系資料庫.Items.ContainsKey(value)) { e.ErrorFields.Add(field, "查無此校系代碼。"); } else { bool match = false; foreach (var data in importRecords) { if (data.StudentRecord.ID == e.Data.ID) { foreach (var wish in data.志願組) { if (wish.校系資料.代碼 == value) { match = true; break; } } break; } } if (!match) { e.WarningFields.Add(field, "此分發結果不在該學生的志願中,可能導致統計數字錯誤。"); } } } break; case "分發學校": if (!e.SelectFields.Contains("分發校系代碼")) { e.ErrorFields.Add(field, "分發結果必須以校系代碼為主,無法單獨由分發學校判斷。"); } else { if (校系資料庫.Items.ContainsKey(e.Data["分發校系代碼"]) && 校系資料庫.Items[e.Data["分發校系代碼"]].校名 != value) { e.ErrorFields.Add(field, "校名與校系代碼不相同。"); } } break; case "分發科系": if (!e.SelectFields.Contains("分發校系代碼")) { e.ErrorFields.Add(field, "分發結果必須以校系代碼為主,無法單獨由分發科系判斷。"); } else { if (校系資料庫.Items.ContainsKey(e.Data["分發校系代碼"]) && 校系資料庫.Items[e.Data["分發校系代碼"]].系名 != value) { e.ErrorFields.Add(field, "系名與校系代碼不相同。"); } } break; case "確定分發結果": if (value != "" && value != "是" && value != "否" && value.ToLower() != "true" && value.ToLower() != "false") { e.ErrorFields.Add(field, "輸入值不允許,請輸入是或否,若保留空白則視為否。"); } break; case "梯次": int j = 0; if (value != "" && !int.TryParse(value, out j) || j <= 0) { e.ErrorFields.Add(field, "必需是大於0之整數或空白。"); } break; case "備註": break; default: break; } } #endregion } }; //匯入會一次切一個package做批次,每次只處理package的資料匯入即可 wizard.ImportPackage += delegate(object sender, SmartSchool.API.PlugIn.Import.ImportPackageEventArgs e) { List <推甄學生資料> importPackage = new List <推甄學生資料>(); foreach (var rowData in e.Items) { 推甄學生資料 targetData = null; foreach (var rec in importRecords) { if (rec.StudentRecord.ID == rowData.ID) { targetData = rec; break; } } if (targetData == null) { targetData = new 推甄學生資料(); targetData.StudentRecord = K12.Data.Student.SelectByID(rowData.ID); } importPackage.Add(targetData); #region 填入資料 foreach (var field in e.ImportFields) { string value = rowData[field]; switch (field) { case "排名": targetData.排名 = int.Parse(value); break; case "總分": targetData.總分 = (value == "" ? null : new decimal?(decimal.Parse(value))); break; case "成績內容": targetData.成績內容 = value; break; case "分發校系代碼": targetData.分發結果 = (value == "" ? null : 校系資料庫.Items[value]); break; case "分發學校": break; case "分發科系": break; case "確定分發結果": targetData.確定分發結果 = ((value == "" || value == "否" || value.ToLower() == "false") ? false : true); break; case "組別": targetData.組別 = value; break; case "梯次": targetData.梯次 = (value == "" ? null : new int?(int.Parse(value))); break; case "備註": targetData.備註 = value; break; default: break; } } #endregion } importPackage.SaveAll(); }; }
public override void InitializeExport(SmartSchool.API.PlugIn.Export.ExportWizard wizard) { wizard.ExportableFields.AddRange("身分證號", "排名", "總分", "成績內容", "分發校系代碼", "分發學校", "分發科系", "確定分發結果", "組別", "梯次", "備註"); wizard.PackageLimit = 200; wizard.ExportPackage += delegate(object sender, SmartSchool.API.PlugIn.Export.ExportPackageEventArgs e) { FISCA.UDT.Condition.InCondition condition = new FISCA.UDT.Condition.InCondition(); condition.Field = "RefStudentID"; condition.Values.AddRange(e.List); var datas = _AccessHelper.Select <推甄學生資料>(condition); foreach (var refStudentID in e.List) { SmartSchool.API.PlugIn.RowData rowData = new SmartSchool.API.PlugIn.RowData(); rowData.ID = refStudentID; #region 寫入預設值 foreach (var field in e.ExportFields) { switch (field) { case "排名": rowData.Add(field, ""); break; case "總分": rowData.Add(field, ""); break; case "身分證號": rowData.Add(field, ""); break; case "成績內容": rowData.Add(field, ""); break; case "分發校系代碼": rowData.Add(field, ""); break; case "分發學校": rowData.Add(field, ""); break; case "分發科系": rowData.Add(field, ""); break; case "確定分發結果": rowData.Add(field, ""); break; case "組別": rowData.Add(field, ""); break; case "梯次": rowData.Add(field, ""); break; case "備註": rowData.Add(field, ""); break; } } #endregion foreach (var item in datas) { if (item.StudentRecord.ID == refStudentID) { #region 填入真值 foreach (var field in e.ExportFields) { switch (field) { case "排名": rowData[field] = "" + item.排名; break; case "總分": rowData[field] = "" + item.總分; break; case "身分證號": rowData[field] = item.StudentRecord.IDNumber; break; case "成績內容": rowData[field] = item.成績內容; break; case "分發校系代碼": rowData[field] = (item.分發結果 == null ? "" : item.分發結果.代碼); break; case "分發學校": rowData[field] = (item.分發結果 == null ? "" : item.分發結果.校名); break; case "分發科系": rowData[field] = (item.分發結果 == null ? "" : item.分發結果.系名); break; case "確定分發結果": rowData[field] = (item.確定分發結果 ? "是" : "否"); break; case "組別": rowData[field] = "" + item.組別; break; case "梯次": rowData[field] = "" + item.梯次; break; case "備註": rowData[field] = item.備註; break; } } #endregion break; } } e.Items.Add(rowData); } }; }