Overview
Salesforce Issue: https://github.com/SalesforceFoundation/NPSP/issues/7307
This has been raised by the community with Salesforce
Starting September 2025, the Salesforce Foundation began pushing an update to the Non-Profit Success Pack, releasing version 3.236. We are seeing a some failures appear when MoveData is updating Opportunities in organisations with this version installed. We also note that organisation are also being moved to Salesforce' Winter 26 release which may also be a factor.
You can determine if you have encountered this issue by opening up a failed notification. You will have a status of Failed
and a message noting Unsuccessful response from Salesforce
. Navigate to an Execution tab and you should see a failure message noting:
Upsert failed. First exception on row 0 with id 006S900000FWOzRIAX; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, npsp.TDTM_Opportunity: execution of AfterUpdate caused by: System.UnexpectedException: Cannot invoke "common.api.soap.SoapApiType.name()" because the return value of "common.api.soap.ApiType.getSoapApiType()" is null External entry point (System Code): []
Proactive Resolution
Some customers will be ok seeing if the issue affects them and if so, making the recommended change and reprocessing failures. Others will need to ensure there are no significant failures in advance.
If you wish to proactively managing this risk, we would suggest you make the below change to the trigger configuration ahead of time.
Resolution
Disclaimer: These configuration changes are provided as guidance to resolve known compatibility issues. Customers implement these modifications at their own risk. We recommend testing in a sandbox environment first and consulting with your Salesforce partner before making production changes.
To mitigate this issue, we have determined that the NPSP trigger CRLP_Rollup_TDTM
should be moved to asynchronous execution. We aren't sure why this is causing the issue but have had success with our affected customers by making this change.
This can be done one of the two following way:
Disable via Interface
Open "Trigger Handlers" via the App Launcher in Salesforce
Select the "All" List View
Find the entry with the class named
CRLP_Rollup_TDTM
on theOpportunity
object.
Mark
User Managed
as trueEither:
Mark
Active
as false; orMark
Active
as true and markAsynchronous After Events
as true
Disable via Developer Console
You can run the below script to force the trigger to run outside the MoveData transaction:
List<npsp__Trigger_Handler__c> rollupList = [
SELECT Id, Name, npsp__Object__c, npsp__Class__c, npsp__Asynchronous__c
FROM npsp__Trigger_Handler__c
WHERE npsp__Class__c = 'CRLP_Rollup_TDTM' AND npsp__Object__c = 'Opportunity'
];
if (rollupList.size() == 1) {
npsp__Trigger_Handler__c rollup = rollupList[0];
if (rollup.npsp__Asynchronous__c != true) {
rollup.npsp__Asynchronous__c = true;
rollup.npsp__User_Managed__c = true;
update rollup;
}
}
To run this script, open the Developer Console, select "Debug" / "Open Execute Anonymous Window", paste the above code into the window and click "Execute",