# 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](https://wiki.agilityflow.io/uploads/images/gallery/2025-01/scaled-1680-/image.png)](https://wiki.agilityflow.io/uploads/images/gallery/2025-01/image.png)

Nesse exemplo, vamos inserir registros em 2 tabelas.

1. **<span style="text-decoration: underline;">tbl\_formulario\_checklist</span>** Essa tabela tabela conteém o nome do checklist e a relação com o formulario que será apresentado
2. <span style="text-decoration: underline;">**tbl\_formulario\_checklist\_item**</span> Essa tabela contém todas os itens de um checklist

No exemplo, eu criei 2 forms, sendo o form <span style="text-decoration: underline;">**Inspeção**</span> um Workflow e o <span style="text-decoration: underline;">**Inspeção Itens**</span> sendo filho do <span style="text-decoration: underline;">**Inspeção**</span>

<table border="1" id="bkmrk-inspe%C3%A7%C3%A3o-form-onde-a" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><tbody><tr><td>Inspeção</td><td>Form onde ao salvar será criada as task</td><td>x\_inspection</td></tr><tr><td>Inspeção Itens </td><td>Form onde está tudo que foi inspecionado.

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

</td><td>x\_inspection\_item</td></tr></tbody></table>

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 <span style="text-decoration: underline;">**\[Business Rules\] Criação do Checklist de Pendências**</span> do Workflow, logo após a etapa de Execução da Inspeção.

```c#
            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());
                
                
                
                
                
                
            }
```