Search code examples
axaptadynamics-365-operations

Possibility to modify or extend code in D365FO to suppress thrown error


Original class function creates an SQL query and executes it. Since there is an syntax error in the query it throws an error. What's the correct way to achieve fixation? Class extension does not work, because CoC executes the complete original function.

originalFunction(..)
{
    createSomeSQLQueryWithSyntayErrorInIt();
    executeQuery();
}

The class in question is ReqDemPlanMissingForecastFiller. In method insertMissingDatesForecastEntries a direct SQL statement string is generated. The date variable nonFrozenForecastStartDate is added to the string, but is not escaped correctly as it seems.

If the SQL statement is executed, a syntax error occurs. If the statement is fixed, it can be executed e.g. in SQL Server Management Studio (SSMS).


Solution

  • In this specific case, based on your comments, you may be able to sidestep.

    Create a new class ReqDemPlanMissingForecastFiller_Fix extending ReqDemPlanMissingForecastFiller then copy/paste the erroneous function and correct the mistake.

    Create an extension class and change the newParameters static funcion.

    [ExtensionOf(classStr(ReqDemPlanMissingForecastFiller))]
    class ReqDemPlanMissingForecastFiller_Extention
    {
        public static ReqDemPlanMissingForecastFiller newParameters(
            ReqDemPlanCreateForecastDataContract    _dataContract,
            ReqDemPlanAllocationKeyFilterTmp        _allocationKeyFilter,
            ReqDemPlanTaskLoggerInterface           _logger = null)
        {
            ReqDemPlanMissingForecastFiller filler = next newParameters(_dataContract, _allocationKeyFilter, _logger);
            filler = new ReqDemPlanMissingForecastFiller_Fix(); //Throw away previous value    
            filler.parmDataContract(_dataContract);
            filler.parmAttributeManager(_dataContract.attributeManager());
            filler.parmAllocationKeyFilter(_allocationKeyFilter);
            filler.parmLogger(_logger);
            filler.init();    
            return filler;
        }
    }
    

    Code above was based on AX 2012 code. Stupid solution to a stupid problem.

    It goes almost without saying that you should report the problem to Microsoft.