1st April Post – The multi purpose method
Since it appears to be customary, I decided that I need to make a few posts for April 1st. Here is the second of them.
public void RemoveReversalsMoveCompletedMessagesAndFinishSubQueueMove(Guid transactionId) { Api.JetSetCurrentIndex(session, txs, "by_tx_id"); Api.MakeKey(session, txs, transactionId.ToByteArray(), MakeKeyGrbit.NewKey); if (Api.TrySeek(session, txs, SeekGrbit.SeekEQ) == false) return; Api.MakeKey(session, txs, transactionId.ToByteArray(), MakeKeyGrbit.NewKey); Api.JetSetIndexRange(session, txs, SetIndexRangeGrbit.RangeInclusive | SetIndexRangeGrbit.RangeUpperLimit); do { var queue = Api.RetrieveColumnAsString(session, txs, txsColumns["queue"], Encoding.Unicode); var bookmarkData = Api.RetrieveColumn(session, txs, txsColumns["bookmark_data"]); var bookmarkSize = Api.RetrieveColumnAsInt32(session, txs, txsColumns["bookmark_size"]).Value; var actions = GetQueue(queue); var bookmark = new MessageBookmark { Bookmark = bookmarkData, QueueName = queue, Size = bookmarkSize }; if (actions.GetMessageStatus(bookmark) == MessageStatus.Processing) actions.MoveToHistory(bookmark); else actions.SetMessageStatus(bookmark, MessageStatus.ReadyToDeliver); Api.JetDelete(session, txs); } while (Api.TryMoveNext(session, txs)); }
And yes, it is from real code, and it is going to production soon.

Comments
Comment preview