Подскажите скрипт для вставки текущего времени

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

Подскажите скрипт для вставки текущего времени

Postby Eugene » Wed Apr 20, 2016 4:53 am

Пытаемся сделать так, чтобы задачи можно было назначать на будущее. Т.е. чтобы они появлялись в списке/фильтре либо сразу (если кастом поле "Start date" не заполнено), либо когда наступит дата/время из поля "Start date".
Но фильтры в TS такого не поддерживают, т.е. они либо могут выводить все задачи (не обращая внимания на поле "Start date"), либо только те, у которых "Start date" есть и оно наступило. А если поле пустое/не заполнено, то такая задача никогда не появится в списке. :|

Думали, думали...придумали просто использовать скрипт, который будет проверять поле "Start date" перед созданием/редактированием/выполнением операции задачи. Если поле не пустое - отлично (скрипту больше ничего делать не надо). А если пустое - пусть сам вставит туда текущую время/дату (т.е. на момент создания/редактирования/выполнения операции по задаче). Так можно будет работать с одним фильтром, а не городить их 100500 подряд.

Помогите с кодом такого скрипта, пожалуйста.
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Re: Подскажите скрипт для вставки текущего времени

Postby admin » Wed Apr 20, 2016 3:57 pm

Погодите, а если по условию фильтрации указать, что start date должно быть 1 минуту назад или раньше - это разве не то что вам нужно ?
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 8148
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: Подскажите скрипт для вставки текущего времени

Postby Eugene » Wed Apr 20, 2016 7:30 pm

Перепробовал все 4 возможных варианта - не получилось. Либо отображается задача, которая имеет Start date в будущем (т.е. ещё не наступила, но отображается), либо ничего не отображается, хотя в системе есть аналогичная задача (но без Start date).
Видимо, скрипт нужен...
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Re: Подскажите скрипт для вставки текущего времени

Postby dpochtarev » Mon Apr 25, 2016 6:03 pm

Фильтр для задач, у которых StartDate завтра или сегодня - StartDate 1 дней вперед или раньше
В вашем случае лучше проверять скриптом, что поле заполнено. Не совсем понятна логика установки в поле сегодняшней даты, если поле пустое.
dpochtarev
 
Posts: 282
Joined: Wed Aug 22, 2012 4:35 pm

Re: Подскажите скрипт для вставки текущего времени

Postby Eugene » Tue Apr 26, 2016 5:15 am

В вашем случае лучше проверять скриптом, что поле заполнено.
Это затормозит работу сотрудников, т.к. гораздо проще не заполнять это поле, если всё равно на этот функционал для данной конкретной задачи, чем каждый раз тыкать в это поле/заполнять (да ещё и правильно). Поэтому, скрипт нужен, но который будет помогать с заполнением этого поля сам (как - см. мои пояснения в предыдущих сообщения).
Не совсем понятна логика установки в поле сегодняшней даты, если поле пустое.
Если оставить поле пустым, то эта задача никогда не появится в фильтре, где задано что-нибудь для этого поля (например: показать задачи, у которых Start date наступил). Таким образом, для работы фильтра нужно, чтобы это поле было заполнено.

Фильтр мы будем настраивать по этому полю так: 0 mins ago or less (т.е. чтобы отображались только те задачи, у которых Start date уже наступил = пришло время выполнения задачи).

Помогите со скриптом, пожалуйста.
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Re: Подскажите скрипт для вставки текущего времени

Postby dpochtarev » Tue Apr 26, 2016 2:47 pm

Вот код для before триггеров задач
Code: Select all
  SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yy HH:mm");
        if (task.getUDFValues().get("StartDateUdfId").getValue()==null)
            task.setUdfValue("StartDate" ,
                    dateFormat.format(new GregorianCalendar().getTime()));

и операций
Code: Select all
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yy HH:mm");
        if (message.getTask().getUDFValues().get("StartDateUdfId").getValue()==null)
            message.setUdfValue("StartDate" ,
                    dateFormat.format(new GregorianCalendar().getTime()));
dpochtarev
 
Posts: 282
Joined: Wed Aug 22, 2012 4:35 pm

Re: Подскажите скрипт для вставки текущего времени

Postby Eugene » Tue Apr 26, 2016 8:21 pm

Спасибо! Но не работает - до второго скрипта пока не добрался, а первый не работает:

Code: Select all
package scripts.before_create_task;

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.secured.SecuredTaskTriggerBean;

public class Check_for_Start_Date implements TaskTrigger {

    @Override
    public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
         SimpleDateFormat dateFormat = new SimpleDateFormat("MM.dd.yy HH:mm");
          if (task.getUDFValues().get("ff80818153967f1601539c11a5ed0080").getValue()==null)
              task.setUdfValue("ff80818153967f1601539c11a5ed0080" ,
                      dateFormat.format(new GregorianCalendar().getTime()));
        return task;
    }
}

Получаю ошибку, при попытке создать задачу:
java.lang.NullPointerException


