12.02.2010, 20:16 | #1 |
Участник
|
SysUserInfo find
коллеги, может кто-нибудь мне объяснить, зачем в 4-й версии аксапты метод find всеми нами уважаемой таблицы SysUserInfo пытается чего-то внутри себя создавать?
как-то это выглядит против джентльменских правил. X++: static SysUserInfo find(userId _userId = curuserid(), boolean _forupdate = false) { SysUserInfo parameter; parameter.selectForUpdate(_forupdate); select firstonly parameter index UserIdx where parameter.Id == _userId; if (!parameter && !isConfigMode()) // Cannot create parameter before all tables are synced. { Company::createParameter(parameter); } return parameter; }
__________________
Felix nihil admirari Последний раз редактировалось wojzeh; 12.02.2010 в 21:16. Причина: опечатка |
|
12.02.2010, 20:30 | #2 |
Участник
|
Так делают в случаях, когда надо заполнить табличку с параметрами дефолтными значениями при первом обращении к параметрам. Поищите по другим таблицам - такой подход используется довольно часто.
|
|
12.02.2010, 21:20 | #3 |
Участник
|
на мой взгляд, это неверный подход. ибо если передать пустое значение в качестве userId, то оно будет заменено на ид текущего пользователя по умолчанию, и система попытается продублировать уже существующего пользователя, что, в свою очередь, приведёт к исключительной ситуации.
насколько я помню, каждая таблица должна иметь метод find, но нигде не говорилось, что он должен что-то создавать при этом. оправданным был бы подход в создании либо метода findAndCreateIfNotExist или хотя бы параметра наподобие forUpdate.
__________________
Felix nihil admirari |
|
17.02.2010, 14:30 | #4 |
Участник
|
Цитата:
|
|