Salesforce Invocablemethod未在Apex类中创建记录

Salesforce Invocablemethod未在Apex类中创建记录,salesforce,apex,salesforce-development,salesforce-developer,Salesforce,Apex,Salesforce Development,Salesforce Developer,我对编写Apex相当陌生,但当我拆分下面创建的类时,在可执行窗口中,每件事情似乎都在顺利运行,但当我从流中运行时,它似乎根本不会创建记录。删除记录的方法似乎正在工作,但创建记录的两种方法似乎都没有工作 非常感谢任何帮助或指导 public without sharing class CreateQuoteProducts_NewOrRenewal{ @invocableMethod public static void DeleteQuoteProductsMRF(List<

我对编写Apex相当陌生,但当我拆分下面创建的类时,在可执行窗口中,每件事情似乎都在顺利运行,但当我从流中运行时,它似乎根本不会创建记录。删除记录的方法似乎正在工作,但创建记录的两种方法似乎都没有工作

非常感谢任何帮助或指导

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--- */

}
下面是测试类

@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();


    }
}
如上所述,如果我在一个可执行窗口中运行下面的apex,并用和实际订单ID替换ID,它确实成功地创建了记录,只是在我从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;

按照developer.salesforce.com/docs/atlas.en us.apexcode.meta/….文档中的规定,按类只能有1个InvocableMethod。这意味着您的流只调用第一个delete方法,而不调用其他方法。如果需要调用每个方法,那么需要为每个方法创建一个类。也许流程的截图会有所帮助Bartheleway

您能告诉我们订单、位置、包装的共享设置是什么吗?您应该指定您的类是使用共享还是不使用共享来运行,以避免混淆。谢谢,Bartheleway!我在上面做了更新-应该没有文档中指定的sharinga,按类只能有1个InvocableMethod。这意味着您的流只调用第一个delete方法,而不调用其他方法。如果需要调用每个方法,那么需要为每个方法创建一个类。也许流的截图会有所帮助。啊!这很有道理,谢谢你指出这一点。我会把它们分成不同的类。非常感谢你对巴特威的帮助!