#workflow-foundation-4 #workflowservice
#рабочий процесс-основа-4 #workflowservice
Вопрос:
У меня есть рабочий процесс блок-схемы .xamlx, который моделирует процесс утверждения. если отправитель изменяет документ до завершения блок-схемы, я хочу, чтобы отправитель «повторно отправил» документ. Я думал, что просто смогу снова вызвать первое действие приема, но я думаю, что рабочий процесс распознает, что он уже продвинулся дальше и завершается.
Нужно ли мне «отменить» рабочий процесс перед «повторной отправкой»? Или, возможно, мне просто нужен другой метод позже в блок-схеме, который вызывает отправитель? Любая помощь приветствуется.
Ответ №1:
Вы можете создать любую ветку, которую вы хотите в блок-схеме. Таким образом, вы можете просто вернуться к началу рабочего процесса. Однако вам необходимо явно смоделировать это в своем рабочем процессе.
Комментарии:
1. по сути, вы говорите, что мне нужен другой метод в моей службе, который я могу вызвать, который будет выполнять обратный цикл, правильно? После того, как я опубликовал это, это, по сути, направление, которое я тоже выбрал. Я искал другой способ, чтобы я мог сохранить методы, которые я предоставлял, минимальными, но это работает.
2. Если я не ошибаюсь, вы должны иметь возможность использовать копию исходного действия приема. Таким образом, клиент не видит другую операцию в WSDL. Я думаю, это должно сработать, потому что вы не активируете 2 идентичных приема.
3. о, это интересно. Я не думал об этом, хотя я использовал его в другом месте. Мне все равно понадобится выбор для ветвления кода, но, по крайней мере, мой интерфейс все равно будет чистым, а мой пользовательский интерфейс незнаком. Спасибо!
4. Я говорил слишком рано, это не сработало. Несмотря на то, что дизайнер позволил мне копировать Receive всякий раз, когда я пытаюсь вызвать этот метод, рабочий процесс вводится вверху и «отступает». Ошибки нет, он просто выходит из рабочего процесса, и все.
Ответ №2:
@Maurice был правильным MOL. Я мог бы скопировать исходное получение в более позднее место в рабочем процессе. Но для того, чтобы он работал правильно, для первого получения требовалось, чтобы как для инициализаторов CorrelatesOn, так и для инициализаторов Correlation была установлена одна и та же переменная дескриптора корреляции. Для «копирования» требовался только набор свойств CorrelatesOn. Возможно, это было очевидно, но, поскольку я этого не знал, я документирую здесь на случай, если у кого-то еще возникнет такая же проблема.
Комментарии:
1. Для первого должны потребоваться только инициализаторы корреляции, а для второго — только CorrelatesOn, и вы можете снять флажок CanCreateInstance, хотя это не повредит, если он установлен. Извините, я забыл упомянуть об этом.
2. Я повторно протестировал это столько способов, сколько мог придумать, и он работает только с обоими свойствами, установленными при первом получении.
3. да, он выполняется только один раз, если я настраиваю его, как указано выше, в противном случае он продолжает выполняться при каждом вызове метода