বার্তা টেমপ্লেট

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

এই বিষয়টি আলোচনা করে কিভাবে API প্রক্সিতে বার্তা টেমপ্লেট ব্যবহার করতে হয় এবং একটি ফাংশন রেফারেন্স প্রদান করে।

একটি বার্তা টেমপ্লেট কি?

একটি বার্তা টেমপ্লেট আপনাকে নির্দিষ্ট নীতি এবং TargetEndpoint উপাদানগুলিতে পরিবর্তনশীল স্ট্রিং প্রতিস্থাপন করার অনুমতি দেয়। এই বৈশিষ্ট্যটি, যেখানে সমর্থিত, আপনাকে প্রক্সি চালানোর সময় গতিশীলভাবে স্ট্রিংগুলিকে পপুলেট করতে দেয়।

আপনি একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল রেফারেন্স এবং আক্ষরিক পাঠ্যের যেকোনো সমন্বয় অন্তর্ভুক্ত করতে পারেন। ফ্লো ভেরিয়েবলের নামগুলি অবশ্যই কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ থাকতে হবে, যখন কোঁকড়া বন্ধনীতে নয় এমন যেকোন পাঠ্য আক্ষরিক পাঠ্য হিসাবে আউটপুট হবে।

এছাড়াও দেখুন আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

উদাহরণ

