This sample shows how to use the getSObjectType method to obtain an sObject token from an ID. The updateOwner method in this sample accepts a list of IDs of the sObjects to update the ownerId field of. This list contains IDs of sObjects of the same type. The second parameter is the new owner ID. Note that since it is a future method, it doesn’t accept sObject types as parameters; this is why it accepts IDs of sObjects. This method gets the sObject token from the first ID in the list, then does a describe to obtain the object name and constructs a query dynamicallly. It then queries for all sObjects and updates their owner ID fields to the new owner ID.
public class MyDynamicSolution { @future public static void updateOwner(List<ID> objIds, ID newOwnerId) { // Validate input System.assert(objIds != null); System.assert(objIds.size() > 0); System.assert(newOwnerId != null); // Get the sObject token from the first ID // (the List contains IDs of sObjects of the same type). Schema.SObjectType token = objIds[0].getSObjectType(); // Using the token, do a describe // and construct a query dynamically. Schema.DescribeSObjectResult dr = token.getDescribe(); String queryString = 'SELECT ownerId FROM ' + dr.getName() + ' WHERE '; for(ID objId : objIds) { queryString += 'Id=\'' + objId + '\' OR '; } // Remove the last ' OR' queryString = queryString.subString(0, queryString.length() - 4); sObject[] objDBList = Database.query(queryString); System.assert(objDBList.size() > 0); // Update the owner ID on the sObjects for(Integer i=0;i<objDBList.size();i++) { objDBList[i].put('ownerId', newOwnerId); } Database.SaveResult[] srList = Database.update(objDBList, false); for(Database.SaveResult sr : srList) { if (sr.isSuccess()) { System.debug('Updated owner ID successfully for ' + dr.getName() + ' ID ' + sr.getId()); } else { System.debug('Updating ' + dr.getName() + ' returned the following errors.'); for(Database.Error e : sr.getErrors()) { System.debug(e.getMessage()); } } } } }
The following are methods for Id.
public Void addError(String errorMsg)
The error message to mark the record with.
Type: Void
This method is similar to the addError(errorMsg) sObject method.
Trigger.new[0].Id.addError('bad');
public Void addError(String errorMsg, Boolean escape)
The error message to mark the record with.
Indicates whether any HTML markup in the custom error message should be escaped (true) or not (false). This parameter is ignored in Lightning Experience and the Salesforce mobile app and the HTML is always escaped. The escape parameter only applies in Salesforce Classic.
Type: Void
The escaped characters are: \n, <, >, &, ", \, \u2028, \u2029, and \u00a9. As a result, HTML markup is not rendered; instead, it is displayed as text in the Salesforce user interface.
Trigger.new[0].Id.addError('Fix & resubmit', false);
public Void addError(Exception exceptionError)
An Exception object or a custom exception object that contains the error message to mark the record with.
Type: Void
This method is similar to the addError(exceptionError) sObject method.
public class MyException extends Exception{} Trigger.new[0].Id.addError(new myException('Invalid Id'));
public Void addError(Exception exceptionError, Boolean escape)
An Exception object or a custom exception object that contains the error message to mark the record with.
Indicates whether any HTML markup in the custom error message should be escaped (true) or not (false). This parameter is ignored in Lightning Experience and the Salesforce mobile app and the HTML is always escaped. The escape parameter only applies in Salesforce Classic.
Type: Void
The escaped characters are: \n, <, >, &, ", \, \u2028, \u2029, and \u00a9. As a result, HTML markup is not rendered; instead, it is displayed as text in the Salesforce user interface.
public class MyException extends Exception{} account a = new account(); a.addError(new MyException('Invalid Id & other issues'), false);
public Schema.SObjectType getSObjectType()
Type: Schema.SObjectType
For more information about describes, see Understanding Apex Describe Information.
account a = new account(name = 'account'); insert a; Id myId = a.id; system.assertEquals(Schema.Account.SObjectType, myId.getSobjectType());