সেলসফোর্স এক্সটেনশন, সেলসফোর্স এক্সটেনশন

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

সংস্করণ: ২.০.১

আপনার সেলসফোর্স অ্যাকাউন্টের ডেটা অ্যাক্সেস করুন। ডেটা সন্নিবেশ, আপডেট, পুনরুদ্ধার এবং কোয়েরি করুন।

এই বিষয়বস্তুতে এই এক্সটেনশনটি কনফিগার ও ব্যবহার করার জন্য নির্দেশিকা দেওয়া হয়েছে।

পূর্বশর্ত

এই বিষয়বস্তুটি এই এক্সটেনশনটি কনফিগার এবং ব্যবহার করার জন্য নির্দেশিকা প্রদান করে। ExtensionCallout পলিসি ব্যবহার করে একটি এপিআই প্রক্সি থেকে এক্সটেনশনটি ব্যবহার করার আগে, আপনাকে অবশ্যই:

  1. একটি RSA x509 প্রাইভেট কী অথবা সার্টিফিকেশন পেয়ার তৈরি করুন।

    এক্সটেনশনটি কনফিগার করার সময় আপনি ক্রেডেনশিয়াল হিসেবে প্রাইভেট কী (.key) ব্যবহার করবেন। একটি কানেক্টেড অ্যাপ তৈরি করার সময় আপনি সার্টিফিকেট (.crt) ফাইলটি ব্যবহার করবেন, যা এক্সটেনশনটিকে সেলসফোর্সে অ্যাক্সেস দেবে।

    openssl req -x509 -sha256 -nodes -days 36500 -newkey rsa:2048 -keyout salesforce.key -out salesforce.crt
    
    
  2. একটি সংযুক্ত অ্যাপ সেট আপ করুন।

    একটি সেলসফোর্স কানেক্টেড অ্যাপ সেলসফোর্স এক্সটেনশনটিতে অ্যাক্সেস দেবে। অ্যাপটি সেট আপ করার জন্য নির্দেশাবলী দেখুন।

  3. সংযুক্ত অ্যাপটির জন্য কনজিউমার কী-টি সংগ্রহ করুন। এক্সটেনশনটি অ্যাপের সাথে প্রমাণীকরণের সময় এটি ব্যবহার করবে।

    1. Salesforce সেটআপে, বাম দিকের নেভিগেশনে, Apps > App Manager- এ যান।
    2. তালিকায়, আপনার তৈরি করা সংযুক্ত অ্যাপটি খুঁজুন।
    3. অ্যাপ্লিকেশনটির সারির ডানদিকের ড্রপ-ডাউন থেকে ' ভিউ' (View) -তে ক্লিক করুন।
    4. API (Enable OAuth Settings)- এর অধীনে, Consumer Key-টি খুঁজুন এবং এক্সটেনশনটি কনফিগার করার সময় ব্যবহারের জন্য এর মানটি একটি নিরাপদ স্থানে কপি করে রাখুন।

এক্সটেনশনের মাধ্যমে অ্যাক্সেসের জন্য একটি সংযুক্ত অ্যাপ সেট আপ করুন।

Salesforce এক্সটেনশনটি Salesforce অ্যাক্সেস করার আগে, আপনাকে একটি Salesforce কানেক্টেড অ্যাপ তৈরি করতে হবে, যার মাধ্যমে এক্সটেনশনটি Salesforce-এর সাথে সংযোগ স্থাপন করতে পারবে।

সেলসফোর্সে, একটি কানেক্টেড অ্যাপ বাহ্যিক অ্যাপ্লিকেশনগুলোকে এপিআই (API)-এর মাধ্যমে সেলসফোর্সের সাথে সংযোগ স্থাপনের একটি উপায় প্রদান করে।

