logo
DASTProfessional

BCheck ta'riflari ma'lumotnomasi

Oxirgi yangilanish: 23-iyul, 2026O'qish vaqti: 13 daqiqa

Ushbu sahifada BCheck yozishda foydalanish mumkin bo'lgan kalit so'zlar batafsil keltirilgan. Majburiy xususiyatlar yulduzcha (*) bilan belgilangan.

Metadata

Tekshiruvning o'zi haqidagi ma'lumotni o'z ichiga oladi. metadata obyekti barcha BCheck'lar uchun majburiy va ta'rifning eng boshiga joylashtirilishi shart.

metadata

XususiyatTavsifTur
language*Foydalanilayotgan BCheck ta'rif tilining versiyasi.enum [v2-beta]
name*BCheck'ning nomi. Tekshiruv muammo haqida xabar berganda u Burp Suite interfeysida ko'rsatiladi.String
descriptionBCheck'ning tavsifi.String
authorMuallifning ismi.String
tagsIdentifikatsiya qiluvchi teglar.List of strings

Boshqaruv oqimi

Ushbu kalit so'zlar ta'rifning bajarilish oqimini boshqaradi.

run for each

Ustidan iteratsiya qilish mumkin bo'lgan massiv o'zgaruvchisini e'lon qiladi. O'zgaruvchi chaqirilganda tekshiruv massivdagi har bir element uchun bir marta ishga tushadi. E'lon qilingan o'zgaruvchi tashqi ko'rinish sohasiga (outer scope) ega.

run for each kalit so'zi ixtiyoriy. Agar undan foydalansangiz, uni ta'rifingizdagi given...then operatoridan oldin joylashtirishingiz shart.

Misol

Namunada uchta URL sanab o'tilgan url_array nomli o'zgaruvchi e'lon qilinadi. Bu bir xil testni bir nechta URL'ga qarshi ishga tushirishi kerak bo'lgan tekshiruv yozayotgan bo'lsangiz foydali bo'lishi mumkin (masalan, CORS noto'g'ri konfiguratsiyasi tekshiruvida har birini navbatma-navbat Origin sarlavhasi sifatida qo'shish).

define

Ichki ko'rinish sohasiga (inner scope) ega o'zgaruvchilarni e'lon qiladi. define kalit so'zi ixtiyoriy. Agar undan foydalansangiz, uni ta'rifingizdagi given...then operatoridan oldin joylashtirishingiz shart.

Misol

Namunada yangi Burp Collaborator manzilini yaratish uchun generate_collaborator_address() funksiyasi chaqiriladi va u collaborator_address nomli o'zgaruvchida saqlanadi.

given...then

Audit qilinayotgan kontentga asoslanib, tekshiruv qachon ishga tushishini belgilaydi.

Har bir BCheck quyidagilarni o'z ichiga olgan bitta given / then operatoriga ega bo'lishi shart:

YOKI quyidagilardan biri:

  • given response then - tekshiruv audit qilinadigan har bir javob uchun bir marta ishga tushadi.
  • given request then - tekshiruv audit qilinadigan har bir so'rov uchun bir marta ishga tushadi.
  • given host then - tekshiruv audit qilinadigan har bir host uchun bir marta ishga tushadi.
  • given path then - tekshiruv audit qilinadigan har bir noyob yo'l (path) uchun bir marta ishga tushadi.

YOKI quyidagi insertion point kalit so'zlaridan biri:

  • given any insertion point then - tekshiruv audit qilinadigan har bir insertion point (har qanday turdagi) uchun bir marta ishga tushadi. Agar siz insertion point turini ko'rsatmasangiz (ya'ni given insertion point dan foydalansangiz), Burp Scanner ham shu sukut bo'yicha variantdan foydalanadi.
  • given query insertion point then - tekshiruv audit qilinadigan har bir query uchun bir marta ishga tushadi.
  • given header insertion point then - tekshiruv audit qilinadigan har bir sarlavha (header) uchun bir marta ishga tushadi.
  • given body insertion point then - tekshiruv audit qilinadigan har bir body kontenti uchun bir marta ishga tushadi.
  • given cookie insertion point then - tekshiruv audit qilinadigan har bir cookie uchun bir marta ishga tushadi.

