2016-12-12 3 views
0

я использую этот код для получения нового значения для продукта, но я хочу видеть этот на экране, я использовал:не обновляет значения на экране

«row.UnitPrice», но данные есть, но нет на экране. Так что мне нужно вызвать еще один funtion для его обновления?

protected void SOLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) 
    { 

     var row = (SOLine)e.Row; 

     row.UnitPrice = null; 

     if (row.OrderType == "SO") 
     { 
      if (row.InventoryID != null) 
      { 
       InventoryItem oItem = PXSelect<InventoryItem,Where<InventoryItem.inventoryID,Equal<Required<InventoryItem.inventoryID>>>>.Select(new PXGraph(), row.InventoryID); 

       if (oItem != null) 
       { 
        decimal? qty = row.Qty; 
        row.UnitPrice = CalcLinePrice(oItem.RecPrice,qty); 

        Base.Transactions.Update(row); 

       } 
      } 
     } 

    } 

protected decimal? CalcLinePrice(decimal? unitPrice, decimal? qty) 
{ 
     return unitPrice *2 * (qty); 
} 
+0

вы пробовали, добавив 'yourGrid.View.RequestRefresh()' после обновления данных? – Dispersia

ответ

1

Согласен с Hybridzz: вы должны обновить поле CuryUnitPrice вместо UnitPrice. Кроме того, необходимо использовать метод PXCache.SetValueExt поднять все обработчики на уровне полей для поля CuryUnitPrice при присвоении нового значения:

sender.SetValueExt<SOLine.curyUnitPrice>(e.Row, price); 

На стороне записки:

  1. вы никогда не должны вызывать Update метод для текущей обработанной записи в обработчиках FieldUpdated - Base.Transactions.Update(row); должен исчезнуть

  2. static PXSelectorAttribute.Select метод должен использоваться для извлечения InventoryItem, выбранного для записи SOLine:

    • в PXSelectorAttribute хранит записи в одном хранилище GlobalCache общего числа всех пользовательских сессий: это более эффективный вариант по сравнению с QueryCache класса PXView доступной только для 1 пользователя
    • снизить затраты на техническое обслуживание, как вам не нужно обновить BQL запросов в нескольких местах, если кто-то изменить BQL запрос для поля SOLine.InventoryItem
1

столбце «Цена за штуку» в сетке Подробности связано с полем CuryUnitPrice и не UnitPrice.

Возможно, вам потребуется обновить правильное поле ЦАП.

row.CuryUnitPrice = CalcLinePrice(oItem.RecPrice,qty);