/// <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(NtoNAssociationsTransportProfile profile, string transportReportFileName) { NtoNTransportReport report = null; try { report = new NtoNTransportReport(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(); NtoNRelationshipsStructure es = ReadEnvStructure(profile.SourceConnectionName); _serviceProxy = cm.connect(connection); IOrganizationService service = (IOrganizationService)_serviceProxy; List<NtoNTransportReportLine> TransportReport = new List<NtoNTransportReportLine>(); profile.TotalExportedRecords = 0; //Mesure export time DateTime exportStartDT = DateTime.Now; LogManager.WriteLog("Start exporting data from " + connection.ConnectionName); int recordCount = 0; if (es != null) { foreach (SelectedNtoNRelationship ee in profile.SelectedNtoNRelationships) { LogManager.WriteLog("Exporting data for relationship " + ee.RelationshipSchemaName); DateTime entityExportStartDT = DateTime.Now; string fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"; fetchXml += "<entity name='" + ee.IntersectEntityName + "'>"; //Get Entity structure NtoNRelationship strE = new NtoNRelationship(); foreach (NtoNRelationship envE in es.NtoNRelationships) { if (envE.IntersectEntityName == ee.IntersectEntityName) { strE = envE; fetchXml += "<attribute name='" + strE.Entity1IntersectAttribute + "' />"; fetchXml += "<attribute name='" + strE.Entity2IntersectAttribute + "' />"; if (ee.IntersectEntityName == "listmember" || ee.IntersectEntityName == "campaignitem") fetchXml += "<attribute name='entitytype' />"; else if (ee.IntersectEntityName == "campaignactivityitem") fetchXml += "<attribute name='itemobjecttypecode' />"; break; } } //Add Query filter int objectTypeCode = 0; if (ee.Entity2LogicalName == "account") objectTypeCode = 1; else if (ee.Entity2LogicalName == "campaign") objectTypeCode = 4400; else if (ee.Entity2LogicalName == "contact") objectTypeCode = 2; else if (ee.Entity2LogicalName == "lead") objectTypeCode = 4; else if (ee.Entity2LogicalName == "list") objectTypeCode = 4300; else if (ee.Entity2LogicalName == "product") objectTypeCode = 1024; else if (ee.Entity2LogicalName == "salesliterature") objectTypeCode = 1038; if (ee.IntersectEntityName == "campaignitem") fetchXml += "<filter type='and'><condition attribute='entitytype' operator='eq' value='" + objectTypeCode + "' /></filter>"; else if (ee.IntersectEntityName == "campaignactivityitem") fetchXml += "<filter type='and'><condition attribute='itemobjecttypecode' operator='eq' value='" + objectTypeCode + "' /></filter>"; fetchXml += "</entity></fetch>"; int recordCountPerEntity = ExportEntity(profile, fetchXml, ee.RelationshipSchemaName); recordCount += recordCountPerEntity; DateTime entityExportEndDT = DateTime.Now; TimeSpan ts = entityExportEndDT - entityExportStartDT; NtoNTransportReportLine transportReportLine = new NtoNTransportReportLine(); transportReportLine.RelationshipSchemaName = ee.RelationshipSchemaName; 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> /// Updates the transport report. /// </summary> /// <param name="report">The report.</param> /// <param name="ee">The Selected N to N Relationship.</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(NtoNTransportReport report, SelectedNtoNRelationship ee, int importedRecordsForEntity, int importFailuresForEntity, DateTime entityImportStartDT) { bool addNewLine = true; foreach (NtoNTransportReportLine reportLine in report.ReportLines) { if (reportLine.RelationshipSchemaName == ee.RelationshipSchemaName) { 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) { NtoNTransportReportLine currentLine = new NtoNTransportReportLine(); currentLine.RelationshipSchemaName = ee.RelationshipSchemaName; 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); }