Проблема при написании скрипта

Обсуждаем TrackStudio по-русски

Проблема при написании скрипта

Postby sunshinetk » Thu Aug 12, 2010 2:54 pm

При тестировании скрипта выдается следующая ошибка
Error: com.trackstudio.exception.GranException: Could not execute JDBC batch update
In: .setTaskUdfValue ( udfId , taskId , Nm , lc , tz )
Message: Sourced file: inline evaluation of: ``import java.lang.StrictMath; import com.trackstudio.tools.formatter.DateFormatte . . . '' : target exception


сам скрипт

Trigger / Create Task / AFTER Trigger
import com.trackstudio.kernel.manager.KernelManager;
String taskId = task.getId();
String Zaja = task.getUdfValue("Заявитель");
String udfId = CSVImport.findUDFIdByName("Заявитель");
String Nm = task.getHandler().getLogin();
String lc = sc.getLocale();
String tz = sc.getTimezone();
if (Zaja.equals(""))
{KernelManager.getUdf().setTaskUdfValue(udfId,taskId,Nm,lc,tz);
task.update(true);}
return task;
sunshinetk
 
Posts: 63
Joined: Wed Sep 16, 2009 8:27 am

Re: Проблема при написании скрипта

Postby mvasenkov » Thu Aug 12, 2010 7:07 pm

sunshinetk wrote:При тестировании скрипта выдается следующая ошибка
Error: com.trackstudio.exception.GranException: Could not execute JDBC batch update
In: .setTaskUdfValue ( udfId , taskId , Nm , lc , tz )
Message: Sourced file: inline evaluation of: ``import java.lang.StrictMath; import com.trackstudio.tools.formatter.DateFormatte . . . '' : target exception
сам скрипт

Это скрипт для 3.5 или 4.0?
В любом случае мне не нравится попытка что-то писать через Kernel, тем более потом делать task.update(). Подозреваю, что после выполнения метода через Kernel от task остаются рожки да ножки, т.е. он невалиден (у нас там кеширование хитрое).

Если для 4.0, то, во-первых, очень рекомендую ознакомиться с мануалом: http://www.trackstudio.ru/scripts-how-to.html и перейти на скомпилированные скрипты: это и быстрее, и правильнее, и дебажить можно, да и в stackTrace номер строки выводится, можно точно посмотреть.
Во-вторых, ничего не делать через Kernel. Есть SecuredKernel (скорее всего SecuredTaskAdapterManager). В том же мануале есть примеры, как менять значения UDF. Если чего-то там не хватает из примеров - сообщите, я завтра напишу и добавлю.
Skype (RU): max.vasenkov
Email/Jabber: max.vasenkov@gmail.com
twitter: @winzard
mvasenkov
TrackStudio Support
 
Posts: 318
Joined: Tue Jan 14, 2003 5:57 pm
Location: Smolensk

Re: Проблема при написании скрипта

Postby mvasenkov » Thu Aug 12, 2010 7:11 pm

Да, еще маленький совет: лучше менять значения в Before-триггерах прямо внутри SecuredTaskTriggerBean, там есть Map и, насколько помню, метод setUdfValue(caption, value). При этом task.update() делать не надо, если дело происходит в before-триггере.
Skype (RU): max.vasenkov
Email/Jabber: max.vasenkov@gmail.com
twitter: @winzard
mvasenkov
TrackStudio Support
 
Posts: 318
Joined: Tue Jan 14, 2003 5:57 pm
Location: Smolensk

Re: Проблема при написании скрипта

Postby a-b-c » Thu Aug 12, 2010 10:33 pm

Максим, правильно ли я понимаю, что KernelManager отличается от SecuredKernel тем, что в последнем проверяются права пользователя на выполнение каких-либо действий? Если нет, то в чём тогда между ними разница?
TrackStudio 4.0.14 x64
Windows SA + PostgreSQL 9.1
a-b-c
 
