带In运算符的Bql查询返回错误结果

时间:2019-06-03 20:58:46

标签: acumatica

我正在使用InvoiceEntryExt Graph扩展,并添加了一个名为“ Receipts”的DAC,我已使用IEnumerable方法对其进行了覆盖。

public PXSelect<POReceipt> Receipts;
public IEnumerable receipts()
{
   List<string> receiptNbrList = new List<string>(); 
   foreach(APTran tran in Base.Transactions.Select())
   {
      if(!string.IsNullOrEmpty(tran.ReceiptNbr) && !receiptNbrList.Contains(tran.ReceiptNbr))
      {
        receiptNbrList.Add(tran.ReceiptNbr);
      } 
   }

   object[] values = receiptNbrList.ToArray();       
   PXResultset<POReceipt> rcpts = PXSelect<POReceipt, Where<POReceipt.receiptNbr, In<Required<POReceipt.receiptNbr>>>>.Select(new PXGraph(), values);             
   return rcpts;
}

查询执行时,我将多个收据编号传递到values数组中,但是每次我知道一个事实应该有更多的收据时,我每次只会得到1个收据结果。

1 个答案:

答案 0 :(得分:1)

传递值的方式不正确,因为下面的代码

object[] values = receiptNbrList.ToArray();       
PXResultset<POReceipt> rcpts = PXSelect<POReceipt, Where<POReceipt.receiptNbr, In<Required<POReceipt.receiptNbr>>>>.Select(new PXGraph(), values);    

params object[] pars的形式传递值,但是该数组应包含与每个Current / Optional / Required对应的值。
In运算符传递参数的正确方法如下:

string[] values = receiptNbrList.ToArray();       
PXResultset<POReceipt> rcpts = PXSelect<POReceipt, Where<POReceipt.receiptNbr, In<Required<POReceipt.receiptNbr>>>>.Select(new PXGraph(), new object[]{ values });

您应该将对象数组传递给Select方法,并且该数组的第一个成员应该是与In运算符中的Required运算符相对应的字符串数组。