Что делать?
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Re: Подскажите скрипт для вставки текущего времени

Postby dpochtarev » Wed Apr 27, 2016 1:08 pm

В setUdfValue указывается не Id, а название поля и проверять поля при создании задачи не нужно (задачи еще нет).
Code: Select all
package scripts.before_create_task;

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.secured.SecuredTaskTriggerBean;

public class Check_for_Start_Date implements TaskTrigger {

    @Override
    public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
         SimpleDateFormat dateFormat = new SimpleDateFormat("MM.dd.yy HH:mm");
              task.setUdfValue("UDFCaption" ,  dateFormat.format(new GregorianCalendar().getTime()));
        return task;
    }
}
Last edited by dpochtarev on Wed Apr 27, 2016 3:26 pm, edited 1 time in total.
dpochtarev
 
Posts: 282
Joined: Wed Aug 22, 2012 4:35 pm

Re: Подскажите скрипт для вставки текущего времени

Postby Eugene » Wed Apr 27, 2016 3:08 pm

Спасибо, Дмитрий.

Название поля у нас такое: "Start date:". Соответственно, заменил "UDFCaption" на "Start date:".
Но вылетает ошибка при создании задачи:
Stack Trace:
com.trackstudio.exception.GranException: Can't parse this date
at com.trackstudio.tools.formatter.DateFormatter.parseToCalendar(DateFormatter.java:126)
at com.trackstudio.kernel.manager.UdfManager.setUdfValue(UdfManager.java:830)
at com.trackstudio.kernel.manager.UdfManager.setTaskUdfValue(UdfManager.java:889)
at com.trackstudio.securedkernel.SecuredUDFAdapterManager.setUdfValue(SecuredUDFAdapterManager.java:1221)
at com.trackstudio.securedkernel.SecuredUDFAdapterManager.setTaskUDFValueSimple(SecuredUDFAdapterManager.java:1171)
at com.trackstudio.secured.SecuredTaskTriggerBean.update(SecuredTaskTriggerBean.java:274)
at com.trackstudio.secured.SecuredTaskTriggerBean.create(SecuredTaskTriggerBean.java:254)
at com.trackstudio.app.TriggerManager.createTask(TriggerManager.java:396)
at com.trackstudio.action.task.TaskEditAction.commonSaveTask(TaskEditAction.java:558)
at com.trackstudio.action.task.TaskEditAction.saveTask(TaskEditAction.java:322)
at sun.reflect.GeneratedMethodAccessor662.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at com.trackstudio.action.TSDispatchAction.execute(TSDispatchAction.java:75)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at com.trackstudio.action.TSStrutsServlet.doGet(TSStrutsServlet.java:36)
at com.trackstudio.action.TSStrutsServlet.doPost(TSStrutsServlet.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:130)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at com.trackstudio.filters.CompressResponseFilter.doFilter(CompressResponseFilter.java:64)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)


Если изменить "MM.dd.yy HH:mm" на "dd.MM.yy HH:mm", то получим:
Stack Trace:
com.trackstudio.exception.GranException: Can't parse this date
at com.trackstudio.tools.formatter.DateFormatter.parseToCalendar(DateFormatter.java:126)
at com.trackstudio.kernel.manager.UdfManager.setUdfValue(UdfManager.java:830)
at com.trackstudio.kernel.manager.UdfManager.setTaskUdfValue(UdfManager.java:889)
at com.trackstudio.securedkernel.SecuredUDFAdapterManager.setUdfValue(SecuredUDFAdapterManager.java:1221)
at com.trackstudio.securedkernel.SecuredUDFAdapterManager.setTaskUDFValueSimple(SecuredUDFAdapterManager.java:1171)
at com.trackstudio.secured.SecuredTaskTriggerBean.update(SecuredTaskTriggerBean.java:274)
at com.trackstudio.secured.SecuredTaskTriggerBean.create(SecuredTaskTriggerBean.java:254)
at com.trackstudio.app.TriggerManager.createTask(TriggerManager.java:396)
at com.trackstudio.action.task.TaskEditAction.commonSaveTask(TaskEditAction.java:558)
at com.trackstudio.action.task.TaskEditAction.saveTask(TaskEditAction.java:322)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at com.trackstudio.action.TSDispatchAction.execute(TSDispatchAction.java:75)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at com.trackstudio.action.TSStrutsServlet.doGet(TSStrutsServlet.java:36)
at com.trackstudio.action.TSStrutsServlet.doPost(TSStrutsServlet.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:130)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at com.trackstudio.filters.CompressResponseFilter.doFilter(CompressResponseFilter.java:64)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Re: Подскажите скрипт для вставки текущего времени

Postby Eugene » Wed Apr 27, 2016 3:21 pm

Нашёл (подобрал решение) - нужно так: "MM/dd/yy h:mm a" :D

Теперь буду тестить второй скрипт.
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Next

Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: No registered users and 9 guests

cron