我们正在使用“运行项目结算”屏幕在AR /发票和备忘录中创建记录。
发票&备忘录屏幕,我们需要填充标题Customer Ord的过程。 number,以及已添加到'文档详细信息'文档详细信息中的网格部分的用户字段。标签。目前,这个过程并没有这样做。
我希望使用我熟悉的技术拦截屏幕上的处理操作,即使用' AddHandler':
[PXOverride]
protected virtual IEnumerable Items (PXAdapter adapter)
{
PXGraph.InstanceCreated.AddHandler<BillingProcess>((graph) =>
{
graph.RowInserting.AddHandler<BillingProcess.ProjectsList>((sender, e) =>
{
//Custom logic goes here
});
});
return Base.action.Press(adapter);
}
我认为没有Base.Actions远远类似于比尔&#39;或者&#39; Bill All&#39;。
这显然不是我需要的代码,但我认为这是一般的起点。
在审核了源业务逻辑后,我没有看到任何&#39; Bill&#39;或者&#39; Bill All&#39;行动 - 或任何行动&#39;一点儿(莫名其妙)。我看到一个名为&#39; items&#39;的IEnumerable方法,这就是我上面开始的内容。
这是正确的方法吗?
更新:2017年2月14日
使用提供的答案re:重写的方法InsertTransaction(...)我尝试使用以下逻辑设置我们的ARTran用户字段(这是必需的):
PMProject pmproj = PXSelect<PMProject, Where<PMProject.contractID, Equal<Required<PMProject.contractID>>>>.Select(Base, tran.ProjectID);
if (pmproj == null) return;
PMProjectExt pmprojext = PXCache<PMProject>.GetExtension<PMProjectExt>(pmproj);
if (pmprojext == null) return;
ARTranExt tranext = PXCache<ARTran>.GetExtension<ARTranExt>(tran);
if (tranext == null) return;
tranext.UsrContractID = pmprojext.UsrContractID;
即使这会将用户字段设置为正确的值,但仍会在进程完成时向我提供必填字段为空的错误。我有限的知识使我无法理解为什么。
答案 0 :(得分:0)
在“运行项目结算”屏幕上,处理和处理所有按钮的标题已更改为帐单和全部帐单分别在BLC构造函数中。 在BillingFilter_RowSelected处理程序中为 Items 数据视图设置了进程委托:
public class BillingProcess : PXGraph<BillingProcess>
{
...
public BillingProcess()
{
Items.SetProcessCaption(PM.Messages.ProcBill);
Items.SetProcessAllCaption(PM.Messages.ProcBillAll);
}
...
protected virtual void BillingFilter_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
BillingFilter filter = Filter.Current;
Items.SetProcessDelegate<PMBillEngine>(
delegate (PMBillEngine engine, ProjectsList item)
{
if (!engine.Bill(item.ProjectID, filter.InvoiceDate, filter.InvFinPeriodID))
{
throw new PXSetPropertyException(Warnings.NothingToBill, PXErrorLevel.RowWarning);
}
});
}
...
}
如上面的代码段所示, AR Invoice and Memos 屏幕中的所有记录都是由PMBillEngine类的实例创建的。以下是显示如何在PMBillEngine BLC扩展程序中覆盖InsertNewInvoiceDocument
和InsertTransaction
方法的代码段:
public class PMBillEngineExt : PXGraphExtension<PMBillEngine>
{
public delegate ARInvoice InsertNewInvoiceDocumentDel(string finPeriod, string docType, Customer customer,
PMProject project, DateTime billingDate, string docDesc);
[PXOverride]
public ARInvoice InsertNewInvoiceDocument(string finPeriod, string docType, Customer customer, PMProject project,
DateTime billingDate, string docDesc, InsertNewInvoiceDocumentDel del)
{
var result = del(finPeriod, docType, customer, project, billingDate, docDesc);
// custom logic goes here
return result;
}
[PXOverride]
public void InsertTransaction(ARTran tran, string subCD, string note, Guid[] files)
{
// the system will automatically invoke base method prior to the customized one
// custom logic goes here
}
}
运行项目结算流程调用InsertNewInvoiceDocument
方法在 AR发票和备忘录屏幕上创建新记录,并使用InsertTransaction
方法添加新发票事务。
需要提及的一件重要事情:当用户启动“运行项目结算”操作时,将调用 重写的InsertNewInvoiceDocument
和InsertTransaction
方法处理运行项目结算屏幕或从数据条目项目屏幕。
有关如何覆盖虚拟BLC方法的详细信息,请参阅帮助 - &gt; 自定义 - &gt; 自定义业务逻辑 - &gt; 图表 - &gt;每个Acumatica ERP 6.1网站都提供覆盖虚拟方法