I've Updated my code, and I'm still not getting the additional records inserted. My goal is; once an opportunity is closed a project is created. Once the project is created Credit Details (OpportunityLineItems) are added to the project. Any help on why I'm not getting this to happen is definitely appreciated. I've posted the code below.

trigger AddProject on Opportunity (after insert, after update) {

list<Project__c> lstProject = new List<Project__c>();
list<CreditDetail__c> lstCD = new List<CreditDetail__c>();
list<map<Date,CreditDetail__c>> lstmapCreditDetail = new List<map<Date,CreditDetail__c>>();

    list<Opportunity> lstOpp = [Select id, Accountid, CloseDate, StageName, Generate_Projects__c, RecordTypeId,(Select Id, ProductID__c,Jurisdiction__c,Quantity,ServiceDate From Opportunitylineitems) From Opportunity

    for(opportunity opp : trigger.new){
        if(opp.Generate_Projects__c == true && opp.StageName =='7 - Closed Won' && opp.RecordTypeId == '012M00000004qsD') {
            lstProject.add(new Project__c(Opportunity__c = opp.Id, Project_Stage__c = '1 - Awaiting Start - Internal', Contract__c = opp.Contract__c, Account__c = opp.AccountId, Kickoff_Date__c = opp.CloseDate, Program_Type__c = 'Research & Development', Name = opp.name+'-'+'Research & Development'));


    insert lstProject;

**for (Integer i = 0; i < lstOpp.size(); i++) {
        lstmapCreditDetail.add(new map<Date,CreditDetail__c>());
        if (lstOpp[i].StageName == 'Closed Won' && lstOpp[i].RecordType.name == 'Corporate Sales' && lstOpp[i].Projects_Created__c == false && 
            lstOpp[i].Generate_Projects__c == true){

     for (integer j = 0; j < lstOpp[i].OpportunityLineItems.size(); j++){
                if (lstmapCreditDetail[i].get(lstOpp[i].OpportunityLineItems[j].ServiceDate) == null) {
                       new CreditDetail__c(Project__c =lstmapCreditDetail[i].get(lstOpp[i].OpportunityLineItems[j].ServiceDate).Id,
                                            Name = 'Test Credit Detail',
                                            Beneficiary__c = 'LLC',
                                            Jurisdiction__c = 'AL',
                                            Tax_Year__c = '2014'));
insert lstCD;

The act of inserting (via the insert DML operation) will place the generated id in all members of the list passed to insert.

Hence, lstproject will have the id(s) populated and ready for the next statement

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.