/// <summary> /// Log Integration Process Transaction /// </summary> /// <param name="pResponse"></param> internal void LogIntegrationProcessTransaction(ProcessExecutionResponse pResponse) { try { //5 - Log the Transaction in the 'IntegrationTransactions' table with some usefull information about the output of the integration process. if (pResponse.IntegrationProcessMetadata != null && pResponse.DestinationAdapterResponse != null) { //Initialize Main Integration Transaction Log IntegrationTransaction transaction = new IntegrationTransaction { IntegrationProcessID = pResponse.IntegrationProcessMetadata.IntegrationProcessID, IntegrationTransactionTitle = string.Format("{0} - {1}", pResponse.IntegrationProcessMetadata.IntegrationProcessTitle, pResponse.Request.RequestDate.ToStandardFormat(true)), IntegrationTransactionDate = DateTime.Now, TransactionStatus = (int)pResponse.Status, Description = pResponse.StatusDescription, RecordStatus = (int)RecordAuditStatus.Active, RecordCreated = DateTime.Now, RecordCreatedBy = Constants.SystemUser, RecordLastUpdate = DateTime.Now, RecordLastUpdateBy = Constants.SystemUser, IntegrationTransactionDetails = new Collection <IntegrationTransactionDetail>() }; foreach (DBRecordInfo dbRecordInfo in pResponse.DestinationAdapterResponse.Results) { transaction.IntegrationTransactionDetails.Add(new IntegrationTransactionDetail { IntegrationTransactionDetailStatus = dbRecordInfo.RecordTransactionStatus.GetValue <Byte>(), IntegrationTransactionDetailData = CoreUtilities.ConstructXmlFromRecord(dbRecordInfo), Description = string.Format("{0}-{1}", dbRecordInfo.DbRecordID, dbRecordInfo.RecordTransactionStatus.GetDescription()), RecordStatus = (int)RecordAuditStatus.Active, RecordCreated = DateTime.Now, RecordCreatedBy = Constants.SystemUser, RecordLastUpdate = DateTime.Now, RecordLastUpdateBy = Constants.SystemUser, }); } base.AppRuntime.DataService.AddEntity(transaction); base.AppRuntime.DataService.SaveChanges(); } } catch (Exception ex) { LogManager.LogException(ex); } }
/// <summary> /// Get Integration Transaction Details /// </summary> /// <param name="pIntegrationTransactionID"></param> /// <returns></returns> public DataTable GetIntegrationTransactionDetails(int pIntegrationTransactionID) { DataTable dtResults = null; IntegrationTransaction transaction = null; try { dtResults = new DataTable(Constants.TableName_Results); transaction = base.AppRuntime.DataService.GetEntity(GetDataRequest <IntegrationTransaction> .Create(c => c.IntegrationTransactionID == pIntegrationTransactionID, "IntegrationProcess.IntegrationProcessMappings.SourceIntegrationAdapterField", "IntegrationProcess.IntegrationProcessMappings.DestinationIntegrationAdapterField", "IntegrationTransactionDetails")); if (transaction != null) { DataColumn col_ID = new DataColumn(Constants.ColumnName_ID, typeof(Int32)); dtResults.Columns.Add(col_ID); DataColumn col_RecordStatus = new DataColumn(Constants.ColumnName_RecordStatus, typeof(String)); dtResults.Columns.Add(col_RecordStatus); if (transaction.IntegrationProcess != null) { List <string> columns = new List <string>(); foreach (IntegrationProcessMapping mappingItem in transaction.IntegrationProcess.IntegrationProcessMappings.Where(c => c.DestinationIntegrationAdapterField != null)) { if (!dtResults.Columns.Contains(mappingItem.DestinationIntegrationAdapterField.FieldName)) { DataColumn dcMappingField = new DataColumn( mappingItem.DestinationIntegrationAdapterField.FieldName, DataUtilities.GetMappedType(mappingItem.DestinationIntegrationAdapterField.FieldDataTypeEnum)); dtResults.Columns.Add(dcMappingField); columns.Add(dcMappingField.ColumnName); } } foreach (IntegrationTransactionDetail detail in transaction.IntegrationTransactionDetails) { try { DataRow drDetail = dtResults.NewRow(); drDetail[col_ID] = detail.IntegrationTransactionDetailID; drDetail[col_RecordStatus] = ((RecordTransactionStatus)detail.IntegrationTransactionDetailStatus).GetDescription(); StringReader dataReader = new StringReader( CoreUtilities.GetString(detail.IntegrationTransactionDetailData)); XElement xData = XElement.Load(dataReader); foreach (XElement item in xData.Nodes()) { string columnName = CoreUtilities.FormatXMLColumnName(item.Name.LocalName, false); if (columnName != Constants.ColumnName_RecordStatus && drDetail.Table.Columns.Contains(columnName)) { drDetail[columnName] = DataUtilities.ConvertValueToDataColumnType( item.Value, drDetail.Table.Columns[columnName].DataType); } } dtResults.Rows.Add(drDetail); } catch (Exception ex) { LogManager.LogException(ex); } } } } } catch (Exception ex) { LogManager.LogException(ex); } finally { transaction = null; } return(dtResults); }