コード例 #1
0
        /// <summary>
        /// Converts a field
        /// </summary>
        /// <param name="fieldRow">A field record from the legacy database</param>
        /// <param name="page">A page object</param>
        /// <param name="tableName">Name of the view table in EI 3.x</param>
        private void CopyField(DataRow fieldRow, Page page, string tableName)
        {
            RenderableField field = null;
            try
            {
                bool FieldHasBeforeCheckCode = false;
                bool FieldHasAfterCheckCode = false;
                bool FieldHasClickCheckCode = false;

                string ckBefore = String.Empty;
                string ckAfter = String.Empty;

                MetaFieldType fieldType = Epi.Epi2000.MetadataDbProvider.InferFieldType(fieldRow);
                field = (RenderableField)page.CreateField(fieldType);

                if (field is GridField)
                {
                    // Grids not supported in initial 7.0.7 release
                    Logger.Log(DateTime.Now + ":  " + string.Format(SharedStrings.IMPORT_WARNING_GRID_NOT_SUPPORTED, field.Name));
                    return;
                }

                // Field Name
                string fieldName = fieldRow[ColumnNames.NAME].ToString();
                // KKM4 - Commented out to test the requirement of Reserved words.
                //if (Epi.Data.Services.AppData.Instance.IsReservedWord(fieldName))
                //{
                //    throw new ReservedWordException(fieldName);
                //}
                //else
                //{
                //    field.Name = fieldName;
                //}
                field.Name = fieldName;

                // ControlFont
                if (!string.IsNullOrEmpty(fieldRow["Ffont"].ToString()))
                {
                    if (!string.IsNullOrEmpty(fieldRow["Ffontsize"].ToString()))
                    {
                        if (float.Parse(fieldRow["Ffontsize"].ToString()) > 0)
                        {
                            field.ControlFont = new System.Drawing.Font(fieldRow["Ffont"].ToString(), float.Parse(fieldRow["Ffontsize"].ToString()));
                        }
                    }
                }

                // ControlHeightPercentage
                if (fieldRow["Fsize"] != DBNull.Value)
                {
                    field.ControlHeightPercentage = (double)fieldRow["Fsize"];
                }

                // ControlLeftPositionPercentage
                if (fieldRow["Flocx"] != DBNull.Value)
                {
                    field.ControlLeftPositionPercentage = ((double)fieldRow["Flocx"]) / 100;
                }

                // ControlTopPositionPercentage
                if (fieldRow["Flocy"] != DBNull.Value)
                {
                    field.ControlTopPositionPercentage = ((double)fieldRow["Flocy"]) / 100;
                }

                // ControlWidthPercentage
                if (fieldRow["Dsize"] != DBNull.Value)
                {
                    field.ControlWidthPercentage = (double)fieldRow["Dsize"];
                }

                // HasTabStop
                field.HasTabStop = true;

                // Prompt
                if (fieldRow["Prompt"] != DBNull.Value)
                {
                    field.PromptText = fieldRow["Prompt"].ToString();
                }

                // TabIndex
                if (fieldRow["Taborder"] != DBNull.Value)
                {
                    field.TabIndex = int.Parse(fieldRow["Taborder"].ToString());
                }

                // Check Code
                if (fieldRow[ColumnNames.CHECK_CODE] != DBNull.Value)
                {
                    string checkCode = fieldRow[ColumnNames.CHECK_CODE].ToString();
                    Epi.Epi2000.MetadataDbProvider.SplitCheckCode(checkCode, ref ckBefore, ref ckAfter);

                    if (field is IFieldWithCheckCodeAfter)
                    {
                        if (!string.IsNullOrEmpty(ckAfter))
                        {
                            FieldHasAfterCheckCode = true;
                        }
                    }

                    if (field is IFieldWithCheckCodeBefore)
                    {
                        if (!string.IsNullOrEmpty(ckBefore))
                        {
                            FieldHasBeforeCheckCode = true;
                        }
                    }

                    if (field is CommandButtonField)
                    {
                        if (!string.IsNullOrEmpty(ckAfter))
                        {
                            FieldHasClickCheckCode = true;
                        }
                    }
                }

                if (FieldHasBeforeCheckCode || FieldHasAfterCheckCode || FieldHasClickCheckCode)
                {
                    CheckCode.Append("\nField ");
                    if (field.Name.Trim().IndexOf(' ') > -1)
                    {
                        CheckCode.Append("[");
                        CheckCode.Append(field.Name.Trim());
                        CheckCode.Append("]");
                    }
                    else
                    {
                        CheckCode.Append(field.Name.Trim());
                    }
                    if (FieldHasBeforeCheckCode)
                    {
                        CheckCode.Append("\n\tBefore\n\t\t");
                        CheckCode.Append(ckBefore.Replace("\n", "\n\t\t"));
                        CheckCode.Append("\n\tEnd-Before\n");
                    }

                    if (FieldHasAfterCheckCode)
                    {
                        CheckCode.Append("\n\tAfter\n\t\t");
                        CheckCode.Append(ckAfter.Replace("\n", "\n\t\t"));
                        CheckCode.Append("\n\tEnd-After\n");
                    }
                    if (FieldHasClickCheckCode)
                    {
                        CheckCode.Append("\n\tClick\n\t\t");
                        CheckCode.Append(ckAfter.Replace("\n","\n\t\t"));
                        CheckCode.Append("\n\tEnd-Click\n");
                    }

                    CheckCode.Append("End-Field\n");
                }

                if (field is FieldWithSeparatePrompt)
                {
                    // PromptLeftPositionPercentage
                    if (fieldRow["Plocx"] != DBNull.Value)
                    {
                        ((FieldWithSeparatePrompt)field).PromptLeftPositionPercentage = double.Parse(fieldRow["Plocx"].ToString()) / 100;
                    }
                    // PromptTopPositionPercentage
                    if (fieldRow["Plocy"] != DBNull.Value)
                    {
                        ((FieldWithSeparatePrompt)field).PromptTopPositionPercentage = double.Parse(fieldRow["Plocy"].ToString()) / 100;
                    }
                    // PromptFont
                    if (fieldRow["Pfont"] != DBNull.Value)
                    {
                        ((FieldWithSeparatePrompt)field).PromptFont = new System.Drawing.Font(fieldRow["Pfont"].ToString(), float.Parse(fieldRow["Pfontsize"].ToString()));
                    }
                }
                if (field is IInputField)
                {
                    string lists = fieldRow["Lists"].ToString().Trim();
                    int parenPos = lists.IndexOf('(');
                    if (parenPos < 0)
                    {
                        parenPos = lists.Length;
                    }
                    lists = lists.Substring(0, parenPos).ToUpper().Trim();
                    if (!string.IsNullOrEmpty(lists))
                    {
                        ((IInputField)field).IsRequired = lists.Contains("M");
                        ((IInputField)field).IsReadOnly = lists.Contains("N");
                        ((IInputField)field).ShouldRepeatLast = lists.Contains("R");
                    }
                }
                if (field is ImageField)
                {
                    ((ImageField)field).ShouldRetainImageSize = false;
                }
                if (field is LabelField)
                {
                    if (fieldRow["Plocx"] != DBNull.Value)
                    {
                        field.ControlLeftPositionPercentage = double.Parse(fieldRow["Plocx"].ToString()) / 100;
                    }
                    if (fieldRow["Plocy"] != DBNull.Value)
                    {
                        field.ControlTopPositionPercentage = double.Parse(fieldRow["Plocy"].ToString()) / 100;
                    }
                    if ((fieldRow["Pfont"] != DBNull.Value) && (fieldRow["Pfontsize"] != DBNull.Value))
                    {
                        field.ControlFont = new System.Drawing.Font(fieldRow["Pfont"].ToString(), float.Parse(fieldRow["Pfontsize"].ToString()));
                    }
                }
                if (field is TableBasedDropDownField)
                {
                    ((TableBasedDropDownField)field).SourceTableName = GetCodeTableName(fieldRow["Lists"].ToString(), tableName);
                    ((TableBasedDropDownField)field).TextColumnName = GetCodeTableTextField(fieldRow["Lists"].ToString());
                }
                if (field is DDLFieldOfCodes)
                {
                    ((DDLFieldOfCodes)field).CodeColumnName = GetCodeTableValueField(fieldRow["Lists"].ToString());
                    if (!(field is DDLFieldOfCommentLegal) && !(field is DDLFieldOfLegalValues))
                    {
                        ((DDLFieldOfCodes)field).AssociatedFieldInformation = GetCodeTableAssociatedFields(fieldRow["Lists"].ToString(), field.GetView());
                    }
                }
                if (field is MirrorField)
                {
                    ((MirrorField)field).SourceFieldId = 1;
                }

                if (field is RelatedViewField)
                {
                    // Relate Condition
                    if (fieldRow["FormatString"] != DBNull.Value)
                    {
                        ((RelatedViewField)field).Condition = (fieldRow["FormatString"].ToString());
                    }
                    ((RelatedViewField)field).RelatedViewID = 1; // this will be re-set later during CopyViewRelations()
                }

                if (field is NumberField)
                {
                    if (fieldRow["FormatString"] != DBNull.Value)
                    {
                        Match m = Regex.Match(fieldRow["FormatString"].ToString(), "[;]");
                        if (m.Success)
                        {
                            string[] pattern = (fieldRow["FormatString"].ToString()).Split(';');
                            ((NumberField)field).Pattern = pattern[1];
                        }
                        else
                        {
                            ((NumberField)field).Pattern = (fieldRow["FormatString"].ToString());
                        }
                    }
                }
                else if (field is PhoneNumberField)
                {
                    if (fieldRow["FormatString"] != DBNull.Value)
                    {
                        Match m = Regex.Match(fieldRow["FormatString"].ToString(), "[;]");
                        if (m.Success)
                        {
                            string[] pattern = (fieldRow["FormatString"].ToString()).Split(';');
                            ((PhoneNumberField)field).Pattern = pattern[1];
                        }
                        else
                        {
                            ((PhoneNumberField)field).Pattern = (fieldRow["FormatString"].ToString());
                        }
                    }
                }
                else if (field is TextField)
                {
                    if (fieldRow["FormatString"] != DBNull.Value)
                    {
                        int maxLength = 0;
                        if (Int32.TryParse(fieldRow["FormatString"].ToString(), out maxLength) && maxLength > 0)
                        {
                            ((TextField)field).MaxLength = maxLength;
                        }
                    }
                }
                else if (field is GroupField)
                {
                    if (fieldRow["Plocx"] != DBNull.Value)
                    {
                        field.ControlLeftPositionPercentage = double.Parse(fieldRow["Plocx"].ToString()) / 100;
                    }
                    if (fieldRow["Plocy"] != DBNull.Value)
                    {
                        field.ControlTopPositionPercentage = double.Parse(fieldRow["Plocy"].ToString()) / 100;
                    }
                    if (fieldRow["Flocx"] != DBNull.Value)
                    {
                        field.ControlWidthPercentage = double.Parse(fieldRow["Flocx"].ToString());
                    }
                    if (fieldRow["Flocy"] != DBNull.Value)
                    {
                        field.ControlHeightPercentage = double.Parse(fieldRow["Flocy"].ToString());
                    }

                    string[] items = fieldRow["Lists"].ToString().Split(';');
                    ((GroupField)field).ChildFieldNames = string.Join(",", items);
                }
                else if (field is OptionField)
                {
                    string[] items = fieldRow["Lists"].ToString().Split(';');
                    // TODO: We have to strip the commas out because that's how the values are delimited in Epi 7 now. Later, change how this is delimited (and thus we need to remove this code at that point).
                    if (fieldRow["Lists"].ToString().Contains(","))
                    {
                        for (int i = 0; i < items.Length; i++)
                        {
                            items[i] = items[i].Replace(",", string.Empty);
                        }
                    }
                    ((OptionField)field).Options = new System.Collections.Generic.List<string>();
                    ((OptionField)field).Options.AddRange(items);
                }

                if (field is CheckBoxField)
                {
                    AdjustCheckboxWidth(field);
                }

                field.SaveToDb();

                if (field is GridField)
                {
                    DataTable columns = sourceProject.Metadata.GetGridColumns(fieldRow["Ffont"].ToString());
                    foreach (DataRow column in columns.Rows)
                    {
                        MetaFieldType columnType = Epi.Epi2000.MetadataDbProvider.InferFieldType(column);
                        GridColumnBase gridColumn = ((GridField)field).CreateGridColumn(columnType);
                        gridColumn.Name = column[ColumnNames.NAME].ToString();
                        gridColumn.Text = column["Prompt"].ToString();
                        gridColumn.Width = int.Parse(column["Dsize"].ToString());
                        gridColumn.SaveToDb();
                    }
                }

                // Raise Import status event
                string fieldDisplayName = page.DisplayName + "::" + field.Name;
                RaiseEventProgressBarStep();
                MessageEventArgs args = new MessageEventArgs(fieldDisplayName + StringLiterals.ELLIPSIS, false);
                RaiseEventImportStatus(fieldDisplayName + StringLiterals.ELLIPSIS, args);
            }
            catch (Exception e)
            {
                Logger.Log(DateTime.Now + ":  " + string.Format(SharedStrings.IMPORT_ERROR_BAD_METADATA_IN_FIELD, field.Name, page.GetView().Name));
                string message = string.Format(SharedStrings.IMPORT_BAD_FIELD_DATA, field.Name, page.Name, page.GetView().Name);
                throw new GeneralException(message, e);
            }
            finally
            {
            }
        }
コード例 #2
0
ファイル: Rule_Context.cs プロジェクト: NALSS/epiinfo-82474
        public void ReadDataSource(DataTable table)
        {
            if (table != null)
            {
                IMemoryRegion region = MemoryRegion;
                FieldCollectionMaster dataFields = new FieldCollectionMaster();
                Project tempProject = new Project();
                View tempView = new View(tempProject);
                Page tempPage = new Page(tempView);

                DataInfo.PrimaryTable = table;

                List<IField> listOfFields = new List<IField>();

                foreach (DataColumn column in table.Columns)
                {
                    IField field = (IField)tempPage.CreateField(MetaFieldType.Text);
                    field.Name = column.ColumnName;
                    RenderableField tempField = (RenderableField)field;
                    tempField.PromptText = column.ColumnName;
                    tempField.SourceTable = table.TableName;
                    listOfFields.Add(tempField);
                }

                foreach (IField field in listOfFields)
                {
                    region.DefineVariable((IDataField)field);
                }

                if (CurrentRead != null && CurrentRead.IsEpi7ProjectRead && CurrentProject != null && CurrentProject.Views.Exists(CurrentRead.Identifier))
                {
                    View view = CurrentProject.Views[CurrentRead.Identifier];

                    foreach (IField field in view.Fields)
                    {
                        if (field is GroupField)
                        {
                            IVariable v = new DataSourceVariable(field.Name, DataType.Unknown);
                            region.DefineVariable(v);
                        }
                    }
                }

                foreach (KeyValuePair<string, List<string>> kvp in GroupVariableList)
                {
                    IVariable v = new DataSourceVariable(kvp.Key, DataType.Unknown);
                    region.DefineVariable(v);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Start the conversion process
        /// </summary>
        public void Convert()
        {
            if (SetStatus != null)
            {
                SetStatus("Creating form...");
            }

            project.CreateView(formName, false);
            View destinationView = project.Views[formName];

            List<int> pages = new List<int>();

            foreach(ColumnConversionInfo cci in columnMapping)
            {
                if(!pages.Contains(cci.PageNumber))
                {
                    pages.Add(cci.PageNumber);
                }
            }

            pages.Sort();

            if (SetStatus != null)
            {
                SetStatus("Creating pages...");
            }

            for(int i = 0; i < pages.Count; i++)
            {
                Page page = new Page(destinationView);
                page.Name = "Page " + (i + 1).ToString();
                page.Position = i;
                destinationView.Pages.Add(page);
                destinationView.SaveToDb();
                page.SaveToDb();
            }

            if (SetStatus != null)
            {
                SetStatus("Creating fields...");
            }

            foreach(ColumnConversionInfo cci in columnMapping)
            {
                if (SetStatus != null)
                {
                    SetStatus("Creating field " + cci.DestinationColumnName + "...");
                }

                Page page = destinationView.GetPageByPosition(cci.PageNumber - 1);
                Field field = null;
                switch(cci.FieldType)
                {
                    case MetaFieldType.Checkbox:
                    case MetaFieldType.YesNo:
                    case MetaFieldType.Text:
                    case MetaFieldType.Multiline:
                    case MetaFieldType.Date:
                    case MetaFieldType.DateTime:
                    case MetaFieldType.Time:
                    case MetaFieldType.LegalValues:
                    case MetaFieldType.Number:
                        field = page.CreateField(cci.FieldType);
                        break;
                    default:
                        throw new ApplicationException("Invalid field type");
                        //break;
                }

                SetFieldProperties(field, cci);

                page.AddNewField((RenderableField)field);
            }

            destinationView.SaveToDb();
        }