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

时间:2016-12-12 19:58:20

标签: join view acumatica

我正在尝试从视图上的连接字段中获取值。示例代码:

  public PXSelectJoin<Table1, 
     LeftJoinSingleTable<Table2, On<Table2.FieldA, Equal<Table1.FieldB>>>> Document

现在说Table2的FieldC未包含在表1中。我将如何获得该数据?

示例:

public SomeFunction()
{
   if (Table2.FieldC != null)
   {
      //do something
   }
}

1 个答案:

答案 0 :(得分:4)

Eric,你有没有检查过T200培训课程的访问检索数据记录部分? enter image description here

通常,在主数据视图中加入多个DAC,以便在Where子句中使用它们,或者在UI中显示(以只读模式)加入DAC字段。

除了T200课程中显示的内容外,还有2个选项可用于访问在主数据视图中加入的DAC的字段:

  1. 执行BQL查询,主DAC匹配您最初在主数据视图中加入的DAC:

    var joinedDAC = PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>>.Select(this);
    
  2. 如果您需要更新已连接DAC中的某些值并将其保存回数据库,则必须声明主DAC匹配您最初在主数据视图中加入的数据视图:

    PXSelect<Table2, Where<Table2.FieldA, Equal<Current<Table1.FieldB>>>>> JoinedDAC;
    

    要访问已连接DAC的字段,只需调用JoinedDAC日视图的Select方法:

    Table2 record = JoinedDAC.Select();
    
  3. 另外,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 ...