ci-server-engineer/.claude/skills/graphics/tasks/create-display.md
cliu 732c6fb2da ISS-111 fix verified: frame-src CSP entries in jwuiisg.sup
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>
2026-10-09 15:01:51 +11:00

11 KiB
Raw Blame History


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

  1. Start the Edit Module and log in.
  2. File > New Display, name <DisplayName>; tick HTML display if it should also run in a browser (the editor then hides unsupported components and properties).
  3. 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).
  4. File > Save (or Save with Revision Information). Close the tab when done: an open display is locked (<DisplayName>.lck) and jwuiutl skips 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_Tank and, since 2026-10-06, on CIENG_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 use ItemValueOW, presumably the overwrite variant like itmval -o; not tested). The factory popup AOG_SetNumberPV uses 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 found for 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).