/// <summary> /// Updates the transport report. /// </summary> /// <param name="report">The report.</param> /// <param name="ee">The ee.</param> /// <param name="importedRecordsForEntity">The imported records for entity.</param> /// <param name="importFailuresForEntity">The import failures for entity.</param> /// <param name="entityImportStartDT">The entity import start dt.</param> public void updateTransportReport(TransportReport report, SelectedEntity ee, int importedRecordsForEntity, int importFailuresForEntity, DateTime entityImportStartDT) { bool addNewLine = true; foreach (TransportReportLine reportLine in report.ReportLines) { if (reportLine.Entity == ee.EntityName) { reportLine.ImportedRecords = importedRecordsForEntity; report.TotalImportedRecords += importedRecordsForEntity; DateTime entityImportEndDT = DateTime.Now; TimeSpan ts = entityImportEndDT - entityImportStartDT; reportLine.ImportStartedAt = entityImportStartDT.ToString(); reportLine.ImportFinishedAt = entityImportEndDT.ToString(); reportLine.ImportedIn = ts.ToString().Substring(0, 10); reportLine.ImportFailures = importFailuresForEntity; addNewLine = false; break; } } if (addNewLine) { TransportReportLine currentLine = new TransportReportLine(); currentLine.Entity = ee.EntityName; currentLine.ImportedRecords = importedRecordsForEntity; report.TotalImportedRecords += importedRecordsForEntity; DateTime entityImportEndDT = DateTime.Now; TimeSpan ts = entityImportEndDT - entityImportStartDT; currentLine.ImportStartedAt = entityImportStartDT.ToString(); currentLine.ImportFinishedAt = entityImportEndDT.ToString(); currentLine.ImportedIn = ts.ToString().Substring(0, 10); currentLine.ImportFailures = importFailuresForEntity; report.ReportLines.Add(currentLine); } WriteTransportReport(report, ReportFileName); }
/// <summary> /// Exports the specified profile. /// </summary> /// <param name="profile">The profile.</param> /// <param name="transportReportFileName">Name of the transport report file.</param> private void Export(TransportationProfile profile, string transportReportFileName) { try { TransportReport report = new TransportReport(transportReportFileName); //Get Transport Report if (File.Exists(transportReportFileName)) { report = ReadTransportReport(transportReportFileName); } //Clean Data folder string dataExportFolder = Folder + "\\" + profile.ProfileName + "\\Data"; if (Directory.Exists(dataExportFolder)) { Directory.Delete(dataExportFolder, true); } Directory.CreateDirectory(dataExportFolder); MSCRMConnection connection = profile.getSourceConneciton(); EnvStructure es = ReadEnvStructure(profile.SourceConnectionName); _serviceProxy = cm.connect(connection); IOrganizationService service = (IOrganizationService)_serviceProxy; List <TransportReportLine> TransportReport = new List <TransportReportLine>(); profile.TotalExportedRecords = 0; //Mesure export time DateTime exportStartDT = DateTime.Now; LogManager.WriteLog("Start exporting data from " + connection.ConnectionName); int recordCount = 0; if (es != null) { //Order export according to profile's transport order IOrderedEnumerable <SelectedEntity> orderedSelectedEntities = profile.SelectedEntities.OrderBy(se => se.TransportOrder); foreach (SelectedEntity ee in orderedSelectedEntities) { LogManager.WriteLog("Exporting data for entity " + ee.EntityName); DateTime entityExportStartDT = DateTime.Now; string fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"; fetchXml += "<entity name='" + ee.EntityName + "'>"; //Get Entity structure EnvEntity strE = new EnvEntity(); foreach (EnvEntity envE in es.Entities) { if (envE.EntityName == ee.EntityName) { strE = envE; break; } } //Create fetchXML Query foreach (string ea in strE.Attributes) { if (ee.IgnoredAttributes == null) { fetchXml += "<attribute name='" + ea + "' />"; } else if (!ee.IgnoredAttributes.Contains(ea)) { fetchXml += "<attribute name='" + ea + "' />"; } } //Add Query filter fetchXml += ee.Filter; fetchXml += "</entity></fetch>"; int recordCountPerEntity = ExportEntity(profile, fetchXml); recordCount += recordCountPerEntity; DateTime entityExportEndDT = DateTime.Now; TimeSpan ts = entityExportEndDT - entityExportStartDT; TransportReportLine transportReportLine = new TransportReportLine(); transportReportLine.Entity = ee.EntityName; transportReportLine.ExportedRecords = recordCountPerEntity; report.TotalExportedRecords += recordCountPerEntity; transportReportLine.ExportedIn = ts.ToString().Substring(0, 10); transportReportLine.ExportStartedAt = entityExportStartDT.ToString(); transportReportLine.ExportFinishedAt = entityExportEndDT.ToString(); report.ReportLines.Add(transportReportLine); WriteTransportReport(report, transportReportFileName); } } TimeSpan exportTimeSpan = DateTime.Now - exportStartDT; LogManager.WriteLog("Export finished for " + profile.SourceConnectionName + ". Exported " + recordCount + " records in " + exportTimeSpan.ToString().Substring(0, 10)); } catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ex) { LogManager.WriteLog("Error:" + ex.Detail.Message + "\n" + ex.Detail.TraceText); } catch (Exception ex) { if (ex.InnerException != null) { LogManager.WriteLog("Error:" + ex.Message + "\n" + ex.InnerException.Message); } else { LogManager.WriteLog("Error:" + ex.Message); } } }
/// <summary> /// Exports the specified profile. /// </summary> /// <param name="profile">The profile.</param> /// <param name="transportReportFileName">Name of the transport report file.</param> private void Export(TransportationProfile profile, string transportReportFileName) { try { TransportReport report = new TransportReport(transportReportFileName); //Get Transport Report if (File.Exists(transportReportFileName)) { report = ReadTransportReport(transportReportFileName); } //Clean Data folder string dataExportFolder = Folder + "\\" + profile.ProfileName + "\\Data"; if (Directory.Exists(dataExportFolder)) { Directory.Delete(dataExportFolder, true); } Directory.CreateDirectory(dataExportFolder); MSCRMConnection connection = profile.getSourceConneciton(); EnvStructure es = ReadEnvStructure(profile.SourceConnectionName); _serviceProxy = cm.connect(connection); IOrganizationService service = (IOrganizationService)_serviceProxy; List<TransportReportLine> TransportReport = new List<TransportReportLine>(); profile.TotalExportedRecords = 0; //Mesure export time DateTime exportStartDT = DateTime.Now; LogManager.WriteLog("Start exporting data from " + connection.ConnectionName); int recordCount = 0; if (es != null) { //Order export according to profile's transport order IOrderedEnumerable<SelectedEntity> orderedSelectedEntities = profile.SelectedEntities.OrderBy(se => se.TransportOrder); foreach (SelectedEntity ee in orderedSelectedEntities) { LogManager.WriteLog("Exporting data for entity " + ee.EntityName); DateTime entityExportStartDT = DateTime.Now; string fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"; fetchXml += "<entity name='" + ee.EntityName + "'>"; //Get Entity structure EnvEntity strE = new EnvEntity(); foreach (EnvEntity envE in es.Entities) { if (envE.EntityName == ee.EntityName) { strE = envE; break; } } //Create fetchXML Query foreach (string ea in strE.Attributes) { if (ee.IgnoredAttributes == null) { fetchXml += "<attribute name='" + ea + "' />"; } else if (!ee.IgnoredAttributes.Contains(ea)) { fetchXml += "<attribute name='" + ea + "' />"; } } //Add Query filter fetchXml += ee.Filter; fetchXml += "</entity></fetch>"; int recordCountPerEntity = ExportEntity(profile, fetchXml); recordCount += recordCountPerEntity; DateTime entityExportEndDT = DateTime.Now; TimeSpan ts = entityExportEndDT - entityExportStartDT; TransportReportLine transportReportLine = new TransportReportLine(); transportReportLine.Entity = ee.EntityName; transportReportLine.ExportedRecords = recordCountPerEntity; report.TotalExportedRecords += recordCountPerEntity; transportReportLine.ExportedIn = ts.ToString().Substring(0, 10); transportReportLine.ExportStartedAt = entityExportStartDT.ToString(); transportReportLine.ExportFinishedAt = entityExportEndDT.ToString(); report.ReportLines.Add(transportReportLine); WriteTransportReport(report, transportReportFileName); } } TimeSpan exportTimeSpan = DateTime.Now - exportStartDT; LogManager.WriteLog("Export finished for " + profile.SourceConnectionName + ". Exported " + recordCount + " records in " + exportTimeSpan.ToString().Substring(0, 10)); } catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex) { LogManager.WriteLog("Error:" + ex.Detail.Message + "\n" + ex.Detail.TraceText); } catch (Exception ex) { if (ex.InnerException != null) { LogManager.WriteLog("Error:" + ex.Message + "\n" + ex.InnerException.Message); } else { LogManager.WriteLog("Error:" + ex.Message); } } }
private int ExportGUI(string transportReportFileName, BackgroundWorker worker, DoWorkEventArgs e) { TransportReport report = null; try { report = new TransportReport(man.ReportFileName); //Get Transport Report if (File.Exists(man.ReportFileName)) { report = man.ReadTransportReport(man.ReportFileName); } //Clean Data folder string dataExportFolder = man.Folder + "\\" + currentProfile.ProfileName + "\\Data"; if (Directory.Exists(dataExportFolder)) { Directory.Delete(dataExportFolder, true); } Directory.CreateDirectory(dataExportFolder); MSCRMConnection connection = currentProfile.getSourceConneciton(); EnvStructure es = man.ReadEnvStructure(currentProfile.SourceConnectionName); man._serviceProxy = cm.connect(connection); IOrganizationService service = (IOrganizationService)_serviceProxy; List<TransportReportLine> TransportReport = new List<TransportReportLine>(); currentProfile.TotalExportedRecords = 0; //Mesure export time DateTime exportStartDT = DateTime.Now; LogManager.WriteLog("Start exporting data from " + connection.ConnectionName); int recordCount = 0; if (es != null) { int treatedEntities = 1; //Order export according to profile's transport order IOrderedEnumerable<SelectedEntity> orderedSelectedEntities = currentProfile.SelectedEntities.OrderBy(se => se.TransportOrder); foreach (SelectedEntity ee in orderedSelectedEntities) { if (worker.CancellationPending) { e.Cancel = true; return 0; } int percentage = 0; if (currentProfile.SelectedEntities.Count != 0) percentage = (int)(100 * treatedEntities / currentProfile.SelectedEntities.Count); worker.ReportProgress(percentage); treatedEntities++; currentlyTransportedEntity = ee.EntityName; LogManager.WriteLog("Exporting data for entity " + ee.EntityName); DateTime entityExportStartDT = DateTime.Now; string fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"; fetchXml += "<entity name='" + ee.EntityName + "'>"; //Get Entity structure EnvEntity strE = new EnvEntity(); foreach (EnvEntity envE in es.Entities) { if (envE.EntityName == ee.EntityName) { strE = envE; break; } } //Create fetchXML Query foreach (string ea in strE.Attributes) { if (ee.IgnoredAttributes == null) { fetchXml += "<attribute name='" + ea + "' />"; } else if (!ee.IgnoredAttributes.Contains(ea)) { fetchXml += "<attribute name='" + ea + "' />"; } } //Add Query filter fetchXml += ee.Filter; fetchXml += "</entity></fetch>"; int recordCountPerEntity = man.ExportEntity(currentProfile, fetchXml); recordCount += recordCountPerEntity; DateTime entityExportEndDT = DateTime.Now; TimeSpan ts = entityExportEndDT - entityExportStartDT; TransportReportLine transportReportLine = new TransportReportLine(); transportReportLine.Entity = ee.EntityName; transportReportLine.ExportedRecords = recordCountPerEntity; report.TotalExportedRecords += recordCountPerEntity; transportReportLine.ExportedIn = ts.ToString().Substring(0, 10); transportReportLine.ExportStartedAt = entityExportStartDT.ToString(); transportReportLine.ExportFinishedAt = entityExportEndDT.ToString(); report.ReportLines.Add(transportReportLine); man.WriteTransportReport(report, transportReportFileName); } } TimeSpan exportTimeSpan = DateTime.Now - exportStartDT; LogManager.WriteLog("Export finished for " + currentProfile.SourceConnectionName + ". Exported " + recordCount + " records in " + exportTimeSpan.ToString().Substring(0, 10)); return recordCount; } catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex) { //Stop Transport threads if running transportStopped = true; e.Cancel = true; MessageBox.Show("Error:" + ex.Detail.Message + "\n" + ex.Detail.TraceText); LogManager.WriteLog("Error:" + ex.Detail.Message + "\n" + ex.Detail.TraceText); } catch (Exception ex) { //Stop Transport threads if running transportStopped = true; e.Cancel = true; if (ex.InnerException != null) { MessageBox.Show("Error:" + ex.Message + "\n" + ex.InnerException.Message); LogManager.WriteLog("Error:" + ex.Message + "\n" + ex.InnerException.Message); } else { MessageBox.Show("Error:" + ex.Message); LogManager.WriteLog("Error:" + ex.Message); } } return 0; }
/// <summary> /// Updates the transport report. /// </summary> /// <param name="report">The report.</param> /// <param name="ee">The ee.</param> /// <param name="importedRecordsForEntity">The imported records for entity.</param> /// <param name="importFailuresForEntity">The import failures for entity.</param> /// <param name="entityImportStartDT">The entity import start dt.</param> public void updateTransportReport(TransportReport report, SelectedEntity ee, int importedRecordsForEntity, int importFailuresForEntity, DateTime entityImportStartDT) { bool addNewLine = true; foreach (TransportReportLine reportLine in report.ReportLines) { if (reportLine.Entity == ee.EntityName) { reportLine.ImportedRecords = importedRecordsForEntity; report.TotalImportedRecords += importedRecordsForEntity; DateTime entityImportEndDT = DateTime.Now; TimeSpan ts = entityImportEndDT - entityImportStartDT; reportLine.ImportStartedAt = entityImportStartDT.ToString(); reportLine.ImportFinishedAt = entityImportEndDT.ToString(); reportLine.ImportedIn = ts.ToString().Substring(0, 10); reportLine.ImportFailures = importFailuresForEntity; addNewLine = false; break; } } if (addNewLine) { TransportReportLine currentLine = new TransportReportLine(); currentLine.Entity = ee.EntityName; currentLine.ImportedRecords = importedRecordsForEntity; report.TotalImportedRecords += importedRecordsForEntity; DateTime entityImportEndDT = DateTime.Now; TimeSpan ts = entityImportEndDT - entityImportStartDT; currentLine.ImportStartedAt = entityImportStartDT.ToString(); currentLine.ImportFinishedAt = entityImportEndDT.ToString(); currentLine.ImportedIn = ts.ToString().Substring(0, 10); currentLine.ImportFailures = importFailuresForEntity; report.ReportLines.Add(currentLine); } WriteTransportReport(report, ReportFileName); }