If the Caché account name is the same as the OS account name, select System Administration | Security | System Security | Authentication/CSP Session Options and check Allow Operating System authentication. You'll automatically  be logged on using an account with the same name as the OS account, assuming one has been created in Caché, and will have all permissions set for that account and its roles.

If you don't care who you're logged in as, enable Allow Unauthenticated Access on the same page and make sure the UnknownUser account is enabled. You'll still be prompted for user/password, but you can press enter twice to bypass. You'll then have all permissions that have been set for UnknownUser and its associated roles.

You can treat a lookup table (Ens.Util.LookupTable) like any SQL table, using the LIKE operator to perform either "contains" ('%strval%') or "StartsWith" ('%strval') searches, but I don't think that's what you're really looking for. I'm thinking that, based on the logic you supplied, you're looking for two tables: One containing keys that you will use as "StartsWith" strings, and the other as "Contains" strings. You'd like to iterate through one table for your "Contains" comparisons, checking each AIL:3.2 against each key. And for your "StartsWith" comparisons, the other table. This would keep it maintainable in the Ensemble section of the Management Console, but you'd only really be populating the KeyName field. Wrapped in a couple of FunctionSet methods, this would simplify your rule considerably.

But here are some examples of "Contains" vs. "StartsWith" queries against Ens.Util.LookupTable, just in case:

ISYSDEV>>select KeyName from Ens_Util.LookupTable where TableName = 'ALLERGY_CODES' and KeyName LIKE '%mon%'
12.     select KeyName from Ens_Util.LookupTable where TableName = 'ALLERGY_CODES' and KeyName LIKE '%mon%'
KeyName
Almonds
almonds
cinnamon
lemons
4 Rows(s) Affected
statement prepare time: 0.1417s, elapsed execute time: 0.0011s.
---------------------------------------------------------------------------

 

ISYSDEV>>select KeyName from Ens_Util.LookupTable where TableName = 'ALLERGY_CODES' and KeyName LIKE 'cin%'
13.     select KeyName from Ens_Util.LookupTable where TableName = 'ALLERGY_CODES' and KeyName LIKE 'cin%'
KeyName
cinnamon
1 Rows(s) Affected
statement prepare time: 0.0006s, elapsed execute time: 0.0003s.
---------------------------------------------------------------------------

Here's a potential solution. It's a method that will extract the %Source value from the message, and it should work for any Ensemble message type:

Class User.Util.MsgBody Extends Ens.Rule.FunctionSet

{

 

ClassMethod GetMsgSource(pMsg As Ens.Request) As %String

 {

       Return pMsg.%Source

 }

 

}

Since it extends Ens.Rule.FunctionSet, it's available as a function in the rule editor:

So, here's where the ability to write a little custom function in COS for use in the Routing Rule engine comes in handy. You may need to modify the HL7 paths depending on the schema you're using:

Class User.Util.FunctionSet Extends Ens.Rule.FunctionSet

{

 

ClassMethod CheckMrnDupForFac(pMsg As EnsLib.HL7.Message, pFac As %String) As %Boolean

{

       Set tPid3Cnt = pMsg.GetValueAt("PIDgrp(1).PID:3(*)")

       Set tMrg1Cnt = pMsg.GetValueAt("PIDgrp(1).MRG:1(*)")

       for i=1:1:tPid3Cnt

       {

             If pMsg.GetValueAt("PIDgrp(1).PID:3("_i_").5") = pFac

             {

                    Set tPidMrn = pMsg.GetValueAt("PIDgrp(1).PID:3("_i_").1")

                    for j=1:1:tMrg1Cnt

                    {

                          Set tMrgMrn = pMsg.GetValueAt("PIDgrp(1).MRG:1("_j_").1")

                          if (pMsg.GetValueAt("PIDgrp(1).MRG:1("_j_").5") = pFac) && (tPidMrn '= tMrgMrn)

                          {

                                 Return 1

                          }

                    }

             }

       }

       Return 0

}

 

}

(updated for readability/word-wrap)

The method above will return true only when CKS entries exist in both fields and are different. Your specific needs may vary :)

It will be available in the function drop-down list in the rule editor.

Thanks, Marc, that's what I'm doing now, including the creation of some custom functions to get at things like child node counts that aren't normally accessible via EnsLib.MsgRouter.RoutingEngine. An efficient mechanism for conversion of a Cache object to class EnsLib.EDI.XML.Document would have given me access to all of that VDoc's methods with minimal coding, though.