/// <summary> /// Handles the messaging of the Import's status /// </summary> /// <param name="sender">Object that fired the event</param> /// <param name="e">Import status event parameters</param> public void OnStatusUpdate(object sender, MessageEventArgs e) { this.lblCurrentItem.Text = e.Message + " ..."; Logger.Log(e.Message); }
/// <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 { } }
private void ReportTableCopyEnd(object sender, MessageEventArgs args) { RaiseEventProgressBarStep(); }
private void UpdateImageFields(View destinationView) { string status = string.Format(SharedStrings.IMPORT_NOTIFICATION_IMAGE_UPDATE_START, destinationView.Name); MessageEventArgs args = new MessageEventArgs(status, false); RaiseEventImportStatus(status, args); FieldCollectionMaster fields = destinationView.GetMetadata().GetFields(destinationView); List<string> imageFieldNames = new List<string>(); bool hasImages = false; // << change columns >> foreach (Field field in fields) { if (field.FieldType == MetaFieldType.Image) { imageFieldNames.Add(field.Name); hasImages = true; string pageTableName = destinationView.TableName; foreach (Page page in destinationView.Pages) { if (page.Fields.Contains(field.Name)) { pageTableName = page.TableName; } } if (destinationProject.CollectedData.ColumnExists(pageTableName, field.Name)) { destinationProject.CollectedData.DeleteColumn(pageTableName, field.Name); destinationProject.CollectedData.CreateTableColumn((Epi.Fields.IInputField)field, pageTableName); } } } // << convert to bytes - per record - per field >> Epi.Epi2000.CollectedDataProvider collectedDataProvider = sourceProject.CollectedData; Epi.Data.IDbDriver sourceData = collectedDataProvider.GetDatabase(); if (string.IsNullOrEmpty(destinationView.TableName) || collectedDataProvider.TableExists(destinationView.TableName) == false || hasImages == false) { status = string.Format(SharedStrings.IMPORT_NOTIFICATION_IMAGE_UPDATE_NONE, destinationView.Name); RaiseEventImportStatus(status); return; } Query selectQuery = sourceData.CreateQuery("SELECT * FROM " + destinationView.TableName); DataTable sourceTable = sourceData.GetTableData(destinationView.TableName); string imagePath = string.Empty; int imageFieldsProcessed = 0; foreach (DataRow sourceRow in sourceTable.Rows) { int uniqueKey = ((int)sourceRow["UniqueKey"]); destinationProject.CollectedData.LoadRecordIntoView(destinationView, uniqueKey); foreach (Field destField in destinationView.Fields) { try { if (destField is ImageField) { // TODO: FIX!!! imagePath = sourceRow[destField.Name].ToString(); if (imagePath.StartsWith("..")) { imagePath = imagePath.TrimStart('.'); imagePath = "C:" + imagePath; } //imagePath = Path.Combine(sourceProject.Location,Path.GetFileName(imagePath)); byte[] imageAsBytes = Util.GetByteArrayFromImagePath(imagePath); ((ImageField)destField).CurrentRecordValue = imageAsBytes; imageFieldsProcessed++; //throw new ApplicationException("Image imports not supported."); } } catch { Logger.Log(DateTime.Now + ": " + string.Format(SharedStrings.IMPORT_WARNING_NO_IMAGE_COPIED, imagePath, destinationView.Name)); } } // TODO: FIX!!! destinationView.SaveRecord(uniqueKey); } status = string.Format(SharedStrings.IMPORT_NOTIFICATION_IMAGE_UPDATE_END, imageFieldsProcessed.ToString(), destinationView.Name); args = new MessageEventArgs(status, false); RaiseEventImportStatus(status, args); }
private void RaiseEventImportStatus(object sender, MessageEventArgs args) { if (ImportStatus != null) ImportStatus(sender, args); }