Insertion point'larni birlashtirish uchun or kalit so'zidan foydalanishingiz mumkin. Masalan:

  • given query or body insertion point then - tekshiruv audit qilinadigan har bir query yoki body kontenti uchun bir marta ishga tushadi.
  • given header or cookie insertion point then - tekshiruv audit qilinadigan har bir sarlavha yoki cookie uchun bir marta ishga tushadi.

Shartli operatorlar

Ushbu kalit so'zlar belgilangan shart natijasida sodir bo'ladigan amallarni boshqaradi. Shartli kalit so'zlardan faqat given...then operatori ichida foydalanishingiz mumkin.

if... then

Belgilangan shart bajarilsa, amalni bajaradi. Quyidagilar talab qilinadi:

  • Shart.
  • Amal.
  • end if kalit so'zi.

Misol

Agar oxirgi javobda Apache Struts versiya raqami mavjud bo'lsa, muammo haqida xabar bering:

else if... then

if operatori ichida ishlatiladi. Agar oldingi shart noto'g'ri va else if sharti to'g'ri bo'lsa, amalni bajaradi. Bitta BCheck ichida bir nechta else if operatoridan foydalanishingiz mumkin.

Misol

Agar tekshiruv natijasida Collaborator DNS o'zaro aloqalarini qabul qilsa, muammo haqida firm ishonch darajasi bilan xabar bering. Aks holda, Collaborator biror SMTP o'zaro aloqasini qabul qilgan-qilmaganini tekshiring. Agar qabul qilgan bo'lsa, muammo haqida tentative ishonch darajasi bilan xabar bering.

else then

if operatori ichida ishlatiladi. Agar operatorning sharti va undan oldingi barcha else / if operatorlarining sharti bajarilmasa, amalni bajaradi.

Misol

Agar oxirgi javob bazaviy javob bilan aynan bir xil bo'lmasa-yu, ammo HTTP status kodi bir xil bo'lsa, muammo haqida firm ishonch darajasi bilan xabar bering. Aks holda, muammo haqida tentative ishonch darajasi bilan xabar bering.

end if

if operatorining oxirini bildiradi.

Shartlar

if operatorlarida quyidagi shartlardan foydalanishingiz mumkin:

  • {X} matches "[regex]" - agar X berilgan regex'ga mos kelsa, to'g'ri (true).
  • {X} differs from {Y} - agar X javobi Y javobidan farq qilsa, to'g'ri.
  • {X} in {Y} - agar Y tarkibida X bo'lsa, to'g'ri (masalan, Y javob bo'lishi, X esa o'sha javob ichida qidiriladigan sarlavha bo'lishi mumkin).
  • {X} is {Y} - agar berilgan parametrlar bir xil bo'lsa, to'g'ri.
  • any interactions - agar Burp Collaborator biror o'zaro aloqani qabul qilgan bo'lsa, to'g'ri.
  • dns interactions - agar Burp Collaborator biror DNS o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.
  • http interactions - agar Burp Collaborator biror HTTP o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.
  • smtp interactions - agar Burp Collaborator biror SMTP o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.

Shuningdek, shartlarni birlashtirishingiz va o'zgartirishingiz mumkin:

  • {condition} and {condition} - agar ikkala shart ham to'g'ri bo'lsa, to'g'ri.
  • {condition} or {condition} - agar shartlardan biri yoki ikkalasi to'g'ri bo'lsa, to'g'ri.
  • not({condition}) - agar shart to'g'ri bo'lmasa, to'g'ri.

Qavslar

Tekshiruvlaringizdagi mantiq oqimini aniqlashtirish uchun shartlarda qavslardan foydalanishingiz mumkin.

Masalan, A or B and C quyidagi shartlardan biri bajarilganda to'g'ri qiymat beradigan shartni yaratadi:

  • A to'g'ri.
  • B ham, C ham to'g'ri.

Biroq (A or B) and C quyidagi shartlarning ikkalasi ham bajarilganda to'g'ri qiymat beradigan shartni yaratadi:

  • A yoki B to'g'ri.
  • C to'g'ri.

Amallar

Ushbu kalit so'zlar Burp Scanner'ni muayyan amalni bajarishga undaydi.

Eslatma

Ushbu kalit so'zlarning ba'zilari faqat muayyan insertion point'lar bilan birgalikda ishlatilishi mumkin. Tekshiruv mantig'i qaysi insertion point'larda qo'llanilishini belgilash haqida batafsil ma'lumot olish uchun given...then bo'limiga qarang.

send request

