AnsweredAssumed Answered

problemas reasignar permisos a documentos de workflow

Question asked by giorgio on Sep 29, 2009
Hola buenas de nuevo, a ver si me podeis ayudar con este problemilla, como ya os he comentado eh conseguido mi cometido con los workflows, en concreto con el workflow de revision, de usuario a usuario, entonces una vez hecho esto, me he dispuesto a realizar lo mismo pero en el flujo paralelo de usuarios, es decir en el de un usuario hacia varios usuarios, y pregunto, si el código es el mismo, porque en un flujo funciona y en el otro no? en los dos flujos envia la tarea perfectamente y el correo tambien, pero en el workflow parallelo parece que no quita los permisos, sin embargo, si me imprimo en el correo la variable "acl" que contiene los permisos que voy quitando, al final si que contiene los permisos que supuestamente le pongo.

os pongo los dos processdefinition.xml de cada uno de los flujos para que veais las diferencias:

Este es el review_processdefinition.xml que si que funciona bien, quita los permisos de herencia y asigna los nuevos.

<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:review">

    <swimlane name="initiator" />

    <start-state name="start">
        <task name="wf:submitReviewTask" swimlane="initiator" />
        <transition name="" to="review" />
    </start-state>

    <swimlane name="reviewer">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{bpm_assignee}</actor>
        </assignment>   
    </swimlane>

    <task-node name="review">
        <task name="wf:reviewTask" swimlane="reviewer">
            <event type="task-create">
                <script>
                    if (bpm_workflowDueDate != void) taskInstance.dueDate = bpm_workflowDueDate;
                    if (bpm_workflowPriority != void) taskInstance.priority = bpm_workflowPriority;
                </script>   
            </event>
        </task>
       <transition name="" to="completed" />

    <event type="node-enter">
<!– Update the status to Rejected when we enter this task –>
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>



for (var i = 0; i &lt; bpm_package.children.length; i++)
{

bpm_package.children[i].properties["my:prioridad"] = bpm_workflowPriority;
bpm_package.children[i].properties["my:ultimoestado"] = "Pendent";
bpm_package.children[i].properties["my:ultimotecnico"] = bpm_assignee.properties["cm:userName"];
if(bpm_package.children[i].properties["my:estado"]==null){
bpm_package.children[i].properties["my:estado"] = "Pendent";
bpm_package.children[i].properties["my:tecnico"] = bpm_assignee.properties["cm:userName"];
}else{
bpm_package.children[i].properties["my:estado"][bpm_package.children[i].properties["my:estado"].length] = "Pendent";
bpm_package.children[i].properties["my:tecnico"][bpm_package.children[i].properties["my:tecnico"].length] = bpm_assignee.properties["cm:userName"];
}
bpm_package.children[i].save();




bpm_package.children[i].setInheritsPermissions(false);

var permissions = bpm_package.children[i].permissions;
var acl=[];
for (var j=0; j &lt; permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
bpm_package.children[i].removePermission(perm,grp);
}


bpm_package.children[i].setPermission("Consumer", bpm_assignee.properties["cm:userName"]);



}

           var mail = actions.create("mail");
           mail.parameters.to = bpm_assignee.properties["cm:email"];
           mail.parameters.subject = "Notificacion de tarea asignada" + bpm_workflowDescription;
           mail.parameters.from = "noreply@edu.gva.es";
           mail.parameters.text = "No responda a este mensaje.La tarea "+ bpm_workflowDescription +" le ha sido ASIGNADA debe revisarla aqui http://notasinternas.edu.gva.es";
           mail.execute(bpm_package);

</script>
</action>
</event>

    </task-node>

    <task-node name="completed">
    <event type="node-enter">
