Invocablemethod Not Creating Records in Apex Class

0 votes

I am a beginner in writing apex but everything does seem to be running smoothly separately in an executable window when I split apart the class I created below, but when I'm running this from within a flow it doesn't seem to create the records at all. The methods that delete records seem to be working, but neither of the methods to create the records is working it seems.

public without sharing class CreateQuoteProducts_NewOrRenewal{
    @invocableMethod
    public static void DeleteQuoteProductsMRF(List<Id> OrderId){
        List<Quote_Product_MRF__c> QuoteProductsMRF = [SELECT id from Quote_Product_MRF__c WHERE Order__c in : OrderId];
        if(!QuoteProductsMRF.isEmpty()){
            delete QuoteProductsMRF;
        }
    }
    public static void DeleteQuoteProductsOTF(List<Id> OrderId){
        List<Quote_Product__c> QuoteProductsOTF = [SELECT id from Quote_Product__c WHERE Order__c in : OrderId];
        if(!QuoteProductsOTF.isEmpty()){
            delete QuoteProductsOTF;
        }
    }

/* ---START--- Create Quote Products MRF ---START--- */

    public static void CreateQuoteProductsMRF(List<Id> OrderId){
        List<AggregateResult> nrqpmrfOP = [
        SELECT 

        count(Id) ct,
        Order__c ord,
        sum(Total_Monthly_Recurring_Fees__c) stmr,
        sum(Monthly_Recurring_Fees__c) mr,
        sum(Discount_MRF__c) dmr

        FROM Order_Location_Package__c 
        WHERE Order__c in : OrderId AND Package__r.Monthly_Recurring_Price__c != null
        GROUP BY Package__c, Order__c];


        List<Quote_Product_MRF__c> nrqpmrf = New List<Quote_Product_MRF__c>();
        for(AggregateResult ar : nrqpmrfOP){


        Quote_Product_MRF__c QuoteProductMRF = New Quote_Product_MRF__c();
        QuoteProductMRF.Quantity__c = (Decimal)ar.get('ct');
        QuoteProductMRF.Order__c = (String)ar.get('ord');
        QuoteProductMRF.Total_Monthly_Recurring_Fees__c = (Decimal)ar.get('stmr');
        QuoteProductMRF.Monthly_Recurring_Fees__c = (Decimal)ar.get('mr');
        QuoteProductMRF.Discount_MRF__c = (Decimal)ar.get('dmr');
        QuoteProductMRF.Product_Type__c = 'Package';

        nrqpmrf.add(QuoteProductMRF);
        } 

        Insert nrqpmrf;
    }
/* ---END--- Create Quote Products MRF ---END--- */

/* ---START--- Create Quote Products OTF ---START--- */

    public static void CreateQuoteProductsOTF(List<Id> OrderId){
        List<AggregateResult> nrqpmrfOP = [
        SELECT 

        count(Id) ct,
        Order__c ord,
        sum(Total_One_Time_Fees__c) stmr,
        sum(One_Time_Fees__c) mr,
        sum(Discount_OTF__c) dmr

        FROM Order_Location_Package__c 
        WHERE Order__c in : OrderId AND Package__r.One_Time_Price__c != null
        GROUP BY Package__c, Order__c];


        List<Quote_Product__c> nrqpotf = New List<Quote_Product__c>();
        for(AggregateResult ar : nrqpmrfOP){


        Quote_Product__c QuoteProductOTF = New Quote_Product__c();
        QuoteProductOTF.Quantity__c = (Decimal)ar.get('ct');
        QuoteProductOTF.Order__c = (String)ar.get('ord');
        QuoteProductOTF.Total_One_Time_Fees__c = (Decimal)ar.get('stmr');
        QuoteProductOTF.One_Time_Fees__c = (Decimal)ar.get('mr');
        QuoteProductOTF.Discount_OTF__c = (Decimal)ar.get('dmr');
        QuoteProductOTF.Product_Type__c = 'Package';

        nrqpotf.add(QuoteProductOTF);
        } 

        Insert nrqpotf;
    }
/* ---END--- Create Quote Products ORD ---END--- */

}

Test Class Below

@isTest
private class CreateQuoteProducts_NewOrRenewalTest {

