예제 #1
0
        // Método que realiza o monitoramento e executa as tarefas pendentes autorizadas
        public void monitorAndExecute(System.Diagnostics.EventLog log)
        {
            //string authToken = "uQLhVpS2kx2%2b95sRUwiq1uh8iRycp%2bWro6efT7eNTFM%3d";
            string authToken = "T%2bVgaQPEbcfz%2bMbQPMd38d2pU7wL678T4nHb%2b%2fQjNI8WeISiIPYYh%2f62AqV3Uo0%2b";
            List <AutomaticTask> tarefasAutorizadas = new Business.AutomaticTaskExecution().automaticTaskExecutionList();

            // Se tem tarefas autorizadas
            if (tarefasAutorizadas.Count > 0)
            {
                foreach (AutomaticTask at in tarefasAutorizadas)
                {
                    // Para cada tarefa autorizada por um usuário, verificar a existência destas tarefas em pendência de
                    // execução sob a responsabilidade do usuário que autorizou

                    // Chama query que consulta tarefas pendentes com o codTask e na responsabilidade do usuário em questão
                    List <Data.Task> pendingTasks = new Business.Task().getPendingTasks(at.CodUser, at.CodTask);

                    // Tem dessa tarefa em andamento?
                    // Se sim, // Chamar o apoio à decisão para a tarefa, assim chama uma vez só para várias
                    // Se não tem tarefa pendente, não há por que chamar trecho de apoio à decisão e nem de finalizar
                    if (pendingTasks.Count > 0)
                    {
                        // Número total de execuções da tarefa
                        int totalExecutions = getTotalExecutions(at.CodTask);

                        // Lista de resultados da tarefa
                        List <string> DsFlowResults = getTaskResults(at.CodTask);

                        // Número de possíveis resultados para a tarefa sendo analisada
                        int classCount = DsFlowResults.Count;

                        // Chama a árvore de decisão // TODO: Usar árvore serializada
                        Data.DecisionTree dTree = runDecisionSupport(at.CodTask, totalExecutions, classCount);

                        // Para cada tarefa autorizada e pendente com o usuário, chama o apoio a decisão e depois finaliza a tarefa
                        foreach (Data.Task t in pendingTasks)
                        {
                            // Pegar a sugestão de ação para a tarefa
                            string action = getActionSuggestion(dTree, t.CodFlowExecute);

                            // Cria o objeto de referência ao webservice
                            Instance.Instance inst = new Instance.Instance();
                            //FinalizeTask02 - Finaliza a tarefa
                            XmlNode xml = inst.FinalizeTask02(authToken, t.CodFlowExecuteTask, action, "");

                            if (log != null && xml.Name == "success")
                            {
                                log.WriteEntry("A Tarefa " + t.DsTask + " do processo " + t.CodFlowExecute.ToString() + " foi finalizada automaticamente com a opção " + action + ".");
                            }

                            if (xml.Name == "success")
                            {
                                // Notificar o usuário sobre a conclusão da tarefa
                                new Business.AutomaticTaskExecution().notifyAutomaticExecution(at.CodTask, at.CodUser, t.CodFlowExecute);
                            }
                        }
                    }
                }
            }
        }