Kanban en media hora

En primer lugar, comenzaré definiendo el público objetivo del artículo. Este artículo no trata sobre cómo funciona Kanban. Este artículo es para aquellos que saben cómo trabajar con esta tecnología y desean crear rápidamente y sin grandes gastos una herramienta que les permita visualizar el tablero Kanban y trabajar con él. Como nuestro presupuesto es mínimo, si no cero, intentaremos resolver todo con medios mínimos. Necesitamos una base de datos para almacenar información, una herramienta de visualización de pizarra y dos funciones:

  • Crea una tarjeta;
  • Cambia la carta y muévela por las pistas.

Para minimizar el desarrollo, el lanzamiento de la ejecución de funciones se llevará a cabo utilizando solicitudes http, un poco más tarde crearé una interfaz web que se puede ver en otro artículo (siempre que no haya un enlace).

Creo que tendré una placa con las siguientes pistas (puede especificar su configuración):


Como base de datos, puede tomar todo lo que tiene a mano, tomaré MS SQL y crearé solo una tabla (en mi caso, un montón de esas bases de datos están girando en la empresa, por lo que tener una tableta no hace el clima)

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 puede ver en la definición, numeraré automáticamente las tareas en el orden de los números 1, 2, 3 ... Separe las tareas en pistas - Pista. Proyectos - Proyecto. Indicar el artista - Trabajador. Mantenga una breve descripción en - Descripción, y dos fechas: CrtDate - fecha de creación, UpdDate - Fecha de la última actualización de la tarea, por ejemplo, moviéndose a esta pista.

Visualizaremos el tablero utilizando el generador de informes FastReport Desktop. Al final del artículo se proporciona un enlace a los códigos y al archivo del informe. La demostración es gratuita, para cubrir tales tareas es bastante funcional. Así que descargue el informe y ábralo en el diseñador



Todo lo que no le gustó, cambie a su discreción. Por ejemplo, agregue nuevas pistas, etc. Recuerde personalizar el informe en su base de datos.



El tablero está listo. Ahora crea la primera tarea



Para hacer esto, implementamos una función en Azure que insertará un nuevo registro en la tabla

 #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}"); } 

No olvide especificar su nombre de usuario y contraseña para conectarse a la base de datos. Abra cualquier programa que pueda enviar solicitudes web. Me llevo al cartero. Inserte la dirección del enlace y complete la tarjeta del cuerpo en formato json. La solicitud se guarda en caso de reutilización. Enviamos una solicitud. Si todo tiene éxito, obtenemos la fecha y la hora en que se creó la tarjeta en el servidor.



Ejecute el informe en FastReport:



Para cambiar una carta o movimiento, cree una función en 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}"); } 

Con su ayuda, cambiaremos cualquier campo de la tarjeta, excepto la identificación, incluido el seguimiento.

Para mover la tarjeta a otra pista, llame a la solicitud http:



FastReport comprende en qué columna colocar esta tarjeta utilizando un script integrado en el informe:

  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; } 

Si decide agregar columnas, cambie la secuencia de comandos para que la sangría de la tarjeta coincida con el nombre de la nueva pista. Como resultado, obtenemos:



Para resumir lo que hay que hacer

  1. Descargar FastReport Demo
  2. Descargue el informe Kanban listo
  3. Creamos una placa en el servidor
  4. Creamos dos funciones para administrar tarjetas

Lo útil en los proyectos, si utiliza el código, puede adaptarse rápidamente a sus tareas. En los siguientes artículos, mostraré cómo colocar un informe en el sitio para no molestarme en absoluto con la versión de escritorio. El informe estará disponible en tabletas y teléfonos móviles de gerentes de proyectos geniales :), estén atentos ...

Descargar Kanban Report

Source: https://habr.com/ru/post/472012/


All Articles