Пример #1
0
 /// <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);
 }
Пример #2
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
            {
            }
        }
Пример #3
0
 private void ReportTableCopyEnd(object sender, MessageEventArgs args)
 {
     RaiseEventProgressBarStep();
 }
Пример #4
0
        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);
        }
Пример #5
0
 private void RaiseEventImportStatus(object sender, MessageEventArgs args)
 {
     if (ImportStatus != null)
         ImportStatus(sender, args);
 }