public UpdateUniqueRowValidator(WizardContext context, SheetHelper sheet) { //在 Insert 模式不進行此類型驗證。 _skip_validate = (context.CurrentMode != ImportMode.Update); if (_skip_validate) { return; } _sheet = sheet; _primary_condition = context.IdentifyField; _check_conditions = new List <ImportCondition>(); List <ImportCondition> conditions = new List <ImportCondition>(); foreach (ImportCondition each in context.UpdateConditions) { if (each.ContainsAllField(context.SelectedFields.ToArray())) { conditions.Add(each); } } _check_conditions = conditions; if (!conditions.Contains(context.IdentifyField)) { conditions.Add(context.IdentifyField); //連同 Primary Condition 一起加入。 } XmlElement recordData = context.DataSource.GetUniqueFieldData(); _key_sets = new ConditionKeySetCollection(conditions, recordData, "Record"); }
private bool GetConditionResult(Asset asset, ImportCondition condition) { var metaproperty = asset.MetaProperties.FirstOrDefault(x => x.Name.Equals(condition.PropertyName)); // metaproperty is not included in asset, when the value is null if (metaproperty == null) { // check if there are conditions or if the only condition value is null if (condition.Values.Count == 0 || (condition.Values.Count == 1 && condition.Values.First() == null)) { return(true); } // return false, because the metaproperty does not have a value, but the condition does return(false); } switch (condition.MatchType) { case MatchType.EqualSorted: // sort the values metaproperty.Values.Sort(); condition.Values.Sort(); // check if lists are equal return(Enumerable.SequenceEqual(metaproperty.Values, condition.Values, StringComparer.Ordinal)); case MatchType.EqualSortedCaseInsensitive: // sort the values metaproperty.Values.Sort(); condition.Values.Sort(); // check if lists are equal return(Enumerable.SequenceEqual(metaproperty.Values, condition.Values, StringComparer.OrdinalIgnoreCase)); case MatchType.Equal: return(Enumerable.SequenceEqual(metaproperty.Values, condition.Values, StringComparer.Ordinal)); case MatchType.EqualCaseInsensitive: return(Enumerable.SequenceEqual(metaproperty.Values, condition.Values, StringComparer.OrdinalIgnoreCase)); case MatchType.ContainsAny: return(metaproperty.Values.Intersect(condition.Values).Any()); case MatchType.ContainsAnyCaseInsensitive: return(metaproperty.Values.Select(x => x.ToLower()).Intersect(condition.Values.Select(x => x.ToLower())).Any()); case MatchType.ContainsAll: return(condition.Values.All(x => metaproperty.Values.Contains(x))); case MatchType.ContainsAllCaseInsensitive: var metapropertyValuesLowerCase = metaproperty.Values.Select(x => x.ToLower()); var conditionValuesLowerCase = condition.Values.Select(x => x.ToLower()); return(conditionValuesLowerCase.All(x => metapropertyValuesLowerCase.Contains(x))); default: throw new NotSupportedException($"MatchType {condition.MatchType} is not yet supported to use for the import conditions!"); } }
public ConditionKeySet(ImportCondition condition, RecordSet records, bool excludeEmptyKey) { _records = new Dictionary <string, Record>(); _condition = condition; _exclude_empty_key = excludeEmptyKey; foreach (Record each in records) { AddRecord(each); } }
public CourseLookup(ImportCondition condition) { List <ImportCondition> conditions = new List <ImportCondition>(); conditions.Add(condition); _condition = condition; XmlElement xmlRecords = SmartSchool.Feature.Course.CourseBulkProcess.GetPrimaryKeyList(); _key_set_list = new ConditionKeySetCollection(conditions, xmlRecords, "Record"); }
public string ToString(string Description) { DSXmlHelper result = new DSXmlHelper("Fields"); ImportCondition cond = _cond; string combineName = cond.GetCombineFieldName(); foreach (ImportField eachField in cond.Fields) { XmlElement elmField = result.AddElement("Field"); elmField.SetAttribute("Name", eachField.FieldName); elmField.SetAttribute("Description", string.Format("欄位「{0}」為識別欄,值必須存在於資料庫中。", combineName)); } return(result.GetRawXml()); }
private void wpSelectFileAndAction_NextButtonClick(object sender, CancelEventArgs e) { try { e.Cancel = true; Context.SourceFile = txtSourceFile.Text; if (string.IsNullOrEmpty(Context.SourceFile)) { FISCA.Presentation.Controls.MsgBox.Show("您必須選擇匯入來源檔案。"); return; } if (!File.Exists(Context.SourceFile)) { FISCA.Presentation.Controls.MsgBox.Show("您指定的來源檔案並不存在。"); return; } if (Context.CurrentMode == ImportMode.None) { FISCA.Presentation.Controls.MsgBox.Show("您必須決定一種匯入方式。"); return; } lblCollectMsg.Text = "讀取匯入規格描述資訊…"; pProgram.Visible = true; pUser.Visible = false; Application.DoEvents(); XmlElement fieldData = Context.DataSource.GetImportFieldList(); Context.SupportFields = ImportFieldCollection.CreateFieldsFromXml(fieldData); Context.UpdateConditions = ImportCondition.CreateConditionFromXml(fieldData, Context.SupportFields); e.Cancel = false; } catch (Exception ex) { FISCA.Presentation.Controls.MsgBox.Show(ex.Message); } finally { pProgram.Visible = false; pUser.Visible = true; } }
public DuplicateInfo GetDuplicateBy(ImportCondition cond, IRowSource rowSource) { if (!_key_set_list.ContainsKey(cond)) { return(null); } ConditionKeySet keyset = _key_set_list[cond]; if (keyset.Contains(rowSource)) { return(new DuplicateInfo(keyset.Condition, keyset.GetRecord(rowSource))); } else { return(null); } }
public string ToString(string Description) { DSXmlHelper result = new DSXmlHelper("Fields"); foreach (DuplicateInfo each in _prevous_result) { ImportCondition cond = each.Condition; string combineName = cond.GetCombineFieldName(); foreach (ImportField eachField in cond.Fields) { XmlElement elmField = result.AddElement("Field"); elmField.SetAttribute("Name", eachField.FieldName); elmField.SetAttribute("Description", string.Format("欄位「{0}」與資料庫中資料重複。", combineName)); } } return(result.GetRawXml()); }
public UpdateIdentifyRowValidator(WizardContext context) { //當不是 Update 模式時不驗證。 _skip_validate = (context.CurrentMode != ImportMode.Update); if (_skip_validate) { return; } _cond = context.IdentifyField; List <ImportCondition> conditions = new List <ImportCondition>(); conditions.Add(context.IdentifyField); XmlElement recordData = context.DataSource.GetUniqueFieldData(); _key_sets = new ConditionKeySetCollection(conditions, recordData, "Record"); }
private void wpCollectKeyInfo_NextButtonClick(object sender, CancelEventArgs e) { e.Cancel = true; if (cboIdField.SelectedIndex == -1) { FISCA.Presentation.Controls.MsgBox.Show("您必須要選擇識別欄位。"); return; } ImportCondition condition = cboIdField.SelectedItem as ImportCondition; if (condition != null) { Context.IdentifyField = condition; } ImportField field = cboValidateField.SelectedItem as ImportField; if (field == EmptyShiftField) { Context.ShiftCheckField = null; } else { Context.ShiftCheckField = field; } if (Context.ShiftCheckField != null) { if (Context.IdentifyField.ContainsAnyField(Context.ShiftCheckField.FieldName)) { FISCA.Presentation.Controls.MsgBox.Show("「識別欄」與「驗證欄」必須是不同的欄位。"); return; } } e.Cancel = false; }
public DuplicateInfo(ImportCondition cond, Record record) { _condition = cond; _record = record; }
public ConditionKeySet(ImportCondition condition) : this(condition, false) { }
public ConditionKeySet(ImportCondition condition, bool excludeEmptyKey) { _records = new Dictionary <string, Record>(); _condition = condition; _exclude_empty_key = excludeEmptyKey; }
public ConditionKeySet(ImportCondition condition, RecordSet record) : this(condition, record, false) { }
private void UpdateTeacherInformation(SheetHelper sheet) { Dictionary <string, string> selectedFields = new Dictionary <string, string>(); foreach (string each in Context.SelectedFields) { selectedFields.Add(each, each); } if (!UpdateRequired(selectedFields)) { return; } bool doAddRequired = false; ImportCondition condition = GetIdentifyField(); CourseLookup lookup = new CourseLookup(condition); TeacherLookup tlookup = Context.Extensions[TeacherLookup.Name] as TeacherLookup; SheetRowSource sheetSource = new SheetRowSource(sheet, Context); XmlElement removeReq = DSXmlHelper.LoadXml("<Request/>"); XmlElement addReq = DSXmlHelper.LoadXml("<Request/>"); int firstRow = sheet.FirstDataRowIndex, maxRow = sheet.MaxDataRowIndex; for (int rowIndex = firstRow; rowIndex <= maxRow; rowIndex++) { sheetSource.BindRow(rowIndex); string courseId = lookup.GetCourseID(sheetSource); if (string.IsNullOrEmpty(courseId)) { throw new Exception("資料更新過程中,資料可能被另一使用者更改,匯入資料失敗。"); } if (selectedFields.ContainsKey("授課教師一")) { XmlElement removeItem = CreateChild(removeReq, "Course"); CreateChild(removeItem, "CourseID").InnerText = courseId; CreateChild(removeItem, "Sequence").InnerText = "1"; } if (selectedFields.ContainsKey("授課教師二")) { XmlElement removeItem = CreateChild(removeReq, "Course"); CreateChild(removeItem, "CourseID").InnerText = courseId; CreateChild(removeItem, "Sequence").InnerText = "2"; } if (selectedFields.ContainsKey("授課教師三")) { XmlElement removeItem = CreateChild(removeReq, "Course"); CreateChild(removeItem, "CourseID").InnerText = courseId; CreateChild(removeItem, "Sequence").InnerText = "3"; } if (selectedFields.ContainsKey("授課教師一")) { string teacherId = tlookup.GetTeacherID(sheetSource.GetFieldData("授課教師一")); if (!string.IsNullOrEmpty(teacherId)) { XmlElement addItem = CreateChild(addReq, "CourseTeacher"); CreateChild(addItem, "RefCourseID").InnerText = courseId; CreateChild(addItem, "RefTeacherID").InnerText = teacherId; CreateChild(addItem, "Sequence").InnerText = "1"; doAddRequired = true; } } if (selectedFields.ContainsKey("授課教師二")) { string teacherId = tlookup.GetTeacherID(sheetSource.GetFieldData("授課教師二")); if (!string.IsNullOrEmpty(teacherId)) { XmlElement addItem = CreateChild(addReq, "CourseTeacher"); CreateChild(addItem, "RefCourseID").InnerText = courseId; CreateChild(addItem, "RefTeacherID").InnerText = teacherId; CreateChild(addItem, "Sequence").InnerText = "2"; doAddRequired = true; } } if (selectedFields.ContainsKey("授課教師三")) { string teacherId = tlookup.GetTeacherID(sheetSource.GetFieldData("授課教師三")); if (!string.IsNullOrEmpty(teacherId)) { XmlElement addItem = CreateChild(addReq, "CourseTeacher"); CreateChild(addItem, "RefCourseID").InnerText = courseId; CreateChild(addItem, "RefTeacherID").InnerText = teacherId; CreateChild(addItem, "Sequence").InnerText = "3"; doAddRequired = true; } } } ImportDataAccess da = Context.DataSource as ImportDataAccess; da.RemoveCourseTeachers(removeReq); if (doAddRequired) { da.AddCourseTeachers(addReq); } }
private void wpSelectFileAndAction_NextButtonClick(object sender, CancelEventArgs e) { try { e.Cancel = true; Context.SourceFile = txtSourceFile.Text; if (string.IsNullOrEmpty(Context.SourceFile)) { FISCA.Presentation.Controls.MsgBox.Show("您必須選擇匯入來源檔案。"); return; } if (!File.Exists(Context.SourceFile)) { FISCA.Presentation.Controls.MsgBox.Show("您指定的來源檔案並不存在。"); return; } if (Context.CurrentMode == ImportMode.None) { FISCA.Presentation.Controls.MsgBox.Show("您必須決定一種匯入方式。"); return; } lblCollectMsg.Text = "讀取匯入規格描述資訊…"; pProgram.Visible = true; pUser.Visible = false; Application.DoEvents(); XmlElement fieldData; //2018/12/21 穎驊 完成高雄項目 [10-03][??] 局端夠查詢學校班級有調整”導師”的功能 // 有載入高雄自動編班模組的 , 其匯入規則 載Local 的設定(班導師必填) // 其餘的學校 依然為舊做法,自Service 載匯入規則資料 IClassBaseInfoItemAPI item = FISCA.InteractionService.DiscoverAPI <IClassBaseInfoItemAPI>(); if (item != null) { XmlDocument doc = new XmlDocument(); doc.LoadXml(Properties.Resources.JH_C_BulkDescription); fieldData = doc.DocumentElement; } else { fieldData = Context.DataSource.GetImportFieldList(); } Context.SupportFields = ImportFieldCollection.CreateFieldsFromXml(fieldData); Context.UpdateConditions = ImportCondition.CreateConditionFromXml(fieldData, Context.SupportFields); e.Cancel = false; } catch (Exception ex) { FISCA.Presentation.Controls.MsgBox.Show(ex.Message); } finally { pProgram.Visible = false; pUser.Visible = true; } }