#testing #salesforce #stack-trace #apex #test-coverage
#тестирование #salesforce #трассировка стека #apex #тестовое покрытие
Вопрос:
Когда я пытаюсь запустить свой тестовый класс, я получаю следующую ошибку.
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, заказ и строку заказа. Я не уверен, почему я получаю эту ошибку. Может кто-нибудь, пожалуйста, помочь мне с этим и сообщить, что я делаю не так? Заранее спасибо.
Мой код тестового класса выглядит следующим образом
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;
Комментарии:
1. Привет, Акшай установил » обновить стандартную цену»; попробуйте «вставить стандартную цену»;
2. @AsheeshSahu Нет, Ашиш, это не сработало.
3. не могли бы вы показать код этого метода (Test.getStandardPricebookId() ).
Ответ №1:
Вам не нужен код создания экземпляра объекта Pricebook2. Избавьтесь от этого кода и используйте приведенный ниже код.
standardPrice.Pricebook2Id = Test.getStandardPricebookId().
Сделайте то же самое для ord.Pricebook2Id также.