public async Task ProcessLockedTasks(string workerId, LockedExternalTask lockedExternalTask) { var executor = GetExecutor(lockedExternalTask.TopicName); var executorAttribute = GetExecutorAttributeData(executor); var externalTask = lockedExternalTask.ToExternalTask(); try { var resultVariables = await ExecuteExternalTask(executor, externalTask); var completeExternalTask = new CompleteExternalTask { WorkerId = workerId, Variables = resultVariables.ToVariableDictionary() }; await _engineClient.Client().ExternalTasks[externalTask.Id].Complete(completeExternalTask); } catch (ExternalTaskException ex) { HandleExternalTaskException(workerId, externalTask, ex); } catch (Exception ex) { HandleException(workerId, executorAttribute, externalTask, ex); } }
private void Execute(LockedExternalTask lockedExternalTask, Type type) { ExternalTask externalTask = lockedExternalTask.ToExternalTask(); var resultVariables = new Dictionary <string, object>(); try { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} Started", "INFO"); CreateAdapterInstanceAndExecute(externalTask, ref resultVariables, type); LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} Finished", "INFO"); CompleteExternalTask completeExternalTask = new CompleteExternalTask() { WorkerId = _workerId, Variables = resultVariables.ToVariableDictionary() }; _camundaClient.ExternalTasks[externalTask.Id].Complete(completeExternalTask); } catch (ExternalTaskException ex) { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} {ex.Message}", "ERROR"); ExternalTaskBpmnError externalTaskBpmnError = new ExternalTaskBpmnError() { WorkerId = _workerId, ErrorCode = ex.BusinessErrorCode }; _camundaClient.ExternalTasks[externalTask.Id].HandleBpmnError(externalTaskBpmnError); } catch (Exception ex) { LogEventToConsole($"{externalTask.ProcessDefinitionId} {externalTask.TopicName} {ex.Message}", "ERROR"); var retriesLeft = _externalTaskWorkerInfo.Retries; // start with default if (externalTask.Retries.HasValue) // or decrement if retries are already set { retriesLeft = externalTask.Retries.Value - 1; } ExternalTaskFailure externalTaskFailure = new ExternalTaskFailure() { WorkerId = _workerId, ErrorMessage = ex.Message, ErrorDetails = ex.StackTrace, RetryTimeout = _externalTaskWorkerInfo.RetryTimeout, Retries = retriesLeft }; _camundaClient.ExternalTasks[externalTask.Id].HandleFailure(externalTaskFailure); } }