public override bool InitializeOutputFields() { CacheTable = PrimaryTransform.CacheTable.Copy(); //add the operation type, which indicates whether record is rejected 'R' or 'C/U/D' create/update/delete if (CacheTable.Columns.SingleOrDefault(c => c.DeltaType == TableColumn.EDeltaType.DatabaseOperation) == null) { CacheTable.Columns.Insert(0, new TableColumn("Operation", ETypeCode.Byte) { DeltaType = TableColumn.EDeltaType.DatabaseOperation }); } //add the rejection reason, which details the reason for a rejection. if (CacheTable.Columns.SingleOrDefault(c => c.DeltaType == TableColumn.EDeltaType.RejectedReason) == null) { CacheTable.Columns.Add(new TableColumn("RejectReason", ETypeCode.String) { DeltaType = TableColumn.EDeltaType.RejectedReason }); } //add the rejection reason, which details the reason for a rejection. if (CacheTable.Columns.SingleOrDefault(c => c.DeltaType == TableColumn.EDeltaType.ValidationStatus) == null) { CacheTable.Columns.Add(new TableColumn("ValidationStatus", ETypeCode.String) { DeltaType = TableColumn.EDeltaType.ValidationStatus }); } //store reject column details to improve performance. _rejectReasonOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.RejectedReason); if (_rejectReasonOrdinal >= 0) { _rejectReasonColumnName = CacheTable.Columns[_rejectReasonOrdinal].Name; } _operationOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.DatabaseOperation); _validationStatusOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.ValidationStatus); _primaryFieldCount = PrimaryTransform.FieldCount; _columnCount = CacheTable.Columns.Count; _mapFieldOrdinals = new List <int>(); for (var i = 0; i < _primaryFieldCount; i++) { _mapFieldOrdinals.Add(GetOrdinal(PrimaryTransform.GetName(i))); } return(true); }
private object[] GetRow(DynamicTableEntity currentEntity) { var row = new object[CacheTable.Columns.Count]; var partitionKeyOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.AzurePartitionKey); if (partitionKeyOrdinal >= 0) { row[partitionKeyOrdinal] = currentEntity.PartitionKey; } var rowKeyOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.AzureRowKey); if (rowKeyOrdinal >= 0) { row[rowKeyOrdinal] = currentEntity.RowKey; } var timestampOrdinal = CacheTable.GetDeltaColumnOrdinal(TableColumn.EDeltaType.TimeStamp); if (timestampOrdinal >= 0) { row[timestampOrdinal] = currentEntity.Timestamp; } foreach (var value in currentEntity.Properties) { var returnValue = value.Value.PropertyAsObject; if (returnValue == null) { row[CacheTable.GetOrdinal(value.Key)] = DBNull.Value; } else { row[CacheTable.GetOrdinal(value.Key)] = _connection.ConvertEntityProperty(CacheTable[value.Key].DataType, returnValue); } } return(row); }