Have a look at %Regex.Matcher. Since you always want the 2nd capitalized section you can just make that your regex capture group:

    set matcher=##class(%Regex.Matcher).%New("^[A-Z][a-z]*([A-Z][a-z]*)")                             
    set matcher.Text="ToVendornameORM"
    if matcher.Locate() {
        write "Found ",matcher.Group(1)," at position ",matcher.Start,!
    }

This gives me the output:

Found Vendorname at position 1

During a period when messages are processing slowly, can you check the queues page (Ensemble >> Monitor >> Queues) and see if there are messages waiting to be processed?

The next step would be to collect some pButtons data to see if there's a performance bottleneck on the system:
https://community.intersystems.com/post/intersystems-data-platforms-and-...

Even before running the pButtons it would be worth doing a quick check in the OS to see which processes (Ensemble and non-Ensemble processes) are using the most CPU and RAM.

This is typically handled by data lookup tables. Lookup table entries can be maintained through a provided GUI, imported from files or through custom code:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/DocBook.UI...

DTL includes pre-built functions for looking up values in a lookup table:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View.c...

Hi Adam,

I'm not familiar with XLT, so I don't have any examples of converting XLT to DTL.

Here's some more information on executing XSLT transformations from a BPL:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/DocBook.UI...

Or you can execute an XSLT transformation directly from COS:
https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View.c...