You need to sign in to do that
Don't have an account?
Apex code to change record types
Hi. I'm looking to create some Apex code that changes the record type of an opportunity to 'Multi' when brands/products from more than one Product Family are added to a single opportunity.
So the workflow is this:
1. User clicks New button to create a new opportunity
2. User chooses a record type for that opty -- Media, Events, etc.
3. User fills in opportunity info and chooses various products/brands to attach to that opty. Each brand/product has a Product Family.
4. Apex code is triggered when brands/products are added to the opty that are from more than one Product Family (not necessarily just two or more products, which could all be from the same Product Family) -- this would trigger the record type for that opty to be a) changed to Multi and b) the record type set to read-only. (optional) If the products/brands for that opty are changed again, the record type would revert to the original record type.
I'm not an Apex developer and I'm not sure where to start here. I'm hoping someone can point me in the right direction. Thanks in advance.
Yes recordtype can be easily be assigned through code, please refer to the code below:-
trigger CaseSetupTrigger on Case (before insert){
for (Case c: Trigger.new) {
c.RecordType = [select Id from RecordType where Name = 'Canada' and SobjectType = 'Case'];
}
}
Hi. Thanks for your reply. So this code is what I'd use to change the record type to Multi after some other code to determine multiple Product Families (see example above)?
Actully that will not work. You need to do the following:
RecordType rt = [select Id from RecordType where Name = 'Canada' and SobjectType = 'Case' limit 1];
c.RecordType.Id = rt.Id;
You need to specify the Id. Else it will not work.
Hi ,
I have similar scenorio here,but iam not able to assign the record types here ,plz help me
Here is the code
trigger CaseSetupTrigger on Contact(before update)
{
Contact con=[select id,name,RecordTypeId,status__c from contact where id in:Trigger.new];
if(con.status__c=='Prospect') { for(Contact c :Trigger.new)
{
RecordType rt = [select Id,name from RecordType where Name ='Duplicate1' and SobjectType = 'Contact'];
system.debug('record found------------------------'+rt);
if(rt.Id!=null)
{
con.RecordTypeId=rt.id;
System.debug('id...'+c.RecordType.id);
}
} update con; }
}
A quick correction to your code: To assign record type to object c, you assign the record type ID to field "RecordTypeId" not "RecordType.Id". Corrected code:
RecordType rt = [select Id from RecordType where Name = 'Canada' and SobjectType = 'Case' limit 1];
c.RecordTypeId = rt.Id;
I found the code below that automatically closes any open tasks when you close a case. I want to only run this trigger for some record types. For example, if(c.isCLosed) and (Case Record Type = Releases or Case Record = Fulfillment) then ...close all the tasks. I have tried a thousand variations, but I cannot get this code to work. Can someone help?
trigger CaseCloseTrigger on Case (after update) {
Case[] cse = Trigger.new;
// Get case id's for closed cases
Set<ID> cseIds = new Set<ID>();
for (Case c:cse)
if(c.isClosed)
cseIds.add(c.Id);
// Get tasks on cases being closed, update and close if still open
for (Task t : [select isclosed, status from task where whatid in :cseIds for update])
if (!t.isclosed){
t.description = 'Case closed';
t.status = 'Completed';
update t;
}
}
I have to add record type to my record. for example, if user click on event and we have 4 record type but we want to this functionlaity to work for only one event record.
I enter the if statement but i am getting the following error:
Error: Compile Error: Variable does not exist: t.Subject at line 4 column 5
my trigger is as follow:
trigger eventafter on Event (after insert,after update) {
List<Opportunity> opps = new List<Opportunity>{};
if (t.Subject != null && t.WhatId.getSObjectType() == Opportunity.sObjectType && t.RecordType.Name = 'Opportunity Event')
if(trigger.isInsert)
{
for (Event t : trigger.new)
{
if (t.Subject != null && t.WhatId.getSObjectType() == Opportunity.sObjectType)
{
opps.add(new Opportunity(Id = t.WhatId, StageName = t.Subject));
}
}
}
else
{
for(Event t : trigger.new)
{
if(t.Subject != null
&& t.WhatId.getSObjectType() == Opportunity.sObjectType
&& t.Subject != trigger.oldMap.get(t.Id).Subject)
{
opps.add(new Opportunity(Id = t.WhatId, StageName = t.Subject));
}
}
}
if(opps != null && !opps.isEmpty()){
Database.update(opps);
}
}
Please help that why i am getting this error and how can i reslove this.Also,If i have to use this for Bulk record then how can i use that in my current trigger.
i m new to salesforce so please help me
thanks
Hi..
Basically below line throws error.
You need to declare a variable 't' for Event. so use variable after declaring.
if (t.Subject != null && t.WhatId.getSObjectType() == Opportunity.sObjectType && t.RecordType.Name = 'Opportunity Event')
So, your new code looks like:
for(Event t: trigger.New){
if(t.subject!=null && t.whatid.getSObjectType() == Opportunity.sObjectType && t.RecordTypeName=='Opportunity Event'){
// Write your own code.........
}
}
........................
If this is work for you then mark it as a solution.......
Please Go through an example in the link.http://salesforceglobe4u.blogspot.in/2016/06/how-to-get-recordtypeid-in-test-class.html (http://salesforceglobe4u.blogspot.in/2016/06/how-to-get-recordtypeid-in-test-class.html" target="_blank)