উদাহরণস্বরূপ, বার্তা বরাদ্দ নীতি আপনাকে <Payload> উপাদানের মধ্যে একটি বার্তা টেমপ্লেট ব্যবহার করতে দেয়:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="application/json">
      {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

উপরের উদাহরণে, ফ্লো ভেরিয়েবল user.name এর মান (কোঁকড়া ধনুর্বন্ধনীতে) মূল্যায়ন করা হবে এবং রানটাইমে পেলোড স্ট্রিংয়ে প্রতিস্থাপিত হবে। সুতরাং, উদাহরণস্বরূপ, যদি user.name=jdoe , তাহলে পেলোডের ফলে বার্তা আউটপুট হবে: You entered an invalid username: jdoe । যদি ভেরিয়েবলটি সমাধান করা না যায়, তাহলে একটি খালি স্ট্রিং হল আউটপুট।

উদাহরণ

যখন একটি কোটা অতিক্রম করা হয়, এটি কলকারীকে একটি অর্থপূর্ণ বার্তা ফেরত দেওয়া একটি ভাল অভ্যাস। কোটা লঙ্ঘন সম্পর্কে কলকারীকে তথ্য দেওয়ার জন্য আউটপুট প্রদান করতে এই প্যাটার্নটি সাধারণত একটি "ফল্ট রুল" এর সাথে ব্যবহার করা হয়। নিম্নলিখিত অ্যাসাইন মেসেজ নীতিতে, বার্তা টেমপ্লেটগুলি বিভিন্ন XML উপাদানে গতিশীলভাবে কোটা তথ্য পূরণ করতে ব্যবহৃত হয়:

<AssignMessage name='AM-QuotaViolationMessage'>
  <Description>message for quota exceeded</Description>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Set>
    <Headers>
      <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header>
      <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header>
      <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header>
    </Headers>
    <Payload contentType='application/json'>{
  "error" : {
    "message" : "you have exceeded your quota",
    "clientId" : "{request.queryparam.apikey}"
  }
}
    </Payload>
    <StatusCode>429</StatusCode>
    <ReasonPhrase>Quota Exceeded</ReasonPhrase>
  </Set>
</AssignMessage>

AssignMessage নীতিতে, <Set> উপাদান সমর্থন বার্তা টেমপ্লেটিং-এ নিম্নলিখিত উপাদানগুলি রয়েছে:

  • হেডার
  • QueryParam
  • ফর্মপরম
  • পেলোড
  • সংস্করণ
  • ক্রিয়া
  • পথ
  • স্ট্যাটাসকোড
  • যুক্তিবাক্য

আবার, নোট করুন যে একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল অবশ্যই কোঁকড়া বন্ধনীতে আবদ্ধ থাকতে হবে

যখন এই নীতি কার্যকর হয়:

  • হেডার উপাদানগুলি নির্দিষ্ট প্রবাহ ভেরিয়েবলের মানগুলি গ্রহণ করে।
  • পেলোডে আক্ষরিক পাঠ্য এবং ভেরিয়েবলের মিশ্রণ রয়েছে ( client_id গতিশীলভাবে জনবহুল)।
  • StatusCode এবং ReasonPhrase শুধুমাত্র আক্ষরিক পাঠ অন্তর্ভুক্ত করে; যাইহোক, যদি আপনি এটি ব্যবহার করতে চান তবে এই উপাদানগুলি বার্তা টেমপ্লেটিং সমর্থন করে।

উদাহরণ

একটি প্রক্সি TargetEndpoint সংজ্ঞায়, <SSLInfo> সমর্থন বার্তা টেমপ্লেটিং-এর চাইল্ড-এলিমেন্ট। নীতিগুলিতে ব্যবহৃত একই প্যাটার্ন অনুসরণ করে, প্রক্সি কার্যকর করার সময় কোঁকড়া বন্ধনীতে ফ্লো ভেরিয়েবলগুলি প্রতিস্থাপিত হয়।

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
        <Enabled>{myvars.ssl.enabled}</Enabled>
        <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
        <KeyStore>{myvars.ssl.keystore}</KeyStore>
        <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
        <TrustStore>{myvars.ssl.trustStore}</TrustStore>
    </SSLInfo>

  </HTTPTargetConnection>
  …
</TargetEndpoint>

আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

বার্তা টেমপ্লেটগুলি বিভিন্ন নীতির পাশাপাশি TargetEndpoint কনফিগারেশনে ব্যবহৃত কিছু উপাদান সমর্থিত।

নীতি যা বার্তা টেমপ্লেট গ্রহণ করে

নীতি উপাদান এবং শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
অ্যাক্সেস কন্ট্রোল নীতি <SourceAddress> , mask অ্যাট্রিবিউট এবং IP ঠিকানার জন্য।
অ্যাসাইন মেসেজ নীতি <Set> চাইল্ড এলিমেন্ট: পেলোড, কনটেন্ট টাইপ, ক্রিয়া, ভার্সন, পাথ, স্ট্যাটাসকোড, রিজনফ্রেজ, হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

<Add> এলিমেন্টস: হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

<AssignVariable> চাইল্ড এলিমেন্ট: <Template>

এক্সটেনশন কলআউট নীতি <Input>
ExtractVariables নীতি <JsonPath>
জেডাব্লুএস নীতি তৈরি করুন
JWS নীতি যাচাই করুন
<Payload> ( শুধুমাত্র জেডাব্লুএস নীতি তৈরি করুন )

<AdditionalHeaders><Claim>

* এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

জেডাব্লুটি নীতি তৈরি করুন
JWT নীতি যাচাই করুন
<AdditionalClaims><Claim>

<AdditionalHeaders><Claim>

* এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

LDAP নীতি <SearchQuery>
মেসেজলগিং নীতি <Syslog><Message>

<File><Message>

OAS যাচাইকরণ নীতি <OASResource> উপাদান
রেইসফল্ট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

SAMLA প্রত্যয়ন নীতি <Template>

* শুধুমাত্র যখন পলিসি স্বাক্ষর <GenerateSAMLAssertion> হয়

সার্ভিস কলআউট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, /হেডার, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<HTTPTargetConnection>/<URL> : মনে রাখবেন যে স্ট্রিংয়ের প্রথম অংশটি অবশ্যই http বা https হতে হবে।

TargetEndpoint উপাদান যা বার্তা টেমপ্লেট গ্রহণ করে

HTTPTargetConnection উপাদান শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
এসএসএলইনফো সক্ষম, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
লোকাল টার্গেট কানেকশন ApiProxy, ProxyEndpoint
পথ N/A

বার্তা টেমপ্লেট সিনট্যাক্স

এই বিভাগটি বার্তা টেমপ্লেট ব্যবহার করার জন্য আপনাকে যে নিয়মগুলি অনুসরণ করতে হবে তা ব্যাখ্যা করে৷

ভেরিয়েবল বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করুন

ভেরিয়েবলের নামগুলি কোঁকড়া বন্ধনীতে আবদ্ধ করুন { } । ভেরিয়েবলের অস্তিত্ব না থাকলে, আউটপুটে একটি খালি স্ট্রিং ফেরত দেওয়া হয়; যাইহোক, আপনি বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান নির্দিষ্ট করতে পারেন (ভেরিয়েবলটি অমীমাংসিত হলে প্রতিস্থাপিত মান)। বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান সেট করা দেখুন।

উল্লেখ্য যে সমগ্র বার্তা টেমপ্লেট স্ট্রিংটি উদ্ধৃতিতে আবদ্ধ করা অনুমোদিত, কিন্তু ঐচ্ছিক। উদাহরণস্বরূপ, নিম্নলিখিত দুটি বার্তা টেমপ্লেট সমতুল্য:

<Set>
    <Headers>
        <Header name="x-h1">"Hello {user.name}"</Header>
        <Header name="x-h1">Hello {user.name}</Header>
    </Headers>
</Set>

বার্তা টেমপ্লেটে ডিফল্ট মান সেট করা

যদি একটি টেমপ্লেটেড ভেরিয়েবল সমাধান করা না যায়, এজ একটি খালি স্ট্রিং প্রতিস্থাপন করে। যাইহোক, আপনি নিম্নরূপ একটি ডিফল্ট মান নির্দিষ্ট করতে পারেন:

<Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

উপরের নমুনায় যদি ভেরিয়েবল request.header.id সমাধান করা না যায় তাহলে এর মান Unknown দ্বারা প্রতিস্থাপিত হয়। যেমন:

Test message. id = Unknown

ফাংশন এক্সপ্রেশনে স্পেস অনুমোদিত নয়

বার্তা টেমপ্লেট ফাংশন এক্সপ্রেশনে কোথাও স্পেস অনুমোদিত নয়। যেমন:

অনুমোদিত:

{substring(alpha,0,4)}
{createUuid()}
{randomLong(10)}

অনুমোদিত নয়:

{substring( alpha, 0, 4 )}
{ createUuid( ) }
{randomLong( 10 )}

JSON পেলোডের জন্য লিগ্যাসি সিনট্যাক্স

ক্লাউড রিলিজ 16.08.17 এর আগে এজ সংস্করণগুলিতে, আপনি JSON পেলোডগুলির মধ্যে পরিবর্তনশীল রেফারেন্সগুলি বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারবেন না । সেই পুরানো সংস্করণগুলিতে, আপনাকে ডিলিমিটার অক্ষরগুলি নির্দিষ্ট করতে variablePrefix এবং variableSuffix বৈশিষ্ট্যগুলি ব্যবহার করতে হবে এবং পরিবর্তনশীল নামগুলি মোড়ানোর জন্য ব্যবহার করতে হবে, যেমন:

<Set>
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
    {"name":"foo", "type":"@variable_name#"}
  </Payload>
</Set>

যদিও Apigee সুপারিশ করে যে আপনি নতুন কোঁকড়া-বন্ধনী সিনট্যাক্স ব্যবহার করুন, পুরানো সিনট্যাক্স এখনও কাজ করে।

বার্তা টেমপ্লেট ফাংশন ব্যবহার করে

এজ ফাংশনের একটি সেট প্রদান করে যা আপনি বার্তা টেমপ্লেটের মধ্যে ব্যবহার করতে পারেন এস্কেপ, এনকোড, হ্যাশ এবং স্ট্রিং ভেরিয়েবল ফরম্যাট করতে।

বার্তা টেমপ্লেট ফাংশন বার্তা টেমপ্লেট ফাংশন রেফারেন্সে বিস্তারিতভাবে বর্ণনা করা হয়েছে।

উদাহরণ: toLowerCase()

একটি স্ট্রিং ভেরিয়েবলকে ছোট হাতের অক্ষরে রূপান্তর করতে বিল্ট-ইন toLowerCase() ফাংশনটি ব্যবহার করুন:

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
        <Headers>
            <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header>
        </Headers>
    </Set>
</AssignMessage>

যদি foo.bar ফ্লো ভেরিয়েবলের সমাধান হয়, তাহলে এর অক্ষরগুলো সব ছোট হাতের হবে। যদি foo.bar অমীমাংসিত হয় তবে ডিফল্ট মান FOO প্রতিস্থাপিত হয় এবং ছোট হাতের অক্ষরে রূপান্তরিত হয়। যেমন:

Test header: foo

উদাহরণ: escapeJSON()

এখানে একটি আকর্ষণীয় ব্যবহারের ক্ষেত্রে রয়েছে: ধরা যাক আপনার ব্যাকএন্ড অ্যাপটি একটি JSON প্রতিক্রিয়া প্রদান করে যাতে বৈধ এস্কেপ অক্ষর রয়েছে। যেমন:

{
      "code": "INVALID",
      "user_message": "Invalid value for \"logonId\" check your input."
}

তারপর, ধরা যাক আপনি একটি কাস্টম পেলোডে ক্লায়েন্ট কলারের কাছে এই বার্তাটি ফেরত দিতে চান৷ এটি করার সাধারণ উপায় হল টার্গেট রেসপন্স পেলোড থেকে বার্তাটি বের করা এবং এটিকে একটি কাস্টম প্রক্সি রেসপন্সে যোগ করতে অ্যাসাইন মেসেজ ব্যবহার করা (অর্থাৎ, এটি ক্লায়েন্টের কাছে ফেরত পাঠান)।

এখানে এক্সট্রাক্ট ভেরিয়েবল নীতি যা user_message তথ্যকে standard.systemMessage নামক একটি ভেরিয়েবলে বের করে দেয়:

<ExtractVariables name="EV-BackendErrorResponse">
    <DisplayName>EV-BackendErrorResponse</DisplayName>
    <JSONPayload>
        <Variable name="standard.systemMessage">
            <JSONPath>$.user_message</JSONPath>
        </Variable>
    </JSONPayload>
</ExtractVariables>

এখন, এখানে একটি সম্পূর্ণ বৈধ অ্যাসাইন মেসেজ নীতি যা রেসপন্স পেলোডে (প্রক্সি রেসপন্স) এক্সট্র্যাক্ট করা ভেরিয়েবল যোগ করে:

<AssignMessage name="AM-SetStandardFaultResponse">
    <DisplayName>AM-SetStandardFaultResponse</DisplayName>
    <Set>
        <Payload contentType="application/json">
           {
              "systemMessage": "{standard.systemMessage}"
           }
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>


দুর্ভাগ্যবশত, একটি সমস্যা আছে. এক্সট্র্যাক্ট ভেরিয়েবল নীতি বার্তার অংশের চারপাশে পালিয়ে যাওয়া উদ্ধৃতি অক্ষরগুলিকে সরিয়ে দিয়েছে। এর মানে হল যে ক্লায়েন্টের কাছে ফিরে আসা প্রতিক্রিয়াটি অবৈধ JSON। এটি স্পষ্টতই আপনার উদ্দেশ্য নয়!

{
    "systemMessage": "Invalid value for "logonId" check your input."
}

এই সমস্যাটি মোকাবেলা করার জন্য, আপনি একটি বার্তা টেমপ্লেট ফাংশন ব্যবহার করতে অ্যাসাইন মেসেজ নীতি পরিবর্তন করতে পারেন যা আপনার জন্য JSON-এর মধ্যে উদ্ধৃতিগুলি এড়িয়ে যায়৷ এই ফাংশন, escapeJSON() , JSON এক্সপ্রেশনের মধ্যে যেকোনও উদ্ধৃতি বা অন্যান্য বিশেষ অক্ষর এড়িয়ে যায়:

<AssignMessage name="AM-SetStandardFaultResponse">
    <DisplayName>AM-SetStandardFaultResponse</DisplayName>
    <Set>
        <Payload contentType="application/json">
           {
              "systemMessage": "{escapeJSON(standard.systemMessage)}"
           }
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>


ফাংশনটি এমবেড করা উদ্ধৃতিগুলিকে এড়িয়ে যায়, যার ফলে বৈধ JSON হয়, যা আপনি ঠিক যা চেয়েছিলেন:

{
      "systemMessage": "Invalid value for \"logonId\" check your input.",
}

একটি বার্তা টেমপ্লেট হল একটি গতিশীল স্ট্রিং প্রতিস্থাপন বৈশিষ্ট্য যা আপনি নির্দিষ্ট নীতি এবং TargetEndpoint সংজ্ঞাগুলিতে ব্যবহার করতে পারেন৷ মেসেজ টেমপ্লেট ফাংশন আপনাকে একটি মেসেজ টেমপ্লেটের মধ্যে হ্যাশিং, স্ট্রিং ম্যানিপুলেশন, ক্যারেক্টার এস্কেপিং এবং অন্যান্যের মতো দরকারী ক্রিয়াকলাপ সম্পাদন করতে দেয়।

উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage নীতিতে, toLowerCase() ফাংশনটি একটি বার্তা টেমপ্লেটে ব্যবহৃত হয়:

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Test header: {Hello, toLowerCase(user.name)}</Header>
       </Headers>
    </Set>
</AssignMessage>

এই বিষয় বার্তা টেমপ্লেট ফাংশন, তাদের আর্গুমেন্ট, এবং আউটপুট বর্ণনা করে। এই বিষয়টি অনুমান করে যে আপনি বার্তা টেমপ্লেট এবং সেগুলি ব্যবহার করা প্রসঙ্গের সাথে পরিচিত।

হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

হেক্সাডেসিমেল হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং একটি হেক্সাডেসিমেল সংখ্যা হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা প্রদান করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
md5Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
sha1Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
sha256Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
sha384Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
sha512Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

যুক্তি

স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

ফাংশন কল:

sha256Hex('abc')

ফলাফল:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

ফাংশন কল:

var str = 'abc';
sha256Hex(str)

ফলাফল:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

বেস 64 হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং একটি Base64 এনকোডেড মান হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

সিনট্যাক্স

ফাংশন বর্ণনা
md5Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
sha1Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
sha256Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
sha384Base64(string) একটি Base64 এনকোডেড ভ্যালুয়ার হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
sha512Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

যুক্তি

স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

ফাংশন কল:

sha256Base64('abc')

ফলাফল:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

ফাংশন কল:

var str = 'abc';
sha256Base64(str)

ফলাফল:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

স্ট্রিং ফাংশন

একটি বার্তা টেমপ্লেটের মধ্যে স্ট্রিংগুলিতে ক্রিয়াকলাপ সম্পাদন করুন।

বেস64 এনকোডিং ফাংশন

Base64 এনকোডিং স্কিম ব্যবহার করে স্ট্রিং এনকোড এবং ডিকোড করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
encodeBase64(string) Base64 এনকোডিং ব্যবহার করে একটি স্ট্রিং এনকোড করে। উদাহরণস্বরূপ: encodeBase64( value ) , যখন value abc ধরে রাখে, ফাংশনটি স্ট্রিংটি প্রদান করে: YWJj
decodeBase64(string) একটি Base64 এনকোডেড স্ট্রিং ডিকোড করে। উদাহরণস্বরূপ: decodeBase64( value ) যখন value aGVsbG8sIHdvcmxk ধারণ করে, ফাংশনটি hello, world স্ট্রিং প্রদান করে।

যুক্তি

স্ট্রিং - এনকোড বা ডিকোড করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header>
       </Headers>
    </Set>
</AssignMessage>

কেস রূপান্তর ফাংশন

একটি স্ট্রিংকে সমস্ত বড় হাতের বা সমস্ত ছোট হাতের অক্ষরে রূপান্তর করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
toUpperCase(string) একটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করুন।
toLowerCase(string) একটি স্ট্রিংকে ছোট হাতের অক্ষরে রূপান্তর করুন।


যুক্তি

স্ট্রিং - রূপান্তর করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header>
       </Headers>
    </Set>
</AssignMessage>

সাবস্ট্রিং ফাংশন

নির্দিষ্ট স্ট্রিং এর শুরু এবং শেষ সূচকের মধ্যে অক্ষর প্রদান করে।

সিনট্যাক্স

substring(str,start_index,end_index)

যুক্তি

  • str - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল।
  • start_index - স্ট্রিং এর মধ্যে শুরু সূচক।
  • end_index - (ঐচ্ছিক) স্ট্রিং এ শেষ সূচক। যদি সরবরাহ না করা হয়, শেষ সূচকটি স্ট্রিংয়ের শেষ।

উদাহরণ

নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন যে এই প্রবাহ ভেরিয়েবলগুলি বিদ্যমান:

পরিবর্তনশীল নাম মান
alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
seven 7


এই ভেরিয়েবলগুলি ব্যবহার করে এমন ফাংশন কলগুলির ফলাফল এখানে রয়েছে:

বার্তা টেমপ্লেট অভিব্যক্তি ফলাফল
{substring(alpha,22)} WXYZ
hello {substring(alpha,22)} hello WXYZ
{substring(alpha,-4)} WXYZ
{substring(alpha,-8,-4)} STUV
{substring(alpha,0,10)} ABCDEFGHIJ
{substring(alpha,0,seven)} ABCDEFG

সমস্ত ফাংশন প্রতিস্থাপন করুন

একটি স্ট্রিং-এ একটি রেগুলার এক্সপ্রেশন প্রয়োগ করে এবং যেকোনো মিলের জন্য, ম্যাচটিকে প্রতিস্থাপন মান দিয়ে প্রতিস্থাপন করে।

সিনট্যাক্স

replaceAll(string,regex,value)

যুক্তি

  • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
  • regex - একটি নিয়মিত অভিব্যক্তি।
  • মান - স্ট্রিং এর মধ্যে সমস্ত রেজেক্স মিল প্রতিস্থাপন করার মান।

উদাহরণ

নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন এই প্রবাহ ভেরিয়েবলগুলি বিদ্যমান:

পরিবর্তনশীল নাম মান
header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
regex1 "^Bearer "
replacement "TOKEN: "

এই ভেরিয়েবলগুলি ব্যবহার করে এমন ফাংশন কলগুলির ফলাফল এখানে রয়েছে:

বার্তা টেমপ্লেট অভিব্যক্তি ফলাফল
{replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
{replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
{replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

প্রথম ফাংশন প্রতিস্থাপন করুন

স্ট্রিং-এ নির্দিষ্ট রেগুলার এক্সপ্রেশন ম্যাচের শুধুমাত্র প্রথম ঘটনাকে প্রতিস্থাপন করে।

সিনট্যাক্স

replaceFirst(string,regex,value)

যুক্তি

  • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
  • regex - একটি নিয়মিত অভিব্যক্তি।
  • মান - রেজেক্স প্রতিস্থাপনের মান স্ট্রিংয়ের মধ্যে মেলে।

ক্যারেক্টার এস্কেপ এবং এনকোডিং ফাংশন

একটি স্ট্রিং-এ বিশেষ অক্ষরগুলিকে এস্কেপ বা এনকোড করার ফাংশন৷

সিনট্যাক্স

ফাংশন বর্ণনা
escapeJSON(স্ট্রিং) ব্যাকস্ল্যাশ-এস্কেপ ডবল-কোট।
escapeXML(স্ট্রিং) সংশ্লিষ্ট XML সত্তার সাথে কোণ বন্ধনী, অ্যাপোস্ট্রফি, ডাবল-কোট এবং অ্যাম্পারস্যান্ড প্রতিস্থাপন করে। XML 1.0 নথির জন্য ব্যবহার করুন।

escapeXML11(স্ট্রিং) escapeXML এর মতোই কাজ করে, কিন্তু XML v1.1 সত্তার জন্য। নিচে ব্যবহার নোট দেখুন.
এনকোডএইচটিএমএল(স্ট্রিং) অ্যাপোস্ট্রফি, কোণ বন্ধনী এবং অ্যাম্পারস্যান্ডকে এনকোড করে।

যুক্তি

স্ট্রিং - পালানোর জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

ব্যবহারের নোট

XML 1.1 নির্দিষ্ট নিয়ন্ত্রণ অক্ষর উপস্থাপন করতে পারে, কিন্তু এটি নাল বাইট বা আনপেয়ারড ইউনিকোড সারোগেট কোডপয়েন্টগুলিকে উপস্থাপন করতে পারে না, এমনকি পালিয়ে যাওয়ার পরেও। escapeXML11() ফাংশন এমন অক্ষরগুলিকে সরিয়ে দেয় যেগুলি নিম্নলিখিত রেঞ্জে ফিট করে না:

[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

escapeXML11() ফাংশন নিম্নলিখিত রেঞ্জের অক্ষরগুলিকে এস্কেপ করে:

[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

উদাহরণ

অনুমান করুন খাদ্য নামক একটি প্রবাহ পরিবর্তনশীল এই মানটির সাথে বিদ্যমান: "bread" & "butter" তারপর, ফাংশন:

{escapeHTML(food)}

ফলাফল:

&quot;bread&quot; &amp; &quot;butter&quot;

সময় বিন্যাস ফাংশন

স্থানীয় সময় অঞ্চলে বা ইউটিসি-তে ফর্ম্যাট করা সময়ের একটি স্ট্রিং উপস্থাপনা ফেরত দিন।

সিনট্যাক্স

ফাংশন বর্ণনা
timeFormat(format,str) স্থানীয় সময় অঞ্চলে ফর্ম্যাট করা তারিখ প্রদান করে।
timeFormatMs(format,str) স্থানীয় সময় অঞ্চলে ফর্ম্যাট করা তারিখ প্রদান করে।
timeFormatUTC(format,str) UTC-তে ফর্ম্যাট করা তারিখ ফেরত দেয়।
timeFormatUTCMs(format,str) UTC-তে ফর্ম্যাট করা তারিখ ফেরত দেয়।

যুক্তি

  • বিন্যাস - একটি তারিখ/সময় বিন্যাস স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ভেরিয়েবল হতে পারে।
  • str - একটি স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যেখানে একটি সময় মান রয়েছে। টাইমফরমেটএম-এর জন্য মানটি সেকেন্ড-সেকেন্ড-এপক বা মিলিসেকেন্ড-সিন্স-ইপোক হতে পারে।

উদাহরণ

নিম্নলিখিত মানগুলি অনুমান করুন এবং অনুমান করুন স্থানীয় সময় অঞ্চলটি প্রশান্ত মহাসাগরীয়:

  • epoch_time_ms = 1494390266000
  • epoch_time = 1494390266
  • fmt1 = yyyy-MM-dd
  • fmt2 = yyyy-MM-dd HH-mm-ss
  • fmt3 = yyyyMMddHHmmss

ফাংশন নিম্নলিখিত ফলাফল প্রদান করে:

    ফাংশন আউটপুট
    timeFormatMs(fmt1,epoch_time_ms) 2017-05-09
    timeFormat(fmt1,epoch_time) 2017-05-09
    timeFormat(fmt2,epoch_time) 2017-05-09 21:24:26
    timeFormat(fmt3,epoch_time) 20170509212426
    timeFormatUTC(fmt1,epoch_time) 2017-05-10
    timeFormatUTC(fmt2,epoch_time) 2017-05-10 04:24:26
    timeFormatUTC(fmt3,epoch_time) 20170510042426

    HMAC গণনা ফাংশন

    HMAC গণনা ফাংশন একটি HMAC গণনা করার জন্য HMAC নীতি ব্যবহার করার বিকল্প প্রদান করে। একটি ক্যাসকেডেড HMAC গণনা সম্পাদন করার সময় ফাংশনগুলি সুবিধাজনক, যেমন একটি HMAC-এর আউটপুট দ্বিতীয় HMAC-এর কী হিসাবে ব্যবহৃত হয়৷

    সিনট্যাক্স

    ফাংশন বর্ণনা
    hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) SHA-224 হ্যাশ ফাংশন সহ একটি HMAC গণনা করে৷
    hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) SHA-256 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) SHA-384 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) SHA-512 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) MD5 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে।
    hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) SHA-1 এনক্রিপশন অ্যালগরিদম সহ একটি HMAC এনকোড করে৷

    যুক্তি

    • কী - (প্রয়োজনীয়) গোপন কী নির্দিষ্ট করে, একটি স্ট্রিং হিসাবে এনকোড করা, HMAC গণনা করতে ব্যবহৃত।
    • valueToSign - (প্রয়োজনীয়) স্বাক্ষর করার জন্য বার্তাটি নির্দিষ্ট করে। এটি একটি স্ট্রিং হওয়া উচিত।
    • কীনকোডিং - (ঐচ্ছিক) গোপন কী স্ট্রিংটি এই নির্দিষ্ট এনকোডিং অনুযায়ী ডিকোড করা হবে। বৈধ মান: hex , base16 , base64 , utf-8 । ডিফল্ট: utf-8
    • আউটপুটেনকোডিং - (ঐচ্ছিক) আউটপুটের জন্য ব্যবহার করার জন্য এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। বৈধ মান: hex , base16 , base64 . মানগুলি কেস সংবেদনশীল; hex এবং base16 সমার্থক শব্দ। ডিফল্ট: base64

    উদাহরণ

    এই উদাহরণটি একটি HMAC-256 গণনা করার জন্য AssignMessage নীতি ব্যবহার করে এবং এটি একটি ফ্লো ভেরিয়েবলে বরাদ্দ করে:

    <AssignMessage name='AM-HMAC-1'>
      <AssignVariable>
        <Name>valueToSign</Name>
        <Template>{request.header.apikey}.{request.header.date}</Template>
      </AssignVariable>
      <AssignVariable>
        <Name>hmac_value</Name>
        <Template>{hmacSha256(private.secretkey,valueToSign)}</Template>
      </AssignVariable>
    </AssignMessage>
    

    এই উদাহরণটি ব্যাখ্যা করে যে কীভাবে একটি ক্যাসকেডিং HMAC তৈরি করতে হয় যা AWS স্বাক্ষর v4 স্বাক্ষর প্রক্রিয়ার সাথে ব্যবহার করা যেতে পারে। উদাহরণটি AWS স্বাক্ষর v4 এর জন্য একটি স্বাক্ষর গণনা করতে ব্যবহৃত ক্যাসকেডেড HMAC-এর পাঁচটি স্তর তৈরি করতে AssignMessage নীতি ব্যবহার করে:

    <AssignMessage name='AM-HMAC-AWS-1'>
      <!-- 1 -->
      <AssignVariable>
        <Name>DateValue</Name>
        <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template>
      </AssignVariable>
      <!-- 2 -->
      <AssignVariable>
        <Name>FirstKey</Name>
        <Template>AWS4{private.secret_aws_access_key}</Template>
      </AssignVariable>
      <!-- 3 -->
      <AssignVariable>
        <Name>DateKey</Name>
        <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template>
      </AssignVariable>
      <!-- 4 -->
      <AssignVariable>
        <Name>DateRegionKey</Name>
        <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template>
      </AssignVariable>
      <!-- 5 -->
      <AssignVariable>
        <Name>DateRegionServiceKey</Name>
        <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template>
      </AssignVariable>
      <!-- 6 -->
      <AssignVariable>
        <Name>SigningKey</Name>
        <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template>
      </AssignVariable>
      <!-- 7 -->
      <AssignVariable>
        <Name>aws4_hmac_value</Name>
        <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template>
      </AssignVariable>
    </AssignMessage>
    

    অন্যান্য ফাংশন

    UUID ফাংশন তৈরি করুন

    একটি UUID তৈরি করে এবং ফেরত দেয়।

    সিনট্যাক্স

    createUuid()
    

    যুক্তি

    কোনোটিই নয়।

    উদাহরণ

    { createUuid()}

    নমুনা ফলাফল:

    ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
    

    এলোমেলো দীর্ঘ জেনারেটর ফাংশন

    একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।

    সিনট্যাক্স

    randomLong(args)
    

    যুক্তি

    • যদি কোন আর্গুমেন্ট নির্দিষ্ট করা না থাকে, তাহলে ফাংশনটি জাভা সিকিউরর্যান্ডম ক্লাস দ্বারা গণনা করা একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।
    • একটি যুক্তি উপস্থিত থাকলে, এটি গণনার সর্বনিম্ন মান হিসাবে বিবেচিত হয়।
    • যদি একটি দ্বিতীয় যুক্তি উপস্থিত থাকে, তাহলে এটি গণনার সর্বাধিক মান হিসাবে বিবেচিত হয়।

    উদাহরণ

    {random()}
    

    এই মত কিছু ফলাফল:

    5211338197474042880
    

    রেজেক্স টেক্সট জেনারেটর

    একটি প্রদত্ত রেগুলার এক্সপ্রেশনের সাথে মেলে এমন একটি টেক্সট স্ট্রিং তৈরি করুন।

    সিনট্যাক্স

    xeger(regex)
    

    যুক্তি

    regex - একটি নিয়মিত অভিব্যক্তি।

    উদাহরণ

    এই উদাহরণটি কোন শূন্য ছাড়া একটি সাত অঙ্কের স্ট্রিং তৈরি করে:

    xeger('[1-9]{7}')
    

    উদাহরণ ফলাফল:

    9857253
    

    নাল-কোলেসিং ফাংশন

    firstnonnull() ফাংশন বাম-সবচেয়ে, নন-নাল আর্গুমেন্টের মান প্রদান করে।

    সিনট্যাক্স

    firstnonnull(var1,varn)
    

    যুক্তি

    var1 - একটি প্রসঙ্গ পরিবর্তনশীল।

    var n - এক বা একাধিক প্রসঙ্গ ভেরিয়েবল। আপনি একটি ফলব্যাক মান প্রদান করতে একটি স্ট্রিং-এ ডান-সবচেয়ে আর্গুমেন্ট সেট করতে পারেন (একটি মান যা সেট করা হবে যদি বাম হাতের কোনো আর্গুমেন্ট সেট না থাকে)।

    উদাহরণ

    নিম্নলিখিত টেবিলটি কীভাবে ফাংশনটি ব্যবহার করতে হয় তা ব্যাখ্যা করে:

    টেমপ্লেট Var1 Var2 Var3 ফলাফল
    {firstnonnull(var1,var2)} সেট করা হয়নি foo N/A foo
    {firstnonnull(var1,var2)} foo bar N/A foo
    {firstnonnull(var1,var2)} foo সেট করা হয়নি N/A foo
    {firstnonnull(var1,var2,var3)} foo bar baz foo
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি bar baz bar
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি baz baz
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি সেট করা হয়নি null
    {firstnonnull(var1)} সেট করা হয়নি N/A N/A null
    {firstnonnull(var1)} foo N/A N/A foo
    {firstnonnull(var1,var2)} "" bar N/A ""
    {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

    XPath ফাংশন

    একটি XML ভেরিয়েবলে একটি XPath অভিব্যক্তি প্রয়োগ করে।

    সিনট্যাক্স

    xpath(xpath_expression,xml_string,[datatype])
    

    যুক্তি

    xpath_expression - একটি XPath এক্সপ্রেশন।

    xml_string - একটি ফ্লো ভেরিয়েবল বা XML ধারণকারী স্ট্রিং।

    ডেটাটাইপ - (ঐচ্ছিক) কোয়েরির পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে। এটি নোডসেট, নোড, সংখ্যা, বুলিয়ান, স্ট্রিং হতে পারে। এটা নোডসেট ডিফল্ট. ডিফল্ট সাধারণত সঠিক পছন্দ হয়.

    উদাহরণ 1

    ধরুন এই প্রসঙ্গ ভেরিয়েবলগুলি একটি XML স্ট্রিং এবং একটি XPath অভিব্যক্তিকে সংজ্ঞায়িত করে:

    xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
    xpath = "/tag/tagid"

    এবং xpath() ফাংশনটি একটি AssignMessage নীতিতে ব্যবহার করা হয়, নিম্নরূপ:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath(xpath,xml)}</Template>
      </AssignVariable>
    </AssignMessage><

    ফাংশন <tagid>250397</tagid> মান প্রদান করে। এই মানটি extracted_tag ​​নামক কনটেক্সট ভেরিয়েবলে স্থাপন করা হয়।

    উদাহরণ 2

    আপনি যদি শুধুমাত্র নোডের মান চান তবে text() ফাংশনটি ব্যবহার করুন, নিম্নরূপ:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath('/tag/tagid/text()',xml)}</Template>
      </AssignVariable>
    </AssignMessage>

    এই অপারেশনের ফলস্বরূপ, প্রসঙ্গ পরিবর্তনশীল extracted_tag 250397 এ সেট করা হয়েছে

    যদি একাধিক নোড নির্বাচন করা হয়, তাহলে xpath() এর ফলাফল হল নির্বাচনের সমস্ত মান, একটি কমা দিয়ে সংযুক্ত।

    উদাহরণ 3: XML নেমস্পেস

    একটি নামস্থান নির্দিষ্ট করতে, অতিরিক্ত পরামিতি যুক্ত করুন, প্রতিটি একটি স্ট্রিং যা prefix:namespaceuri । উদাহরণস্বরূপ, একটি xpath() ফাংশন যা একটি SOAP বডির চাইল্ড উপাদান নির্বাচন করে তা এইরকম হতে পারে:

    <AssignMessage>
      <AssignVariable>
        <Name>soapns</Name>
        <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value>
      </AssignVariable>
      <AssignVariable>
        <Name>xpathexpression</Name>
        <Value>/soap:Envelope/soap:Body/*</Value>
      </AssignVariable>
      <AssignVariable>
        <Name>extracted_element</Name>
        <Template>{xpath(xpathexpression,xml,soapns)}</Template>
      </AssignVariable>
    </AssignMessage>

    অতিরিক্ত নামস্থানের জন্য, আপনি xpath() ফাংশনে 10টি পর্যন্ত অতিরিক্ত প্যারামিটার যোগ করতে পারেন।

    আপনি একক উদ্ধৃতি দ্বারা বেষ্টিত একটি স্ট্রিং হিসাবে একটি সাধারণ XPath অভিব্যক্তি নির্দিষ্ট করতে পারেন:

    {xpath('/tag/tagid/text()',xml)}

    যদি XPath এক্সপ্রেশনে নেমস্পেস উপসর্গ (এবং কোলন) অন্তর্ভুক্ত থাকে তবে আপনাকে সেই XPath এক্সপ্রেশনটিকে একটি ভেরিয়েবলে বরাদ্দ করতে হবে এবং এক্সপ্রেশনের পরিবর্তে পরিবর্তনশীল নামটি নির্দিষ্ট করতে হবে।

    {xpath(xpathexpression,xml,ns1)}

    উদাহরণ 4: একটি পছন্দসই রিটার্ন টাইপ নির্দিষ্ট করা

    xpath() ফাংশনে পাস করা ঐচ্ছিক তৃতীয় প্যারামিটারটি কোয়েরির পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে।

    কিছু XPath প্রশ্ন সাংখ্যিক বা বুলিয়ান মান প্রদান করতে পারে। উদাহরণস্বরূপ count() ফাংশন একটি সংখ্যা প্রদান করে। এটি একটি বৈধ XPath প্রশ্ন:

    count(//Record/Fields/Pair)
    

    এই বৈধ প্রশ্নটি একটি বুলিয়ান প্রদান করে:

    count(//Record/Fields/Pair)>0
    

    এই ক্ষেত্রে xpath() ফাংশনটি একটি তৃতীয় প্যারামিটার সহ যে প্রকারটি নির্দিষ্ট করে:

    {xpath(expression,xml,'number')}
    {xpath(expression,xml,'boolean')}

    যদি তৃতীয় প্যারামিটারে একটি কোলন থাকে, তাহলে এটি একটি নেমস্পেস আর্গুমেন্ট হিসাবে ব্যাখ্যা করা হয়। যদি না হয়, তাহলে এটি পছন্দসই রিটার্ন টাইপ হিসাবে বিবেচিত হয়। এই ক্ষেত্রে, যদি তৃতীয় প্যারামিটারটি বৈধ মানের একটি না হয় (কেস উপেক্ষা করে), xpath() ফাংশনটি একটি নোডসেট ফেরত দেওয়ার জন্য ডিফল্ট হয়।

    JSON পাথ ফাংশন

    একটি JSON ভেরিয়েবলে একটি JSON পাথ এক্সপ্রেশন প্রয়োগ করে।

    সিনট্যাক্স

    jsonPath(json-path,json-var,want-array)

    যুক্তি

    • (প্রয়োজনীয়) json-path : (স্ট্রিং) একটি JSON পাথ এক্সপ্রেশন।
    • (প্রয়োজনীয়) json-var : (স্ট্রিং) একটি ফ্লো ভেরিয়েবল বা JSON ধারণকারী স্ট্রিং।
    • (ঐচ্ছিক) want-array : (স্ট্রিং) যদি এই প্যারামিটারটি 'true' তে সেট করা হয় এবং ফলাফল সেটটি যদি একটি অ্যারে হয়, তবে সমস্ত অ্যারের উপাদানগুলি ফেরত দেওয়া হয়। যদি অন্য কোনো মান সেট করা হয় বা যদি এই প্যারামিটারটি বাদ দেওয়া হয়, তাহলে ফলাফল সেট অ্যারের শুধুমাত্র জিরোথ উপাদান প্রদান করা হয়। যদি ফলাফল সেট একটি অ্যারে না হয়, তাহলে এই তৃতীয় প্যারামিটার, যদি উপস্থিত থাকে, উপেক্ষা করা হয়।

    উদাহরণ 1

    যদি এটি বার্তা টেমপ্লেট হয়:

    The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

    এবং_ the_json_variable মধ্যে রয়েছে:

    {
      "results" : [
        {
          "address" : {
            "line1" : "18250 142ND AV NE",
            "city" : "Woodinville",
            "state" : "Washington",
            "zip" : "98072"
          },
          "name" : "Fred Meyer"
        },
        {
          "address" : {
            "line1" : "1060 West Addison Street",
            "city" : "Chicago",
            "state" : "Illinois",
            "zip" : "60613"
          },
          "name" : "Mae West"
        }
      ]
    } 

    ফাংশনের ফলাফল হল:

    The address is 1060 West Addison Street

    মনে রাখবেন যে এই ক্ষেত্রে, ফলাফল সেটটি একটি একক উপাদান (উপাদানের একটি অ্যারে নয়)। ফলাফল সেট একটি অ্যারে হলে, তারপর শুধুমাত্র অ্যারের জিরোথ উপাদান ফিরে আসবে। সম্পূর্ণ অ্যারে ফেরাতে, তৃতীয় প্যারামিটার হিসাবে 'true' সহ ফাংশনটিকে কল করুন, যেমনটি পরবর্তী উদাহরণে দেখানো হয়েছে।

    উদাহরণ 2

    যদি এটি বার্তা টেমপ্লেট হয়:

    {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

    এবং_ the_json_variable মধ্যে রয়েছে:

    {
      "results" : [
         {
          "config": {
            "quota": [
              {
                "appname": "A",
                "operation": "ManageOrder",
                "value": "900"
              },
              {
                "appname": "B",
                "operation": "ManageOrder",
                "value": "1000"
              },
              {
                "appname": "B",
                "operation": "SubmitOrder",
                "value": "800"
              }
            ]
          }
        }
      ]
    } 

    ফাংশনের ফলাফল হল:

    ['A','B']