【问题标题】:Salesforce first error: INVALID_CROSS_REFERENCE_KEY, Entity not availableSalesforce 第一个错误:INVALID_CROSS_REFERENCE_KEY,实体不可用
【发布时间】:2020-10-14 08:37:56
【问题描述】:

当我尝试运行我的测试类时,出现以下错误。

System.DmlException: Update failed. First exception on row 0 with id 8023B000000ekyaQAA; first error: INVALID_CROSS_REFERENCE_KEY, Entity not available: [PricebookEntryId]

在调试日志的堆栈跟踪中,我收到以下消息

Class.OBOrderLineItemCreate.updateObjectMethod: line 367, column 1

我已经创建了产品并参考了标准价格手册。并创建了 Pricebookentry、Order 和 Order 行项目。我不确定为什么会收到此错误。谁能帮我解决这个问题,让我知道我做错了什么?提前致谢。

我的测试类代码如下

Product2 prod = new Product2();
        prod.Name                = 'Inb Enterprise';
        prod.Description         = 'Annual subscription,80 topics, 40,000 company locations';
        prod.productCode         = 'ABC';
        prod.Service_Type__c     = 'Inb';
        prod.OB_Sub_Type_Name__c = 'Inb';
        prod.isActive            = true;
        insert prod;

        Pricebook2 standardPricebook = new Pricebook2(
            Id = Test.getStandardPricebookId(),
            IsActive = true
        );

        update standardPricebook;

        standardPricebook = [SELECT Id, IsStandard FROM Pricebook2 WHERE Id = :standardPricebook.Id];


        //Id pricebookId = Test.getStandardPricebookId();
        //Test.startTest();
        PricebookEntry standardPrice = new PricebookEntry();
        standardPrice.Pricebook2Id = standardPricebook.Id;
        standardPrice.Product2Id = prod.Id;
        standardPrice.UnitPrice = 10000;
        standardPrice.IsActive = true;
        insert standardPrice;


        Order ord                       = new Order();
        ord.Name                        = 'Test Order';
        ord.AccountId                   = acc.Id;
        ord.Pricebook2Id                = standardPricebook.Id;
        ord.Customer_Success_Manager__c = am.Id;
        ord.Agency_Name__c              = agc.Id;
        ord.OpportunityId               = opp.Id;
        ord.Purchase_Order__c           = '783983';
        ord.EffectiveDate               = Date.today();
        ord.Status                      = 'Draft';
        ord.OBSyncStatus__c             = 'Inactive';
        ord.End_Date__c                 = Date.today();
        insert ord;

        OrderItem oli                = new OrderItem();
        oli.OrderId                  = ord.Id;
        oli.PricebookEntryId         = standardPrice.Id;
        oli.Quantity                 = 5;
        oli.UnitPrice                = 35;
        oli.OBSyncStatus__c          = 'Inactive';
        oli.Line_Item_Start_Date__c  = Date.Today();
        oli.Line_Item_End_Date__c    = Date.Today();
        oli.Bonus_Units__c           = 25;
        oli.Geography__c             = 'US';
        oli.Unique_Line_Item_Name__c = 'Inb Order';
        insert oli;

【问题讨论】:

  • 嗨 Akshay insted of " update standardPricebook; " try " insert standardPricebook; "
  • @AsheeshSahu No Asheesh,那没用。
  • 能否请您显示此(Test.getStandardPricebookId())方法的代码。

标签: testing salesforce stack-trace apex test-coverage


【解决方案1】:

您不需要实例化 Pricebook2 对象的代码。摆脱该代码并使用下面的代码。

standardPrice.Pricebook2Id = Test.getStandardPricebookId(). 

对 ord.Pricebook2Id 也做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多