2012-02-06 4 views
2

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

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

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

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

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

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

+0

я заметил что-то под названием this.isFormDataSource() - я думаю, что мне нужно что-то подобное, но который возвращает форму, может быть? – AnthonyBlake

ответ

6

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

+0

У меня нет «конкретной формы», у меня есть «системная» настройка, которую нужно пропустить при вызове из 1 конкретной формы. Поэтому this.dataSource(). FormRun(). Name() - это именно то, что мне нужно, спасибо. – AnthonyBlake

+1

На самом деле Винс, я только что посмотрел на Address.update(), и это прекрасный пример. Еще раз спасибо. – AnthonyBlake

1

Вы можете поместить свой код на SalesLineDataSource в методе ValidateWrite(), до супер Something вызова, как это:

ret = YourCheckGoesHere; 

if(ret) 
{ 
    ret = super(); 
} 
else 
{ 
    info("Why validation failed goes here"); 
} 
    return ret; 
+0

Спасибо, но я не добавляю чек для validateWrite, я хочу условно пропустить некоторые существующие функции. Поскольку эта функциональность необходима во всей системе при записи в SalesLine, она должна находиться в методе validateWrite таблицы SalesLine. – AnthonyBlake

+1

Я покажу вам, что вы можете в новой форме, которую вы создаете, остановить форму от вызова супер, чтобы она пропускала ваш код в методе Writeate Table Table. Вы можете запустить свою собственную проверку в форме и никогда не называть супер. –

+0

Но тогда мне пришлось бы реплицировать весь метод validateWrite из salesTable, чтобы удалить пару строк. И если кто-нибудь добавит валидацию в таблицу SalesLine validateWrite в будущем, ей потребуется добавить в 2 места. Нехорошо!!!! – AnthonyBlake

0

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

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

+0

Пожалуйста, не используйте подсветку кода, чтобы подчеркнуть слова; он должен использоваться только для фактического кода. –

+0

эй, это год, и переопределение write() пропустит любые другие проверки системы, поэтому это не будет хорошо. Смотрите мои комментарии на ответ Майка Брауна для получения дополнительной информации – AnthonyBlake

 Смежные вопросы

  • Нет связанных вопросов^_^