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

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

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

Postby Eugene » Wed Apr 27, 2016 4:02 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 h:mm a");
              task.setUdfValue("Start date:" ,  dateFormat.format(new GregorianCalendar().getTime()));
        return task;
    }
}

Проблема в том, что если сотрудник заполнил-таки поле "Start date:" при создании задачи (т.е. = запланировал её на будущее), то скрипт всё равно перезапишет его значение своим. Такого быть не должно, т.к. иначе будут проблемы с пользованием полем... Добавьте проверку, пожалуйста. :roll:

ДОПОЛНЕНИЕ:
Хотелось бы проверку наличия такого поля у задачи. А то ведь этот скрипт можно технически включить и для задачи без такого поля - не хотелось бы, чтобы что-то поломалось/заглючило из-за этого.
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

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

Postby dpochtarev » Wed Apr 27, 2016 5:00 pm

В TS есть свой DateFormatter. Через него надо было писать изначально. В этом и проблема.
Code: Select all
package scripts.before_create_task.example;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.secured.SecuredTaskTriggerBean;
import com.trackstudio.tools.formatter.DateFormatter;
import java.sql.Timestamp;
import java.util.Date;

public class BeforeCreate implements TaskTrigger {

    @Override
    public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
        DateFormatter df = new DateFormatter(
                task.getSecure().getTimezone(),
                task.getSecure().getLocale());
        if (task.getUdfValue("StartDate")!=null &&
                task.getUdfValue("StartDate").isEmpty()) {
            task.setUdfValue("StartDate",
                    df.parse(new Timestamp(new Date().getTime())) );
        }
        return task;
    }
}
dpochtarev
 
Posts: 282
Joined: Wed Aug 22, 2012 4:35 pm

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

Postby Eugene » Wed Apr 27, 2016 8:45 pm

Спасибо :!:

А вот скрипт для операций - может кому пригодится:

Code: Select all
package scripts.before_add_message;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.OperationTrigger;
import com.trackstudio.secured.SecuredMessageTriggerBean;
import com.trackstudio.tools.formatter.DateFormatter;
import java.sql.Timestamp;
import java.util.Date;

public class Check_for_Start_Date_For_Operations implements OperationTrigger {

    @Override
    public SecuredMessageTriggerBean execute(SecuredMessageTriggerBean message) throws GranException {
        DateFormatter df = new DateFormatter(
                message.getSecure().getTimezone(),
                message.getSecure().getLocale());
        if (message.getUdfValue("Start date:")!=null &&
                message.getUdfValue("Start date:").isEmpty()) {
            message.setUdfValue("Start date:",
                    df.parse(new Timestamp(new Date().getTime())) );
        }
        return message;
    }
}
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

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

Postby Eugene » Wed Apr 27, 2016 9:31 pm

И последнее осталось - для ситуации редактирования задачи.
Дмитрий любезно подсказал такой скрипт:

Code: Select all
package scripts.before_edit_task;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.secured.SecuredTaskTriggerBean;
import com.trackstudio.tools.formatter.DateFormatter;
import java.sql.Timestamp;
import java.util.Date;

public class Check_for_Start_Date implements TaskTrigger {

    @Override
    public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
        DateFormatter df = new DateFormatter(
                task.getSecure().getTimezone(),
                task.getSecure().getLocale());
        if (task.getUdfValue("Start date:")!=null &&
                task.getUDFValues().get("ff80818153967f1601539c10e9be0058").getValue()==null &&
                task.getUdfValue("Start date:").isEmpty()) {
            task.setUdfValue("Start date:",
                    df.parse(new Timestamp(new Date().getTime())) );
        }
        return task;
    }
}

Скрипт работает!
Но у него есть особенность. Работает так. например:
Зашёл в редактирование задачи с заполненным Start date -> удалил всё из Start date -> сохранил = Start date в задаче пусто (а должно быть текущее :idea: ) -> зашёл в редактирование задачи с пустым Start date -> НЕ заполнил Start date -> сохранил = в Start date подставилось текущее дата/время.
Т.е. пофиксить бы тот момент, что выделен жирным, и была бы идеальная защита для задач от ошибок.

ДОПОЛНЕНИЕ:
Похоже, что достаточно просто убрать строку "task.getUDFValues().get("ff80818153967f1601539c10e9be0058").getValue()==null &&". Но хотелось бы быть уверенным, что это правильно. :?:
Eugene
 
Posts: 127
Joined: Tue Jan 19, 2016 10:57 pm

Previous

Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: No registered users and 9 guests

cron