Kanban en une demi-heure

Tout d'abord, je commencerai par définir le public cible de l'article. Cet article ne traite pas du fonctionnement de Kanban. Cet article est destiné à ceux qui savent travailler avec cette technologie et qui souhaitent créer rapidement et sans trop de frais un outil qui vous permet de visualiser le tableau Kanban et de travailler avec. Puisque notre budget est minime, sinon nul, nous essaierons de tout résoudre avec des moyens minimes. Nous avons besoin d'une base de données pour stocker des informations, d'un outil de visualisation de tableau blanc et de deux fonctions:

  • CrĂ©ez une carte;
  • Changez la carte et dĂ©placez-la le long des pistes.

Afin de minimiser le dĂ©veloppement, le lancement de l'exĂ©cution des fonctions se fera Ă  l'aide de requĂȘtes http, un peu plus tard je ferai une interface web qui pourra ĂȘtre visualisĂ©e dans un autre article (tant qu'il n'y a pas de lien).

Je crois que j'aurai une planche avec les pistes suivantes (vous pouvez spécifier votre configuration):


En tant que base de données, vous pouvez prendre tout ce que vous avez sous la main, je vais prendre MS SQL et créer une seule table (dans mon cas, un tas de ces bases de données tournent dans l'entreprise, donc avoir une tablette ne fait pas le temps)

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() ) 

Comme vous pouvez le voir dans la définition, je numéroterai automatiquement les tùches dans l'ordre des numéros 1, 2, 3 ... Séparez les tùches en pistes - Track. Projets - Projet. Indiquez l'artiste - travailleur. Conservez une courte description dans - Description et deux dates: CrtDate - date de création, UpdDate - Date de la derniÚre mise à jour de la tùche, par exemple, le déplacement vers cette piste.

Nous allons visualiser la carte à l'aide du générateur de rapports FastReport Desktop. Un lien vers les codes et le fichier de rapport est donné à la fin de l'article. La démo est gratuite, pour couvrir de telles tùches, elle est assez fonctionnelle. Alors téléchargez le rapport et ouvrez-le dans le concepteur



Tout ce que vous n'avez pas aimé, changez à votre discrétion. Par exemple, ajoutez de nouvelles pistes, etc. N'oubliez pas de personnaliser le rapport dans votre base de données.



La planche est prĂȘte. CrĂ©ez maintenant la premiĂšre tĂąche



Pour ce faire, nous implémentons une fonction dans Azure qui insérera un nouvel enregistrement dans la table

 #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'oubliez pas de spécifier votre nom d'utilisateur et votre mot de passe pour vous connecter à la base de données. Ouvrez n'importe quel programme pouvant envoyer des demandes Web. Je prends Postman. Insérez l'adresse du lien et remplissez la carte de corps au format json. La demande est enregistrée en cas de réutilisation. Nous envoyons une demande. Si tout réussit, nous obtenons la date et l'heure de création de la carte sur le serveur.



Exécutez le rapport dans FastReport:



Pour changer une carte ou déplacer, créez une fonction dans 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}"); } 

Avec son aide, nous changerons n'importe quel champ de la carte Ă  l'exception de l'ID, y compris la piste.

Pour déplacer la carte vers une autre piste, appelez la demande http:



FastReport comprend dans quelle colonne placer cette carte à l'aide d'un script intégré au rapport:

  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 vous décidez d'ajouter des colonnes, changez le script pour que le retrait de la carte corresponde au nom de la nouvelle piste. En conséquence, nous obtenons:



Donc, pour rĂ©sumer ce qui doit ĂȘtre fait

  1. Télécharger la démo FastReport
  2. TĂ©lĂ©chargez le rapport Kanban prĂȘt Ă  l'emploi
  3. Nous créons une plaque sur le serveur
  4. Nous créons deux fonctions de gestion des cartes

chose utile sur les projets, si vous utilisez le code vous pouvez vous adapter rapidement à vos tùches. Dans les articles suivants, je montrerai comment placer un rapport sur le site afin de ne pas me soucier du tout de la version Desktop. Le rapport sera disponible sur les tablettes et les téléphones portables des chefs de projet sympas :), restez à l'écoute ...

Télécharger le rapport Kanban

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


All Articles