function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
JoAnnC@IknowledgeJoAnnC@Iknowledge 

Problem with record submit from VF page

I have a custom object called Deal_Registrations__c that is used in a VF page to submit records that utlimately become leads in SFDC.  

 

Once the deal reg record is inserted, an after insert trigger drToLead fires and inserts a lead.  The trigger also is an after update and updates the associated lead or opportunity if the record is updated.  

There is another trigger, which writes the lead id to the deal registration and if the lead is updated writes any updates back to the deal registration record.  There is a corresponding trigger for the same actions on the opportunity. 
If I create or update a deal registration record from the Deal Registration tab, everything works fine.  I can update the DR record and write the changes back to the lead, update the lead and write the changes back to the DR record, convert the lead and the new oppty id is written to the DR record, update the Oppty and the DR is updated and update the DR record and have the oppty update.  
If I try to submit the same record from the VF page I created from http://tapp0.salesforce.com/apex/VFPage - I get an error on the trigger that is inserting the lead:  
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, drToLead: execution of AfterInsert caused by: System.DmlException: Insert failed. First exception on row 0; first error: UNKNOWN_EXCEPTION, invalid parameter value: [] Trigger.drToLead: line 35, column 1: []  
Here is the drToLead Trigger:  
trigger drToLead on Deal_Registration__c (after insert, after update) {

    List<Deal_Registration__c> drToLead = new List<Deal_Registration__c>(); 
        
     if(Trigger.isInsert){
        for(Deal_Registration__c drs : Trigger.new){
            drtoLead.add(drs);
            }
    
    List<Lead> leadsTocreate = new List<Lead>();
    Lead leadFromDR = new Lead();
    
    for(Deal_Registration__c dr2Lead : drToLead){
        leadFromDR.FirstName = dr2Lead.First_Name__c;
        leadFromDR.LastName = dr2Lead.Last_Name__c;
        leadFromDR.Company  = dr2Lead.Company__c;
        leadFromDR.City = dr2Lead.City__c;
        leadFromDR.State = dr2Lead.State__c;
        leadFromDR.PostalCode = dr2Lead.Zip__c;
        leadFromDR.Phone = dr2Lead.Phone__c;
        leadFromDR.Email = dr2Lead.Email__c;
        leadFromDR.Decision_Maker__c = dr2Lead.Decision_Maker__c;
        leadFromDR.Purchase_TimeFrame__c = dr2Lead.Time_Frame__c;
        leadFromDR.Budget_Established__c = dr2Lead.Budget__c;
        leadFromDR.Competitor__c = dr2Lead.Competitor__c;
        leadFromDR.DealRegistationID__c = dr2Lead.id;
        leadFromDR.Status = '3 - Sales Ready Lead (SRL)';
        leadFromDR.Type__c = 'Deal Registration';
        leadFromDR.isConverted = false;
        leadFromDR.Deal_Registration_Status__c = 'Submitted';

    }
    leadsToCreate.add(LeadFromDr);
    system.debug('DR ID is >>>>>>>>'+leadFromDR.dealRegistationID__c);
    insert leadsToCreate;
  }

   Map<String, Lead> lds2Update = new Map<String, Lead>();

   if(!controlTriggerRecursion.hasAlreadyUpdatedLead())
    if(Trigger.isUpdate){
        for(Deal_Registration__c du : Trigger.new){
            if(du.Opportunity_id__c == NULL){
                List<Lead> lds = [SELECT FirstName, LastName, Company, City, State, PostalCode, Decision_Maker__c,
                                    Purchase_TimeFrame__c, Budget_Established__c, Competitor__c 
                                    FROM Lead WHERE id = :du.Lead_ID__c];
            for(Lead l2u : lds){    
                l2u.PostalCode = du.Zip__c;
                l2u.Purchase_Timeframe__c = du.Time_Frame__c;
                l2u.State = du.State__c;
                l2u.Phone = du.Phone__c;
                l2u.LastName = du.Last_Name__c;
                l2u.FirstName = du.First_Name__c;
                l2u.Email = du.Email__c;
                l2u.Decision_Maker__c = du.Decision_Maker__c;
                l2u.Competitor__c = du.Competitor__c;
                l2u.Company = du.Company__c;
                l2u.City = du.City__c;

                lds2Update.put(du.id, l2u);
                
                }
            controlTriggerRecursion.setAlreadyUpdatedLead();
            update lds2Update.values();
            }
        }
    }
    
    Map<String, Opportunity> os2Update = new Map<String, Opportunity>();

    if(!controlTriggerRecursion.hasAlreadyUpdatedOppty())
    if(Trigger.isUpdate){
        for(Deal_Registration__c du : Trigger.new){
            if(du.Opportunity_ID__c <> NULL){
                List<Opportunity> opty = [SELECT id, Purchase_TimeFrame__c, Decision_Maker__c, Competitor__c, 
                                        Budget_Established__c
                                        FROM Opportunity WHERE id = :du.Opportunity_ID__c];
            for(Opportunity o2u : opty){    

                o2u.Purchase_TimeFrame__c = du.Time_Frame__c;
                o2u.Decision_Maker__c = du.Decision_Maker__c;
                o2u.Competitor__c = du.Competitor__c; 
                o2u.Budget_Established__c = du.Budget__c;
                
                os2Update.put(du.id, o2u);
                
                }
            controlTriggerRecursion.setAlreadyUpdatedOppty();
            update os2Update.values();
            }
        }
    }
}

 

