我正在尝试从视图上的连接字段中获取值。示例代码:
public PXSelectJoin<Table1,
LeftJoinSingleTable<Table2, On<Table2.FieldA, Equal<Table1.FieldB>>>> Document
现在说Table2的FieldC未包含在表1中。我将如何获得该数据?
示例:
public SomeFunction()
{
if (Table2.FieldC != null)
{
//do something
}
}
答案 0 :(得分:4)
Eric,你有没有检查过T200培训课程的访问检索数据记录部分?
通常,在主数据视图中加入多个DAC,以便在Where子句中使用它们,或者在UI中显示(以只读模式)加入DAC字段。
除了T200课程中显示的内容外,还有2个选项可用于访问在主数据视图中加入的DAC的字段:
执行BQL查询,主DAC匹配您最初在主数据视图中加入的DAC:
var joinedDAC = PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>>.Select(this);
如果您需要更新已连接DAC中的某些值并将其保存回数据库,则必须声明主DAC匹配您最初在主数据视图中加入的数据视图:
PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>> JoinedDAC;
要访问已连接DAC的字段,只需调用JoinedDAC日视图的Select方法:
Table2 record = JoinedDAC.Select();
另外,ARDocType只是SOOrder DAC中声明的字符串字段:
public partial class SOOrder : PX.Data.IBqlTable, PX.Data.EP.IAssign, IFreightBase, ICCAuthorizePayment, ICCCapturePayment, IInvoice
{
...
#region ARDocType
public abstract class aRDocType : PX.Data.IBqlField
{
}
protected String _ARDocType;
[PXString(ARRegister.docType.Length, IsFixed = true)]
[PXFormula(typeof(Selector<SOOrder.orderType, SOOrderType.aRDocType>))]
public virtual String ARDocType
{
get
{
return this._ARDocType;
}
set
{
this._ARDocType = value;
}
}
#endregion
...
}
并且Document.Current
将始终返回SOOrder DAC的实例,因为它在内部调用Document.Cache.Current
并始终从缓存返回当前记录。 PXCache仅适用于单一类型的记录,不能包含任何连接的记录。包含所有已连接DAC的ResultSet存储在PXView QueryCache ...