Ko'rsatilgan ma'lumotni o'z ichiga olgan so'rovni yuboradi. given response dan tashqari barcha skanerlash tekshiruvi rejimlari bilan ishlatilishi mumkin.

Eslatma

Agar amal kalit so'zi berilmasa, barcha so'rov xususiyatlari sukut bo'yicha replacing qiymatini oladi. Masalan: bu quyidagi bilan bir xil

Kalit so'zTavsifMisol
called (satr)So'rovga nom beradi, shunda unga tekshiruvning keyingi qismlarida murojaat qilish mumkin bo'ladi"Example request"
appending headers: (1-n ta name:value juftligi)Ko'rsatilgan sarlavha(lar)ni so'rovga qo'shadi. Agar so'rovda xuddi shu nomdagi sarlavha allaqachon mavjud bo'lsa, yangi qiymatga ega ikkinchi sarlavha qo'shiladi. Bir nechta sarlavha / qiymat juftligini sanab o'tishingiz mumkin"Origin": "http://example.com"
replacing headers: (1-n ta name:value juftligi)Ko'rsatilgan sarlavha(lar) qiymatini yangi qiymat bilan almashtiradi. Agar ko'rsatilgan nomdagi sarlavhalar bo'lmasa, yangi sarlavha qo'shiladi. Bir nechta sarlavha / qiymat juftligini sanab o'tishingiz mumkin"Origin": "http://example.com"
removing headers: (1-n ta sarlavha nomi)Ko'rsatilgan sarlavha(lar)ni so'rovdan olib tashlaydi. Bir nechta sarlavha nomini sanab o'tishingiz mumkin"Origin"
appending queries: (1-n ta query nomi va qiymati)Ko'rsatilgan query parametr(lar)ini so'rov URL'iga qo'shadi. Agar so'rovda xuddi shu nomdagi query allaqachon mavjud bo'lsa, yangi qiymatga ega ikkinchi sarlavha qo'shiladi. Bir nechta parametrni sanab o'tishingiz mumkin"title=example_query"
replacing queries: (1-n ta query nomi va qiymati)Ko'rsatilgan query parametr(lar)i qiymatini yangi qiymat bilan almashtiradi. Agar ko'rsatilgan nomdagi query'lar bo'lmasa, yangi query qo'shiladi. Bir nechta parametrni sanab o'tishingiz mumkin"title=example_query"
removing queries: (1-n ta query nomi)Ko'rsatilgan query parametr(lar)i qiymatini so'rovdan olib tashlaydi. Bir nechta parametrni sanab o'tishingiz mumkin"title"
appending query_string: (satr)Ko'rsatilgan query satrini mavjud query'ga qo'shadi. Agar mavjud query bo'lmasa, query satrini so'rovga qo'shadi"title=value&example_title=example_value"
replacing query_string: (satr)Butun query satrini ko'rsatilgan qiymat bilan almashtiradi"example_title=example_query"
removing query_string:Query satrini so'rovdan olib tashlaydi
appending path: (satr)Ko'rsatilgan path parametr(lar)ini so'rov URL'iga qo'shadi"/admin"
replacing path: (satr)URL'dagi path parametrlarini ko'rsatilgan qiymatlar bilan almashtiradi. Barcha query parametrlari saqlanib qoladi"/admin"
removing pathBarcha path parametrlarini so'rovdan olib tashlaydi.
appending method: (satr)Ko'rsatilgan HTTP metodini so'rovga qo'shadi"GET"
replacing method: (satr)So'rov metodini ko'rsatilgan qiymat bilan almashtiradi"GET"
removing methodSo'rov metodini olib tashlaydi
appending body: (satr)Ko'rsatilgan body kontentini so'rovga qo'shadi"body content"
replacing body: (satr)So'rov body'sini ko'rsatilgan kontent bilan almashtiradi"body content"
removing bodySo'rov body'sini olib tashlaydi

send request (raw)

Ko'rsatilgan ma'lumotni o'z ichiga olgan so'rovni xom (raw) HTTP so'rovi sifatida yuboradi. given response dan tashqari barcha skanerlash tekshiruvi rejimlari bilan ishlatilishi mumkin.

send payload

Ko'rsatilgan payload qo'shilgan yoki almashtirilgan yangi so'rovni yuboradi. Faqat given insertion point bilan ishlatilishi mumkin.

