Scripts and the .NET Framework
Introduction
All programming in the FactoryStudio application consists of C# or Visual Basic 100% managed code designed to run in the Microsoft .NET framework. Users may create scripts in these languages that are run periodically or when specified events occur. The following sections describe how to create and work with these scripts:


When you are using the code editor, the system constantly compiles the code in the background. You can also build the whole project, as needed. For more information, see "Running the Application" in Chapter 12.
.i.libraries:Visual Studio;
.i.libraries:built-in methods;
.i.toolkit:Visual Studio library;
.i.toolkits:built-in methods;
.i.runtime objects reference;
For more information about the runtime objects included in FactoryStudio, see the RuntimeObjects.pdfthe Runtime Objects sectionRuntimeObjects.html.
Two .Net libraries are available for use with FactoryStudio:

Configuring Tasks
.i.creating:scripts;
.i.configuring:tasks;
.i.tasks:configuring;
.i.scripts:configuring tasks;
Tasks are program units, written in VB.Net or C#, that execute either when a trigger event occurs or periodocally at specified intervals. FactoryStudio includes the following built-in tasks:


To configure tasks:

  1. Go to Edit > Scripts > Tasks.
  2. Select a task name, or select the insert row (first row) to create a new task.
  3. Enter or select information, as needed.


Column

Description

Name

Enter a name for the task. The system lets you know if the name is not valid.

Code

Read-only. This specifies the language used for the code for this task. By default this is the language selected when you created the project. From the Code Editor tab, you can change the code language. To change the project default, go to Info > Settings.

Trigger

Enter or select the event (tag or other object) that should trigger the task execution, if any. The task executes when the value of the object changes.

Period

Enter the time interval that should occur between executions of the task, if there is no trigger.

Domain

Select where the script executes:

  • Client—Task executes on each client system. These are tasks that apply locally (on the user's computer), for example, report generation.
  • Server—Task executes on the server system. These are tasks that apply across the application, that is, globally.

InitialState

Select the task's initial state:

  • Enabled—Task is ready to run.
  • Disabled—Task is not ready to run. You may enable the task under specific conditions.

BuildStatus

Read-only. Status of the task code from the continuous compiling process.

  • Green check mark—Task runs without errors.
  • Red X—Task has warnings or errors. Double-click to go to the warning or error. Warnings are information only. Errors will prevent the code from running, but only that specific task. The rest of the application will run.

BuildErrors

Read-only. Displays any errors encountered during the last build.

EditSecurity

Set the security to enable who can edit the tasks

Description

Enter a description of this task.


    1. Double-click the row to access the Code Editor tab. You can now enter or edit the code for the task. See "Working with the Code Editor" below.
    2. Click Save.

Configuring Classes
.i.creating:classes;
.i.scripts:configuring classes;
.i.classes:configuring;
Classes let you create a repository of class libraries, methods, and functions that you can use across the application. You can call them from tasks, other classes, and displays (code behind).
FactoryStudio comes with the following built-in classes:

To configure classes:

  1. Go to Edit > Scripts > Classes.
  2. Select a class name, or select the insert row (first row) to create a new class.
  3. Enter or select information, as needed.

    Column

    Description

    Name

    Enter a name for the class. The system lets you know if the name is not valid.

    Code

    Read-only. This specifies the language used for the code for this task. By default this is the language selected when you created the projec From the Code Editor tab, you can change the code language. To change the project default, go to Info > Settings.

    Domain

    Select where the class executes:


  1. Double-click the row to access the Code Editor tab. You can now enter or edit the code for the class. See "Working with the Code Editor" below.
  2. Apply all namespaces that will be used in your code, e.g.
        1. "Using System"
        2. "System.IO.StremReader"
  3. Click Save.

Working with the Code Editor
Editing Code
.i.code:editing;
.i.editing:scripts;
.i.scripts:editing;
.i.code editor:using;
You can write code in either standard VB.Net or C#. You can also switch between the two. If you change your language selection in the code editor, the system automatically converts existing code to the selected language.
If you need references to your own assemblies, you can use Run > Build > References.
As a fully compliant .NET application, you can find free source code to use, including .NET components, products, and libraries, plus your own libraries that you can use right away.
FactoryStudio does expose many .NET libraries to the application, but there are a few methods that are very frequently required, such as type conversion or copying tags to DataTables or .NET objects, or dynamically changing the communication settings. Those methods are included in a library toolkit. To use those methods, you just need to put TK. in the code editor. Intellisense will respond with a list of all available methods, and provide summary documentation of any method you select.
Example:
double x = TK.ConvertTo<double>("123");
To edit code:

Using the .NET Debugger
Creating debugger Information
FactoryStudio has an integrated .NET code debugger. In order to use it, it is necessary that the local computer has cache files with the necessary files to run the debugger. The steps to enable the debugger are:

Attaching the .NET debugger
In order to have a .NET debugging session, the engineering environment must be connected with the runtime and the .NET debugger attached to server or client process. Follow these steps.

Breakpoints, Steps and Watch
In order to setup a breakpoint, open the desired code, select the line and press Insert Breakpoint on the toolbar.
When the system stops on a breakpoint you can perform step by step execution or hit the continue button.
In order to inspect local .NET variables, tags or project objects, you can select the text in the script editor and, when the execution is stopped on a breakpoint, the toolkit will show the current value of the variable.
You can also add .NET variables or project objects to the Watch window. When adding tags or project objects, you need to use the @ symbols, example @tag.tag1, so the system knows it is a project object, not a local .NET variable. Keep in mind the Watch display is only updated when execution is stopped. If you want to have real-time values for tags and objects you can open the PropertyWatch diagnostics tool.
Configuring Expressions
.i.expressions:described;
Besides the Edit > Script > Expressions table, you can use expressions in several other places in FactoryStudio, using the same syntax described here, to determine a value or to configure a condition.
Expressions are just plain VB.Net expressions, such as arithmetic expressions or calls to script.class methods from the project. Intellisense only shows tags and application objects, but the expressions are compiled using the standard VB.Net compiler, so what you would write in the code editor, should be accepted in expressions as well.
FactoryStudio implements some automated replacements, such as == to =, so the syntax of an expression is very close to that of a C# statement, but with no need to add the ";" on the end.
In this way, both VB.Net and C# programmers are able to use the expression fields seamlessly.
In expressions, you do not need to put @ before tag names. You need the @ in the code editor to differentiate project tags from .NET variables. However, expressions do not have local .NET variables, so you use the project object directly.
For arithmetic operands, you can use the standard operands as described in the .NET documentation.
To allow single-line evaluations, the .NET language has the IIF command, which currently is used only with VB.Net. The IIF command has three parameters. For example:
IIF (A, B, C)
The first parameter is a condition. That method will return B if condition A is true, and it returns C if the condition is false.
Example: IIF (tag.A = 1, "True", "False") will return the string "True" if the value of tag.A is 1, or "False" if tag.A has a different value.
In this .NET method, all three parameters are evaluated independent of the condition. For instance, if you have IIF (tag.A = 1, script.class.client.Func1(), script.class.client.Func2()), both Func1 and Func2 will always be executed. Only the return value will be different based on the value of tag.A.
The IF or IIF methods need to evaluate the parameters before calling the method. There are many scenarios where you want to execute only the function according the value. For that scenario FactoryStudio has a method called TIF, which has that behavior.
So, you use the expression:
TIF (tag.A = 1, script.class.client.Func1(), script.class.client.Func2())
Only the Func1() or Func2() will be executed, according the value of Tag.A
The TIF method is defined in the class library that is automatically exposed for expressions that are in the toolkit function library.
For more complex calculations, you can call a class that you create on the Classes tab. See "Configuring Classes" earlier in this chapter.
To configure expressions:

  1. Go to Edit > Scripts > Expressions.
  2. Select an expression, or select the insert row (first row) to create a new expression.
  3. Enter or select information, as needed.

    Column

    Description

    Object

    Select an existing tag or object.

    Expression

    Enter the expression. The expression can be a basic mathematical expression, use a class, or be a conditional expression.

    Domain

    Select where the expression executes:


  1. Click Verify to check the validity of the expression.

The Script Namespace
The namespace Script is the entry point to all objects related to the Scripts module.
The Script.Task object lists all configured database connections and their runtime properties.
The Script.Class object lists all configured tables and its runtime properties.
See http://www.tatsoft.com/help/fs-2014/runtime/index.html for the complete programming reference on runtime objects.