I have been trying to do a bulk load of accounts in salesforce and it keeps triggering the following error     UpdateCSMTeam:execution of AfterInsertcaused by: System.DmlException:   Insert failed. First exception on row 0 with id00rJ000003iFSruIAG;   first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an   insert call: [Id]Class.UpdateCSM.updateTeam Mem   Below I'm including the class and the trigger referenced.  APEX CLASS (Update CSM)  public class UpdateCSM {            public static void updateTeamMember(List&lt;Account&gt; accounts) {                 SObject[] sobs = new SObject[] {};                 for (Account a : accounts) {                       if (a.Customer_Success_Manager__c != null) {                             sobs.add(new AccountShare(                                     AccountId = a.Id,                                    OpportunityAccessLevel = 'Edit',                                     CaseAccessLevel = 'Edit',                                     AccountAccessLevel = 'Edit',                                     UserOrGroupId = a.Customer_Success_Manager__c));                      }                    for (Account acc : accounts) {                              if (acc.Customer_Success_Manager__c != null) {                                     sobs.add(new AccountTeamMember(                                             AccountId = acc.id,                                             UserId = acc.Customer_Success_Manager__c,                                             TeamMemberRole = 'Customer Success Manager'));                            }                                      }                                   insert sobs;                                                                                 }                  } }   APEX TRIGGER (UpdateCSMTeam)  trigger UpdateCSMTeam on Account (After update, After insert){     UpdateCSM.updateTeamMember(trigger.new);}
121895
I have a trigger and a class that seem to be causing an insert fail in Dataloader.  I am trying to insert 200 records to see if an error is generated before moving these to production. I'm just inserting the mandatory fields such as Name, Owner, Market, Customer_Success_Manager__c, and Business Unit.   Each time I get an error:     UpdateCSMTeam:execution of AfterInsertcaused by: System.DmlException:   Insert failed. First exception on row 0 with id01MJ0000009gXthMAE;   first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an   insert call: [Id]Class.UpdateCSM.updateTeamMem . I've listed the class   and trigger below.   APEX CLASS  public class UpdateCSM {             public static void updateTeamMember(List&lt;Account&gt; accounts) {                     List&lt;AccountShare&gt; ashareLIST = new List&lt;AccountShare&gt;();                     List&lt;AccountTeamMember&gt; ATM = new List&lt;AccountTeamMember&gt;();                    Set&lt;String&gt; rmMember = new Set&lt;String&gt;();                     Map&lt;ID, ID&gt; acctToBRepMap = new Map&lt;ID, ID&gt;();                      for(Account a:accounts){                              AccountShare caSharingRule = new AccountShare();                                caSharingRule.AccountId = a.Id;                                caSharingRule.OpportunityAccessLevel = 'Edit';                                caSharingRule.CaseAccessLevel = 'Edit';                                caSharingRule.AccountAccessLevel = 'Edit';                                caSharingRule.UserOrGroupId = a.Customer_Success_Manager__c;                                ashareLIST.add(caSharingRule);                                    if(a.Customer_Success_Manager__c!= null){                                   AccountTeamMember Teammemberad=new AccountTeamMember();                 Teammemberad.AccountId=a.id;                 Teammemberad.UserId=a.Customer_Success_Manager__c;                 Teammemberad.TeamMemberRole = 'Customer Success Manager';                                   ATM.add(Teammemberad);                             if(!ATM.isEmpty()){                                    insert ATM;                                              insert ashareLIST;                                                         if(a.Customer_Success_Manager__c==null){                                            list&lt;AccountTeamMember&gt; ratm = [SELECT UserId                                                                             FROM AccountTeamMember                                                                             WHERE (TeamMemberRole = 'Customer Success Manager')                                                          AND AccountId =:a.id];                                             if(ratm.size()&gt;0)                                                 delete ratm;                                        }                                    }                                 }                            }                         }                    } ...   APEX TRIGGER  trigger UpdateCSMTeam on Account (After update, After insert){         UpdateCSM.updateTeamMember(trigger.new); }
82536
I am upserting list of records based on externalId as follows:  List&lt;Database.upsertResult&gt; results = Database.upsert(lstRecords, CustomObject__c.External_Id__c,true);   The results returns as follows:  (Database.UpsertResult[getErrors=();                         getId=a1k0j000000P6CmAAK;                         isCreated=true;                         isSuccess=true;],   Database.UpsertResult[getErrors=();                         getId=a1k0j000000P6CNAA0;                         isCreated=false;                         isSuccess=true;])   The first record is inserted and 2nd record is updated.  Since I am upserting based on externalId, I need to know for which ExternalId the records have been successfully inserted or updated.   doesn't expose any methods. It returns SalesforceId and NOT externalId  I need a results structure like this:  (Database.UpsertResult[getErrors=();                         getExternalId = '1234';                         getId=a1k0j000000P6CmAAK;                         isCreated=true;                         isSuccess=true;],   Database.UpsertResult[getErrors=();                         getExternalId = '1235';                         getId=a1k0j000000P6CNAA0;                         isCreated=false;                         isSuccess=true;])   What would be the best way to achieve this.
123280
Note: This error might look like a familiar error but the   resolution mentioned in the  is not working in the below case and I am not sure why, hence posting this question.   Problem description:   I have a process builder on case object set to fire for every time new record is created. Criteria is set to 'Formula evaluates to True' with below formula: AND(NOT(ISBLANK([Case].AccountId)),ISPICKVAL([Case].Account.Active__c,'Yes')) With immediate action set to update custom field on the Case object. Custom field Active__c on the Account object is type picklist with two possible values 'yes' and 'no'.   Screenshots of the process builder:        Creating a case as shown in the below screenshot with very minimal details and especially not populating account details:    Throws below error:     The flow failed to access the value for   myVariable_current.Account.Active__c because it hasn't been set or   assigned.   Relevant data from log file:     22:14:31.0 (12479016)|WF_FLOW_ACTION_BEGIN|09L370000000FEJ 22:14:31.13   (13607478)|FLOW_CREATE_INTERVIEW_BEGIN|00D37000000H8hr|300370000008ZTl|301370000004weE   22:14:31.13   (15394571)|FLOW_CREATE_INTERVIEW_END|5525dfa7819c33f438ce3cef9b6c15c668d8ff2-3d11|Test   22:14:31.15 (15820974)|FLOW_START_INTERVIEWS_BEGIN|1 22:14:31.15   (16674702)|FLOW_START_INTERVIEW_BEGIN|5525dfa7819c33f438ce3cef9b6c15c668d8ff2-3d11|Test   22:14:31.15 (35470120)|FLOW_ELEMENT_ERROR|The flow failed to access   the value for myVariable_current.Account.Active__c because it hasn't   been set or assigned.|| 22:14:31.15   (35479812)|FLOW_START_INTERVIEW_END|5525dfa7819c33f438ce3cef9b6c15c668d8ff2-3d11|Test 22:14:31.15 (35517783)|FLOW_START_INTERVIEWS_END|Interview error.   Aborting all.|5525dfa7819c33f438ce3cef9b6c15c668d8ff2-3d11|Test   22:14:31.15 (35528335)|FLOW_START_INTERVIEWS_END|1 22:14:31.0   (35588898)|WF_FLOW_ACTION_ERROR|09L370000000FEJ|300370000008ZTl|Error   executing flow: test, FlowDefId: 300370000008ZTl, FlowVersionId:   301370000004weE 22:14:31.0   (35612585)|WF_FLOW_ACTION_ERROR_DETAIL|An unhandled fault has   occurred in this flowAn unhandled fault has occurred while   processing the flow.  Please contact your system administrator for   more information. 22:14:31.0   (35683203)|WF_FLOW_ACTION_END|09L370000000FEJ   URL to the complete debug log :  (Note: You can see from the log that there are no other workflow rules or triggers on the case object).  My analysis: When the first condition inside the AND expression is evaluating as false, why is it trying to evaluating the second condition to check the custom field on the Account object? It shouldn't right?  Any help?  EDIT: I am looking to solve this using option 'Formula Evaluates to True' only because I have other complex criteria like checking the day(Mon vs Tue and etc) of the case creation.
90062
I have Opportunity-lookup field on Opportunity (self),  Scenario:   Opportunity A if select Opportunity B using lookup then Opportunity B's same lookup field automatically populate with Opportunity A.   I tried to achieve this using trigger - before insert/update but its failing as:  System.DmlException: Update failed. First exception on row 0 with id 006G000000DHaBlIAL; first error: SELF_REFERENCE_FROM_TRIGGER, Object (id = 006G000000DHaBl) is currently in trigger Oppy_before_INSUPD, therefore it cannot recursively update itself: []
81052
// Insert an account  Account a = new Account(Name='Test',                      annualRevenue=100.0);  insert a;  // Create an approval request for the account Approval.ProcessSubmitRequest req1 =        new Approval.ProcessSubmitRequest(); req1.setObjectId(a.id); req1.setNextApproverIds(new Id[] {'***************'}); // Submit the approval request for the account Approval.ProcessResult result =                     Approval.process(req1);   Am trying to execute this code in anonymous block. How ever when tried in trigger i got same error all the time. Hard coded next approvers ID. No luck.  Any suggestions on what am I doing wrong ? Please help!!
14907
Is there any way to consistently execute a piece of Apex code whenever a User logs in to Salesforce? Posts such as  seem to suggest that triggers on updates to the User object's 'LastLoginDate' field do not consistently execute.  Workflow would be okay too --- except that you cannot make workflow rules on the User object.  Is there any way to get a trigger to execute whenever a Salesforce user logs in?  Here is what I've currently done, both with the trigger saved in API v12 and API v25, with NO success. I have a Login_Events__c Long Textarea field that I'm trying to update based on some details of the User login event, but no such updates are taking place:  trigger User on User (before update) {      if (Trigger.isBefore &amp;&amp; Trigger.isUpdate) {          for (User u : Trigger.new) {              // Make sure there's at least something in the Login Events field             if (u.login_events__c == null) u.login_events__c = '';              // Add in the current login events change             u.login_events__c +=                '\n User Id: '                 + u.Id                + ', Username: ' + u.Username                 + ', Last Login Date: '                 + u.LastLoginDate                 + ', Session Id: ' +  UserInfo.getSessionId()                 + '\n';              }      }  }
31769
I am trying to find duplicate accounts in the system and trying to merge them based on our filter criteria using apex. The issue is I am hitting the governor limit of 150 DML statements while doing this.  We will have to put the merge statement inside the loop as we need the parent and child as the parameters in the merge statement. I don't think we can bulkify Merge like other DML statements due to the above reason. I am not sure if there is any better way to do it and avoid hitting governor limits.  Any help in this regard would be greatly appreciated.  Code that I have tried is included below  global class LoyaltyAccountBatch implements Database.batchable&lt;sObject&gt;{        global Database.QueryLocator start(Database.batchableContext info){           String query;         query = ('SELECT  Id FROM  LoginHistory LIMIT 1');          return Database.getQueryLocator(query);    }       global void execute(Database.batchableContext info, List&lt;LoginHistory&gt; scope){             // Get those records based on the IDs         List&lt;Account&gt; templst1 = [SELECT Id,UniqID from account where createddate = LAST_N_DAYS:4 and UniqID &lt;&gt; ''];             system.debug('templist is '+templst1);               Set&lt;String&gt; insertedRecords = new Set&lt;String&gt;() ;         for (Account a : templst1)  {         insertedRecords.add(a.UniqID);     }                 List&lt;Account&gt; templst = [SELECT Id,UniqID from account where NewUniqID IN : insertedRecords                                   order by NewUniqID,UniqID asc];         // Process records          for(integer i=0;i+1&lt;templst.size();i++)          {             if(templst[i].UniqID &lt;  templst[i+1].UniqID)                     {                 system.debug('ids are '+templst[i].UniqID+'--&gt;'+templst[i+1].UniqID);                 String str = '1'+templst[i].UniqID.substring(1,templst[i].UniqID.length());                 String str1 = '1'+templst[i+1].UniqID.substring(1,templst[i+1].UniqID.length());                 system.debug('str is'+str);                 system.debug('str1 is'+str1);                 if(str.equals(str1))                 {                     Merge templst[i+1] templst[i];                     system.debug('value of i is'+i);                 }              }         }        }          global void finish(Database.batchableContext info){         }   }
104197
When i create new User Account and login with that credentials, it gives me this problem if admin doesnt have set thier values yet !!!**  AllotmentList = [select id, Days_Remaining__c from PTO_Allotment__c where Year__c =:year and Employee__c=:EmployeeList[0].id LIMIT 100]; //access only Current user Allotment details                 //to handle Listoutof Bound Exception wrote if-else          if(AllotmentList.size()&gt;0)         {         requests.PTO_Allotment__c=AllotmentList[0].id;         requests.Days_Remaining__c=AllotmentList[0].Days_Remaining__c;         }         else         {             //write a code when AllotmentList is empty ....         }
62150
I need to be able to detect that the trigger execution is happening because of a workflow field update. There is a suggestion in the cookbook:  But this solution is not properly bulkified. If my batch of records is split up (200, 100, 50 whatever the server decides) the 2nd to nth batches are not processed correctly because the flag has already been set. The second part of the problem is: This is part of a managed package. I have no control of the customer's workflow rules, supporting and configuring a flag/last changed field on a record is not realistic, our company doesn't have the support resources to be walking each customer through the configuration. Has anyone been able to solve this problem for large batches of records? Edit (In Response to Calebs Answer) Separate trigger batches do not run in separate contexts trigger AccountTriggerContext on Account (before insert) {     System.debug('counter='+TriggerContextCounter.getCounter()); }  . global without sharing class TriggerContextCounter {      private static Integer counter = 0;          public static Integer getCounter() {         Integer value = counter;         counter++;         return value;     }      private static testMethod void testTriggerContexts() {         List&lt;Account&gt; accounts = new List&lt;Account&gt;();         for(Integer i = 0; i &lt; 250; i++) {             accounts.add(new Account(Name='testTriggerContexts: ' + i));         }         insert accounts;     } }  Unit test debug messages  USER_DEBUG|[2]|DEBUG|counter=0 USER_DEBUG|[2]|DEBUG|counter=1  Both counters should have been 0 if the batches were running in separate contexts Edit Further explanation of background for @Ralph This is a generalized explanation, but when certain conditions are met, some date fields on other objects are updated. The trigger runs and updates the dates. If a workflow rule causes a field update on the object, the same trigger is run again and the dates on the other objects are updated for a second time. And because this is an increment operation the dates on the other objects are off by a factor of 2.
34110
I received the following error:     Error: Invalid Data.    Review all error messages below to correct your data.   Apex trigger ISOTrigger caused an unexpected exception, contact your administrator: ISOTrigger: System.LimitException: Too many SOQL queries: 101   In the debug log I've found the following:  15:11:56.0 (762902111)|SOQL_EXECUTE_BEGIN|[94]|Aggregations:0|SELECT Id, OwnerId, IsRecurrence, RecurrenceActivityId FROM Task WHERE (IsClosed = FALSE AND (IsRecurrence = TRUE OR RecurrenceActivityId = '') AND AccountId = :tmpVar1) 15:11:56.0 (762942801)|EXCEPTION_THROWN|[94]|System.LimitException: Too many SOQL queries: 101 15:11:56.0 (763220286)|FATAL_ERROR|System.LimitException: Too many SOQL queries: 101  Class.AccountHandler.beforeUpdate: line 94, column 1 Class.TriggerFactory.execute: line 95, column 1 Class.TriggerFactory.createHandler: line 29, column 1 Trigger.AccountTrigger: line 3, column 1  15:11:56.0 (763234604)|FATAL_ERROR|System.LimitException: Too many SOQL queries: 101   Here is the code in method beforeUpdate and AccountHandler class:  public void beforeUpdate(SObject oldSo, SObject so) {     for(SObject bu :Trigger.new) {        Account a = (Account) bu;         List&lt;Task&gt; tasksFromDatabase = new List&lt;Task&gt; ([SELECT Id, OwnerId, IsRecurrence, RecurrenceActivityId FROM Task WHERE IsClosed=false AND (IsRecurrence = true OR RecurrenceActivityId = '') AND AccountId = :a.Id]);         String agentName = a.Agents__c;        String recruiterName = a.Recruiter__c;//TO DO ::: delete, not used         if(agentName != null) {            List&lt;ISOs__c&gt;isoName = [SELECT Name, Recruiter_ID_num__c, Active__c FROM ISOs__c WHERE Id IN (SELECT ISO_Company__c FROM Agent__c WHERE Id = :agentName)];            if(isoName.size() &gt; 0) {                if(isoName[0].Active__c == false) {                    a.ISO_Name__c.addError('The selected agent is linked to an inactive Iso');                }             a.ISO_Name__c = isoName[0].Name;            a.ISO_recruiter_id__c = IsoName[0].Recruiter_ID_num__c;            }        } else if(agentName == null) {            a.ISO_Name__c = '';            a.ISO_recruiter_id__c = '';        }         for(SObject sob :Trigger.new) {            Account ab = (Account) sob;            Account oldAB = (Account)Trigger.oldMap.get(ab.id);            if (ab.Status__c != null &amp;&amp; oldAB.Status__c!=null) {                       if(ab.Status__c != oldAB.Status__c) {                       statusmail mail = new statusmail();                    mail.setAccountInfo(ab);                    mail.SendAccountEmail();                                if(ab.Agents__c != null)                        mail.sendAgentEmail();                    if(ab.Recruiter__c != null)                        mail.sendRecruiterEmail();                }            }        }            } }   Please advise how to avoid this error?
96022
I had the following exception thrown at me when trying to process more than one selected records via a custom button in the list view.    Class Code  global class MerchandiseInventoryClass {      webservice static void ConverttoInventory(String[] merchandise_id)    {        //Convert Merchandise collection into Inventory Collection...         Merchandise__c[] merchandise_collection = [SELECT ID,Author__c,Book_Title__c,Edition__c,Publisher__c,Total_Merchandise_QtyTotal_Qty__c,Status__c FROM Merchandise__c WHERE ID = :merchandise_id];          Inventory__c i = new Inventory__c(); //Line 1        List&lt;Inventory__c&gt; newInventory = new List&lt;Inventory__c&gt;();        for(Merchandise__c m : merchandise_collection )        {            if(m.Status__c !='Fully Converted')            {            i.Author__c = m.Author__c ;            i.Book_Title__c = m.Book_Title__c;            i.Edition__c = m.Edition__c;            i.Publisher__c = m.Publisher__c;            i.Qty_Available__c = m.Total_Merchandise_QtyTotal_Qty__c;            i.Merchandise__c = m.Id;            m.Uninventoried_Qty__c = 0;            m.Status__c = 'Fully Converted';            newInventory.add(i);            }        }        insert newInventory;        update merchandise_collection;    }  }   By moving the Line 1 to within the for loop solved the issue for me.  Thanks to this post (refer the Best Answer in that post)    What puzzles me is that WHY i have to instantiate "i" for every iteration within the loop.  Why the list collection ("newInventory") is complaining that are duplicate elements and why should it even confuse in the first place when I am performing an "insert" even ?
20599
I am receiving apex errors with the following code:   public with sharing class AddExistingSpecsExt {      public Specifications__c loadedSpec { get; private set; }  public AddExistingSpecsExt() {     String specId = ApexPages.currentPage().getParameters().get('id');     if (String.isBlank(specId)) return;      List&lt;Specifications__c&gt; candidates = [         SELECT Id, Name, Product__c FROM Specifications__c WHERE Id = :specId LIMIT 1     ];     if (!candidates.isEmpty()) loadedSpec = candidates[0]; }     public PageReference associate () {          Specifications__c candidates = new Specifications__c ( Id = Specifications__c.Product__c, Name = Specifications__c.Id);          try {             Database.update(candidates);         } catch (Exception error) {             ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Error while associating.' + error.getMessage()));         }          PageReference page = new PageReference('/' + candidates);          return page.setRedirect(true);     }      public PageReference cancel () {         PageReference page = new PageReference('/' + Null);         return page.setRedirect(true);             }  }   Attempting to add records to a related list through a custom button and small vf page.   The Error is Line 16      Invalid initial expression type for field Specifications__c.Id, expecting: Id   Any help?
53527
Within my community there are customer users with Customer Community Plus licenses who are considered to be "company admins" for their respective companies. A company admin needs to be able to add other users from their company, which effectively involves creation of a Contact record and a User record for the new user.  The problem I'm experiencing is this:   If I try inserting the Contact record and the User record in the same code context, I get a MIXED_DML_OPERATION exception. If I try using , I get this error: "You are already logged in."   Other than breaking out the Contact record creation and User record creation into two operations that execute in two separate code contexts (e.g., actions on a Visualforce page), is there any way to efficiently enable a logged in customer user to add another user?
95979
There were custom validation error(s) encountered while saving the affected record(s). The first validation error encountered was:      Apex trigger updatequotestatus caused an unexpected exception, contact your administrator: updatequotestatus: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.updatequotestatus line 5, column 1.   Error Occured at Line:     if((t.what.getsobjecttype() == quote__c.sobjecttype) &amp;&amp; (t.subject.substring(0,5) == 'Email')  trigger updatequotestatus on task (after insert, after update){     Set&lt;Id&gt; quoteIds = new Set&lt;Id&gt;();     List&lt;quote__c&gt; quotes = new List&lt;quote__c&gt;();      for(task t:trigger.new){         if(t.whatId!=null){             if((t.what.getsobjecttype() == quote__c.sobjecttype) &amp;&amp; (t.subject.substring(0,5) == 'Email')){                 quoteIds.add(t.whatId);             }         }     }      for(quote__c q:[select StageName__c from quote__c where Id IN : quoteIds]){         quote__c qt = new quote__c();         qt.Id = q.Id;         qt.StageName__c = 'Proposal Sent';         quotes.add(qt);     }      if(quotes.size()&gt;0){         update quotes;     } }
23293
I want to create a case which has an attachment, Billing Account, and topics. Given below is the code from my Test Class:  Scenario: Once user submit the case request and ask for approval. The request goes to the Manager for approval, once the request approves, an email goes to Legal team with an Case attachments in an email.  Topic__c tc = new Topic__c(Name ='My New topic'); Attachment att = new Attachment(Name = 'sample.pdf');  Case c = new Case(Origin = 'Phone',                           Subject = 'New Testing',                           Department__c = 'XXXXXXX', Priority = 'Normal',                           Topic__c = tc.Id,                           Risk_Approval__c = true); insert c;   I am getting the below error:     System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, CaseTrigger: execution of BeforeInsert   My Trigger class:  trigger sendEAttachmentsInMail on Case (before insert, before update){  for(Case casevar : Trigger.new){          Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();          mail.setBccSender(false);         mail.setUseSignature(false);         mail.setTargetObjectId(casevar.Id);         mail.setTemplateId('XXXXXXXXX');         mail.saveAsActivity = false;        //Set email file attachments         List&lt;Messaging.Emailfileattachment&gt; fileAttachments = new List&lt;Messaging.Emailfileattachment&gt;();         for (Attachment a : [select Name, Body, BodyLength from Attachment where ParentId = :casevar.Id])         {         // Add to attachment file list         Messaging.Emailfileattachment efa = new Messaging.Emailfileattachment();         efa.setFileName(a.Name);         efa.setBody(a.Body);         fileAttachments.add(efa);         }         mail.setFileAttachments(fileAttachments);       //Send email         Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });          } }
81531
We had a small widget that allowed customers to share records that were set to a private sharing model in our community. Everything was rather simple and it would simply allow them to select users that were visible via Sharing Sets and create an __Share record in APEX.  I've been reported recently that an error is thrown but only on the community side of things. Nothing seems to be working where it was working. We are using    Customer Community Plus licenses.  The error being thrown is : System.TypeException: DML operation INSERT not allowed on &lt;Object&gt;__Share which seemed to indicate access not available on the object. That seems odd because they are able to interact with the object just fine in order to create/edit/delete them.  I looked up the Sharing Model (its private both internally and externally), I looked at the profile and their access and the sharing sets in the community. Like I said, they seem to interact fine with the objects when it comes to seeing the records and their right.  Additionally, standard license users can use the component fine and also share with community users without a problem. They also see the records as expected.  Am I missing an update or something that seem to make it so this doesn't work anymore? Anyone having trouble with this or encountered the same problem?
99911
I wrote the following trigger and I'm getting the error :     Illegal assignment from Schema.SObjectField to String   But I don't know how to fix it. I wrote a similar trigger before and didn't have any issues.   trigger AccountDuplicates on Account (before insert, before update) {  for (Account myaccount : Trigger.new) {         List &lt;Account&gt; dupes = [SELECT Name FROM Account WHERE Name = :(myaccount.Name)];          if (dupes.size() &gt; 0) {            myaccount.Duplicate_Account__c = Account.name;         }     } }   The purpose of the trigger - when a new account is created that matches the name of an existing account, put the existing account's name into the "Duplicate Account" field.