একটি সংযুক্ত অ্যাপ সেট আপ করতে

  1. Salesforce- এ সাইন ইন করুন।
  2. উপরের ডানদিকের গিয়ার আইকনে ক্লিক করুন, তারপর সেটআপ-এ ক্লিক করুন।
  3. বাম দিকের নেভিগেশনে, অ্যাপস > অ্যাপ ম্যানেজার প্রসারিত করুন।
  4. অ্যাপ ম্যানেজার পেজে, নতুন সংযুক্ত অ্যাপ-এ ক্লিক করুন।
  5. মৌলিক তথ্যের অধীনে, প্রয়োজনীয় ক্ষেত্রগুলি পূরণ করুন। মানগুলি হিসাবরক্ষণের জন্য; এগুলি এক্সটেনশন দ্বারা ব্যবহৃত হয় না।
  6. API (Enable OAuth Settings)- এর অধীনে, Enable OAuth Settings চেকবক্সটি নির্বাচন করুন।
  7. যদিও এক্সটেনশনটি এটি ব্যবহার করে না, একটি কলব্যাক ইউআরএল (Callback URL) লিখুন। আপনি http://localhost/ অথবা অন্য কোনো প্লেসহোল্ডার হোস্ট (placeholder host) ব্যবহার করতে পারেন।
  8. "ডিজিটাল স্বাক্ষর ব্যবহার করুন" চেকবক্সটি নির্বাচন করুন।
  9. ‘Use digital signatures’-এর অধীনে, ‘Choose File’-এ ক্লিক করে আপনার পূর্বে তৈরি করা salesforce.crt ফাইলটি খুঁজুন এবং আপলোড করুন।
  10. 'Selected OAuth Scopes' বিভাগে নিম্নলিখিতগুলি যোগ করুন, যাতে সেগুলি 'Selected OAuth Scopes'-এর অধীনে থাকে:
    • আপনার ডেটা অ্যাক্সেস এবং পরিচালনা করুন (এপিআই)
    • যেকোনো সময় আপনার পক্ষ থেকে অনুরোধগুলি সম্পাদন করুন (রিফ্রেশ_টোকেন, অফলাইন_অ্যাক্সেস)
  11. সেভ-এ ক্লিক করুন। যদি কোনো ত্রুটি থাকে, তাহলে আপনাকে salesforce.crt ফাইলটি পুনরায় তৈরি করে আপলোড করতে হতে পারে।
  12. ফলস্বরূপ অ্যাপ পেজটিতে, ম্যানেজ-এ ক্লিক করুন।
  13. আপনার এইমাত্র তৈরি করা অ্যাপটির অ্যাপ ম্যানেজার পেজে, এডিট পলিসিজ-এ ক্লিক করুন।
  14. OAuth পলিসি-এর অধীনে, পারমিটেড ইউজার্স ড্রপ-ডাউনে ক্লিক করুন, তারপর অ্যাডমিন অ্যাপ্রুভড ইউজার্স আর প্রি-অথরাইজড-এ ক্লিক করুন।
  15. সংরক্ষণ করুন- এ ক্লিক করুন।
  16. অ্যাপ পেজে ফিরে এসে, Profiles-এর নিচে Manage Profiles-এ ক্লিক করুন।
  17. অ্যাপ্লিকেশন প্রোফাইল অ্যাসাইনমেন্ট পৃষ্ঠায়, যে ব্যবহারকারী প্রোফাইলগুলো এই অ্যাপ্লিকেশনটি ব্যবহার করতে পারবে, তাদের জন্য চেকবক্সগুলো নির্বাচন করুন।

    এক্সটেনশনটি কনফিগার করার সময় আপনি যে ব্যবহারকারীর ইউজারনেম ব্যবহার করবেন, তার সাথে সামঞ্জস্যপূর্ণ একটি প্রোফাইল নির্বাচন করতে ভুলবেন না। এছাড়াও নিশ্চিত করুন যে অন্তত সিস্টেম অ্যাডমিনিস্ট্রেটর ব্যবহারকারীদের এই অ্যাপ্লিকেশনটিতে অ্যাক্সেস রয়েছে।

    আপনি Salesforce-এ ব্যবহারকারীর প্রোফাইল সেটিং দেখতে পারেন। Setup এলাকায়, Users > Users এক্সপ্যান্ড করুন, যে ব্যবহারকারীর প্রতিনিধিত্ব এক্সটেনশনটি করবে তাকে খুঁজুন, তারপর Profile কলামে তার প্রোফাইলটি খুঁজুন।

  18. সংরক্ষণ করুন- এ ক্লিক করুন।

