On Dec 15, 2015, at 8:17 AM, Franks Andy (IT Technical Architecture Manager) <Andy.Franks@sath.nhs.uk> wrote:
Has anyone had any direct experience with using "%{xlat:..}". I can't seem to find much about using it directly, obviously xlats are used in ldap/sql/files etc a lot, any time you want to do anything directly outside a module, and they are super-useful but I haven't seen this used before to allow resolution of various levels of variable.
The "%{foo}" thing is a normal expansion. The difficulty is that sometimes you want to build custom expansions at run-time, and the server doesn't allow for that. e.g. if you build the expansion like this: update request { Tmp-String-0 := "sql:SELECT ..." } Then doing this: Foo = "%{Tmp-String-0}" will get you the *string value* of Tmp-String-0. It won't run the expansion you've put into that string. The solution is %{xlat:...}. It does *another* round of expansion on the input string. So if "%{Tmp-String-0}" gets you the string for the SQL expansion, then "%{xlat:%{Tmp-String-0}}" will run the SQL expansion, and call SQL.
I can't get it to do much, tried a simple:
Update control { Tmp-Integer-0 := 3 Tmp-String-1 := "%{control:Tmp-Integer-0}" Tmp-String-1 := "%{xlat:%{control:Tmp-Integer-0}}" }
Well, yes. Integers aren't strings. The xlat expansion of "3" is equivalent to "%{3}". Which is empty if you haven't done any regular expression matching.
.. the first works as it should, but this xlat one is a mystery. Sorry for being a bit thick, possibly got it completely wrong. I could do a switch .. case dependent on a tracked variable, but it's not very nice and would result it lots of identical code blocks to maintain.
Sorry to be a pain, I did search around first even had a look at the source code, but it hurts my head.
No worries. Sometimes it hurts *my* head, and I've been doing this for almost 20 years. Alan DeKok.