The user added CSP_ENTRY frame-src 'self' and the test host to jwuiisg.sup and restarted CI Server (JWUIISG reads the file only at start). The header then allowed the host and the external page showed in a temporary display in the web client (display removed again). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 KiB
task: Build a display in the Edit Module and check the saved file version: R1.05 (first written for R1.03) source: IM 36K10C50-01EN (R1.03 3rd ed. Sep. 2023; R1.05 5th ed. Feb. 2026) §1.2, §1.7, §2, §2.22, §2.25, §2.31–2.33, §4.8.1, §4.12; practiced on CI-Eng-Sample (display CIENG_Tank) 2026-10-01; display XML written by the sample generator and checked on desktop and web 2026-10-02 to 2026-10-06 (installed web client code, component definitions in DEPLOY\components) status: verified on R1.03 (Edit Module steps, saved XML, generator rules). R1.05: manual re-checked 2026-10-08 (section R1.05 below, from docs); not re-tested on the R1.05 test server (shared server, no displays may be deployed; component list comparison awaiting user verification)
Build a display (Edit Module)
The user draws; Claude gives the steps and checks the result. The sample displays
examples/CI-Eng-Sample/displays/CIENG_*.xml are not drawn but written by a generator
(displays/generator/); Writing display XML directly lists the rules they follow.
Steps for the user
- Start the Edit Module and log in.
- File > New Display, name
<DisplayName>; tick HTML display if it should also run in a browser (the editor then hides unsupported components and properties). - Add components from the component bar, for example:
- Text — title.
- Number field — in the Properties sheet click Value, open the connection dialog,
Items tab, pick
<Section>.<Tag>. - Alarm Overview — right-click > Component Properties; Filter tab for an ASA, section or tag filter; Types tab for current/historical.
- Trend — component properties, pen 1 =
<Section>.<Tag>(a new trend has 5 empty pens; the item must be in a storage group).
- File > Save (or Save with Revision Information). Close the tab when done: an open
display is locked (
<DisplayName>.lck) andjwuiutlskips it.
Check the saved file
Folder %TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\displays\ (and with HTML mode also
%TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY\displays\<DisplayName>.html).
grep -n "<html>\|<width>\|<height>\|itemName\|itemId\|<source" <DisplayName>.xml
<html>true</html>= HTML mode;<width>/<height>must be set for the HTML display.- Item connections:
<itemName>+<itemId>(node.group.number…); trend pens:<source type="sourceID" uri="ci:/item/<item>"/>(uri=""= empty pen). - Write a fixed value with a button (verified in the HTML display, buttons Manual / Auto on
the former
CIENG_Tankand, since 2026-10-06, onCIENG_Control):<button>›<data>›<action type="actionSetItemAttribute">with<event type="event" event="On action"/>,<filter type="filter"><value>1.0</value></filter>and a<connection>with<direction>2</direction>,<itemName>,<itemAttribute>ItemValue(the factory popups useItemValueOW, presumably the overwrite variant likeitmval -o; not tested). The factory popupAOG_SetNumberPVuses the same action behind its Apply button. - After the item is deleted and loaded again it gets a new id; the display still validates,
but on 2026-10-01 the HTML display showed 0 and the popup
ITM-E-NO_MAIN, No main item foundfor a number field whose stored<itemId>was stale, also in a fresh session. Deleting the<itemId>line (keeping<itemName>) and redeploying fixed it: the field binds by name. Sample displays therefore carry no<itemId>; for displays made in the Edit Module, reconnect or remove the ids after reloading items (ISS-052).
Writing display XML directly (verified 2026-10-02 to 2026-10-06)
The Edit Module stores one element per component (<text>, <number>, <rectangle>, <arc>,
<button>, <slider> …, names as in DEPLOY\components\*.xml), its position as centre plus half
sizes, and the connections in <data>. Files written by hand or by a script load in the Edit
Module, the Operator Interface and the HTML display, if these rules are kept (sample generator:
examples/CI-Eng-Sample/displays/generator/):
| Topic | Rule (R1.03.00) |
|---|---|
| Text / number size | With <keepOriginalSize>false the HTML export scales the text to its box (e.g. scale(0.98, 3.80) in a 40 px box); with true it is drawn at its font size, centred on the box (tested 2026-10-06) |
| Rectangle rounding | roundingX / roundingY are a fraction 0..1 of the half width / height; values above 1 draw an ellipse, on the desktop and on the web (tested 2026-10-06) |
| Arc angles | startAngle / extentAngle in degrees clockwise from 3 o'clock (screen y down), negative values allowed; the same on both clients, fixed or connected (tested 2026-10-06: 0/90 = lower-right quarter) |
| Click on a shape | event Clicked b1 (buttons: On action), e.g. an Open display action on a rectangle (2026-10-02) |
| Item attributes for the web | ItemValue, ItemDesc, ItemStatusMnemonic, ItemUpdTime (epoch seconds), ItemHHL / ItemHL / ItemLL / ItemLLL (limits), ItemName (micro trend pens), list in the web client code; ItemDescription does not exist (sample faceplate and Control tab, 2026-10-06) |
| Showing a time | number field with <asDateTime>true connected to ItemUpdTime; a dateTimeField shows the value on the web only when editable (2026-10-02/06) |
| Server-side command | <action type="actionExecuteCommand"> with <command> and <onServer>true</onServer> runs on the CI Server node as the service account CIX_PROCESS, also from the web; a user in the factory group OPERATOR may use it (tested 2026-10-06, sample live-data Start) |
| Alarm overview | autoFit true in a tab that is hidden while loading squeezes all columns to ~0 px on the web: set autoFit false and give column<Name>Width; column…Visible for AlarmAttribute is an array property (a plain value fails the HTML export with ClassCastException); the empty part of the list stays white on both clients (no property; web: jquery.dataTables.css forces it); web rows are 20 px at a 14 px font (2026-10-02/06) |
R1.05: component changes since R1.03 (from docs, IM 36K10C50-01EN 5th ed.)
| Component / sheet | Change (version) |
|---|---|
| Calculation/Function → Generic Functions (§2.31) | Renamed (R1.05 manual). Timing now documented: Date and Time runs every 200 ms; other operations check their inputs every 100 ms and run on a change, and also when the display is loaded or reloaded. |
| Generic Functions: Password Check (R1.04) | Inputs T[I1] user name, T[I2] password; B[O] TRUE and T[O] = user name if the pair is valid, else FALSE and the DSS error text (e.g. DSS-E-UNK_USER). Needs the login method Manual CI Server or Manual OS for the Password Check function in dssana.sup (Login control tab; skill authorization). Not tested. |
| Generic Functions: RDP Connect (R1.05) | When triggered, writes an .rdp file and starts a Remote Desktop session to T[I1] (host or IP). Optional T[I2] RemoteApp alias/program, T[I3] RemoteApp command line, T[I4] RD Gateway (host[:port], default 443). T[O] receives the generated file name. Installed helper: %TLS_ROOT_PATH%\tls\com\connectrdp.cmd. Not tested (needs a remote desktop target). |
| JavaScript Function (§2.32) | Wording: inputs checked every 100 ms, script runs on a change and also when the display is loaded/reloaded (R1.03 text implied no run at load). |
| Alarm overview (§2.22, R1.04/R1.05) | New [Acknowledgement] properties: Use Custom Acknowledgement (acknowledge from a user-made window instead of the overview) enables Acknowledge Event, Acknowledged Alarm, Acknowledged Alarm Text, Acknowledged Alarm Time; Selected Alarm Key; [External Acknowledgement] (Alarm Key, Approver, Reason, Trigger); [Enterprise Alarm Locations] for enterprise displays. |
| Actions sheet (§4.12, R1.04) | Update item/parameter on an item, object signal or parameter can carry Reason (≤ 256 chars) and Approver (≤ 128 chars); they land in AUDIT_TRAIL fields APPROVAL_REASON / APPROVER (skill audit-trail). Two documented recipes for alarm acknowledgement with reason/approver: via an item parameter (attribute Acknowledged = 1, item alarms only) or via the overview's External Acknowledgement properties (item and external alarms). Not tested. |
| Dataset tables (§2.25, R1.05) | Column Icon, Icon filter (<v>, !<v>, &<v> bit test), Icon tooltip; Operator can use column sorters; Operator can select row(s) / multiple rows; [Enterprise Dataset Locations]; enterprise location supported on the HTML display. |
| Report (§2.26, R1.05) | New [Enterprise] category (primary / secondary data location). |
Web Browser (§2.33, R1.05) — web client: external pages are blocked by the R1.05 default Content-Security-Policy (verified 2026-10-09, ISS-111); only pages from the CI Server itself load, unless the host is added as frame-src in jwuiisg.sup (skill portal-setup, check-web-access.md; verified). Component type extendedIExplorer (class WebBrowserChromium), property url |
New browser engine: protocols WebRTC, HTTPS, WebSocket, HTTP/2, HTTP/3; codecs VP8, VP9, WebM, Opus, Vorbis, PCM. Content that played on R1.04 or earlier may not play after the upgrade. Right-click menu; new properties Go Home/Stop/Reload, [Printing], [Status], [Security] (Enable Microphone/Camera, Allow Insecure Certificates, Allow Local file access). Local files for CI Mobile View must be placed under %TLS_ALLUSERS_PATH%\wap and opened by URL. |
| Display generator (§2.36) | The note "not supported on HTML displays" was removed in the R1.05 manual; R30 §4.8 does not list it. Treat web support as unconfirmed. |
jwuiutl -m / -M (§1.5) |
Output now described as space-separated (R1.03 manual: CSV). On R1.03 -m printed comma-separated lines (verified); R1.05 output not checked (ISS-094). |
Verified (CIENG_Tank, 2026-10-01)
Text CI-Eng-Sample Tank 1, number field on TANK1.LEVEL (live: 72 → 61), alarm overview
(no filter; listed the TANK1.LEVEL alarms), trend pen TANK1.LEVEL (legend
CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S] = highest-priority storage group). In the HTML
display the trend drew no line: a trend needs 50 visible pens to draw on the web (ISS-041;
workaround and all trend settings in trend.md). The sample file is now padded with
add_trend_spares.ps1 (49 spares) and draws in the browser too. CIENG_Tank was replaced by the
generated CIENG_* displays on 2026-10-06; they carry no <itemId> and found the recreated items
after a full remove.cmd / load.cmd cycle in a fresh session (2026-10-06).