<!– Update the status to Rejected when we enter this task –>
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
for (var z = 0; z &lt; bpm_package.children.length; z++)
{

bpm_package.children[z].properties["my:prioridad"] = bpm_workflowPriority;
bpm_package.children[z].properties["my:ultimoestado"] = "Acabat";
bpm_package.children[z].properties["my:ultimotecnico"] = bpm_assignee.properties["cm:userName"];
if(bpm_package.children[z].properties["my:estado"]==null){
bpm_package.children[z].properties["my:estado"] = "Acabat";
bpm_package.children[z].properties["my:tecnico"] = bpm_assignee.properties["cm:userName"];
}else{
bpm_package.children[z].properties["my:estado"][bpm_package.children[z].properties["my:estado"].length] = "Acabat";
bpm_package.children[z].properties["my:tecnico"][bpm_package.children[z].properties["my:tecnico"].length] = bpm_assignee.properties["cm:userName"];
}
bpm_package.children[z].save();
}
</script>
</action>
</event>
        <transition name="" to="end" />
    </task-node>
    <end-state name="end" />

</process-definition>

Y este otro es el parallellreview_proccessdefinition.xml en el que el correo llega bien la tarea tambien llega a todos los usuarios pero parece que no corta la herencia y no asigna los nuevos permisos al documento.

<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:parallelreview">

    <swimlane name="initiator"></swimlane>

    <start-state name="start">
        <task name="wf:submitParallelReviewTask" swimlane="initiator" />
        <transition name="" to="startreview"/>
    </start-state>

    <node name="startreview">
        <action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
            <foreach>#{bpm_assignees}</foreach>
            <var>reviewer</var>
        </action>

        <event type="node-enter">
            <script>
                <variable name="wf_approveCount" access="write" />
                <expression>
                    wf_approveCount = 0;
                </expression>
            </script>
        </event>
        <transition name="review" to="review" />
    </node>

    <task-node name="review">
        <task name="wf:reviewTask">
            <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
               <actor>#{reviewer}</actor>
            </assignment>
        </task>
<event type="node-enter">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>


for (var i = 0; i &lt; bpm_package.children.length; i++)
{

bpm_package.children[i].setInheritsPermissions(false);

var permissions = bpm_package.children[i].permissions;
var acl=[];
for (var j=0; j &lt; permissions.length; j++)
{
acl = permissions[j].split(";");
var perm=acl[2];
var grp=acl[1];
bpm_package.children[i].removePermission(perm,grp);

           var mail = actions.create("mail");
           mail.parameters.to = reviewer.properties["cm:email"];
           mail.parameters.subject = "Notificacion de tarea asignada";
           mail.parameters.from = "noreply@edu.gva.es";
           mail.parameters.text = acl +"No responda a este mensaje.Tiene una tarea ASIGNADA debe revisarla aqui http://notasinternas.edu.gva.es";
           mail.execute(bpm_package)

}

bpm_package.children[i].setPermission("Coordinator", reviewer.properties["cm:userName"]);


}

           var mail = actions.create("mail");
           mail.parameters.to = reviewer.properties["cm:email"];
           mail.parameters.subject = "Notificacion de tarea asignada";
           mail.parameters.from = "noreply@edu.gva.es";
           mail.parameters.text = acl +"No responda a este mensaje.Tiene una tarea ASIGNADA debe revisarla aqui http://notasinternas.edu.gva.es";
           mail.execute(bpm_package);

</script>
</action>
</event>
        <transition name="reject" to="endreview" />
        <transition name="approve" to="endreview">
            <script>
                <variable name="wf_approveCount" access="read,write" />
                <expression>
                    wf_approveCount = wf_approveCount +1;
                 </expression>
            </script>
        </transition>
    </task-node>

    <join name="endreview">
        <transition to="isapproved" />
    </join>

    <decision name="isapproved">
        <event type="node-enter">
           <script>
              <variable name="wf_reviewerCount" access="write"/>
              <variable name="wf_requiredPercent" access="write"/>
              <variable name="wf_actualPercent" access="write"/>
              <expression>
                  wf_requiredPercent = wf_requiredApprovePercent;
                  wf_reviewerCount = bpm_assignees.size();
                  wf_actualPercent = ((wf_approveCount * 100) / wf_reviewerCount);
              </expression>
           </script>
        </event>
        <transition name="reject" to="rejected" />
        <transition name="approve" to="approved">
            <condition>#{wf_actualPercent >= wf_requiredApprovePercent}</condition>
        </transition>
    </decision>
              
    <task-node name="rejected">
        <transition to="end" />
    </task-node>

    <task-node name="approved">
        <transition to="end" />
    </task-node>

    <end-state name="end"/>

</process-definition>

Outcomes