Appearance
apps/panel 0.84.0
Released on 28 September 2026. Previous release: 0.83.0.
Compatibility
- This version works only with an API that has the new file storage. The Files panel requests files, their cards and thumbnails from that storage, and the operator terminal requests the parameters and content of its documents; with an older API, they cannot open files.
- The panel does not move files of the earlier storage. If the API owner has not moved their content, their cards still appear, but the content cannot be opened; on the test API such files answer
404.
What changed
Operator terminal: work commands
The changes in this section and the next two apply to an operator terminal whose panel.request is a standard request on WorkOrderOperation.
- The terminal now sends the work commands to the API:
Startfor a quantity of the operation's batch or for the chosen serial items,Pause, resuming a paused operation withStart,Goodand completion of the selected task. The notice that commands are not connected no longer appears for this source. - The
StartandGoodforms read the material instances of the operation when they open: a batch operation shows its batch and the allowed quantity, a serial operation shows a card for each item in the queue or in work. - After each successful command the terminal reads the operation and its tasks again. It shows the task in work; after
Pause, resuming orGoodit keeps the chosen task. - When the API refuses a command, the terminal shows the API message above the workspace and changes nothing. For example, the API refused good items while a task of the operation was still in work and accepted them after the tasks were completed.
Operator terminal: tasks and items
- When it opens an operation and after each successful command, the terminal reads the tasks, their states and their order from
operation/init. The start and finish tasks of the workflow graph are not shown. - For a serial operation,
Itemchooses one item of the operation. When the work instruction is shown, the terminal reads it again for this item; after that read, the header rowSerial / batch no.(Сер. № / № партииin Russian) shows the item's serial number.
Operator terminal: live updates
- With live updates enabled for the deployment, the terminal applies a notice about the opened operation that it can apply exactly: a timer notice with the status,
stateEnteredAtandremainingDurationcontinues the timer from them, and a quantity notice replaces only the counts it carries, even when the quantities arrive in separate notices. Other notices still make the terminal read the operation again. - A notice that arrives during a read or a command is not applied: the terminal reads the operation again after that work, because the read made meanwhile may already be newer than the notice.
Operator terminal: list, header and tasks
These changes apply to every operation source, including the local demonstration, unless a standard request is named.
- Operation cards show the icon of the operation metatype. With a standard request, the terminal reads it from
/MetaTypes/{metaTypeName}; the demonstration returns it with each operation. - With a standard request, the list no longer shows operations in development or scheduling (
inDevelopment,inScheduling), whatever the search and filters. - The search button adjoins the search field, and the planned start on an operation card has no comma between the date and the time.
- Operation tasks take less room: each task button shows a state icon instead of a sequence number and the task name in at most two lines, cut with an ellipsis when it does not fit, and the wider row under the task content repeats the name of the selected task.
- When
headerFieldsis omitted, the header shows the order, the material (materialDefinition), the serial or batch number and the workplace; the operation name is no longer shown there.
With a standard request, each default header row shows its value only when request.attributeList names its attribute: workOrder, materialDefinition or selectedWorkUnit.name. Without it, the row shows —; add materialDefinition for the new material row. To keep the operation name in the header, list the header rows yourself, for example:
json
{
"panel": {
"type": "operatorTerminal",
"terminalConfig": {
"headerFields": [
{ "label": { "ru": "Операция", "en": "Operation" }, "parts": [{ "attribute": "name" }] },
{ "label": { "ru": "Заказ", "en": "Order" }, "parts": [{ "attribute": "workOrder" }] },
{ "label": { "ru": "Материал", "en": "Material" }, "parts": [{ "attribute": "materialDefinition" }] },
{ "label": { "ru": "Сер. № / № партии", "en": "Serial / batch no." }, "parts": [{ "context": "materialInstance" }] },
{ "label": { "ru": "Рабочее место", "en": "Workplace" }, "parts": [{ "attribute": "selectedWorkUnit.name" }] }
]
}
}
}Files panel and documents
- The Files panel and the operator terminal work with the new file storage of the API: uploads, replacements, card thumbnails, the gallery and downloads send the user's token with every file request.
- Replacing a file keeps the same file: every dataset that refers to it shows the new content after its file list is loaded again, and the earlier content cannot be opened from the panel. The replacement dialog no longer offers to delete the old file.
- When the API refuses a file's content, the gallery and the document area of the operator terminal show only their own message, without the general request error notification. A failed read of the file parameters or a network failure still shows that notification as well.
- The Files panel now shows the files of an object selected after the panel opened with nothing selected. Before, it stayed empty until the page was reloaded with a selection.
Files for methods
- A
runMethodform can ask the user for a file: a field with"control": "scratchFile"uploads the chosen file when the user submits the form and passes its token to the method as the field's attribute. - When the user runs a
runMethodaction and the method returns a file as adownloadtoken, the panel downloads the file to the browser's downloads folder. Returned files need no configuration. Methods that the panel calls to read data, throughrequest.methodNameor therunMethodeditor of acreateaction, do not download returned files.
A minimal action with a file field:
json
{
"id": "import-materials",
"method": "runMethod",
"label": { "ru": "Импорт материалов", "en": "Import materials" },
"editor": {
"mode": "modal",
"fields": [
{
"attribute": "scratchToken",
"type": "String",
"control": "scratchFile",
"label": { "ru": "Файл импорта", "en": "Import file" }
}
]
},
"request": {
"parent": "MaterialDefinition",
"methodName": "materialImport",
"objects": [{ "getFromItem": true }]
}
}The method receives the token as params.scratchToken. MaterialDefinition and materialImport are example names: replace them with the metatype and the method of your API.
Known limitations
Operator terminal
- Together with the terminal message about a refused command, the application shows its general request error notice.
- A
StartorGoodform keeps the material instances it read when it opened. If the operation changes elsewhere while the form is open, pressCanceland open the form again. Refresh stateclears the chosen serial item; choose it again if needed.StartandGoodstay disabled for an operation whosetraceabilityTypeis not 0, 1 or 2.- Only the work instruction task shows content; other tasks can be selected and completed.
- The timer never turns yellow for an API operation: the API gives no planned total for the 90% threshold.
- The timer shows the API's
stateEnteredAtandremainingDurationas they are. The test API currently recordsstateEnteredAtabout three hours late and adds about three hours to the remainder after a pause or good items, so the timer can show more time than the operation has left. - A timer notice that lacks
stateEnteredAtorremainingDuration, a value the terminal cannot apply exactly, or notices that may have been missed make the terminal read the operation again. Task states and the list cards still change afterRefresh stateor reopening. My operationsis still unavailable.
Files
- A thumbnail that the server is still preparing appears the next time the panel loads its file list: when an object is selected, and after a file is uploaded, replaced, deleted or unlinked or its metadata is edited.
- The gallery downloads the open file in full, up to 1 GiB, before showing it; the arrows above the viewer open the previous or next file. The viewer's thumbnail strip and arrow-key navigation are no longer available.
- Word, Excel and PowerPoint files are not shown in the viewer.
- The file field works only in the editor of a
runMethodaction and needs an explicit"type": "String"withoutdefaultValue. Otherwise the field shows a configuration error and the action does not run; correct the application JSON, because running it again unchanged does not help. - A chosen file can be up to 256 MiB. The server names a downloaded file in
Content-Disposition. The file is saved asdownloadwhen the server sends no name, or whenapiPrefixpoints to another origin and the API does not expose that header withAccess-Control-Expose-Headers; deployments behind the same-origin/backendproxy are not affected. - When a run returns several files, the browser may ask to allow several downloads from the page.
- A method that still returns an old
files/download-tmp/…link indownloadnow leads to a message that its file was not downloaded; the method's owner has to return a file of the new storage.
Updated documentation
- Commands of a WorkOrderOperation lists the buttons, the conditions that enable them, the requests they send and what the terminal reads after a command.
- Choose an item describes how the operator chooses the item of a serial operation and when the header changes.
- The operator terminal guide describes when a live update is applied from the notice and when the terminal reads the operation again, the list conditions, the task buttons and the default header rows.
- Files describes thumbnails, the gallery, downloads and replacement with the new storage.
- Run a MetaMethod describes the file field and the files that a method returns.
- Editors describes the
controlfield option and where it is allowed.