 Okay, going live. Hello everyone, I am Sanjay Gupta. I welcome you on Sanjay Gupta Tech School. So today, as you can see, we are having the 11 for Salesforce Omni Studio Bootcamp. And I have Abhishek with me. So Abhishek will be delivering last session for IP. So all the components are already covered. Three components are remaining. So he will be demoing them one by one so that you can understand. And then in real-time scenarios, whenever in the projects you will be facing requirement of those components. So with the help of these demonstrations, you will be able to implement. Okay, so let's start with the session. So first I want to request Abhishek. So if he can introduce himself because I know in every session there are new folks coming in. So Abhishek, please introduce yourself. Yeah, so hi everyone, myself Abhishek. And I am working as a Salesforce and Velocity Developer in the Salesforce community. And I have overall of five plus years of experience and I'm a really double star ranger and I have done some certifications on Salesforce, like Omni Studio Developers, Epic Specialist, PD-1 Service Cloud and Administrator. And I have done several projects around Velocity slash Omni Studio. Specifically, if I say I have worked upon health insurance industry, I have worked upon telecommunication and industry CPQ. So that's all. Great, so this is something great Abhishek. And it is like absolutely wonderful if people are learning from the person who is already certified and worked on lots of projects. So I know like people are, as I can see one comment, like people are eagerly waiting for the session. So I'm sure like they are learning a lot from these sessions. So all kudos to you Abhishek. Yeah, thanks Anjay. Okay, so moving on to the next slide. So if you want to become part of the community where lots of freshers and experienced professionals are connected, so you can scan this QR code. It is a telegram group which you can join. And if you want to receive all the session binders timely or other bootcamp related information, so you can follow Sanjay Gupta Tech School on YouTube, LinkedIn, Instagram and Telegram. So all the social media handles are available. So Abhishek, can you jump on to the next slide? Yeah, so these are the names available for particular social handle. And if you want to find all the session links together, so that session tracker is available in the description. And please share a review or feedback about the bootcamp, right? So with this note, like I want to hand over to Abhishek so that he can start with the session. Yeah, so thanks, thank you Sanjay. And so till in previous session, if I talk about integration procedure, we have covered almost all the components or elements that integration procedure provides. There are still here and there a few elements that we will be going through in today's session which includes delete action, which chatter action and the remote action. So basically these three components can be also configured into an integration procedure. So we will be seeing what are the usage of it and we will be doing some practical implementation events. So let's jump on to the Oomni Studio org. So I have already opened an IP on which we were working on in the previous session. So in today's session, first of all, we're gonna see the delete action, right? So as the name suggests, delete action is used for deleting some records from your Salesforce database, right? So how we can configure it and how we can delete all these things, that's we're gonna cover in this element. So as soon as I drag and drop the delete action into my structure panel, I can see first of all delete action name, then there is a section where we can add as object to delete, right? So as soon as I click on this button, right? I will be having all the objects available into my org, okay? So first I have to select what object I want to delete. So let's say I want to delete some account records, okay? And there is one more thing called as all or none, which is nothing if we compare it with the Apex DML operations, this is like database.delete, where we pass through or false as a parameter, right? If let's say while deleting some record, I face some issue, right? Then you want to delete all or none that also we can define from here over here. And in the second parameter, what we can pass is we have to pass the weather, either we can pass the hard coded record ID or if we are having some data or extract action in our integration procedure, right? So we will be fetching some sort of IDs from it. So from this data rector, we are fetching the account records IDs, right? So if I go here and let's say, I'm fetching Jenny point test, oh, okay. There is no account with this one. Let me go to account records and yeah, I will fetch this test lookup, okay? I'll go here, put this in execute. So as I can see, I have three accounts, right? With the name of test lookup. And now if I go back to IP and I change the parameter which I'm passing from over here to the data rector, right? So this data rector will give me three records, right? So first of all, so what I'll do is first of all, we'll just execute this data rector, data rector extract action. I click execute and in the response, as we can see, we have three accounts under the account node, right? So what we're gonna do is we'll copy this one. I'll again go to delete action. And now I will say account colon ID. So basically in this node, we just need to pass the ID of the records only. That's it. We don't need to have any other fields other than ID, right? And now if I, so basically in IP, we have to add this also. This account records path before the account colon ID, right? So Abhishek, just to clarify. So what we are doing, we are deleting records with help of that data rector which is used above, right? Correct. So here, I mean, like as I mentioned, either way we can do it. You can pass the hard-coded ID of the record or if you want to pass the IDs dynamically, then you can use some data rector, data rectors above your delete action. And from that you can fetch the IDs of the records that you want to delete. Okay. And in the data rector, we query three records, right? So here what will happen? All three will be deleted or the first one? No, all three will be deleted. Okay. So basically this path will support either one ID or multiple IDs. Okay, okay. Yeah. So now if I go to preview and if I click execute, right? So the input of this delete action is like these three records, right? And if you see the output of this delete action, you can see three records have been deleted, which says success is equal to two, right? And now if I go there and if I refresh this one, see, I'm not able to see that test lookup now. Right. And if we query the data through data rector, so it won't be accessing any record, right? Correct. Yeah, right. Like if I go here now and if I click execute, there will be no records. Right. Okay. So this is the main use of the delete action in our integration procedure. So I mean, sometimes what happens, I mean, whenever you want to, let's say, if you want to delete some records before inserting something, right? There can be any sort of scenario in your business case. Then we will be using the delete action into the IP. Okay. Okay. And I think if I'm correct, so this is rarely used action, right? Because if you compare with Apex also, like rarely we delete the record. Generally we prefer insert update and create actions, right? Correct. So I mean, like whatever components we are, we will be delivering in the today's session. Those are those, I mean, like in my work experience, I have just used only the remote action, not the delete action, not the chatter action. So basically these elements are, we are not using on a frequent basis. Right, right. These are the components. So I mean, we are just having this session so that all the folks will be having the knowledge around these elements as well. Yeah, absolutely. Because if we talk about interview perspective, because sometimes there are like job interviews or client interviews as well. So people should know like we can perform these actions in IP. Yeah. Okay. So moving on to the next one. One more question, Rishik. So we have like three components now. Account records, that is DR. Then we have delete action. Then at the bottom we have response action, which is active. So this response action won't be like giving any value because all three records, that data after is retrieving are deleted. Correct, yes. Okay. Because now it do not have anything. Okay. Yep. Understood. I hope those who are watching this, they are also able to understand. Okay, so I think we can move on to the next component. Okay. And someone is asking about HTTP action. So maybe like as we are not covering it practically, so if you can talk about it at the end, when all the components you will demonstrate, that would be better. Definitely. So now we will be seeing the chatter action. Okay. Again, I'll just drag and drop this chatter action into the structure panel. So basically this chatter action is used for, I mean, whenever you enable chatter on any of the object, right? Then you can add some chatter on that record detailed page, right? Or let's say you can mention someone or you can add some comments like whatever updates you have, right? So I mean like, in this chatter action, I mean the main components that you need to define is, first is your subject ID, okay? So in your subject ID, you will be giving the record ID, okay? In the mentioned user ID, what you can do is you can pass some user ID for mentioning them. Because whenever you add some chatter, so like for example, if I go into some account record, and if I go to the chatter, right? Now if I want to post something, so I can chatter someone like this. Let's say, hey, Abhishek, then hi, right? This is how you can do some sort of chatter on the records. So if you want to mention someone, then you have to give the ID of that user over here. In the subject ID, you will be passing the record ID on which record you want to chatter. And in this image ID and file ID, if you want to attach some image or file, that also you can give the ID. And that ID, you can fetch it either from notes and attachment, or you can fetch it from static resource as well, okay? And in this text, whatever message you want to pass. So let's say I want to chatter on this account, okay? Okay, I'll go back to IP. I want to chatter like welcome to Sanjay Gupta Tech School. And I will hard code the ID of account here over here. Let's say this is the account ID. And what I will do, I will chatter myself. So I'll just copy the user ID from my user, and I'll pass it over here. And now if I go to preview, and if I click execute. So this chatter action will say chatter has been done, okay? And now if I go to the this account record, and now if I refresh it, right? If I go to chatter again. So as you can see, welcome to SJTS Abhishek Akraman. Right. This chatter has been done onto this record. So in the project or real example, we will be not... Hard coding. We will be not hard coding this subject ID and user ID and all these things. We will be always having these IDs from whether extracted from the data rector extract or from somewhere else. We can use some API section or anything. Okay. Okay. Yeah, similarly like we used in delete action. Correct. And syntax will be like in percentage only, right? Percentage and then... Yeah, yeah, over here you will... Yeah, okay. So this is the basic use of chatter action. So I don't think so there is much to color. Yeah, I think it is very easy and how to use IDs dynamically. We already covered in the delete action. So if someone wants to use it, they can do it their own. Correct. So now the last one is the remote action. Right. So this is the one that we still use frequently and the reason why we use remote actions because let's say if you want to do some sort of some sort of operation into your IP which cannot be implemented with the configurations configurations available into our integration procedure, then we have to call some Apex class. There will be scenarios when you will be working on projects. There will be scenarios where you won't be able to complete the whole requirement with the help of IP. You will be, you have to use the Apex as well. So one of the example can be like, if you want to make some JSON which is not possible with the data after transform which is not possible with the IP, then you have to call the Apex class and from that Apex class, you will be creating the JSON in whatever format you want. And then you will pass that JSON to the IP, right? So I mean, the basic scenario for calling an Apex class from the IP will be when something is not possible with the help of IP and if you want to do some custom coding with the help of Apex. Okay, so in the remote action, what we usually pass is this in this remote class, we will be passing the Apex class name and in the remote method, we will be passing the remote class method which is in this remote class. And in the send JSON path and send JSON node, this is similar as when you are passing the data to data after, right? Or sending some data or if you want to send some data from the additional input, that also you can. So this thing we have already covered, what are these elements? Now, if you want to call some Apex class, right? If you want to call some Apex class into your integration procedure, there are some certain criteria in your Apex class that you have to do. So I mean, I have already created one Apex class. So I will be demonstrating that. I'll go to my developer console, okay? And so this is the Apex class that I have created. And so if you want to call your Apex class into your IP, right? Then you have to implement this interface which is called a system.callable, okay? So I hope you all understand what is the meaning of interface, okay? And by default, in this interface, Salesforce is already providing a method which is called as call, okay? And which is having two parameters. First one is of type string and second one is of type map which is whose type is string comma object, okay? So there will be two parameters. First one is the method name and second one is the input. And why we are having these two parameters? Because when you are calling your Apex class from your IP, you are passing the remote class name, remote method, and you are passing some input. So this remote method name, whatever you will be passing, right? It will come under this method name. And whatever input you are passing from whether the send JSON path or the send additional input, that will be coming into your this map string comma object variable or the parameter. So let's say in your Apex class, you want to have multiple methods. So you will be just passing method name from your IP and you can just, I mean, you can just add if conditions. If method name is equals to this, then call this method. You can have one more where you will be saying, if your method name is something else, then call some other method. Now, what I'm gonna do is, I'm just gonna comment this one, oh, sorry, about six or five, yeah. I will just comment a few lines over here so that you will be able to understand. I'm gonna pass null for now, yeah. Now, we will call this Apex class from the IP, the method name is test example. And I will go to the preview and I'll click the execute. Okay, to this remote action, right now we are passing all the things. Whatever input we are passing, like contact is true, right? Account is false and whatever we have in the IP. So we will be passing some additional input. So let's say I will pass name as gts, okay? And now if I go to preview and if I click execute, so the input to this remote action will be, sorry, input to this remote action will be this only, name as gts, right? Now, I'll just move on to the Apex class again. So what will happen? The method name will get passed over here, which is test example. And the parameter that we are passing in the form of JSON, right? Name is equals to sgts. This will be coming into this one, okay? And if, now then we are checking if method name is equals to this, then call this method and pass this parameter. And we have that method over here. And in that method, what we are doing is we have just simply added one system table where we are, whatever input we are receiving from the IP, we are just debugging it or we are just putting it into the console. So now if I open the console, right? As you can see, just forget about this one. In this first debug, in the data, what we are receiving is, we are receiving this JSON, this one, in which we have three parameters, three node, first is input, second is option, third is output, right? And as you can see in the input, again we have a child node called as name is equals to sgts. Right? And in the second debug, what I am doing is, so whatever I'm getting from the data, I just want to get the input only. So what do I mean by input? So I just want to get only this thing, not other things, okay? So I'll go back again here and I'm just typecasting it into the map string comma object, okay? And if I again go to the debug logs, I have just only this thing in the second output or second debug, correct? Now what, now what, so now question arise, what's the meaning of this options and this output? Okay, before that I have one more question, like this inputs, options and output, these node names will be always there, right? These node names will be always there. Okay. This is by default. Okay. And from IP, like you passed method names, so that will automatically go to that first parameter always. Exactly. And whatever we are passing as an additional input, so that will go into the input. Come under this. So now the other question arises when, what do I mean with this option and this output, right? So if you are receiving any sort of input to your IPEX class, you must be giving some output to your ID, right? If you're not giving any output to your ID, then how your IP will get to know that your IPEX class executed successfully or not, right? So for doing that, what I have done is, so your IP only supports one data format, which is JSON. And your JSON can be converted into the IPEX into this map format, where map string comma object is the data type, right? So I have created one map string comma object, type of string comma object, a map variable output. And in this output, I'm just adding, I'm just adding one node called as test one one. So let's say I'm gonna call it as name. And I will pass this, in this name, I'm gonna pass this as gts. And let's say promarrates, okay? So there will be two name instance available. So basically, there will be not two instance, that name as gts is gonna get overrated. Okay, okay, okay. Okay, yeah, because here we are using this name as a key and key will be replaced as per the map functionality. Correct. Okay. And the other thing is in things you are getting confused. So what is happening? This name is coming into the input. Okay. And then the name that we are creating in, that we are creating into our IPEX, we will be putting it into the output variable, which is this one. Okay, got it. So that input name will be separate and output name will be separate. Right, exactly. So this we are sending back to the IP. Correct. So basically, if you, so whenever you are passing any sort of input, right, to your IPEX class, that will be coming under your input variable. And if you want to pass some sort of output to your IP from your IPEX class, then you have to set into your output variable. So now in the next slide, what I am doing is, in this variable, in this variable, we have a key named as output. And in that output, I'm putting this map. Right. Right. And I'm gonna save it. And now I will, if I go back to IP and if I click execute, and I will check, if I check the output of this remote action, as you can see in the output, I have this name is equals to SDTS from IPEX. Right. Right. So, in real project scenario, what we usually do is, we just receive some sort of input from the IP and we do some sort of manipulation into our IPEX, which we cannot implement into the IP. That's why we are using the IPEX option. And then into the output option, we will give back that data to IP, which the functionality that we cannot, we cannot build into the integration process. Right. So I think, Sanjay, I will provide you this code so that you can add into your resource wherever you are maintaining your resources. Yeah, but before that, one more question, like, can we receive this output in the IP and use it? Like where it will be available in IP? Yeah, yeah, okay. That's a good question, I think. Then let's say whatever you are receiving from your remote action, right? Now you want to use, now you want to pass it to your remote response action, right? So what you will be doing is, I will just delete this one, delete this one. Let's say output, and I will just call it as remote action one, following name, because in the output, we are receiving the node name as name, and if I go to execute, in the response action, I have the output from the IPX. This is how you can, you can create a mixture of IP and your IPX class. Right, and I think it is very simple. We just need to maintain input output in the IP, and the rest of the business logic will be there in the IPX. Correct. So I mean, now we can see with the help of Omnis Studio, you can fetch some data from your data adapters, then you can do some manipulation into your IPX, and whatever manipulation you are doing into your IPX, you can again pass it back to your IP, and that IP can be used anywhere, Flexcard, Omniscript, LWC, and even. Right, and we always will be able to return in form of like a key value pair, right? We cannot return a list kind of thing, right? Correct. So I mean like Omnis Studio only supports JSON format only. Right, yeah. So that's the thing. Okay, so I think you very well explained all three components. Now, if you can just talk about HTTP action. Yeah. So I mean the folks who have worked upon integrations, right? So don't get confused with the term of integration procedure and Salesforce integration. So integration means whenever you are connecting your Salesforce environment with the third party application, that is what is called integration. So when you are calling some integration from your IPX, what you usually do? First of all, you will be creating either the remote side setting or the name credentials, right? For connecting your Salesforce and third party application. And then you will be that you have connected with your third party application, then you will be calling the API and that API will be either get or post, right? So if someone have worked upon the integration, they will be able to understand these terms, what is name credential, what is remote side setting, what is API, get, post, right? So if I say in the simpler words, if you want to call some third party application without writing any sort of API code, then you will be using the HTTP action. Right. So in short, it is for integrations. Integrations. Yeah. Okay. And there is one more question. So I think, Nish, you got your answer. It is used for integration. So like you can explore it whenever it is needed. So there is one more question from Narendra. He's asking, can we show some warning message also while trying to delete a record like an LWC? No, no. We cannot do. Yeah. Because this whole thing will be working in the backend, right? Correct. So now guys, with the help of these demonstrations, those we have done in 11 sessions. So individually, you know how to use data adapter. Now, you know how we can use data adapter in IP along with other components, right? And Abhishek demoed you deletion, updation, record creation, then chatter actions, email action, how to call Apex, how we can pass data to Apex and how we can receive data back from Apex, right? All these things we have implemented in IP. So you know how we can connect IP with other components, right? Now, next, like tomorrow, we'll be having one more session. And I think it will be related to, let me just check the sheet. So next session will be on Flexcard, right? Yeah, yeah. What Abhishek will do, like he will be using IP data adapter together on Flexcard so that IP and data adapter will be working in the backend and the data which we are receiving. So right now, whatever we are implementing, we are checking it through preview, right? But through Flexcard, you won't be able to, you won't have to click on the preview button. You just need to use the IP with the Flexcard and the data which we'll be receiving from IP or data adapter or whatever functionality we are building. So the response we will be showing on the Flexcard or maybe going forward on Omniscript, right? So that way you will be able to relate everything whatever we have done or Abhishek explained so far, right? So I think next four sessions will be very much important because till now what we have seen, we have seen the backend, right? Business logic and SOQL and DML through IP and data adapter. Now, in upcoming sessions where you will be learning about Flexcard and Omniscript. So you will see the front-end side of this Omnis Studio, right? So those are very much important and like in upcoming two weeks, like we'll be completing all the sessions and in a couple of sessions, we'll be having one end-to-end use case where from the beginning, we'll be implementing data adapter IP, Flexcard and Omniscript so that you can have that end-to-end scenario in your mind so that whenever you will be working on the project so you can relate the things, okay? So I think with this explanation or whatever Abhishek explained today, you will be able to do some more practice. So implement all the actions individually going through the video and test it in your org, right? Because without practice, you won't be able to understand the components those are available in Omnis Studio, right? So do proper practice and exercise questions we already shared. So whenever you need to improve your knowledge, you can just implement those, okay? So tomorrow we'll be having one more session that will be on Flexcard. So please attend that so that you will get to know how we can use IP with Flexcard. Okay, so with this note, like we are ending this session and once again, thank you Abhishek for sharing all the insight regarding data adapter and IP so far. And I think in upcoming five or six sessions, we'll be completing this bootcamp. So I think by the end of this month, all the sessions will be delivered. Yeah. And then after watching all these sessions, people can prepare for certifications and like whenever there's a requirement on the project, they can go through and learn things. Yeah, definitely. Okay, so thank you so much for joining this session, guys and those who are watching the recording, thanks to you as well. See you tomorrow with a new topic. Bye everyone.