ProcScript Language Basics
The ProcScript language is targeted to embedded systems so that it can be easily used inside other programs like Citrix Podio Workflow Automations (GlobiFlow).
ProcScript is a simplified version of PHP and borrows some concepts from JavaScript. It is also extremely forgiving.
Comments
Single line comments start with //
and multi-line comments can be enclosed in /*
and */
. Eg
// This is a comment
x = x + 1 //increment x
Returning a Value
If you need to return a value to your automation, use the RETURN
command. Eg:
// Multiply by 2
x = [(Variable) foo]
x = x * 2
RETURN x
Case Insensitive
Keywords are case-insensitive. This means that PRINT "Hello"
is exactly the same as print "Hello"
(but print "heLLo"
is different!).
Untyped Variables
Variables are completely untyped. You can put any value into any variable.
If a variable has no value, it will return a default of NULL
Arrays and Objects
Arrays are just variables, and objects are just arrays. You can use both PHP and JavaScript formatting to create them, eg:
a1 = ["foo"=>"bar", "baz"=>42]
a2 = {foo:"bar", baz:42}
PRINT ( a1 == a2 )
PRINT a1.foo + " = " + a2["foo"]
The above would output:
TRUE
bar = bar
Note that PRINT
will not output anything when the code is actually run, but it is extremely useful for debugging as this Editor will show output.
Simplified Operators
Assignment operators like +=
and ++
are not supported. You need to use long-hand formats, eg:
x = x + 1
y = y - 42
String concatenation is done using the +
operator like in JavaScript and not the .
operator in PHP. Furthermore, the +
and -
operators can work on different variable types and try to come to the best outcome.
Example:
x = [1,2,3]
return x + 5
The above would return [1,2,3,5]
Functions
Functions work the same way as they do in PHP and JavaScript, eg:
PRINT add(2,3)
function add(num1, num2) {
return num1+num2
}
Returning Data
In an embedded environment, things like PRINT
are not very useful. Usually you want your code to evaluate something and return something else.
To achieve this, you can use the YIELD
statement or using RETURN
with an expression.
Example:
x=y+z
RETURN x
Identical Example:
x=y+z
YIELD x
This will result in the value of x
being returned to the calling program.
IF ... THEN Conditions
The IF
THEN
statement is the cornerstone of logic. It will evaluate the expression after IF
, and execute the code only if the expression was true, and optionally any code after ELSE
if the expression was false.
The logic block can be a single line, or on multiple lines, but then must be enclosed in {
brackets }
.
Syntax:
IF ( expression ) {
statement(s)
}
or
IF ( expression ) {
statement(s)
} ELSE {
statement(s)
}
FOREACH ... AS ... Loops
Creates a loop iterating over an object or array's keys.
Syntax
FOREACH ( array AS part ) { statement(s) }
or
FOREACH ( array AS key => part ) { statement(s) }
Example
obj = {foo:"bar",baz:42}
FOREACH ( obj AS part ) {
PRINT part
}
FOREACH ( obj AS key => part ) {
PRINT key+">"+part
}
Result:
bar
42
foo>bar
baz>42
WHILE Loops
Creates a loop while a condition expression evaluates to true
Syntax
WHILE ( condition ) {
statements(s)
}
Example
i=1
WHILE ( true ) {
i = i + 1
PRINT "i is "+i
IF i > 5 THEN BREAK
}
PRINT "done"
Result:
i is 2
i is 3
i is 4
done
Exiting Loops
You can BREAK
out of loops and CONTINUE
execution of the next loop iteration with those same keywords. Very similar to PHP and Javascript.
PHP Functions
Many standard PHP functions are available. In fact, every PHP function available in GlobiFlow is available in ProcScript, plus more.
If you need additional commands and functions, please submit a support ticket with details and reasons for the request.
ProcFu Functions API
All ProcFu Functions are available as native commands in ProcScript. For example:
name = "John"
greeting = HELLO_WORLD(name)
PRINT greeting
NOTE: Conversion to and from JSON is done automatically since ProcFu scripts all require text inputs and return text outputs. You can safely pass them arrays, and will get arrays and objects back.
Similarly, if you RETURN arrays or objects to the calling system, they will be converted to JSON.
More Help
At any time in the editor, you can press F1
while on a keyword and the help for that keyword will be shown.