Acumatica -覆盖ConvertQuoteToProject以包含自定义字段



我正在尝试覆盖PMQuoteMaint中的基本方法ConvertQuoteToProject,以便我可以从项目中添加所需的自定义字段。目前在Project中有必需的字段,我们不能转换Quote。

部分片段:

public virtual void ConvertQuoteToProject(PMQuote row, ConvertToProjectFilter settings)
{
if (!ValidateQuoteBeforeConvertToProject(row))
{
throw new PXException(Messages.QuoteConversionFailed);
}

ProjectEntry projectEntry = CreateInstance<ProjectEntry>();
projectEntry.Clear();

PMProject project = new PMProject();
project.BaseType = PMProject.ProjectBaseType.Project;

CM.CurrencyInfo info = PXSelect<CM.CurrencyInfo, Where<CurrencyInfo.curyInfoID, Equal<Current<PMQuote.curyInfoID>>>>.Select(this);
info.CuryInfoID = null;
info = (CM.CurrencyInfo)projectEntry.Caches<CM.CurrencyInfo>().Insert(info);
project.CuryID = row.CuryID;
project.CuryInfoID = info.CuryInfoID;
project.RateTypeID = info.CuryRateTypeID;

if (!DimensionMaint.IsAutonumbered(this, ProjectAttribute.DimensionName))
project.ContractCD = row.QuoteProjectCD;

project = projectEntry.Project.Insert(project);

project.CustomerID = row.BAccountID;
if (row.LocationID != null)
project.LocationID = row.LocationID;
if (row.TermsID != null)
project.TermsID = row.TermsID;
project.QuoteNbr = row.QuoteNbr;
project.UsrOffice = row.UsrOffice;
project.UsrBuildingtype = row.UsrBuildingtype;
project.UsrProjAdmin = row.UsrProjAdmin;
project.UsrProjectManager = row.UsrProjectManager;
project = projectEntry.Project.Update(project);

在自定义中,即使尝试简单地重写方法也会抛出以下错误:

Method Void ConvertQuoteToProject(PX.Objects.PM.PMQuote, ConvertToProjectFilter, ConvertQuoteToProjectDelegate) in graph extension is marked as [PXOverride], but its signature is not compatible with original method

自定义代码:

public delegate void ConvertQuoteToProjectDelegate(PMQuote row, ConvertToProjectFilter settings);
[PXOverride]
public void ConvertQuoteToProject(PMQuote row, ConvertToProjectFilter settings, ConvertQuoteToProjectDelegate baseMethod)
{
baseMethod(row,settings);
}

完成此任务的最佳方法是捕获将两者联系在一起的事件并更新其他字段。

在这个函数中有这个block:

project.CustomerID = row.BAccountID;
if (row.LocationID != null)
project.LocationID = row.LocationID;
if (row.TermsID != null)
project.TermsID = row.TermsID;
project.QuoteNbr = row.QuoteNbr;
project = projectEntry.Project.Update(project);

您可以对项目条目进行图形扩展,并绑定更新外键quoteNbr。

public virtual void _(Events.FieldUpdated<PMProject.quoteNbr> e, PXFieldUpdated del)
{
del?.Invoke(e.Cache, e.Args);
string QuoteNbr = (string)e.NewValue;
//Get the quote
var Quote = PMQuote.PK.Find(Base, QuoteNbr);
if (Quote != null)
{
//get your dac extension
PMQuoteExt quoteExt = Quote.GetExtension<PMQuoteExt>();
//now set values based on your extension            
e.Cache.SetValueExt<PMProjectExt.field>(e.Row, ext.field);
}
}

最新更新