Statement कैटलॉग

अंतिम अपडेट: 23 जुलाई 2026

statements array का हर element एक statement है। यह दस्तावेज़ सभी 17 statement प्रकारों के field, व्यवहार और परिणाम को सूचीबद्ध करता है। हर मान वाली जगह मान एक्सप्रेशन के नियमों (reference, literal, JsonLogic, locale map) का पालन करती है।

Statement सारांश

श्रेणीtypeएक-पंक्ति सारांश
resource लेखनResourceCreateContent/Media बनाना (वैकल्पिक रूप से publish)
ResourceUpdateContent/Media के field का पूर्ण प्रतिस्थापन (न दिए गए field/locale हट जाते हैं)
ResourcePatchContent/Media के field का आंशिक मर्ज (केवल निर्दिष्ट field/locale; literal null हटाता है)
ResourceDeleteहटाना (केवल Draft/Archived; Published हो तो पहले unpublish)
ResourcePublish / ResourceUnpublishpublish / unpublish
ResourceArchive / ResourceUnarchivearchive / unarchive
resource पठनResourceReadid से एकल आइटम पठन
ResourceFindfilter से पहला मेल खाता एकल आइटम (न हो तो null)
ResourcePageReadfilter / sort / page पठन ({ items, next })
बाहरीHttpबाहरी HTTP कॉल ({ status, body })। केवल Async
वेरिएबलSetVarscript-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" (अनिवार्य)
contentTypeContentबनाया जाने वाला 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
  • Media file: 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 ही रहता है।
  • परिणाम (name binding): बनाया गया 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)
publishupdate के बाद 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)
publishupdate के बाद 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 } })
wherefilter ({ "<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
wherefilter ({ "<field>": { "<op>": <मान> } })। उपलब्ध operators operator सूची के अनुसार हैं (regex/near/within के लिए advanced आवश्यक)। createdBy: ":self" समर्थित
ordersort (उदाहरण: "-sys.createdAt")
limitpage 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)
retryresponse 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विवरण
conditionJsonLogic (boolean के रूप में मूल्यांकित)
thentrue होने पर चलाने के लिए 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विवरण
overforeach: एक मान एक्सप्रेशन जो array के रूप में resolve होता है
whileशर्त: JsonLogic (true रहने तक दोहराता है)
forcounted: { "from", "to", "step"? }from से to तक समावेशी; step डिफ़ॉल्ट 1
maxIterationsengine द्वारा लागू अधिकतम पुनरावृत्ति संख्या (अनिवार्य)
asवर्तमान आइटम या index को bind करने के लिए नाम ({ /<as> })
bodyloop 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विवरण
branchesStatement[][]। हर 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डिफ़ॉल्ट falsetrue होने पर value response के error के रूप में लौटता है (अन्यथा return के रूप में)
statusCoderesponse 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": [ /* हमेशा चलता है */ ] }