...

[РЕШЕНО] Блок "Ожидание сообщения" не получил "сообщение" из блока "Отправка сообщения"

Тема в разделе "Проблемы/ошибки", создана пользователем FloeHetling, 8 июл 2020.

  1. FloeHetling

    FloeHetling New Member

    По какой-то причине блок ожидания сообщения не получил сообщение отправленное из блока отправка сообщения и теперь один из подпроцессов обширного процесса встал.
    Процесс очень длительный, идет уже очень долгое время и затрагивает огромное количество сотрудников, к тому же, сейчас он "живой" и потому его перезапуск крайне нежелателен.
    Подскажите, можно ли заставить процесс пропустить этот шаг? Или как-нибудь принудительно доставить это сообщение?

    Аналогичные шаги уже проходили без проблем, ума не приложу что в этот раз могло пойти не так. Задача отправки сообщения горит как выполненная, тип сообщения одинаковый.
     
  2. Tserrin

    Tserrin New Member

    Из скрипта можно, примерно так:

    string id = "11213";//задаём Id экземпляра процесса, в котором нужно прервать Ожидание сообщения
    var query = "Status = 'Awaiting' AND Bookmark IN(FROM WorkflowBookmark SELECT Id WHERE Instance = " + id + ")";
    var collection = PublicAPI.Processes.Objects.WorkflowMessageBookmark.Find(query).ToList();//находим Точки ожидания сообщения в статусе "Ожидание" для заданного экземпляра процесса
    foreach (var item in collection)
    {
    var element = item.Bookmark.Instance.Process.Diagram.Elements.Single(e => e.Uid == item.Bookmark.ElementUid) as BPMNFlowElement; var connector = element.OutputConnectors.FirstOrDefault(c => c.Name == "Переход 1");//находим переход по названию, если название не задано указываем c.Name ==""
    var securityService = Locator.GetServiceNotNull<ISecurityService>();
    var executeData = new WorkflowMessageReceviesTerminateData(item.Bookmark, connector.Uid, item);
    securityService.RunBySystemUser(() => Locator.GetServiceNotNull<IWorkflowRuntimeService>().Execute(executeData));//прерываем операцию "Ожидание сообщения", продолжаем процесс
    }
     
    1 это нравится
  3. FloeHetling

    FloeHetling New Member

    Виноват, не отписался когда разрешил ситуацию.
    Скрипт интересный, попробую потестировать, спасибо!
    В моем случае не был указан экземпляр процесса (переменная экземпляра) в блоках ожидания/отправкир, соответственно никакой гарантированной доставки. Как ни забавно, это было причиной проблемы - это и выручило. Создал другой БП, в нем поместил блок отправки сообщения, указал тип и содержимое, запустил БП - исходный БП охотно принял "сообщение" и продолжился.
     

Поделиться: