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
DevelopementDevelopement 

Trigger giving ID instead of Name

 

 

Hi,

I am copying on1 fields from Idea to RMP custom object. Below is ma trigger, am getting ReviewerID instead of Reviewer name.

 

Field: Reviewer (lookup field from User on Idea). 

 

for( Idea ideatmp : listIdea ){
if( mapCtg.get(ideatmp.Title) != null ){
RMP__c uptCTG = mapCtg.get(ideatmp.Title);
uptCTG.Reviewer__c= ideatmp.Reviewer__c;

listUpdtCtg.add(uptCTG);
}else{


RMP__c ctg = new RMP__c(Reviewer__c =Ideatmp.Reviewer__c );


listUpdtCtg.add(ctg);
}
}
upsert listUpdtCtg;

}

}

 

How to get the name ?

 

 

thanks,

Shruti

souvik9086souvik9086

In a lookup field always ID is stored internally, but it displays name in the UI. So when you get reviewer__c you will always get the id there. If you want name then you have to query using that id.

 

If this post is helpful please throw Kudos.If this post solves your problem kindly mark it as solution.

Thanks

testrest97testrest97

RMP__c ctg = new RMP__c(Reviewer__c =Ideatmp.Reviewer__r.name );

DevelopementDevelopement

This is my complete trigger, not sure what am missing

 

trigger insertfield on Idea(after insert,after update) {


Set<String> setIdea = new Set<String>();
List<Idea> listIdea = new List<Idea>();
Map<String, RMP__C> mapCtg = new Map<String, RMP__C>();
List<RMP__C> listCtg = new List<RMP__C>();
List<RMP__C> listUpdtCtg = new List<RMP__C>();

if (Trigger.isInsert){
for (Idea Ideas : Trigger.new)
{
if(Ideas.Reviewer__c != null){
RMP__C ctg = new RMP__C(Reviewer__c=Ideas.Reviewer__c);
listCtg.add(ctg);
}
}
insert listCtg;
}
if (Trigger.isUpdate){
for (Idea Ideas : Trigger.new)
{
if( Ideas.Reviewer__c != null){
listIdea .add(Ideas );
setIdea.add(Ideas.Title);

}
}
listCtg = [select Reviewer__c from RMP__C where name in :setIdea];
for( RMP__C ctgtmp : listCtg ){
mapCtg.put(ctgtmp.name,ctgtmp);
}
for( Idea ideatmp : listIdea ){
if( mapCtg.get(ideatmp.Title) != null ){
uptCTG.Reviewer__c= ideatmp.Reviewer__c;

listUpdtCtg.add(uptCTG);
}else{
RMP__C ctg = new RMP__C(Reviewer__c =Ideatmp.Reviewer__c );
listUpdtCtg.add(ctg);
}
}
upsert listUpdtCtg;

}

}

DevelopementDevelopement

@testrest97: i am still getting Id

testrest97testrest97

is Reviewer__c on rmp__c a lookup or a text field

DevelopementDevelopement

its' a text field on RMP__C

but it's a lookup field on Idea. 

 

so i want Idea Reviewer__C value should go to RMP Reviewer__C but its' coming as ID.

souvik9086souvik9086

Try by adding the name in the query

 

trigger insertfield on Idea(after insert,after update) {

Set<String> setIdea = new Set<String>();
List<Idea> listIdea = new List<Idea>();
Map<String, RMP__C> mapCtg = new Map<String, RMP__C>();
List<RMP__C> listCtg = new List<RMP__C>();
List<RMP__C> listUpdtCtg = new List<RMP__C>();

if (Trigger.isInsert){
for (Idea Ideas : Trigger.new)
{
if(Ideas.Reviewer__c != null){
RMP__C ctg = new RMP__C(Reviewer__c=Ideas.Reviewer__c);
listCtg.add(ctg);
}
}
insert listCtg;
}
if (Trigger.isUpdate){
for (Idea Ideas : Trigger.new)
{
if( Ideas.Reviewer__c != null){
listIdea .add(Ideas );
setIdea.add(Ideas.Title);

}
}
listCtg = [select name,Reviewer__c from RMP__C where name in :setIdea];
for( RMP__C ctgtmp : listCtg ){
mapCtg.put(ctgtmp.name,ctgtmp);
}
for( Idea ideatmp : listIdea ){
if( mapCtg.get(ideatmp.Title) != null ){
uptCTG.Reviewer__c= ideatmp.Reviewer__c;

listUpdtCtg.add(uptCTG);
}else{
RMP__C ctg = new RMP__C(Reviewer__c =Ideatmp.Reviewer__c );
listUpdtCtg.add(ctg);
}
}
upsert listUpdtCtg;

}

}

 

If this post is helpful please throw Kudos.If this post solves your problem kindly mark it as solution.

Thanks

testrest97testrest97

what is the fieldname on reviewer__c which you want....is it standard name field or any custom field...

DevelopementDevelopement

 

DevelopementDevelopement

@testrest97:

 

Field name on both Idea and RMP__C object is :  Reviewer__c

testrest97testrest97

reviewer__c is a user lookup right, try reviewer__r.firstname+reviewer__r.lastname

DevelopementDevelopement

it gives me "nullnull"

testrest97testrest97

hmm this doesnt work

 

RMP__C ctg = new RMP__C(Reviewer__c=Ideas.Reviewer__r.firstname+Ideas.Reviewer__r.lastname);

 

 

vbsvbs
@testrest - This may not work as you are trying to access relationship fields in a trigger without setting them up explicitly.
@Development - You will have to query the user Object with a filter of ReviewerId's and get the first/last name as required. You will then have to iterate over this list of User records and setup the RMP__c object as I see it. Let me know if this is clear....
testrest97testrest97

Yep vbs is right....the Force.com platform doesn’t perform an in-memory lookup for each relationship in your object.

 

 

Set<String> setIdea = new Set<String>();
List<Idea> listIdea = new List<Idea>();
Map<String, RMP__C> mapCtg = new Map<String, RMP__C>();
List<RMP__C> listCtg = new List<RMP__C>();
List<RMP__C> listUpdtCtg = new List<RMP__C>();


Set<id> userIds = new Set<id>();
for (Idea Ideas : Trigger.new)
userIds.add(Ideas.Reviewer__c);

Map<id, user> userMap= new Map<id, user>(
[SELECT name, firstname, lastname FROM user WHERE Id IN :userIds]);


if (Trigger.isInsert){
for (Idea Ideas : Trigger.new)
{
if(Ideas.Reviewer__c != null){
RMP__C ctg = new RMP__C(Reviewer__c=userMap.get(ideas.reviewer__c).name);
listCtg.add(ctg);
}
}
insert listCtg;
}
if (Trigger.isUpdate){
for (Idea Ideas : Trigger.new)
{
if( Ideas.Reviewer__c != null){
listIdea .add(Ideas );
setIdea.add(Ideas.Title);

}
}
listCtg = [select Reviewer__c from RMP__C where name in :setIdea];
for( RMP__C ctgtmp : listCtg ){
mapCtg.put(ctgtmp.name,ctgtmp);
}
for( Idea ideatmp : listIdea ){
if( mapCtg.get(ideatmp.Title) != null ){
uptCTG.Reviewer__c= ideatmp.Reviewer__c;

listUpdtCtg.add(uptCTG);
}else{
RMP__C ctg = new RMP__C(Reviewer__c =Ideatmp.Reviewer__c );
listUpdtCtg.add(ctg);
}
}
upsert listUpdtCtg;

}

}