private dynamic GetAddressData() { XElement temp = XmlData.Element("StudentComplete"); if (temp != null) { temp = temp.Element("PermanentAddress"); } if (temp != null) { temp = temp.Element("AddressList"); } if (temp != null) { temp = temp.Element("Address"); } if (temp == null) { return(new DynamicXmlObject("Address")); } else { return((DynamicXmlObject)temp); } }
/// <summary> /// 載入表單 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StudentBrief_Load(object sender, EventArgs e) { try { Record = Arguments[Consts.TransferInRecord] as TransferInRecord; XmlData = Arguments[Consts.XmlData] as XElement; dynamic briefSection = (DynamicXmlObject)XmlData.Element("Student"); //取得地址資料 dynamic permanentAddress = GetAddressData(); //<PermanentAddress> // <AddressList> // <Address> // <ZipCode>303</ZipCode> // <County>新竹縣</County> // <Town>湖口鄉</Town> // <District /> // <Area /> // <DetailAddress>嶺尾8號</DetailAddress> // </Address> // </AddressList> //</PermanentAddress> string urAction = briefSection["@UpdateRecordAction"]; if (!string.IsNullOrWhiteSpace(urAction)) { Arguments[Consts.UpdateRecordAction] = Enum.Parse(typeof(ContinueDirection), urAction); } SelectStudentAddressRecord(briefSection); if (SRecord != null) { if (!string.IsNullOrWhiteSpace(SRecord.RefClassID)) { CRecord = SRecord.Class; } FillStudentNumberLast(SRecord.StudentNumber); } else { FillStudentNumberLast(string.Empty); } if (SRecord == null) { SingleMode(); } else { FromOriginData(); } NextButtonEnabled = false; ClassRunning.IsRunning = true; ClassRunning.Visible = true; Task task = Task.Factory.StartNew(() => { LoadClassRowSource(); TownList = K12.Data.Town.SelectAll(); CountyList = K12.Data.Town.SelectCountyList(); }, new CancellationToken(), TaskCreationOptions.None, TaskScheduler.Default); task.ContinueWith(x => { if (x.IsFaulted) { RTOut.WriteError(x.Exception); MessageBox.Show(x.Exception.Message); NextButtonEnabled = false; } SuspenSelectedValueChanged = true; cmbTown.DataSource = TownList.Select(y => y.Area).ToList(); cmbCounty.DataSource = CountyList; FromTransferData(briefSection, permanentAddress); //cboClass.DataSource = ClassRowSource; //cboClass.ValueMember = "ID"; //cboClass.DisplayMember = "Name"; SuspenSelectedValueChanged = false; cboGradeYear.Text = ""; List <string> grList = Utility.GetGradeYearList(); cboGradeYear.Items.AddRange(grList.ToArray()); if (SRecord != null) { cboSeatNo.Text = SRecord.SeatNo + ""; cboStudentNumber.Text = SRecord.StudentNumber; //if (CRecord != null) // cboClass.SelectedIndex = cboClass.FindStringExact(CRecord.Name); } // 如果學生是同校轉出又轉入,回到原班 if (CRecord != null) { // 2018/8/29 穎驊因應 高雄專案 [08-02][02]轉入學生編班 修正規則, // 如果學生本為同校生,則會有有選項,讓使用者選擇是否要回原班級,或是依照局端規則,優先提供轉入班級 List <KH_HighConcernCalc.ClassStudent> grClassList = Utility.GetClassNameFirst_List("" + CRecord.GradeYear); string msgString = ""; msgString = @"本轉入生在本學校發現其原本班級:" + CRecord.Name + "(編班人數:" + grClassList.Find(c => c.ClassID == CRecord.ID).ClassStudentCount + ")" + "請問是否轉入原班級?" + "\r\n" + "若選擇為否,則會依局端系統規則優先轉入班級:" + grClassList[0].ClassName + "(編班人數:" + grClassList[0].ClassStudentCount + ")"; if (FISCA.Presentation.Controls.MsgBox.Show(msgString, "提醒!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { txtClass.Text = CRecord.Name; } else { txtClass.Text = grClassList[0].ClassName; } } txtClass.ReadOnly = true; ClassRunning.IsRunning = false; ClassRunning.Visible = false; NextButtonEnabled = true; }, TaskScheduler.FromCurrentSynchronizationContext()); } catch (Exception ex) { MessageBox.Show(ex.Message); RTOut.WriteError(ex); WizardResult = ContinueDirection.Cancel; Close(); } }
protected override ContinueDirection?OnNextButtonClick() { try { string stuId = "0"; if (SRecord != null) { stuId = SRecord.ID; } errors.SetError(txtIDNumber, ""); if (IsIDNumberExists(stuId, txtIDNumber.Text)) { errors.SetError(txtIDNumber, "身分證號重覆!"); return(null); } errors.SetError(cboStudentNumber, ""); if (IsStudentNumberExists(stuId, cboStudentNumber.Text)) { errors.SetError(cboStudentNumber, "學號重覆!"); return(null); } errors.SetError(txtClass, ""); if (string.IsNullOrWhiteSpace(txtClass.Text)) { errors.SetError(txtClass, "班級必填!"); return(null); } //將資料寫回 XmlData。 XElement student = XmlData.Element("Student"); student.Element("Name").Value = txtName.Text; student.Element("IDNumber").Value = txtIDNumber.Text; student.Element("Birthdate").Value = dtBirthday.Text; student.Element("Gender").Value = cboGender.Text; XElement paddress = XmlData .Element("StudentComplete") .Element("PermanentAddress") .Element("AddressList"); if (paddress != null) { paddress = paddress.Element("Address"); if (paddress.Element("ZipCode") == null) { paddress.Add(new XElement("ZipCode", txtZipCode.Text)); } else { paddress.Element("ZipCode").Value = txtZipCode.Text; } if (paddress.Element("County") == null) { paddress.Add(new XElement("County", cmbCounty.Text)); } else { paddress.Element("County").Value = cmbCounty.Text; } if (paddress.Element("Town") == null) { paddress.Add(new XElement("Town", cmbTown.Text)); } else { paddress.Element("Town").Value = cmbTown.Text; } if (paddress.Element("District") == null) { paddress.Add(new XElement("District", txtDistrict.Text)); } else { paddress.Element("District").Value = txtDistrict.Text; } if (paddress.Element("Area") == null) { paddress.Add(new XElement("Area", txtArea.Text)); } else { paddress.Element("Area").Value = txtArea.Text; } if (paddress.Element("DetailAddress") == null) { paddress.Add(new XElement("DetailAddress", txtDetail.Text)); } else { paddress.Element("DetailAddress").Value = txtDetail.Text; } } else { paddress = new XElement("Address"); paddress.Add(new XElement("ZipCode", txtZipCode.Text)); paddress.Add(new XElement("County", cmbCounty.Text)); paddress.Add(new XElement("Town", cmbTown.Text)); paddress.Add(new XElement("District", txtDistrict.Text)); paddress.Add(new XElement("Area", txtArea.Text)); paddress.Add(new XElement("DetailAddress", txtDetail.Text)); XmlData .Element("StudentComplete") .Element("PermanentAddress").Add(new XElement("AddressList", paddress)); } //<StudentComplete Processor="StudentComplete"> // <PermanentAddress> // <AddressList> // <Address> // <ZipCode>310</ZipCode> // <County>新竹縣</County> // <Town>竹東鎮</Town> // <District /> // <Area /> // <DetailAddress>北岸19號</DetailAddress> // </Address> // </AddressList> // </PermanentAddress> // </StudentComplete> if (SRecord != null) { UpdateData(SRecord); K12.Data.Student.Update(SRecord); ARecord = K12.Data.Address.SelectByStudentID(SRecord.ID); #region 更新學生地址 ARecord.Permanent.ZipCode = txtZipCode.Text; ARecord.Permanent.County = cmbCounty.Text; ARecord.Permanent.Town = cmbTown.Text; ARecord.Permanent.District = txtDistrict.Text; ARecord.Permanent.Area = txtArea.Text; ARecord.Permanent.Detail = txtDetail.Text; K12.Data.Address.Update(ARecord); ARecord = K12.Data.Address.SelectByStudentID(ARecord.RefStudentID); #endregion student.SetAttributeValue("ID", SRecord.ID); //將 Xml 上標示新增的學生編號。 Arguments[Consts.StudentID] = SRecord.ID; } else { SRecord = new StudentRecord(); UpdateData(SRecord); string newid = K12.Data.Student.Insert(SRecord); ////新竹市的國中,需要多呼叫數位學生證資料同步的 Service。 ////新增的狀態下才呼叫,以免重覆呼叫。 //if (Program.CurrentMode == Program.Hsinchu) // CallTransferInWS(); #region 更新學生地址 ARecord = K12.Data.Address.SelectByStudentID(newid); ARecord.RefStudentID = newid; ARecord.Permanent.ZipCode = txtZipCode.Text; ARecord.Permanent.County = cmbCounty.Text; ARecord.Permanent.Town = cmbTown.Text; ARecord.Permanent.District = txtDistrict.Text; ARecord.Permanent.Area = txtArea.Text; ARecord.Permanent.Detail = txtDetail.Text; K12.Data.Address.Update(ARecord); ARecord = K12.Data.Address.SelectByStudentID(ARecord.RefStudentID); #endregion FISCA.Features.Invoke("StudentSyncAllBackground"); student.SetAttributeValue("ID", newid); //將 Xml 上標示新增的學生編號。 Arguments[Consts.StudentID] = newid; } //將最新狀況寫回資料庫中。 Record.ModifiedContent = XmlData.ToString(); Record.RefStudentID = Arguments[Consts.StudentID] + ""; Record.Save(); // 新增至班級學生變更 UDT_ClassSpecial StudSpec = UDTTransfer.AddClassSpecStudent(SRecord.ID, "", SRecord.RefClassID, "", txtClass.Text, txtClass.Text, "", ""); // 傳送至局端 string errMsg = Utility.SendData("自動轉入", SRecord.IDNumber, SRecord.StudentNumber, SRecord.Name, cboGender.Text, txtOClass.Text, cboSeatNo.Text, txtClass.Text, "", "", SRecord.ID, SRecord.RefClassID, StudSpec.ClassComment); if (errMsg != "") { FISCA.Presentation.Controls.MsgBox.Show(errMsg); } //設定所有 Processor 的學生編號。 foreach (TransferProcessor tp in TransferProcessor.Processors) { tp.SetStudentId(Arguments[Consts.StudentID] + ""); } //註冊一個事件引發模組 EventHandler eh = FISCA.InteractionService.PublishEvent("KH_StudentTransferStudentBriefItem"); eh(this, EventArgs.Empty); return(ContinueDirection.Next); } catch (Exception ex) { RTOut.WriteError(ex); MessageBox.Show(ex.Message); return(null); } }