function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Chetan KapaniaChetan Kapania 

Publish and Subscribe to a Platform Event in an Apex Trigger

While I am trying to complete Trailhead module for platform events, this is the error message which I am getting.
User-added image

This is the code which I have written as of now,
User-added image
Kindly advise if any changes are required.

Regards
Chetan
v varaprasadv varaprasad
Hi Chetan,

please add below line after ts.ownerid : 

tasks.add(ts);


thanks
varaprasad
Chetan KapaniaChetan Kapania
Hi v varaprasad,

Thank for the respose. As instructed, I added above mentioned line and now my code looks like this:
User-added image

But still getting the same error message as above and not able to complete challenge.

Regards
Chetan
VamsiVamsi
HI Chetan,

Can you set the whoid in task as contact and see 

 
Chetan KapaniaChetan Kapania
So, this is the final code which worked for me as able to complete the Trailhead challenge.

trigger OrderEventTrigger on Order_Event__e (after insert) {
    List<Task> tasks = new List<Task>();
    for (Order_Event__e event : Trigger.New) {
        if (event.Has_Shipped__c == true) {
            Task ts = new Task();
            ts.Priority = 'Medium';
            ts.Status = 'New';
            ts.Subject = 'Follow up on shipped order ' + 
                event.Order_Number__c;
            ts.OwnerId = '';
            tasks.add(ts);
        }
   }
    
    insert tasks;
}

Please note in inverted comma next to OwnerId put any active user's id. 

Regards
Chetan
Amit Chaudhary 8Amit Chaudhary 8
You can use the UserInfo.getUserId() to get active user id
 
trigger OrderEventTrigger on Order_Event__e (after insert) {
    List<Task> tasks = new List<Task>();
    for (Order_Event__e event : Trigger.New) {
        if (event.Has_Shipped__c == true) {
            Task ts = new Task();
            ts.Priority = 'Medium';
            ts.Status = 'New';
            ts.Subject = 'Follow up on shipped order ' + 
                event.Order_Number__c;
            ts.OwnerId = userinfo.getuserid();
            tasks.add(ts);
        }
   }
    
    insert tasks;
}

Let us know if this will help you
Chetan KapaniaChetan Kapania
Thanks Amit for the update regarding userId as it was really helpful.

Regards
Chetan
LorenzoLorenzo
Hello! This is my code, can you tell me why doesn't work??
trigger OrderEventTrigger on Order_Event__e (after insert) {
    
    List<Task> task= new List<Task>();
    
    User owner=[select id from User where Name='Fabrizio' limit 1];
    
    for (Order_Event__e event : Trigger.new){
        if(event.Has_Shipped__c == true){
            Task tsk= new Task ();{
            tsk.Priority = 'Medium';
            tsk.Status = 'New';
            tsk.Subject = 'Follow up on shipped order ' + event.Order_Number__c;
                tsk.OwnerId = owner.id;}
            
            task.add(tsk);
            
        }
    } 
    insert task;
}

PLEASE LET ME KNOW!!
Amit Chaudhary 8Amit Chaudhary 8
Hi Lorenzo Calò,

Dnt query record. Try to use userinfo.getuserid(); to get user Id. Try to update your code like below
trigger OrderEventTrigger on Order_Event__e (after insert) {
    
    List<Task> task= new List<Task>();
    
    //User owner=[select id from User where Name='Fabrizio' limit 1];
    
    for (Order_Event__e event : Trigger.new){
        if(event.Has_Shipped__c == true){
            Task tsk= new Task ();
            tsk.Priority = 'Medium';
            tsk.Status = 'New';
            tsk.Subject = 'Follow up on shipped order ' + event.Order_Number__c;
            tsk.OwnerId = userinfo.getuserid();
            task.add(tsk);            
        }
    } 
    insert task;
}

Let us know if this will work
ekiMekiM
I'm not sure if everyone knows this but setting the OwnerId = UserInfo.getUserId(); will not set it to the user that submitted the platform event.  It will set it to the "Automated Process" users id, which is a special user in salesforce.
Celio XavierCelio Xavier
Olá amigos, a minha solução ficou assim: 
trigger OrderEventTrigger on Order_Event__e (after insert) {
    List<Task> tasks = new List<Task>();
    	for(Order_Event__e event : Trigger.New) {
        	if (event.Has_Shipped__c == true) {
            	Task task = new Task();
            	task.Priority = 'Medium';
            	task.Status = 'New';
            	task.Subject = 'Follow up on shipped order '+event.Order_Number__c;
            	task.OwnerId = event.CreatedById; 
            	tasks.add(task);
        		}
   		}    
    		insert tasks;
}

Abraços.

Célio Xavier​​​​​​​
Surya Pratap Singh 13Surya Pratap Singh 13
try this out :
trigger OrderEventTrigger on Order_Event__e (after insert) {
    List<Task> taskList = new List<Task>();
    for(Order_Event__e event : Trigger.new){
        if(event.Has_Shipped__c == true){
             Task taskObj = new Task();
            taskObj.Priority='Medium';
            taskObj.Status='New';
            taskObj.Subject='Follow up on shipped order '+event.Order_Number__c ; 
            taskObj.OwnerId =Userinfo.getUserId() ;
            taskList.add(taskObj);
        }
    }
     insert taskList ;
}