Upgrading to Ignition 8 UDT Param Tag Path

I am testing out upgrading my server functions to Ignition 8, and the first and biggest issue I am running into at the moment is my Alarm UDT.
Which takes a direct tag path to the alarm tag, and puts an alarm on it.
How I do this is I have a

PV Tag

UDT parameter, that I put in as the following


then in the Alarm PV tag inside the UDT, it has the following expression

{PV Tag}

which points the alarm PV tag inside the UDT, to an external OPC tag for alarming.

After updating to 8.0.3, this no longer works.
I have trend putting


around the {PV Tag} in the expression, and tried using


to remove the {} surrounding the tag path, neither have worked.
Unfortunately, I have several thousand alarms configured this way so going through and manually adjusting the UDT Parameters is not a very attractive option since I would have to modify the UDT first, then go through individual tags.

So if it is possible to manipulate the UDT Parameter to properly point to the external tag that would be ideal.

For reference, this is the expression I have been using.

// Desired Outcome
// ‘[default]Testing/Alarm_Bool’
// Input from {PV Tag} Parameter
// {Testing/Alarm_Bool}
tag(replace(replace({PV Tag}, “{”, “[default]”), “}”,""))

The only feedback I have for tag diagnostics is

[null, Bad_NotFound, Tue Sep 03 14:07:43 PDT 2019 (1567544863448)]

I’m struggling to picture your config, can you add some screenshots to accompany your text?

Sorry about that, I’ve been out of the office the last couple days.
Here are some screenshots of the UDT parameters and the expression for my expression tag.


You’ve hit on a very nuanced use case here… in 7.9 and previously, UDT parameters were “pre-compiled” into properties that referenced them. So in this case, before the expression tag was built, the expression would be swapped from “{PV Tag}” to “{Testing/Alarm_Bool}”, and then when it was built, it would see that as a valid tag reference in the expression.

Strangely enough, I haven’t come across anyone else doing this. Typically people would have had the parameter be the straight path, "“Testing/Alarm_Bool”, and then the expression would have been:

tag("{PV Tag}")

… which was always confusing, because of the quotes. In 8, parameter references act as standard references, and the upgrade logic in 8 would handle this, changing it to just:

tag({PV Tag})

So the easy answer I can give to you is to change to that style. Have your parameter be a tag path, without brackets, and use the tag() function in your expression.

I’m having a hard time, at the moment, imagining how we’d be able to exactly support this type of behavior. We’d basically have to look for a case that a parameter value reference comes through with the “{…}” syntax, and then follow it out. I suppose it could be done… but I think if it’s not too burdensome for you to change your style, it will ultimately be more understandable/maintainable for you down the road (I’ll admit: I thought that the way this was working in 7.9 was due to the parameter being bound to a tag… which I was pretty sure wasn’t possible! We might allow that in 8 down the road, but it definitely didn’t work in 7. Too me a second to realize that).

Thanks for the response @Colby.Clegg.
The more I’ve looked into the new tag types in 8 I’ve been thinking reworking my alarm structure is the way to go, using reference tags instead of expression tags.
Funny that you mentioned the quotes around the parameter because thats originally why I went with a direct parameter reference 3-4 years ago when I built my alarm UDT, then figured out how to properly use the tag() function later down the road.