Reputation: 397
I need to create some customize code for Release process in Bill and Adjusment entry screen. I've already create DAC Extension for APInvoice, APTran, APTaxTran & GLTran, please see the following code.
1). APInvoiceExt (DAC Extension)
using PX.Data;
namespace PX.Objects.AP
{
public class APInvoiceExt : PXCacheExtension<PX.Objects.AP.APInvoice>
{
#region UsrJadeRefNbr
public abstract class usrJadeRefNbr : IBqlField{}
[PXDBString(50, IsFixed = true, IsUnicode = true)]
[PXUIField(DisplayName = "Jade Ref. Nbr.")]
public virtual string UsrJadeRefNbr { get; set; }
#endregion
}
}
2). APTranExt (DAC Extension)
using PX.Data;
using SGLCustomizeProject;
namespace PX.Objects.AP
{
public class APTranExt : PXCacheExtension<PX.Objects.AP.APTran>
{
#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.customerID),
typeof(JobOrderNbr.status),
typeof(JobOrderNbr.usrJobOrderNoRef))]
public string UsrJobOrderNbr
{
get;
set;
}
#endregion
}
}
3). APTaxTranExt (DAC Extension)
using PX.Data;
namespace PX.Objects.AP
{
public class APTaxTranExt : 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
}
}
4). GLTranExt (DAC Extension)
using PX.Data;
using SGLCustomizeProject;
namespace PX.Objects.GL
{
public class GLTranExt : 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
}
}
And then I need to Extend the APInvoiceEntry BLC to custom the Release button, and the following is the source code that I've created.
5. APInvoiceEntry_Extension (BLC Extension)
using System.Collections;
using System.Collections.Generic;
using PX.Objects.GL;
namespace PX.Objects.AP
{
public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
{
#region Customize Button Release
public PXAction<APInvoice> release;
[PXUIField(DisplayName = "Release", MapEnableRights = PXCacheRights.Insert, MapViewRights = PXCacheRights.Insert)]
[PXProcessButton]
public IEnumerable Release(PXAdapter adapter)
{
PXGraph.InstanceCreated.AddHandler<JournalEntry>((graph) =>
{
graph.RowInserting.AddHandler<GLTran>((sender, e) =>
{
APInvoice api = PXResult<APInvoice>.Current;
string refNbr = api.RefNbr;
if (api != null && api.InvoiceNbr != null)
{
GLTranExt glEx = PXCache<GLTran>.GetExtension<GLTranExt>((GLTran)e.Row);
glEx.UsrInvoiceNbr = api.InvoiceNbr;
}
APTran aptran = PXResult<APTran>.Current;
if (aptran != null)
{
APTranExt apTranEx = PXCache<APTran>.GetExtension<APTranExt>(aptran);
if (aptran != null && apTranEx.UsrJobOrderNbr != null)
{
GLTranExt glex = PXCache<GLTran>.GetExtension<GLTranExt>((GLTran)e.Row);
glex.UsrJobOrderNbr = apTranEx.UsrJobOrderNbr;
}
}
APTaxTran aptax = PXResult<APTaxTran>.Current;
if (aptax != null)
{
APTaxTranExt aptaxEx = PXCache<APTaxTran>.GetExtension<APTaxTranExt>(aptax);
if (aptax != null && aptaxEx.UsrNoSeriFaktur != null)
{
GLTranExt gltEx = PXCache<GLTran>.GetExtension<GLTranExt>((GLTran)e.Row);
gltEx.UsrNoSeriFaktur = aptaxEx.UsrNoSeriFaktur;
}
}
});
});
return Base.release.Press(adapter);
}
#endregion
}
}
And then I go to the system to check the result.
And then I check on Journal Transaction Screen to make sure the result. But I got blank value for the custom field (Job Order Nbr & No Seri faktur), while (Vendor Ref) work fine.
And then I've tried to debug the code, and I got the cause of the problem.
Does anyone know how to solve this issue ?
Upvotes: 1
Views: 279
Reputation: 479
I think it's because you are using current. try selecting it with the .select(Base);
Upvotes: 0