You need to sign in to do that
Don't have an account?
Vibhuti Gupta 10
how to get @mentioned from feedcomment, trigger, exact Syntax
trigger FeedCommentTrigger on FeedComment(after insert){
Set<String> users = new Set<String>();
Set<Id> parentIdSet = new Set<Id>();
Set<Id> UserIdkeySet = new Set<Id>();
Set<Id> alreadyExistingMemberidSet = new Set<Id>();
Set<Id> unCommonIdSet = new Set<Id>();
Map<Id, Id> objUserCaseMap = new Map<Id, Id>();
Map<Id, id> UserIdParentMap = new Map<Id, id>();
// set<CaseTeamMember> objCaseTeamMemberSet = new set<CaseTeamMember>();
List<CaseTeamMember> objCaseTeamMemberList = new List<CaseTeamMember>();
/*Set<Id> objCaseId = new Set<Id>();
for(FeedItem fi : Trigger.New){
if(fi.ParentId.getSObjectType() == Case.SObjectType){
objCaseId.add(fi.ParentId);
}
}*/
for(FeedComment fc : Trigger.New){
if(fc.ParentId.getSObjectType() == Case.SObjectType){
UserIdParentMap.put(fc.CreatedById ,fc.ParentId);
ConnectApi.FeedElement FeedComment= ConnectApi.ChatterFeeds.getFeedElement(null, fc.Id);
List<ConnectApi.MessageSegment> messageSegments = FeedComment.body.messageSegments;
for (ConnectApi.MessageSegment messageSegment : messageSegments) {
if (messageSegment instanceof ConnectApi.MentionSegment) {
ConnectApi.MentionSegment mentionSegment = (ConnectApi.MentionSegment) messageSegment;
System.debug('Mentioned user name: ' + mentionSegment.name);
System.debug('Mentioned user id: ' + mentionSegment);
fc.addError('mentionSegment'+mentionSegment);
// UserIdParentMap.put(mentionSegment.user.id,fi.ParentId);
// users.add(mentionSegment.user.id);
// System.debug('ParentID -->>'+fi.ParentId);
// System.debug('objUserCaseMap-->>'+objUserCaseMap);
}
}
parentIdSet.add(fc.ParentId);
}
}
UserIdkeySet = UserIdParentMap.KeySet();
for(CaseTeamMember ctm :[select MemberId,ParentId from CaseTeamMember where ParentId in:parentIdSet])
{
alreadyExistingMemberidSet.add(ctm.MemberId);
}
for(string s : UserIdkeySet){
if(!alreadyExistingMemberidSet.contains(s)){
unCommonIdSet.add(s);
}
}
for(Id i:unCommonIdSet){
CaseTeamMember objCaseTeamMember = new CaseTeamMember(MemberId = i,
ParentId = UserIdParentMap.get(i), TeamRoleId = '0B7G00000008Oo1');
objCaseTeamMemberList.add(objCaseTeamMember);
}
if(objCaseTeamMemberList.size()>0){
System.debug('objCaseTeamMemberList-->>'+objCaseTeamMemberList);
insert objCaseTeamMemberList;
System.debug('objCaseTeamMemberList-->>'+objCaseTeamMemberList);
}
}
Set<String> users = new Set<String>();
Set<Id> parentIdSet = new Set<Id>();
Set<Id> UserIdkeySet = new Set<Id>();
Set<Id> alreadyExistingMemberidSet = new Set<Id>();
Set<Id> unCommonIdSet = new Set<Id>();
Map<Id, Id> objUserCaseMap = new Map<Id, Id>();
Map<Id, id> UserIdParentMap = new Map<Id, id>();
// set<CaseTeamMember> objCaseTeamMemberSet = new set<CaseTeamMember>();
List<CaseTeamMember> objCaseTeamMemberList = new List<CaseTeamMember>();
/*Set<Id> objCaseId = new Set<Id>();
for(FeedItem fi : Trigger.New){
if(fi.ParentId.getSObjectType() == Case.SObjectType){
objCaseId.add(fi.ParentId);
}
}*/
for(FeedComment fc : Trigger.New){
if(fc.ParentId.getSObjectType() == Case.SObjectType){
UserIdParentMap.put(fc.CreatedById ,fc.ParentId);
ConnectApi.FeedElement FeedComment= ConnectApi.ChatterFeeds.getFeedElement(null, fc.Id);
List<ConnectApi.MessageSegment> messageSegments = FeedComment.body.messageSegments;
for (ConnectApi.MessageSegment messageSegment : messageSegments) {
if (messageSegment instanceof ConnectApi.MentionSegment) {
ConnectApi.MentionSegment mentionSegment = (ConnectApi.MentionSegment) messageSegment;
System.debug('Mentioned user name: ' + mentionSegment.name);
System.debug('Mentioned user id: ' + mentionSegment);
fc.addError('mentionSegment'+mentionSegment);
// UserIdParentMap.put(mentionSegment.user.id,fi.ParentId);
// users.add(mentionSegment.user.id);
// System.debug('ParentID -->>'+fi.ParentId);
// System.debug('objUserCaseMap-->>'+objUserCaseMap);
}
}
parentIdSet.add(fc.ParentId);
}
}
UserIdkeySet = UserIdParentMap.KeySet();
for(CaseTeamMember ctm :[select MemberId,ParentId from CaseTeamMember where ParentId in:parentIdSet])
{
alreadyExistingMemberidSet.add(ctm.MemberId);
}
for(string s : UserIdkeySet){
if(!alreadyExistingMemberidSet.contains(s)){
unCommonIdSet.add(s);
}
}
for(Id i:unCommonIdSet){
CaseTeamMember objCaseTeamMember = new CaseTeamMember(MemberId = i,
ParentId = UserIdParentMap.get(i), TeamRoleId = '0B7G00000008Oo1');
objCaseTeamMemberList.add(objCaseTeamMember);
}
if(objCaseTeamMemberList.size()>0){
System.debug('objCaseTeamMemberList-->>'+objCaseTeamMemberList);
insert objCaseTeamMemberList;
System.debug('objCaseTeamMemberList-->>'+objCaseTeamMemberList);
}
}
In order to find out if a user is actually @mentioned, you may have to use the Chatter API, as mentioned here: http://salesforce.stackexchange.com/questions/10047/retrieve-userid-of-mention-user-from-chatter-post-in-apex
Source - https://developer.salesforce.com/forums/?id=906F0000000AoACIA0
Hope it will help you !!
- Harsha