【发布时间】:2017-10-25 06:24:51
【问题描述】:
我正在尝试将 Contract DAC 及其新扩展添加到我的 APInvoiceEntry Graph 扩展中,以便进行一些验证,但我确实做错了,但我不知道我到底在搞什么up,也许是合约 DAC 的初始化以及评估逻辑?它正在尝试将某些合同逻辑转换为 APTran,并发送“无法转换”错误。
最终目标是查看账单和付款每一行中选定的项目和分支,并根据项目 ID 和在 ContractExt DAC 扩展中创建的新 BranchID 字段对其进行评估。
我得到的当前错误的跟踪是:
Unable to cast object of type 'PX.Objects.AP.APTran' to type 'PX.Objects.CT.Contract'.
at PX.Objects.AP.APInvoiceEntry_Extension.APTran_RowUpdating(PXCache cache, PXRowUpdatingEventArgs e, PXRowUpdating InvokeBaseHandler)
at PX.Data.PXCache.OnRowUpdating(Object item, Object newitem, Boolean externalCall)
at PX.Data.PXCache`1.Update(IDictionary keys, IDictionary values)
at PX.Data.PXGraph.ExecuteUpdate(String viewName, IDictionary keys, IDictionary values, Object[] parameters)
这让我相信我可能没有正确引入合同 DAC。
代码如下:
图表:
namespace PX.Objects.AP
{
public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
{
public PXSelect<Contract, Where<Contract.contractID, Equal<Current<APTran.projectID>>>> Contract;
protected void APTran_RowUpdating(PXCache cache, PXRowUpdatingEventArgs e, PXRowUpdating InvokeBaseHandler)
{
Contract conRow = (Contract)e.NewRow as Contract;
ContractExt conRowE = PXCache<Contract>.GetExtension<ContractExt>(conRow);
APTran row = e.NewRow as APTran;
int? projectid = conRow.ContractID;
int? baseprojectid = row.ProjectID;
int? basebranchid = row.BranchID;
int? branchid = conRowE.UsrBranch;
if (
//Check to make sure that selected Branch and Project match
baseprojectid == projectid &&
basebranchid != branchid
)
{
throw new PXSetPropertyException("Branch and project must match", PXErrorLevel.RowError);
}
}
}
}
DAC:
namespace PX.Objects.CT
{
public class ContractExt : PXCacheExtension<PX.Objects.CT.Contract>
{
[Branch]
public virtual int? UsrBranch { get; set; }
public abstract class usrBranch : IBqlField { }
}}
这一切都正确编译。如您所料,错误会弹出,如下所示: APTran Unable to Cast Error
【问题讨论】:
标签: acumatica