从视图上的连接表中获取值

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 字段:

  1. 使用与您最初加入主数据视图的主 DAC 匹配的主 DAC 执行 BQL 查询:

    var joinedDAC = PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>>.Select(this);
    
  2. 如果您需要更新加入的 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 中...