从视图上的连接表中获取值
Getting Values from Joined Tables on Views
我正在尝试从视图的连接字段中获取值。示例代码:
public PXSelectJoin<Table1,
LeftJoinSingleTable<Table2, On<Table2.FieldA, Equal<Table1.FieldB>>>> Document
现在假设 Table2 有 Table1 中未包含的 FieldC。我如何获取该数据?
示例:
public SomeFunction()
{
if (Table2.FieldC != null)
{
//do something
}
}
Eric,您是否检查过 T200 培训课程中的访问检索到的数据记录部分?
通常在主数据视图中连接多个 DAC,以便在 Where 子句中使用它们或在 UI 中显示(以只读模式)连接的 DAC 字段。
除了 T200 class 中显示的内容外,还有 2 个选项可用于访问在主数据视图中加入的 DAC 字段:
使用与您最初加入主数据视图的主 DAC 匹配的主 DAC 执行 BQL 查询:
var joinedDAC = PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>>.Select(this);
如果您需要更新加入的 DAC 中的某些值并将它们保存回数据库,则有必要声明一个数据视图,其中的主 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
将始终 return SOOrder DAC 的一个实例,因为它在内部调用 Document.Cache.Current
也总是 return 从缓存中获取当前记录。 PXCache 旨在仅处理单一类型的记录,不能包含任何连接的记录。包含所有加入的 DAC 的结果集存储在 PXView QueryCache 中...
我正在尝试从视图的连接字段中获取值。示例代码:
public PXSelectJoin<Table1,
LeftJoinSingleTable<Table2, On<Table2.FieldA, Equal<Table1.FieldB>>>> Document
现在假设 Table2 有 Table1 中未包含的 FieldC。我如何获取该数据?
示例:
public SomeFunction()
{
if (Table2.FieldC != null)
{
//do something
}
}
Eric,您是否检查过 T200 培训课程中的访问检索到的数据记录部分?
通常在主数据视图中连接多个 DAC,以便在 Where 子句中使用它们或在 UI 中显示(以只读模式)连接的 DAC 字段。
除了 T200 class 中显示的内容外,还有 2 个选项可用于访问在主数据视图中加入的 DAC 字段:
使用与您最初加入主数据视图的主 DAC 匹配的主 DAC 执行 BQL 查询:
var joinedDAC = PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>>.Select(this);
如果您需要更新加入的 DAC 中的某些值并将它们保存回数据库,则有必要声明一个数据视图,其中的主 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
将始终 return SOOrder DAC 的一个实例,因为它在内部调用 Document.Cache.Current
也总是 return 从缓存中获取当前记录。 PXCache 旨在仅处理单一类型的记录,不能包含任何连接的记录。包含所有加入的 DAC 的结果集存储在 PXView QueryCache 中...