0

より正確には、最初の反復で「削除」された後の反復から参加者を削除する方法はありますか?タスクを削除するには?

意味...

たとえば、いくつかの並列ワークフローがあります。私は10参加者を選び、このビジネスプロセスを開始しました。したがって、参加者ごとに1つずつ、10のタスクが作成されました。しかし、私はいくつかの参加者を削除することに決めました。

私が知る限り、私はタスクを削除することはできません。しかし、私はWebScriptを使用してこれらのタスクを完了することができます。たとえば、次のようにします。

... 
Map<String, String> templateArgs = req.getServiceMatch().getTemplateVars(); 

// String workflowId = templateArgs.get("workflowId"); 
String taskId = templateArgs.get("taskId"); 

Map<QName, Serializable> updatedProperties = new HashMap<>(); 
updatedProperties.put(TaskRemoverModel.REVIEW_OUTCOME_PROPERTY, "Approve"); 
updatedProperties.put(TaskRemoverModel.COMMENT_PROPERTY, 
    "The user was excluded from the list of participants."); 

workflowService.updateTask(taskId, updatedProperties, null, null); 
workflowService.endTask(taskId, null); 
... 

しかし、問題は、改訂の段階では、イニシエータが再び承認のために送ることができるということです。私はworkflowIdtaskIdを知っています。除外された参加者のタスクが再度作成されます。

これらの参加者を「マークする」方法はありますか?将来的にどのようなタスクも作成されていませんか?

私は情報に非常に感謝します。ありがとうございます。協会のために譲受人:

+1

ワークフロー変数からタスクを完了した後に参加者を削除できるようにする必要があります。そのため、次のタスクが次の修正を作成しないようになります。 –

+0

コメントありがとうございました!素晴らしいアイデア、私はそれを試し、あなたに知らせるでしょう。 –

答えて

0

この解は、次のように表すことができます。

WebScriptでは、タスクのプロパティを更新してそのタスクを完了する必要があります。タスクのプロパティは除外され、参加者(所有者だった人)を参照して新しいプロパティを追加するには、次のタスクのcompleteイベントについて

... 
Map<String, String> templateArgs = req.getServiceMatch().getTemplateVars(); 

String taskId = templateArgs.get("taskId"); 

Map<QName, Serializable> updatedProperties = new HashMap<>(); 
updatedProperties.put(TaskRemoverModel.WORKFLOW_CONFIRM_MODEL_CONFIRMOUTCOME_PROPERTY, 
    "Approve"); 
updatedProperties.put(TaskRemoverModel.WORKFLOW_MODEL_LASTCOMMENT_PROPERTY, 
    I18NUtil.getMessage("task.comment.excluded")); 

WorkflowTask workflowTask = workflowService.getTaskById(taskId); 
Iterator taskProperties = workflowTask.getProperties().entrySet().iterator(); 
while(taskProperties.hasNext()) { 
    Map.Entry taskProperty = (Map.Entry)taskProperties.next(); 
    if(TaskRemoverModel.CONTENT_MODEL_OWNER_PROPERTY.toString().equals(
     taskProperty.getKey().toString())) { 
     updatedProperties.put(TaskRemoverModel.TASK_WAS_EXCLUDED_SIGN, 
       personService.getPerson(taskProperty.getValue().toString())); 
    } 

} 

workflowService.updateTask(taskId, updatedProperties, null, null); 
workflowService.endTask(taskId, null); 
... 

リスナーを追加します。このリスナーはWebScriptにこの呼び出しの後に動作します:リスナーで

... 
workflowService.endTask(taskId, null); 
... 

を、除外参加者に参照した、この新しいプロパティを見つけます。その後、再び変数bpm_assigneesbpm_assigneesのリストを取得し、そのリストから、この参加者のための参照を削除し、設定します。

public class TaskCompleteListener implements TaskListener { 
    private Map<Object, Object> registeredBeans = 
     Context.getProcessEngineConfiguration().getBeans(); 
    private ServiceRegistry registry = 
     (ServiceRegistry) registeredBeans.get(
      ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY); 
    private WorkflowService workflowService = registry.getWorkflowService(); 

    @Override 
    public void notify(DelegateTask delegateTask) { 
     WorkflowTask workflowTask = 
      workflowService.getTaskById("activiti$" + delegateTask.getId()); 
     Map<QName, Serializable> taskProperties = workflowTask.getProperties(); 

     Iterator iterator = taskProperties.entrySet().iterator(); 
     while(iterator.hasNext()) { 
      Map.Entry taskProperty = (Map.Entry)iterator.next();    
      if(taskProperty.getKey().toString().equals(
      ContractsApprovalModel.TASK_WAS_EXCLUDED_SIGN)) { 
       ActivitiScriptNodeList assignees = 
        (ActivitiScriptNodeList) delegateTask.getVariable("bpm_assignees"); 
       for(ActivitiScriptNode personNode : assignees) { 
        if(personNode.getNodeRef().toString().equals(
         taskProperty.getValue().toString())) { 
         assignees.remove(personNode); 
        } 
       } 
       delegateTask.setVariable("bpm_assignees", assignees); 
      }    
     } 
    } 
} 

を、それが実行時に参加者のタスクを削除することが可能になることをした後、これらの参加者のために再送信した後タスクは生成されません。

1

あなたは、あなたがBPMを使用している場合は、JavaScriptのを使用して、リストから人を削除するにはコードの下のタスクの使用を完了assignee.Whenのリストからユーザーを削除することができます。

bpm_assignees.remove(人); //ここで、personは現在ログインしている人物です。

javaでの関連付けを削除するためにnodeServiceを使用できます。

+2

私は同じものを入力しようとしています。 –

+0

ありがとうございました!私はそれを試し、あなたに知らせるでしょう。 –

+0

@Muralidharan Deenathayalan - あなたも答えを書くことができます、私はあなたの助けに感謝いたします。 –

関連する問題