Добрый день.
В Активности с типом Задача мне нужно сделать новое поле, значение которого будет расчитываться по формуле :
Активность.Завершение - Активность.Начало
результата должен быть в минутах.
Подскажите, это поле должно быть какого типа? Формула должна быть заложена в обработчике того поля или при нажатии на ОК в самой Задаче? И как на С# написать эту формулу?
Заранее спасибо.
Нравится
Здравствуйте, Татьяна!
Если Вы хотите отображать в поле число минут, это может быть обычное строковое поле.
Определите в переменные типа 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…
Способ расчета поля зависит от того, как Вы это видите.
По нажатию на ОК - это значит, что поле заполнится только после сохранения карточки.
Вы можете реализовать алгоритм в обработчике изменения каждого из полей, при этом предусмотреть, чтобы алгоритм начинал отрабатывать, когда оба поля не пустые.
Здравствуйте, Татьяна!
Пример:
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);
Напишите функцию, которая проверяет значение поля в 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);
}
При опубликовании система выдает ошибку:
Помогите, разобраться, почему так происходит?
Сделал так:
поле Трудозатраты в карточке Задачи имеет св-ва включить и скрыть.
В Дизайнере процесса на обработчике изменения состояния Активности пишу условие:
if(status.Finish)
{Page.TrudZatrEdit.SetVisible(true);
Page.TrudZatrEdit.Required = true;
}
else
{ Page.TrudZatrEdit.Required = false;
Page.TrudZatrEdit.SetVisible(false);
Page.TrudZatrEdit.Clear();
}
Все откомпилировало без ошибок. Но: если я ввела данные в поле Трудозатраты, затем сохранила активность и после - открыла ее, то почему-то поле Трудозатраты не видимое?
На PageLoadComplete тоже нужно вызывать эту функцию.
Лучше всего вынести в функцию и вызывать из 2 мест.
Обратите внимание, что на этапе открытия страницы надо будет брать значение не из Page.StatusEdit.Value, а из Page.DataSource.ActiveRow.GetTypedColumnValue("StatusId"), или как там у Вас это поле названо.
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"), или как там у Вас это поле названо.
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-клиента.