Posts: 548
Joined: Fri Jul 10, 2009 10:15 am
Location: Moscow, Russia

Re: Проблема при написании скрипта

Postby sunshinetk » Fri Aug 13, 2010 9:36 am

TrackStudio 3.5.68
Проблема в том, что поле для пользователя не доступно для редактирования, но в него нужно автоматически записать информацию, когда пользователь создал новую задачу и является ответственным. На форуме пишут, что это можно сделать только через Kernel.
sunshinetk
 
Posts: 63
Joined: Wed Sep 16, 2009 8:27 am

Re: Проблема при написании скрипта

Postby admin » Fri Aug 13, 2010 9:40 am

Да, надо через Kernel. SecuredKernel - это слой-обертка над Kernel, которая проверяет права и транслирует вызовы в Kernel.
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7305
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: Проблема при написании скрипта

Postby sunshinetk » Fri Aug 13, 2010 12:32 pm

mvasenkov wrote:Да, еще маленький совет: лучше менять значения в Before-триггерах прямо внутри SecuredTaskTriggerBean, там есть Map и, насколько помню, метод setUdfValue(caption, value). При этом task.update() делать не надо, если дело происходит в before-триггере.


По совету написал скрипт для Trigger / Create Task / BEFORE Trigger
String Nm = task.getHandler().getLogin();
String Zaja = task.getUdfValue("Заявитель");
if (Zaja.equals("")) task.setUdfValue("Заявитель", Nm);
return task;

Работает чудно, если у пользователя есть права на редактирование поля , но если нет то: java.lang.NullPointerException: Null Pointer in Method Invocation
В общем с чего начали к тому и вернулись и задачка осталась не решенной. :?
sunshinetk
 
Posts: 63
Joined: Wed Sep 16, 2009 8:27 am

Re: Проблема при написании скрипта

Postby admin » Fri Aug 13, 2010 12:48 pm

Нет, через Kernel - это не так :-) Попрошу разработчиков пример прислать.
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7305
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: Проблема при написании скрипта

Postby Petr » Fri Aug 13, 2010 12:59 pm

Все правильно просто не надо делать обновления задачи. то есть task.update();
вы записали в базу и внутри kernal идет обновления кеша. так что все должно работать.
Code: Select all
import com.trackstudio.kernel.manager.KernelManager;

String taskId = task.getId();
String Zaja = task.getUdfValue("Заявитель");
String udfId = CSVImport.findUDFIdByName("Заявитель");
String Nm = task.getHandler().getLogin();
String lc = sc.getLocale();
String tz = sc.getTimezone();

if (Zaja.equals("")) {
     KernelManager.getUdf().setTaskUdfValue(udfId,taskId,Nm,lc,tz);
}
return task;
TS Support
email: parsentev@yandex.ru
Petr
 
Posts: 1125
Joined: Wed Aug 12, 2009 4:38 pm

Re: Проблема при написании скрипта

Postby mvasenkov » Fri Aug 13, 2010 1:55 pm

sunshinetk wrote:По совету написал скрипт для Trigger / Create Task / BEFORE Trigger
String Nm = task.getHandler().getLogin();
String Zaja = task.getUdfValue("Заявитель");
if (Zaja.equals("")) task.setUdfValue("Заявитель", Nm);
return task;

Работает чудно, если у пользователя есть права на редактирование поля , но если нет то: java.lang.NullPointerException: Null Pointer in Method Invocation
В общем с чего начали к тому и вернулись и задачка осталась не решенной. :?


Если прав на редактирование нет, то через SecuredKernel нельзя, конечно. Тогда через Kernel, но очень аккуратно :)
Skype (RU): max.vasenkov
Email/Jabber: max.vasenkov@gmail.com
twitter: @winzard
mvasenkov
TrackStudio Support
 
Posts: 318
Joined: Tue Jan 14, 2003 5:57 pm
Location: Smolensk

Next

Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: Google [Bot] and 0 guests

cron