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>
99 lines
11 KiB
Markdown
99 lines
11 KiB
Markdown
---
|
||
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).
|