重写Acumatica的CopyTask方法时出现签名不兼容错误
Acumatica CopyTask方法重写签名不兼容问题解决
问题场景
尝试重写Acumatica的CopyTask方法,代码实现如下:
public delegate PMTask CopyTaskDelegate(PMTask task, Int32 ProjectID, DefaultFromTemplateSettings settings); [PXOverride] public PMTask CopyTask(PMTask task, Int32 ProjectID, DefaultFromTemplateSettings settings, CopyTaskDelegate baseMethod) { return baseMethod(task,ProjectID,settings); }
编译时触发错误:
标记了[PXOverride]的图扩展中的PX.Objects.PM.PMTask CopyTask(PX.Objects.PM.PMTask, Int32, PX.Objects.PM.DefaultFromTemplateSettings, CopyTaskDelegate)方法签名与原方法不兼容。
修复方案
Acumatica中使用[PXOverride]重写方法时,委托定义和重写方法的签名必须与原方法严格匹配,具体修正步骤如下:
对齐原方法签名
Acumatica标准PMProjectEntry图中CopyTask的签名为:public virtual PMTask CopyTask(PMTask task, int projectID, DefaultFromTemplateSettings settings)需确保委托和重写方法的参数类型、顺序、数量完全一致,注意
Int32与int虽为C#别名,但建议统一使用原方法的int写法。修正代码结构
委托必须定义在图扩展类内部,重写方法参数需遵循「原方法参数在前,委托参数最后」的规则,修正后的代码示例:public class PMProjectEntryExt : PXGraphExtension<PMProjectEntry> { // 委托签名与原方法完全匹配 public delegate PMTask CopyTaskDelegate(PMTask task, int projectID, DefaultFromTemplateSettings settings); [PXOverride] public PMTask CopyTask(PMTask task, int projectID, DefaultFromTemplateSettings settings, CopyTaskDelegate baseMethod) { // 可在此添加自定义逻辑 PMTask copiedTask = baseMethod(task, projectID, settings); // 示例:修改复制后的任务字段 // copiedTask.Description = "自定义复制任务"; return copiedTask; } }关键注意事项
- 委托需放在图扩展类的作用域内,不能定义在外部
[PXOverride]特性必须正确标记在重写方法上- 所有参数的大小写、命名需与原方法保持一致(如
projectID而非ProjectID)
内容的提问来源于stack exchange,提问作者Xavier LARTEM
相关产品推荐
相关产品推荐

