public AuditEntry CreateAuditEntry(string auditOperation, string tableName, Dictionary <string, string> entityKeys) { this.LogMessage("Creating audit entry for operation:" + auditOperation + ", table:" + tableName + ", key1:" + entityKeys.First().Value); AuditEntry auditEntry = null; DataRow rowData = null; if (auditOperation != "D") { rowData = DataAbstractLayer.GetDataForRow(tableName, entityKeys); } if (rowData != null || auditOperation == "D") // We might get null rowData here if the target row has been deleted { auditEntry = new AuditEntry(); switch (auditOperation) { case "U": auditEntry.type = "update"; break; case "I": auditEntry.type = "insert"; break; case "D": auditEntry.type = "delete"; break; } auditEntry.table = tableName; int pkCounter = 0; //primary key counter foreach (KeyValuePair <string, string> tmpKVP in entityKeys) { //Need to get the Column Name, which is the Key switch (pkCounter) { case 0: auditEntry.primaryKeyName0 = tmpKVP.Key; break; case 1: auditEntry.primaryKeyName1 = tmpKVP.Key; break; case 2: auditEntry.primaryKeyName2 = tmpKVP.Key; break; } pkCounter++; } if (auditOperation != "D") { // Add data retrieved from database to the audit entry foreach (DataColumn item in rowData.Table.Columns) { auditEntry.row.Add(item.ColumnName, rowData.IsNull(item.ColumnName) ? "dbnull" : rowData[item.ColumnName].ToString()); } } else { // Add key data to the audit entry foreach (KeyValuePair <string, string> tmpKVP in entityKeys) { auditEntry.row.Add(tmpKVP.Key, tmpKVP.Value); } } } return(auditEntry); }
public void CreateAuditFiles(DateTime lastExportDate) { this.LogMessage("Audit File Creation Starting"); List <AuditEntry> auditEntryList = new List <AuditEntry>(); IDataReader tbAuditRecords = DataAbstractLayer.RecentAuditTable(lastExportDate); int rowCount = 0; while (tbAuditRecords.Read()) { // Save the date from the last audit record this.lastAuditDate = tbAuditRecords.GetDateTime(tbAuditRecords.GetOrdinal("AuditDate")); string auditOperation = tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("Operation")); // dr["Operation"].ToString(); string auditEntity = tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityName")); // dr["EntityName"].ToString(); Dictionary <string, string> entityKeys = new Dictionary <string, string>(); entityKeys.Add(primaryKeyNames[tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityName"))], tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityKey1"))); //this relies on key count, not as flexible as rest of system if (!tbAuditRecords.IsDBNull(tbAuditRecords.GetOrdinal("EntityKey2"))) { if (!string.IsNullOrEmpty(tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityKey2")))) { entityKeys.Add(primaryKeyNames[tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityName")) + 1], tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityKey2"))); } } if (!tbAuditRecords.IsDBNull(tbAuditRecords.GetOrdinal("EntityKey3"))) { if (!string.IsNullOrEmpty(tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityKey3")))) { entityKeys.Add(primaryKeyNames[tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityName")) + 2], tbAuditRecords.GetString(tbAuditRecords.GetOrdinal("EntityKey3"))); } } AuditEntry auditEntry = CreateAuditEntry(auditOperation, auditEntity, entityKeys); if (auditEntry != null) { auditEntryList.Add(auditEntry); auditRows.Add(auditOperation); rowCount++; if (rowCount >= 100000) { // Serialize the audit records into a JSON object string retJSON = JsonConvert.SerializeObject(auditEntryList); // Write JSON to a file this.CreateExportFile(retJSON); auditEntryList.Clear(); rowCount = 0; } } } if (rowCount > 0) { // Serialize the audit records into a JSON object string retJSON = JsonConvert.SerializeObject(auditEntryList); // Write JSON to a file this.CreateExportFile(retJSON); } this.LogMessage("Audit File Creation Complete"); }