可以修改或扩展 D365FO 中的代码以抑制抛出的错误
Possibility to modify or extend code in D365FO to suppress thrown error
原始 class 函数创建一个 SQL 查询并执行它。
由于查询中存在语法错误,因此会引发错误。实现固定的正确方法是什么? Class 扩展不起作用,因为 CoC 执行完整的原始功能。
originalFunction(..)
{
createSomeSQLQueryWithSyntayErrorInIt();
executeQuery();
}
有问题的 class 是 ReqDemPlanMissingForecastFiller
。在方法 insertMissingDatesForecastEntries
中生成一个直接的 SQL 语句字符串。日期变量 nonFrozenForecastStartDate
已添加到字符串中,但并未像看起来那样正确转义。
如果执行SQL语句,会出现语法错误。如果语句是固定的,它可以被执行,例如在 SQL Server Management Studio (SSMS) 中。
在这种特定情况下,根据您的评论,您或许可以回避。
创建一个新的 class ReqDemPlanMissingForecastFiller_Fix
扩展 ReqDemPlanMissingForecastFiller
然后 copy/paste 错误的函数并更正错误。
创建扩展 class 并更改 newParameters
静态函数。
[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;
}
}
以上代码基于 AX 2012 代码。愚蠢问题的愚蠢解决方案。
不用说,您应该向 Microsoft 报告该问题。
@Jan B. Kjeldsen 的回答描述了如何在不涉及 Microsoft 的情况下解决特定案例。
由于 overlayering 不再可行,解决方案涉及复制相当多的标准代码。这带来了自身的风险,因为 Microsoft 对该代码的未来更改不会反映在复制的代码中。
虽然不能总是避免,但应首先评估其他选项:
- 如@Jan B. Kjeldsen 所述,标准代码中的错误应报告给 Microsoft(请参阅 Get support for Finance and Operations apps or Lifecycle Services (LCS))。这使他们能够修复错误。
- 专业人士:无需进一步工作。
- 缺点:Microsoft 可能会拒绝修复或需要很长时间才能实施。
- 如果与此特定情况不同,问题不是彻头彻尾的错误,而是缺少扩展选项,可以与 Microsoft 一起创建 extensibility request。然后他们将添加一个扩展选项。
- 专业人士:无需进一步工作。
- 缺点:Microsoft 可能会拒绝扩展性请求或需要很长时间才能实现。
- 对于错误和缺少的扩展选项,Microsoft 还提供了 Community Driven Engineering 程序 (CDE)。这使您能够直接通过特殊的 Microsoft 托管存储库对标准代码进行更改,其中标准代码未锁定以进行更改。
- Pro:涉及 Microsoft 的所有选项中最灵活、最快速。
- 缺点:您必须自己完成工作。 Microsoft 可能会拒绝更改。更改在 GA 版本中可用还需要一些时间。
您也可以考虑采用混合方法:要获得快速解决方案,请复制标准代码并根据需要对其进行自定义。但也会报告错误,创建扩展性请求或在 CDE 程序中自行修复。当更改在标准代码中可用时,您可以再次删除复制的代码。
原始 class 函数创建一个 SQL 查询并执行它。 由于查询中存在语法错误,因此会引发错误。实现固定的正确方法是什么? Class 扩展不起作用,因为 CoC 执行完整的原始功能。
originalFunction(..)
{
createSomeSQLQueryWithSyntayErrorInIt();
executeQuery();
}
有问题的 class 是 ReqDemPlanMissingForecastFiller
。在方法 insertMissingDatesForecastEntries
中生成一个直接的 SQL 语句字符串。日期变量 nonFrozenForecastStartDate
已添加到字符串中,但并未像看起来那样正确转义。
如果执行SQL语句,会出现语法错误。如果语句是固定的,它可以被执行,例如在 SQL Server Management Studio (SSMS) 中。
在这种特定情况下,根据您的评论,您或许可以回避。
创建一个新的 class ReqDemPlanMissingForecastFiller_Fix
扩展 ReqDemPlanMissingForecastFiller
然后 copy/paste 错误的函数并更正错误。
创建扩展 class 并更改 newParameters
静态函数。
[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;
}
}
以上代码基于 AX 2012 代码。愚蠢问题的愚蠢解决方案。
不用说,您应该向 Microsoft 报告该问题。
@Jan B. Kjeldsen 的回答描述了如何在不涉及 Microsoft 的情况下解决特定案例。
由于 overlayering 不再可行,解决方案涉及复制相当多的标准代码。这带来了自身的风险,因为 Microsoft 对该代码的未来更改不会反映在复制的代码中。
虽然不能总是避免,但应首先评估其他选项:
- 如@Jan B. Kjeldsen 所述,标准代码中的错误应报告给 Microsoft(请参阅 Get support for Finance and Operations apps or Lifecycle Services (LCS))。这使他们能够修复错误。
- 专业人士:无需进一步工作。
- 缺点:Microsoft 可能会拒绝修复或需要很长时间才能实施。
- 如果与此特定情况不同,问题不是彻头彻尾的错误,而是缺少扩展选项,可以与 Microsoft 一起创建 extensibility request。然后他们将添加一个扩展选项。
- 专业人士:无需进一步工作。
- 缺点:Microsoft 可能会拒绝扩展性请求或需要很长时间才能实现。
- 对于错误和缺少的扩展选项,Microsoft 还提供了 Community Driven Engineering 程序 (CDE)。这使您能够直接通过特殊的 Microsoft 托管存储库对标准代码进行更改,其中标准代码未锁定以进行更改。
- Pro:涉及 Microsoft 的所有选项中最灵活、最快速。
- 缺点:您必须自己完成工作。 Microsoft 可能会拒绝更改。更改在 GA 版本中可用还需要一些时间。
您也可以考虑采用混合方法:要获得快速解决方案,请复制标准代码并根据需要对其进行自定义。但也会报告错误,创建扩展性请求或在 CDE 程序中自行修复。当更改在标准代码中可用时,您可以再次删除复制的代码。