    private static testMethod void doTest() {
        
        Account testAcc  = new Account ();          
                testAcc.Name = 'Test Account';
                testAcc.Primary_Vertical__c = 'Multifamily Housing';
                testAcc.Total_Locations_Owned_Managed__c = 1;
                
                insert testAcc;


        Opportunity testOpp  = new Opportunity ();
                testOpp.Name = 'Test Opportunity';
                testOpp.AccountId = testAcc.Id;
                testOpp.Opportunity_Source__c = 'Sales Generated';
                testOpp.Type = 'New';
                testOpp.StageName = 'Contract';
                testOpp.Number_of_locations_for_opportunity__c = 1;
                testOpp.Amount = 0;
                testOpp.Implementation__c = 0;
                testOpp.CloseDate = System.today() + 5;
                testOpp.Deal_Confidence__c = 100;
                
                insert testOpp;

        Package__c testPackage  = new Package__c ();
                testPackage.Name = 'Test Package';
                testPackage.Package_Type__c = 'Website Package';
                testPackage.Status__c = 'Active';
                testPackage.One_Time_Price__c = String.ValueOf(200);
                testPackage.Monthly_Recurring_Price__c = String.ValueOf(100);
                
                insert testPackage;


        Order_Sheet__c testOrder  = new Order_Sheet__c ();
                testOrder.Opportunity__c = testOpp.id;
                
                insert testOrder;


        Order_New_Location__c testOrderLocation  = new Order_New_Location__c ();
                testOrderLocation.Order_Sheet__c = testOrder.id;
                testOrderLocation.Name = 'Test Location';
                
                insert testOrderLocation;


        Order_Location_Package__c testOrderPackage  = new Order_Location_Package__c ();
                testOrderPackage.Order__c = testOrder.Id;
                testOrderPackage.New_Location_Name__c = testOrderLocation.Id;
                testOrderPackage.Package__c = testPackage.Id;
                
                insert testOrderPackage;


/* --- Delete Quote Product MRF Test --- */

        Test.startTest();
        /* --- Create Quote Product MRF--- */
        Quote_Product_MRF__c testQPMRF  = new Quote_Product_MRF__c ();
                testQPMRF.Order__c = testOrder.id;
                
                insert testQPMRF;

        /* --- Run Delete Method--- */
        CreateQuoteProducts_NewOrRenewal.DeleteQuoteProductsMRF(new List<Id>{testOrder.id});
        
        /* --- Query for QP OTF--- */
        list<Quote_Product_MRF__c>queriedQPMRF = [Select Id FROM Quote_Product_MRF__c WHERE Order__c = :testOrder.id];
        
        /* --- Checks for 0 records --- */
        system.assertEquals(0, queriedQPMRF.size());



/* --- Delete Quote Product OTF Test --- */

        /* --- Create Quote Product OTF--- */
        Quote_Product__c testQPOTF  = new Quote_Product__c ();
                testQPOTF.Order__c = testOrder.id;
                
                insert testQPOTF;

        /* --- Run Delete Method--- */
        CreateQuoteProducts_NewOrRenewal.DeleteQuoteProductsOTF(new List<Id>{testOrder.id});
        
        /* --- Query for QP OTF--- */
        list<Quote_Product__c>queriedQPOTF = [Select Id FROM Quote_Product__c WHERE Order__c = :testOrder.id];
        
        /* --- Checks for 0 records --- */
        system.assertEquals(0, queriedQPOTF.size());


 /* --- Create Quote Product MRF Test --- */


        /* --- Run Create Method--- */
        CreateQuoteProducts_NewOrRenewal.CreateQuoteProductsMRF(new List<Id>{testOrder.id});
        
        /* --- Query for QP OTF--- */
        list<Quote_Product_MRF__c>queriedQPMRFCreated = [Select Id FROM Quote_Product_MRF__c WHERE Order__c = :testOrder.id];
        
        /* --- Checks for 1 record --- */
        system.assertEquals(1, queriedQPMRFCreated.size());



 /* --- Create Quote Product OTF Test --- */


        /* --- Run Create Method--- */
        CreateQuoteProducts_NewOrRenewal.CreateQuoteProductsOTF(new List<Id>{testOrder.id});
        
        /* --- Query for QP OTF--- */
        list<Quote_Product__c>queriedQPOTFCreated = [Select Id FROM Quote_Product__c WHERE Order__c = :testOrder.id];
        
        /* --- Checks for 1 record --- */
        system.assertEquals(1, queriedQPOTFCreated.size());

        Test.stopTest();


    }
}

