关于项目运行分配'进程 - 我有一个自定义,我想在分配过程中添加条件,这样它就不会执行,除非满足这些条件。我已经在“分配规则”中添加了一个复选框用户字段。屏幕(PM207500),我希望使用该字段(与其他标准结合使用)来确定是否实际执行该PMTask行的分配。
我已按照以下方式覆盖PMAllocator.Execute方法,但它似乎无法正常工作。以下是我在PMAllocator图表的扩展中提出的代码:
[PXOverride]
public virtual void Execute(List<PMTask> tasks)
{
Base.PreselectAccountGroups();
if (Base.PreSelectTasksTransactions(tasks))
{
foreach (PMTask task in tasks)
{
//Get the allocation id for the task...
var pmalloc = (PMAllocation)PXSelect<PMAllocation,
Where<PMAllocation.allocationID, Equal<Required<PMAllocation.allocationID>>>>.Select(Base, task.AllocationID);
//if (pmalloc == null) return;
//Get the cache extension / user field...
var pmallocext = PXCache<PMAllocation>.GetExtension<PMAllocationExt>(pmalloc);
if (pmallocext.UsrRunAfterProjectCompletion == true)
{
//Get the project...
var pmproj = (PMProject)PXSelect<PMProject,
Where<PMProject.contractID, Equal<Required<PMProject.contractID>>>>.Select(Base, task.ProjectID);
if (pmproj.ExpireDate > DateTime.Today || pmproj.ExpireDate == null)
{
//do nothing..
}
else
{
Base.Execute(task, false);
}
}
else
{
Base.Execute(task, false);
}
}
}
}
但我不确定这是否是正确的做法。它似乎是在增加额外的分配线。如果我没有在这里明确地调用它,我甚至不确定是否没有调用基本执行方法。
有人能指出实现这个目标的最佳方法吗?
答案 0 :(得分:0)
当您仅使用[PXOverride]时 - 将在您之前调用基本执行(...)方法。 要替换基本方法,您应指定其他参数 - 委托。在你的情况下,它可以是这样的:
public delegate void ExecuteDelegate(List<PMTask> tasks);
[PXOverride]
public virtual void Execute(List<PMTask> tasks, ExecuteDelegate BaseExecute)
{
... your code
}