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");
        }
Esempio n. 2
0
        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!");
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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());
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 7
0
        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");
        }
Esempio n. 10
0
        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;
        }
Esempio n. 11
0
 public DuplicateInfo(ImportCondition cond, Record record)
 {
     _condition = cond;
     _record    = record;
 }
Esempio n. 12
0
 public ConditionKeySet(ImportCondition condition)
     : this(condition, false)
 {
 }
Esempio n. 13
0
 public ConditionKeySet(ImportCondition condition, bool excludeEmptyKey)
 {
     _records           = new Dictionary <string, Record>();
     _condition         = condition;
     _exclude_empty_key = excludeEmptyKey;
 }
Esempio n. 14
0
 public ConditionKeySet(ImportCondition condition, RecordSet record)
     : this(condition, record, false)
 {
 }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
        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;
            }
        }