TL:DR- Aborted queued messages to purge them.
I had the same problem trying to purge our development namespace so we could flush it clean for fresh unit test messages.
Messages still in progress will not be deleted. That means if there is a single message queued on one of the interfaces, all messages related to it will not be purged. Abort the queued message, and purge will work.
For example, one of our ADT messages goes to 15 different interfaces. One of the 15 is disabled and queued the message. That locks all 15 messages from being purged as technically, the production isn't fully resolved.
Solved the problem. In the subtransforms <transform ... > header, set "create" to equal 'existing'. By default if it's not specified it makes it mean 'new'.
Link to the documentation: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...
Example:
Thank you for your response.
You were correct, I needed to make a custom Operation that extends the TCPOperation and I intercept the ACK messages in there.
What I did for anyone else that runs into this issue:
Overload " Method OnGetReplyAction(" Call the "##super" to set the response by default.
Then interrogate the ACK for the MSA:3 text and using a Data Lookup Table I am configuring text values as a key like "Failed to queue message" and setting the value as the response code. S for Suspended in this example.
Overwrite the response with your DLT response code and boom. Suspending messages based on MSA text field without removing default Reply Action Code behaviour completely.