 Hello. Hi, everyone. I'm Sanjay Gupta. I welcome you on Sanjay Gupta Tech School. This is day 49 of Salesforce Learning Bootcamp. And in this session, I'm going to cover three topics. First is wrapper class. Second one is APIC security. And then I will discuss about APIC's best practices, right? So this is the second last session of APICs and trigger and tomorrow I will be having one more session than this topic will be completed. So let's wait for a couple of more minutes so that everybody who like watch the sessions live, they can join. And then I will be starting the session. So hi Praveen, hi Revati, hi Srinivas Acharya. Welcome. So okay, so numbers are increasing slowly. So this is just the beginning. So just wait for a couple of more minutes so that more folks can join. And if you have joined this session for the first time, so you can go through this slide so that you know about the instructor about me. And I hope everybody is focusing on these on this learning best practices. So this is very much important. And if you want to learn all the topics properly, so you just need to practice things regularly. So I can see more folks in the chat. So Arjun is there. Hello Arjun, Ankit, Nikhil, Nusrat, hi everyone. Shubham, hello, good evening. So lots of people are joining and I just see some posts in the YouTube comment section. So lots of people are watching the recordings as well for practice for learning if they miss the live session. So they're watching the recording. So that is good. So I'm just assuming like you are following all the best practices and be consistent because consistency is the key and do regular practice if you want to become expert. And like today, it will be an interactive session. So from the beginning, if you have any doubt, you can ask questions. So maybe today's session will be less small because we have very few topics remaining and tomorrow everything will be completed. And then from next week, we'll be discussing about the apex test class, right? So now topics will be completed within a week. So this week, like tomorrow, I will be completing the apex and trigger part. And next week, we'll be having test class sessions. So this is very easy. And then after that, we'll be having a synchronous apex, right? And we visual force and integration you requested. So I just added those as well. Okay, so this is the next six weeks timeline. And after that, we will be having like prerequisite HTML, CSS, JavaScript, then few sessions on aura and lots of sessions on LWC, right? So after all these six weeks, you will be having lightning aura and lightning web component phase of this boot camp. So actually, this boot camp is running in three parts. First part was admin. Second part is this apex trigger test class, async apex VF integration. And next part will be lightning aura and LWC. Okay, so now I'm moving forward with the slide. So if you have not followed Sanjay Gupta Tech School on these social media platforms or do so so that you can follow everything and you don't miss the important notifications. And as per your request, like last yesterday, I shared a few PDFs related to development related interview question and answers. So if you have if you have not received, so I just shared them in telegram group and on LinkedIn, right? So just just have those with you so that if you have any interview scheduled, so you can just prepare yourself. Okay, and share this channel link with everybody, whoever wants to learn Salesforce. And someone is asking about cybersecurity bootcamp links. So actually that is there in the Salesforce session tracker. So if you go to Salesforce session tracker, so here now you will find two tabs, one for admin and development and one for the cybersecurity. So here is the sheet. So we are working on it. And this will be utilized for cybersecurity. And lots of people are asking, is it related to Salesforce? So I would say yes. In Salesforce, we have cybersecurity career. So it is totally related to Salesforce. And other than Salesforce and other ecosystems, also, you can get a job as a cybersecurity expert, right? So moving forward, so let's discuss about the first topic. And it is wrapper class. So today's topics are very easy to understand. And more theoretical explanation will be there. So for wrapper class, I just have an example that I will be discussing. So first we need to understand the requirement of wrapper class, like why wrapper class is there and how it is fruitful. So basically, a wrapper class is an object created in Apex. The data lives only in the code during transaction and does not consume database stories. So when I say it is an object, so it doesn't mean like actual object in your org will be created. So that object will be created in the Apex only for that particular transaction. And you can also say like it is a data structure on an abstract data type. So generally what happens if you want to contain different objects or collections or off objects as its member. So basically, you can create a wrapper. So sometimes what happens if you are implementing a class and through class, if you want to return two or three different type of values. So through a class, like if you implement a method, so method can return only one type of value. But if you want to return many type of values, so what you can do, you can wrap them in a wrapper class. So a wrapper class member can be primitive collection or S object. So I will show you an example so that you can visualize how we can create a wrapper class and how we can use that wrapper class so that different type of values we can club together and that we can return easily. So if I go forward, so these are some benefits. It helps to combine different types of data together and the wrapper class can be used in LWC or an visual force, right? So now jumping on to the developer console. So here I have one example for you that we can understand. So in this example, you will see class name is account wrapper demo. And here we have a method. So method is this, which is highlighted here. And after that, you will see a wrapper class. So this is basically your wrapper class. Okay, so inside a class inside account wrapper demo, we have a method. And after that we are creating one class. So this is basically class inside class. And this will be known as wrapper class. Now in this wrapper class, what I did, I have created two variables. One is ACC record and one is contact list. And both are having different type. This account record is basically of type account and contact list is of type list of contact, right? So what you can see here are two different variables of two different data types are available. And this is basically a constructor. So through constructor, this value will be initialized. And we already discussed about this. So this is basically referencing these two variables which are declared here. And in the constructor first line, we are also using the same name, right? So they are written here without this keyword. Okay, so whatever value we will be passing into these constructor, those will be assigned into these variables which we have declared above. Right now here, what is happening? We are just creating list of this wrapper. We are creating list of this account wrapper. And we are fetching account along with context. Now I'm iterating on account here. And that account record, we are setting into this new account wrapper. So this way new instance will be created. And its constructor will be called and constructor will be receiving this account record as a first parameter. And that accounts, all the contacts will be received as a second parameter that will go to this contact list. Okay, and that newly created instance will be added into this list. So this way, we are just creating instance of the wrapper class. And that we are adding into this wrapper list. Okay, so if you want to create a collection of different different types of variables, so you can just create a wrapper class like this, you can create a constructor and you can initialize the values. And then that wrapper class you can use above in any method for the processing. Right, now if you want to execute it for testing purpose, so this way you can implement the code. So right now what I did here, I just created a list of this wrapper type. So you can use account wrapper demo. This is the name of class. And this is the wrapper that we created. So we are going to create list of this wrapper type named as account list. And we are calling that method. So that method is basically returning the wrapper list, which we are creating here. Okay, so it will be stored into acess list. So here I am just using system dot debug, so it will be rendered. And if we iterate on this, so here you can see again, I'm using that wrapper that wrapper is part of this account wrapper demo class. So that's why we are using it like this. And ACC will be having a count record, first value, and a contact list as second value so that we can fetch. Right, so this way, like the idea is if you want to create collection of different type of variables, so for that purpose, you can create a wrapper class. Okay. Yes, Jenna, it is also known as inner class, because it is created inside another class. And here we are using with sharing that I will be explaining after this topic, which is related to APIC security. And this statement you can ignore because whenever you call your APICs class through lightning or a component or lightning web component, then generally we use this annotation at the rate or I enabled, right? So you can just ignore it. Whenever we will be using our apex class with aura and LWC, then you will see these statements. Okay, so now let me take questions. So Manjunath is asking, can we we can use switch on trigger with events instead of trigger contact context variables? So through events, we cannot switch on or switch off triggers that we can do three through context variable only. Otherwise, we have custom metadata type that we can use, right? And movement is asking about real time projects. So I have already explained a project and admin. So the same project I will be picking for development stuff. Thank you, Nusrat. Thank you, Shubham. I appreciate like my effort are going in the right direction, whatever I'm explaining is being asked in the interviews as well. Okay, Shubham. So like these two topics, we'll be covering in the next two weeks. So I think then you will be able to understand them. Okay, Manjunath, share this thing trigger dot operation type. So this is something different. I never used it. So just explore this. And this is not an event. Events are total seven. Right. So it might be some method or something like that. So I just need to explore it. I don't know much about this. Yes, Jana, we can create the wrapper class just below the curly basis of the main class. But generally, we create wrapper at the end, because in the beginning, we just want all the method. And at the end, you can create the wrapper class. So this is just as per the best practice. Because the wrapper will be used in above methods. So we don't write wrapper above, it will create confusion. So in the beginning, you will have all the methods and then you can write the wrapper class. Right. So we have few more questions. So, okay, Shrivali is asking what different type of data it's using. So if we talk about that type of data, so you can just go through the last line. In wrapper, we can have primitive, we can have collections like list set or map, and we can have s objects. So these types you can use in the wrapper. And if you want to see the example, so here it is. So here we are having these two variables. First one is of type s object account. And second is of type s object collection. Right. So this way this wrapper class is created and above it is used here. So in line number four, we are using wrapper class. And here also we are using this wrapper. Okay. So this was about wrapper class. Now I'm just moving to the next point. So next is APIC security and sharing. So let's understand it. It is very easy. So here you saw in this example, I'm using public with sharing. So it is basically related to this sharing. So if you remember in sharing and security, we have two things. One is record level security. And one is other one is object and field level security. So if you want to enforce record level security, like if you have created any sharing rule, and if you want to enforce that, so for that we use with sharing. So basically the with sharing keyword lets you specify that the sharing rule for the current user current user means the logged in user are considered for the class. You have to explicitly set this keyword as APICS code runs in system context. So if you don't write this, if you don't write this, so it means your APICS code is running in the system context. If you don't write anything, it means the logged in user will be able to access all the things. But if you want to apply, like if you want to enforce sharing, record sharing, so you can just write with sharing. So if you write with sharing, it means the records which are accessible by the logged in user, only those records will be available to the to that user. Right? So this is very much important. So you need to remember by default, it is system context. If you want to change, then you can apply with sharing. Then next is without sharing. So if you want to specify, so this is another keyword that you can use. And if you use it, it means like your sharing rules or security won't be enforced. And third one is inherited sharing. So it is different one. So just understand it carefully. So APICS without a sharing declaration is insecure by default, right? Because it will be having the system context. So an APICS class with inherited sharing runs as with sharing when used as so in any APICS class, if you write inherited sharing, so it means with sharing automatically, if your APICS class is used as an auto component controller, visual force controller, or if you're using it in APICS rest service, or any other entry point to an APICS transaction, right? So with another feature, if you're using APICS as a support, so in that case that inherited sharing runs as with sharing, right? So the this is very good interview question like what types we can specify with the first line of the APICS class. So you need to specify with sharing, you need to specify without sharing, and you need to specify inherited sharing. So further, there is a distinct difference between an APICS class that is marked with inherited sharing and one with an omitted sharing declaration. So omitted sharing declaration means no sharing declaration is available, right? As we did earlier, like we didn't provide any sharing declaration. So if the class is used as the entry point to an APICS transaction, an omitted sharing declaration runs as without sharing. However, inherited sharing runs as with sharing. A class declared as inherited sharing runs as without sharing only when explicitly called from an already established without sharing context, right? So if you have created a class, which is declared as inherited sharing, and that class method you are calling into another class, where you have specified without sharing in that context, your inherited sharing will be working as without sharing, right? So in that way, like you will be able to use inherited sharing with one and without sharing with other. So you might be thinking in what scenario we will be using without sharing. So in this last point scenario, like if you have two classes, so by default, inherited sharing will be means with sharing. But if you call that method into a class where you are using without sharing, so it will be shared as without sharing, right? So these points you need to remember as part of interview. Now this is also important to remember. So sharing setting of the class where the method is defined is applied, not of the class where the method is called. This means that if a method is defined in a class declared with sharing is called by a class declared with without sharing, the method executes with sharing rules and forced, right? So it is important where the method is defined, not the where method is called. So if your method is defined in a class where with sharing is available. So if you call that method into another class where without sharing is available. So even then there your method will be working as with sharing, right? So this you need to remember. And this is very good interview question like what keyword you will be using and what will happen when you use that particular keyword, right? So one more thing that you need to remember. So when we enforce the sharing things. So if you are logged in as a user, so two things will be impacted. One is SOQL or SOSL and another one is DML. So when you use with sharing, so it may happen like you are querying data and you are retrieving less data if you compare it with system context. Because in system context, sharing won't be applied. You will be able to access all the records. But if you write with sharing, so in that case, sharing like all the sharing settings will be enforced and whatever records you have access to, only those records will be fetched. And then we have DML. So an operation may fail because the current user doesn't have the correct permission. So if you if you don't have proper permission, so your DML maybe may fail. So this you need to remember, right? So till now, whatever we discussed, it was about record sharing. So if you talk about with sharing, without sharing and inherited sharing, so that is basically specific to record level security, right? Now if we talk about object and field permission, if you want to enforce that security, so that you can do while applying SOQL. So if you apply SOQL like this, select ID name from account with security enforced, right? So basis on the logged in user permission data will be fetched, right? So if you have access to account, then only you will be able to fetch the data. If you have access to ID and name field, then only you will be able to fetch that record. Right? So this way, you just need to remember everything as per interview preference. Okay. So before moving to Apex and trigger best practices, let me just see the questions, whatever you have asked. So there are a few questions. So what is platform event? So maybe I will be explaining that tomorrow. And Shubham is asking what is heap size? So heap is a runtime memory. So whenever you apply any SOQL, or you just create a data at runtime, so that data is basically stored in a heap, right? And like limit heap limit, you can just see in the log. So if you if you go to the log, so there you will be able to see that. So let me open the logs. And if I scroll to the bottom, so here you will see. So maximum heap size is this, right? So here you can see all the limitations. Okay, Jana is asking, what does it mean get set? So these are basically representing getter and setter. So here in this wrapper. So whenever you create these variables, you need to apply get set get set means these variables can get the data and like they can set the data. So getter setter means they can store some value and they can throw that value to other methods as well. So it is it is as part of syntax. So you just need to write it like this only. Okay, so I already showed this code, so you can just see it. So this is the wrapper class. And if I go above, so here you can see the method. Okay, so can wrapper class take the permission of parent class? Yes. So it is totally dependent on the parent class. How many wrapper classes in main wrapper class? So I think you can create any number, but we don't create much. We generally create couple or one wrapper class as per the requirement. So what is system context? System context means, you can say as admin. Yeah, so it is it is more of same. But I just explained one point where like if you use inherited sharing, so if your class is having inherited sharing, and that class method you are calling in the without sharing, so it works as without sharing. That doesn't happen with sharing. This is the major difference. And generally we prefer with sharing if you want to enforce security. And if you don't want to enforce, we can go with without sharing as well. But there is third one you should know about inherited sharing as well. So this batch batchable epics and capable epics, we will be discussing in asynchronous epics. So that will be next to next week. So last week of this month, we'll be having these topics. So when a like with sharing doesn't go with the field level security, if you are asking this question, so you can just take this in consideration with security enforced. And I think if you don't have permission, so it will throw an arrow. So this you can try once. You can just log in with the user. We already created two users in our org. So you can just assign one profile to that your second user, which is non admin, and just try it out. So very good event. As I already explained the wrapper class, let me just go through again. So wrapper class is very simple here. Like if you want to create collection of different type of value, so you can just declare them and through constructor, you can initialize them. So this is part of syntax. And whenever wherever you want to use it. So what you need to do, you just need to create it. You need to create instance. So here we are creating list of that wrapper class. And here I'm creating an instance and I'm adding that into that list. So this way you can use it. Okay, so I hope it is clear now. So moving forward next, we need to discuss apex and trigger best practices. And these are very much important to understand. Okay, so total 15 best practices I have noted down. So I will be explaining them one by one. And if you have any doubt in any of the best practice, so just note it down or you can just throw it in the chat so that I can discuss it again. So first best practice is you need to use proper naming convention. So proper naming convention means if you see here, name of the class. So in name of the class, you can just notice here, we have three words account, then we have wrapper and we have demo. So this like you can see each words first letter is capital. Right. If we talk about the method, so in method, first word is totally small. And then second word on words first letter of each word is capital. Right. So these are basically camel case notation that you need to apply by implementing your apex class or apex method. Right. And if you're creating variable, so variable and method both apply same naming convention. So variable also like first word is small and second word on word first letter of each word is capital. So this way you can just apply the naming convention. Okay, and use meaningful names so that if you are working as a developer and you leave the company and any other developer on your place working, so they just understand the working of the method through the naming convention. Right. Whenever you are using list, so add list because if you see all the example where I implemented anything, so I just use like opportunity list. Right. Here also OPP list and wherever I'm using map, so I'm just appending map. So this way, what type of process you are implementing. So you just need to append. So if you are creating set, so you can just add set. So here we are using ACC ID. So what you can do you can write ACC ID set. This way you can just use the naming convention. Right. So this was the first best practice that you need to remember. Don't use any name XYZ ABC to define variable or method. So that is not part of best practice. Then we have bulkify your code. So always remember whenever you are writing apex code or trigger. So always remember in real time your code will be working on more than one records. So you need to bulkify your code. So here you can see in each handler, we are iterating, we are iterating a process. No matter whether you are testing it for one record or many, we are iterating on bulk off records. Right. So if you go to this trigger, so in trigger also this trigger dot new old old old map, like these are list and map, which will be having lots of data. Right. So always remember like your code will be bulkified and like you need to implement it in keeping you need to implement keeping in mind like this code will be working on the more than one records. Right. Next is we need to avoid ASOQL and DML inside loop. So we have a term called as governor limit. So there are two governor limits for ASOQL it is 100 for DML it is 150. So in a single transaction, I repeat in a single transaction, if you have more than 100 ASOQLs, then your code will break or in a single transaction, if you have more than 150 DML, then also your code will break. Right. So in a single transaction, not in a project, in a single transaction, let's say you're creating any record and on that record creation process, if you have more than 100 ASOQL, your code will break. So why you should avoid ASOQL and DML inside loop because loop is a iterative process and it can work more than 100 or 150 times. So if you write your ASOQL and DML inside the loop, so it may break. Right. So this unit to remember the next is we need to avoid hard code IDs. So never hard code IDs because in Salesforce, whenever you will be working on a project, so there will be lots of environments like right now we are using developer edition, but in real time, we'll be having copies of that org. Right. So what do you need to do? You need to deploy code from one org to another. So in one org, there may be different IDs available for particular record and in another org, there may be different IDs. So never hard code IDs. No matter you are using Flow or Apex or Trigger, you need to remember you never use hard code IDs. Right. Better to query. Right. So we saw one example where we need to use record type ID or maybe profile ID. Right. So what we did, we queried that we didn't use that ID directly. Right. So if you if you need any ID, so you just need to query the record and then only you will be able to use it. So this is part of best practice and you need to apply this. If you don't apply and you write hard coded IDs, so whenever you deploy your code from one environment to another, your code will break. Right. Next we have use one trigger per subject. So I already explained you like implement a trigger in such a way so that it will be managed. So here you can see in this trigger, we have called all the methods. No business logic is available in the trigger. So this is a manageable trigger and it is suggested always have one trigger on one S object so that you can manage and the sequence which you define here for method calling, it will be intact. So you can change it anytime. And if you have two triggers on one object, then an order won't be guaranteed. Okay, so try to implement one trigger per S object. Next best practices are so basically these best practices are mixed for apex and trigger. Right. So next is use inline SOQL for loop. So inline SOQL for loop means in the for loop in the first line you will be using SOQL like this. Okay, so this is basically inline SOQL where in the first line of for loop we are using this SOQL. Now, basically the benefit of using this SOQL here, it basically saves your heap. So if we write it above, if we write it above and store it into a list, so what will happen? All the data will be queried and that will be stored in the list. But now here what is happening? It basically works in chunks of 200 records. So first 200 records will be queried and that will be processed. Then next set of 200 records will be queried and that will be processed. Right. So this way less heap will be occupied. So this is suggestive. But if you use that process like above this loop, if you write SOQL, so that is also good. But best practice says whenever you need to write any SOQL, so you can write it in the first line of the loop so that you can just save heap memory. Then next is modularize your code. So modularize means whenever you are implementing any trigger handler, so there will be separate methods like for this prevent deletion, we have separate method for update account, we have separate methods. So this way, whenever you are implementing your trigger handler, so you need to implement it in modular form. Don't write all the logic in a single method. So break your logic into different methods. And whatever method you need, you can call them in the trigger at appropriate position. Okay, so don't write large methods, break them into pieces that is basically known as modularized approach. Right. Next is querying large data set. So you need to apply where clause never write SOQL without where clause. If you miss where clause, it means all the data which is available under that particular object that will be queried, and it will be a huge problem for you. Right. So always apply where clause like minimize the data that you are querying. Then avoid business logic and trigger use trigger handler class instead that we are already using from the day one. So I tried to show you all the trigger scenarios with this approach only. So we used to call the method in the trigger only and the business logic was available in the trigger handler class. Right. So business logic means this code, the method, whatever is containing it is called, it is called a business logic. And if you go to the trigger, so in trigger, we don't have any logic. Here we have just one liner. And these one liners are calling the methods directly. Right. So implement trigger and trigger handler separately in trigger, you can call the methods and trigger handler, you can define those methods having separate business logics. Then we have context, specific handler methods. Right. So it says like define specific method, don't mix two methods having two separate context. Right. So whatever business logic you have as per that business logic, you need to define that handler separately. So these are five more best practices that you need to remember. And this is a very good interview question. So generally in interview interviewer can ask you like tell me apex and trigger best practices what you need to remember while implementing apex and trigger. So these points, these total 15 points you need to remember. So we already discussed 10 points. Now next five points are also available here. So first says test multiple scenarios. So you need to check your record through different ways. So while implementing trigger, I already told you like test it through one record, test it through bulk records creation. Right. You can create bulk record through code and you can create one record through UI. So you need to test it from positive and negative scenarios as well. Like sometime you can fill the data in the field, sometime you can blank it out. So positive negative all the all the cases you need to test. And next week we'll be understanding how we can test our code through code. So we will be understanding apex test classes. So there also we will be writing test methods. So this is part of best practice whenever you implement any apex class. So you just need to test it manually. And if you know how to write apex test class, so you need to write that as well. Because generally in projects what we do, we work in the sandbox environment, which is copy of production environment. So in sandbox, if you implement any apex class, and you want to push that apex class to your production environment. So without test class, you won't be able to push your code into production. So if you implement any apex class, so you need to write its test class as well. Right. Next we have avoid nested loops use map instead. So if you have nested loop situation, so you can just avoid that nested loop, and you can implement the map. So in one scenario, I think I already demoed you how you can remove nested loop with help of map. If you have not gone through that video, so you can just go back. And I think last week I explained that. Then use database class methods while performing DML operation. So I hope you remember in DML statement, like if any record is failing, so all the list will fail. But if you use database class methods, so you can pass a parameter known as false. And if few records are failing, so only those records will fail. Other successful records will be committed to the database. So you can prefer database class methods over a DML statements. And if you are using DML statement, then you need to write exception handling, because if DML statements are failing, so through exception handling, like through try and catch, you can handle those situations. So what will happen? Only that piece of code will be breaking other functionality will be working fine. If you don't write exception handling code, and your DML statement is failing, so whole process will fail. And apply proper security and sharing an apex code wherever it is required. So these are total 15 best practices that I figured out related to apex and trigger that you need to remember as part of interview. Right. So this is all I prepared for today's session. I know today's session is very short because we have very few topics remaining. So few topics I will be covering tomorrow. And if you have any doubt, you can ask if you don't, you can just leave and join tomorrow's session. And day after tomorrow, we'll be having cybersecurity bootcamp session that also you can join. So everything is listed in the session tracker. Right. So like tomorrow, I will be covering all these remaining topics and don't miss this cybersecurity bootcamp launch because whatever doubts you will be having, no matter you attend all the bootcamp, still this first session will be important to understand. And if you don't go in the cybersecurity part, then also this bootcamp is important because we are related to tech, IT field, IT industry. So we need to know what cybersecurity is, what are the different tools technologies available. So you should be aware of that. Right. So that anytime if you see any like fraud is happening with you through digitally, so you can just stop that. Right. So it is totally free at different time. So if you don't have time to watch it live, you can go through the recordings as well. Right. And if you want to see the list of content, so it is available here in this tab. So here all the topics are listed, we are redefining it. Right. So this is tentative. We'll be updating it time to time. So we'll be starting from the beginning so that the beginner can understand what cybersecurity is. So here you can see all the network related concepts will be explained like request, header response, then installation configuration. So step by step, Sumit will be covering all the topics for you and he is having 10 plus years of experience. So I think it will be good for you. And here is the link which is available. So you can just RSVP this link so that you receive a notification. And it is like 21 days bootcamp planned as of now as per your feedback and responses, we will be like adding more sessions into it. So this is phase one and soon we'll be having phase two. So let's see how it goes. So coming here so Anuradha is asking single transaction means so another single transaction means suppose you are creating a record. So if you are creating a record so in that record creation process, your flows, your approval process, your trigger may be working. So once your record is created, that whole process will be known as single transaction. Right? Next is in apex class, we have option security where we provide access based on profile, how which sharing is different than security in apex. So Sachin basically the security means on on profile profile is different thing profile controls like your object and field level security and this with sharing without sharing is controlled is controlling your record level security. Right? So like if you already implemented sharing and security through profiles and sharing rule and you implemented a class where you have not mentioned anything with sharing without sharing. So irrespective to your sharing and security that logged in user will be able to access the records. Right? So that's why if you want to restrict you can apply with sharing and for field and object you can apply with security enforced in SOQL. Yeah, Jana it is fixed like 200 records batch will be processed. So please explain one more time best practice 10 point. Okay, number 10. So I'm going back number 10 is context specific handler method. So it means like whenever you are implementing any method, so it should be specific to one problem. You don't need to mix two problems together. Right? If they have common like I just merge before insert and after sorry before insert and before update, they were having exact same business logic then I just combined them. Otherwise you need to implement methods separately. So best practices means like the way you need to implement the code and order of execution means how different different features will be running in the background that is different. Right? Both are totally different. So order of execution means how different features work which are available in Salesforce and which order they will be executing and best practices means like you just need to implement code in efficient way. Yes, first, like few best practices are related to test class, but for test class will be having separate best practices. Tomorrow's second or tomorrow session time is same. From next week timing will be different. It will be one hour prior to like this week. And throughout the boot camp we were having session at 830 PM IST from next week onwards it will be 730 PM IST Salesforce and 9 PM IST will be your security one. So Ashok nested loop means if you use a loop inside another loop. So that is basically nested loop. So this with security and force I already explained like it will be respecting all your object and field level security. This strip strip plan line accessible. This I just need to check because I rarely used it. So I will check and get back to you. Yes, I'm here. Sumit will be showing his face life. Actually, if you see his LinkedIn profile, so there he used that profile picture because he belongs to cybersecurity. So it is kind of related to that. So that's why his actual phase is not visible in the picture. But surely while we'll be having live session, so we will be together, you can just see him. Yes, our trigger will be executed in system context. And then if you call any Apex class that decides what sharing you are using. Yes, if you write try and catch with every DML so it is better because you never know in which DML you will get an error. Right? So if you're working on a real time project, so in every DML statement, you need to write try and catch. So Jana basically wrapper classes we use when we implement visual force page or LWC or aura. So maybe there we can have proper example. So this wrapper class we will be calling in aura or LWC component, then you will better understand the use of wrapper class. So single transaction means creation of record through different processes like trigger, float, etc. In this single record or multiple records are created. Yeah. So in in simple words, if you are creating a record and in that record creation, different processes will be involved. It can be trigger, it can be flow, it can be validation rule workflows, etc, etc. So once all those steps will be completed, so that is basically known as a single transaction. And if you are creating multiple records, then also all these features will be executed in the background. So that will also part of one transaction. So record creation, updation, deletion, undeletion, these creates a transaction. Yeah, so Ashok, it will process 200 records in one batch. If we have more than 200 records, so it will be processed with different, different batches. Okay, so I hope I answered all all your questions. There is one more question, can we call a pick through flows using invocable method, we'll be covering this. Yeah, so I think there is one video that you can watch for this, Arjuna. If you go to study Salesforce, so here I think in a pick scenarios, you can find these examples. So you can go through and whatever doubts you will be having. So maybe you can ask in the telegram group, or separately as well. So I won't be covering these because if I cover everything, so it will be very long bootcamp. So I'm just focusing all the concepts tomorrow, which are remaining. These you can go through yourself and try to understand. If you have any issue, you can ask separately. Okay, thank you. Yes, Jenna, for DML statement for sure, you need to apply exception handling. Other than that, if you see in your code, there is any runtime error can come. So you can apply try catch there as well. So it depends whether in your code, you will be seeing any issue or not. Right, so it depends on that. If you have more question, you can ask. Otherwise, I can just end the session because I just completed everything. And tomorrow, a picks and trigger will be completed. And next week, we'll be starting test classes. So if you have any more question, you can ask and please share your feedback or reviews. If you have any suggestions, and this will go with cybersecurity as well. If you have any suggestions, so you can share. If you don't have any questions, so I take your leave. And tomorrow, same time, we'll be having the session. Thank you so much for joining today's session. Have a good evening, good day. Thank you so much. Bye, everyone.