Факт.трудозатраты в Активности

Добрый день.
В Активности с типом Задача мне нужно сделать новое поле, значение которого будет расчитываться по формуле :
Активность.Завершение - Активность.Начало

результата должен быть в минутах.

Подскажите, это поле должно быть какого типа? Формула должна быть заложена в обработчике того поля или при нажатии на ОК в самой Задаче? И как на С# написать эту формулу?
Заранее спасибо.

Нравится

26 комментариев

Здравствуйте, Татьяна!

Если Вы хотите отображать в поле число минут, это может быть обычное строковое поле.

Определите в переменные типа Datetime значения полей Активность.Завершение и Активность.Начало.
Примеры есть в конфигурации.

Используйте C#-функцию Subtract для получения разницы ними:
https://msdn.microsoft.com/ru-ru/library/8ysw4sby(v=vs.110).aspx

Используйте свойство Minute для получения количества минут рассчитанной разницы:
https://msdn.microsoft.com/ru-ru/library/system.datetime.minute%28v=vs…

Способ расчета поля зависит от того, как Вы это видите.
По нажатию на ОК - это значит, что поле заполнится только после сохранения карточки.
Вы можете реализовать алгоритм в обработчике изменения каждого из полей, при этом предусмотреть, чтобы алгоритм начинал отрабатывать, когда оба поля не пустые.

Добрый день
Пжста, приведите пример из конфигурации, как определить в переменные типа Datetime значения полей Активность.Завершение и Активность.Начало. Заранее спасибо

Здравствуйте, Татьяна!

Пример:

var startDate = (DateTime)Page.StartDateEdit.Value;

Добрый день

var startDate = (DateTime)Page.StartDateEdit.Value;
var dueDate = (DateTime)Page.DueDateEdit.Value;

System.DateTime Trudozatrat = dueDate - startDate; // все наши сотрудники работают в одном часовом поясе

Подскажите, а как этот результат вычитания (Trudozatrat) указать в соответствующем поле карточки активности? Как это написать на С# ?

Заранее спасибо

Здравствуйте, Татьяна!

Пример ниже:

Page.DueDateEdit.Value = startDate

Андрей, а если я хочу в поле "трудозатраты" выводить часы-мин (т.е. только время), какой тип должен быть у колонки в структуре Активности? Я выбрала тип - время.

А в странице карточки задачи выбрала - поле даты/времени. Так можно?

И еще: я изначально делаю это поле с признаками Включить и Скрыть. Подскажите, как на языке C# написать, чтобы поле отобразилось в карточке Задачи?

Здравствуйте, Татьяна!

Все верно.

Управлять видимостью поля можно следующим образом:

Page.CityEdit.SetVisible(true);

Добрый день.
Помогите, пжста, как на C# и где написать в карточке Активности (Задача) условие:
если в Активности выбрана Группа Ответственных не "1ая линия поддержки", то поле Трудозатраты.Активность становится видимым.
Заранее спасибо

Напишите функцию, которая проверяет значение поля в DataSource «Группа ответственных» и в зависимости от этого делает нужному контролу .SetVisible(true) или .SetVisible(false). Вызывайте эту функцию в 2 местах: на обработчике PageLoadComplete и на обработчике изменения значения контрола «Группа ответственных».

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

Добрый день.

В объекте Активность создала поле с типом Время. В дизайнере процесса на обработчике изменения состояния Активности пишу условие:
Если - конечное состояние, то поле Трудозатраты - видимое, иначе - нет:
if(status.Finish)
{Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();
}
else
{Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();

}
Все откомпилировалось без ошибок, работает.

Если же я хочу добавить строку с обязательным заполнением, т.е.:
if(status.Finish)
{Page.TrudZatrEdit.SetVisible(true);
Page.TrudZatrEdit.Clear();
Page.TrudZatrEdit.SetRequired(true);
}
else
{Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();
Page.TrudZatrEdit.SetRequired(false);
}
При опубликовании система выдает ошибку:

Помогите, разобраться, почему так происходит?

Попробуйте:

