Нажимать кнопки сохранения и освобождения при динамическом изменении данных в методе в acumatica?

#acumatica #myob

#acumatica #myob

Вопрос:

У меня есть кнопка под названием PayEFTPOS, смотрите изображение здесь

при нажатии на эту кнопку будет вызван этот метод

 [PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Pay EFTPOS")]
protected void customAddView()
{
   var documents = this.Base.Document.Current;
   documents.DocDesc = "Value 1";
   documents.ExtRefNbr = "Value 2";
   this.Base.Actions.PressSave();`

}
  

в этом методе данные полей «Описание и сумма платежа» будут изменяться динамически

затем нажмите кнопку «Сохранить», чтобы сохранить данные динамически
но проблема в том, что «данные в этих полях изменены только в пользовательском интерфейсе, но после обновления не изменены»

Комментарии:

1. Как вы настраиваете значения для сохранения? Это может быть частью неожиданного поведения. (Пожалуйста, опубликуйте свой код.) Кроме того, вы могли бы попробовать Base.Save.Press(); вместо этого, но поскольку я ничего не знаю о вашем коде, я не знаю, будет ли он вести себя по-другому. Что касается вашего нажатия, это, скорее всего, что-то вроде Base. Освободить. Нажмите (); но опять же, вы не предоставили достаточно кода в своем сообщении, чтобы дать какие-либо лучшие предложения.

2. @BrianStevens сообщение было отредактировано

Ответ №1:

Это сильно меня задело, когда я только начал. Предоставленный код фактически не обновляет кэш за представлением. В результате кэш не загрязнен, поэтому он не распознается как нуждающийся в сохранении. Вместо этого обновляется ваша копия кэшированной записи, которая сильно отличается от самого фактического кэша. Есть несколько способов сделать это, но в соответствии с вашим кодом на данный момент вы должны иметь возможность просто выполнить обновление, как показано ниже.

 [PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Pay EFTPOS")]
protected void customAddView()
{
   var documents = Base.Document.Current;  // This saves the cache to a temporary object
   documents.DocDesc = "Value 1";
   documents.ExtRefNbr = "Value 2";
   Base.Document.Update(documents);  // This updates the actual cache with your changes and causes event handlers to fire
   Base.Actions.PressSave();
   Base.release.Press();  // Press the release button in the base graph (as asked in comment)
}
  

Обратите внимание, что при обновлении представления (the .Метод обновления) затем он запустит любые обработчики событий в соответствующем базовом графике и расширениях графика. Если вы планируете продолжить работу с этой записью, вам следует использовать синтаксис documents = Base.Документ.Обновить (документы); чтобы ваша копия записи (документы) также обновлялась. В противном случае вы можете добавить больше изменений, снова обновить представление и столкнуться с проблемами, потеряв изменения, выполненные обработчиками событий.

В качестве примечания, нет необходимости указывать это.База, как это подразумевается. Вы можете просто указать базу, чтобы сохранить некоторые нажатия клавиш. Используя это против База помогает мне отслеживать, пытаюсь ли я вызвать код в текущем графике / расширении или в базовом графике, и это.Base мне требуется время, чтобы мысленно обработать, в каком месте находится код, который я вызываю.

Комментарии:

1. Большое вам спасибо, ваш комментарий очень полезен, можете ли вы помочь мне с этой проблемой «метод update () не работает с полями, доступными только для чтения», и еще вопросы, пожалуйста «я хочу нажать кнопку разблокировки метода», еще раз спасибо

2. Как поле доступно только для чтения? (Можете ли вы предоставить пример кода из определения поля в DAC?) Извлекается ли представление только для чтения? (т. Е. С использованием PXSelectReadonly) Мне нужно было бы увидеть код, стоящий за всем этим, чтобы попытаться помочь. Как отмечалось в комментарии выше, я подозреваю, что систематическое нажатие кнопки разблокировки является базовым. Освободить. Нажмите () но я не знаю вашего кода. Является ли эта часть стандартного экрана Acumatica, которую вы могли бы указать мне идентификатор экрана или график?

3. я решил проблему сохранения поля только для чтения, проблему с PDDefault (TypeCode. Строка, » «), когда я удаляю ее, проблема решена

4. Обновлен ответ, чтобы включить способ освобождения, как указано в комментарии выше.