সেলসফোর্স সম্পর্কে

সেলসফোর্স হলো একটি কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (সিআরএম) প্ল্যাটফর্ম। কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট গ্রাহকদের তথ্য ও মিথস্ক্রিয়া আরও ভালোভাবে পরিচালনা করার মাধ্যমে কোম্পানিগুলোকে তাদের গ্রাহকদের চাহিদা বুঝতে এবং সমস্যা সমাধান করতে সাহায্য করে — এই সবকিছুই একটি একক প্ল্যাটফর্মে করা যায়, যা যেকোনো ডেস্কটপ বা ডিভাইস থেকে সর্বদা অ্যাক্সেসযোগ্য।

কর্ম

ঢোকান

রেকর্ডগুলিকে sObject টাইপ হিসাবে সন্নিবেশ করুন।

সিনট্যাক্স

<Action>insert</Action>
<Input><![CDATA[{
  "sobject": records-sObject-type,
  "records":[ records-to-insert ],
  "allOrNone": true | false
}]]></Input>

উদাহরণ

<Action>insert</Action>
<Input><![CDATA[{
  "sobject": "Account",
  "records":[
    { "Name": "MyAccountName" }
  ],
  "allOrNone": true
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
sobject সন্নিবেশ করার জন্য রেকর্ডের sObject টাইপ স্ট্রিং কিছুই না। হ্যাঁ।
রেকর্ড JSON ফরম্যাটে sObject রেকর্ডসমূহের অ্যারে। সর্বোচ্চ সংখ্যা: ১০০০। অ্যারে কিছুই না। হ্যাঁ।
সব অথবা কিছুই না আপডেটের কোনো অংশ ব্যর্থ হলে সম্পূর্ণ আপডেটটি ব্যর্থ করার জন্য true নির্বাচন করুন। বুলিয়ান মিথ্যা না।

প্রতিক্রিয়া

ইনসার্ট অপারেশনের ফলাফল সম্বলিত একটি results অ্যারে।

{
  results: [
    { id: '0011U00000LQ76KQAT', success: true, errors: [] },
    { id: '0011U00000LQ76LQAT', success: true, errors: [] }
  ]
}
সম্পত্তি বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
ফলাফল[*].আইডি নতুন রেকর্ডের জন্য তৈরি হওয়া sObject ID। স্ট্রিং কিছুই না। হ্যাঁ।
ফলাফল[*].সফলতা রেকর্ডটি সন্নিবেশ করা সফল হলে true বুলিয়ান কিছুই না। হ্যাঁ।
ফলাফল[*].ত্রুটি এক্সিকিউশন চলাকালীন ধরা পড়া ত্রুটিগুলোর অ্যারে (যদি থাকে)। অ্যারে কিছুই না। হ্যাঁ।

আপডেট

সেলসফোর্স রেকর্ড আপডেট করুন।

সিনট্যাক্স

<Action>update</Action>
<Input><![CDATA[{
  "sobject": records-sObject-type,
  "records": [ records-to-update ],
  "allOrNone": true | false
}]]></Input>

উদাহরণ

<Action>update</Action>
<Input><![CDATA[{
  "sobject": "Account",
  "records":[
    {
      "id":"0011U00000LQ76KQAT",
      "Name": "MyNewAccountName"
    }
  ],
  "allOrNone": true
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
sobject আপডেট করার জন্য রেকর্ডগুলোর sObject টাইপ স্ট্রিং কিছুই না। হ্যাঁ।
রেকর্ড JSON ফরম্যাটে sObject রেকর্ডসমূহের অ্যারে। আপডেট করার জন্য প্রতিটি রেকর্ডে অবশ্যই তার ID ভ্যালু অন্তর্ভুক্ত থাকতে হবে। সর্বোচ্চ: ১০০০। অ্যারে কিছুই না। হ্যাঁ।
সব অথবা কিছুই না আপডেটের কোনো অংশ ব্যর্থ হলে সম্পূর্ণ আপডেটটি ব্যর্থ করার জন্য true নির্বাচন করুন। বুলিয়ান মিথ্যা না।

প্রতিক্রিয়া

একটি results অ্যারে, যাতে আপডেট থেকে প্রাপ্ত ফলাফলগুলো রয়েছে।

{
  results: [
    { id: '0011U00000LQ76KQAT', success: true, errors: [] },
    { id: '0011U00000LQ76LQAT', success: true, errors: [] }
  ]
}
প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
ফলাফল[*].আইডি আপডেট করা রেকর্ডের জন্য তৈরি হওয়া sObject ID। স্ট্রিং কিছুই না। হ্যাঁ।
ফলাফল[*].সফলতা রেকর্ডটি সন্নিবেশ করা সফল হলে true বুলিয়ান কিছুই না। হ্যাঁ।
ফলাফল[*].ত্রুটি এক্সিকিউশন চলাকালীন ধরা পড়া ত্রুটিগুলোর অ্যারে (যদি থাকে)। অ্যারে কিছুই না। হ্যাঁ।

পুনরুদ্ধার করুন

আইডি ব্যবহার করে রেকর্ডসমূহকে sObject হিসেবে পুনরুদ্ধার করুন। এটি sObject টাইপের সমস্ত ফিল্ড ফেরত দেয়।

সিনট্যাক্স

<Action>retrieve</Action>
<Input><![CDATA[{
  "sobject": records-sObject-type,
  "ids":[ IDs-of-records-to-retrieve ]
}]]></Input>

উদাহরণ

<Action>retrieve</Action>
<Input><![CDATA[{
  "sobject": "Account",
  "ids":["0011U00000LQ76KQAT"]
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
sobject যে রেকর্ডগুলো পুনরুদ্ধার করতে হবে, সেগুলোর ধরন হলো sObject স্ট্রিং কিছুই না। হ্যাঁ।
আইডি পুনরুদ্ধার করার জন্য sObject ID রেকর্ডগুলির অ্যারে। সর্বোচ্চ: ১০০০। অ্যারে কিছুই না। হ্যাঁ।
সব অথবা কিছুই না অনুরোধের কোনো অংশ ব্যর্থ হলে সম্পূর্ণ অপারেশনটি ব্যর্থ করার জন্য true নির্বাচন করুন। বুলিয়ান মিথ্যা না।

প্রতিক্রিয়া

JSON হিসাবে উপস্থাপিত sObject-গুলির একটি records অ্যারে। উল্লেখ্য যে, অবজেক্টগুলির সমস্ত প্রপার্টি JSON-এ অন্তর্ভুক্ত থাকে, এমনকি যদি প্রপার্টির মান null হয়।

{
  records: [
    { sobject-json },
    { sobject-json }
  ]
}

querySOQL

Salesforce Object Query Language (SOQL) ব্যবহার করে Salesforce.com-এ কোয়েরি করুন।

সিনট্যাক্স

<Action>querySOQL</Action>
<Input><![CDATA[{
  "soql": soql-query-statement
}]]></Input>

উদাহরণ

<Action>querySOQL</Action>
<Input><![CDATA[{
  "soql": "SELECT Id, Name FROM Account"
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
সোকল কোয়েরি করার জন্য SOQL স্টেটমেন্ট। স্ট্রিং কিছুই না। হ্যাঁ।

প্রতিক্রিয়া

কোয়েরির ফলাফল।

{
  totalSize: 2,
  records: [
    {
      attributes: { attributes-of-record },
      Id: '0011U00000LQ76KQAT',
      Name: 'AccountName1'
    },
    {
      attributes: { attributes-of-record },
      Id: '0011U00000LQ76LQAT',
      Name: 'AccountName2'
    }
  ],
  done: true
}
প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
মোট আকার কোয়েরি দ্বারা ফেরত আসা রেকর্ডের সংখ্যা। পূর্ণসংখ্যা কিছুই না। হ্যাঁ।
রেকর্ড JSON ফরম্যাটে sObject হিসেবে ফেরত আসা রেকর্ডগুলোর অ্যারে। সর্বোচ্চ সংখ্যা: ১০০০। অ্যারে কিছুই না। হ্যাঁ।
সম্পন্ন কোয়েরি অপারেশন সম্পন্ন হলে true বুলিয়ান কিছুই না। হ্যাঁ।

তালিকা

Salesforce.com রেকর্ডসমূহের তালিকা। নির্দিষ্ট sObject টাইপের সমস্ত ফিল্ড ফেরত দেয়।

সিনট্যাক্স

<Action>list</Action>
<Input><![CDATA[{
  "sobject": records-sObject-type,
  "limit": max-number-of-records,
  "offset": record-index-at-which-to-begin-response-set
}]]></Input>

উদাহরণ

<Action>list</Action>
<Input><![CDATA[{
  "sobject": "Account",
  "limit": 1000,
  "offset": 0
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
sobject তালিকাভুক্ত করার জন্য রেকর্ডগুলোর sObject টাইপ স্ট্রিং কিছুই না। হ্যাঁ।
সীমা ফেরত দেওয়ার জন্য রেকর্ডের সর্বোচ্চ সংখ্যা। পূর্ণসংখ্যা ১০০০ না।
অফসেট রেকর্ড তালিকাভুক্ত করার জন্য অফসেট। পূর্ণসংখ্যা 0 না।

প্রতিক্রিয়া

একটি records অ্যারে, যেখানে sObject-গুলো JSON ফরম্যাটে তালিকাভুক্ত থাকে।

{
  records: [
    { sobject-json },
    { sobject-json }
  ]
}

ডেল

নির্দিষ্ট আইডিযুক্ত রেকর্ডগুলো মুছে ফেলুন।

সিনট্যাক্স

<Action>del</Action>
<Input><![CDATA[{
  "sobject": records-sObject-type,
  "ids":[ IDs-of-records-to-retrieve ]
}]]></Input>

উদাহরণ

<Action>del</Action>
<Input><![CDATA[{
  "sobject": "Account",
  "ids":["0011U00000LQ76KQAT"]
}]]></Input>

অনুরোধের পরামিতি

প্যারামিটার বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
sobject মুছে ফেলার জন্য রেকর্ডগুলোর sObject টাইপ স্ট্রিং কিছুই না। হ্যাঁ।
আইডি মুছে ফেলার জন্য রেকর্ডগুলোর sObject আইডি-র অ্যারে। সর্বোচ্চ সংখ্যা: ১০০০। অ্যারে কিছুই না। হ্যাঁ।

প্রতিক্রিয়া

অপারেশনটির ফলাফল ধারণকারী একটি results অ্যারে।

{
  results:[
    { id: '0011U00000LQ76KQAT', success: true, errors: [] },
    { id: '0011U00000LQ76LQAT', success: true, errors: [] }
  ]
}
সম্পত্তি বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
ফলাফল[*].আইডি নির্দিষ্ট রেকর্ডের sObject আইডি। স্ট্রিং কিছুই না। হ্যাঁ।
ফলাফল[*].সফলতা রেকর্ডের জন্য অপারেশনটি সফল হলে true বুলিয়ান কিছুই না। হ্যাঁ।
ফলাফল[*].ত্রুটি এক্সিকিউশন চলাকালীন ধরা পড়া ত্রুটিগুলোর অ্যারে (যদি থাকে)। অ্যারে কিছুই না। হ্যাঁ।

অ্যাক্সেস টোকেন পান

Salesforce.com API অ্যাক্সেস টোকেন সংগ্রহ করুন। এটি REST API কোয়েরি করতে ব্যবহার করা যেতে পারে।

সিনট্যাক্স

<Action>getAccessToken</Action>
<Input><![CDATA[{}]]></Input>

অনুরোধের পরামিতি

কিছুই না।

প্রতিক্রিয়া

JSON-এ অ্যাক্সেস টোকেন।

{
  "accessToken":"00D1U0000014m3hqswvoM22I5GTw9EJrztlZ8eSSka88Q",
  "scope":"api",
  "instanceUrl": "https://na85.salesforce.com",
  "id": "https://login.salesforce.com/id/00D1U0004564mutUAA/0051U43214qecVQAQ",
  "tokenType": "Bearer"
}
সম্পত্তি বর্ণনা প্রকার ডিফল্ট প্রয়োজনীয়
অ্যাক্সেস টোকেন অ্যাক্সেস টোকেন। স্ট্রিং কিছুই না। হ্যাঁ।
পরিধি যেসব পরিধির মধ্যে টোকেনটি প্রবেশাধিকার প্রদান করে। স্ট্রিং কিছুই না। হ্যাঁ।
ইনস্ট্যান্সইউআরএল Salesforce অর্গ দ্বারা ব্যবহৃত ইনস্ট্যান্সের URL। স্ট্রিং কিছুই না। হ্যাঁ।
আইডি সংযুক্ত অ্যাপটির আইডি। স্ট্রিং কিছুই না। হ্যাঁ।
টোকেন টাইপ অ্যাক্সেস টোকেনের জন্য টাইপ করুন। স্ট্রিং বাহক হ্যাঁ।

কনফিগারেশন রেফারেন্স

এপিআই প্রক্সিতে ব্যবহারের জন্য এই এক্সটেনশনটি কনফিগার ও ডেপ্লয় করার সময় নিম্নলিখিত বিষয়গুলো ব্যবহার করুন।

সাধারণ সম্প্রসারণ বৈশিষ্ট্য

নিম্নলিখিত বৈশিষ্ট্যগুলি প্রতিটি এক্সটেনশনের জন্য উপস্থিত রয়েছে।

সম্পত্তি বর্ণনা ডিফল্ট প্রয়োজন
name আপনি এক্সটেনশনের এই কনফিগারেশনের নাম দিন। কোনোটিই নয় হ্যাঁ
packageName Apigee Edge দ্বারা প্রদত্ত এক্সটেনশন প্যাকেজের নাম। কোনোটিই নয় হ্যাঁ
version যে এক্সটেনশন প্যাকেজ থেকে আপনি একটি এক্সটেনশন কনফিগার করছেন তার সংস্করণ নম্বর। কোনোটিই নয় হ্যাঁ
configuration আপনি যে এক্সটেনশনটি যোগ করছেন তার জন্য নির্দিষ্ট কনফিগারেশন মান। এই এক্সটেনশন প্যাকেজের বৈশিষ্ট্য দেখুন কোনোটিই নয় হ্যাঁ

এই এক্সটেনশন প্যাকেজের জন্য বৈশিষ্ট্যসমূহ

এই এক্সটেনশনের জন্য নির্দিষ্ট নিম্নলিখিত কনফিগারেশন প্রোপার্টিগুলোর মান উল্লেখ করুন।

সম্পত্তি বর্ণনা ডিফল্ট প্রয়োজনীয়
অনুমোদন সার্ভার URL সেলসফোর্স থেকে অনুমোদন নেওয়ার সময় যে ইউআরএলটি ব্যবহার করতে হবে। সাধারণত, এটি হলো https://login.salesforce.com কিছুই না। হ্যাঁ।
সংযুক্ত অ্যাপ গ্রাহক কী আপনার তৈরি করা কানেক্টেড অ্যাপের জন্য Salesforce কর্তৃক প্রদত্ত কনজিউমার কী। আপনার কনজিউমার কী পুনরুদ্ধার করার জন্য পূর্বশর্ত (Prerequisites) অংশের নির্দেশাবলী দেখুন। কিছুই না। হ্যাঁ।
শংসাপত্র Apigee Edge কনসোলে প্রবেশ করালে, এটি হলো আপনার ধাপে ধাপে তৈরি করা salesforce.key ফাইলের বিষয়বস্তু। ম্যানেজমেন্ট API ব্যবহার করে পাঠানো হলে, এটি salesforce.key ফাইল থেকে তৈরি একটি base64-এনকোডেড মান। কিছুই না। হ্যাঁ।
সেলসফোর্স ব্যবহারকারীর ইউজারনেম আপনার তৈরি করা কানেক্টেড অ্যাপের সাথে যুক্ত ইউজারনেম। সেলসফোর্স এক্সটেনশনটি সেলসফোর্স থেকে অনুমোদন পেতে এটি ব্যবহার করবে। কিছুই না। হ্যাঁ।