Page.TrudZatrEdit.Required = true;

Сделал так:
поле Трудозатраты в карточке Задачи имеет св-ва включить и скрыть.
В Дизайнере процесса на обработчике изменения состояния Активности пишу условие:
if(status.Finish)
{Page.TrudZatrEdit.SetVisible(true);
Page.TrudZatrEdit.Required = true;

}
else
{ Page.TrudZatrEdit.Required = false;
Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();
}
Все откомпилировало без ошибок. Но: если я ввела данные в поле Трудозатраты, затем сохранила активность и после - открыла ее, то почему-то поле Трудозатраты не видимое?

нужно еще писать в PageLoadComplete?

На PageLoadComplete тоже нужно вызывать эту функцию.

Т.е. тоже самое написать в ScriptPageLoadComplete ?

Лучше всего вынести в функцию и вызывать из 2 мест.
Обратите внимание, что на этапе открытия страницы надо будет брать значение не из Page.StatusEdit.Value, а из Page.DataSource.ActiveRow.GetTypedColumnValue("StatusId"), или как там у Вас это поле названо.

а открытие страницы - это скрипт ScriptPageLoadComplete?

PageLoadComplete — одно из событий, происходящих при открытии, а точнее, при его окончании. Всю логику видимости/заблокированности/обязательности только что открытой карточки добавляют туда.

Написала в ScriptPageLoadComplete :

var status = new Terrasoft.Configuration.ActivityStatus(Page.UserConnection);
var statusId = this.Page.StatusEdit.SelectedItem.Value;
if (statusId != string.Empty) {
status.FetchFromDB(statusId);
if(status.Finish)
{ Page.TrudZatrEdit.SetVisible(true);
Page.TrudZatrEdit.Required = true;
}
else
{Page.TrudZatrEdit.Required = false;
Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();
}
}
Откомпилировало без ошибок, но не работает.
Возможно, открытие страницы по другому называется?

"Зверев Александр" написал:Обратите внимание, что на этапе открытия страницы надо будет брать значение не из Page.StatusEdit.Value, а из Page.DataSource.ActiveRow.GetTypedColumnValue("StatusId"), или как там у Вас это поле названо.

А как брать значение из Page.DataSource.ActiveRow.GetTypedColumnValue("StatusId") ?

// Поле состояние.активности называется StatusEdit
// в структуре объекта колонка называется Status

Guid statusId = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("StatusId")

И не так это делается, а вот как:
в ScriptAfterBasePageLoadComplete пишу:

if (!(IsNew || IsCopy) && Page.DataSource.Rows[0].GetTypedColumnValue("Status_Finish")) {
Page.ResultEdit.Enabled = true;
Page.DetailedResultEdit.Enabled = true;
//
Page.TrudZatrEdit.Enabled = true;
Page.TrudZatrEdit.SetVisible(true);
//
}

Теперь ВСЕ! Работает!!!

Я создала на странице задачи новое поле «Трудозатраты». У меня (имеющего права сист.админа) – это поле открывается для редактирования при опред.условиях. А у сотрудника Иванова, имеющего права «Все сотрудники компании» - это поле не появляется вообще. Тогда я в доступе к объектам выбрала объект "Активность" - и в доступе к Колонке Трудозатраты указала уровень доступа "Все сотрудники подразделения " - (изображен карандаш). В итоге - поле у Иванова при опред.условиях появилось - но оно недоступно для редактирования, хотя у меня (при таких же условиях) это поле и открывается и доступно для редактирования. В чем проблема, подскажите, пжста.

Мало того: я на своем компьютере зашла под логином/паролем Иванова – у меня поле доступно для редактирования. А у Иванова с его компьютера – оно не активно для изменения. Как такое может быть?

Здравствуйте.
Если возникает такая ситуация, то здесь возможны два варианта:
1. Вы с пользователем подключаетесь на разные сайты.
2. Можно попробовать у пользователя очистить кэш браузера или сервера сессий (Redis). Очистка кэша Redis выполняется командой flushall в консоли Redis-клиента.

Показать все комментарии