XususiyatTavsifTur
appending:Ko'rsatilgan payload'ni so'rovning payload to'plamiga qo'shadi.satr / o'zgaruvchi
replacing:So'rovning mavjud payload to'plamini ko'rsatilgan payload bilan almashtiradi.satr / o'zgaruvchi

report issue

Burp Scanner'ni muammo haqida xabar berishga majbur qiladi. Bu BCheck'ni tugatadi, hatto tekshiruvning hali ishga tushmagan qismlari bo'lsa ham.

Masalan, quyidagi BCheck'ni ko'rib chiqing:

Bu tekshiruv o'zining Burp Collaborator payload'i natijasida yuzaga kelgan avval DNS, keyin esa HTTP o'zaro aloqalarini qidiradi. Biroq, agar tekshiruv DNS o'zaro aloqasini topsa, u birinchi report issue amalini bajaradi va HTTP o'zaro aloqalari mavjud bo'lsa ham, ular haqida keyinchalik xabar bermaydi.

report issue and continue

Burp Scanner'ni muammo haqida xabar berishga, so'ngra BCheck'ni ishga tushirishda davom etishga majbur qiladi. Masalan, quyidagi BCheck'ni ko'rib chiqing:

Bu tekshiruv o'zining Burp Collaborator payload'i natijasida yuzaga kelgan avval DNS, keyin esa HTTP o'zaro aloqalarini qidiradi. Agar tekshiruv DNS o'zaro aloqasini topsa, u birinchi report issue amalini bajaradi. So'ngra u tekshiruvni davom ettiradi va keyingi barcha HTTP o'zaro aloqalari haqida xabar beradi.

Muammolar haqida xabar berish

BCheck'larda muammolar haqida report issue yoki report issue and continue kalit so'zlari yordamida xabar berishingiz mumkin. Bu kalit so'z bloklarining ikkalasi ham bir xil xususiyatlarga ega.

Eslatma

Quyidagi barcha xususiyatlardan ko'rsatilgan tartibda foydalanishingiz shart. Agar tartibni o'zgartirishga urinsangiz (masalan, name xususiyatini severity xususiyatidan keyin ishlatsangiz), BCheck'ingiz validatsiyadan o'tmaydi.

XususiyatTavsifTur
nameMuammoning nomi.Satr
severity*Muammoning jiddiylik darajasi[info|low|medium|high]
confidence*Muammo mavjudligiga ishonch darajasi[certain|firm|tentative]
remediationBartaraf etish bo'yicha maslahatSatr
detailMuammo haqida qo'shimcha ma'lumotSatr

Muammolarni nomlash

BCheck'lar xabar qilgan barcha muammolar Declarative Scan Check Generated muammo turiga ega. Muammoning nomi quyidagicha aniqlanadi:

  • Agar tegishli report issue yoki report issue and continue blokida name kalit so'zi bo'lsa, Burp'da muammo nomi sifatida shu qiymat ko'rsatiladi.
  • Agar tegishli report issue yoki report issue and continue blokida name kalit so'zi bo'lmasa, muammo nomi BCheck'ning name metadata xususiyatidan olinadi.

report issue blokiga name kalit so'zini qo'shish muayyan holatlarda muammo haqida xabar berishda ishlatiladigan nomni bekor qilish imkonini beradi. Bu bitta BCheck'dan turli xil muammo turlari haqida xabar berishda foydali. Masalan, sizda o'xshash xatoliklarning bir necha xil variantlari haqida xabar bera oladigan yagona BCheck bo'lishi mumkin.

Muammolarni birlashtirish

Birlashtirish (consolidation) — bu Burp interfeysdagi ortiqcha shovqinni kamaytirish uchun takrorlanuvchi muammolarni jamlaydigan jarayon.

Agar quyidagi ikkala shart ham to'g'ri bo'lsa, Burp BCheck'lar qaytargan muammolarga o'zining odatdagi birlashtirish qoidalarini qo'llaydi:

  • Ikkala muammo ham bitta BCheck tomonidan xabar qilingan.
  • Ikkala muammo bir xil nomga ega, bu nom metadata'dan olinganmi yoki report issue blokidagi parametrdan olinganmi — ahamiyati yo'q.

Zaxiralangan o'zgaruvchilar

Ushbu kalit so'zlar muayyan so'rov yoki javob xususiyatlariga ishora qiladi.

Eslatma

