You need to sign in to do that
Don't have an account?
Developement
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
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
RMP__c ctg = new RMP__c(Reviewer__c =Ideatmp.Reviewer__r.name );
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;
}
}
@testrest97: i am still getting Id
is Reviewer__c on rmp__c a lookup or a text field
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.
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
what is the fieldname on reviewer__c which you want....is it standard name field or any custom field...
@souvik9086: I tried but still the same ID
@testrest97:
Field name on both Idea and RMP__C object is : Reviewer__c
reviewer__c is a user lookup right, try reviewer__r.firstname+reviewer__r.lastname
it gives me "nullnull"
hmm this doesnt work
RMP__C ctg = new RMP__C(Reviewer__c=Ideas.Reviewer__r.firstname+Ideas.Reviewer__r.lastname);
@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....
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;
}
}