You need to sign in to do that
Don't have an account?
Bob
Apex Trigger Error: Initial term of field expression must be a concrete SObject: Map<Id,Warranty__c>
I keep getting this error message in my developer console, but I'm not sure why.
trigger Trigger_UpdateWarranties on Unit__c (after delete, after insert, after update) {
if (trigger.isdelete)
delete [select id from Warranty__c where product__c in :trigger.oldmap.keyset()];
if (trigger.isinsert || trigger.isupdate)
{
map<id,Warranty__c> mapw = new map<id,Warranty__c>([select id,product__c from Warranty__c where product__c in :trigger.newmap.keyset()]);
list<Warranty__c> lsw = new list<Warranty__c>();
for (unit__c u : trigger.new)
{
boolean exist = false;
for (Warranty__c w : mapw.values)
{
if (u.id == w.product__c)
{
exist = true;
break;
}
//may enhance your logic here
}
if (!exist)
{
Warranty__c w1 = new Warranty__c();
w1.Commercial_Parts__c = Warranty__c.Commercial_Parts__c;
lsw.add(w1);
}
}
if(lsw.size() > 0)
insert lsw;
}
}
trigger Trigger_UpdateWarranties on Unit__c (after delete, after insert, after update) {
if (trigger.isdelete)
delete [select id from Warranty__c where product__c in :trigger.oldmap.keyset()];
if (trigger.isinsert || trigger.isupdate)
{
map<id,Warranty__c> mapw = new map<id,Warranty__c>([select id,product__c from Warranty__c where product__c in :trigger.newmap.keyset()]);
list<Warranty__c> lsw = new list<Warranty__c>();
for (unit__c u : trigger.new)
{
boolean exist = false;
for (Warranty__c w : mapw.values)
{
if (u.id == w.product__c)
{
exist = true;
break;
}
//may enhance your logic here
}
if (!exist)
{
Warranty__c w1 = new Warranty__c();
w1.Commercial_Parts__c = Warranty__c.Commercial_Parts__c;
lsw.add(w1);
}
}
if(lsw.size() > 0)
insert lsw;
}
}
you have written a trigger on Unit__c and creating an map after querying on Warranty BUT in where clause you have used
trigger.newMap.keyset() having values on Unit__c
( trigger.newMap equivalent to map<Id, Unit__c> )
to solve this you have make a set<Id>, something like
and above will work.