Co je to?
Poznámka pro administrátory: Toto je systém používaný pro jednorázové vkládání velkého množství dat do vašeho e-shopu. Nejčastěji se používá pro počáteční nastavení, aktualizaci cen tisíců produktů nebo synchronizaci zásob s externím skladem.
Pro koho je to určeno? Administrátoři by si měli přečíst tento článek, aby porozuměli možnostem platformy pro hromadné zpracování dat, jako jsou automatické výpočty cen nebo podpora více jazyků. Vytváření samotných souborů a nastavení technického připojení je však úkolem pro vývojáře nebo datové specialisty.
Klíčové výhody pro e-shop:
- Masivní úspora času: Aktualizujte tisíce produktů, cen nebo úrovní zásob během několika sekund namísto ručního zadávání.
- Chytré výpočty: Během procesu importu automaticky vypočítávejte konečné ceny (například přidání DPH) nebo generujte popisy produktů.
- Bezpečné a spolehlivé: Systém kontroluje vaše data na chyby před uložením, což zajišťuje, že váš e-shop zůstane přesný a profesionální.
- Připraveno pro více jazyků: Snadno importujte překlady pro všechny podporované jazyky v jediném průchodu.
Systém importu
Mechanismy importu dat, formáty a pravidla validace
Přehled
Třída Importer zpracovává data ve formátu JSON nebo stream, spravuje entity, pole, relace a různé možnosti importu. Importovaná data jsou strukturována jako objekt, kde každý klíč je název entity (např. produkty, uživatelé) a hodnota je pole položek k importu pro danou entitu.
Klíčové funkce
Struktura založená na entitách Data organizovaná podle typů entit s flexibilními operacemi a mapováním polí
Podpora výrazů Dynamické výpočty, interpolace proměnných a komplexní transformace
Atomické operace Importy typu „všechno nebo nic“ s komplexní správou chyb a vrácením změn
Kompletní příklad importu
{
"@atomic": "batch",
"@requireChangeSet": true,
"products": [
{
"@operation": "upsert",
"code": "WIDGET-001",
"name": "Smart Widget",
"basePrice": 100,
"vatRate": 0.21,
"price": { "e": "${basePrice} * (1 + ${vatRate})" },
"category": { "e": "code:${categoryCode}" },
"categoryCode": "ELECTRONICS",
"description": { "e": "${name} - Premium quality widget" },
"validFrom": "today",
"validTo": { "e": "${validFrom} + 1y" },
"attributes": [
{
"key": "weight",
"value": { "e": "${baseWeight} + 0.1" },
"baseWeight": 2.5
}
],
"@action": "sync"
}
],
"categories": [
{
"@operation": "update",
"@where": "status = 'active'",
"status": "archived",
"archivedAt": "now()"
}
]
}
Tento příklad demonstruje:
- Import atomicity ‘Batch’ se sledováním sady změn
- Dynamický výpočet cen pomocí výrazů
- Vyhledávání kategorií s proměnnými
- Interpolace řetězců pro popisy
- Aritmetika dat pro období platnosti
- Vnořené výrazy ve vícenásobných relacích
- Hromadné operace s podmínkami @where
- Spuštění serverové akce po importu
Podporované typy polí
Řetězec
Textové hodnoty s podporou výrazů
Příklady:
"name": "Widget"
"description": { "e": "Hello ${world}" }
Funkce:
- Přímé řetězcové hodnoty
- Proměnné výrazy
- Šablonování
Číslo/Celé číslo
Číselné hodnoty s podporou kalkulačky
Příklady:
"price": 123.45
"amount": "100+200"
"discount": "3.5%"
"total": { "e": "${price} * 1.21" }
Funkce:
- Aritmetické operace
- Procenta
- Funkce (abs, sqrt atd.)
- Interpolace proměnných
Boolean
Hodnoty true/false s více formáty
Příklady:
"active": true
"enabled": "yes"
"visible": "ano"
Funkce:
- Podpora více jazyků
- Různé formáty (1/0, yes/no)
- Nerozlišuje velká a malá písmena
Datum/Čas
Hodnoty data s podporou aritmetiky
Příklady:
"date": "2024-06-26"
"date": "1.1.2025"
"dueDate": { "e": "${createdDate} + 30d" }
"validTo": "today + 1y"
Funkce:
- Více formátů
- Relativní výrazy
- Aritmetika dat
- České/evropské formáty
Enum
Výčtové hodnoty s lokalizací
Příklady:
"status": "active"
"priority": "Vysoká"
Funkce:
- Klíč nebo lokalizovaný název
- Nerozlišuje velká a malá písmena
- Podpora aliasů
Přeložitelné
Vícejazyčná pole se třemi režimy operací a kontrolou překladu
Příklady:
"name": "Value" (merge mode)
"name": {"en": "English", "cs": "Czech"} (replace mode)
"name": [{"language": "en", "value": "English"}] (array mode)
"name@removeAll": false (preserve other translations)
Funkce:
- Aktualizace specifická pro jazyk (sloučení)
- Asociativní pole (nahrazení)
- Formát pole (nahrazení)
- Ovládání @removeAll
- Podpora direktivy @language
Binární/Blob
Binární data s více formáty kódování
Příklady:
"content": { "base64": "SGVsbG8gV29ybGQ=" }
"content": { "hex": "48656c6c6f20576f726c64" }
"content": { "gzip-base64": "H4sIAAAAAAAA..." }
"content": "SGVsbG8=", "content@encoding": "base64"
Funkce:
- Kódování Base64
- Hexadecimální kódování
- Komprese Gzip
- Podpora přípony kódování
- Formáty objektů a řetězců
Operace importu
@operation: create
Vždy vytvořit nový záznam
Příklad:
{ "@operation": "create", "name": "New Product" }
@operation: update
Aktualizovat existující záznam (vyžaduje primární klíč)
Příklad:
{ "@operation": "update", "id": 123, "name": "Updated Product" }
@operation: upsert
Vytvořit, pokud nenalezeno, jinak aktualizovat (výchozí)
Příklad:
{ "@operation": "upsert", "code": "ABC", "name": "Product ABC" }
@operation: delete
Smazat zadaný záznam (záznamy)
Příklad:
{ "@operation": "delete", "id": 123 }
Řízení chování Upsert (@update a @create)
Tyto direktivy poskytují podrobnou kontrolu nad chováním upsertu tím, že určují, co by se mělo stát, když záznam existuje (@update) nebo neexistuje (@create). Obvykle se používají s @operation: “upsert”.
@update
Řídí, co se stane, když záznam již existuje během operace upsert.
Hodnoty:
ok– Aktualizovat existující záznam (výchozí)ignore– Přeskočit aktualizaci, ponechat beze změnyfail– Vyvolat chybu, pokud záznam existuje
@create
Řídí, co se stane, když záznam neexistuje během operace upsert.
Hodnoty:
ok- Vytvořit nový záznam (výchozí)ignore- Přeskočit vytváření, žádný nový záznamfail- Vyvolat chybu, pokud záznam neexistuje
Příklady
Přeskočit aktualizace pro existující záznamy
{
"products": [
{
"@operation": "upsert",
"@update": "ignore",
"code": "EXISTING-PRODUCT",
"name": "Updated Name"
}
]
}
Pokud produkt s kódem “EXISTING-PRODUCT” již existuje, bude přeskočen (nebude aktualizován).
Zabránit vytváření nových záznamů
{
"users": [
{
"@operation": "upsert",
"@create": "fail",
"email": "user@example.com",
"status": "active"
}
]
}
Pokud uživatel s daným e-mailem neexistuje, import selže s chybou namísto vytvoření nového uživatele.
Vytvářet pouze nové záznamy
{
"categories": [
{
"@operation": "upsert",
"@update": "fail",
"@create": "ok",
"code": "NEW-CATEGORY",
"name": "New Category"
}
]
}
Tím se vytvoří kategorie, pokud neexistuje, ale selže, pokud již existuje (zajišťuje se tak, že se vytvářejí pouze nové kategorie).
Klíčové body
- Výchozí chování je “ok” pro @update i @create
- Tyto direktivy fungují pouze s @operation: “upsert”
- “ignore” tiše přeskočí operaci
- “fail” vyvolá chybu a může narušit atomické importy
- Užitečné pro synchronizaci dat a zabránění přepisům
Režimy transakcí (@atomic)
Direktiva @atomic řídí chování transakcí a strategii zpracování chyb během importu. Vyberte vhodný režim na základě velikosti dat, tolerance chyb a požadavků na výkon.
@atomic: true (Výchozí)
Všechny importy jsou atomické – buď se celý soubor potvrdí, nebo žádný. Nejbezpečnější, ale u velkých importů může být pomalejší.
Charakteristiky:
- ✓ Všechno nebo nic – Kompletní integrita transakce
- ✓ Vrácení zpět při chybě – Jakákoli chyba zruší všechny změny
- ⚠ Omezené chyby – Maximálně 100 nahlášených chyb
@atomic: false
Každý prvek je importován nezávisle. Jsou možné částečné importy – některé záznamy mohou uspět, zatímco jiné selžou.
Charakteristiky:
- ✓ Nezávislé záznamy – Každý záznam ve vlastní transakci
- ✓ Částečný úspěch – Importovat co nejvíce dat
- ⚠ Izolace chyb – Chyby neovlivňují ostatní záznamy
@atomic: “batch” (Doporučeno)
Nejrychlejší a nejefektivnější režim. Importy jsou zpracovávány v dávkách pro optimální výkon při zachování rozumné izolace chyb.
Charakteristiky:
- 🚀 Vysoký výkon – Optimalizováno pro velké datové sady
- ⚖️ Vyvážený přístup – Výkon s izolací chyb
- 📦 Vrácení dávky zpět – Neúspěšná dávka neovlivní ostatní
Příklady
Přísný import všechno nebo nic
{
"@atomic": true,
"products": [
{ "code": "P001", "name": "Product 1" },
{ "code": "P002", "name": "Product 2" },
{ "code": "INVALID", "name": "" }
]
}
Pokud některý produkt selže při validaci, žádný z produktů nebude importován. Všechny změny jsou vráceny zpět.
Import jednotlivých záznamů
{
"@atomic": false,
"products": [
{ "code": "P001", "name": "Product 1" },
{ "code": "P002", "name": "Product 2" },
{ "code": "INVALID", "name": "" }
]
}
Platné produkty (P001, P002) budou úspěšně importovány, zatímco neplatný bude přeskočen s chybovou zprávou.
Optimalizované dávkové zpracování
{
"@atomic": "batch",
"products": [
{ "code": "P001", "name": "Product 1" },
{ "code": "P002", "name": "Product 2" },
{ "code": "P003", "name": "Product 3" }
]
}
Produkty jsou zpracovávány v optimalizovaných dávkách. Pokud jedna dávka selže, ostatní dávky mohou stále uspět, což poskytuje nejlepší rovnováhu výkonu a spolehlivosti.
Volba správného režimu
- Použijte true pro kritická data, kde by jakákoli chyba měla zastavit import
- Použijte false pro importy s nejlepším úsilím, kde je částečný úspěch přijatelný
- Použijte “batch” pro velké datové sady vyžadující optimální výkon
- Výchozí hodnota je true pro maximální integritu dat
- Zvažte svou strategii zpracování chyb a požadavky na výkon
Velikost dávky (@batchSize)
Direktiva @batchSize přepíše počet položek zpracovaných v jedné databázové transakci. Výchozí hodnota je 50; maximální povolená hodnota je 1000 (vyšší hodnoty jsou tiše omezeny, aby se zabránilo chybám nedostatku paměti). Nulové a záporné hodnoty jsou odmítnuty s chybou.
Tato direktiva nemá žádný účinek, pokud je použito @atomic: false, protože každá položka je vždy zabalena do vlastní individuální transakce.
Příklad
{
"@atomic": "batch",
"@batchSize": 200,
"products": [
{ "code": "P001", "name": "Product 1" },
{ "code": "P002", "name": "Product 2" }
]
}
Produkty budou potvrzeny po 200 najednou v rámci jedné transakce.
Kdy upravit výchozí nastavení
- Zvýšit (např. 200–500) při importu jednoduchých, plochých entit bez vnořených vztahů pro zlepšení propustnosti
- Snížit (např. 10–20) při importu entit s mnoha vztahy MANY nebo náročnými automatizacemi pro snížení tlaku na paměť
- Výchozí hodnota 50 je dobrá rovnováha pro většinu případů použití
Spuštění automatizace (@automation)
Spouštět předdefinované automatizace pro aplikaci komplexních transformací a obchodní logiky během importu
Direktiva @automation umožňuje spouštět předdefinované automatizace na importovaných záznamech. To vám umožní aplikovat komplexní transformace, výpočty nebo obchodní logiku, která je definována v entitách automatizace.
Jak to funguje
- Výběr záznamů – Záznamy jsou vybrány pomocí @where nebo identifikovány ID
- Vyhledání automatizace – Automatizace je načtena podle jejího ID nebo vyhledávacího klíče (
code:) - Spuštění skriptu –
importScriptautomatizace je analyzován a aplikován na každý odpovídající záznam - Aktualizace polí – Změny definované v automatizaci jsou aplikovány na záznam
- Uložení – Aktualizovaný záznam je uložen do databáze
Příklady
Základní spuštění automatizace
{
"products": [
{
"@where": "price < 100",
"@automation": "code:price-calculation-automation"
}
]
}
Spusťte automatizaci na všech produktech, kde je cena nižší než 100.
Automatizace výpočtu ceny
Krok 1: Vytvořte automatizaci
{
"automations": [
{
"@operation": "create",
"name": "Apply Standard Markup",
"code": "price-calculation-automation",
"type": "massUpdate",
"importScript": "{\"products\":[{\"price\":{\"e\":\"${cost} * 1.3\"}}]}"
}
]
}
Krok 2: Použijte automatizaci
{
"products": [
{
"@where": "category = 'electronics'",
"@automation": "Apply Standard Markup"
}
]
}
Podmíněné aktualizace polí
{
"automations": [
{
"name": "Low Stock Alert",
"type": "massUpdate",
"importScript": "{\"products\":[{\"@where\":\"quantity < 10\",\"status\":\"low-stock\",\"alertSent\":true}]}"
}
]
}
// Apply to products
{
"products": [
{
"@where": "quantity < 10",
"@automation": "Low Stock Alert"
}
]
}
Automatizace obsahuje vlastní podmínku @where pro dvojitou kontrolu kritérií.
Kombinace s jinými direktivami
{
"products": [
{
"@where": "status = 'pending'",
"@automation": "code:calculate-totals",
"@action": "approve"
}
]
}
Pořadí spuštění: 1) Záznam nalezen, 2) Automatizace spuštěna, 3) Akce serveru vyvolána.
Doporučené postupy
- Používejte popisné názvy: Názvy automatizací by měly jasně naznačovat jejich účel
- Důkladně testujte: Před nasazením do produkce testujte na vzorových datech
- Vyhněte se sebereferencím: Nikdy nevytvářejte automatizace, které odkazují samy na sebe
- Používejte podmínky @where: Zajistěte, aby se automatizace vztahovaly pouze na příslušné záznamy
- Sledujte hloubku: Udržujte vnoření automatizací mělké (max. 5 úrovní)
- Dokumentujte logiku: Dokumentujte komplexní logiku automatizace
Řešení problémů
Automatizace se nespouští
- Ověřte, zda je ID automatizace/vyhledávací klíč správný
- Zkontrolujte, zda je typ automatizace
massUpdateneboaiMassUpdate - Ujistěte se, že automatizace není zakázána
- Ověřte, zda je pole
importScriptplatný JSON
Chyba překročení hloubky automatizace
- Zkontrolujte kruhové reference automatizace
- Snižte úroveň vnoření automatizace
- Zkontrolujte řetězec automatizace na smyčky
Změny nebyly použity
- Ověřte, zda podmínka @where v
importScriptodpovídá záznamu - Zkontrolujte, zda jsou názvy polí ve skriptu automatizace správné
- Ujistěte se, že
importScriptje správně formátován
Vztahy a vyhledávání
Podle primárního klíče
Odkazujte pomocí primárního klíče související entity
"category": 123
Podle vyhledávání
Odkazujte pomocí typu a hodnoty vyhledávání
"category": "code:ELECTRONICS"
Podle externího ID (ext:)
Odkazujte pomocí externích identifikátorů uložených v extIds (podporuje dvojtečky v hodnotě). Externí ID jsou definována jako páry klíč-hodnota v poli extIds entity, což umožňuje flexibilní odkazování bez spoléhání na interní ID. Doporučujeme použít předponu jako ext:SYSTEM:, abyste se vyhnuli konfliktům s jinými integracemi.
"category": "ext:SYSTEM:CATEGORY:123"
Použití výrazů
Dynamické vyhledávání pomocí proměnných
"category": { "e": "code:${categoryCode}" }
Vytvořit s dodatečnými poli
Automatické vytvoření související entity s více poli pomocí @create-as
"category_id": "code:ELEC",
"category_id@if-not-found": "create",
"category_id@create-as": {
"name": "Electronics",
"code": "ELEC"
}
Více hodnot
Vyzkoušejte více metod řešení
"category": [123, "code:FALLBACK"]
Vícenásobné vztahy
Pole vztahů jedna k mnoha
"items": [
{ "name": "Item 1", "quantity": 10 },
{ "name": "Item 2", "quantity": 5 }
]
Speciální přípony polí
@atomic
Řídí chování transakcí a strategii zpracování chyb
Hodnoty:
true(všechno, nebo nic)false(nezávislé záznamy)batch(dávkové zpracování)
@operation
Řídí akci pro položku
Hodnoty:
createupdateupsertdelete
@where
Definuje podmínky pro hromadné operace
Hodnoty:
- Formát objektu
- Formát výrazu
@m
Určuje autora/zdroj změny
Hodnoty:
api/ahuman/user/udefault/dimport/iai
@if-not-found
Řídí chování, pokud vyhledávání selže
Hodnoty:
failnullcreateskip
@create-as
Určuje dodatečná pole při vytváření související entity s @if-not-found=create
Hodnoty:
- Objekt s názvy polí a hodnotami
@action
Vyvolá akci serveru na importovaném záznamu
Hodnoty:
mergesync- vlastní akce
@automation
Spustí předdefinovanou automatizaci na importovaném záznamu
Hodnoty:
- ID automatizace
- název/vyhledávání automatizace
@batchSize
Nastaví počet položek zpracovaných v jedné transakci (výchozí: 50, maximum: 1000)
Hodnoty:
- Kladné celé číslo (1–1000)
@requireChangeSet
Vyžaduje sledování změn v sadě změn
Hodnoty:
truefalse
@removeAll
Odstraní všechny existující související položky, které nejsou v importu
Hodnoty:
truefalse
@update
Řídí chování, když záznam existuje během upsertu
Hodnoty:
okignorefail
@create
Řídí chování, když záznam neexistuje během upsertu
Hodnoty:
okignorefail
Řetězcové výrazy
Výkonný šablonovací jazyk pro dynamické generování řetězců s proměnnými, funkcemi a podmíněnou logikou
Základní interpolace proměnných
Použijte syntaxi ${variableName} pro vložení hodnot proměnných. Proměnné jsou řešeny z aktuálního kontextu importu.
Příklady:
"name": "Hello ${firstName}!" → "Hello John!"
"description": "${brand} - ${model}" → "Apple - iPhone"
"fullName": "${UPPER(firstName)} ${lastName}" → "JOHN Doe"
Řetězcové funkce
Manipulace s textem
UPPER(text)– Převést na velká písmenaLOWER(text)– Převést na malá písmenaTRIM(text)– Odstranit mezery z obou koncůLTRIM(text)– Odstranit mezery z levého konceRTRIM(text)– Odstranit mezery z pravého konceUPPERFIRST(text)– Velké první písmenoREPLACE(text, search, replacement)– Nahradit textSUBSTR(text, start, length)– Extrahovat podřetězec
Informace a utility pro řetězce
LEN(text)– Získat délku řetězceSTRIPHTML(html)– Odstranit HTML tagyADDSLASHES(text)– Escapovat uvozovkyXMLESCAPE(text)– Escapovat XML znakyCOALESCE(val1, val2, ...)– První nenulová/neprázdná hodnotaENCODE/DECODE(text, format)– Operace kódování (podporované formáty: base64, hex, base64url)
Funkce regulárních výrazů
Použijte regulární výrazy pro porovnávání vzorů a extrakci textu v rámci řetězcových výrazů.
Porovnávání vzorů
REGEXPMATCH(pattern, text)
Testuje, zda text odpovídá vzoru. Vrátí true, pokud vzor odpovídá textu, jinak false.
Příklady:
"${REGEXPMATCH('^[A-Z]', 'Hello')}" → true (starts with capital)
"${REGEXPMATCH('^[0-9]+$', 'Hello')}" → false (not all digits)
Extrakce textu
REGEXP(pattern, text)
Extrahujte text pomocí regulárního výrazu. Vrátí první zachycenou skupinu, pokud existuje, jinak celou shodu. Vrátí null, pokud není nalezena žádná shoda.
Příklady:
"${REGEXP('^([A-Z])[a-z]+', 'Hello')}" → "H" (first capturing group)
"${REGEXP('^[A-Z][a-z]+', 'Hello')}" → "Hello" (full match, no groups)
Běžné případy použití
Validace e-mailu
"${REGEXPMATCH('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', email)}"
Extrakce telefonního čísla
"${REGEXP('\\(([0-9]{3})\\) [0-9]{3}-[0-9]{4}', '(555) 123-4567')}" → "555"
Validace dat
"${IF(REGEXPMATCH('^[A-Z]{2}[0-9]{4}$', code), 'Valid format', 'Invalid format')}"
Extrakce ceny
"${REGEXP('Price: \\$([0-9]+\\.[0-9]{2})', 'Price: $19.99')}" → "19.99"
Podmíněná logika
Funkce IF
Použijte IF(condition, trueValue, falseValue) pro podmíněný výběr hodnoty.
Příklady:
"status": "${IF(age >= 18, 'Adult', 'Minor')}" → "Adult"
"message": "${IF(isActive = true, 'Available', 'Unavailable')}" → "Available"
Ternární operátor
Alternativní podmíněná syntaxe: condition ? trueValue : falseValue (stejné jako funkce IF, ale stručnější)
Příklady:
"status": "${age >= 18 ? 'Adult' : 'Minor'}" → "Adult"
"message": "${isActive ? 'Available' : 'Unavailable'}" → "Available"
Vnořené ternární operátory
Ternární operátory lze vnořovat pro komplexní podmíněnou logiku.
Příklady:
"category": "${age > 65 ? 'Senior' : (age > 18 ? 'Adult' : 'Minor')}" → "Adult"
"grade": "${score >= 90 ? 'A' : (score >= 80 ? 'B' : (score >= 70 ? 'C' : 'F'))}" → "A"
"access": "${userRole = 'admin' ? 'Full Access' : (userRole = 'user' ? 'Limited Access' : 'No Access')}" → "Full Access"
Ternární operátor s logickými operátory
Kombinujte ternární operátory s logickými operátory pro komplexní podmínky.
Příklady:
"eligibility": "${age >= 18 && isActive ? 'eligible' : 'not eligible'}" → "eligible"
"access": "${isAdmin || isManager ? 'access granted' : 'access denied'}" → "access granted"
"welcome": "${(age > 18 && status = 'verified') || isVIP ? 'Welcome' : 'Access denied'}" → "Welcome"
Priorita operátorů
Priorita (od nejvyšší po nejnižší)
- Volání funkcí
- Seskupování závorkami
- Násobení a dělení (*, /)
- Sčítání a odčítání (+, -)
- Zřetězení řetězců (.)
- Relační operátory
- Logické AND (&&)
- Logické OR (||)
- Ternární podmíněný operátor (? :)
Pokročilé příklady
Komplexní podmíněná logika
{
"userStatus": {
"e": "${(age >= 18 && isVerified = true) || isAdmin = true ? 'Authorized' : 'Unauthorized'}"
},
"priceCategory": {
"e": "${price > 1000 ? 'Premium' : price > 500 ? 'Standard' : 'Budget'}"
},
"statusMessage": {
"e": "${isActive ? (lastLogin ? 'Active User' : 'Inactive User') : 'Disabled Account'}"
}
}
Vnořování funkcí na více úrovních
{
"processedName": {
"e": "${UPPER(TRIM(REPLACE(rawName, '_', ' ')))}"
}
}
Podmíněné sestavování řetězců
{
"fullAddress": {
"e": "${street}${IF(LEN(apartment) > 0, ', Apt ' + apartment, '')}${IF(LEN(city) > 0, ', ' + city, '')}"
}
}
Validace a formátování
{
"emailStatus": {
"e": "${IF(LEN(email) > 0 && email != null, 'Email: ' + LOWER(TRIM(email)), 'No email provided')}"
}
}
Komplexní obchodní logika
{
"accessLevel": {
"e": "${IF((userRole = 'admin' || userRole = 'moderator') && isActive = true && LEN(lastLogin) > 0, 'Full Access', IF(userRole = 'user' && isActive = true, 'Limited Access', 'No Access'))}"
}
}
Čištění a transformace dat
{
"cleanDescription": {
"e": "${TRIM(STRIPHTML(REPLACE(rawDescription, '\\n', ' ')))}"
}
}
Příklady pro rychlou referenci
Základní operace
"Hello ${world}!"
"${UPPER('hello')} ${LOWER('WORLD')}"
"${IF(isActive, 'Active', 'Inactive')}"
"${isActive ? 'Active' : 'Inactive'}"
Komplexní podmínky
"${IF(age >= 18 && status = 'verified', 'Welcome', 'Access denied')}"
"${price > 100 ? 'Premium' : price > 50 ? 'Standard' : 'Budget'}"
"${COALESCE(nickname, firstName, 'Anonymous')}"
Příklady formátu výrazů
Jakékoli pole může použít formát výrazu poskytnutím objektu s vlastností “e” obsahující řetězec výrazu.
Příklady kalkulátoru čísel
"amount": "100+200" → 300
"amount": "3.5%" → 0.035
"amount": "abs(-100)" → 100
"amount": "(100+50)*2" → 300
"amount": "sqrt(16)" → 4
Příklady kalkulátoru dat
"date": "1.1.2025" → 2025-01-01
"date": "15.6.25" → 2025-06-15
"date": "today + 1y" → one year from today
"date": "1.1.2025 + 5M" → 2025-06-01
Interpolace proměnných
"price": { "e": "${basePrice} * 1.21" }
"fullName": { "e": "Hello ${firstName}!" }
"dueDate": { "e": "${createdDate} + 30d" }
Režimy aktualizace přeložitelných polí
Komplexní průvodce pro práci s vícejazyčnými poli s různými strategiemi aktualizace
Přeložitelná pole podporují více režimů aktualizace s různým chováním pro zpracování existujících překladů.
Tři režimy aktualizace
Režim 1: Aktualizace specifická pro jazyk (režim sloučení)
"name": "Value"
Aktualizuje překlad pouze pro aktuálně vybraný jazyk (@language nebo systémový výchozí)
Používá: nastavení @language v horní části souboru importu (nebo systémový výchozí jazyk)
Výchozí: "name@removeAll": false (zachovává překlady v jiných jazycích)
Příklad: Pokud je aktuální jazyk “en” a existující překlady jsou {"en": "Old", "cs": "Starý"}, pak "name": "New" vede k {"en": "New", "cs": "Starý"}
Režim 2: Přímé asociativní pole (režim nahrazení)
"name": {"en": "English", "cs": "Czech"}
Nahradí všechny překlady zadanými jazyky
Výchozí: "name@removeAll": true (odstraní všechny ostatní existující překlady, které nejsou specifikovány)
Příklad: Pokud existující překlady jsou {"en": "Old", "cs": "Starý", "de": "Alt"}, pak "name": {"en": "New", "fr": "Nouveau"} vede k {"en": "New", "fr": "Nouveau"} (německý překlad je odstraněn)
Režim 3: Přímý formát pole (režim nahrazení)
"name": [{"language": "en", "value": "English"}, {"language": "cs", "value": "Czech"}]
"name": [{"language": "en", "name": "English"}, {"language": "cs", "name": "Czech"}]
Alternativní formát podporující vlastnosti “value” i “name”
Výchozí: "name@removeAll": true (odstraní všechny ostatní existující překlady, které nejsou specifikovány)
Příklad: "name": [{"language": "en", "value": "New"}] odstraní všechny ostatní jazykové překlady a ponechá pouze anglický
Ovládání odstranění překladů
@removeAll: true
Odstranit všechny ostatní překlady, které nejsou uvedeny v aktuální aktualizaci
Upozornění: Tímto budou trvale smazány nespecifikované překlady
@removeAll: false
Zachovat stávající překlady, aktualizovat/přidat pouze ty specifikované
Bezpečné: Stávající překlady jsou zachovány a sloučeny
Shrnutí výchozího chování
- Režim 1 (specifický pro jazyk):
@removeAll: false(sloučit) - Režim 2 a 3 (přímá pole):
@removeAll: true(nahradit)
Praktické příklady
Sloučit se stávajícími (zachovává ostatní jazyky)
{
"@language": "en",
"products": [
{
"code": "WIDGET-001",
"name": "New English Name",
"name@removeAll": false
}
]
}
Tímto se aktualizuje pouze anglický překlad, při zachování stávajících českých, německých atd.
Nahradit všechny překlady
{
"products": [
{
"code": "WIDGET-001",
"name": {"en": "English", "cs": "Czech"}
}
]
}
Automaticky nastaví @removeAll: true, čímž odstraní všechny ostatní jazykové překlady.
Formát pole s selektivním ovládáním odstranění
{
"products": [
{
"code": "WIDGET-001",
"name": [{"language": "en", "value": "English"}],
"name@removeAll": false
}
]
}
Přepsat výchozí nastavení pro zachování ostatních jazyků při použití formátu pole.
Osvědčené postupy
- Použijte režim 1 pro inkrementální aktualizace překladů
- Použijte režimy 2/3 pro hromadné importy překladů z externích systémů
- Vždy explicitně specifikujte @removeAll, pokud je chování kritické
- Zvažte použití direktivy @language pro konzistentní zpracování jazyků napříč importem
- Otestujte chování překladů s ukázkovými daty před hromadnými importy
Častá úskalí
Další kroky
Nyní, když rozumíte importnímu systému, naučte se vytvářet šablony mapování pro transformaci vašich dat.
[navigate:/help/en/api/mapper|Pokračovat na Mapování dat|settings]
Související články
- [navigate:/help/en/user-flows/automatic-imports|Pracovní postupy automatického importu|refresh-cw]
- [navigate:/help/en/user-flows/data-migration|Průvodce migrací dat|upload]
- [navigate:/help/en/api/webhooks|Dokumentace k webhookům|webhook]