:: Visual Foxpro, Foxpro for DOS
Программная замена кода метода объекта.
Владислав

Сообщений: 2
Дата регистрации: 25.08.2017
Здравствуйте! Судя по тому что удавалось найти подобная тема поднималась неоднократно (активно лет 10 назад), но, в тех темах, которые удалось найти, либо предлагали решать проблему на этапе компиляции, либо специализированными для форм методами, что не подходит.

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

Было бы хорошо, во время вызова шаблона, программно подменить код метода tdialog_rep.valid на свой, а затем вернуть его обратно, чтобы не возникало проблем с другими отчётами. Не подскажете, возможно ли сделать подобное средствами VFP9?

чтобы логика была примерно такой:
local tmpfunc
tmpfunc = tdialog_rep.valid
tdialog_rep.valid = MyValid
getrepparams("CertifDomDlg", @creporgrn, @drepdate, " ORGBASE.RN In (Select ORBASE_RN From HozHabiR Where HozHabiR.FaceAcc_Rn = '"+vfaceacc.rn+"') ", , , @lmustbeinreestr, @cdocrn, @ccatalogrn)
tdialog_rep.valid = tmpfunc
FUNCTION MyValid
RETURN .T.
ENDFUNC



Исправлено 1 раз(а). Последнее : Владислав, 25.08.17 12:00
Ratings: 0 negative/0 positive
Re: Программная замена кода метода объекта.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет. Так делать нельзя. Да и не надо никогда.

Можно свой объект с кодом проверки подсовывать а из класса его дёргать - тогда заменяя объект ты заменяешь и код проверки.
Можно просто флажком (в классе свойство сделать - типа SkipValidation) вообще проверку отключать. Можно, наверное, ещё придумать кучу вариантов как добиться нужного поведения
Метод в фоксе объектом не является.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Программная замена кода метода объекта.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Видимо надо переделать шаблоны
В методе валид ввести параметр
Когда без него, все как раньше, когда с ним, есть варианты.
Например вызывать ExecScript
Который создавать в вызывающем объекте.
(что то мне не нравится)
Можно попробовать с BindEvent поиграться
Но лучше всего вызывать код проверки самого вызывающего объекта


------------------




Исправлено 1 раз(а). Последнее : Аспид, 25.08.17 15:43
Ratings: 0 negative/0 positive
Re: Программная замена кода метода объекта.
Владислав

Сообщений: 2
Дата регистрации: 25.08.2017
Благодарю за советы!

Попробую на следующей неделе в этом направлении посмотреть:
Igor Korolyov
Можно свой объект с кодом проверки подсовывать а из класса его дёргать - тогда заменяя объект ты заменяешь и код проверки.

Извиняюсь, что не пояснил, что сама программа разрабатывается сторонними разработчиками, иногда обновляется, поэтому перекомпиляция её самый крайний случай (скорее от отчётов откажемся). Как результат нет возможности непосредственно переписать сам метод.



Исправлено 1 раз(а). Последнее : Владислав, 25.08.17 20:27
Ratings: 0 negative/0 positive
Re: Программная замена кода метода объекта.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Значит делайте свою форму и не пользуйтесь их. Влезть "снаружи" в чужой код, если он сам не предусматривает такой возможности, нельзя.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Программная замена кода метода объекта.
akvvohinc
Автор

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Мне как-то удалось сделать что-то подобное, воспользовавшись тем, что чужая вызываемая программа не гасила клавишные комбинации (ON KEY LABEL). Видимо, программисты не застали и не успели поработать в FPD.

Работая уже в их программе, и нажимая нужную комбинацию, я передавал управление своей программе, а далее - анализ всего (переменных, свойств, таблиц и т.п.), что можно проанализировать, а при удаче - подменить своими значениями или даже своими таблицами, изменив, таким образом, ее дальнейшее поведение.



Исправлено 1 раз(а). Последнее : akvvohinc, 26.08.17 01:16
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика