问题
I have a problem in customize screen AR Relase All (AR501000). The problem was when I try to pass value of Invoice Number (Customer Order's Field) in screen Invoices And Memos (AR301000) by using screen AR Release All Process (AR501000) using checkbox.
First, I create GLTranExtension like this below :
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 SGLCustomizeProject
{
[Serializable]
public class GLTranExtension: PXCacheExtension<PX.Objects.GL.GLTran>
{
#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 try to create customize ARReleaseProcessExtension. This below my customize code :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;
using PX.Objects.AR;
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;
namespace SGLCustomizeProject
{
public class ARRelaseProcessExtension: PXGraphExtension<ARReleaseProcess>
{
public delegate List<ARRegister> ReleaseDocProcDel(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc);
[PXOverride]
public List<ARRegister>ReleaseDocProc(JournalEntry je, ref ARRegister doc, PXResult<ARInvoice, CurrencyInfo, Terms, Customer, Account> res, out PMRegister pmDoc, ReleaseDocProcDel del)
{
je.RowInserting.AddHandler<GLTran>((sender, e) =>
{
GLTran glTran = e.Row as GLTran;
ARInvoice ari = PXResult<ARInvoice>.Current;
if (ari != null && ari.InvoiceNbr != null)
{
GLTranExtension glTex = PXCache<GLTran>.GetExtension<GLTranExtension>(glTran);
glTex.UsrInvoiceNbr = ari.InvoiceNbr;
}
});
return del(je, ref doc, res, out pmDoc);
}
}
}
If go to screen Release AR Documents (AR501000) and I only need to release one transaction using checkbox button. It works.. But when I try to release more than one transactions using checkbox button also, my second transactions fill the same invoice number in journal transaction screen, I'll describe using this condition :
If I release two transactions
- reference number = 000012 and invoice number (in field Customer Order) = inv1254
- reference number = 000013 and invoice number (in field Customer Order) = inv1255
And then I Release this two transactions, and in journal transactions shows the result like this below :
- reference number = 000012 and invoice number (in field Customer Order) = inv1254
- reference number = 000013 and invoice number (in field Customer Order) = inv1254
I don't know why in second transaction shows the same invoice number value in journal transaction screen.
回答1:
In you case it's happening because of
ARInvoice ari = PXResult<ARInvoice>.Current;
PXResult.Current can differ from the actual invoice you are processing.
It will be better to explicitly select required invoice in this case:
ARInvoice ari = PXSelect<ARInvoice, Where<ARInvoice.refNbr, Equal<Required<GLTran.refNbr>>, And<ARInvoice.docType, Equal<Required<GLTran.tranType>>>>>.Select(sender.Graph, glTran.RefNbr, glTran.TranType);
来源:https://stackoverflow.com/questions/37429196/how-to-customize-screen-ap-release-all-and-ar-relase-all-in-acumatica-erp-system