Откуда был вызван super ()? - PullRequest
2 голосов
/ 06 февраля 2012

В источнике данных формы (SalesLine) у меня есть метод validateWrite, который, в свою очередь, вызывает метод super() для вызова метода validateWrite в таблице SalesLine, среди других проверок.

В таблице SaleLine у ​​меня есть пользовательские функции для записи и иногда остановки изменений данных.

Я не хочу, чтобы эта функция запускалась, когда я пишу в SalesLine из моей новой формы. Поэтому Я хочу проверить условие в методе validateWrite таблицы SalesLine, чтобы узнать, был ли вызван validateWrite из моей новой формы . Это позволит мне пропустить запись / остановку изменения данных, если из моей новой формы была вызвана запись SalesLine.

Какой правильный подход?

Я мог бы создать логическое значение recordSaveChecks и установить его перед вызовом SalesLine.write(), но есть ли лучший способ?

Редактировать: Чтобы уточнить, у меня нет особой пользовательской проверки формы для добавления, у меня есть общесистемная проверка (поэтому она находится в таблице SaleLine), которую необходимо пропустить при вызове из 1 конкретной формы .

Ответы [ 3 ]

6 голосов
/ 06 февраля 2012

Наилучшим вариантом может быть перемещение настройки, специфичной для формы, в источник данных формы, а не в саму таблицу. Но если вы действительно хотите добавить специфичный для формы код в таблицу, вы можете увидеть пример в Tables \ Address.update () , где он проверяет this.dataSource (). FormRun () .name () чтобы определить, был ли он вызван из соответствующей формы.

1 голос
/ 06 февраля 2012

Вы можете поместить свой код в SalesLine DataSource в методе ValidateWrite() перед супер вызовом. Примерно так:

ret = YourCheckGoesHere;

if(ret)
{
   ret = super();
}
else
{
    info("Why validation failed goes here");
}
   return ret;
0 голосов
/ 17 февраля 2013

Затем вы внедрили логику валидации в таблицу, а не в форму, потому что вам нужно, чтобы валидация была общесистемной, но вам нужно предотвратить эту валидацию при вставке / обновлении записи.

Я думаю, что вы можете переопределить метод write () Form DataSource и использовать SalesLine.doInsert(); и SalesLine.doUpdate();

...