As mentioned above, if I run the below apex in an executable window and replace the ID with and actual Order Id, it does successfully create the records, just not when I run the full class from flow.

    List<AggregateResult> nrqpmrfOP = [
    SELECT 

    count(Id) ct,
    Order__c ord,
    sum(Total_Monthly_Recurring_Fees__c) stmr,
    sum(Monthly_Recurring_Fees__c) mr,
    sum(Discount_MRF__c) dmr

    FROM Order_Location_Package__c 
    WHERE Order__c in : OrderId AND Package__r.Monthly_Recurring_Price__c != null
    GROUP BY Package__c, Order__c];


    List<Quote_Product_MRF__c> nrqpmrf = New List<Quote_Product_MRF__c>();
    for(AggregateResult ar : nrqpmrfOP){


    Quote_Product_MRF__c QuoteProductMRF = New Quote_Product_MRF__c();
    QuoteProductMRF.Quantity__c = (Decimal)ar.get('ct');
    QuoteProductMRF.Order__c = (String)ar.get('ord');
    QuoteProductMRF.Total_Monthly_Recurring_Fees__c = (Decimal)ar.get('stmr');
    QuoteProductMRF.Monthly_Recurring_Fees__c = (Decimal)ar.get('mr');
    QuoteProductMRF.Discount_MRF__c = (Decimal)ar.get('dmr');
    QuoteProductMRF.Product_Type__c = 'Package';

    nrqpmrf.add(QuoteProductMRF);
    } 

    Insert nrqpmrf;
Mar 28, 2022 in SalesForce by surbhi
• 3,820 points
760 views

1 answer to this question.

0 votes

According to the documentation (developer.salesforce.com/docs/atlas.en-us.apexcode.meta/...), each class can only have one InvocableMethod. This means that just the first delete method is called in your flow, not the others. If you want to call each method individually, you'll need to create a class for each. Also, learn how to add days to date time in Salesforce Apex.

answered Mar 29, 2022 by CoolCoder
• 4,420 points

Related Questions In SalesForce

0 votes
1 answer

Apex Class and Apex Trigger is invisible in Salesforce Developer Console

You'll need to create a new developer ...READ MORE

answered Mar 8, 2022 in SalesForce by anonymous

edited Jun 19, 2023 by Khan Sarfaraz 2,675 views
0 votes
0 answers

Salesforce Apex SingleEmailMessage with Template to User not contact

Im trying to send an email in ...READ MORE

Feb 28, 2022 in SalesForce by surbhi
• 3,820 points
3,018 views
0 votes
1 answer

Json response to be deserialized in Apex salesforce lightning

Because some fields in Apex Salesforce are ...READ MORE

answered Mar 2, 2022 in SalesForce by surbhi
• 3,820 points
3,530 views
0 votes
1 answer

Check string value in salesforce test class

Because the field objCase.standard_or_nonstandard_c is set to ...READ MORE

answered Mar 3, 2022 in SalesForce by CoolCoder
• 4,420 points
1,619 views
+2 votes
2 answers

Salesforce Interview questions

Here are some questions very important for ...READ MORE

answered Jan 11, 2019 in Career Counselling by Suresh
• 720 points
3,342 views
0 votes
1 answer

How to connect to salesforce from tableau?

Hi, follow these steps to connect to Salesforce: 1. ...READ MORE

answered Mar 25, 2019 in Tableau by Cherukuri
• 33,030 points
1,017 views
0 votes
1 answer

Power BI - Salesforce

Hi, Follow below steps: 1. Go to Data source. 2. ...READ MORE

answered Mar 25, 2019 in Power BI by Cherukuri
• 33,030 points
710 views
0 votes
2 answers

What is the best training for Salesforce ADM-201 Exam?

Hi @Vardhan, I took Edureka's Salesforce Online Training, ...READ MORE

answered Jun 3, 2021 in Others by Jaya
• 140 points

edited Dec 22, 2021 by Soumya 707 views
0 votes
2 answers

Creating Many to Many relationship between the accounts records in salesforce

In Salesforce, it is not possible to ...READ MORE

answered Jun 19, 2023 in SalesForce by Khan Sarfaraz
• 700 points
1,276 views
0 votes
1 answer

How can I rename my Apex Class name in Salesforce

If you wanted to do it through ...READ MORE

answered Apr 1, 2022 in SalesForce by CoolCoder
• 4,420 points

edited Jun 19, 2023 by Khan Sarfaraz 4,298 views
webinar REGISTER FOR FREE WEBINAR X
REGISTER NOW
webinar_success Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP