Skript i Web Port kan användas på många ställen. Det lägger till stöd för avancerade funktioner och anpassning. Web Port använder en skriptmotor som gör det möjligt att köra skript på serversidan både i bakgrunden och på begäran. Motorn stöder en blandning av .NET- och JavaScript-funktioner. Motorn har också tillgång till data i Web Port genom tillhandahållna variabler och funktioner.
Skripttyper
Anropade skript
Anropsskript körs på begäran. Detta kan bero på att en användare trycker på en knapp, en larmregel anropar skriptet eller att det anropas av ett API-anrop.
Loopade skript
Loopade skript körs med ett fast intervall som konfigureras i skriptet. Detta är användbart för återkommande uppgifter, som att beräkna och uppdatera disketiketter, exportera till externa system etc.
Triggerade skript
Triggerade skript körs när ett villkor uppfylls. Det kan vara att ett larm går, att ett taggvärde är större eller mindre än ett visst inställt värde.
Skräddarsydda rapporter
Skräddarsydda rapporter gör det möjligt för både ett skriptlager och ett presentationslager att arbeta tillsammans. Skriptet tillhandahåller data till presentationslagret, och presentationslagret visar informationen för användaren. För mer information, läs kapitlet om anpassade rapporter.
Tidkanals-skript
Tidkanals-skript körs för att koda och avkoda Web Port-tidkanaler så att de matchar tidkanaler i olika typer av styrenheter. Det finns läs- och skrivfunktioner i de tidkanlas-skripten som anropas när Web Port uppdaterar sin tidkanal.
Inline-skript
Det finns också stöd för inline-skript som kan köras från både taggar och lib-objekt. Detta kan användas för att snabbt göra en beräkning utan att behöva skapa ett fullständigt skript.
Best practises
Exponerade Web Port funktioner
WebPortCommon-sammanställning
Alla offentliga typer från ScriptManager-sammanställningen (WebPortCommon) är exponerade, inklusive:
- Managerklasser (TagManager, LibManager, PageManager, DeviceManager, etc.)
- Andra offentliga klasser i sammansättningen
Tagghantering
- taggar– TagManager.Manager.Tags-samling
- tagRead(tagName)– Läs ett taggvärde
- tagValue(tagName)– Hämta taggvärde
- tagWrite(tagName, value)– Skriv till en tagg
Trend- och larmdata
- getTrendData(tagName, startDate, endDate)– Hämta trenddata
- getActiveAlarmList(includeAcknowledged)– Hämta aktiva larm
Felsökning
- debug(message)— Logga felsökningsmeddelande
- console.log(message)– Konsolloggning
Supporterade .NET-funktioner
System Namespaces (mscorlib)
✔ System
✔ System.Text
✔ System.Globalization
✔ System.Collections.Generic
✔ System.Data Namespaces
✔ System.Data
✔ System.Data.SqlClient
✔ System.Net Namespaces
✔ System.Net
✔ System.Net.Http
✔ System.Text.RegularExpressions
✔ System.Web Namespace
✔ System.Web
Newtonsoft.Json Namespaces
✔ Newtonsoft.Json
✔ Newtonsoft.Json.Linq
✔ Newtonsoft.Json.Converters
File System Types
- File— SafeFileWrapper
- Directory— SafeDirectoryWrapper
- FileInfo— SafeFileInfoWrapper
- StreamWriter— SafeStreamWriter
- StreamReader— SafeStreamReader
- ZipFileExtensions— SafeZipFileExtensionsWrapper
Standard .NET Types
- Path— System.IO.Path
- MemoryStream— System.IO.MemoryStream
- ZipArchive— System.IO.Compression.ZipArchive
- ZipArchiveMode— System.IO.Compression.ZipArchiveMode enum
- SearchOption— System.IO.SearchOption enum
Special Type Handling
- Enum— Exposed via EnumWrapper (GetNames, GetValues, Parse methods)
- String— Special prototype handling to avoid conflicts
- DateTime— Custom converter for proper JavaScript interop
Utility Functions
- Sleep(milliseconds)— Thread sleep
- ToDotNetString(obj, args)— Convert object to string
- Object.prototype.ToString(...args)— Extended ToString on all objects
Supported JavaScript features
ECMAScript 2015 (ES6)
✔ ArrayBuffer
✔ Arrow function expression
✔ Binary and octal literals
✔ Class support
✔ DataView
✔ Destructuring
✔ Default, rest and spread
✔ Enhanced object literals
✔ for...of
❌ Generators
✔ Template strings
✔ Lexical scoping of variables (let and const)
✔ Map and Set
✔ Modules and module loaders
✔ Promises (Experimental, API is unstable)
✔ Reflect
✔ Proxies
✔ Symbols
❌ Tail calls
✔ Typed arrays
✔ Unicode
✔ Weakmap and Weakset
ECMAScript 2016
✔ Array.prototype.includes
✔ await, async
✔ Block-scoping of variables and functions
✔ Exponentiation operator **
✔ Destructuring patterns (of variables)
ECMAScript 2017
✔ Object.values, Object.entries and Object.getOwnPropertyDescriptors
❌ Shared memory and atomics
ECMAScript 2018
✔ Promise.prototype.finally
✔ RegExp named capture groups
✔ Rest/spread operators for object literals (...identifier)
✔ SharedArrayBuffer
ECMAScript 2019
✔ Array.prototype.flat, Array.prototype.flatMap
✔ String.prototype.trimStart, String.prototype.trimEnd
✔ Object.fromEntries
✔ Symbol.description
✔ Optional catch binding
ECMAScript 2020
✔ BigInt
✔ export * as ns from
✔ for-in enhancements
✔ globalThis object
✔ import
✔ import.meta
✔ Nullish coalescing operator (??)
✔ Optional chaining
✔ Promise.allSettled
✔ String.prototype.matchAll
ECMAScript 2021
✔ Logical Assignment Operators (&&= ||= ??=)
✔ Numeric Separators (1_000)
✔ AggregateError
✔ Promise.any
✔ String.prototype.replaceAll
✔ WeakRef
✔ FinalizationRegistry
ECMAScript 2022
✔ Class Fields
✔ RegExp Match Indices
✔ Top-level await
✔ Ergonomic brand checks for Private Fields
✔ .at()
✔ Accessible Object.prototype.hasOwnProperty (Object.hasOwn)
✔ Class Static Block
✔ Error Cause
ECMAScript 2023
✔ Array find from last
✔ Change Array by copy
✔ Hashbang Grammar
✔ Symbols as WeakMap keys
ECMAScript 2024
✔ ArrayBuffer enhancements - ArrayBuffer.prototype.resize and ArrayBuffer.prototype.transfer
❌ Atomics.waitAsync
✔ Ensuring that strings are well-formed - String.prototype.ensureWellFormed and String.prototype.isWellFormed
✔ Grouping synchronous iterables - Object.groupBy and Map.groupBy
✔ Promise.withResolvers
❌ Regular expression flag /v
ECMAScript 2025
✔ 16-bit floating point numbers (float16), Requires NET 8 or higher, Float16Array, Math.f16round()
✔ Import attributes
❌ Iterator helper methods
✔ JSON modules
✔ Promise.try
❌ RegExp.escape()
❌ Regular expression pattern modifiers (inline flags)
❌ Duplicate named capture groups
✔ Set methods (intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom)
ECMAScript Stage 3 or earlier (no version yet)
✔ Error.isError
✔ Explicit Resource Management (using and await using)
✔ Math.sumPrecise
✔ ShadowRealm
✔ Uint8Array to/from base64
✔ Upsert