Acumatica - заполнение поля значениями из разных полей

Я пытаюсь связать вместе другие поля, которые есть на экране, некоторые из них являются полями usr. Я получаю результат в трассировке, но в моем случае это просто ноль или тире. Даже если тире все еще выводятся, оно не обновляется до поля, в котором я хочу сохранить строку. Вот мой код:

protected void InventoryItem_Descr_FieldDefaulting(PXCache cache, PXFieldDefaultingEventArgs e)
    {

      var row = (InventoryItem)e.Row;
      Combined.StockItem.InventoryItemExt rowExt = PXCache<InventoryItem>.GetExtension<Combined.StockItem.InventoryItemExt>(row); 
      if (row == null) return;
      if (row != null) {
      string style = row.ItemClassID;
      string metalColor = rowExt.UsrMetalColor;
      string metalType = rowExt.UsrMetalType;
      string diaQuality = rowExt.UsrDiamondQuality;
      string gemColor = rowExt.UsrCenterColor;
      string template = "{0}-{1}-{2}-{3}-{4}";
      string message = string.Format(template, style, metalColor, metalType, diaQuality, gemColor);
      PXTrace.WriteInformation("{0}", message);
      e.NewValue = message;
      }
    }

И след:

Information:    ----

Значения, которые я извлекаю, имеют значения, которые оба хранятся в базе данных, но я хотел бы, чтобы они генерировались динамически, пока вводятся поля.

Я также пробовал e.NewValue, cache.SetValueExt и просто сравнил его с сообщением row.Descr = message, чтобы строка отображалась как значение этого поля.

Любой вклад был бы полезен.

кажется, что ваше расширение возвращается, но не имеет значений? вы подтвердили это отладкой? Целью этого является автоматическая установка описания при создании нового элемента? если это так, вы можете добавить код в обновленное поле InventoryID (или CD), чтобы увидеть, имеет ли это значение.

Brendan 11.08.2018 14:03

Обработчик событий FieldDefaulting работает до того, как поля usr получат свое значение. Попробуйте проделать ту же логику в обработчике событий RowUpdated

Samvel Petrosov 11.08.2018 15:32

В какой форме у вас такое странное поведение?

Yuriy Zaletskyy 12.08.2018 20:19

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

John 13.08.2018 18:10

Обновленная строка действительно сработала как ответ.

Dane 20.08.2018 15:33
0
5
277
1

Ответы 1

Поместите свой код в RowUpdated Event, это должно сработать для вас.

protected void InventoryItem_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e, PXRowUpdated InvokeBaseHandler)
        {
            if (InvokeBaseHandler != null)
                InvokeBaseHandler(cache, e);
            var row = (InventoryItem)e.Row;
            Combined.StockItem.InventoryItemExt rowExt = PXCache<InventoryItem>.GetExtension<Combined.StockItem.InventoryItemExt>(row); 
            if (row == null) return;
            if (row != null) {
              string style = row.ItemClassID;
              string metalColor = rowExt.UsrMetalColor;
              string metalType = rowExt.UsrMetalType;
              string diaQuality = rowExt.UsrDiamondQuality;
              string gemColor = rowExt.UsrCenterColor;
              string template = "{0}-{1}-{2}-{3}-{4}";
              string message = string.Format(template, style, metalColor, metalType, diaQuality, gemColor);
              PXTrace.WriteInformation("{0}", message);
              cache.SetValueExt<InventoryItem.descr>(row, message);

           }
        }

Другие вопросы по теме