User Tools

Site Tools


add_incomingvalue_last_lineofscript

incomingValue; must be added to the end of all scripts

Why?

To avoid a script running multiple times when there is an error in the script (especially at runtime) the script will not complete execution unless there is an incomingValue; (or any other output, such as a calculated value) as the very last line of a script.

For example if you do this:

if (incomingValue.getQuality()==0) {
  //do something here
} else {
  //do nothing
}

There is no final value calculated so this script will execute exactly one time after the application starts up

If you do this:

if (incomingValue.getQuality()==0) {
  //do something here
} else {
  //do nothing
}
incomingValue;

This is also OK (there is an output at the end)

if (incomingValue.getQuality()==0) {
  status=2;
} else {
  status=-1;
}
status;

this script will execute every time a new value is received by the script which is likely what you intend to happen.

This is a change which was implemented in early 2024 so if you have old projects without this final “incomingValue;” you can add this last line in the script manually to every script, or you can use the steps below (please make a copy of your project before doing this in case there is a corruption of the file after the process).

How to add incomingValue; to every script in a .tsx (TransSECS project file)

Expert Only, Be careful when manually editing project files. Backup your work!

- Make a copy of your project tsx (as a backup) - Exit TransSECS (TransSECS should not be running) - On Windows use Notepad++ to load the project tsx. You can change the language to XML, but this is not necessary

Note: this is a two pass process. The first step is to mark all existing outputs strings just before the end of the script (any string ending with “;”) with "<!--OK-->" to keep them. The second step is to add “incomingValue;” where they are missing before the end of the script
First Pass: replace all existing "incomingValue;" so these are preserved
  1. Use Ctrl-H to bring up the panel for the Find and Replace
  2. Set up the Replace:
    • Search Mode: Regular Expression
    • Find what: (;)\s*</Script>
    • Replace with: \1<!--OK--></Script>
  3. Execute the replace: Click Replace All

What this does is find any string(or just ;) with a “;” just before the end of the script (the </Script> tag) and replaces this with a place holder marking it as “OK”. You should see a count on the bottom bar of this panel of how many of these valid strings were found. In the second pass, below, we look for end of script tags (</Script>) which do not end with a ; and fix them:

Second Pass: add new incomingValue; where needed to end a script (and ignore the incomingValue; already in place)
  1. Set up the Replace:
    • Search Mode: Regular Expression
    • Find what: (?<!<!--OK-->)</Script>
    • Replace with: incomingValue;</Script>
  2. Execute the replace: Click Replace All

On this last pass you can add a comment to the replacement line, such as incomingValue; <!--fixed today--> , and put today's date in place of “today”

Note: the OK comment <!--OK--> and other comments added in these steps will be removed after you load the project into TransSECS and re-save.

This procedure should help you modify projects using scripts in which there is no output at the end of the script. However, it is good to do a quick check of your project after these changes. Also there can be some casese where incomingValue; is not inserted before the end of the script because the last line in the script ended with a ; and there is no output on that line. For example, if your last line was a DataSource.logMessage(“some message”); this will not get an incomingValue; added and logMessage does not return a value so this can still cause the script not to execute the next time it is triggered. If you had a method call on the last line which does return a value then this satisfies the output requirement. Likewise if your last line was a comment such as "//this is a comment" then a new incomingValue; will be added.

add_incomingvalue_last_lineofscript.txt · Last modified: by wikiadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki