Il KanbanBoard affiche les enregistrements d’une table sous forme de cartes dans des couloirs côte à côte, une voie pour chaque valeur d’une colonne : la note d’une opportunité, la raison de statut d’une tâche, le compte auquel appartient un enregistrement. Chaque voie est lue seule via une vue, une page à la fois, avec la même requête et la même sécurité qu’une grille, et affiche son nombre et ses totaux dans son en-tête. Dans un Editable plateau, une carte se déplace vers une autre voie en la faisant glisser, depuis le clavier ou via son menu Déplacer vers le menu, et le déplacement est sauvegardé immédiatement ; avec une colonne de rang, les cartes sont également rangées à la main. Elle est tirée dans votre thème Fluent UI.
Les opportunités ouvertes des données d’échantillon de la démo, via la propre vue Open Opportunities de Dataverse : une voie pour chaque note, avec le compte de la voie et le chiffre d’affaires estimé dans son en-tête. Lanes Laisse de côté la voie des opportunités sans classification. La démo du Kanban Board montre le même tableau avec les coups, les vues, les filtres et les vues sauvegardées.
Exemple de réaction
Exemple de Blazor
React TypeScript
Razor
LaneColumn (Réagir : laneColumn) nomme la colonne de la table de la vue dont proviennent les voies. Un choix donne une voie pour chacune de ses options, une raison de statut pour chaque raison, une colonne Oui/Non, une pour chacune de ses deux valeurs, une recherche pour chaque enregistrement nommé, et une date des voies où elle tombe, comme le décrit les lanes de date ci-dessous. Toute autre colonne affiche un message à la place du tableau. Les voies suivent l’ordre de Dataverse et laissent d’autres options cachées, et la couleur d’une option apparaît sous forme de point à côté du nom de sa voie. Une colonne qu’un enregistrement peut laisser vide ajoute une dernière voie, (Aucune valeur), pour les cartes sans valeur.
Lanes (Réagir : lanes) choisit quelles voies sont affichées, et dans quel ordre, par clé : la valeur d’une option, 1 et 0 pour Oui et Non, l’identifiant d’un enregistrement, ou une clé vide pour la voie sans valeur. Les voies d’une recherche sont les enregistrements nommés par les cartes de la vue, lues dans une requête groupée ; nomme-les dans LookupLanes (Réagir : lookupLanes) à la place pour les fixer ainsi que leur ordre, une voie sans cartes incluses.
React
Blazor
{/* Tâches de Non Commencées à Terminées, sans Différées et Annulées. */}
<KanbanBoard defaultViewId={allTasksViewId} laneColumn="statuscode" lanes={['2', '3', '4', '5']} />
{/* Une voie pour chaque compte clé, dans l’ordre indiqué. */}
<KanbanBoard defaultViewId={openOpportunitiesViewId} laneColumn="parentaccountid" lookupLanes={keyAccounts} />
<!-- Tâches de Non Commencées à Terminées, sans Différées et Annulées. -->
<KanbanBoard DefaultViewId="allTasksViewId"
LaneColumn="statuscode"
Lanes="@(["2", "3", "4", "5"])" />
<!-- Une voie pour chaque compte clé, dans l’ordre indiqué. -->
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="parentaccountid"
LookupLanes="@keyAccounts" />
Une voie sans cartes est affichée, donc une carte peut y être déposée. Réglez ShowEmptyLanes (Réagir : showEmptyLanes) pour false la cacher une fois son nombre connu. Les utilisateurs peuvent réduire une voie à une bande étroite de son nom et compter avec le bouton de son en-tête, et masquer les lanes dans le menu Filtre de la barre d’outils, qui les liste sous Afficher.
Une colonne de date indique les voies de la date de sa tombée, comptées en jours du fuseau horaire de l’utilisateur, la semaine commençant le premier jour de leur langue, et calculées à nouveau à chaque lecture de ses voies par le tableau. Sans nom, elles sont en retard, Aujourd’hui, Demain, Cette semaine — du sur-demain jusqu’à la fin de la semaine, donc vides vers la fin de la semaine — La semaine suivante, Plus tard et Pas de date.
DateLanes(Réagir : dateLanes) nomme les voies à la place, dans l’ordre des dates. Un préréglage établit une voie à partir de la date actuelle : Yesterday, Today et Tomorrow; LastWeek, ThisWeek et NextWeek; ThisMonthLastMonth; et NextMonth; les trimestres et années du calendrier, tels que ThisCalendarQuarter et NextCalendarYear, et les fiscaux, tels que ThisFiscalQuarter et LastFiscalYear, qui suivent l’exercice fiscal de l’organisation tel que Dataverse le conserve ; Overdue, avant aujourd’hui ; Earlier et Later, qui prennent tout ce qui tombe avant et après les voies autour d’eux ; et NoDate. Une voie à vous contient les jours exacts, ou les jours comptés à partir des périodes d’aujourd’hui, sous un titre à part : Between, Before et Starting (Réagir : between, before et starting). Un préréglage prend aussi un titre propre. Essayez-le sur la démo des dates de clôture.
Chaque carte tombe dans une voie, car une voie ne commence pas avant l’endroit où la précédente se termine : listée après ThisWeek, ThisMonth tient le reste du mois, et une voie que c’est déjà couverte par celles d’avant montre vide et ne prend aucune carte. Une date qu’aucune voie ne tient — entre deux voies de jours exacts — met sa carte sur aucune, donc commencer avec Earlier et terminer avec Later pour garder toutes les cartes.
React
Blazor
{/* Les trimestres fiscaux d’aujourd’hui, et tout ce qui les a précédés et après */}
<KanbanBoard
defaultViewId={openOpportunitiesViewId}
laneColumn="estimatedclosedate"
dateLanes={[
KanbanDateLane.Earlier,
KanbanDateLane.LastFiscalQuarter,
KanbanDateLane.ThisFiscalQuarter,
KanbanDateLane.NextFiscalQuarter,
KanbanDateLane.Later,
KanbanDateLane.NoDate,
]}
/>
{/* Des voies de jours exacts avec leurs propres titres : avant, pendant et après une semaine de lancement */}
<KanbanBoard
defaultViewId={openTasksViewId}
laneColumn="scheduledend"
dateLanes={[
KanbanDateLane.before('before', 'Before the launch', { year: 2027, month: 1, day: 4 }),
KanbanDateLane.between('launch', 'Launch week', { year: 2027, month: 1, day: 4 }, { year: 2027, month: 1, day: 11 }),
{ ...KanbanDateLane.Later, title: 'After the launch' },
KanbanDateLane.NoDate,
]}
/>
<!-- Les trimestres fiscaux d’aujourd’hui, et tout ce qui les a précédés et après -->
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="estimatedclosedate"
DateLanes="@([
KanbanDateLane.Earlier,
KanbanDateLane.LastFiscalQuarter,
KanbanDateLane.ThisFiscalQuarter,
KanbanDateLane.NextFiscalQuarter,
KanbanDateLane.Later,
KanbanDateLane.NoDate,
])" />
<!-- Des voies de jours exacts avec leurs propres titres : avant, pendant et après une semaine de lancement -->
<KanbanBoard DefaultViewId="openTasksViewId"
LaneColumn="scheduledend"
DateLanes="@([
KanbanDateLane.Before("before", "Before the launch", new DateTime(2027, 1, 4)),
KanbanDateLane.Between("launch", "Launch week", new DateTime(2027, 1, 4), new DateTime(2027, 1, 11)),
KanbanDateLane.Later with { Title = "After the launch" },
KanbanDateLane.NoDate,
])" />
Une carte déplacée vers une autre voie de date reçoit le premier jour de cette voie, en gardant son heure — une voie en retard aujourd’hui aussi, ce qui lui donne une date passée — et déplacée à Sans date, elle perd sa date. Une voie sans premier jour, comme En retard, une première Avant ou une voie vide, ne prend aucune carte. Placez DateLaneDrop (Réaction : dateLaneDrop) à None et les voies ne prennent aucune carte les unes des autres : elles n’apparaissent que lorsque les cartes tombent.
DateLaneOrder (Réaction : dateLaneOrder) ordonne les cartes d’une voie de date. Rank , par défaut, les ordonne par colonne de rang, comme toutes les autres lanes : une carte déplacée dans sa voie change uniquement de rang. Date les ordonne par date, sans colonne de rang : une carte déposée en dessous d’une autre prend le jour de cette carte, gardant son propre temps, et une carte déposée en haut prend le premier jour de la lane ; les cartes du même jour restent dans l’ordre de leurs temps. Essayez lors de la démo des dates d’échéance.
React
Blazor
{/* Tâches selon leur date d’échéance, chaque voie dans l’ordre de la date d’échéance */}
<KanbanBoard
defaultViewId={openTasksViewId}
laneColumn="scheduledend"
dateLaneOrder={KanbanDateLaneOrder.Date}
editable
/>
<!-- Tâches selon leur date d’échéance, chaque voie dans l’ordre de la date d’échéance -->
<KanbanBoard DefaultViewId="openTasksViewId"
LaneColumn="scheduledend"
DateLaneOrder="KanbanDateLaneOrder.Date"
Editable="true" />
Comptages et totaux
L’en-tête de chaque voie indique combien de cartes elle contient — 5000+ au-delà de 5 000 — et les totaux nommés dans LaneAggregates (Réagir : laneAggregates: : la somme, la moyenne, le plus petit ou la majeure partie d’un nombre, de la colonne argent ou de la date, ou le compte de n’importe quelle colonne, sur chaque carte de la voie, pas seulement celles chargées. LaneAggregateFormats (Réagir : laneAggregateFormats) donne un format aux chiffres de chaque colonne, tel que C0 ou N1. Voici les totaux avec lesquels le plateau commence : le bouton Totaux permet aux utilisateurs de choisir leurs propres colonnes affichées par les cartes, et une vue enregistrée les conserve. Les comptes et totaux sont lus à nouveau après chaque coup sauvegardé par le plateau.
LaneLimits (Réagir : laneLimits) donne aux voies, par clé, le plus grand nombre de cartes qu’elles devraient posséder. L’en-tête d’une voie limitée affiche son compte par rapport à sa limite, comme 7/5, marqué une fois le compte passé. Le compte correspond à toutes les cartes de la voie, quelle que l’utilisateur recherche ou filtre. Une limite ne prévient que sauf si EnforceLaneLimits (Réagir : enforceLaneLimits) est défini : alors une voie pleine ne prend aucune carte d’une autre, n’est pas proposée sous Déplacer à, et n’a pas de bouton Ajouter. C’est la règle du plateau, pas celle du serveur : maintenir une limite pour chaque façon dont un enregistrement est sauvegardé avec un intercepteur.
React
Blazor
{/* Au maximum trois tâches en cours en même temps */}
<KanbanBoard
defaultViewId={allTasksViewId}
laneColumn="statuscode"
laneLimits={{ '3': 3 }}
enforceLaneLimits
editable
/>
<!-- Au maximum trois tâches en cours en même temps -->
<KanbanBoard DefaultViewId="allTasksViewId"
LaneColumn="statuscode"
LaneLimits="@(new Dictionary<string, int> { ["3"] = 3 })"
EnforceLaneLimits="true"
Editable="true" />
Cartes
Une carte affiche la première colonne de la vue comme titre et les autres colonnes de la vue sous leurs titres, comme le font les cartes d’une grille, en omettant la colonne de la voie et la colonne de rang. CardImageColumn (Réagir : cardImageColumn) ajoute une colonne image en avatar à côté du titre. Chaque voie charge PageSize (Réagir : pageSize) cartes à la fois, 20 par défaut, avec Charger plus à son bas. Depuis les Paramètres, les utilisateurs changent les champs affichés par les cartes, la façon dont les cartes d’une voie sont triées et combien chaque voie charge.
Tirez les cartes à votre manière avec CardTemplate (Réagir : cardRenderer). On lui remet l’enregistrement et la voie de chaque carte ; Field , Label et DisplayValue (Réagir : field, label et displayValue) affichent une colonne comme la carte par défaut, et OpenAsync et MoveToAsync (Réagir : open et moveTo) ouvrent l’enregistrement et déplacent la carte, où CanOpen et CanMove disent qu’ils le peuvent. Un clic sur la carte ouvre toujours son enregistrement, et son menu Déplacer vers se trouve à côté de votre contenu. Les colonnes qu’un modèle affiche doivent être celles de la vue, donc le tableau les lise avec chaque carte.
Les tâches de la démo sont utilisées via la vue Toutes les tâches de Dataverse, une voie pour chaque raison de statut de Non Commencée à Annulée, cinq cartes à la fois. A CardTemplate (Réagir : cardRenderer) montre le sujet de chaque tâche, de quoi il s’agit, quand elle est due et sa priorité, les plus hautes en rouge.
Exemple de réaction
Exemple de Blazor
React TypeScript
Razor
CSS
Émission
Pas commencé
En cours
Attendre quelqu’un d’autre
Reporté
Achèvement
Annulé
Colonnes
Trier
Cartes par voie
5
10
20
50
100
Pas commencé155
Book the on-site visit
Ebert, Marks and Tillman
Book the on-site visit
Stanton - Jacobi
Book the on-site visit
Rippin, Connelly and Hills
Book the on-site visit
Altenwerth, D'Amore and Mante
Book the on-site visit
Sawayn - Kessler
Chargez plus
En cours42
Book the on-site visit
Marks - Dickinson
Book the on-site visit
Luettgen, Goldner and Rowe
Chase the signed contract
Schaden, Cronin and Daniel
Chase the signed contract
Dietrich and Sons
Chase the signed contract
Lind - Parisian
Chargez plus
Attendre quelqu’un d’autre28
Book the on-site visit
Schmeler and Sons
Book the on-site visit
Schmeler and Sons
Book the on-site visit
Botsford - Baumbach
Book the on-site visit
Schmeler and Sons
Chase the signed contract
Boyer - Schaefer
Chargez plus
Reporté18
Book the on-site visit
Adams - Torphy
Book the on-site visit
Sanford, Grimes and Satterfield
Chase the signed contract
Cole, Tillman and Langworth
Chase the signed contract
Boyle, Zulauf and Lakin
Chase the signed contract
Waelchi, Murazik and Considine
Chargez plus
Achèvement57
Book the on-site visit
Waelchi, Murazik and Considine
Book the on-site visit
Bartoletti LLC
Book the on-site visit
Cole, Tillman and Langworth
Book the on-site visit
Effertz Group
Book the on-site visit
O'Hara, Streich and Conroy
Chargez plus
Annulé16
Book the on-site visit
Kemmer LLC
Confirm the training dates
Schmeler and Sons
Draft the statement of work
Raynor - Lakin
Draft the statement of work
Willms, Heathcote and Veum
Draft the statement of work
Rempel - Parisian
Chargez plus
Lorsque la table du tableau a une page enregistrée pour ses enregistrements (voir Pages d’enregistrement) et que le tableau n’a pas Form de (Réagir : form), le titre d’une carte y est lié, et ouvrir la carte y mène ; ShowRecordLinks (Réagir : showRecordLinks) désactive ce message. Sinon, cliquer sur une carte ouvre son enregistrement dans un dialogue au centre ou, avec FormLocation (Réagir : formLocation), dans un panneau latéral à gauche ou à droite. La forme est KanbanDefaultForm — les colonnes de la vue de la table du tableau et de la colonne de la voie, chacune avec l’éditeur que prend son type — ou votre propre composant d’éditeurs dans Form (Réagir : form). L’enregistrement est lu comme une page d’enregistrement le lit, via le même accès à la table et la sécurité des colonnes, et ne peut être modifié que dans un Editable tableau, par un utilisateur qui peut le modifier.
Cartes à déplacer
Dans un Editable plateau (Réagir : editable), les utilisateurs déplacent une carte vers une autre voie en la faisant glisser, depuis le clavier ou via le menu Déplacer vers le menu sur la carte. La carte bouge en même temps, et le plateau sauvegarde ce qui a changé : la colonne de la voie — pour une raison de statut, la seule raison, car le serveur déplace l’état du record avec elle — et le rang de la carte, où le plateau en conserve une. Une sauvegarde qui échoue remet la carte en place et le dit.
Une carte ne bouge que là où l’utilisateur peut la modifier : Écrire sur son enregistrement, via l’accès à la table du portail, et sur sa colonne de voie, qui doit être une option qu’une mise à jour peut activer et que la sécurité de la colonne ne retient pas. Mettre les cartes dans l’ordre nécessite aussi Write sur la colonne de rang. Une carte que l’utilisateur ne peut pas déplacer reste à sa place, sans menu Déplacer vers le menu.
Les lignes de raison de statut suivent leurs états, et les changements d’état autorisés par la table, avec lesquels le serveur s’enregistre AddStateTransitions (voir RecordContext). Les opportunités, cas, citations et ordres les ont par défaut : une carte n’est pas prise par une voie que son enregistrement ne peut pas atteindre depuis la sienne, et Déplacer vers ne liste que les voies qu’elle peut. Un changement de statut effectué par une mise à jour — une opportunité rouverte, un cas annulé ou réactivé, un devis activé, une commande soumise — demande à l’utilisateur de le confirmer en premier, et une action faite par Dataverse ouvre la boîte de dialogue de fermeture, comme le décrit les enregistrements de clôture ci-dessous. Les cartes d’un statut fermé ne sont pas placées dans un autre ordre entre elles. Une table sans transitions se déplace librement : une tâche déplacée à Terminée est terminée, puis reculée, ouverte.
L’en-tête de chaque voie dans un Editable tableau possède un bouton Ajouter qui ouvre un nouvel enregistrement déjà présent dans cette voie, sous la forme du tableau : celui de Form la page (Réagir : form) ou KanbanDefaultForm. Il ne s’affiche qu’aux utilisateurs qui peuvent créer les enregistrements de la table et définir sa colonne de lane, et jamais dans une voie d’enregistrements fermés, car un enregistrement est créé ouvert. Une fois enregistrée, la carte apparaît en haut de sa voie. Désactivez-la avec AllowNew (Réagir : allowNew). Handle PrepareNewRecord (Réagir : prepareNewRecord) pour donner plus de valeurs au nouvel enregistrement avant l’ouverture de son formulaire : il reçoit l’enregistrement, la valeur de la voie déjà présente, et la voie. Un bouton de barre d’outils peut aussi ajouter une carte : CanCreate et sur (KanbanBoardContextReact : canCreate et newCard) indiquer si une voie prend une nouvelle carte et ouvre sa forme — sans qu’aucune voie ne soit nommée, dans la première qui NewAsync en prend une.
React
Blazor
<KanbanBoard defaultViewId={allTasksViewId} laneColumn="statuscode" editable>
{/* Un bouton de barre d’outils qui ajoute une carte comme le fait le bouton Ajouter d’une voie */}
<KanbanBoardButton label="New task" icon={<AddRegular />} onClick={(board) => board.newCard()} />
</KanbanBoard>
<KanbanBoard DefaultViewId="allTasksViewId" LaneColumn="statuscode" Editable="true">
<ToolbarItems>
<!-- Un bouton de barre d’outils qui ajoute une carte comme le fait le bouton Ajouter d’une voie -->
<KanbanBoardButton Label="New task"
Icon="@(new Icons.Regular.Size20.Add())"
OnClick="@((KanbanBoardContext board) => board.NewAsync())" />
</ToolbarItems>
</KanbanBoard>
React
Blazor
{/* Chaque tâche ajoutée sur le tableau commence avec une priorité élevée */}
<KanbanBoard
defaultViewId={allTasksViewId}
laneColumn="statuscode"
editable
prepareNewRecord={(record) => ({
...record,
properties: { ...record.properties, prioritycode: { $type: ColumnType.Choice, value: 2 } },
})}
/>
<!-- Chaque tâche ajoutée sur le tableau commence avec une priorité élevée -->
<KanbanBoard DefaultViewId="allTasksViewId" LaneColumn="statuscode" Editable="true"
PrepareNewRecord="@(card => { card.Record["prioritycode"] = new ChoiceValue { Value = 2 }; return Task.CompletedTask; })" />
Records de clôture
Sur un tableau par raison de statut, une carte déposée dans une voie que Dataverse ferme les enregistrements avec une action propre — Gagné ou Perdu d’une opportunité, Résolu d’un cas, Gagné ou Fermé d’un devis, Accompli ou Annulé d’une commande — ouvre un dialogue pour la raison de statut, la voie de départ, et ce que la clôture enregistre : le revenu réel et la date de clôture d’une opportunité gagnée ; la date de clôture d’une voie perdue, et le concurrent auquel elle a été perdue où l’utilisateur peut choisir des concurrents ; la résolution et le temps facturable d’un cas ; la date de clôture d’un devis ou d’une commande ; et une description. Confirmé, le dossier est fermé via le message propre de Dataverse, tel que WinOpportunity ou CloseIncident; annulé, la carte revient. Une opportunité est ramenée dans une voie ouverte, une opportunité est rouverte et un cas réactivé une fois que l’utilisateur a confirmé. Essayez sur la démo Pipeline. Le même dialogue se trouve derrière les boutons de fermeture sur le formulaire d’un enregistrement, comme WinOpportunityButton: voir RecordContext.
Une clôture est jugée comme un changement de statut de l’enregistrement : l’utilisateur doit être autorisé à modifier l’enregistrement et ses colonnes de statut, et à pointer vers le concurrent qu’il nomme. Dataverse enregistre la clôture sous l’enregistrement comme une activité à part entière (opportunityclose, incidentresolution, quoteclose, orderclose), qui ne nécessite pas d’accès à la table de votre part. L’utilisateur de l’application du portail a besoin d’AppendTo sur la table de l’enregistrement, Créer et Annexe sur les activités, et pour une opportunité AppendTo sur les concurrents : voir Dataverse Connection.
React
Blazor
{/* Tombée sur Gagné, Perdu ou Résolu, une carte ouvre le dialogue de fermeture */}
<KanbanBoard defaultViewId={myOpportunitiesViewId} laneColumn="statuscode" editable />
<!-- Tombée sur Gagné, Perdu ou Résolu, une carte ouvre le dialogue de fermeture -->
<KanbanBoard DefaultViewId="myOpportunitiesViewId" LaneColumn="statuscode" Editable="true" />
Mettre les cartes dans l’ordre
Nommer un RankColumn (Réagir : rankColumn) et les utilisateurs classent les cartes de chaque voie par main. Une voie est triée par rang, puis par tri de la vue, et une carte déposée entre deux autres reçoit un rang entre les leurs. Généralement, ce rang est tout ce qu’un drop écrit. Les cartes sans rang trient en premier, et sont classées à tour de rôle lorsqu’une carte est déposée parmi elles ou juste en dessous ; une voie dont les rangs n’ont plus de place entre deux cartes est classée à nouveau, dans l’ordre affiché. Ces rangs sont sauvegardés avec le déplacement, lors d’une transaction. Une ligne de plus de 5 000 cartes ne peut pas être classée à la main, ni une carte là où elle serait rangée par l’utilisateur ne peut pas changer. Sans colonne de rang, une voie suit le tri de la vue, et une carte ne se déplace qu’à une autre voie.
La colonne de rang est une colonne décimale du tableau du plateau dont la portée permet de donner des nombres négatifs, puisqu’une carte tombée au-dessus de la première est classée en dessous. Sa précision détermine à quelle fréquence une ligne est classée à neuf : chaque chute entre deux moitiés fait passer la pièce entre elles, donc une colonne de dix valeurs décimales nécessite environ cinquante chutes en un endroit avant que sa voie ne soit à nouveau classée, et une de nulle part d’environ vingt points.
Gérer SaveChange (Réagir : onCardMove) pour sauvegarder un coup à votre façon, à la place du plateau : via un service à vous, après avoir demandé à l’utilisateur, ou pas du tout. On lui donne KanbanCardMoveun : les cartes Recordde la carte, les voies où elle est venue From et Torepart, il est Index là et son Rank, le Update plateau écrirait, et le OtherUpdates qui appartient à la même transaction, écrit après — les rangs des autres cartes, ou, pour une carte quittant une voie fermée, son propre rang une fois que son statut l’a rouverte — et, pour une carte déposée dans une voie qui la ferme, le Close (Réaction : close) confirmé par l’utilisateur, à envoyer après lui. Revenir true pour garder la carte là où elle a été déposée, ou false pour la remettre. Le tableau ne lit plus rien après un coup qu’il n’a pas sauvegardé, donc une page peut garder un mouvement uniquement sur la page.
React
Blazor
<KanbanBoard
defaultViewId={openOpportunitiesViewId}
laneColumn="opportunityratingcode"
editable
// Enregistré via le service propre à la page ; false remet la carte en place.
onCardMove={(move) => pipeline.changeRating(move.record.id, move.to.key)}
/>
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="opportunityratingcode"
Editable="true"
SaveChange="SaveMoveAsync" />
@code {
// Enregistré via le service propre à la page ; false remet la carte en place.
private Task<bool> SaveMoveAsync(KanbanCardMove move)
=> _pipeline.ChangeRatingAsync(move.Record.Id, move.To.Key);
}
Clavier, lecteurs tactiles et d’écran
Chaque carte qui peut se déplacer possède un ... bouton avec un menu Aller vers les voies où elle peut aller, qui fonctionne de la même manière depuis le clavier, par tactile et avec un lecteur d’écran. Une carte peut aussi être déplacée directement depuis le clavier : la focaliser, appuyer sur Espace pour la ramasser, les flèches pour la transporter vers une autre voie ou un autre endroit dans son propre cas, et encore Espace pour la poser. Sur un écran tactile, une carte est traînée par sa prise, donc les voies défilent toujours sous un doigt. Les lecteurs d’écran entendent chaque mouvement — la carte déplacée vers la voie — et un mouvement qui échoue.
Barre d’outils
La barre d’outils est disposée comme une grille : le sélecteur de vue à gauche — ou le Title (Réagir : title), lorsqu’il n’y a qu’une seule vue — et à droite vos propres contrôles, Totains, la boîte de recherche, le Filtre, Rafraîchir et les Paramètres. Ajoutez vos contrôles avec ToolbarItems (Réagir : les enfants du plateau). Un joueur reçoit le tableau lorsqu’on KanbanBoardButton clique : son tableau, la vue qu’il affiche, ses voies dans leur ordre, et RefreshAsync (Réagir : refresh) pour relire chaque voie.
Un tableau affiche les enregistrements d’une vue — l’une de Dataverse ou celle définie par la page — et sa table correspond à celle de la vue. DefaultViewId (Réagir : defaultViewId) est la vue sur laquelle elle s’ouvre, et ViewIds (Réagir : viewIds) les autres que propose le sélectionneur de vues, de la même table. La boîte de recherche trouve les cartes car la recherche d’une grille trouve des lignes : à partir du début de la valeur d’une colonne de recherche, ou n’importe où après un début *de . Elle regarde dans les colonnes affichées par les cartes, les nomme dans son infobulle, et marque les correspondances sur les cartes. Désactivez-la avec AllowSearch (Réagir : allowSearch).
Avec AllowFiltering (Réagir : allowFiltering), le menu Filtre de la barre d’outils propose des filtres Modifier, le bouton Filtre d’une grille s’ouvre, dont les filtres remplacent ceux de la vue jusqu’à ce que l’utilisateur choisisse une autre vue. Il est désactivé par défaut, car l’utilisateur peut retirer tous les filtres de la vue.
Avec AllowSavedViews (Réagir : allowSavedViews), un utilisateur connecté peut enregistrer le plateau tel qu’il l’a organisé — la vue avec ses filtres, les champs et le tri des cartes, les totaux des couloirs, les cartes que chaque voie charge, et les voies repliées ou cachées — en tant que vue à part entière, et choisir sa vue par défaut et masquer celles qu’il n’utilise pas, depuis le menu Filtre. Sans SavedViewsKey (Réagir : savedViewsKey), un plateau partage ses vues avec les grilles, calendriers et tableaux de son tableau qui n’en ont pas, chacun conservant sa propre configuration. La façon dont les vues sont sauvegardés, modifiées et partagées se trouve sur la page Vues Sauvegardées .
Une page peut définir ses propres vues en code avec CustomViewDefinitions (Réagir : customViewDefinitions), les définitions de vues de la grille. Elles sont proposées dans le sélecteur à côté ViewIds sans y être listées, DefaultViewId on peut en nommer une, et un plateau peut les avoir seules. Chacune est lue par son propre FetchXML, dans l’accès de table de l’utilisateur, et dispose le plateau comme indiqué : ce PageSize sont les cartes qu’une voie charge, celles d’une Hidden colonne et DisplayLabel cacher ou renommer son champ de cartes, et ce Aggregates sont les totaux des voies. Construisez la liste une fois, dans un champ : une nouvelle liste relance le plateau.
<KanbanBoard CustomViewDefinitions="_views" LaneColumn="statuscode" Editable="true" />
@code {
// Les opportunités ouvertes, dix cartes par piste, avec le chiffre d’affaires estimé de chaque voie
private readonly List<ViewDefinition> _views =
[
new()
{
Id = new Guid("4c1e7a92-5d3b-4f8e-9a6c-2b0d8e4f1a37"),
TableName = "opportunity",
DisplayName = "Pipeline",
PageSize = 10,
FetchXml = """
<fetch>
<entity name="opportunity">
<attribute name="name" />
<attribute name="estimatedvalue" />
<attribute name="estimatedclosedate" />
<filter><condition attribute="statecode" operator="eq" value="0" /></filter>
</entity>
</fetch>
""",
Columns =
[
new ViewColumn { ColumnName = "name" },
new ViewColumn { ColumnName = "estimatedvalue", Aggregates = [new(QueryAggregate.Sum, "C0")] },
new ViewColumn { ColumnName = "estimatedclosedate" },
],
},
];
}
Conserver sa place dans l’URL
Nommer un paramètre de requête dans PersistedStateQueryParameter (React : persistedStateQueryParameter), et le tableau garde la vue choisie et les voies s’y sont effondrées, donc un rechargement ou un lien partagé l’ouvre comme il a été laissé. Ce sur quoi il s’ouvrirait de toute façon est laissé de côté. La recherche est aussi gardée avec IncludeSearchInPersistedState; elle est laissée de côté par défaut, car ce que les utilisateurs recherchent peut être sensible. Chaque changement remplace l’entrée historique du navigateur, et les deux piles écrivent la même valeur, donc un lien créé sur l’un ouvre le même tableau sur l’autre.
Le plateau est dessiné avec les contrôles et jetons de design propres à Fluent UI, il suit donc votre thème, clair ou sombre, et votre couleur d’accent, et le point d’une voie prend la couleur de son option de Dataverse. Les pistes font 280 pixels de large, côte à côte, et défilent latéralement quand elles ne rentrent pas ; sur un téléphone, chacune prend la majeure partie de l’écran et s’enclenche en place. Height (Réagir : height) règle la hauteur du plateau, barre d’outils incluse — 600 pixels par défaut — et chaque voie fait défiler ses cartes à l’intérieur. Pour restyler, le plateau, ses couloirs et ses cartes portent leurs propres classes, parmi lesquelles ppp-kanban, ppp-kanban-lane, ppp-kanban-lane-header et ppp-kanban-card; Class et Style (Réagir : className et style) ajoutent les vôtres.
Réagir
Blazor
KanbanBoard Classe
Paramètres
Nom
Type
Par défaut
Description
AllowFiltering
bool
False
Si l’utilisateur peut modifier les filtres de la vue, depuis le menu Filtre, comme sur une grille. Off by Par défaut : l’utilisateur peut supprimer tous les filtres de la vue.
AllowNew
bool
True
Si chaque voie d’un KanbanBoard.Editable plateau offre une nouvelle carte, avec un bouton Ajouter dans En-tête : Un que l’utilisateur peut créer, dans la valeur de la voie — aucun dans une voie de cartes fermées, comme un L’enregistrement est créé ouvert. Par défaut .true
AllowSavedViews
bool
False
Laissez les utilisateurs connectés sauvegarder le tableau tel qu’ils l’ont organisé — la vue qu’il affiche avec leur filtres, ses champs de cartes et le tri, les totaux des voies et les voies effondrées ou cachées — comme Leurs propres vues, proposées dans le sélecteur de vues à côté de celles de la page, et choisissent leur vue par défaut Et masquer les vues qu’ils n’utilisent pas. Désactivé par défaut. Il faut la solution Power Portals Pro Core des tableaux en vue sauvegardée ; un utilisateur interne a également besoin des vues sauvegardées Power Portals Pro Rôle de sécurité.
AllowSearch
bool
True
Si la barre d’outils possède une barre de recherche. Par défaut, .true
CardImageColumn
string?
Une colonne image que chaque carte par défaut affiche comme un avatar à côté de son titre, comme le font les cartes d’une grille.
CardTemplate
RenderFragment<KanbanCardContext>?
Le contenu de chaque carte, à la place de la carte par défaut : son titre — la première colonne de la vue — et les autres chroniques de The View sous leurs titres.
CustomViewDefinitions
List<ViewDefinition>?
Vues que la page définit — les s de la Models.ViewDefinitiongrille — proposées dans le sélecteur à côté KanbanBoard.ViewIds sans y être mentionné ; KanbanBoard.DefaultViewId je peux en nommer un. A La carte peut ne contenir que ces cartes. Chacune est lue par son propre FetchXML, et dispose la carte comme indiqué (Models.ViewDefinition)) : les cartes qu’une voie lit à la fois, la carte de ses colonnes champs cachés ou titrés, et les totaux des voies. Un autre tableau que celui du plateau est à gauche fini. Construis la liste une fois — dans un champ, pas en ligne dans le balisage — au moment où une nouvelle liste commence le À nouveau à bord.
DateLaneDrop
KanbanDateLaneDrop
ChangeDate
Ce qu’une carte tombée dans une autre voie de rendez-vous fait, où le KanbanBoard.LaneColumn est un rendez-vous : elle prend le premier jour de la voie (KanbanDateLaneDrop.ChangeDate, la valeur par défaut) — en respectant son horaire ; aucune date dans Aucune date ; aucune n’est supprimée dans En retard — ou les voies de date ne prennent pas cartes l’un de l’autre (KanbanDateLaneDrop.None). Aucun effet sur les autres voies.
DateLaneOrder
KanbanDateLaneOrder
Rank
Comment les cartes des lanes de date sont ordonnées, où le KanbanBoard.LaneColumn est un rendez-vous : par le KanbanBoard.RankColumn comme les autres voies sont (KanbanDateLaneOrder.Rank, le par défaut), ou par la date elle-même (KanbanDateLaneOrder.Date) — une carte déposée en dessous un autre prend son jour, gardant son propre temps, un autre déposé en haut de la voie le premier jour, et La colonne de rang n’est pas utilisée. Aucun effet sur les autres voies.
DateLanes
IReadOnlyList<KanbanDateLane>?
Les voies qu’une date KanbanBoard.LaneColumn indique, dans l’ordre des dates : des préréglages tels que KanbanDateLane.Today, KanbanDateLane.ThisMonth ou KanbanDateLane.ThisFiscalQuarter — calculé à chaque lecture du jour dans les données de l’utilisateur Fuseau horaire, la semaine de la culture et l’exercice fiscal de l’organisation — ou les voies de vos propres (DateTime,System.DateTime) et autres). Chacun commence là où la carte d’avant se termine, donc chaque carte atterrit au maximum dans une même voie ; une carte dont la date aucun hold n’est pas sur le plateau. Sans eux, le sept par défaut (KanbanDateLane.Defaults) : En retard, aujourd’hui, demain, cette semaine, la semaine prochaine, plus tard et Pas de date. Une voie est nommée par son KanbanDateLane.Title, sinon le nom d’un préréglage dans la langue de l’utilisateur, sinon sa clé. Une nouvelle liste des mêmes voies — une écrite en ligne dans le le balisage — ne redémarre pas le tableau ; les autres voies le font.
DefaultViewId
Guid?
La vue sur laquelle s’ouvre le plateau. La table du tableau est celle de la vue.
Editable
bool
False
Si les cartes peuvent être déplacées. Une carte se déplace lorsque l’utilisateur peut modifier son enregistrement et sa voie et — sur les voies d’une raison de statut — les transitions d’état de la table permettent le déplacement ()Models.KanbanLane) : une lane n’offre que les coups qu’ils effectuent, et un drop ils le refus revient. Une carte déposée dans une voie où ses transitions le referment — une opportunité est gagnée ou Perdu, une affaire résolue, une soumission ou une commande fermée, une commande est livrée ou annulée — est clôturée à travers le message même de Dataverse : le conseil demande comment — la raison, la voie à l’origine, et Ce que le close enregistre. Tout autre changement d’État qu’ils font — la réouverture d’une opportunité, Annuler un dossier, activer un devis — doit être confirmé en premier. Désactivé par défaut.
EnforceLaneLimits
bool
False
Que le plateau reste à KanbanBoard.LaneLimits: une voie pleine ne prend aucune carte d’une autre — un drop là revient, et Déplacer à ne l’oublie — et n’offre pas de nouvelle carte. Les cartes bougent toujours à l’intérieur. Désactivé par défaut : une voie au-delà de sa limite n’est balisée que marquée.
Form
Type?
La forme dans laquelle s’ouvre l’enregistrement d’une carte : un composant des éditeurs, alors que prend le dialogue d’enregistrement d’une grille. Sans cela, une carte ouvre la page de son enregistrement où son tableau contient une (KanbanBoard.ShowRecordLinks), Else KanbanDefaultForm: les colonnes de la vue et la colonne de la voie.
FormLocation
DialogLocation
Center
Là où l’enregistrement d’une carte s’ouvre : centré, ou dans un panneau latéral à gauche ou à droite. Par défaut est centré.
Height
string
600px
Hauteur de toute la carte, barre d’outils incluse, comme n’importe quelle longueur CSS. Par défaut à 600px.
IncludeSearchInPersistedState
bool
False
Que la recherche soit maintenue avec le reste de l’État. N’a aucun effet sans KanbanBoard.PersistedStateQueryParameter.
LaneAggregateFormats
IReadOnlyDictionary<string, string>?
Le format des KanbanBoard.LaneAggregates totaux de chaque colonne est indiqué en (« N0 »), par son nom.
LaneAggregates
IReadOnlyDictionary<string, QueryAggregate>?
Les totaux que l’en-tête de chaque voie indique au départ — une somme, une moyenne, le minimum, le plus ou un compte d’une colonne, par son nom. L’utilisateur les modifie avec le bouton Totaux, et une sauvegarde La vue les retient.
LaneColumn*
string
La colonne d’où proviennent les voies : un choix, une raison de statut, un Oui/Non, une recherche ou une colonne de date du tableau du tableau. Tout autre montre un message à la place du tableau. Les voies d’une colonne de date sont quand elle tombe, dans les jours du fuseau horaire de l’utilisateur : En retard, Aujourd’hui, Demain, Cette semaine, La semaine prochaine, Plus tard et Pas de date, ni des pages KanbanBoard.DateLanes (KanbanBoard.DateLaneDrop, KanbanBoard.DateLaneOrder).
LaneLimits
IReadOnlyDictionary<string, int>?
Le plus grand nombre de cartes que chaque voie devrait contenir est : KanbanLane.Keyl’en-tête d’une voie limitée indique son compte par rapport à sa limite (« 4 / 5 »), et la marque lorsque la voie en contient plus. Le Le compte correspond à toute la voie, quelle que soit la recherche et les filtres de l’utilisateur. Une voie non nommée Il n’y a pas de limites.
Lanes
IEnumerable<string>?
Les voies du plateau affichent, et dans quel ordre, par KanbanLane.Key: une option valeur (« 1 »), les « 1 » et « 0 » de Oui/Non, l’ID d’un enregistrement, la clé d’une zone de date (KanbanDateLane.Key : « en retard »,« aujourd’hui », ...), ou une clé vide pour le Voie de cartes sans valeur. Chaque voie, dans l’ordre de Dataverse, lorsqu’elle n’est pas donnée. Pour les lanes de date Il choisit parmi les KanbanBoard.DateLanes, dont les jours restent tels que ceux qui les définissent.
LookupLanes
IEnumerable<LookupValue>?
Les voies d’une recherche : une pour chaque enregistrement, dans l’ordre donné. Sans celles-ci, le tableau affiche une voie pour chaque enregistrement, le nom de la carte de la vue.
PageSize
int
20
Les cartes qu’une voie lit à la fois ; les suivantes viennent avec son Chargement plus. Par défaut, c’est 20.
PersistedStateQueryParameter
string?
Le nom d’un paramètre de requête URL pour conserver l’état de la carte — la vue choisie, les voies collapse et (avec KanbanBoard.IncludeSearchInPersistedState) la recherche — donc un rechargement ou un Link l’ouvre là où il était resté. Chaque changement remplace l’entrée historique du navigateur.
PrepareNewRecord
Func<KanbanNewRecord, Task>?
Prépare l’enregistrement d’une nouvelle carte avant l’ouverture de sa forme — depuis le bouton Ajouter d’une voie ou KanbanBoardContext.NewAsync(PowerPortalsPro.Common.Models.KanbanLane) — une fois que le plateau lui a attribué la valeur de la voie : le L’hôte définit les valeurs par défaut via l’indexeur de l’enregistrement (carte. Enregistrement['column'] = valeur), et chaque valeur qu’il définit est sauvegardée avec l’enregistrement. Le formulaire ne s’ouvre pas s’il est lancé, et l’erreur est affiché comme un Creation Is échoué.
RankColumn
string?
Une colonne décimale où le plateau garde l’ordre des cartes, à la main : chaque voie est triée par celle-ci, et une carte lâchée entre deux autres reçoit un rang entre les leurs. Sans celle-ci, les cartes suivent La vue est un peu plus simple, et une carte ne se déplace qu’à une autre voie.
SaveChange
Func<KanbanCardMove, Task<bool>>?
Sauvegarde un coup à la place du plateau ; le retour false remet la carte en arrière, comme lorsque le jet de sauvegarde est refusé. Sans cela, le plateau sauvegarde lui-même le coup. Un coup qui ferme le La carte est donnée une fois que l’utilisateur a expliqué comment, avec la demande d’envoi KanbanCardMove.Close; un état qui modifie un état que gouvernent les transitions de la table, une fois que l’utilisateur l’a confirmé.
SavedViewsKey
string?
Nomme ce tableau parmi les commandes de sa table, donc les vues enregistrées dessus et celles de l’utilisateur Les vues par défaut et cachées sont les siennes. Sans celle-ci, le conseil partage ses vues avec chaque grille, Calendrier et tableau de la table qui n’en a pas. Lettres, chiffres, -, _ et ..
ShowEmptyLanes
bool
True
Indiquer si une voie sans cartes est indiquée. Par défaut à true.
ShowRecordLinks
bool
True
Que les cartes renvoient à leurs pages d’enregistrements, enregistrées sur AddRecordPage, sous forme de grille les lignes et les recherches en font partie. Lorsque la table du plateau a une page et que le tableau reçoit non KanbanBoard.Form, le titre d’une carte renvoie à la page de son enregistrement et l’ouverture de la carte y mène ; Une recherche sur une carte renvoie à la page de son enregistrement où cette table en a une. Un tableau sans page ouvre ses cartes dans la boîte de dialogue du plateau. Une nouvelle carte est toujours créée dans la boîte de dialogue. Par défaut true.
SignInUrl
string
Account/Login
Lorsqu’un utilisateur non connecté est envoyé se connecter depuis le menu des vues sauvegardées ; il revient à cette page. En fonction de l’adresse de base de l’application. Par défaut, compte / connexion.
Title
string?
Le titre du tableau, affiché à la place du sélecteur de vue lorsqu’il n’y a qu’une seule vue.
ToolbarItems
RenderFragment?
Des contrôles pour la barre d’outils — KanbanBoardButtons, ou tout autre balisage — avant la boîte de recherche.
ViewIds
IEnumerable<Guid>?
D’autres vues de la même table, l’utilisateur peut basculer dans le sélecteur de vue.
ViewSort
ViewSort
NameAscending
L’ordre des vues dans le sélecteur. Par défaut est ViewSort.NameAscending, comme dans une grille.
Nom:AllowFiltering
Type:bool
Par défaut:False
Description:Si l’utilisateur peut modifier les filtres de la vue, depuis le menu Filtre, comme sur une grille. Off by Par défaut : l’utilisateur peut supprimer tous les filtres de la vue.
Nom:AllowNew
Type:bool
Par défaut:True
Description:Si chaque voie d’un KanbanBoard.Editable plateau offre une nouvelle carte, avec un bouton Ajouter dans En-tête : Un que l’utilisateur peut créer, dans la valeur de la voie — aucun dans une voie de cartes fermées, comme un L’enregistrement est créé ouvert. Par défaut .true
Nom:AllowSavedViews
Type:bool
Par défaut:False
Description:Laissez les utilisateurs connectés sauvegarder le tableau tel qu’ils l’ont organisé — la vue qu’il affiche avec leur filtres, ses champs de cartes et le tri, les totaux des voies et les voies effondrées ou cachées — comme Leurs propres vues, proposées dans le sélecteur de vues à côté de celles de la page, et choisissent leur vue par défaut Et masquer les vues qu’ils n’utilisent pas. Désactivé par défaut. Il faut la solution Power Portals Pro Core des tableaux en vue sauvegardée ; un utilisateur interne a également besoin des vues sauvegardées Power Portals Pro Rôle de sécurité.
Nom:AllowSearch
Type:bool
Par défaut:True
Description:Si la barre d’outils possède une barre de recherche. Par défaut, .true
Nom:CardImageColumn
Type:string?
Description:Une colonne image que chaque carte par défaut affiche comme un avatar à côté de son titre, comme le font les cartes d’une grille.
Nom:CardTemplate
Type:RenderFragment<KanbanCardContext>?
Description:Le contenu de chaque carte, à la place de la carte par défaut : son titre — la première colonne de la vue — et les autres chroniques de The View sous leurs titres.
Nom:CustomViewDefinitions
Type:List<ViewDefinition>?
Description:Vues que la page définit — les s de la Models.ViewDefinitiongrille — proposées dans le sélecteur à côté KanbanBoard.ViewIds sans y être mentionné ; KanbanBoard.DefaultViewId je peux en nommer un. A La carte peut ne contenir que ces cartes. Chacune est lue par son propre FetchXML, et dispose la carte comme indiqué (Models.ViewDefinition)) : les cartes qu’une voie lit à la fois, la carte de ses colonnes champs cachés ou titrés, et les totaux des voies. Un autre tableau que celui du plateau est à gauche fini. Construis la liste une fois — dans un champ, pas en ligne dans le balisage — au moment où une nouvelle liste commence le À nouveau à bord.
Nom:DateLaneDrop
Type:KanbanDateLaneDrop
Par défaut:ChangeDate
Description:Ce qu’une carte tombée dans une autre voie de rendez-vous fait, où le KanbanBoard.LaneColumn est un rendez-vous : elle prend le premier jour de la voie (KanbanDateLaneDrop.ChangeDate, la valeur par défaut) — en respectant son horaire ; aucune date dans Aucune date ; aucune n’est supprimée dans En retard — ou les voies de date ne prennent pas cartes l’un de l’autre (KanbanDateLaneDrop.None). Aucun effet sur les autres voies.
Nom:DateLaneOrder
Type:KanbanDateLaneOrder
Par défaut:Rank
Description:Comment les cartes des lanes de date sont ordonnées, où le KanbanBoard.LaneColumn est un rendez-vous : par le KanbanBoard.RankColumn comme les autres voies sont (KanbanDateLaneOrder.Rank, le par défaut), ou par la date elle-même (KanbanDateLaneOrder.Date) — une carte déposée en dessous un autre prend son jour, gardant son propre temps, un autre déposé en haut de la voie le premier jour, et La colonne de rang n’est pas utilisée. Aucun effet sur les autres voies.
Nom:DateLanes
Type:IReadOnlyList<KanbanDateLane>?
Description:Les voies qu’une date KanbanBoard.LaneColumn indique, dans l’ordre des dates : des préréglages tels que KanbanDateLane.Today, KanbanDateLane.ThisMonth ou KanbanDateLane.ThisFiscalQuarter — calculé à chaque lecture du jour dans les données de l’utilisateur Fuseau horaire, la semaine de la culture et l’exercice fiscal de l’organisation — ou les voies de vos propres (DateTime,System.DateTime) et autres). Chacun commence là où la carte d’avant se termine, donc chaque carte atterrit au maximum dans une même voie ; une carte dont la date aucun hold n’est pas sur le plateau. Sans eux, le sept par défaut (KanbanDateLane.Defaults) : En retard, aujourd’hui, demain, cette semaine, la semaine prochaine, plus tard et Pas de date. Une voie est nommée par son KanbanDateLane.Title, sinon le nom d’un préréglage dans la langue de l’utilisateur, sinon sa clé. Une nouvelle liste des mêmes voies — une écrite en ligne dans le le balisage — ne redémarre pas le tableau ; les autres voies le font.
Nom:DefaultViewId
Type:Guid?
Description:La vue sur laquelle s’ouvre le plateau. La table du tableau est celle de la vue.
Nom:Editable
Type:bool
Par défaut:False
Description:Si les cartes peuvent être déplacées. Une carte se déplace lorsque l’utilisateur peut modifier son enregistrement et sa voie et — sur les voies d’une raison de statut — les transitions d’état de la table permettent le déplacement ()Models.KanbanLane) : une lane n’offre que les coups qu’ils effectuent, et un drop ils le refus revient. Une carte déposée dans une voie où ses transitions le referment — une opportunité est gagnée ou Perdu, une affaire résolue, une soumission ou une commande fermée, une commande est livrée ou annulée — est clôturée à travers le message même de Dataverse : le conseil demande comment — la raison, la voie à l’origine, et Ce que le close enregistre. Tout autre changement d’État qu’ils font — la réouverture d’une opportunité, Annuler un dossier, activer un devis — doit être confirmé en premier. Désactivé par défaut.
Nom:EnforceLaneLimits
Type:bool
Par défaut:False
Description:Que le plateau reste à KanbanBoard.LaneLimits: une voie pleine ne prend aucune carte d’une autre — un drop là revient, et Déplacer à ne l’oublie — et n’offre pas de nouvelle carte. Les cartes bougent toujours à l’intérieur. Désactivé par défaut : une voie au-delà de sa limite n’est balisée que marquée.
Nom:Form
Type:Type?
Description:La forme dans laquelle s’ouvre l’enregistrement d’une carte : un composant des éditeurs, alors que prend le dialogue d’enregistrement d’une grille. Sans cela, une carte ouvre la page de son enregistrement où son tableau contient une (KanbanBoard.ShowRecordLinks), Else KanbanDefaultForm: les colonnes de la vue et la colonne de la voie.
Nom:FormLocation
Type:DialogLocation
Par défaut:Center
Description:Là où l’enregistrement d’une carte s’ouvre : centré, ou dans un panneau latéral à gauche ou à droite. Par défaut est centré.
Nom:Height
Type:string
Par défaut:600px
Description:Hauteur de toute la carte, barre d’outils incluse, comme n’importe quelle longueur CSS. Par défaut à 600px.
Nom:IncludeSearchInPersistedState
Type:bool
Par défaut:False
Description:Que la recherche soit maintenue avec le reste de l’État. N’a aucun effet sans KanbanBoard.PersistedStateQueryParameter.
Nom:LaneAggregateFormats
Type:IReadOnlyDictionary<string, string>?
Description:Le format des KanbanBoard.LaneAggregates totaux de chaque colonne est indiqué en (« N0 »), par son nom.
Nom:LaneAggregates
Type:IReadOnlyDictionary<string, QueryAggregate>?
Description:Les totaux que l’en-tête de chaque voie indique au départ — une somme, une moyenne, le minimum, le plus ou un compte d’une colonne, par son nom. L’utilisateur les modifie avec le bouton Totaux, et une sauvegarde La vue les retient.
Nom:LaneColumn*
Type:string
Description:La colonne d’où proviennent les voies : un choix, une raison de statut, un Oui/Non, une recherche ou une colonne de date du tableau du tableau. Tout autre montre un message à la place du tableau. Les voies d’une colonne de date sont quand elle tombe, dans les jours du fuseau horaire de l’utilisateur : En retard, Aujourd’hui, Demain, Cette semaine, La semaine prochaine, Plus tard et Pas de date, ni des pages KanbanBoard.DateLanes (KanbanBoard.DateLaneDrop, KanbanBoard.DateLaneOrder).
Nom:LaneLimits
Type:IReadOnlyDictionary<string, int>?
Description:Le plus grand nombre de cartes que chaque voie devrait contenir est : KanbanLane.Keyl’en-tête d’une voie limitée indique son compte par rapport à sa limite (« 4 / 5 »), et la marque lorsque la voie en contient plus. Le Le compte correspond à toute la voie, quelle que soit la recherche et les filtres de l’utilisateur. Une voie non nommée Il n’y a pas de limites.
Nom:Lanes
Type:IEnumerable<string>?
Description:Les voies du plateau affichent, et dans quel ordre, par KanbanLane.Key: une option valeur (« 1 »), les « 1 » et « 0 » de Oui/Non, l’ID d’un enregistrement, la clé d’une zone de date (KanbanDateLane.Key : « en retard »,« aujourd’hui », ...), ou une clé vide pour le Voie de cartes sans valeur. Chaque voie, dans l’ordre de Dataverse, lorsqu’elle n’est pas donnée. Pour les lanes de date Il choisit parmi les KanbanBoard.DateLanes, dont les jours restent tels que ceux qui les définissent.
Nom:LookupLanes
Type:IEnumerable<LookupValue>?
Description:Les voies d’une recherche : une pour chaque enregistrement, dans l’ordre donné. Sans celles-ci, le tableau affiche une voie pour chaque enregistrement, le nom de la carte de la vue.
Nom:PageSize
Type:int
Par défaut:20
Description:Les cartes qu’une voie lit à la fois ; les suivantes viennent avec son Chargement plus. Par défaut, c’est 20.
Nom:PersistedStateQueryParameter
Type:string?
Description:Le nom d’un paramètre de requête URL pour conserver l’état de la carte — la vue choisie, les voies collapse et (avec KanbanBoard.IncludeSearchInPersistedState) la recherche — donc un rechargement ou un Link l’ouvre là où il était resté. Chaque changement remplace l’entrée historique du navigateur.
Nom:PrepareNewRecord
Type:Func<KanbanNewRecord, Task>?
Description:Prépare l’enregistrement d’une nouvelle carte avant l’ouverture de sa forme — depuis le bouton Ajouter d’une voie ou KanbanBoardContext.NewAsync(PowerPortalsPro.Common.Models.KanbanLane) — une fois que le plateau lui a attribué la valeur de la voie : le L’hôte définit les valeurs par défaut via l’indexeur de l’enregistrement (carte. Enregistrement['column'] = valeur), et chaque valeur qu’il définit est sauvegardée avec l’enregistrement. Le formulaire ne s’ouvre pas s’il est lancé, et l’erreur est affiché comme un Creation Is échoué.
Nom:RankColumn
Type:string?
Description:Une colonne décimale où le plateau garde l’ordre des cartes, à la main : chaque voie est triée par celle-ci, et une carte lâchée entre deux autres reçoit un rang entre les leurs. Sans celle-ci, les cartes suivent La vue est un peu plus simple, et une carte ne se déplace qu’à une autre voie.
Nom:SaveChange
Type:Func<KanbanCardMove, Task<bool>>?
Description:Sauvegarde un coup à la place du plateau ; le retour false remet la carte en arrière, comme lorsque le jet de sauvegarde est refusé. Sans cela, le plateau sauvegarde lui-même le coup. Un coup qui ferme le La carte est donnée une fois que l’utilisateur a expliqué comment, avec la demande d’envoi KanbanCardMove.Close; un état qui modifie un état que gouvernent les transitions de la table, une fois que l’utilisateur l’a confirmé.
Nom:SavedViewsKey
Type:string?
Description:Nomme ce tableau parmi les commandes de sa table, donc les vues enregistrées dessus et celles de l’utilisateur Les vues par défaut et cachées sont les siennes. Sans celle-ci, le conseil partage ses vues avec chaque grille, Calendrier et tableau de la table qui n’en a pas. Lettres, chiffres, -, _ et ..
Nom:ShowEmptyLanes
Type:bool
Par défaut:True
Description:Indiquer si une voie sans cartes est indiquée. Par défaut à true.
Nom:ShowRecordLinks
Type:bool
Par défaut:True
Description:Que les cartes renvoient à leurs pages d’enregistrements, enregistrées sur AddRecordPage, sous forme de grille les lignes et les recherches en font partie. Lorsque la table du plateau a une page et que le tableau reçoit non KanbanBoard.Form, le titre d’une carte renvoie à la page de son enregistrement et l’ouverture de la carte y mène ; Une recherche sur une carte renvoie à la page de son enregistrement où cette table en a une. Un tableau sans page ouvre ses cartes dans la boîte de dialogue du plateau. Une nouvelle carte est toujours créée dans la boîte de dialogue. Par défaut true.
Nom:SignInUrl
Type:string
Par défaut:Account/Login
Description:Lorsqu’un utilisateur non connecté est envoyé se connecter depuis le menu des vues sauvegardées ; il revient à cette page. En fonction de l’adresse de base de l’application. Par défaut, compte / connexion.
Nom:Title
Type:string?
Description:Le titre du tableau, affiché à la place du sélecteur de vue lorsqu’il n’y a qu’une seule vue.
Nom:ToolbarItems
Type:RenderFragment?
Description:Des contrôles pour la barre d’outils — KanbanBoardButtons, ou tout autre balisage — avant la boîte de recherche.
Nom:ViewIds
Type:IEnumerable<Guid>?
Description:D’autres vues de la même table, l’utilisateur peut basculer dans le sélecteur de vue.
Nom:ViewSort
Type:ViewSort
Par défaut:NameAscending
Description:L’ordre des vues dans le sélecteur. Par défaut est ViewSort.NameAscending, comme dans une grille.
Méthodes
Nom
Paramètres
Type
Description
RefreshAsync
Task
Il lit à nouveau chaque voie montrée.
Nom:RefreshAsync
Type:Task
Description:Il lit à nouveau chaque voie montrée.
Apply commence par un filtre sur les colonnes suivantes :
Client potentiel
Compte
Contact
Email
Sujet
Utilise des comparaisons de nombres sur les colonnes suivantes :
Est. revenus
Probabilité
Utilise des comparaisons de dates ou d’années sur les colonnes suivantes :
Date de clôture de la mise
Apply commence par un filtre sur les colonnes suivantes :
À propos
Priorité
Propriétaire
Raison du statut
Sujet
Utilise des comparaisons de dates ou d’années sur les colonnes suivantes :
Date d’accouchement
Rank Date
Apply commence par un filtre sur les colonnes suivantes :
À propos
Priorité
Propriétaire
Raison du statut
Sujet
Utilise des comparaisons de dates ou d’années sur les colonnes suivantes :
Date d’accouchement
Default NameAscending NameDescending Center Right Left ChangeDate None RafraîchissementRafraîchissement
Apply commence par un filtre sur les colonnes suivantes :
Client potentiel
Compte
Contact
Email
Sujet
Utilise des comparaisons de nombres sur les colonnes suivantes :
Est. revenus
Probabilité
Utilise des comparaisons de dates ou d’années sur les colonnes suivantes :
Date de clôture de la mise
Une erreur non traitée s’est produite.
Rechargement🗙