You need to sign in to do that
Don't have an account?
Lionel Kamdem
Moving Apex Trigger From Sandbox To Production And Getting Error During Apex Testing
Hi
I am moving an Apex Trigger from Sandbox to Production and this is the error I am getting in the Apex Test:
System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Record Type ID: this ID value isn't valid for the user: 0120v000000TPT9AAO: [RecordTypeId]
Stack Trace: Class.RequireRejectionCommentTest.generateAndSubmitObject: line 166, column 1 Class.RequireRejectionCommentTest.testApprovalWithoutComment: line 49, column 1
It's telling me as the Salesforce Admin I do not have access to this record but I do I checked and I have access to these record types.
This is the code right here:
I think it might have to do with the way I reference the Record Type as an ID.
instead of referencing it as RecordTypeID how would I reference it by the RecordTypeName instead?
I am moving an Apex Trigger from Sandbox to Production and this is the error I am getting in the Apex Test:
System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Record Type ID: this ID value isn't valid for the user: 0120v000000TPT9AAO: [RecordTypeId]
Stack Trace: Class.RequireRejectionCommentTest.generateAndSubmitObject: line 166, column 1 Class.RequireRejectionCommentTest.testApprovalWithoutComment: line 49, column 1
It's telling me as the Salesforce Admin I do not have access to this record but I do I checked and I have access to these record types.
This is the code right here:
testBatchIS.add(new Case(Hours__c=15.12,RecordTypeId='0120v000000TPT9AAO',AccountId='0017000001XpguKAAR', Status='New',Concession_Category__c='Scope Change', Explanation_for_Business_Reason_Choice__c='stuff'));
I think it might have to do with the way I reference the Record Type as an ID.
instead of referencing it as RecordTypeID how would I reference it by the RecordTypeName instead?
Replace 'DeveloperNameOfRecordType' with Case Recortype Name
Id RecordTypeIdCase= Schema.SObjectType.Case.getRecordTypeInfosByName().get('DeveloperNameOfRecordType').getRecordTypeId();
and use RecordTypeIdCase in replace of '0120v000000TPT9AAO'
All Answers
Replace 'DeveloperNameOfRecordType' with Case Recortype Name
Id RecordTypeIdCase= Schema.SObjectType.Case.getRecordTypeInfosByName().get('DeveloperNameOfRecordType').getRecordTypeId();
and use RecordTypeIdCase in replace of '0120v000000TPT9AAO'
You are most likely facing this issue because of this in your test class: RecordTypeId='0120v000000TPT9AAO'. Record Ids
are not the same across sandboxes and are different. So it seems this Record Type Id doesn't exist in Production at all.
You should be fetching the RecordTypeId based on what you want to create in your test class. There are a couple of ways to
do so, you can refer to the following links to get those done:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject_describe.htm
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_class_Schema_RecordTypeInfo.htm
Aside from this, you should also not hard code record ids in your test class, instead create relevant test data within the
test class and refer those. You can take a look at How do I write an Apex unit test? to get more details around writing
unit tests please refer to the following link:
https://trailhead.salesforce.com/en/content/learn/modules/apex_testing/apex_testing_intro
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_unit_tests.htm
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks and Regards,
Deepali Kulshrestha