【问题标题】:Acumatica - Override ConvertQuoteToProject to include custom fieldsAcumatica - 覆盖 ConvertQuoteToProject 以包含自定义字段
【发布时间】:2022-12-03 12:40:04
【问题描述】:

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

部分片段:

    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);
}

【问题讨论】:

    标签: c# acumatica


    【解决方案1】:

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

    在那个函数中有这个块:

            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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      相关资源
      最近更新 更多