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:
Nesse exemplo, vamos inserir registros em 2 tabelas.
- tbl_formulario_checklist Essa tabela tabela conteém o nome do checklist e a relação com o formulario que será apresentado
- 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:
- Solicitação de inspeção
- Execução da Inspeção
- [Business Rules] Criação do Checklist de Pendências
- Execução da Lista de Pendências
- 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());
}