Statement कैटलॉग
अंतिम अपडेट: 23 जुलाई 2026
statements array का हर element एक statement है। यह दस्तावेज़ सभी 17 statement प्रकारों के field, व्यवहार और परिणाम को सूचीबद्ध करता है। हर मान वाली जगह मान एक्सप्रेशन के नियमों (reference, literal, JsonLogic, locale map) का पालन करती है।
Statement सारांश
| श्रेणी | type | एक-पंक्ति सारांश |
|---|---|---|
| resource लेखन | ResourceCreate | Content/Media बनाना (वैकल्पिक रूप से publish) |
ResourceUpdate | Content/Media के field का पूर्ण प्रतिस्थापन (न दिए गए field/locale हट जाते हैं) | |
ResourcePatch | Content/Media के field का आंशिक मर्ज (केवल निर्दिष्ट field/locale; literal null हटाता है) | |
ResourceDelete | हटाना (केवल Draft/Archived; Published हो तो पहले unpublish) | |
ResourcePublish / ResourceUnpublish | publish / unpublish | |
ResourceArchive / ResourceUnarchive | archive / unarchive | |
| resource पठन | ResourceRead | id से एकल आइटम पठन |
ResourceFind | filter से पहला मेल खाता एकल आइटम (न हो तो null) | |
ResourcePageRead | filter / sort / page पठन ({ items, next }) | |
| बाहरी | Http | बाहरी HTTP कॉल ({ status, body })। केवल Async |
| वेरिएबल | SetVar | script-scoped वेरिएबल घोषित/अपडेट करना |
| नियंत्रण प्रवाह | If | शर्तीय शाखा |
Loop | पुनरावृत्ति (foreach / while / counted) | |
Parallel | शाखाओं को समवर्ती रूप से चलाना | |
Return | परिणाम लौटाना और जल्दी समाप्त होना | |
Try | अपवाद प्रबंधन (catch/finally) |
चक्रीय कॉल अधिकतम 3 बार। ऊपर दिए गए रिसोर्स-राइट स्टेटमेंट (
ResourceCreate,ResourceUpdate,ResourcePublishआदि) परिवर्तन इवेंट उत्पन्न करते हैं, और वे इवेंट Webhook के माध्यम से फिर से किसी Script को चला सकते हैं। ऐसी श्रृंखला (Script → इवेंट → Webhook → Script → …) अधिकतम 3 बार तक ही चलती है, उसके बाद प्लेटफ़ॉर्म इसे अपने-आप रोक देता है ताकि अनंत लूप न बनें।
साझा field
{ "type": "<StatementType>", "name": "<वैकल्पिक, script में अद्वितीय>", /* ...type-विशिष्ट field... */ }type: विभेदक (discriminator)। ऊपर दी गई तालिका के मानों में से एक (अनिवार्य)।name: वैकल्पिक। सेट करने पर परिणाम/<name>पर context में bind हो जाता है, जिससे बाद के statements उसे{ /<name>/... }के रूप में संदर्भित कर सकते हैं। यदि परिणाम का उपयोग नहीं करना है तो इसे छोड़ दें।- बाइंडिंग नाम नियम:
name(औरLoopकाas) context रूट पर सीधे रखी जाने वाली key है, इसलिए इसे सहेजते समय सत्यापित किया जाता है। यह खाली string नहीं होनी चाहिए और इसमें/·~शामिल नहीं होने चाहिए (ताकि इसे JSON Pointer key के रूप में उपयोग किया जा सके), यह किसी reserved रूट (payload·vars·error) के समान नहीं हो सकती, और एक Script के भीतर अद्वितीय होनी चाहिए। उल्लंघन होने पर क्रमशःWGL400033(प्रारूप)·WGL400032(reserved शब्द)·WGL400034(डुप्लिकेट) के साथ सहेजना अस्वीकृत हो जाता है।
एंटिटी reference आकार
contentType और target जैसे एंटिटी reference एक ही आकार { "sys": { "id": <मान एक्सप्रेशन> } } में एकीकृत होते हैं। केवल sys.id चाहिए, और लक्ष्य type resource से अनुमानित होता है (sys.type और sys.targetType छोड़ दिए जाते हैं)।
contentType.sys.idआमतौर पर एक literal होता है (उदाहरण:"ct_post")।target.sys.idआमतौर पर एक{ /ptr }मान एक्सप्रेशन होता है (runtime पर resolve; उदाहरण:{ /payload/sys/id })।
resource
resource-परिवार के statements लक्ष्य प्रकार को resource: "Content" | "Media" से निर्दिष्ट करते हैं।
resource लेखन
हर write statement में propagateEvents (डिफ़ॉल्ट false) होता है। इसे true करने पर वह write अपना EntityEvent emit करता है (search indexing, Webhook जैसे बाद के trigger)। डिफ़ॉल्ट रूप से यह emit नहीं करता (एक शांत system write)।
ResourceCreate
Content या Media बनाता है। Content और Media fields मॉडल साझा करते हैं, और मान locale map होते हैं।
| field | दायरा | विवरण |
|---|---|---|
resource | साझा | "Content" या "Media" (अनिवार्य) |
contentType | Content | बनाया जाने वाला Content Type ({ sys: { id } })। Content होने पर अनिवार्य |
fields | साझा | field map { "<field>": { "<locale>": मान } }। हर populate किए गए field के लिए डिफ़ॉल्ट locale bucket अनिवार्य। Content की keys Content Type की परिभाषा का पालन करती हैं, और Media की keys तय हैं (title·description·file) |
locale | साझा | (सुविधा) देने पर fields के हर मान को { <locale>: मान } के रूप में स्वतः wrap कर देता है |
publish | साझा | write के बाद publish (CDA/ACDA पर दिखता है)। डिफ़ॉल्ट true |
Mediafile:fields.file.{locale}का मान एक ingest निर्देश{ "source": <मान एक्सप्रेशन>, "encoding": "url"|"base64" }होता है (दोनों अनिवार्य)। फ़ाइल शामिल करने वाला Media write केवल Async होता है (engine पृष्ठभूमि में उसे inline process करके publish करता है; url और base64 दोनों पर समान रूप से लागू)। फ़ाइल-रहित (fileless) Media भी बनाया जा सकता है। यदिpublish:trueहै पर फ़ाइल नहीं है या processing अधूरी है, तो publish चरण में error आता है; औरpublish:falseहो तो यहDraftही रहता है।- परिणाम (
namebinding): बनाया गया resource।{ /<name>/sys/id },{ /<name>/fields/<field>/<locale> }।
// Content
{ "type": "ResourceCreate", "resource": "Content", "contentType": { "sys": { "id": "ct_post" } },
"fields": { "title": { "en-US": "{ /payload/fields/title }" } }, "publish": true, "name": "post" }
// Media. file एक ingest निर्देश है (केवल Async)
{ "type": "ResourceCreate", "resource": "Media",
"fields": {
"title": { "en-US": "{ /payload/fields/prompt }" },
"file": { "en-US": { "source": "{ /gen/body/data/0/url }", "encoding": "url" } }
}, "name": "img" }ResourceUpdate
लक्ष्य Content या Media के field को पूरी तरह प्रतिस्थापित करता है (PUT)। fields में जो दिया जाता है वही नया field-सेट बन जाता है, और यहाँ मौजूद न होने वाला हर field और locale हटा दिया जाता है। केवल कुछ हिस्सा बदलने के लिए ResourcePatch का उपयोग करें।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
target | लक्ष्य ({ sys: { id } }, अनिवार्य)। id आमतौर पर { /ptr } होता है |
fields | लिखे जाने वाले सभी field। मान locale map होते हैं। चूँकि यह पूर्ण प्रतिस्थापन है, यहाँ मौजूद न होने वाला हर field और locale हटा दिया जाता है। Media के लिए file एक ingest निर्देश है (ऊपर ResourceCreate देखें)। सूचीबद्ध फ़ाइलें हमेशा पुनः ingest होती हैं, और जिन locales की फ़ाइल नहीं दी गई उन्हें हटा दिया जाता है |
locale | (सुविधा) fields को स्वतः wrap करता है |
version | (वैकल्पिक) मान एक्सप्रेशन (Int)। optimistic locking। देने पर, यह update केवल तभी चलता है जब यह लक्ष्य के वर्तमान sys.version से मेल खाता हो; मेल न खाने पर यह version-conflict error के साथ abort कर देता है (Try से catch किया जा सकता है)। छोड़ने पर कोई जाँच नहीं होती (last-write-wins) |
publish | update के बाद republish। डिफ़ॉल्ट true |
Media का केवल metadata बदलने के लिए Update का उपयोग करने पर file छूट जाता है और फ़ाइल पूरी तरह हट जाती है (क्योंकि यह पूर्ण प्रतिस्थापन है)। आंशिक बदलाव के लिए हमेशा ResourcePatch का उपयोग करें। फ़ाइल शामिल करने वाला Update केवल Async होता है।
{ "type": "ResourceUpdate", "resource": "Content", "target": { "sys": { "id": "{ /payload/sys/id }" } },
"fields": { "title": { "en-US": "Hello", "ko-KR": "안녕" }, "status": { "en-US": "published" } } }ResourcePatch
लक्ष्य Content या Media के field को आंशिक रूप से मर्ज करता है (PATCH)। यह fields में दिए गए केवल उन्हीं field (और उनके भीतर के locale) को अधिलेखित करता है, और जिन field और locale का उल्लेख नहीं किया गया उन्हें ज्यों-का-त्यों रखता है। मान का आकार, locale, version और publish ResourceUpdate जैसे ही हैं।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
target | लक्ष्य ({ sys: { id } }, अनिवार्य)। id आमतौर पर { /ptr } होता है |
fields | अधिलेखित किए जाने वाले field। मान locale map होते हैं। केवल निर्दिष्ट field और locale bucket अपडेट होते हैं (बाकी बने रहते हैं)। यदि कोई मान literal null है, तो वह (field, locale) हट जाता है। Media के लिए file एक ingest निर्देश है (ऊपर ResourceCreate देखें) |
locale | (सुविधा) fields को स्वतः wrap करता है |
version | (वैकल्पिक) ResourceUpdate जैसा ही (optimistic locking) |
publish | update के बाद republish। डिफ़ॉल्ट true |
- किसी विशिष्ट locale या फ़ाइल को हटाना: मान के रूप में literal
nullदें। उदाहरण:"title": { "fr-FR": null }(fr-FR title हटाता है),"file": { "en-US": null }(en-US फ़ाइल हटाता है)। जो मान एक्सप्रेशन runtime पर null के रूप में मूल्यांकित होता है वह हटाना नहीं बल्कि एक error है (केवल literal null हटाता है)। - Media
fileको ingest निर्देश देने पर वह उस locale की फ़ाइल को प्रतिस्थापित कर देता है (केवल Async)। यदि फ़ाइल नहीं दी जाती, तो वह बनी रहती है।
// केवल viewCount(en-US) को +1. title, अन्य locale आदि बाकी सब ज्यों-का-त्यों बने रहते हैं
{ "type": "ResourcePatch", "resource": "Content", "target": { "sys": { "id": "{ /payload/sys/id }" } },
"fields": { "viewCount": { "en-US": { "+": [ "{ /payload/fields/viewCount }", 1 ] } } } }ResourceDelete
लक्ष्य को हटाता है। केवल Draft और Archived स्थिति को ही हटाया जा सकता है। Published या Changed होने पर delete अस्वीकृत होता है, इसलिए आपको पहले ResourceUnpublish करना होगा (Media के लिए, फ़ाइल की processing चल रही हो (busy) तब भी अस्वीकृत होता है)। यह auto-unpublish नहीं करता (CMA/ACMA जैसा ही)।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
target | लक्ष्य ({ sys: { id } }, अनिवार्य) |
{ "type": "ResourceDelete", "resource": "Content", "target": { "sys": { "id": "{ /payload/sys/id }" } } }ResourcePublish, ResourceUnpublish, ResourceArchive, ResourceUnarchive
लक्ष्य की publish और archive स्थिति को स्वतंत्र रूप से नियंत्रित करता है। चारों के field एक समान हैं। हर कार्य की status पूर्वशर्त CMA/ACMA जैसी ही है (publish Archived से संभव नहीं और फ़ाइल processing पूरी होना आवश्यक; unpublish केवल Published·Changed से; archive केवल Draft से; unarchive केवल Archived से)।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
target | लक्ष्य ({ sys: { id } }, अनिवार्य) |
version | (वैकल्पिक) मान एक्सप्रेशन (Int)। optimistic locking। देने पर यह कार्य केवल तभी किया जाता है जब यह वर्तमान sys.version से मेल खाता हो |
{ "type": "ResourcePublish", "resource": "Content", "target": { "sys": { "id": "{ /payload/sys/id }" } } }
{ "type": "ResourceUnpublish", "resource": "Content", "target": { "sys": { "id": "{ /payload/sys/id }" } } }
{ "type": "ResourceArchive", "resource": "Media", "target": { "sys": { "id": "{ /m/sys/id }" } } }resource पठन
read statements स्थिति को नहीं बदलते (propagateEvents नहीं होता)।
तीनों read statements from (वैकल्पिक, डिफ़ॉल्ट Current) से यह तय करते हैं कि कौन-सा संग्रहीत संस्करण पढ़ा जाए। Current वह नवीनतम draft है जिसे कंटेंट स्टूडियो देखता है (वह मान जो CMA/ACMA पढ़ता है), और Published वह publish स्नैपशॉट है (जो CDA/ACDA डिलीवर करता है, अर्थात अंतिम publish के समय का मान)।
इसके अतिरिक्त, ResourceFind और ResourcePageRead advanced (वैकल्पिक, डिफ़ॉल्ट false) से उन्नत खोज (Advanced Search) चालू कर सकते हैं। यह केवल Content के लिए है, इसलिए Media पठन में इसे अनदेखा कर दिया जाता है। चालू होने पर where में regex, near और within operators तथा फ़ुल-टेक्स्ट खोज का उपयोग किया जा सकता है (जिस LongText field में फ़ुल-टेक्स्ट खोज चालू है, वहाँ eq उस मान को समाहित करने वाले आइटम भी आंशिक एवं समरूप मिलान से ढूँढ लेता है), और order fields.* से sorting कर सकता है। बंद होने पर ये तीनों operators अस्वीकार कर दिए जाते हैं, text पर eq ठीक-ठीक मिलान होता है, और prefix तथा तुलना एवं सूची operators उन्नत खोज से निरपेक्ष रूप से काम करते हैं। अभी-अभी बनाया या बदला गया कोई आइटम उन्नत खोज में प्रतिबिंबित होने में थोड़ा समय (लगभग 1 सेकंड) लेता है, इसलिए ठीक उसके बाद चलने वाली उन्नत खोज query में वह छूट सकता है। अभी-अभी लिखे गए किसी आइटम को तुरंत पढ़ने के लिए, id से ResourceRead (मुख्य संग्रह, प्रतिबिंबित होने में कोई विलंब नहीं) का उपयोग करें, या write द्वारा लौटाए गए sys.id से उसका पठन करें।
where और order में कंटेंट field को fields.<field> के रूप में लिखा जाता है (अकेले नाम से यह पहचाना नहीं जाता)। fields.<field> पर space की डिफ़ॉल्ट locale स्वतः लागू होती है, इसलिए locale सीधे नहीं जोड़ी जाती। नीचे दिए उदाहरणों के fields.status, fields.slug ज्यों-के-त्यों डिफ़ॉल्ट locale की क्वेरी हैं। किसी विशिष्ट (गैर-डिफ़ॉल्ट) locale को लक्षित करने पर ही fields.<field>.<locale> (उदाहरण: fields.title.ko-KR) के रूप में स्पष्ट करें। sys.* (sys.createdAt आदि) और createdBy (:self) को fields. के बिना ज्यों-का-त्यों लिखें। विस्तृत नियम मान एक्सप्रेशन में where और order की locale में दिए गए हैं।
ResourceRead
यह id से एकल आइटम पठन है (get-by-id)। परिणाम पूरे resource को नाम में bind करता है।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
target | लक्ष्य ({ sys: { id } })। id एक मान एक्सप्रेशन है |
from | (वैकल्पिक) Current (डिफ़ॉल्ट, नवीनतम draft) या Published (publish स्नैपशॉट) |
- परिणाम:
{ /<name>/sys/id }और{ /<name>/fields/<field>/<locale> }को सीधे संदर्भित करें (items/0की ज़रूरत नहीं)। - यदि लक्ष्य मौजूद न हो तो error आता है। इसे संभालने के लिए
Tryमें लपेटा जा सकता है।
{ "type": "ResourceRead", "resource": "Content",
"target": { "sys": { "id": "{ /payload/fields/orderId }" } }, "name": "order" }ResourceFind
filter से पहला मेल खाता एकल आइटम पढ़ता है। कोई न हो तो null होता है। किसी अद्वितीय business key (slug, email, sku) से एक रिकॉर्ड ढूँढने के लिए इसका उपयोग करें।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
contentType | (Content) खोज का दायरा Content Type ({ sys: { id } }) |
where | filter ({ "<field>": { "<op>": <मान> } })। उपलब्ध operators operator सूची के अनुसार हैं (regex/near/within के लिए advanced आवश्यक)। createdBy: ":self" समर्थित |
order | कई मैच होने पर "पहला" तय करने वाला sort (उदाहरण: "-sys.createdAt") |
from | (वैकल्पिक) Current (डिफ़ॉल्ट, नवीनतम draft) या Published (publish स्नैपशॉट) |
advanced | (वैकल्पिक) उन्नत खोज (Advanced Search) से चलाएँ। केवल Content (Media अनदेखा)। डिफ़ॉल्ट false। ऊपर resource पठन टिप्पणी देखें। |
- परिणाम: पहले मेल खाते resource को नाम में bind करता है। इसे सीधे
{ /<name>/fields/<field>/<locale> }के रूप में संदर्भित करें। कोई न होने पर यहnullहोता है, इसलिए{ "==": [ "{ /<name> }", null ] }से अस्तित्व के आधार पर शाखा बनाएँ (find-then-upsert का आम pattern)।
{ "type": "ResourceFind", "resource": "Content", "contentType": { "sys": { "id": "ct_article" } },
"where": { "fields.slug": { "eq": "{ /payload/fields/slug }" } }, "name": "found" }ResourcePageRead
यह एक filter, sort और page पठन है।
| field | विवरण |
|---|---|
resource | "Content" या "Media" |
contentType | (Content) खोज का दायरा Content Type |
where | filter ({ "<field>": { "<op>": <मान> } })। उपलब्ध operators operator सूची के अनुसार हैं (regex/near/within के लिए advanced आवश्यक)। createdBy: ":self" समर्थित |
order | sort (उदाहरण: "-sys.createdAt") |
limit | page size (100 या कम) |
cursor | अगले page के लिए, पिछले परिणाम का next |
from | (वैकल्पिक) Current (डिफ़ॉल्ट, नवीनतम draft) या Published (publish स्नैपशॉट) |
advanced | (वैकल्पिक) उन्नत खोज (Advanced Search) से चलाएँ। केवल Content (Media अनदेखा)। डिफ़ॉल्ट false। ऊपर resource पठन टिप्पणी देखें। |
- परिणाम:
{ items, next }।{ /<name>/items/0/... }, और अगला page{ /<name>/next }है। - सब कुछ traverse करने के लिए,
Loop while "{ /vars/hasMore }"कोcursorऔरSetVarसंचय के साथ उपयोग करें (कुकबुक देखें)।
{ "type": "ResourcePageRead", "resource": "Content", "contentType": { "sys": { "id": "ct_post" } },
"where": { "fields.status": { "eq": "draft" } }, "order": "-sys.createdAt", "limit": 100, "name": "page" }बाहरी
Http
बाहरी HTTP कॉल करता है। यदि Http मौजूद है, तो executionMode Async होना चाहिए (ExternalIo)।
| field | विवरण |
|---|---|
method | "GET", "POST", "PUT", "PATCH", "DELETE" |
url | लक्ष्य URL (मान एक्सप्रेशन; { /ptr } डाला जा सकता है) |
headers | [{ "key", "value", "secret"? }]। value एक मान एक्सप्रेशन है। secret:true header को केवल CMA (administrator) के लिए माना जाता है: यह अंतिम उपयोगकर्ता को उजागर नहीं होता, और अनुरोध भेजे जाने से ठीक पहले ही decrypt किया जाता है |
body | अनुरोध body (मान एक्सप्रेशन या JSON) |
timeoutMs | इस कॉल का timeout (ms) |
retry | response status 400 या उससे अधिक होने पर retry की संख्या। डिफ़ॉल्ट 0, अधिकतम सीमा maxHttpRetry (डिफ़ॉल्ट 2) |
ignoreStatusCode | (retry पूरा होने के बाद का) अंतिम status 400 या उससे अधिक होने पर इस कॉल को विफल माना जाए या नहीं। डिफ़ॉल्ट false होने पर इसे विफलता माना जाता है और यह Try/catch का लक्ष्य बन जाता है। true होने पर इसे विफलता नहीं माना जाता और { status, body } को ज्यों-का-त्यों bind कर दिया जाता है (कॉलर स्वयं status के आधार पर शाखा बनाता है) |
- परिणाम:
{ status, body }।{ /<name>/status },{ /<name>/body/... }। - response आकार सीमा: response body अधिकतम 10MiB है। इससे अधिक होने पर यह कॉल अपवाद के साथ विफल होती है और इसे किसी भी अन्य रनटाइम विफलता की तरह
Try/catchसे संभाला जा सकता है (यह आकार-आधारित विफलता है, इसलिए इसेignoreStatusCodeसे नज़रअंदाज़ नहीं किया जाता)।
{ "type": "Http", "method": "POST", "url": "https://api.llm.com/v1/gen",
"headers": [ { "key": "Authorization", "value": "Bearer sk-...", "secret": true } ],
"body": { "prompt": "{ /payload/fields/prompt }" }, "timeoutMs": 15000, "retry": 1, "name": "resp" }वेरिएबल
SetVar
एक script-scoped परिवर्तनीय वेरिएबल घोषित या अपडेट करता है। इसे { /vars/<var> } के रूप में संदर्भित करें (JsonLogic में वेरिएबल घोषणा नहीं है, इसलिए इसे एक statement के रूप में दिया गया है)।
| field | विवरण |
|---|---|
var | वेरिएबल का नाम। { /vars/<var> } के रूप में संदर्भित |
value | मान एक्सप्रेशन। यह संचय करने के लिए स्वयं को संदर्भित कर सकता है |
{ "type": "SetVar", "var": "total", "value": 0 }
{ "type": "SetVar", "var": "total", "value": { "+": [ "{ /vars/total }", "{ /row/qty }" ] } } // संचय
{ "type": "SetVar", "var": "ids", "value": { "merge": [ "{ /vars/ids }", [ "{ /row/sys/id }" ] ] } } // array में इकट्ठा करनानियंत्रण प्रवाह
If
एक शर्तीय शाखा। condition JsonLogic है, और सत्य/असत्य सत्य और असत्य का निर्धारण नियमों का पालन करते हैं।
| field | विवरण |
|---|---|
condition | JsonLogic (boolean के रूप में मूल्यांकित) |
then | true होने पर चलाने के लिए Statement array |
else | (वैकल्पिक) false होने पर चलाने के लिए Statement array |
{ "type": "If",
"condition": { "<": [ "{ /wallet/fields/balance/en-US }", "{ /payload/fields/cost }" ] },
"then": [ { "type": "Return", "value": { "ok": false, "reason": "insufficient credit" } } ],
"else": [ /* ... */ ] }Loop
पुनरावृत्ति। एक mode चुनें: over (foreach), while (शर्त), या for (counted)। किसी भी mode में engine maxIterations से एक ऊपरी सीमा लागू करता है (अनंत loop से बचने के लिए)। body के भीतर बाहरी कॉल (Http, Media फ़ाइल ingest) निषिद्ध हैं।
| field | विवरण |
|---|---|
over | foreach: एक मान एक्सप्रेशन जो array के रूप में resolve होता है |
while | शर्त: JsonLogic (true रहने तक दोहराता है) |
for | counted: { "from", "to", "step"? }। from से to तक समावेशी; step डिफ़ॉल्ट 1 |
maxIterations | engine द्वारा लागू अधिकतम पुनरावृत्ति संख्या (अनिवार्य) |
as | वर्तमान आइटम या index को bind करने के लिए नाम ({ /<as> }) |
body | loop body के लिए Statement array |
// foreach
{ "type": "Loop", "over": "{ /payload/fields/items }", "as": "item", "maxIterations": 100,
"body": [ { "type": "ResourceCreate", "resource": "Content", "contentType": { "sys": { "id": "ct_item" } },
"fields": { "name": { "en-US": "{ /item/name }" } } } ] }
// while
{ "type": "Loop", "while": "{ /vars/hasMore }", "maxIterations": 1000, "body": [ /* ... */ ] }
// counted (1..10 step 2)
{ "type": "Loop", "for": { "from": 1, "to": 10, "step": 2 }, "as": "i", "maxIterations": 100, "body": [ /* ... */ ] }Parallel
शाखाओं को समवर्ती रूप से चलाता है और उनके join होने के बाद आगे बढ़ता है। शाखाओं के बीच reference संभव नहीं है (यदि कोई निर्भरता हो, तो उन्हें क्रमिक रूप से रखें)।
| field | विवरण |
|---|---|
branches | Statement[][]। हर element एक शाखा है (statements का array) |
{ "type": "Parallel", "branches": [
[ { "type": "Http", "method": "GET", "url": "https://api.a.com/x", "name": "a" } ],
[ { "type": "Http", "method": "GET", "url": "https://api.b.com/y", "name": "b" } ]
] }Return
यह सामान्य प्रोग्रामिंग वाला return है। यह Script का परिणाम कॉल करने वाले को लौटाता है और उस बिंदु पर सामान्य रूप से समाप्त हो जाता है।
| field | विवरण |
|---|---|
value | (वैकल्पिक) लौटाने के लिए मान एक्सप्रेशन |
isError | डिफ़ॉल्ट false। true होने पर value response के error के रूप में लौटता है (अन्यथा return के रूप में) |
statusCode | response status code। डिफ़ॉल्ट 200 |
- यदि
Returnतक कभी नहीं पहुँचा जाता, तो कोई return मान नहीं होता। परिणाम लौटाने के लिए,valueको स्पष्ट रूप से निर्दिष्ट करें। - चूँकि यह किसी अपवाद या throw नहीं, बल्कि एक सामान्य समाप्ति है, यह
catchका लक्ष्य नहीं है (Tryके भीतर भी यह पूरे Script को समाप्त कर देता है, परfinallyफिर भी चलता है)। - guard को भी इसी statement से व्यक्त किया जाता है:
Ifकोthen:[Return]के साथ मिलाकर (शर्त का उल्लंघन होने पर लौटाता है, जिससे उसके बाद का हिस्सा नहीं चलता)। यह इसके कई उपयोगों में से एक है।
{ "type": "Return", "value": { "orderId": "{ /order/sys/id }", "status": "paid" }, "statusCode": 201 }
{ "type": "Return", "value": { "reason": "payment failed" }, "isError": true, "statusCode": 402 }Try
अपवाद प्रबंधन।
| field | विवरण |
|---|---|
body | प्रयास करने के लिए Statement array |
catch | (वैकल्पिक) body विफल होने पर चलता है। /error पर { message, statement } उजागर करता है |
finally | (वैकल्पिक) सफलता या विफलता की परवाह किए बिना हमेशा चलता है |
- यदि
catchइसे संभाल लेता है, तो Script बाधित नहीं होता। केवल ऐसी विफलता जिसका कोईcatchन हो, Script को बाधित करती है (क्षतिपूर्ति प्रयास सहित)। - क्या "विफलता" मानी जाती है, और क्षतिपूर्ति (compensation) की सीमाएँ, इनका वर्णन निष्पादन सिमैंटिक्स, बाधाएँ और सुरक्षा में किया गया है।
{ "type": "Try",
"body": [ { "type": "Http", "method": "POST", "url": "https://primary.api/gen", "name": "resp" },
{ "type": "ResourceCreate", "resource": "Content", "contentType": { "sys": { "id": "ct_result" } },
"fields": { "text": { "en-US": "{ /resp/body/text }" } } } ],
"catch": [ { "type": "ResourceCreate", "resource": "Content", "contentType": { "sys": { "id": "ct_result" } },
"fields": { "text": { "en-US": "जनरेशन विफल" }, "error": { "en-US": "{ /error/message }" } } } ],
"finally": [ /* हमेशा चलता है */ ] }संबंधित दस्तावेज़
- मान एक्सप्रेशन: वे मान-नियम जिनका ऊपर दिए गए सभी field पालन करते हैं।
- निष्पादन सिमैंटिक्स, बाधाएँ और सुरक्षा: निष्पादन क्रम, error, स्थैतिक बाधाएँ, और सुरक्षा।
- कुकबुक: इन statements को संयोजित करने वाले पूर्ण उदाहरण।
- Script अवलोकन: शीर्ष-स्तरीय संरचना और execution mode।
