如何在Acumatica中自定义屏幕发布AP文档(AP501000) [英] How to Customize screen Release AP Documents (AP501000) in Acumatica
问题描述
我在自定义屏幕发布AP文档(screnid = AP501000)中遇到问题。如果我已经在屏幕AP Bill and Adjusment中创建了一些其他字段,则在DAC APTran中创建了2个字段(UsrJobOrderNbr和usrNoSeriFaktur)。我创建名为APTranExtension的DAC扩展。这是罪魁祸首:
I have a problem in customize screen Release AP Documents (screnid = AP501000). In case I have already create some additional fields in screen AP Bill And Adjusment, I was created 2 fields in DAC APTran (UsrJobOrderNbr and usrNoSeriFaktur). I create DAC Extension as named APTranExtension. and this below is the sintaks :
using PX.Objects.CR;
using PX.Objects.EP;
using PX.Objects.FA;
using PX.Objects.PO;
using System;
using PX.Data;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.IN;
using PX.Objects.TX;
using PX.Objects.DR;
using PX.Objects.PM;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.AP;
namespace SGLCustomization
{
[Serializable]
public class APTranExtension: PXCacheExtension<PX.Objects.AP.APTran>
{
#region UsrJobOrderNbr`enter code here`
public abstract class usrJobOrderNbr : IBqlField{}
[PXDBString(25, IsFixed = true, IsUnicode = true)]
[PXUIField(DisplayName="Job Order Nbr")]
[PXSelector(typeof(Search<JobOrderNbr.jobOrderNbrCD,
Where<JobOrderNbr.status,
Equal<statusActive>>>),
typeof(JobOrderNbr.customerID),
typeof(JobOrderNbr.status),
typeof(JobOrderNbr.usrJobOrderNoRef))]
public string UsrJobOrderNbr
{
get;
set;
}
#endregion
}
}
我还创建了一个名为APTaxTranExtension的DAC扩展,这是以下内容:
I also create DAC Extension as named APTaxTranExtension, and this below is the sintaks :
using PX.Objects.CR;
using PX.Objects.EP;
using PX.Objects.FA;
using PX.Objects.PO;
using System;
using PX.Data;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.IN;
using PX.Objects.TX;
using PX.Objects.DR;
using PX.Objects.PM;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.AP;
using PX.Objects.AR;
namespace SGLCustomization
{
[Serializable]
public class APTaxTranExtension: PXCacheExtension<PX.Objects.AP.APTaxTran>
{
#region UsrNoSeriFaktur
public abstract class usrNoSeriFaktur : IBqlTable{}
[PXDBString(50, IsFixed = true)]
[PXUIField(DisplayName = "No Seri Faktur / Additional Narration")]
public string UsrNoSeriFaktur { get; set; }
#endregion
}
}
我还创建了扩展程序GLTranExtension中的DAC,用于存储APTranExtension和APTaxTranExtension中的值。以下是我的GLTranExtension的内容:
I also create Extension DAC in GLTranExtension, to store values from APTranExtension and APTaxTranExtension. This below is the sintaks of my GLTranExtension :
using System;
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.PM;
using PX.Objects.CR;
using PX.Objects.TX;
using System.Collections.Generic;
using PX.Objects;
using PX.Objects.GL;
namespace SGLCustomization
{
[Serializable]
public class GLTranExtension: PXCacheExtension<PX.Objects.GL.GLTran>
{
#region UsrJobOrderNbr
public abstract class usrJobOrderNbr : IBqlField{}
[PXDBString(25, IsFixed = true, IsUnicode = true)]
[PXUIField(DisplayName="Job Order Nbr")]
[PXSelector(typeof(Search<JobOrderNbr.jobOrderNbrCD,
Where<JobOrderNbr.status,
Equal<statusActive>>>),
//typeof(JobOrderNbr.jobOrderNbrCD),
typeof(JobOrderNbr.customerID),
typeof(JobOrderNbr.status))]
public string UsrJobOrderNbr{get;set;}
#endregion
#region UsrNoSeriFaktur
public abstract class usrNoSeriFaktur : IBqlTable { }
[PXDBString(75, IsFixed = true)]
[PXUIField(DisplayName = "No Seri Faktur / Additional Narration")]
public string UsrNoSeriFaktur { get; set; }
#endregion
#region UsrInvoiceNbr
public abstract class usrInvoiceNbr : IBqlTable { }
[PXDBString(60, IsFixed = true)]
[PXUIField(DisplayName = "Vendor Ref. / Customer Order")]
public string UsrInvoiceNbr { get; set; }
#endregion
}
}
我的目标是何时我输入了交易,然后在发布AP文档屏幕(AP501000)中发布了文档,新附加字段中的所有值也已经发送到日记帐交易记录屏幕(GL301000)中。
My goal is when I input transactions and then I release the document in screen Release AP Document (AP501000), all values in my new additional fields already sent into Journal Transaction screen (GL301000) also.
我已经创建了APReleaseProcessExtension BLC来提供它,但是没有用。这是我的APReleaseProcessExtension代码:
I already create APReleaseProcessExtension BLC to provide it, but it didn't work. This below is my APReleaseProcessExtension code :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;
using PX.Objects.AP;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CA;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.CT;
using PX.Objects.PM;
using SGLCustomization;
using SGLCustomization1;
namespace SGLCustomization1
{
public class APReleaseProcessExtension: PXGraphExtension<APReleaseProcess>
{
public delegate List<APRegister> ReleaseDocProcDel(JournalEntry je, ref APRegister doc, PXResult<APInvoice, CurrencyInfo, Terms, Vendor, Account> res, out PMRegister pmDoc);
public List<APRegister> ReleaseDocProc(JournalEntry je, ref APRegister doc, PXResult<APInvoice, CurrencyInfo, Terms, Vendor, Account> res, out PMRegister pmDoc, ReleaseDocProcDel del)
{
je.RowInserting.AddHandler<GLTran>((sender, e) =>
{
GLTran glTran = e.Row as GLTran;
APTran apTran = PXResult<APTran>.Current;
if (glTran != null && apTran != null)
{
APTranExtension apTex = PXCache<APTran>.GetExtension<APTranExtension>(apTran);
if (apTran != null && apTex.UsrJobOrderNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrJobOrderNbr = apTex.UsrJobOrderNbr;
}
}
APInvoice api = PXResult<APInvoice>.Current;
if (api != null && api.InvoiceNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrInvoiceNbr = api.InvoiceNbr;
}
APTaxTran apTax = PXResult<APTaxTran>.Current;
if (apTax != null)
{
APTaxTranExtension apTaxEx = PXCache<APTaxTran>.GetExtension<APTaxTranExtension>(apTax);
if (apTax != null && apTaxEx.UsrNoSeriFaktur != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>((GLTran)e.Row);
glTex.UsrNoSeriFaktur = apTaxEx.UsrNoSeriFaktur;
}
}
});
return del(je, ref doc, res, out pmDoc);
}
#region Event Handlers
#endregion
}
}
请帮助我提供我的目标,
Please help me to provide my goal,
推荐答案
您正在朝着正确的方向前进,但是您ve忘记添加[PXOverride]属性。如果没有PXOverrideAttribute,则不会调用您的方法ReleaseDocProc。将会调用基础图的ReleaseDocProc。
You are moving into right direction but you've forgot to add [PXOverride] attribute. Without PXOverrideAttribute your method ReleaseDocProc will not be called. ReleaseDocProc of the base graph will be called instead.
对于扩展中被覆盖的方法,应始终指定PXOverrideAttribute。请注意,事件处理程序不应用PXOverrideAttribute标记。
You should always specify PXOverrideAttribute for methods that were overrided in extensions. Note that event handlers should not be marked with PXOverrideAttribute.
因此,最终代码应如下所示(我已经修改了方法签名,因为它与Acu 5.3U6中的基本方法签名不兼容):
So the final code will look like that(I've modified methods signature as it was not compatible with the base method's signature in Acu 5.3U6):
public class APReleaseProcessExtension : PXGraphExtension<APReleaseProcess>
{
public delegate List<APRegister> ReleaseDocProcDel(JournalEntry je, ref APRegister doc, PXResult<APInvoice, CurrencyInfo, Terms, Vendor> res, bool isPrebooking, out List<INRegister> inDocs);
[PXOverride]
public List<APRegister> ReleaseDocProc(JournalEntry je, ref APRegister doc, PXResult<APInvoice, CurrencyInfo, Terms, Vendor> res, bool isPrebooking, out List<INRegister> inDocs, ReleaseDocProcDel del)
{
je.RowInserting.AddHandler<GLTran>((sender, e) =>
{
GLTran glTran = e.Row as GLTran;
APTran apTran = PXResult<APTran>.Current;
if (glTran != null && apTran != null)
{
APTranExtension apTex = PXCache<APTran>.GetExtension<APTranExtension>(apTran);
if (apTran != null && apTex.UsrJobOrderNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrJobOrderNbr = apTex.UsrJobOrderNbr;
}
}
});
return del(je, ref doc, res, isPrebooking, out inDocs);
}
}
我还从中删除了TaxTran和与发票相关的扩展名这段代码可以简化它。您可以轻松地将其退回。
I've also removed TaxTran and Invoice related extensions from this code to simplify it. You can easily return it.
我希望这能回答您的问题。
I hope this answers your question.
这篇关于如何在Acumatica中自定义屏幕发布AP文档(AP501000)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!