O'z o'zgaruvchilaringizni nomlashda ushbu zaxiralangan xususiyat nomlaridan foydalanmasligingizga ishonch hosil qiling, aks holda BCheck ishga tushganda xatolik yuz beradi.

request / response

Ushbu kalit so'zlar muayyan so'rov yoki javob xususiyatlariga ishora qiladi. Siz quyidagilarga murojaat qilishingiz mumkin:

  • base - crawl davomida ko'rsatilgan skanerlash rejimi uchun Burp Scanner yuborgan so'rov va qabul qilgan javob.
  • latest - ushbu skanerlash rejimi uchun eng so'nggi so'rov / javob juftligi.
  • {request_name} - called kalit so'zi yordamida nomlangan muayyan so'rov / javob juftligi.

Javob

XususiyatTavsif
responseJavobning butun mazmunini qaytaradi.
response.status_codeJavobning HTTP status kodini qaytaradi.
response.headersJavob sarlavhalarining ro'yxatini qaytaradi.
response.bodyJavobning body kontentini qaytaradi.
response.http_versionJavobda ishlatilgan HTTP versiyasini qaytaradi.

So'rov

XususiyatTavsif
requestSo'rovning butun mazmunini qaytaradi.
request.methodSo'rovda ishlatilgan HTTP metodini qaytaradi. Masalan: GET
request.urlSo'rov yuborilgan URL'ni qaytaradi. Masalan: https://ginandjuice.shop:443/catalog/product?productId=1
request.url.protocolSo'rov URL'ining protokolini qaytaradi. Masalan: https
request.url.hostSo'rov yuborilgan hostni qaytaradi. Masalan: ginandjuice.shop
request.url.portSo'rov yuborilgan portni qaytaradi. Masalan: 443
request.url.pathSo'rov URL'ining yo'lini (path) qaytaradi. Masalan: /catalog/product
request.url.fileURL faylini (URL'ning birinchi qiya chiziqdan keyingi qismini) qaytaradi. Masalan: /catalog/product?productId=1
request.url.querySo'rov URL'ida ishlatilgan query satrini qaytaradi. Masalan: productId=1
request.http_versionSo'rovda ishlatilgan HTTP versiyasini qaytaradi. Masalan: HTTP/2
request.headersSo'rov sarlavhalarining ro'yxatini qaytaradi.
request.bodySo'rovning body kontentini qaytaradi.

user_agent

Burp'ning user agent'ini qaytaradi.

insertion_point_base_value

Ko'rsatilgan insertion point'ning bazaviy qiymatini qaytaradi.

Eslatma

insertion_point_base_value o'zgaruvchisi insertion point boshqaruv oqimi kalit so'zi bilan birga ishlatilishi shart.

Funksiyalar

Ushbu kalit so'zlar chaqirilganda muayyan vazifani bajaradi.

E'tibor bering, barcha BCheck funksiyalari jingalak qavslar {} bilan belgilanadi.

random_str

{random_str(int)}

Ko'rsatilgan uzunlikdagi tasodifiy satrni qaytaradi. Uzunlik 0 va 9,999,999 orasida bo'lishi kerak. 0 kiritilsa, bo'sh satr qaytariladi.

Misol

{random_str(13)} // "qpald95nbjkig"

regex_replace

regex_replace (String source, String regex, String replacement)

Manba satrni oladi va ko'rsatilgan regex shabloniga mos keluvchi har qanday kontentni almashtiruvchi satr bilan almashtiradi.

Misol

regex_replace ({var}, "[a-z]*@", "abc@") Ushbu namunada {var} qiymati "xyz@portswigger.net" deb faraz qiling. Regex shabloni elektron pochta manzilining birinchi qismiga mos keladi va uni almashtiruvchi satr bilan almashtirib, yakuniy natija sifatida abc@portswigger.net ni hosil qiladi.

to_lower

{to_lower(string)}

Ko'rsatilgan satrni kichik harflarga o'giradi.

Misol

{to_lower("Carlos MONTOYA")} // carlos montoya

to_upper

{to_upper(string)}

Ko'rsatilgan satrni katta harflarga o'giradi.

Misol

{to_lower("Peter weiner")} // PETER WEINER

base64_encode

{base64_encode(string)}

Ko'rsatilgan satrni base64 bilan kodlaydi.

Misol

hello world // aGVsbG8gd29ybGQ=

base64_decode

{base64_decode(string)}

Ko'rsatilgan satrni base64'dan dekodlaydi.

Misol

hello world // aGVsbG8gd29ybGQ=

generate_collaborator_address

{generate_collaborator_address}

So'rov ichida foydalanish uchun yangi Burp Collaborator manzilini yaratadi. {generate_collaborator_address} ni bir necha marta chaqirib, bitta BCheck ichida bir nechta manzil yaratishingiz mumkin.

SHA1

sha1(String)

Berilgan kiritmani SHA1 hash funksiyasi yordamida hash qiladi.

Misol

sha1("Hello") // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

SHA256

sha256(String)

Berilgan kiritmani SHA256 hash funksiyasi yordamida hash qiladi.

Misol

sha256("Hello") // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5

md5(String)

Berilgan kiritmani MD5 hash funksiyasi yordamida hash qiladi.

Misol

MD5("Hello") // 5d41402abc4b2a76b9719d911017c592

Funksiyalarni birlashtirish

Zarur bo'lsa, bu funksiyalarni bir-birining ichiga joylashtirish mumkin. Masalan, quyidagi funksiya o'zgaruvchini kichik harflarga o'giradi va so'ngra uni bitta amalda base64 sifatida kodlaydi:

{base64_encode(to_lower(my_variable))}

Eslatma

O'zgaruvchilarni nomlashda ushbu funksiya nomlaridan foydalanmasligingizga ishonch hosil qiling, aks holda BCheck ishga tushganda xatolik yuz beradi.

Turli ma'lumotlar

Satrlar

Interpolyatsiya qilinadigan va literal satrlarning ikkalasi ham qabul qilinadi:

  • Literal satrlarni belgilash uchun qo'shtirnoqlardan ("") foydalaning - "delete carlos"
  • Interpolyatsiya qilinadigan satrlarni belgilash uchun teskari apostroflardan (```) foydalaning - https://{random_str(5)}.com`

Ko'p qatorli satrlarni qayta ishlaganda Burp Scanner qator oxirlarini \r\n bilan almashtiradi va har bir qatordagi boshidagi hamda oxiridagi bo'shliqlarni olib tashlaydi (ochuvchi qo'shtirnoqdan keyin va yopuvchi qo'shtirnoqdan oldin turgan bo'shliqlar bundan mustasno).

Masalan:

quyidagiga aylanadi

Interpolyatsiya qilinadigan satrlarda boshidagi/oxiridagi bo'shliqlarni aniq ko'rsatish uchun uning o'rniga \s belgisidan foydalaning.

Belgilarni ekranlash

Satrlar ichida belgilarni ekranlash uchun \ belgisidan foydalaning.

Masalan, \{var} ekranlangan, {var} esa var qiymatini chiqaradi.

Regex

BCheck'lar Java uslubidagi regex'ni qo'llab-quvvatlaydi.

"2[0-9][0-9]"

Izohlar

Izoh qatorlarini belgilash uchun # dan foydalaning.

#Hello

Maxsus belgilar

Bu belgilardan interpolyatsiya qilinadigan satrning bir qismi sifatida foydalanish mumkin. Masalan, '\s' bo'shliq sifatida talqin qilinadi, literal satr "\s" esa ikkita alohida belgi sifatida talqin qilinadi.

  • \n - yangi qator
  • \r - karetkani qaytarish
  • \s - bo'shliq
  • \t - tabulyatsiya
  • \b - backspace
  • \f - sahifani o'tkazish (form feed)

BCheck tuzilishi

Yaroqli BCheck'lar yaratish uchun quyidagi tuzilma qoidalariga amal qilishingiz kerak:

  • Har bir ta'rif metadata obyekti bilan boshlanishi shart.
  • Har bir ta'rifda aynan bitta given... then operatori bo'lishi shart.
  • Shartli operatorlar faqat given... then operatori ichida kelishi mumkin.
  • Ishlatilgan har qanday define yoki run for each operatori metadata blokidan keyin, lekin given... then operatoridan oldin joylashtirilishi shart.
  • run for each yordamida e'lon qilingan o'zgaruvchilar tashqi ko'rinish sohasiga, define yordamida e'lon qilinganlari esa ichki ko'rinish sohasiga ega. Ya'ni, define orqali e'lon qilingan o'zgaruvchidan keyingi run for each operatorida foydalana olmaysiz.

Ushbu maqola foydali bo'ldimi?