KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Formularz, binding i akcja do KretS
Pole `input` z walidacją (`required`, `maxLength`), akcja `greet` wywołująca komendę KretS `greet.make(name: String) -> String`, wynik zapisywany w stanie (`result`), flaga `busy`, komunikat błędu (`error`) i warunek `enabled "form.valid and not busy"`. Kompilacja sprawdza sygnaturę handlera i blok `handlers` manifestu.
Witryna nie wykonuje kodu ani nie prowadzi walidacji SDK. Wyniki poniżej pochodzą z eksportu określonej wersji i przestają opisywać kod po jego zmianie.
Kanoniczne pliki projektu
module Main
fn Start() {
}
fn Shutdown() {
}
// Komenda wywoływana przez akcję interfejsu. Logika działa w osobnym procesie pluginu.
on greet.make(name: String) -> String {
if len(name.trim()) == 0 {
throw "Podaj imię."
}
return "Cześć, " + name.trim() + "!"
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.Pusta linia oddziela fragmenty źródła.fn Start() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Komenda wywoływana przez akcję interfejsu. Logika działa w osobnym procesie pluginu.Komentarz autora; nie jest wykonywany.on greet.make(name: String) -> String {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.if len(name.trim()) == 0 {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.throw "Podaj imię."Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.}Zamknięcie struktury otwartej we wcześniejszych liniach.return "Cześć, " + name.trim() + "!"Zwrócenie wartości z funkcji; nie jest zapisem do dziennika.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.
Wynik i typowy błąd
Kod 0; `self-test.json` zawiera wykonane kroki, a klatka pokazuje „Cześć, Ala!”.
Akcja wskazująca komendę, której nie ma w bloku `handlers` manifestu albo handler o innej sygnaturze — błąd kompilacji projektu.
Wymagania wersji i procedura lokalna
- sdk
- 1.0.0-rc.3+kret.local.3
- sdkInfoReports
- 1.0.0-rc.3
- core
- 1.0.0-test.6.11-draft.1
- os
- Windows 11 x64
- dotnet
- .NET 10 runtime
Polecenia poniżej są instrukcją do samodzielnego wykonania z właściwym lokalnym SDK. DATA/OUT muszą wskazywać nowe katalogi testowe. Nie ma przycisku uruchamiania na serwerze.
- check
kret check . --jsonKatalog: project · Oczekiwany kod wyjścia: 0 - self-test-interact
kretui-host . --self-test {OUT}/frame --data {DATA} --policy host-policy.json --input 0/1/0=Ala --click 0/1/1Katalog: project · Oczekiwany kod wyjścia: 0
Wyniki zapisane w pakiecie źródłowym
To dowód z eksportu, nie wynik bieżącego wykonania w przeglądarce.
# EXPECTED_OUTPUT — KRETUI-I01-FormActionBinding
# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:47Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.
# Actual output of the run. Paths replaced by placeholders.
### 1. check (exit 0, PASS)
> kret check . --json
{
"format": "kret-diagnostics/1",
"project": "<project>",
"succeeded": true,
"plugin": {
"id": "LOCAL-KPL-UXM2FRMS",
"name": "FormActionBinding",
"version": "1.0.0",
"profile": "standard",
"database": false
},
"permissions": {
"required": [],
"optional": []
},
"handlers": {
"lifecycle": [
"start",
"shutdown"
],
"events": [],
"commands": [
"greet.make"
]
},
"diagnostics": []
}
### 2. self-test-interact (exit 0, PASS)
> kretui-host . --self-test {OUT}/frame --data {DATA} --policy host-policy.json --input 0/1/0=Ala --click 0/1/1
widok Greeter; logika: izolowany proces pluginu LOCAL-KPL-UXM2FRMS (pid 42196)
test własny: OK; wyniki: <out>\frame
[checkFile {OUT}/frame/self-test.json]
{
"format": "kretui-self-test/1",
"view": "Greeter",
"title": "Powitanie",
"logic": "isolated-process",
"pluginProcessId": 42196,
"hostProcessId": 31108,
"size": "compact",
"width": 460,
"height": 260,
"ok": true,
"failures": [],
"actions": [
{
"ok": true,
"code": "",
"message": ""
}
],
"state": {
"name": "Ala",
"reply": "Cze\u015B\u0107, Ala!",
"busy": false,
"error": ""
},
"controls": [
{
"path": "0",
"type": "column",
"name": "",
"enabled": true,
"control": "StackPanel",
"bounds": [
0,
0,
460,
236
]
},
{
"path": "0/0",
"type": "text",
"id": "heading",
"name": "Formularz \u2192 akcja \u2192 KretS \u2192 stan",
"enabled": true,
"control": "TextBlock",
"bounds": [
0,
0,
460,
19
]
},
{
"path": "0/1",
"type": "row",
"name": "",
"enabled": true,
"control": "StackPanel",
"bounds": [
0,
19,
460,
53
]
},
{
"path": "0/1/0",
"type": "input",
"name": "Imi\u0119",
"enabled": true,
"control": "TextBox",
"bounds": [
0,
19,
64,
53
]
},
{
"path": "0/1/1",
"type": "button",
"name": "Przywitaj",
"enabled": true,
"control": "Button",
"bounds": [
64,
19,
73,
53
]
},
{
"path": "0/2",
"type": "text",
"name": "Cze\u015B\u0107, Ala!",
"enabled": true,
"control": "TextBlock",
"bounds": [
0,
72,
460,
19
]
}
],
"pluginLog": [],
"hostCalls": 0,
"denials": 0
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
# EXPECTED_OUTPUT — KRETUI-I01-FormActionBindingOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:47Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Actual output of the run. Paths replaced by placeholders.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.### 1. check (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kret check . --jsonOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."format": "kret-diagnostics/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."project": "<project>",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."succeeded": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."plugin": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."id": "LOCAL-KPL-UXM2FRMS",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "FormActionBinding",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."version": "1.0.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."profile": "standard",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."database": falsePole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."permissions": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."required": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."optional": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."handlers": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."lifecycle": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."start",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."shutdown"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.],Zamknięcie struktury otwartej we wcześniejszych liniach."events": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."commands": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."greet.make"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach."diagnostics": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.### 2. self-test-interact (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kretui-host . --self-test {OUT}/frame --data {DATA} --policy host-policy.json --input 0/1/0=Ala --click 0/1/1Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.widok Greeter; logika: izolowany proces pluginu LOCAL-KPL-UXM2FRMS (pid 42196)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.test własny: OK; wyniki: <out>\frameOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.[checkFile {OUT}/frame/self-test.json]Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."format": "kretui-self-test/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."view": "Greeter",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."title": "Powitanie",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."logic": "isolated-process",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."pluginProcessId": 42196,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostProcessId": 31108,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."size": "compact",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."width": 460,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."height": 260,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."failures": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."actions": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": ""Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.],Zamknięcie struktury otwartej we wcześniejszych liniach."state": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "Ala",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."reply": "Cze\u015B\u0107, Ala!",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."busy": false,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."error": ""Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.},Zamknięcie struktury otwartej we wcześniejszych liniach."controls": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "column",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "StackPanel",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.460,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.236Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0/0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "text",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."id": "heading",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "Formularz \u2192 akcja \u2192 KretS \u2192 stan",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "TextBlock",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.460,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.19Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "row",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "StackPanel",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.19,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.460,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.53Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0/1/0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "input",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "Imi\u0119",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "TextBox",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.19,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.64,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.53Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0/1/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "button",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "Przywitaj",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "Button",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.64,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.19,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.73,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.53Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.},Zamknięcie struktury otwartej we wcześniejszych liniach.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."path": "0/2",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."type": "text",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."name": "Cze\u015B\u0107, Ala!",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."enabled": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."control": "TextBlock",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."bounds": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.0,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.72,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.460,Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.19Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.]Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.],Zamknięcie struktury otwartej we wcześniejszych liniach."pluginLog": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."hostCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."denials": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.Pusta linia oddziela fragmenty źródła.
Diagnostyka i raporty testów
null
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
nullOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
Zapisane podglądy KretUI

Pochodzenie i integralność
KRET_LANGUAGE_KRETUI.zip:KretUI/Examples/INTERMEDIATE_FormActionBinding/example.json
02_PLAYGROUND/EXAMPLES/KRETUI-I01-FormActionBinding.json
SHA-256 EFE93B8AF82401FBE6509CD01727B6885B224EE3EDC8C1E755ECE984E65E0E1AMateriały źródłowe do tego tematu
Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.
KRETUI-I01-FormActionBinding — Formularz, binding i akcja do KretS
KRETUI-I01-FormActionBinding — Formularz, binding i akcja do KretS
🇬🇧 English version below.
| Pole | Wartość |
|---|---|
| Technologia | KretUI |
| Poziom | INTERMEDIATE |
| Klasyfikacja | RUNNABLE_LOCAL — Uruchamialny lokalnie (SDK, izolowany proces pluginu) |
| Playground | LOCAL_EXECUTE — lokalnie: wykonanie w KretStudio / SDK (publicznie: tylko statycznie) |
| SDK | 1.0.0-rc.3+kret.local.3 (kandydat lokalny, niepodpisany) |
| Wynik testu | TEST_RESULTS.json, rzeczywisty wynik: EXPECTED_OUTPUT.txt |
Co pokazuje
Pole input z walidacją (required, maxLength), akcja greet wywołująca komendę KretS greet.make(name: String) -> String, wynik zapisywany w stanie (result), flaga busy, komunikat błędu (error) i warunek enabled "form.valid and not busy". Kompilacja sprawdza sygnaturę handlera i blok handlers manifestu.
Pliki
| Plik |
|---|
Script/Main.krs |
Ui/Greeter.kretui |
host-policy.json |
plugin.kretl |
Jak uruchomić
Katalog roboczy: katalog tego przykładu. kret oznacza <SDK>\Compiler\kret.exe, kretui-host — <SDK>\UiHost\kretui-host.exe. {DATA} / {OUT} to nowe, puste katalogi poza projektem. Wymagania: REQUIREMENTS.md.
kret check . --json— walidacja (sygnatura akcji ↔ handler KretS)kretui-host . --self-test {OUT}/frame --data {DATA} --policy host-policy.json --input 0/1/0=Ala --click 0/1/1— wpis „Ala” + kliknięcie → komenda KretS w procesie pluginu → stan → klatka
Oczekiwany wynik
Kod 0; self-test.json zawiera wykonane kroki, a klatka pokazuje „Cześć, Ala!”.
Najczęstszy błąd
Akcja wskazująca komendę, której nie ma w bloku handlers manifestu albo handler o innej sygnaturze — błąd kompilacji projektu.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →