--- title: Mecanismo de atribuição source: https://tdn.totvs.com/pages/viewpage.action?pageId=270921079 path: \Plataforma Documentação técnica\Desenvolvimento sobre a plataforma\Primeiros passos\Mecanismo de atribuição.md --- - 1 [Sobre mecanismo de atribuição](#Mecanismodeatribuição-Sobremecanismodeatribuição) - 1.1 [Como criar um mecanismo de atribuição](#Mecanismodeatribuição-Comocriarummecanismodeatribuição) - 1.2 [Exemplo de mecanismo de atribuição Por associação](#Mecanismodeatribuição-ExemplodemecanismodeatribuiçãoPorassociação) # Sobre mecanismo de atribuição --- Os mecanismos de atribuição são instrumentos utilizados durante um processo de *workflow* que permitem criar, segundo um critério estabelecido pelo próprio mecanismo, uma lista de possíveis usuários para uma atividade. Esta lista pode ser utilizada em dois momentos: 1. na inicialização do processo, onde o sistema verifica se o usuário corrente faz parte desta lista e, portanto, pode iniciá-lo; 2. no momento do encaminhamento de uma tarefa, quando esta lista é apresentada ao usuário corrente com opções de encaminhamento da solicitação. No primeiro caso, a lista é gerada de acordo com o mecanismo de atribuição existente na primeira atividade do processo (que representa a atividade inicial). Nas demais atividades é adotado o segundo procedimento. Quando não houver um mecanismo de atribuição associado a uma atividade (seja ela inicial ou não), todos os usuários são considerados válidos. O fluig possui alguns mecanismos de atribuição padrão, conforme abaixo: | Mecanismo de Atribuição | Descrição | | --- | --- | | Para um papel (Pool) | Permite atribuir tarefas a um **papel** e não apenas a um usuário. Assim, qualquer um dos usuários neste **papel** pode assumir as tarefas para completá-las. | | Para um grupo (Pool) | Permite atribuir tarefas a um **grupo** e não apenas a um usuário. Assim, qualquer um dos usuários deste **grupo** pode assumir as tarefas para completá-las. | | Por associação | Permite compor lógicas complexas de atribuição por intermédio da associação de vários mecanismos. Essa função não aceita mecanismos customizados. | | Por campo de formulário | Permite atribuir tarefas ao usuário informado em um campo do formulário do processo. | | Por executor de atividade | Permite selecionar os usuários que executaram uma atividade anterior. | | Por grupo | Permite selecionar no momento da movimentação da atividade apenas os usuários que façam parte de um determinado **grupo**. | | Por grupos do usuário | Permite filtrar apenas os usuários que pertençam a um dos grupos do usuário corrente, ou do usuário que iniciou o processo (solicitante). Também permite filtrar apenas os usuários cujo grupo de trabalho seja o mesmo do usuário (corrente ou solicitante). | | Por papel | Permite selecionar no momento da movimentação da atividade apenas os usuários que possuam um determinado **papel**. | | Por usuário | Permite atribuir tarefas a um usuário específico. | Mais informações Os mecanismos "Por executor de atividade" e "Por usuário", selecionam um usuário específico, seja ele pré-determinado (Por usuário) ou variável conforme o fluxo da solicitação (Por executor). Caso o usuário destino esteja inativo, a atividade vai ser enviada ao gestor do processo. ## Como criar um mecanismo de atribuição --- A criação de um mecanismo de atribuição é realizada pelo fluig Studio, sendo necessário já existir um projeto fluig. Mais informações Para que um usuário que não é administrador da empresa possa criar, importar, editar e remover mecanismos, é necessário que ele possua a permissão "Configurar Mecanismos". Esta permissão pode ser concedida pelo administrador através do item "Permissões" disponível na aba "Gerais" do Painel de Controle do fluig. Saiba como realizar esse procedimento [clicando aqui](http://tdn.totvs.com/pages/viewpage.action?pageId=269423844). Utilize o passo-a-passo para conhecer o processo de criação de um mecanismo de atribuição de exemplo: - Para criar um novo mecanismo de atribuição desenvolvido sob a plataforma, clicar com o botão direito do *mouse* no projeto do fluig, acessar a opção *New* e então a opção *Other*. No assistente aberto, selecionar a opção "Mecanismo customizado fluig" presente na pasta fluig e clicar no botão *Next*: ![](..\..\..\images\mecatrib-porarea-new.png) - O assistente **Novo mecanismo fluig** é aberto. Informar o código e uma descrição e clicar no botão *Finish*: ![](..\..\..\images\mecatrib-porarea.png) - O arquivo JavaScript do mecanismo de atribuição é adicionado ao projeto na pasta **mechanisms** e aberto para edição. - Este *script* deve retornar uma lista dos usuários que podem assumir a tarefa. Abaixo temos um exemplo de implementação: ``` function resolve(process, colleague) { var userList = new java.util.ArrayList(); var managerId = fluigAPI.getUserService().getCurrent().getCode(); var c1 = DatasetFactory.createConstraint("cdGestor", managerId, managerId, ConstraintType.MUST); var constraints = new Array(c1); var dataset = DatasetFactory.getDataset("dsResponsaveisArea", null, constraints, null); for (var i = 0; i < dataset.rowsCount; i++) { userList.add(dataset.getValue(i, "cdUsuarioResp")); } return userList; } ``` É possível acessar Datasets e Serviços cadastrados no fluig no desenvolvimento do mecanismo de atribuição sob a plataforma. - Por fim, o mecanismo de atribuição desenvolvido sob a plataforma deve ser exportado para o servidor do fluig e ao realizar a exportação deve ser informado obrigatoriamente seu código e nome, e opcionalmente uma descrição: ![](..\..\..\images\mecatrib-porarea-export.png) ## Exemplo de mecanismo de atribuição Por associação --- Demonstração de como utilizar um mecanismo de atribuição por Associação com Grupos do Colaborador e Papel, podendo adaptá-lo conforme sua necessidade. - Nas propriedades da atividade, em **Mecanismo de atribuição**, selecione **Atribuição por Associação** e clique em **Configurar**. Selecione **Atribuição por Grupos do Colaborador** e clique em incluir. Selecione o registro incluído e clique em **Editar**. ![](..\..\..\images\image2017-4-11%208288.png) - Na tela de **Grupos do colaborador**, no campo **Busca Usuários nos Grupos**informe **do Usuário corrente**  e marque **Apenas Grupos de Trabalho**. - Logo depois acione **Confirmar**. ![](..\..\..\images\image2017-4-11%208304.png) - Em sequência inclua um novo mecanismo, agora como **Atribuição por Papel**, pois queremos enviar esta atividade para o papel **Líderes** onde está o líder deste usuário. Selecione o novo registro e clique em **Editar**. ![](..\..\..\images\image2017-4-11%2083127.png) - Selecione o código do papel **Líderes** e logo depois acione **Confirmar**. ![](..\..\..\images\image2017-4-11%2083210.png) - Selecione o tipo de associação como **Somente usuários selecionados em todos os mecanismos**, para que apenas os usuários que estejam presentes tanto no Grupo de trabalho do colaborador quanto no Papel **Líderes** sejam aptos a receber a solicitação. ![](..\..\..\images\image2017-4-11%2083345.png) - Para que no momento de enviar a solicitação seja mostrada a tela de seleção do usuário apenas quando houver mais de uma opção, o que não é o caso agora, pois existe apenas um usuário que está no Grupo de trabalho do usuário corrente e também no Papel **Líderes**, selecione o campo **Quando houver mais de uma opção** nas propriedades da atividade. ![](..\..\..\images\image2017-4-11%2083440.png) - No fluig você pode ter um Papel com os líderes de todas as áreas da empresa e um Grupo onde estão todos os usuários de determinada equipe, inclusive o Líder. Para utilizar o mecanismo de Grupos de trabalho do Colaborador, você precisará adicionar no cadastro do usuário este Grupo em dois locais: **Grupos** e **Grupo de trabalho workflow**. - No exemplo abaixo o Grupo de trabalho é **suporte**. Desta forma, quando um usuário iniciar uma solicitação, a atividade configurada conforme acima irá ser direcionada diretamente para o Líder do usuário corrente, desde que ele esteja no Papel de líderes e também no Grupo de trabalho do usuário. ![](..\..\..\images\imagem001.png)