/// <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 { } }
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); } } }
/// <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(); }