private void UnMarkRelatedRecoredsAsDeleted(Epi.Data.Services.CollectedDataProvider OutputDriver, View pView, List<int> pIDList) { Dictionary<string, bool> VisitedViews = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase); string SQL = null; StringBuilder InSQL = new StringBuilder(); InSQL.Append(" Where FKey In ("); foreach (int ID in pIDList) { pView.LoadRecord(ID); pView.RecStatusField.CurrentRecordValue = 1; pView.SaveRecord(ID); InSQL.Append("'"); InSQL.Append(pView.CurrentGlobalRecordId); InSQL.Append("',"); } InSQL.Length = InSQL.Length - 1; InSQL.Append(")"); foreach (Epi.Fields.Field field in pView.Fields) { if (field is Epi.Fields.RelatedViewField) { Epi.Fields.RelatedViewField rvf = field as Epi.Fields.RelatedViewField; if (!VisitedViews.ContainsKey(rvf.ChildView.Name)) { SQL = "Select UniqueKey From [" + rvf.ChildView.TableName + "] " + InSQL.ToString(); IDataReader reader = OutputDriver.ExecuteReader(OutputDriver.CreateQuery(SQL)); List<int> NewIdList = new List<int>(); while (reader.Read()) { if (reader["UniqueKey"] != DBNull.Value) { NewIdList.Add((int)reader["UniqueKey"]); } } VisitedViews.Add(rvf.ChildView.Name, true); UnMarkRelatedRecoredsAsDeleted(OutputDriver, rvf.ChildView, NewIdList); } } } }
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); }