Antes de tudo, começarei definindo o público-alvo do artigo. Este artigo não é sobre como o Kanban funciona. Este artigo é para quem sabe trabalhar com essa tecnologia e deseja criar rapidamente e sem muitas despesas uma ferramenta que permite visualizar o quadro Kanban e trabalhar com ele. Como nosso orçamento é mínimo, se não zero, tentaremos resolver tudo com um mínimo de meios. Precisamos de um banco de dados para armazenar informações, uma ferramenta de visualização do quadro branco e duas funções:
- Crie um cartão;
- Troque o cartão e mova-o pelas trilhas.
Para minimizar o desenvolvimento, o lançamento da execução de funções será realizado com solicitações http, e um pouco mais tarde farei uma interface web que pode ser visualizada em outro artigo (enquanto o link estiver ausente).
Acredito que terei uma placa com as seguintes faixas (você pode especificar sua configuração):

Como banco de dados, você pode pegar tudo o que tem em mãos, pegarei o MS SQL e criará apenas uma tabela (no meu caso, vários desses bancos de dados estão girando na empresa, portanto, ter um tablet não faz o tempo)
create table tasks( ID int IDENTITY(1,1) PRIMARY KEY, Project nvarchar(250) default 'Unknown', Track nvarchar(250) default 'To Do', Worker nvarchar(250) default 'Unknown', [Description] nvarchar(1000) DEFAULT '', UpdDate datetime default GETDATE(), CrtDate datetime default GETDATE() )
Como você pode ver na definição, numerarei automaticamente as tarefas na ordem dos números 1, 2, 3 ... Separe as tarefas em faixas - Faixa. Projetos - Projeto. Indique o artista - Trabalhador. Mantenha uma descrição curta em - Descrição e duas datas: CrtDate - data de criação, UpdDate - Data da última atualização da tarefa, por exemplo, movendo-se para esta faixa.
Visualizaremos a placa usando o gerador de relatórios do FastReport Desktop. Um link para os códigos e o arquivo de relatório é fornecido no final do artigo. A demo é gratuita, para cobrir essas tarefas é bastante funcional. Faça o download do relatório e abra-o no designer

Tudo o que você não gostou, muda a seu critério. Por exemplo, adicione novas faixas, etc. Lembre-se de personalizar o relatório no seu banco de dados.

O quadro está pronto. Agora crie a primeira tarefa

Para fazer isso, implementamos uma função no Azure que insere um novo registro na tabela
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; using System.Data.SqlClient; public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("Create task function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); log.LogInformation($"{requestBody}"); dynamic data = JsonConvert.DeserializeObject(requestBody); string project = data?.project; if (project==null) {return new BadRequestObjectResult($"Please pass a Project in the request body");} string worker = data?.worker; if (worker==null) {return new BadRequestObjectResult($"Please pass a Worker in the request body");} string description = data?.description??""; var your_username = "ufocombat"; var your_password = "***"; using (SqlConnection conn = new SqlConnection($"Server=tcp:fast,1433;Initial Catalog=FastReportSQL;Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")) { conn.Open(); SqlCommand cmd = new SqlCommand($"INSERT INTO tasks(Project,Worker,Description) VALUES (@p,@w,@d)", conn); cmd.Parameters.AddWithValue("p",project); cmd.Parameters.AddWithValue("w",worker); cmd.Parameters.AddWithValue("d",description); cmd.ExecuteNonQuery(); conn.Close(); } return new OkObjectResult($"Task created {DateTime.Now}"); }
Não se esqueça de especificar seu nome de usuário e senha para conectar-se ao banco de dados. Abra qualquer programa que possa enviar solicitações da web. Eu pego o Postman. Insira o endereço do link e preencha o cartão do corpo no formato json. A solicitação é salva em caso de reutilização. Enviamos uma solicitação. Se tudo der certo, obtemos a data e a hora em que o cartão foi criado no servidor.

Execute o relatório no FastReport:

Para alterar um cartão ou mover, crie uma função no Azure
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; using System.Data.SqlClient; public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("Update task function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); log.LogInformation($"{requestBody}"); dynamic data = JsonConvert.DeserializeObject(requestBody); string ID = data?.id; if (ID == null) {return new BadRequestObjectResult($"Please pass an ID in the request body");} string paras = "UpdDate=@u"; string description = data?.description; if (description != null) { paras += ", Description=@d"; } string track = data?.track; if (track != null) { paras += ", Track=@t"; } string worker = data?.worker; if (worker != null) { paras += ", Worker=@w"; } var your_username = "ufocombat"; var your_password = "***; if (paras!="") { using (SqlConnection conn = new SqlConnection($"Server=tcp:fast,1433;Initial Catalog=FastReportSQL;Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")) { conn.Open(); SqlCommand cmd = new SqlCommand($"UPDATE tasks SET {paras} WHERE ID=@id", conn); cmd.Parameters.AddWithValue("id",ID); cmd.Parameters.AddWithValue("u",DateTime.Now.AddHours(3)); if (description != null) { cmd.Parameters.AddWithValue("d",description); } if (worker != null ) { cmd.Parameters.AddWithValue("w",worker); } if (track != null) { cmd.Parameters.AddWithValue("t",track); } cmd.ExecuteNonQuery(); conn.Close(); } } return new OkObjectResult($"Task created {DateTime.Now}"); }
Com sua ajuda, alteraremos qualquer campo do cartão, exceto o ID, incluindo o Track.
Para mover o cartão para outra faixa, ligue para a solicitação http:

O FastReport entende em qual coluna colocar esse cartão usando um script incorporado ao relatório:
if (string.Compare(track,"Doing",false)==0) { Shape1.Left = Units.Centimeters * 6.75F; } else if (string.Compare(track,"Done",false)==0) { Shape1.Left = Units.Centimeters * 13.25F; } else { Shape1.Left = 0; }
Se você decidir adicionar colunas, altere o script para que o recuo do cartão corresponda ao nome da nova faixa. Como resultado, obtemos:

Então, para resumir o que precisa ser feito
- Faça o download da demonstração do FastReport
- Faça o download do relatório Kanban pronto
- Criamos uma placa no servidor
- Criamos duas funções para gerenciar cartões
coisa útil em projetos, se você usar o código, poderá se adaptar rapidamente às suas tarefas. Nos artigos a seguir, mostrarei como colocar um relatório no site para não me incomodar com a versão para computador. O relatório estará disponível em tablets e telefones celulares de gerentes de projetos legais :), fique atento ...
Download do Relatório Kanban