...

Как узнать Id текущей задачи

Тема в разделе "Разработчикам", создана пользователем dimich1978, 11 фев 2020.

  1. dimich1978

    dimich1978 Member

    Доброго всем дня!
    Есть задача, в графической модели. Я хочу в скрипт(в задаче) при открытии формы добавить наблюдателя.
    context.ListMatching = (User)UserManager.Instance.Find (u => u.Id == 9797).FirstOrDefault ();
    var wat = PublicAPI.Portal.Objects.Common.Watch.Create ();
    // создаем объект слежения
    wat.TypeUid = EleWise.ELMA.Model.Services.InterfaceActivator.UID<EleWise.ELMA.Tasks.Models.Task> ();
    // загружаем идентификатор объекта Задача
    wat.EntityId = ????????
    wat.User = context.ListMatching;
    wat.Save ();

    И тут вопрос, как вытянуть Id текущей задачи. wat.EntityId = ???????? чтобы вместо ????? подставить Id задачи. Задача не создается динамически. Она создана в графической модели.
    При динамическом создании я нашел как вычисляется Id, а вот тут я ступоре.
    Посоветуйте , как можно узнать ID. Спасибо
     
  2. yar

    yar New Member

    Помню была статья в КБ, как найти задачу по её наименованию на графической схеме:
    https://www.elma-bpm.ru/KB/article-5998.html

    Способ поиска по имени лично мне кажется дурацким, но зато работает. Может натолкнёт на какие то мысли.
     
  3. pushkarev

    pushkarev Active Member

    Я бы советовал добавлять наблюдателей не при открытии формы, а на обработчик OnTaskCreate (его можно прописать прямо в сценарии процесса).
    Вот у меня есть пример, как я делал обработчик создания задачи в процессе:
    Код:
    public override void OnTaskCreate(ITaskBase task, НазваниеКлассаПроцесса context)
    {
        IWorkflowTaskBase workflowTask = task as IWorkflowTaskBase;
        if (workflowTask != null && workflowTask.WorkflowBookmark != null
            && workflowTask.WorkflowBookmark.ElementUid != null
            && workflowTask.WorkflowBookmark.ElementUid.HasValue
            && workflowTask.WorkflowBookmark.ElementUid.Value == new Guid(GuidЗадачиИзКартыПроцесса))
        {
            // Тут прописываете добавление наблюдателя, workflowTask будет содержать Id текущей задачи.
        }
    }
    GuidЗадачиИзКартыПроцесса можно посмотреть на карте процесса, открыв карточку нужной задачи и наведя курсор на слово "Название", на вкладке общие. Всплывет подсказка с Guid данной задачи, и по клику будет скопировано в буфер обмена.
     
  4. dimich1978

    dimich1978 Member

    Зашел в тупик. Попробую описать его. И всю последовательность моих действий.

    1. У меня после стартового события, стоит блок сценарий "Определение текущего месяца". К процедуре, которая определяет текущий месяц, я добавил ваш код с указанием Guid своей задачи. И вписал в { код для добавления наблюдателя, который я указал в своем первом сообщении}
    Получилось:
    Код:
         public partial class P_PeresmotrReglamentovNaAk_Scripts : EleWise.ELMA.Workflow.Scripts.ProcessScriptBase<Context>
    {
    /// <summary>
    /// EndDayInMonth
    /// </summary>
    /// <param name="context">Контекст процесса</param>
    public virtual void EndDayInMonth (Context context)
    {
    context.DayEnd = DateTime.Today.Month.ToString ();
    }
    /// <summary>
    /// OnTaskCreate
    /// </summary>
    /// <param name="context">Контекст процесса</param>
    public override void OnTaskCreate (ITaskBase task, P_PeresmotrReglamentovNaAk context)
    {
    IWorkflowTaskBase workflowTask = task as IWorkflowTaskBase;
    if (workflowTask != null && workflowTask.WorkflowBookmark != null && workflowTask.WorkflowBookmark.ElementUid != null && workflowTask.WorkflowBookmark.ElementUid.HasValue && workflowTask.WorkflowBookmark.ElementUid.Value == new Guid ("9c070625-c65b-4d5c-a3ef-be102a2277e4")) {
    // Тут прописываете добавление наблюдателя, workflowTask будет содержать Id текущей задачи.
    context.ListMatching = (User)UserManager.Instance.Find (u => u.Id == 9798).FirstOrDefault ();
    var wat = PublicAPI.Portal.Objects.Common.Watch.Create ();
    // создаем объект слежения
    wat.TypeUid = EleWise.ELMA.Model.Services.InterfaceActivator.UID<EleWise.ELMA.Tasks.Models.Task> ();
    // загружаем идентификатор объекта Задача
    wat.EntityId = Convert.ToString (workflowTask);
    wat.User = context.ListMatching;
    wat.Save ();
    }
    }
    }
    }
    Далее запускаю процесс, задача создается. Захожу в задачу, иду в "Действия", там про наблюдателей пусто. По факту не вижу в задаче, где посмотреть наблюдателей.
    Где в моей логике ошибка?
    Если создаю задачу "ручками" , назначаю на сотрудника. Захожу под сотрудником, вижу задачу, открываю, и там в "Действия" есть
    список наблюдателей (я указывал, когда создавал задачу в ручную).

    Просьба не пинать. Помогите советом.




     
  5. pushkarev

    pushkarev Active Member

    По поводу кода добавления наблюдателя: я бы попробовал сделать по примеру добавления наблюдателя в документ: https://www.elma-bpm.ru/KB/article-5537.html Думаю слежение за задачей должно работать аналогично, но не уверен, нужно пробовать.
    Для вашего примера примерно так должно получиться (но код я не тестировал):
    Код:
    PublicAPI.Services.WatchEntity.CreateWatchByUser(workflowTask.TypeUid, workflowTask.Id, context.ListMatching);
    По поводу того, что вы не видите кнопки "список наблюдателей" в процессной задаче, то это нормально. Разработчики такое не предусматривали, что кому-то потребуется следить за задачей по процессу, но вполне возможно, что будет работать, хоть и не отображаясь явно в задаче.
     
  6. dimich1978

    dimich1978 Member

    Я так понимаю проверить можно вешается ли наблюдатель в таблице запросом? Интересно в какой, либо раскручивать от TaskBase таблицы.
     
  7. pushkarev

    pushkarev Active Member

    Нет, слежение ведется в отдельно таблице. Вы можете проверить просто поискав эту задачу авторизовавшись под пользователем, которого добавили в наблюдатели. Будет ли он получать оповещения и иметь доступ к задаче. Если да - то цель достигнута.
    Посмотреть наблюдателей можно следующим образом: администрирование - система - фильтрация объектов и там выбрать: Следящие за объектом, в этой таблице уже искать добавленного к созданной задаче наблюдателя, если он там есть значит наблюдатель добавился.
     

Поделиться: