You need to sign in to do that
Don't have an account?
![Irene Sless Irene Sless](https://dfc-org-production.my.site.com/img/userprofile/default_profile_45_v2.png)
I need a link to the Opportunity when I create a task from a trigger - linked to Outlook
When I create an Opportunity Team Member with a specific role, I have a trigger that creates a Task for the Member who is assigned that role (see below). I also have Salesforce for Outlook set up and everything is working nicely in that the Task is created for the user, and the sync between SF and Outlook is working nicely. The only problem is the Outlook Task does not have a link back to the SF Opportunity. I need to somehow get the Opp Name in the Subject or some link back to the Opportunity so the person knows which one the task links to!
The Opp Id is not a very friendly value and the user receiving the notice wouldn't know what to do with it. Does my trigger have to get really complicated and need to do a lookup on the Opp in order to get that info? Is there any way I can insert a url link from the Outlook task back to the Opp in SF?
trigger OpportunityTeamMemberAfterInsert on OpportunityTeamMember (after insert, after update) {
list<Task> taskNewTask= new list<Task>();
if(trigger.IsInsert)
{
for(OpportunityTeamMember oppTeam : trigger.new){
if (oppTeam.TeamMemberRole == 'Follow-up'){
Task tasksInsert = new Task();
tasksInsert.WhatId = OppTeam.Opportunityid;
tasksInsert.OwnerId = oppTeam.Userid;
tasksInsert.Subject = 'Follow-Up on Quote: ';
tasksInsert.ActivityDate = date.today()+7;
tasksInsert.Priority = 'Normal';
tasksInsert.ReminderDateTime = date.today()+6;
tasksInsert.IsReminderSet = true;
taskNewTask.add(tasksInsert);
}
}
}
Database.insert(taskNewTask);
}
The Opp Id is not a very friendly value and the user receiving the notice wouldn't know what to do with it. Does my trigger have to get really complicated and need to do a lookup on the Opp in order to get that info? Is there any way I can insert a url link from the Outlook task back to the Opp in SF?
trigger OpportunityTeamMemberAfterInsert on OpportunityTeamMember (after insert, after update) {
list<Task> taskNewTask= new list<Task>();
if(trigger.IsInsert)
{
for(OpportunityTeamMember oppTeam : trigger.new){
if (oppTeam.TeamMemberRole == 'Follow-up'){
Task tasksInsert = new Task();
tasksInsert.WhatId = OppTeam.Opportunityid;
tasksInsert.OwnerId = oppTeam.Userid;
tasksInsert.Subject = 'Follow-Up on Quote: ';
tasksInsert.ActivityDate = date.today()+7;
tasksInsert.Priority = 'Normal';
tasksInsert.ReminderDateTime = date.today()+6;
tasksInsert.IsReminderSet = true;
taskNewTask.add(tasksInsert);
}
}
}
Database.insert(taskNewTask);
}
tasksInsert.Description = 'Opportunity Url : https://cs5.salesforce.com/' + OppTeam.Opportunityid;
Sorry for second option try with this
Map<Id, OpportunityTeamMember > oppMap = new Map<Id, OpportunityTeamMember>([select Opportunity.name from OpportunityTeamMember where id in :trigger.new ]);
tasksInsert.Description = 'Opportunity Name' + oppMap.get(OppTeam.id).Opportunity.name;
All Answers
taskNewTask.Description = 'Opportunity Url : https://<yourinstance>.salesforce.com/' + OppTeam.Opportunityid;
2) Or you can get the opportunity details and set it in the description
Add this line before for loop (for(OpportunityTeamMember oppTeam : trigger.new){)
Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>([select name from Opportunity where id in :trigger.new ]);
and set the description as inside for loop
taskNewTask.Description = 'Opportunity Name' + oppMap.get(OppTeam.Opportunityid).name;
Thanks - I've tried both but get errors - see below. What is wrong please?
1) [Error] Error: Compile Error: Initial term of field expression must be a concrete SObject: LIST<Task> at line 17 column 17
taskNewTask.Description = 'Opportunity Url : https://cs5.salesforce.com/' + OppTeam.Opportunityid;
2) [Error] Error: Compile Error: Invalid bind expression type of SOBJECT:OpportunityTeamMember for Id field of SObject Opportunity at line 7 column 107
if(trigger.IsInsert)
{
Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>([select name from Opportunity where id in :trigger.new ]);
for(OpportunityTeamMember oppTeam : trigger.new)
{
if (oppTeam.TeamMemberRole == 'Follow-up')
{
Task tasksInsert = new Task();
tasksInsert.WhatId = OppTeam.Opportunityid;
tasksInsert.OwnerId = oppTeam.Userid;
tasksInsert.Subject = 'Follow-Up on Quote:' ;
taskNewTask.Description = 'Opportunity Name' + oppMap.get(OppTeam.Opportunityid).name;
// taskNewTask.Description = 'Opportunity Url : https://cs5.salesforce.com/' + OppTeam.Opportunityid;
tasksInsert.ActivityDate = date.today()+7;
tasksInsert.Description = 'Opportunity Url : https://cs5.salesforce.com/' + OppTeam.Opportunityid;
Sorry for second option try with this
Map<Id, OpportunityTeamMember > oppMap = new Map<Id, OpportunityTeamMember>([select Opportunity.name from OpportunityTeamMember where id in :trigger.new ]);
tasksInsert.Description = 'Opportunity Name' + oppMap.get(OppTeam.id).Opportunity.name;