Example #1
0
        static ChangeRecord CreateCorrection(ChangeRecord originalChangeRecord, BusinessEntity businessEntity)
        {
            ChangeRecordNewData changeRecordNewData = originalChangeRecord.Payload as ChangeRecordNewData;

            changeRecordNewData.Entity = businessEntity;

            ChangeRecordCorrection changeRecordCorrection = new ChangeRecordCorrection();

            changeRecordCorrection.ChangeRecord = originalChangeRecord;

            return(new ChangeRecord(changeRecordCorrection));
        }
        void DisplayCorrection(ChangeRecord changeRecord)
        {
            ChangeRecordCorrection changeRecordCorrection = new ChangeRecordCorrection();

            changeRecordCorrection.ChangeRecord = changeRecord;

            UTF8EncodedStringWriter writer = new UTF8EncodedStringWriter();

            correctionSerializer.Serialize(writer, changeRecordCorrection);
            writer.Close();

            correctionTextBox.Text = writer.ToString();
        }
        private void correctionButton_Click(object sender, System.EventArgs e)
        {
            if (false == ValidatePublisher())
            {
                return;
            }

            try
            {
                ConnectionManager.BeginTransaction();

                //
                // Deserialize into a change record object
                //
                StringReader reader = new StringReader(correctionTextBox.Text);

                ChangeRecordCorrection changeRecordCorrection = ( ChangeRecordCorrection )correctionSerializer.Deserialize(reader);

                //
                // Validate what we created.
                //
                SchemaCollection.Validate(changeRecordCorrection);

                //
                // Create a new change record to hold the correction.
                //
                ChangeRecord changeRecord = new ChangeRecord(changeRecordCorrection);
                changeRecord.Process();
                ConnectionManager.Commit();

                //
                // If we made it this far, we were able to process the correction
                //
                MessageBox.Show("Correction processed!");

                //
                // Refresh our display.
                //
                ShowChangeRecord();
            }
            catch (Exception exception)
            {
                ConnectionManager.Abort();

                MessageBox.Show("An exception occurred when trying to process the correction:\r\n\r\n" + exception.ToString());
            }
        }
Example #4
0
        static ChangeRecord CreateChangeRecord(SqlDataReaderAccessor reader)
        {
            ChangeRecord changeRecord = null;

            XmlSerializer serializer = null;

            switch ((ChangeRecordPayloadType)reader.GetShort("changeTypeID"))
            {
            case ChangeRecordPayloadType.ChangeRecordNull:
                serializer = new XmlSerializer(typeof(ChangeRecordNull));
                break;

            case ChangeRecordPayloadType.ChangeRecordNewData:
                serializer = new XmlSerializer(typeof(ChangeRecordNewData));
                break;

            case ChangeRecordPayloadType.ChangeRecordDelete:
                serializer = new XmlSerializer(typeof(ChangeRecordDelete));
                break;

            case ChangeRecordPayloadType.ChangeRecordPublisherAssertion:
                serializer = new XmlSerializer(typeof(ChangeRecordPublisherAssertion));
                break;

            case ChangeRecordPayloadType.ChangeRecordHide:
                serializer = new XmlSerializer(typeof(ChangeRecordHide));
                break;

            case ChangeRecordPayloadType.ChangeRecordDeleteAssertion:
                serializer = new XmlSerializer(typeof(ChangeRecordDeleteAssertion));
                break;

            case ChangeRecordPayloadType.ChangeRecordAcknowledgement:
                serializer = new XmlSerializer(typeof(ChangeRecordAcknowledgement));
                break;

            case ChangeRecordPayloadType.ChangeRecordCorrection:
                serializer = new XmlSerializer(typeof(ChangeRecordCorrection));
                break;
            }

            StringReader stringReader = new StringReader(reader.GetString("changeData"));

            try
            {
                changeRecord = new ChangeRecord();

                changeRecord.AcknowledgementRequested = (reader.GetInt("flag") & (int)ChangeRecordFlags.AcknowledgementRequested) > 0;
                changeRecord.ChangeID.NodeID          = reader.GetString("OperatorKey");
                changeRecord.ChangeID.OriginatingUSN  = reader.GetLong("USN");

                ChangeRecordBase changeRecordBase = ( ChangeRecordBase )serializer.Deserialize(stringReader);
                if (changeRecordBase is ChangeRecordCorrection)
                {
                    //
                    // The query to find change records will do correction 'fixups'.  That is, the changeData of this
                    // change record will be replaced with the changeData from the correction.  The problem with this is
                    // that the original change data will now look like a correction.  To distinguish these types of
                    // change records, we look to see if the OriginatingUSN's match.  If the OriginatingUSN's match,
                    // we want they payload of the change record in this correction.  This payload will contain the
                    // corrected data that we want.
                    //
                    ChangeRecordCorrection changeRecordCorrection = ( ChangeRecordCorrection )changeRecordBase;
                    if (changeRecordCorrection.ChangeRecord.ChangeID.OriginatingUSN == changeRecord.ChangeID.OriginatingUSN)
                    {
                        changeRecordBase = changeRecordCorrection.ChangeRecord.Payload;
                    }
                }

                changeRecord.Payload = changeRecordBase;
            }
            finally
            {
                stringReader.Close();
            }

            return(changeRecord);
        }