Включить поле SOLine после завершения заказа - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно активировать поля «Идентификатор продавца» и «Подлежащие вводу в эксплуатацию» строк заказа на продажу для заказов на продажу в состоянии «Завершено».

Я ссылался на вопрос о включении полей в заголовке SOOrder: Как включить поле CustomerOrderNbr на экране заказа клиента?

Я добавил два поля в шаги автоматизации для шага SO Complete Automation Steps Screen

И добавленный код настройки:

public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
  public void SOOrderLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
  {
      SOOrderLine line = e.Row as SOOrderLine;
      if (line == null) return;

      PXUIFieldAttribute.SetEnabled<SOOrderLine.salesPersonID>(sender, line, true);
      PXUIFieldAttribute.SetEnabled<SOOrderLine.commissionable>(sender, line, true);
  }
}

Однако поля по-прежнему отключены. Я что-то упускаю?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Чтобы завершить решение этой проблемы, в этом случае я обнаружил, что нет необходимости включать полную строку заказа на продажу с помощью шагов автоматизации, а затем отключать ее с помощью SOLine_RowSelect. Однако необходимо было добавить поле Заказ на продажу> Заказ Nbr к шагам автоматизации (чтобы сделать документ Сохранить доступным после изменения строки Заказа на продажу). И как ни странно, нам также было необходимо дать этому проекту настройки более высокий уровень, чем другим, реализующим его, после других настроек, которые могли вносить изменения в тот же экран или объекты.

Automation Steps example

public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
  protected void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
  {
      sender.AllowUpdate = true;
      Base.Transactions.Cache.AllowUpdate = true;
  }

  protected void SOLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
  {
      if (Base.Document.Current != null)
      {
          PXUIFieldAttribute.SetEnabled<SOLine.salesPersonID>(sender, e.Row, true);
          PXUIFieldAttribute.SetEnabled<SOLine.commissionable>(sender, e.Row, true);
      }
  }   
}
0 голосов
/ 08 ноября 2018

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

    protected void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        // Make the promised on ship date field editable even after the order has been completed.
        // This code is not enough to make the feature work - automation steps need to be modified for SO Completed and SO Invoiced to ensure the
        // caches are not disabled.
        sender.AllowUpdate = true;
        Base.Transactions.Cache.AllowUpdate = true;
    }

    protected void SOLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        if (Base.Document.Current != null)
        {
            //Automation steps were modified to keep the transactions grid enabled for the completed status; we are manually disabling it here but leaving the promised on ship date field editable.
            if(Base.Document.Current.Status == SOOrderStatus.Completed)
                PXUIFieldAttribute.SetEnabled(sender, e.Row, false);

            PXUIFieldAttribute.SetEnabled<SOLineExt.usrPromisedShipOnDate>(sender, e.Row, true);
            PXUIFieldAttribute.SetEnabled<SOLineExt.usrLateReasonCode>(sender, e.Row, true);
        }
    }
...