Skip to main content

Como criar itens / tarefas automaticamente nos Checklists dos formulários?

 

Com esse exemplo, vc será capaz de criar itens / tarefas na aba Checklists dos formulários.

Como na imagem abaixo:

image.png

 

Nesse exemplo, vamos inserir registros em 2 tabelas.

  1. tbl_formulario_checklist  Essa tabela tabela conteém o nome do checklist e a relação com o formulario que será apresentado
  2. tbl_formulario_checklist_item  Essa tabela contém todas os itens de um checklist

No exemplo, eu criei 2 forms, sendo o form Inspeção um Workflow e o Inspeção Itens sendo filho do Inspeção

Inspeção Form onde ao salvar será criada as task x_inspection
Inspeção Itens 

Form onde está tudo que foi inspecionado. 

 

Os itens que estiverem PENDING, será gerado uma tarefa no checklist do form ao aprovar.

x_inspection_item

As etapas do Workflow são:

  1. Solicitação de inspeção
  2. Execução da Inspeção
  3. [Business Rules] Criação do Checklist de Pendências
  4. Execução da Lista de Pendências
  5. Finalização

 

Abaixo está o código utilizado na Regra de Negócio do FormContext que deve foi adicionada dentro da etapa [Business Rules] Criação do Checklist de Pendências do Workflow, logo após a etapa de Execução da Inspeção.

            public async Task ExecuteAsync(){                
                  
                
                var userId = FormContext.GetUsuarioLogadoId();
                var recordId = FormContext.FormId;
                var checklistId = System.Guid.NewGuid();
                var inspectionTypeId = Guid.Parse(FormContext.GetValue("inspection_type_id"));
                
               
               
                var paramsQuery = new List<NpgsqlParameter>();
                paramsQuery.Add(new NpgsqlParameter("@id", checklistId));
                paramsQuery.Add(new NpgsqlParameter("@formularioId", IdFormulario));
                paramsQuery.Add(new NpgsqlParameter("@recordId", recordId));
                paramsQuery.Add(new NpgsqlParameter("@userId", userId));
                paramsQuery.Add(new NpgsqlParameter("@inspectionTypeId", inspectionTypeId));
                
                await FormContext.SqlScript.ExecuteAsync(@"
                    insert into tbl_formulario_checklist (
                        id,
                        efr_id, 
                        frm_id,
                        tmp_form_id, 
                        nome, 
                        ordem, 
                        log_data_criacao,
                        log_usu_criacao
                    ) 
                    select  
                        @id, 
                        @formularioId, 
                        @recordId, 
                        uuid_generate_v4(), 
                        ""name"" || ' - verify while inspecting', 
                        1, 
                        CURRENT_DATE,  
                        @userId
                    from x_inspection_type where id = @inspectionTypeId limit 1
                    ", paramsQuery.ToArray());
                    
                    
                var paramsQueryItem = new List<NpgsqlParameter>();
                paramsQueryItem.Add(new NpgsqlParameter("@checklistId", checklistId));
                paramsQueryItem.Add(new NpgsqlParameter("@userId", userId));
                paramsQueryItem.Add(new NpgsqlParameter("@inspectionTypeId", inspectionTypeId));
                
                
                await FormContext.SqlScript.ExecuteAsync(@"
                    insert into tbl_formulario_checklist_item (
                        id,
                        id_checklist, 
                        checked,
                        nome, 
                        ordem, 
                        log_data_criacao,
                        log_usu_criacao
                    ) 
                    select uuid_generate_v4(), @checklistId, 0, ""name"", 1, CURRENT_DATE, @userId 
                    FROM x_inspection_item
                    where inspection_type_id = @inspectionTypeId and status = 'pending'
                    limit 200", paramsQueryItem.ToArray());
                
                
                
                
                
                
            }