And here is the VF Controller:  

 

public with sharing class drController {
  
  public Contact ptnrRep ;
  public Account partner {get;}
  public List<Lead> ptnrDealRegs = new List<Lead>();
  public List<Opportunity> ptnrOpptys = new List<Opportunity>();
  public Deal_Registration__c dealReg = NULL;
  public String repID;
  public Lead drLead = NULL;
 
  public String regFirst{get;set;}
  public String regLast{get;set;}
  public String regCompany{get;set;}
  public String regEmail{get;set;}
  public String regPhone{get;set;}
  public String regState{get;set;}
  public String regZip{get;set;}
  public String regBudget{get;set;}
  public String regCompetitor{get;set;}
  public String regCity{get;set;}
  public String timeOption{get;set;}
  public String decMaker{get;set;}
  
  
  Public drController (){
      ptnrRep = [SELECT id, FirstName, LastName, Email, Accountid, Account.Type FROM Contact 
              WHERE email =:ApexPages.currentPage().getParameters().get('id') limit 1];
      repID = ptnrRep.id;
  }
  
  public List<Lead> getDealRegs() {
    ptnrDealRegs = [SELECT id, FirstName, LastName, Phone, Email, Street, City, State, 

PostalCode, Country,Company,
                        Registered_VAR_Rep__c, Registered_VAR_Rep__r.Id, Status, 

Deal_Registration_Number__c, 
                        Purchase_Timeframe__c, Days_Until_Expiration__c, LastModifiedDate, 

Type__c, Registered_VAR_Rep__r.email,
                        DealRegistationID__c 
                    FROM Lead 
                    WHERE Registered_VAR_Rep__r.email = :ptnrRep.email AND isConverted=false 

];
    
    return ptnrDealRegs;
    
  }
  
  public List<Opportunity> getDealRegOpptys(){
    ptnrOpptys = [SELECT id, Name, AccountId, Account.Name, Registered_VAR_Rep__c, 

Registered_VAR_Rep__r.id,
                    stageName, Deal_Registration_Number__c, Purchase_Timeframe__c, 

Days_Until_Expiration__c,
                    LastModifiedDate, Lead_Type__c, Registered_VAR_Rep__r.email, 

Deal_Registration_ID__c
                    FROM Opportunity
                    WHERE Registered_VAR_Rep__r.email = :ptnrRep.email AND isClosed=false];
    return ptnrOpptys; 
  }

 public pageReference saveDealReg(){ 
    
    Deal_Registration__c dealReg = new Deal_Registration__c();
    dealReg.First_Name__c= regFirst;
    dealReg.Last_Name__c = regLast;
    dealReg.Company__c = regCompany;
    dealReg.Phone__c = regPhone;
    dealReg.Email__c = regEmail;
    dealReg.City__c = regCity;
    dealReg.State__c = regState;
    dealReg.Zip__c = regZip;
    dealReg.Time_Frame__c = timeOption;
    dealReg.Budget__c = regBudget;
    dealReg.Decision_Maker__c = decMaker;

    
    insert dealReg;

    pageReference thankYou = new PageReference('/apex/thankYou');
    thankYou.setRedirect(true);
    return thankYou;
 }

 
}

 

I'm hoping someone has an id as to why this is failing. 

 

Thanks,

 

JoAnn

 

pmitchellpmitchell

Have you made any progress with this? I was planning to do something very similar (syncronizing a contact with a custom object and vice versa) soon, and was hoping to avoid potential security-related problems; I'll post again if I figure out anything relevant.