#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. Обновлен ответ, чтобы включить способ освобождения, как указано в комментарии выше.