Acumatica: получение значения поля в заголовке из события изменения сетки - PullRequest
0 голосов
/ 14 февраля 2019

Я думаю, у меня довольно простая проблема, но я новичок в Acumatica.Мне бы хотелось, чтобы пользовательское поле в заголовке заказа на продажу (SO.30.10.00) оказало какое-то влияние на цену товаров в сетке.Таким образом, мне нужно 2 вещи.

1) Мне нужна сетка для чтения значения из заголовка.Я посмотрел на другой подобный запрос, но я не могу заставить его работать.На SO, похоже, этот код должен читать значение текущего номера заказа, но я получаю «Имя« Document »не существует в текущем контексте»

string TestString = Document.Current.OrderNbr;

2) Было быможно ли пересчитать всю строку при изменении этого поля?Я на самом деле думаю, что это, вероятно, самая легкая часть, но так как я спрашиваю первую часть, я решил, что я тоже это расскажу.

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

1 Ответ

0 голосов
/ 14 февраля 2019

Операция перемещается из поля заголовка в поле строк сетки.Когда поле заголовка будет изменено, обновите строки.Это будет № 2 в вашем вопросе.

В # 1 ваша проблема заключается в том, что представление данных Documents является членом SOOrderEntry graph , а не членом созданного вами расширения SOOrderEntry graph * расширении графа контексте вы получаете доступ к свойствам базового графа, используя свойство Base, поэтому вы должны смотреть на Base.Document.

Для реализации сначала вы хотите, чтобы поле заголовка вызывало события, когда ономодифицирована.Это достигается путем установки для свойства CommitChanges элемента управления ASPX значения true:

enter image description here

Далее необходимо объявить обработчик события FieldUpdated дляМодификация поля заголовка крюка и изменение строк сведений на основе поля заголовка:

using PX.Data;

namespace PX.Objects.SO
{
    public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
    {
        public void SOOrder_OrderDesc_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
        {
            SOOrder order = e.Row as SOOrder;

            if (order != null)
            {
                foreach (SOLine line in Base.Transactions.Select())
                {
                    line.TranDesc = order.OrderDesc;
                }
            }
        }
    }
}

Перед изменением поля заголовка: enter image description here

После изменения поля заголовка: enter image description here

Я использовал простое назначение =, чтобы установить значение строки сведений.Вы можете использовать метод SetValue или SetValueExt, если вы хотите, чтобы присвоение вызвало событие.Использование SetValueExt вызовет событие FieldUpdated.

...