एपेक्स ट्यूटोरियल: एपेक्स प्रोग्रामिंग क्लास और कोडिंग उदाहरण
सेल्सफोर्स में एपेक्स क्या है?
सर्वोच्च सेल्सफोर्स द्वारा विकसित एक ऑब्जेक्ट-ओरिएंटेड और स्ट्रोंग्ली टाइप्ड प्रोग्रामिंग लैंग्वेज है, जिसे सॉफ्टवेयर एज ए सर्विस (SaaS) और कस्टमर रिलेशनशिप मैनेजमेंट (CRM) के निर्माण के लिए विकसित किया गया है। एपेक्स डेवलपर्स को थर्ड-पार्टी SaaS एप्लिकेशन बनाने और बैक-एंड डेटाबेस सपोर्ट और क्लाइंट-सर्वर इंटरफेस प्रदान करके सिस्टम इवेंट में बिजनेस लॉजिक जोड़ने में मदद करता है।
एपेक्स डेवलपर्स को बटन क्लिक, संबंधित रिकॉर्ड अपडेट और विज़ुअलफोर्स पेज जैसे सिस्टम इवेंट में व्यावसायिक तर्क जोड़ने में मदद करता है। एपेक्स का सिंटैक्स एपेक्स के समान है Java. Salesforce के लिए पंजीकरण करें CRM कैसे काम करता है यह जानने के लिए
एपेक्स प्रोग्रामिंग भाषा की विशेषताएं
Salesforce Apex की महत्वपूर्ण विशेषताएं इस प्रकार हैं:
- एपेक्स एक केस-सेंसिटिव भाषा है।
- आप एपेक्स का उपयोग करके एसऑब्जेक्ट रिकॉर्ड्स पर INSERT, UPDATE, UPSERT, DELETE जैसे DML ऑपरेशन कर सकते हैं।
- आप एपेक्स में SOQL (सेल्सफोर्स ऑब्जेक्ट क्वेरी लैंग्वेज) और SOSL (सेल्सफोर्स ऑब्जेक्ट सर्च लैंग्वेज) का उपयोग करके एसऑब्जेक्ट रिकॉर्ड क्वेरी कर सकते हैं।
- आपको एक बनाने की अनुमति देता है अध्याय परीक्षा और उन्हें सत्यापित करने के लिए निष्पादित करें कोड कवरेज़ और शीर्ष में कोड की दक्षता।
- एपेक्स एक बहु-किरायेदार वातावरण में क्रियान्वित होता है, और Salesforce ने कुछ गवर्नर सीमाएँ परिभाषित की हैं जो उपयोगकर्ता को साझा संसाधनों को नियंत्रित करने से रोकती हैं। कोई भी कोड जो सेल्सफोर्स गवर्नर सीमा को पार करता है, विफल हो जाता है, एक त्रुटि दिखाई देती है।
- Salesforce ऑब्जेक्ट को एपेक्स में डेटाटाइप के रूप में इस्तेमाल किया जा सकता है। उदाहरण के लिए –
Account acc = new Account();
यहां खाता एक मानक सेल्सफोर्स ऑब्जेक्ट है।
- एपेक्स प्रत्येक सेल्सफोर्स रिलीज के साथ स्वचालित रूप से अपग्रेड हो जाता है।
डेवलपर को एपेक्स कब चुनना चाहिए?
एपेक्स कोड केवल तभी लिखा जाना चाहिए जब कोई व्यावसायिक परिदृश्य बहुत जटिल हो और उसे सेल्सफोर्स द्वारा प्रदान की गई पूर्व-निर्मित कार्यक्षमता का उपयोग करके क्रियान्वित नहीं किया जा सकता हो।
निम्नलिखित कुछ परिदृश्य हैं जहां हमें एपेक्स कोड लिखने की आवश्यकता है:
- ऐसी वेब सेवाएँ बनाना जो Salesforce को अन्य अनुप्रयोगों के साथ एकीकृत करती हैं।
- sobjects पर कस्टम सत्यापन लागू करने के लिए.
- जब कोई DML ऑपरेशन निष्पादित किया जाता है तो कस्टम एपेक्स लॉजिक निष्पादित करना।
- ऐसी कार्यक्षमता को क्रियान्वित करने के लिए जिसे मौजूदा वर्कफ़्लोज़ प्रवाह और प्रक्रिया बिल्डर्स कार्यक्षमता का उपयोग करके क्रियान्वित नहीं किया जा सकता है।
- स्थापित करना ईमेल सेवाएं, आपको एपेक्स कोड का उपयोग करके ईमेल की सामग्री, हेडर और अनुलग्नकों को संसाधित करना होगा।
एपेक्स की कार्य संरचना
अब इस एपेक्स ट्यूटोरियल में, हम एपेक्स की कार्य संरचना के बारे में जानेंगे:
शीर्ष कोड के लिए कार्यवाही का प्रवाह निम्नलिखित है:
- डेवलपर क्रिया: डेवलपर द्वारा लिखे गए सभी एपेक्स कोड को निर्देशों के एक सेट में संकलित किया जाता है, जिसे एपेक्स रनटाइम इंटरप्रेटर द्वारा समझा जा सकता है, जब डेवलपर कोड को प्लेटफॉर्म पर सहेजता है और फिर ये निर्देश प्लेटफॉर्म पर मेटाडेटा के रूप में सहेजे जाते हैं।
- अंतिम उपयोगकर्ता क्रिया: जब उपयोगकर्ता ईवेंट एपेक्स कोड निष्पादित करता है, तो प्लेटफॉर्म सर्वर मेटाडेटा से संकलित निर्देश प्राप्त करता है और परिणाम लौटाने से पहले उन्हें एपेक्स इंटरप्रेटर के माध्यम से चलाता है।
शीर्ष वाक्यविन्यास
परिवर्तनीय घोषणा
चूंकि एपेक्स एक सशक्त टाइप वाली भाषा है, इसलिए एपेक्स में डेटाटाइप के साथ चर घोषित करना अनिवार्य है।
उदाहरण के लिए:
contact con = new contact();
यहाँ वेरिएबल con को contact के साथ डेटाटाइप के रूप में घोषित किया गया है।
SOQL क्वेरी
SOQL का मतलब है सेल्सफोर्स ऑब्जेक्ट क्वेरी लैंग्वेज। SOQL का उपयोग सेल्सफोर्स डेटाबेस से sऑब्जेक्ट रिकॉर्ड लाने के लिए किया जाता है। उदाहरण के लिए-
Account acc = [select id, name from Account Limit 1];
उपरोक्त क्वेरी सेल्सफोर्स डेटाबेस से खाता रिकॉर्ड प्राप्त करती है।
लूप स्टेटमेंट
लूप स्टेटमेंट का उपयोग सूची में रिकॉर्ड्स पर पुनरावृत्ति करने के लिए किया जाता है। पुनरावृत्ति की संख्या सूची में रिकॉर्ड्स की संख्या के बराबर होती है। उदाहरण के लिए:
list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }
उपरोक्त कोड स्निपेट में, listOfAccounts, list डेटाटाइप का एक चर है।
प्रवाह नियंत्रण कथन
प्रवाह नियंत्रण कथन तब लाभदायक होता है जब आप कुछ शर्तों के आधार पर कोड की कुछ पंक्तियों को निष्पादित करना चाहते हैं।
उदाहरण के लिए:
list<Account>listOfAccounts = [select id, name from account limit 100]; // execute the logic if the size of the account list is greater than zero if(listOfAccounts.size() >0){ //your logic }
कोड का उपरोक्त स्निपेट डेटाबेस से खाता रिकॉर्ड की क्वेरी कर रहा है और सूची का आकार जांच रहा है।
डीएमएल कथन
DML का मतलब है डेटा मैनिपुलेशन लैंग्वेज। DML स्टेटमेंट का इस्तेमाल Salesforce डेटाबेस में डेटा में हेरफेर करने के लिए किया जाता है। उदाहरण के लिए –
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
शीर्ष विकास पर्यावरण
अब इस एपेक्स प्रोग्रामिंग ट्यूटोरियल में, हम एपेक्स डेवलपमेंट एनवायरनमेंट के बारे में जानेंगे:
एपेक्स कोड को सेल्सफोर्स के सैंडबॉक्स और डेवलपर संस्करण में विकसित किया जा सकता है।
सैंडबॉक्स वातावरण में कोड विकसित करना और फिर उसे उत्पादन वातावरण में तैनात करना सर्वोत्तम अभ्यास है।
एपेक्स कोड विकास उपकरण: Salesforce के सभी संस्करणों में एपेक्स कोड विकसित करने के लिए निम्नलिखित तीन उपकरण उपलब्ध हैं।
- Force.com डेवलपर कंसोल
- फोर्स.कॉम आईडीई
- Salesforce उपयोगकर्ता इंटरफ़ेस में कोड संपादकआप
एपेक्स में डेटा प्रकार
एपेक्स द्वारा समर्थित डेटाटाइप निम्नलिखित हैं:
आदिम
पूर्णांक, Double, लम्बा, दिनांक, दिनांक समय, स्ट्रिंग, आईडी, और बूलियन को आदिम डेटा प्रकार माना जाता है। सभी आदिम डेटा प्रकार मान द्वारा पारित किए जाते हैं, संदर्भ द्वारा नहीं।
संग्रह
एपेक्स में तीन प्रकार के संग्रह उपलब्ध हैं
- सूची: यह सूचकांकों पर आधारित प्राइमिटिव्स, एसऑब्जेक्ट्स, संग्रहों या एपेक्स ऑब्जेक्ट्स का क्रमबद्ध संग्रह है।
- सेट: अद्वितीय आदिमों का अव्यवस्थित संग्रह।
- मैप: यह अद्वितीय, आदिम कुंजियों का संग्रह है जो एकल मानों को मैप करता है जो आदिम, एसऑब्जेक्ट, संग्रह या एपेक्स ऑब्जेक्ट हो सकते हैं।
एसऑब्जेक्ट
यह Salesforce में एक विशेष डेटा प्रकार है। यह Salesforce में एक तालिका के समान है एसक्यूएल और इसमें SQL में कॉलम के समान फ़ील्ड्स शामिल हैं।
enums
Enum एक अमूर्त डेटा प्रकार है जो निर्दिष्ट पहचानकर्ताओं के एक सीमित सेट का एक मान संग्रहीत करता है
क्लासेज
वस्तुएँ
यह किसी भी डेटा प्रकार को संदर्भित करता है जो एपेक्स में समर्थित है।
इंटरफेस
एपेक्स एक्सेस स्पेसिफायर
एपेक्स द्वारा समर्थित एक्सेस स्पेसिफायर निम्नलिखित हैं:
सार्वजनिक
यह एक्सेस विनिर्देशक किसी नामस्थान के भीतर शीर्ष द्वारा उपयोग किए जाने वाले वर्ग, विधि, चर तक पहुंच प्रदान करता है।
निजी
यह एक्सेस स्पेसिफायर किसी क्लास, मेथड, वैरिएबल को स्थानीय रूप से या कोड के उस सेक्शन में इस्तेमाल करने के लिए एक्सेस देता है, जिसे परिभाषित किया गया है। सभी तकनीक, वैरिएबल जिनके पास कोई एक्सेस स्पेसिफायर परिभाषित नहीं है, उनके पास निजी का डिफ़ॉल्ट एक्सेस स्पेसिफायर है।
संरक्षित
यह एक्सेस स्पेसिफायर किसी विधि, चर तक पहुंच प्रदान करता है, जिसका उपयोग एपेक्स क्लास के भीतर किसी भी आंतरिक क्लास द्वारा किया जा सकता है।
वैश्विक
यह एक्सेस स्पेसिफायर किसी क्लास, मेथड, वैरिएबल को एक्सेस देता है जिसका उपयोग एपेक्स द्वारा नेमस्पेस के अंदर और साथ ही नेमस्पेस के बाहर भी किया जा सकता है। जब तक आवश्यक न हो, ग्लोबल कीवर्ड का उपयोग न करना एक सर्वोत्तम अभ्यास है।
एपेक्स में कीवर्ड
साझा करने के साथ
यदि किसी क्लास को इस कीवर्ड के साथ परिभाषित किया जाता है, तो वर्तमान उपयोगकर्ता पर लागू सभी साझाकरण नियम लागू होते हैं और यदि यह कीवर्ड अनुपस्थित है, तो कोड सिस्टम संदर्भ के तहत निष्पादित होता है।
उदाहरण के लिए:
public with sharing class MyApexClass{ // sharing rules enforced when code in this class execute }
बिना साझा किये
यदि किसी क्लास को इस कीवर्ड से परिभाषित किया गया है, तो वर्तमान उपयोगकर्ता पर लागू सभी साझाकरण नियम लागू नहीं होते हैं।
उदाहरण के लिए:
public without sharing class MyApexClass{ // sharing rules is not enforced when code in this class execute }
स्थिर
स्टैटिक कीवर्ड के साथ परिभाषित एक वैरिएबल, मेथड को एक बार आरंभ किया जाता है और क्लास से संबद्ध किया जाता है। स्टैटिक वैरिएबल, मेथड को क्लास का इंस्टेंस बनाए बिना सीधे क्लास के नाम से बुलाया जा सकता है।
अंतिम
एक स्थिरांक, विधि को final कीवर्ड के साथ परिभाषित किया जाता है जिसे ओवरराइड नहीं किया जा सकता है। उदाहरण के लिए:
public class myCls { static final Integer INT_CONST = 10; }
यदि आप इस INT_CONST चर के मान को ओवरराइड करने का प्रयास करते हैं, तो आपको एक अपवाद मिलेगा - System.FinalException: अंतिम चर पहले से ही आरंभीकृत हो चुका है।
वापसी
यह कीवर्ड किसी विधि से मान लौटाता है। उदाहरण के लिए:
public String getName() { return 'Test' ; }
अशक्त
यह एक शून्य स्थिरांक को परिभाषित करता है और इसे एक चर को सौंपा जा सकता है। उदाहरण के लिए
Boolean b = null;
वास्तविक
यदि किसी क्लास को वर्चुअल कीवर्ड से परिभाषित किया गया है, तो उसे विस्तारित और ओवरराइड किया जा सकता है।
सार
यदि किसी क्लास को abstract कीवर्ड के साथ परिभाषित किया गया है, तो उसमें abstract कीवर्ड के साथ कम से कम एक विधि अवश्य होनी चाहिए, और उस विधि में केवल हस्ताक्षर होना चाहिए।
उदाहरण के लिये
public abstract class MyAbstrtactClass { abstract Integer myAbstractMethod1(); }
शीर्ष स्ट्रिंग
स्ट्रिंग वर्णों का एक समूह है जिसकी कोई वर्ण सीमा नहीं होती। उदाहरण के लिए:
String name = 'Test';
Salesforce में स्ट्रिंग क्लास द्वारा कई इन-बिल्ट विधियाँ प्रदान की जाती हैं। निम्नलिखित कुछ अक्सर और अधिकतर उपयोग किए जाने वाले फ़ंक्शन हैं:
संक्षिप्त करें(maxWidth)
यह विधि स्ट्रिंग को निर्दिष्ट लंबाई तक काटती है और यदि दी गई स्ट्रिंग की लंबाई निर्दिष्ट लंबाई से अधिक है तो इसे वापस कर देती है; अन्यथा, यह मूल स्ट्रिंग को वापस कर देती है। यदि maxWidth चर का मान 4 से कम है, तो यह विधि रनटाइम अपवाद लौटाती है – System.StringException: न्यूनतम संक्षिप्तीकरण चौड़ाई 4 है
उदाहरण के लिए:
String s = 'Hello World'; String s2 = s.abbreviate(8); System.debug('s2'+s2); //Hello...
बड़ा करना ()
यह विधि किसी स्ट्रिंग के प्रथम अक्षर को टाइटल केस में परिवर्तित करती है और उसे वापस लौटा देती है।
उदाहरण के लिए:
String s = 'hello; String s2 = s.capitalize(); System.assertEquals('Hello', s2);
इसमें शामिल है(सबस्ट्रिंग)
यदि विधि को कॉल करने वाले स्ट्रिंग में निर्दिष्ट उपस्ट्रिंग शामिल है, तो यह विधि सत्य लौटाती है।
String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true
बराबर(stringOrId)
यदि पारित किया गया पैरामीटर शून्य नहीं है, तथा विधि को कॉल करने वाले स्ट्रिंग के समान बाइनरी वर्ण अनुक्रम को इंगित करता है, तो यह विधि सत्य लौटाती है।
आईडी मानों की तुलना करते समय आईडी की लंबाई बराबर नहीं हो सकती है। उदाहरण के लिए: यदि 15 वर्णों की आईडी को दर्शाने वाली स्ट्रिंग की तुलना 18 वर्णों की आईडी को दर्शाने वाली ऑब्जेक्ट से की जाती है, तो यह विधि सत्य लौटाती है। उदाहरण के लिए:
Id idValue15 = '001D000000Ju1zH'; Id idValue18 = '001D000000Ju1zHIAR'; Boolean result4 = stringValue15.equals(IdValue18); System.debug('result4', +result4); //true
उपरोक्त उदाहरण में equals विधि 15 अक्षरों वाली ऑब्जेक्ट आईडी की तुलना 18 अक्षरों वाली ऑब्जेक्ट आईडी से कर रही है और यदि ये दोनों आईडी समान बाइनरी अनुक्रम का प्रतिनिधित्व करती हैं तो यह true लौटाएगी।
केस-सेंसिटिव तुलना करने के लिए इस विधि का उपयोग करें।
एस्केपसिंगलकोट्स(स्ट्रिंगटूएस्केप)
यह विधि स्ट्रिंग में किसी भी एकल उद्धरण से पहले एक एस्केप वर्ण (\) जोड़ती है और उसे वापस करती है। यह विधि गतिशील SOQL क्वेरी बनाते समय SOQL इंजेक्शन को रोकती है। यह विधि सुनिश्चित करती है कि सभी एकल उद्धरण चिह्नों को डेटाबेस कमांड के बजाय संलग्न स्ट्रिंग के रूप में माना जाता है।
उदाहरण के लिए:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
हटाएँ(सबस्ट्रिंग)
यह विधि उस स्ट्रिंग से उल्लिखित सबस्ट्रिंग की सभी घटनाओं को हटा देती है जो विधि को कॉल करती है और परिणामी स्ट्रिंग को वापस कर देती है।
उदाहरण के लिये
String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'
सबस्ट्रिंग(स्टार्टइंडेक्स)
यह विधि एक सबस्ट्रिंग लौटाती है जो प्रारंभ में वर्ण से प्रारंभ होकर स्ट्रिंग के अंतिम अक्षर तक विस्तारित होती है।
उदाहरण के लिए:
String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger
उलटना ()
यह विधि स्ट्रिंग के सभी वर्णों को उलट देती है और उसे वापस कर देती है। उदाहरण के लिए:
String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello
ट्रिम(): यह विधि स्ट्रिंग से सभी प्रारंभिक रिक्त स्थानों को हटा देती है और उसे वापस कर देती है।
valueOf(रूपांतरित करने के लिए)
यह विधि पास किये गये ऑब्जेक्ट का स्ट्रिंग प्रतिनिधित्व लौटाती है।
शीर्ष गवर्नर की सीमाएं
एपेक्स गवर्नर सीमाएँ एपेक्स रनटाइम इंजन द्वारा लागू की गई सीमाएँ हैं ताकि यह सुनिश्चित किया जा सके कि कोई भी रनवे एपेक्स कोड और प्रक्रियाएँ साझा संसाधनों को नियंत्रित न करें और मल्टीटेनेंट वातावरण पर अन्य उपयोगकर्ताओं के लिए प्रसंस्करण का उल्लंघन न करें। ये सीमाएँ प्रत्येक एपेक्स लेनदेन के विरुद्ध सत्यापित की जाती हैं। प्रत्येक एपेक्स लेनदेन पर सेल्सफोर्स द्वारा परिभाषित गवर्नर सीमाएँ निम्नलिखित हैं:
विवरण | सीमा |
---|---|
SOQL क्वेरीज़ जो समकालिक लेनदेन में की जा सकती हैं | 100 |
SOQL क्वेरीज़ जो एसिंक्रोनस लेनदेन में की जा सकती हैं | 200 |
रिकॉर्ड जिन्हें SOQL क्वेरी द्वारा प्राप्त किया जा सकता है | 50000 |
Database.getQueryLocator द्वारा प्राप्त किए जा सकने वाले रिकॉर्ड | 10000 |
एसओएसएल क्वेरीज़ जो एक शीर्ष लेनदेन में की जा सकती हैं | 20 |
रिकॉर्ड जिन्हें SOSL क्वेरी द्वारा प्राप्त किया जा सकता है | 2000 |
डीएमएल कथन जो शीर्ष लेनदेन में किए जा सकते हैं | 150 |
वे रिकॉर्ड जिन्हें DML कथन, Approval.process, या database.emptyRecycleBin के परिणामस्वरूप संसाधित किया जा सकता है | 10000 |
कॉलआउट जो एक शीर्ष लेनदेन में किया जा सकता है। | 100 |
शीर्ष लेनदेन में किए जा रहे सभी कॉलआउट पर संचयी टाइमआउट सीमा | 120 सेकंड |
System.enqueueJob के साथ कतार में जोड़े जा सकने वाले शीर्ष कार्यों की सीमा | 50 |
प्रत्येक एपेक्स लेनदेन के लिए निष्पादन समय सीमा | 10 मिनट |
शीर्ष वर्ग और ट्रिगर में उपयोग किए जा सकने वाले पात्रों की सीमा | 1 लाख |
समकालिक लेनदेन के लिए CPU समय सीमा | 10,000 मिसे |
अतुल्यकालिक लेनदेन के लिए CPU समय सीमा | 60,000 मिसे |
एपेक्स गेट्टर और सेटर
एपेक्स प्रॉपर्टी एपेक्स वैरिएबल के समान है। गेट्टर और सेटर एपेक्स प्रॉपर्टी के लिए आवश्यक हैं। गेट्टर और सेटर का उपयोग प्रॉपर्टी वैल्यू को एक्सेस या बदलने से पहले कोड निष्पादित करने के लिए किया जा सकता है। गेट एक्सेसर में कोड तब निष्पादित होता है जब प्रॉपर्टी वैल्यू को पढ़ा जाता है। सेट एक्सेसर में कोड तब चलता है जब प्रॉपर्टी वैल्यू बदली जाती है। गेट एक्सेसर वाली कोई भी प्रॉपर्टी केवल पढ़ने के लिए मानी जाती है, सेट एक्सेसर वाली कोई भी प्रॉपर्टी केवल लिखने के लिए मानी जाती है, गेट और सेट एक्सेसर दोनों वाली कोई भी प्रॉपर्टी पढ़ने-लिखने के लिए मानी जाती है। एपेक्स प्रॉपर्टी का सिंटैक्स:
public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }
यहाँ, access_modifier संपत्ति का एक्सेस संशोधक है। return_type संपत्ति का dataType है। property_name संपत्ति का नाम है।
नीचे एक शीर्ष संपत्ति का उदाहरण दिया गया है जिसमें get और set दोनों एक्सेसर हैं।
public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }
यहां, संपत्ति का नाम नाम है, और यह सार्वजनिक संपत्ति है, और यह एक स्ट्रिंग डेटाटाइप लौटा रहा है।
गेट और सेट ब्लॉक में कुछ कोड होना अनिवार्य नहीं है। स्वचालित प्रॉपर्टी को परिभाषित करने के लिए इन ब्लॉक को खाली छोड़ा जा सकता है। उदाहरण के लिए:
public double MyReadWriteProp{ get; set; }
गेट और सेट एक्सेसर को उनके एक्सेस मॉडिफ़ायर के साथ भी परिभाषित किया जा सकता है। यदि किसी एक्सेसर को मॉडिफ़ायर के साथ परिभाषित किया जाता है, तो यह प्रॉपर्टी के लिए एक्सेस मॉडिफ़ायर को ओवरराइड कर देता है। उदाहरण के लिए:
public String name{private get; set;}// name is private for read and public to write.
शीर्ष वर्ग
शीर्ष वर्ग एक खाका या टेम्पलेट है जिससे ऑब्जेक्ट बनाए जाते हैं। ऑब्जेक्ट एक क्लास का उदाहरण है।
Salesforce में शीर्ष कक्षाएं बनाने के तीन तरीके हैं:
डेवलपर कंसोल
फोर्स.कॉम आईडीई
शीर्ष वर्ग विवरण पृष्ठ.
एपेक्स में, आप एक बाहरी वर्ग को परिभाषित कर सकते हैं जिसे शीर्ष-स्तरीय वर्ग भी कहा जाता है, और आप बाहरी वर्ग के भीतर भी कक्षाएं परिभाषित कर सकते हैं जिन्हें आंतरिक वर्ग कहा जाता है।
बाहरी वर्ग की घोषणा में ग्लोबल या पब्लिक जैसे एक्सेस संशोधक का उपयोग करना अनिवार्य है।
आंतरिक कक्षाओं की घोषणा में एक्सेस संशोधक का उपयोग करना आवश्यक नहीं है।
शीर्ष वर्ग को क्लास कीवर्ड के बाद वर्ग नाम का उपयोग करके परिभाषित किया जाता है।
एक्सटेंड्स कीवर्ड का उपयोग एपेक्स क्लास द्वारा मौजूदा क्लास का विस्तार करने के लिए किया जाता है, और इम्प्लीमेंट्स कीवर्ड का उपयोग एपेक्स क्लास द्वारा इंटरफेस को कार्यान्वित करने के लिए किया जाता है।
सेल्सफोर्स एपेक्स एकाधिक वंशानुक्रमों का समर्थन नहीं करता है, एक एपेक्स क्लास केवल एक मौजूदा एपेक्स क्लास का विस्तार कर सकता है, लेकिन एकाधिक इंटरफेस को कार्यान्वित कर सकता है।
शीर्ष वर्ग में उपयोगकर्ता-परिभाषित कन्स्ट्रक्टर हो सकता है, और यदि उपयोगकर्ता-परिभाषित कन्स्ट्रक्टर उपलब्ध नहीं है, तो डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाता है। कन्स्ट्रक्टर में कोड तब निष्पादित होता है जब क्लास का एक उदाहरण बनाया जाता है।
एपेक्स क्लास उदाहरण का वाक्यविन्यास:
public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }
नए कीवर्ड का उपयोग एपेक्स क्लास का उदाहरण बनाने के लिए किया जाता है। नीचे एपेक्स क्लास का उदाहरण बनाने के लिए सिंटैक्स दिया गया है।
myApexClass obj = new myApexClass();
एपेक्स ट्रिगर
एपेक्स ट्रिगर्स आपको डीएमएल ऑपरेशन निष्पादित करने से पहले और बाद में कस्टम एपेक्स निष्पादित करने में सक्षम बनाता है।
एपेक्स निम्नलिखित दो प्रकार के ट्रिगर्स का समर्थन करता है:
ट्रिगर्स से पहले: इन ट्रिगर्स का उपयोग डेटाबेस में रिकॉर्ड को सहेजने से पहले फ़ील्ड के मान को मान्य और अद्यतन करने के लिए किया जाता है।
ट्रिगर के बाद: इन ट्रिगर का उपयोग डेटाबेस में रिकॉर्ड कमिट किए जाने के बाद सिस्टम द्वारा सेट किए गए फ़ील्ड (रिकॉर्ड आईडी, LastModifiedDate फ़ील्ड) तक पहुँचने के लिए किया जाता है। इन फ़ील्ड मान का उपयोग अन्य रिकॉर्ड को संशोधित करने के लिए किया जा सकता है। ट्रिगर के बाद फायर होने वाले रिकॉर्ड केवल पढ़ने के लिए होते हैं।
बल्की ट्रिगर्स लिखना सबसे अच्छा अभ्यास है। एक बल्की ट्रिगर एक समय में एक रिकॉर्ड के साथ-साथ कई रिकॉर्ड को भी प्रोसेस कर सकता है।
शीर्ष ट्रिगर का वाक्यविन्यास:
trigger TriggerName on ObjectName (trigger_events) { //Code_block }
यहां, TriggerName ट्रिगर का नाम है, ObjectName उस ऑब्जेक्ट का नाम है जिस पर ट्रिगर लिखा जाना है, trigger_events घटनाओं की अल्पविराम से अलग की गई सूची है।
शीर्ष ट्रिगर्स द्वारा समर्थित घटनाएँ निम्नलिखित हैं: सम्मिलित करने से पहले, अद्यतन करने से पहले, हटाने से पहले, सम्मिलित करने के बाद, अद्यतन करने के बाद, हटाने के बाद, पुनः हटाने के बाद।
एपेक्स ट्रिगर में स्टैटिक कीवर्ड का इस्तेमाल नहीं किया जा सकता। इनर क्लास पर लागू सभी कीवर्ड एपेक्स ट्रिगर में इस्तेमाल किए जा सकते हैं।
प्रत्येक ट्रिगर द्वारा परिभाषित अंतर्निहित चर होते हैं जो रन-टाइम संदर्भ लौटाते हैं। ये चर सिस्टम में परिभाषित होते हैं। ट्रिगर क्लास। इन चरों को संदर्भ चर कहा जाता है। नीचे दिया गया स्क्रीनशॉट शीर्ष ट्रिगर द्वारा समर्थित संदर्भ चर दिखाता है।
शीर्ष ट्रिगर में संदर्भ चर पर विचार निम्नलिखित हैं:
- DML परिचालन में trigger.new और trigger.old का उपयोग न करें।
- Trigger.new को हटाया नहीं जा सकता.
- Trigger.new केवल पढ़ने के लिए है.
- Trigger.new का उपयोग केवल ट्रिगर से पहले समान ऑब्जेक्ट पर फ़ील्ड के मानों को बदलने के लिए किया जा सकता है।
नीचे दिए गए स्क्रीनशॉट में विभिन्न ट्रिगर घटनाओं में विशिष्ट कार्रवाइयों के बारे में विचार सूचीबद्ध हैं।
एपेक्स में बैच क्लास
सेल्सफोर्स में बैच क्लास का उपयोग बड़ी संख्या में रिकॉर्ड को प्रोसेस करने के लिए किया जाता है जो सामान्य रूप से प्रोसेस किए जाने पर एपेक्स गवर्नर सीमा से अधिक हो जाएंगे। बैच क्लास कोड को एसिंक्रोनस रूप से निष्पादित करता है।
बैच क्लास के लाभ निम्नलिखित हैं:
- बैच क्लास डेटा को खंडों में संसाधित करता है और यदि कोई खंड सफलतापूर्वक संसाधित होने में विफल रहता है, तो सफलतापूर्वक संसाधित सभी खंड वापस नहीं आते हैं।
- बैच क्लास में डेटा के प्रत्येक खंड को गवर्नर सीमाओं के एक नए सेट के साथ संसाधित किया जाता है जो यह सुनिश्चित करता है कि कोड गवर्नर निष्पादन सीमाओं के भीतर निष्पादित होता है।
- डेटाबेस। बैचेबल इंटरफ़ेस को बैच क्लास के रूप में उपयोग करने के लिए एक शीर्ष वर्ग द्वारा कार्यान्वित किया जाना चाहिए। यह तीन विधियाँ प्रदान करता है जिन्हें बैच क्लास द्वारा कार्यान्वित किया जाना चाहिए।
डेटाबेस द्वारा प्रदान की गई तीन विधियाँ निम्नलिखित हैं। बैचेबल इंटरफ़ेस:
1.प्रारंभ()
यह विधि इंटरफ़ेस विधि निष्पादित द्वारा संसाधित किए जाने वाले रिकॉर्ड या ऑब्जेक्ट का दायरा उत्पन्न करती है। बैच के निष्पादन के दौरान, इसे केवल एक बार कॉल किया जाता है। यह विधि या तो Database.QueryLocator ऑब्जेक्ट या Iterable लौटाती है। Database.QueryLocator ऑब्जेक्ट का उपयोग करके SQL क्वेरी द्वारा पुनर्प्राप्त किए गए रिकॉर्ड की संख्या 50 मिलियन रिकॉर्ड है, लेकिन एक iterable का उपयोग करके, SQL क्वेरी द्वारा पुनर्प्राप्त किए जा सकने वाले रिकॉर्ड की कुल संख्या केवल 50000 है। बैच क्लास के लिए जटिल दायरा उत्पन्न करने के लिए Iterable का उपयोग किया जाता है।
प्रारंभ विधि का सिंटैक्स:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2. निष्पादित करें()
इस विधि का उपयोग डेटा के प्रत्येक खंड के प्रसंस्करण के लिए किया जाता है। रिकॉर्ड के प्रत्येक खंड के लिए निष्पादन विधि को बुलाया जाता है। निष्पादन के लिए डिफ़ॉल्ट बैच आकार 200 रिकॉर्ड है। निष्पादन विधि दो तर्क लेती है:
Database.BatchableContext ऑब्जेक्ट का संदर्भ,
एसऑब्जेक्ट्स की सूची, जैसे कि सूची , या पैरामीटरयुक्त प्रकारों की सूची। निष्पादन विधि का सिंटैक्स:
global void execute(Database.BatchableContext BC, list<P>){}
3.खत्म()
बैच क्लास के निष्पादन के दौरान फ़िनिश विधि को एक बार कॉल किया जाता है। फ़िनिश विधि में पोस्ट-प्रोसेसिंग ऑपरेशन किए जा सकते हैं। उदाहरण के लिए: पुष्टिकरण ईमेल भेजना। जब सभी बैच प्रोसेस हो जाते हैं, तो इस विधि को कॉल किया जाता है। फ़िनिश विधि का सिंटैक्स:
global void finish(Database.BatchableContext BC){}
Database.BatchableContext ऑब्जेक्ट
Database.Batchable इंटरफ़ेस की प्रत्येक विधि में Database.BatchableContext ऑब्जेक्ट का संदर्भ होता है।
इस ऑब्जेक्ट का उपयोग बैच जॉब की प्रगति को ट्रैक करने के लिए किया जाता है।
BatchableContext द्वारा प्रदान की गई उदाहरण विधियाँ निम्नलिखित हैं:
- getChildJobId(): यह विधि वर्तमान में संसाधित बैच जॉब की आईडी लौटाती है।
- getJobId(): यह विधि बैच जॉब की आईडी लौटाती है।
बैच क्लास का सिंटैक्स नीचे दिया गया है:
global class MyBatchClass implements Database.Batchable<sObject> { global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) { // collect the batches of records or objects to be passed to execute } global void execute(Database.BatchableContextbc, List<P> records){ // process each batch of records } global void finish(Database.BatchableContextbc){ // execute any post-processing operations } }
डेटाबेस.executeBatch विधि
Database.executeBatch विधि का उपयोग बैच क्लास को निष्पादित करने के लिए किया जाता है।
यह विधि दो पैरामीटर लेती है: संसाधित किए जाने वाले बैच वर्ग का इंस्टेंस, बैच आकार निर्दिष्ट करने के लिए विकल्प पैरामीटर, यदि निर्दिष्ट नहीं है तो यह 200 का डिफ़ॉल्ट आकार लेती है।
Database.executeBatch का सिंटैक्स:
Database.executeBatch(myBatchObject,scope)
MyBatchClass नाम का बैच क्लास निष्पादित किया जा रहा है:
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
डेटाबेस.स्टेटफुल
बैच क्लास डिफ़ॉल्ट रूप से स्टेटलेस होती है। जब भी एक्जीक्यूट मेथड को कॉल किया जाता है, तो ऑब्जेक्ट की एक नई कॉपी प्राप्त होती है, क्लास के सभी वेरिएबल्स को इनिशियलाइज़ किया जाता है।
डेटाबेस.स्टेटफुल को बैच क्लास को स्टेटफुल बनाने के लिए कार्यान्वित किया जाता है।
यदि आपके बैच वर्ग ने कार्यान्वित किया डाटाबेस स्टेटफुल इंटरफ़ेस में सभी इंस्टेंस वेरिएबल अपने मान बनाए रखते हैं, लेकिन स्टैटिक वेरिएबल लेनदेन के बीच रीसेट हो जाते हैं।
सारांश
- एपेक्स एक दृढ़तापूर्वक टाइप किया गया, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा जो force.com प्लेटफॉर्म पर संकलित और चलाया जाता है
- एपेक्स प्रोग्रामिंग भाषा एक केस-इनसेंसिटिव भाषा है
- एपेक्स में क्रियाओं के प्रवाह के दो प्रकार हैं 1) डेवलपर क्रिया 2) अंतिम उपयोगकर्ता क्रिया
- एपेक्स आपको ऐसी वेब सेवाएं बनाने में मदद करता है जो सेल्सफोर्स को अन्य अनुप्रयोगों के साथ एकीकृत करती हैं।
- एपेक्स द्वारा समर्थित डेटाटाइप हैं: 1).प्रिमिटिव 2) कलेक्शन 3) एसऑब्जेक्ट, एनम्स, 4) क्लासेस, 5) ऑब्जेक्ट्स और इंटरफेस
- सार्वजनिक, निजी, संरक्षित और वैश्विक एपेक्स द्वारा निर्दिष्ट समर्थन हैं
- एपेक्स में उपयोग किए जाने वाले कीवर्ड हैं: 1) शेयरिंग के साथ, 2) शेयरिंग के बिना, 3) स्टेटिक, 4) फाइनल 5) रिटर्न, 6) शून्य, 7) वर्चुअल, 8) एब्सट्रैक्ट
- स्ट्रिंग वर्णों का एक समूह है जिसकी कोई वर्ण सीमा नहीं होती
- एपेक्स गवर्नर सीमाएं एपेक्स रनटाइम इंजन द्वारा लागू की गई सीमाएं हैं, ताकि यह सुनिश्चित किया जा सके कि कोई भी रनवे एपेक्स कोड और प्रक्रियाएं
- गेट्टर और सेटर का उपयोग संपत्ति मान तक पहुंचने या बदलने से पहले कोड निष्पादित करने के लिए किया जा सकता है
- Salesforce में एपेक्स क्लासेस बनाने के तीन तरीके हैं: 1)डेवलपर कंसोल 2)Force.com IDE और, 3) एपेक्स क्लास विवरण पृष्ठ।
- एपेक्स ट्रिगर्स आपको डीएमएल ऑपरेशन निष्पादित करने से पहले और बाद में कस्टम एपेक्स निष्पादित करने में सक्षम बनाता है।
- सेल्सफोर्स में बैच क्लास का उपयोग बड़ी संख्या में रिकॉर्ड को संसाधित करने के लिए किया जाता है, जो सामान्य रूप से संसाधित होने पर एपेक्स गवर्नर सीमा से अधिक हो जाएंगे।