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

Сообщить исполнителю задания, что его задание будет возвращено после завершения

Комментарии

Комментариев: 8

  • Подозреваю, что без скрипта никак.

    Если скриптом, то в секции Delegates (task.Delegates через модель) находим нужного нам делегировавшего, у него в поле Return будет true, если требуется возврат (можно просто взять строку с максимальной датой делегирования - Date).

    И, собственно, если это так, то, н-р, в какую-нибудь метку выводим соответствующий текст.

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Сергей Логвиненко

    Получается, что надо рекурсивно по всему дереву смотреть?

    Ведь из одного делегирования - может быть другое, так?

    0
    Действия с комментариями Постоянная ссылка
  • Примерно так и есть.

    Как вариант - получить все строки соответствующей секции через низкоуровневое API (метод GetAllRows() у секции) и поискать строку с максимальной датой в них.

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Сергей Логвиненко

    Евгений,

    я правильно понимаю, что сколько бы делегирований не было от одного пользователя - другому, при нажатии на кнопку "Завершить" - завершается последнее "активное" делегирование?

    Например, сотрудник1 делегировал сотруднику2, тот - сотруднику3, потом сотруднику4, все делегирования были с возвратом.

    И например, если сотрудник 2 завершит задание - оно будет возвращено сотруднику3?

    0
    Действия с комментариями Постоянная ссылка
  • Да, именно так.

    Просто, по логике все эти делегирования как раз и будут упорядочены по датам именно в том порядке, в котором эти делегирования осуществлялись.

    Ну и задание при завершении примерно так и делает - если нужен возврат с делегирования, то возвращается к тому, у кого последнего стоял этот самый флаг Return.

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Сергей Логвиненко

    Что-то в таком духе?

                      SectionData sectionData = this.CardData.Sections[new Guid("2BD2883D-0FBE-47F3-A24B-D5489466765A")];

                      if (sectionData.Rows.Count > 0)

                      {

                            RowData rowData1 = sectionData.GetAllRows().LastOrDefault(item=>item.GetBoolean("Return")==true && item.GetBoolean("Returned")==false);

                            if (rowData1 !=null)

                            {

                                 StaffEmployee staffEmployee = CardControl.ObjectContext.GetObject<StaffEmployee>(rowData1.GetGuid("DelegatedEmployee"));

                                 MessageBox.Show("Задание после завершения будет возвращено " + staffEmployee.LastName);

                            }

                            else

                            {

                                 MessageBox.Show("Задание было делегировано без возврата");

                            }

                      }

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Роман Илюшин

    Сергей, есть один момент, который вы упустили, когда задание будет завершено и перейдет в состояние "Возврат с делегирования", то ваш скрипт также отобразит сообщение. Решал похожую задачу с помощью скрипта на событие CardActivated карточки задания КС, - в текстовый контрол пишется текст: комментарий делегату+с возвратом или без. Получилось как-то так:



    <code>

    //заполняем поле с комментарием
    ILayoutPropertyItem taskNoteProp = Customizable.FindPropertyItem<ILayoutPropertyItem>("TaskNote");
    if (taskNoteProp != null)
    {
    StringBuilder sb = new StringBuilder();
    //текс который отображается делегату
    if (Task.SystemInfo.State.DefaultName == Task.DelegatedState.Name)
    {
    sb.Append("Делегировано");
    TaskDelegate taskDelegate = Task.Delegates.Last();
    if (taskDelegate.Return)
    sb.Append(" c возвратом");
    sb.Append(" от ");
    sb.Append(taskDelegate.DelegatedEmployee.EmplName);
    if (!string.IsNullOrEmpty(taskDelegate.Comment))
    {
    sb.Append(": ");
    sb.Append(taskDelegate.Comment);
    }
    }
    //текст который отображается при возврате с делегирования
    if (Task.SystemInfo.State.DefaultName == Task.ReturnFromTheDelegationState.Name)
    {
    sb.Append("Возвращено с делегирования от ");
    sb.Append(Task.MainInfo.CompletedUser.EmplName);
    if (Task.MainInfo.CompletionResult != null)
    {
    sb.Append(": ");
    sb.Append(Task.MainInfo.CompletionResult.Name);
    }
    }

    if (sb.Length == 0)
    {
    TaskComment taskComment = Task.Comments.LastOrDefault();
    StaffEmployee curEmployee = this.CardControl.ObjectContext.GetService<IStaffService>().GetCurrentEmployee();
    if (taskComment != null && taskComment.Author != curEmployee)
    {
    sb.Append(taskComment.Author.DisplayString);
    sb.Append(": ");
    sb.Append(taskComment.ShortContent);
    }
    }
    //показать/скрыть контрол
    if (sb.Length > 0)
    {
    taskNoteProp.ControlValue = sb.ToString();
    Customizable.LayoutControl.Items.FindByName("TaskNote").Visibility = LayoutVisibility.Always;
    }
    else
    {
    Customizable.LayoutControl.Items.FindByName("TaskNote").Visibility = LayoutVisibility.Never;
    }
    }

    </code>

     

     

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Сергей Логвиненко

    Роман, действительно забыл про это. Спасибо большое за ваш комментарий!

    0
    Действия с комментариями Постоянная ссылка

Войдите в службу, чтобы оставить комментарий.