Попытка переопределить базовый обработчик в поле флажка SO Line - PullRequest
0 голосов
/ 11 апреля 2019

Я бы хотел переопределить логику «Бесплатный товар» в форме заказа на продажу. У меня есть функция, которая рассчитывает окончательную цену на основе ряда критериев, поэтому я хотел бы, чтобы она не стирала поле «Цена за единицу».

Я создал следующий код:

protected void SOLine_IsFree_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
  if(InvokeBaseHandler != null) InvokeBaseHandler(cache, e);

  SOLine row = e.Row as SOLine;
  // My Price calculation formula goes here.
}

Это работает, но, конечно, следующая строка запускает код по умолчанию:

if(InvokeBaseHandler != null) InvokeBaseHandler(cache, e);

Но если я уберу его, я могу поставить галочку (и он работает), но я не смогу снять галочку. Попытка отменить проверку, кажется, ничего не делает. Я попытался установить значение этого в коде, подумав, может быть, в этом проблема. Также попытался продублировать код, который был запущен по умолчанию и ничего.

Заранее спасибо.

1 Ответ

1 голос
/ 15 апреля 2019

Если поле IsFree отключено в пользовательском интерфейсе, тогда вы хотите проверить SetEnable <> для этого поля в обработчике RowSelected и посмотреть, нужно ли вам изменить его поведение.

См. Образец ниже:

protected virtual void SOLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e, PXRowSelected baseMethod)
{
   //Calling Base method
   if(basemethod != null)
        basemethod(sender, e);
   ................................................
   PXUIFieldAttribute.SetEnabled<SOLine.isFree>(sender, e.Row, !autoFreeItem && row.InventoryID != null);                                                    
}
...