2012-11-25 20 views
8

Tôi muốn có thể chuyển danh sách người dùng làm ứng viên cho một tác vụ. Người dùng được truy xuất từ ​​danh sách dữ liệu và không có sẵn dưới dạng nhóm. Activiti: ứng cử viênNgười dùng dường như là phương pháp phù hợp.Làm cách nào để chuyển danh sách người dùng ứng cử viên đến một tác vụ quy trình làm việc hoạt động trong alfresco?

Giả sử rằng người dùng đã được lấy và đặt trong biến, ipw_reviwers.

<serviceTask id="alfrescoScripttask1" name="Alfresco Script Task" activiti:class="org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate"> 
    <extensionElements> 
    <activiti:field name="script"> 
     <activiti:string>logger.log("IPW - setup task"); 
     execution.setVariable('ipw_reviwers', "tom, dick, harry");</activiti:string> 
    </activiti:field> 
    </extensionElements> 
</serviceTask> 

Sau đây để sử dụng ipw_reviewers biến

<userTask id="adhocTask" name="Adhoc Task" activiti:candidateUsers="${ipw_reviewers}" activiti:formKey="wf:activitiReviewTask"> 
    <extensionElements> 
    <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
     <activiti:field name="script"> 
     <activiti:string>logger.log("IPW - create task"); 
     if (typeof bpm_workflowDueDate != 'undefined') task.setVariableLocal('bpm_dueDate', bpm_workflowDueDate); 
        if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;</activiti:string> 
     </activiti:field> 
    </activiti:taskListener> 
    </extensionElements> 
</userTask> 

Không ai có thể nhìn thấy hoặc yêu cầu nhiệm vụ. Nếu chỉ có một người dùng trong danh sách, người dùng đó có thể xác nhận tác vụ.

Nếu activiti: candidateUsers được khai báo là

activiti:candidateUsers="tom, dick, harry" 

sau đó cả ba người dùng có thể tuyên bố nhiệm vụ.

Danh sách người dùng có thể được chuyển đến activiti: ứng cử viênNgười dùng trong biến hoặc phương pháp khác nên được sử dụng không?

+0

là câu trả lời của tôi làm việc cho bạn? –

+0

Tương tự như câu trả lời mới nhất từ ​​user68910801, bạn cũng có thể tạo danh sách bằng JavaScript dựa trên Rhino (được sử dụng trong Alfresco). Nó chỉ là một chút khó chịu hơn để xử lý vì a) bạn không có thao tác 'Java.type()' (thay vào đó bạn sử dụng 'Packages.java.util.ArrayList'), b) kiểu String JavaScript trong Rhino không ánh xạ tới chuỗi Java và c) danh sách được xử lý ngầm như đối tượng giống mảng và một số phương thức của nó (như thêm) có thể bị ẩn –

Trả lời

4

Sau khi xác nhận rằng sự cố đã tồn tại activiti 5.10 từ http://activiti.org và sau đó được rà soát thông qua nguồn của activiti từ git repo, tôi đã tìm kiếm trên diễn đàn activiti. Tôi đã xem qua Khi bạn muốn có nhiều người dùng ứng viên, bạn sẽ phải sử dụng Bộ sưu tập < Chuỗi > biến trên diễn đàn này http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit=candidateuser#p14187.

Tôi không biết làm thế nào để execution.setVariable một Bộ sưu tập < Chuỗi > từ javascript (bất kỳ câu trả lời?) Nhưng sử dụng groovy

List<String> users = [ 'tom', 'dick', 'harry'] as String[]; 
execution.setVariable('ipw_reviewers', users); 

cho phép nhiệm vụ này

<userTask id="mytask" name="My Task" activiti:candidateUsers="${ipw_reviewers}"> 
</userTask> 

để làm việc như mong muốn .

Trong thời gian ở Alfresco, tôi đã sử dụng javascript đã sử dụng để tìm danh sách người dùng từ danh sách dữ liệu và đặt chúng trong một chuỗi được phân tách bằng dấu phẩy trong một nhiệm vụ và theo sau nó với tác vụ tập lệnh trong groovy. vào Danh sách < Chuỗi > sẵn sàng để sử dụng trong các tác vụ sau.

1

Nếu bạn xem xét quy trình làm việc mặc định trong Alfresco, như review-pooled.bpmn20.xml, thì bạn sẽ thấy rằng nó đang sử dụng phần tử potentialOwner.

Một đoạn mã từ công việc:

<potentialOwner> 
    <resourceAssignmentExpression> 
    <formalExpression>${bpm_groupAssignee.properties.authorityName}</formalExpression> 
    </resourceAssignmentExpression> 
</potentialOwner> 

Vì vậy, nó được sử dụng các khía cạnh bpm_groupAssignee để bắt đầu này.

<!-- Submit review to multiple people (as included in a group) --> 
     <type name="wf:submitGroupReviewTask"> 
     <parent></parent> 
     <mandatory-aspects> 
      <aspect>bpm:groupAssignee</aspect> 
     </mandatory-aspects> 
     </type> 

Trong trường hợp bạn có thể dễ dàng sửa đổi thẻ <formalExpression> theo nhu cầu của mình.

+0

Nó đã khiến tôi mất nhiều thời gian để hiểu được quy trình công việc. Tôi tin rằng activiti: ứng cử viênNgười dùng biểu hiện rằng Activiti Designer được tạo cho tôi là một phần mở rộng activiti giúp đơn giản hóa phương thức tiềm năng của người dùng. Vượt qua chuỗi $ {ipw_reviwers} vì biểu thức chính thức không hoạt động đối với tôi, nhưng câu trả lời của bạn đã làm ít nhất là mở khóa các ô màu xám cũ và di chuyển tôi về phía trước. –

+0

Rất vui khi bạn tìm thấy câu trả lời thực sự cho vấn đề của mình. –

0

Trong Nashorn (JDK8) động cơ kịch bản java, để xác định danh sách và đặt nó như là một biến, sau kịch bản của nhiệm vụ kịch bản hoạt động:

var ArrayList = Java.type('java.util.ArrayList'); 
var list = new ArrayList(); 
list.add('a'); 
list.add('b'); 
list.add('c'); 
execution.setVariable('list', list); 
+0

Lưu ý rằng với Alfresco + Activiti được nhúng, bất cứ khi nào bạn sử dụng lớp 'org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate' bạn đang sử dụng công cụ tập lệnh Rhino được vận chuyển bằng Alfresco. Bạn thường không bao giờ sử dụng công cụ Nashorn trong trường hợp sử dụng Alfresco miễn là bạn sử dụng các lớp được cung cấp bởi Alfresco để tích hợp Activiti. Chỉ khi bạn sử dụng '' hoặc 'org.activiti.engine.impl.bpmn.listener.ScriptTaskListener' mặc định trong khi chạy trên JDK 8, bạn sẽ sử dụng Nashorn. –

Các vấn đề liên quan