BQL Query With In Оператор возвращает неверные результаты - PullRequest
1 голос
/ 03 июня 2019

Я использую расширение графика InvoiceEntryExt и добавил ЦАП под названием «Квитанции», который я переопределил с помощью метода 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;
}

Когда запрос выполняется, я передаю несколько номеров квитанций в массив значений, но каждый раз получаю только 1 результат квитанции, когда я точно знаю, что их должно быть больше.

1 Ответ

1 голос
/ 04 июня 2019

Неправильный способ передачи значений, так как код ниже

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, и первый член этого массива должен быть массивом строк, который соответствует оператору Required в операторе In.

...