Muestra KanbanBoard los registros de una tabla como cartas en carriles lado a lado, un carril por cada valor de una columna: la calificación de una oportunidad, el motivo del estado de una tarea, la cuenta a la que pertenece un registro. Cada carril se lee por sí solo a través de una vista, página a página, con la misma consulta y seguridad que una cuadrícula, y muestra su recuento y totales en su cabecera. En un Editable tablero, una carta se mueve a otro carril arrastrándola, desde el teclado o a través de su menú Mover al menú, y el movimiento se guarda de inmediato; con una columna de rango, las cartas también se colocan en orden a mano. Se dibuja en tu tema de interfaz fluida.
Las oportunidades abiertas de los datos de muestra de la demo, a través de la propia vista de Open Opportunities de Dataverse: un carril para cada valoración, con el recuento y los ingresos estimados del carril en su encabezado. Lanes Omite el carril de oportunidades sin una valoración. La demo del Kanban Board muestra el mismo tablero con movimientos, vistas, filtros y vistas guardadas.
Ejemplo de reacción
Ejemplo de Blazor
React TypeScript
Razor
LaneColumn (React: laneColumn) nombra la columna de la tabla de la vista de donde provienen los carriles. Una opción da un carril para cada una de sus opciones, una razón de estado para cada motivo, una columna de Sí/No, una para cada uno de sus dos valores, una para cada registro que nombre y una fecha para los carriles en los que cae, tal como describe el nombre de los carriles de fecha . Cualquier otra columna muestra un mensaje en lugar del tablero. Los carriles siguen el orden de Dataverse y dejan fuera las opciones ocultas, y el color de una opción aparece como un punto junto al nombre de su carril. Una columna que un registro puede dejar vacía añade un último carril, (Sin valor), para las cartas que no lo tienen.
Lanes (React: lanes) elige qué carriles se muestran, y en qué orden, por clave: el valor de una opción, 1 y 0 para Sí y No, el id de un registro, o una clave vacía para el carril sin valor. Los carriles de una consulta son los registros que nombran las cartas de la vista, leídos en una consulta agrupada; nómbralos en LookupLanes (React: lookupLanes) en su lugar para fijarlos y su orden, un carril sin cartas incluidas.
React
Blazor
{/* Tareas desde No Iniciadas hasta Completadas, Sin Aplazadas y Canceladas. */}
<KanbanBoard defaultViewId={allTasksViewId} laneColumn="statuscode" lanes={['2', '3', '4', '5']} />
{/* Un carril para cada cuenta clave, en el orden indicado. */}
<KanbanBoard defaultViewId={openOpportunitiesViewId} laneColumn="parentaccountid" lookupLanes={keyAccounts} />
<!-- Tareas desde No Iniciadas hasta Completadas, Sin Aplazadas y Canceladas. -->
<KanbanBoard DefaultViewId="allTasksViewId"
LaneColumn="statuscode"
Lanes="@(["2", "3", "4", "5"])" />
<!-- Un carril para cada cuenta clave, en el orden indicado. -->
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="parentaccountid"
LookupLanes="@keyAccounts" />
Se muestra un carril sin cartas, por lo que se puede dejar caer una carta en él. Configura ShowEmptyLanes (Reaccionar: showEmptyLanes) para false ocultarlo una vez que se conozca su recuento. Los usuarios pueden derrubar un carril en una franja estrecha con su nombre y contar con el botón en el encabezado, y ocultar los carriles desde el menú de Filtro de la barra de herramientas, que los lista bajo Mostrar.
Una columna de fecha muestra los carriles de cuándo cae su fecha, contados en días de la propia zona horaria del usuario, con la semana comenzando en el primer día de su idioma, y se calculan de nuevo cada vez que el tablero lee sus carriles. Sin ningún nombre, son Atrasados, Hoy, Mañana, Esta semana — desde pasado mañana hasta el final de la semana, así que vacíos cerca del final de la semana — Semana siguiente, Más tarde y Sin fecha.
DateLanes (Reaccionar: dateLanes) nombra los carriles en su lugar, en orden de fecha. Un presajuste establece un carril desde la fecha actual: Yesterday, Today y Tomorrow; LastWeek, ThisWeek y NextWeek; LastMonth, ThisMonth y NextMonth; los trimestres y años del calendario, como ThisCalendarQuarter y NextCalendarYear, y los fiscales, como ThisFiscalQuarter y LastFiscalYear, que siguen al año fiscal de la organización según lo mantenga Dataverse; Overdue, antes de hoy; Earlier y Later, que toman lo que ocurra antes y después de los carriles que los rodean; y NoDate. Un carril propio tiene los días exactos, o días contados de los periodos de hoy, bajo un título propio: Between, Before y Starting (React: between, before y starting). Un preset también toma un título propio. Pruébalo en la demo de fechas de cierre.
Cada carta cae en un carril, ya que un carril no comienza antes de donde termina el anterior: listado después ThisWeekde , ThisMonth se mantiene el resto del mes, y un carril que los anteriores ya cubren muestra vacío y no acepta carta. Una fecha que no tiene carril — entre dos carriles de días exactos — pone su carta en ninguno, así que empieza con Earlier y termina con Later para conservar todas las cartas.
React
Blazor
{/* Trimestres fiscales de hoy, y todo lo anterior y posterior */}
<KanbanBoard
defaultViewId={openOpportunitiesViewId}
laneColumn="estimatedclosedate"
dateLanes={[
KanbanDateLane.Earlier,
KanbanDateLane.LastFiscalQuarter,
KanbanDateLane.ThisFiscalQuarter,
KanbanDateLane.NextFiscalQuarter,
KanbanDateLane.Later,
KanbanDateLane.NoDate,
]}
/>
{/* Carriles de días exactos con títulos propios: antes, durante y después de una semana de lanzamiento */}
<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,
]}
/>
<!-- Trimestres fiscales de hoy, y todo lo anterior y posterior -->
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="estimatedclosedate"
DateLanes="@([
KanbanDateLane.Earlier,
KanbanDateLane.LastFiscalQuarter,
KanbanDateLane.ThisFiscalQuarter,
KanbanDateLane.NextFiscalQuarter,
KanbanDateLane.Later,
KanbanDateLane.NoDate,
])" />
<!-- Carriles de días exactos con títulos propios: antes, durante y después de una semana de lanzamiento -->
<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,
])" />
Una carta movida a otro carril de fecha recibe el primer día de ese carril, manteniendo su hora del día — un carril por detrás también hoy, lo que le da una fecha pasada — y si se mueve a Sin fecha, pierde su fecha. Un carril sin un primer día, como Atrasado, un primer Antes o un carril vacío, no acepta carta. Establece DateLaneDrop (Reaccionar: dateLaneDrop) en None y los carriles no toman cartas entre sí: solo aparecen cuando caen cartas.
DateLaneOrder (Reaccionar: dateLaneOrder) ordena las cartas de una fecha de carril. Rank , el valor por defecto, las ordena por la columna de rango, como en cualquier otro carril: una carta movida dentro de su carril cambia solo su valor. Date las ordena por la fecha en su lugar, sin columna de rango: una carta caída por debajo de otra toma el día de esa carta, manteniendo su propio tiempo, y una que cae arriba toma el primer día de la línea; las cartas del mismo día se mantienen en el orden de sus tiempos. Pruébalo en la demo de fechas de vencimiento.
React
Blazor
{/* Tareas según la fecha de entrega, cada carril en orden de fecha de vencimiento */}
<KanbanBoard
defaultViewId={openTasksViewId}
laneColumn="scheduledend"
dateLaneOrder={KanbanDateLaneOrder.Date}
editable
/>
<!-- Tareas según la fecha de entrega, cada carril en orden de fecha de vencimiento -->
<KanbanBoard DefaultViewId="openTasksViewId"
LaneColumn="scheduledend"
DateLaneOrder="KanbanDateLaneOrder.Date"
Editable="true" />
Conteos y totales
El encabezado de cada carril muestra cuántas cartas contiene — 5000+ pasadas de 5.000 — y los totales nombrados en LaneAggregates (React: laneAggregates): la suma, media, menor o mayor de un número, columna de dinero o fecha, o un conteo de cualquier columna, sobre cada carta del carril, no solo las cargadas. LaneAggregateFormats (React: laneAggregateFormats) da a las cifras de cada columna un formato, como C0 o N1. Estos son los totales con los que empieza el tablero: el botón Totales permite a los usuarios elegir la suya propia de las columnas que muestran las cartas, y una vista guardada los conserva. Los conteos y totales se leen de nuevo después de cada movimiento guardado por el tablero.
LaneLimits (React: laneLimits) da a las líneas, por clave, la mayor cantidad de cartas que deberían tener. El encabezado de una línea limitada muestra su cuenta contra su límite, como 7/5, marcada una vez que la cuenta la supera. La cuenta corresponde a todas las cartas de la línea, las que el usuario busque o filtre. Un límite solo advierte a menos que EnforceLaneLimits se establezca (React: enforceLaneLimits) : entonces una línea completa no toma ninguna carta de otra, no se ofrece bajo Mover a y no tiene botón de Añadir. Es la regla del tablero, no del servidor: mantener un límite para cada forma en que un registro se guarda con un interceptor.
React
Blazor
{/* Como mucho tres tareas en curso a la vez */}
<KanbanBoard
defaultViewId={allTasksViewId}
laneColumn="statuscode"
laneLimits={{ '3': 3 }}
enforceLaneLimits
editable
/>
<!-- Como mucho tres tareas en curso a la vez -->
<KanbanBoard DefaultViewId="allTasksViewId"
LaneColumn="statuscode"
LaneLimits="@(new Dictionary<string, int> { ["3"] = 3 })"
EnforceLaneLimits="true"
Editable="true" />
Cartas
Una carta muestra la primera columna de la vista como título y las otras columnas de la vista bajo sus títulos, como hacen las cartas de una cuadrícula, omitiendo la columna de carril y la columna de rango. CardImageColumn (Reaccionar: cardImageColumn) añade una columna de imagen como avatar junto al título. Cada carril carga PageSize (Reaccionar: pageSize) cartas a la vez, 20 por defecto, con Cargar más en su pie. Desde Configuración, los usuarios cambian los campos que muestran las cartas, cómo se ordenan las cartas de un carril y cuántas carga cada carril.
Dibuja las cartas a tu manera con CardTemplate (React: cardRenderer). Se le entregan el registro y el carril de cada carta; Field , Label y DisplayValue (React: field, label y displayValue) muestran una columna como la carta por defecto, y OpenAsync y MoveToAsync (React: open y moveTo) abren el registro y mueven la carta, donde CanOpen y CanMove digan que pueden. Un clic en la carta aún abre su registro, y su menú Mover a la carta está junto a tu contenido. Las columnas que muestra una plantilla deben ser las de la vista, así que el tablero las lee con cada carta.
Las tareas de la demo a través de la propia vista de Todas las tareas de Dataverse, un carril para cada motivo de estado desde No Iniciado hasta Cancelado, cinco cartas a la vez. A CardTemplate (Reacción: cardRenderer) muestra el tema de cada tarea, de qué se trata, cuándo vence y su prioridad, las más altas en rojo.
Ejemplo de reacción
Ejemplo de Blazor
React TypeScript
Razor
CSS
Programa
No empezó
En Progreso
Esperando a otra persona
Aplazado
Completado
Cancelado
Columnas
Ordenar
Cartas por carril
5
10
20
50
100
No empezó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
Carga más
En Progreso42
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
Carga más
Esperando a otra persona28
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
Carga más
Aplazado18
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
Carga más
Completado57
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
Carga más
Cancelado16
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
Carga más
Cuando la tabla del tablero tiene una página registrada para sus registros (véase Páginas de registros) y el tablero no Form tiene (Reaccionar: form), el título de una carta enlaza con ella, y abrir la carta va allí; ShowRecordLinks (Reaccionar: showRecordLinks) desactiva eso. De lo contrario, al hacer clic en una tarjeta se abre su registro en un diálogo en el centro o, con FormLocation (Reaccionar: formLocation), en un panel lateral a la izquierda o derecha. La forma es KanbanDefaultForm — las columnas de la vista de la tabla del tablero y la columna de carril, cada una con el editor que ocupa su tipo — o tu propio componente de editores en Form (React: form). El registro se lee como lo lee una página de registro, a través del mismo acceso a la tabla y seguridad de columnas, y solo puede cambiarse en un Editable tablero, por un usuario que pueda cambiarlo.
Moviendo cartas
En un Editable tablero (React: editable), los usuarios mueven una carta a otro carril arrastrándola, desde el teclado o a través del menú Mover a la carta. La carta se mueve a la vez, y el tablero guarda lo que ha cambiado: la columna de la línea — por una razón de estado, solo la razón, ya que el servidor mueve el estado del registro con ella — y el rango de la carta, donde el tablero mantiene una. Una partida guardada que falla devuelve la carta y lo indica.
Una carta solo se mueve donde el usuario puede cambiarla: Escribe en su registro, a través del acceso a la tabla del portal y en su columna de carril, que debe ser una que una actualización pueda establecer y que la seguridad no retenga esa columna. Poner las cartas en orden también requiere Escribir en la columna de rango. Una carta que el usuario no puede mover permanece donde está, sin el menú Mover a Mover.
Las líneas de la razón de estado siguen sus estados y los cambios de estado que permite la tabla, con los que el servidor se AddStateTransitions registra (véase RecordContext). Las oportunidades, casos, citas y órdenes las tienen por defecto: una carta no es tomada por una línea que su registro no puede alcanzar desde la suya propia, y Mover a lista solo las líneas que puede. Un cambio de estado que hace una actualización — una oportunidad reabierta, un caso cancelado o reactivado, una cotización activada, una orden enviada — pide al usuario que lo confirme primero, y una acción propia de Dataverse abre el cuadro de cierre, como describe los registros de cierre a continuación. Las cartas de un estado cerrado no se colocan en otro orden entre ellas. Una tabla sin transiciones se mueve libremente: una tarea movida a Completada se completa, y se vuelve a abrir.
El encabezado de cada carril en un Editable tablero tiene un botón de Añadir que abre un nuevo registro que ya está en ese carril, en la forma del tablero: el de Form la página (React: form) o KanbanDefaultForm. Solo se muestra a los usuarios que pueden crear los registros de la tabla y establecer su columna de carril, y nunca en un carril de registros cerrados, ya que se crea un registro abierto. Una vez guardado, la carta aparece en la parte superior de su carril. Apágalo con AllowNew (React: allowNew). Handle PrepareNewRecord (React: prepareNewRecord) para dar más valores al nuevo registro antes de que se abra su formulario: se le asigna el registro, el valor del carril que ya está en él y el carril. Un botón de barra de herramientas también puede añadir una carta: CanCreate y NewAsync en ( KanbanBoardContext React: canCreate y newCard) decir si un carril toma una nueva carta y abre su forma — sin ningún carril nombrado, en el primero que toma una.
React
Blazor
<KanbanBoard defaultViewId={allTasksViewId} laneColumn="statuscode" editable>
{/* Un botón de barra de herramientas que añade una carta como lo hace el botón de Añadir de un carril */}
<KanbanBoardButton label="New task" icon={<AddRegular />} onClick={(board) => board.newCard()} />
</KanbanBoard>
<KanbanBoard DefaultViewId="allTasksViewId" LaneColumn="statuscode" Editable="true">
<ToolbarItems>
<!-- Un botón de barra de herramientas que añade una carta como lo hace el botón de Añadir de un carril -->
<KanbanBoardButton Label="New task"
Icon="@(new Icons.Regular.Size20.Add())"
OnClick="@((KanbanBoardContext board) => board.NewAsync())" />
</ToolbarItems>
</KanbanBoard>
React
Blazor
{/* Cada tarea añadida en el tablero comienza con una prioridad alta */}
<KanbanBoard
defaultViewId={allTasksViewId}
laneColumn="statuscode"
editable
prepareNewRecord={(record) => ({
...record,
properties: { ...record.properties, prioritycode: { $type: ColumnType.Choice, value: 2 } },
})}
/>
<!-- Cada tarea añadida en el tablero comienza con una prioridad alta -->
<KanbanBoard DefaultViewId="allTasksViewId" LaneColumn="statuscode" Editable="true"
PrepareNewRecord="@(card => { card.Record["prioritycode"] = new ChoiceValue { Value = 2 }; return Task.CompletedTask; })" />
Registros de cierre
En un tablero por razón de estado, una carta que se deja caer en un carril en el que Dataverse cierra registros con una acción propia — Ganado o Perdido de una oportunidad, Resuelto de un caso, Ganado o Cerrado de una cotización, Cumplido o Cancelado de una orden — abre un diálogo con la razón de estado, el carril de inicio y lo que registra el cierre: el ingreso real y la fecha de cierre de una oportunidad ganada; la fecha de cierre de una perdida y el competidor al que se perdió donde el usuario puede elegir competidores; la resolución y el tiempo facturable de un caso; la fecha de cierre de una cotización o un pedido; y una descripción. Confirmado, el registro se cierra mediante el propio mensaje de Dataverse, como WinOpportunity o CloseIncident; cancelado, la tarjeta vuelve a aparecer. Arrastrada de vuelta a un carril abierto, se reabre una oportunidad y se reactiva un caso una vez que el usuario confirma. Pruébalo en la demo de Pipeline. El mismo diálogo está detrás de los botones de cierre en el formulario de un registro, como WinOpportunityButton: véase RecordContext.
Un cierre se considera un cambio en el estado del registro: el usuario debe poder cambiar el registro y sus columnas de estado, y señalar al competidor que nombra. Dataverse archiva el cierre bajo el registro como una actividad propia (opportunityclose, incidentresolution, quoteclose, orderclose), que no necesita acceso a la tabla tuya. El usuario de la aplicación del portal necesita AppendTo en la tabla del registro, Crear y Añadir en actividades, y para una oportunidad AppendTo en competidores: véase Dataverse Connection.
React
Blazor
{/* Al caer en Ganado, Perdido o Resuelto, una carta abre el diálogo de cierre */}
<KanbanBoard defaultViewId={myOpportunitiesViewId} laneColumn="statuscode" editable />
<!-- Al caer en Ganado, Perdido o Resuelto, una carta abre el diálogo de cierre -->
<KanbanBoard DefaultViewId="myOpportunitiesViewId" LaneColumn="statuscode" Editable="true" />
Poner las cartas en orden
Nombra un RankColumn (Reaccionar: rankColumn) y los usuarios colocan las cartas de cada carril en orden por mano. Un carril se ordena por rango, luego por el orden de la vista, y una carta que cae entre dos otras recibe un rango entre los suyos. Normalmente ese rango es todo lo que escribe un drop. Las cartas sin rango ordenan primero, y se clasifican por turno cuando una carta se deja caer entre ellas o justo por debajo; un carril cuyos rangos no tienen espacio entre dos cartas se clasifica de nuevo, en el orden que muestra. Esos rangos se guardan con el movimiento, en una sola transacción. Un carril de más de 5.000 cartas no puede ordenarse a mano, ni se puede dejar caer una carta donde el usuario no puede cambiar una carta. Sin una columna de rango, un carril sigue el orden de la vista, y una carta solo se mueve a otro carril.
La columna de rango es una columna decimal de la tabla del tablero cuyo rango permite números negativos, ya que una carta caída por encima de la primera está clasificada por debajo. Su precisión decide con qué frecuencia se ordena un carril: las cartas empiezan con un millón de diferencias, y cada caída entre dos mitades divide la sala entre ellas, así que una columna de diez decimales necesita unas cincuenta caídas en un lugar antes de que su carril vuelva a estar clasificado, y una de ninguna alrededor de veinte.
Maneja SaveChange (Reaccionar: onCardMove) para guardar un movimiento a tu manera, en lugar del tablero: a través de un servicio propio, tras pedir al usuario, o no hacerlo en absoluto. Se le da KanbanCardMoveun : las cartas Record, los carriles en los que entró From y se Tofue , está Index ahí y su Rank, el Update que el tablero escribiría, y el OtherUpdates que pertenece a la misma transacción, escrito después — los rangos de otras cartas, o, para una carta que sale de un carril cerrado, su propio rango una vez que su estado la ha reabierto — y, para una carta caída en un carril que la cierra, el Close (Reaccionar: close) que el usuario confirmó, para enviarla después. Vuelve true para mantener la carta donde se dejó caer, o false para devolverla. El tablero no lee nada después de un movimiento que no guardó, así que una página puede conservar un movimiento solo en la página.
React
Blazor
<KanbanBoard
defaultViewId={openOpportunitiesViewId}
laneColumn="opportunityratingcode"
editable
// Guardado a través del propio servicio de la página; false vuelve a poner la tarjeta.
onCardMove={(move) => pipeline.changeRating(move.record.id, move.to.key)}
/>
<KanbanBoard DefaultViewId="openOpportunitiesViewId"
LaneColumn="opportunityratingcode"
Editable="true"
SaveChange="SaveMoveAsync" />
@code {
// Guardado a través del propio servicio de la página; false vuelve a poner la tarjeta.
private Task<bool> SaveMoveAsync(KanbanCardMove move)
=> _pipeline.ChangeRatingAsync(move.Record.Id, move.To.Key);
}
Lectores de teclado, táctil y pantalla
Cada carta que puede moverse tiene un ... botón con un menú de Mover a los carriles a los que puede ir, que funciona igual desde el teclado, por tacto y con un lector de pantalla. Una carta también puede moverse directamente desde el teclado: enfocarla, pulsar Espacio para recogerla, las flechas para llevarla a otro carril u otro lugar en su lugar, y Espacio de nuevo para dejarla. En una pantalla táctil, una carta se arrastra por su agarre, así que los carriles siguen desplazarse bajo un dedo. Los lectores de pantalla escuchan cada movimiento — la carta movida a la línea — y un movimiento que falla.
Barra de herramientas
La barra de herramientas está distribuida como la de una cuadrícula: el selector de vistas a la izquierda — o el Title (React: title), cuando solo hay una vista — y a la derecha tus propios controles, Totales, el cuadro de búsqueda, Filtro, Actualizar y Ajustes. Añade tus controles con ToolbarItems (React: los hijos del tablero). A KanbanBoardButton recibe el tablero al hacer clic: su tabla, la vista que muestra, sus carriles en su orden, y RefreshAsync (React: refresh) para leer cada carril de nuevo.
React
Blazor
<KanbanBoard defaultViewId={openOpportunitiesViewId} laneColumn="opportunityratingcode">
{/* Tu propio botón, que se entregaba al tablero al pulsarlo */}
<KanbanBoardButton
label="Export"
icon={<ArrowDownloadRegular />}
onClick={(board) => exportAsync(board.viewId, board.lanes)}
/>
</KanbanBoard>
<KanbanBoard DefaultViewId="openOpportunitiesViewId" LaneColumn="opportunityratingcode">
<ToolbarItems>
<!-- Tu propio botón, que se entregaba al tablero al pulsarlo -->
<KanbanBoardButton Label="Export"
Icon="@(new Icons.Regular.Size20.ArrowDownload())"
OnClick="@((KanbanBoardContext board) => ExportAsync(board.ViewId, board.Lanes))" />
</ToolbarItems>
</KanbanBoard>
Vistas, búsqueda y filtros
Un tablero muestra los registros de una vista — una de Dataverse o una que define la página — y su tabla es la de la vista. DefaultViewId (React: defaultViewId) es la vista en la que se abre, y ViewIds (React: viewIds) las otras que ofrece el selector de vistas, de la misma tabla. El cuadro de búsqueda encuentra cartas mientras la búsqueda de una cuadrícula encuentra filas: desde el inicio del valor de una columna de búsqueda, o desde cualquier lugar después de un inicio *. Mira en las columnas que muestran las cartas, las nombra en su tooltip y marca las coincidencias en las cartas. Desactivarlo con AllowSearch (React: allowSearch).
Con AllowFiltering (Reaccionar: allowFiltering), el menú de Filtro de la barra de herramientas ofrece filtros de Edición, el diálogo se abre el botón de Filtro de una cuadrícula, cuyos filtros sustituyen a los de la vista hasta que el usuario elige otra vista. Está desactivado por defecto, porque el usuario puede eliminar todos los filtros que tenga la vista.
Con (React: allowSavedViews), un usuario iniciado sesión puede guardar el tablero tal como lo ha organizado — la vista con sus filtros, los campos y ordenación de las cartas, los totales de los carriles, las cartas que AllowSavedViews carga cada carril y los carriles plegados o ocultos — como una vista propia, y elegir su vista predeterminada y ocultar las que no utilize, desde el menú de Filtros. Sin un SavedViewsKey (React: savedViewsKey), un tablero comparte sus vistas con las cuadrículas, calendarios y tableros de su tabla que no tienen ninguna, cada uno manteniendo su propio diseño. Cómo se guardan, cambian y comparten las vistas está en la página de Vistas guardadas.
Una página puede definir vistas propias en código con CustomViewDefinitions (React: customViewDefinitions), las definiciones de vistas de la cuadrícula. Se ofrecen en el selector de al lado ViewIds sin estar listadas allí, DefaultViewId pueden nombrar una, y un tablero puede tenerlas únicamente. Cada una se lee con su propio FetchXML, dentro del acceso a la tabla del usuario, y dispara el tablero como dice: son PageSize las cartas que carga un carril, las de una columna Hidden y DisplayLabel ocultan o renombran su campo de cartas, y son Aggregates los totales de los carriles. Construye la lista una vez, en un campo: una nueva lista inicia el tablero de nuevo.
<KanbanBoard CustomViewDefinitions="_views" LaneColumn="statuscode" Editable="true" />
@code {
// Las oportunidades abiertas, diez cartas por carril, con los ingresos estimados de cada carril
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" },
],
},
];
}
Mantener su lugar en la URL
Nombra un parámetro de consulta en PersistedStateQueryParameter (React: persistedStateQueryParameter), y el tablero mantiene la vista seleccionada y los carriles colapsados ahí, así que una recarga o un enlace compartido lo abre tal como se dejó. En qué se abriría de todos modos se omite. La búsqueda también se mantiene con IncludeSearchInPersistedState; se omite por defecto, ya que lo que buscan los usuarios puede ser sensible. Cada cambio reemplaza la entrada de historial del navegador, y ambas pilas escriben el mismo valor, así que un enlace hecho en uno abre el mismo tablero en el otro.
El tablero está dibujado con los controles y fichas de diseño propias de Fluent UI, por lo que sigue tu tema, claro o oscuro, y tu color de acento, y el punto de un carril toma el color de su opción de Dataverse. Los carriles tienen 280 píxeles de ancho, uno al lado del otro, y se desplazan lateralmente cuando no encajan; en un teléfono, cada uno ocupa la mayor parte de la pantalla y encajan en su sitio. Height (React: height) establece la altura del tablero, incluida la barra de herramientas — 600 píxeles por defecto — y cada carril desplaza sus cartas dentro de él. Para rediseñarlo, el tablero, sus carriles y sus cartas llevan sus propias clases, entre ellas ppp-kanban, ppp-kanban-lane, ppp-kanban-lane-header y ppp-kanban-card; Class y Style (React: className y style) añaden las tuyas propias.
Reaccionar
Blazor
KanbanBoard Clase
Parámetros
Nombre
Tipo
Default
Descripción
AllowFiltering
bool
False
Si el usuario puede cambiar los filtros de la vista, desde el menú de Filtros, como en una cuadrícula. Apagado por Por defecto: el usuario puede eliminar todos los filtros que tenga la vista.
AllowNew
bool
True
Si cada carril de un KanbanBoard.Editable tablero ofrece una nueva carta, con un botón de Añadir en su Cabecera: una que el usuario puede crear, en el valor del carril — ninguna en una línea de cartas cerradas, como una El registro se crea abierto. Por defecto es true.
AllowSavedViews
bool
False
Permitamos a los usuarios que han iniciado sesión guardar el tablero tal como lo han organizado — la vista que muestra con su filtros, los campos y ordenación de sus cartas, los totales de las líneas y las vías colapsadas o ocultas — como vistas propias, ofrecidas en el selector de vistas junto a las de la página, y eligen su vista predeterminada Y oculta las vistas que no usan. Desactivadas por defecto. Necesita la solución Power Portals Pro Core tablas de vistas guardadas; un usuario interno también necesita las vistas guardadas de Power Portals Pro Rol de seguridad.
AllowSearch
bool
True
Si la barra de herramientas tiene un cuadro de búsqueda. Por defecto es true.
CardImageColumn
string?
Una columna de imagen que cada carta por defecto muestra como avatar junto a su título, como hacen las cartas de una cuadrícula.
CardTemplate
RenderFragment<KanbanCardContext>?
El contenido de cada carta, en lugar de la predeterminada: su título — la primera columna de la vista — y las otras columnas de The View bajo sus títulos.
CustomViewDefinitions
List<ViewDefinition>?
Vistas que define la página — las s de Models.ViewDefinitionla cuadrícula — ofrecidas en el selector junto KanbanBoard.ViewIds sin aparecer allí; KanbanBoard.DefaultViewId puede nombrar uno. A La placa puede tener solo estas opciones. Cada una se lee con su propio FetchXML y displace la tarjeta como indica (Models.ViewDefinition)): las cartas que lee una línea a la vez, la carta de sus columnas campos ocultos o titulados, y los totales de las líneas. Queda uno de otra tabla distinta al del tablero fuera. Construye la lista una vez — en un campo, no en línea en el marcado — mientras una nueva lista inicia el De nuevo a bordo.
DateLaneDrop
KanbanDateLaneDrop
ChangeDate
Lo que hace una carta caída en otra línea de citas, donde es KanbanBoard.LaneColumn una cita: toma el primer día de la línea (KanbanDateLaneDrop.ChangeDate, el valor predeterminado) — manteniendo su hora del día; sin fecha en Sin fecha; ninguna se omite en Atrasado — o los carriles de fecha no toman cartas entre ellos (KanbanDateLaneDrop.None). Sin efecto en otras líneas.
DateLaneOrder
KanbanDateLaneOrder
Rank
Cómo se ordenan las cartas de los carrils de fecha, donde el KanbanBoard.LaneColumn es una fecha: por el KanbanBoard.RankColumn como otros carriles son (KanbanDateLaneOrder.Rank, el por defecto), o por la fecha en sí (KanbanDateLaneOrder.Date) — una carta que se coloca debajo otro toma su día, marcando su propio tiempo, uno se deja caer en la parte superior del carril el primer día, y No se usa la columna de rango. No afecta a otros carriles.
DateLanes
IReadOnlyList<KanbanDateLane>?
Los carriles que una fecha KanbanBoard.LaneColumn indica, en orden de fecha: presets como KanbanDateLane.Today, KanbanDateLane.ThisMonth o KanbanDateLane.ThisFiscalQuarter — calculado en cada lectura de hoy en la de los usuarios Huso horario, la semana de la cultura y el año fiscal de la organización — o carriles propios (DateTime,System.DateTime) y similares). Cada uno empieza donde termina la anterior, de modo que cada carta cae en un solo carril como máximo; una carta cuya fecha Ningún hold no está en el tablero. Sin ellos, el siete por defecto (KanbanDateLane.Defaults): Atrasado, Hoy, Mañana, Esta semana, La semana que viene, Más tarde y Sin fecha. Un carril se titula por su KanbanDateLane.Title, o bien por el nombre de un preset. en el idioma del usuario, si no, es clave. Una nueva lista de los mismos carriles — uno escrito en línea en el marcado — no vuelve a iniciar el tablero; lo hacen otras líneas.
DefaultViewId
Guid?
La vista desde la que se abre el tablero. La mesa del tablero es la de la vista.
Editable
bool
False
Si las cartas pueden moverse. Una carta se mueve cuando el usuario puede cambiar su registro y su carril columna, y — en los carriles de una razón de estado — las transiciones de estado de la tabla permiten el movimiento (Models.KanbanLane)): una línea solo ofrece los movimientos que hace, y un drop que la desecho vuelve. Una carta caída en un carril al que sus transiciones la cierran — una oportunidad ganada o Perdido, un caso resuelto, un presupuesto Ganado o Cerrado, un pedido Cumplido o Cancelado — está cerrado a través del propio mensaje de Dataverse: el consejo pregunta cómo — la razón, la línea en primer lugar, y Lo que registra el Close. Cualquier otro cambio de estado que hagan — reabrir una oportunidad, cancelar un caso, activar una cotización — se pide confirmar primero. Apagado por defecto.
EnforceLaneLimits
bool
False
Ya sea que el tablero se mantenga en KanbanBoard.LaneLimits: una línea llena no toma carta de otra — una caída allí vuelve atrás, y Mover a la deja fuera — y no ofrece carta nueva. Las cartas siguen moviéndose dentro de él. Apagado por defecto: un carril por encima de su límite solo está señalizado.
Form
Type?
La forma en la que se abre el registro de una tarjeta: un componente de los editores, mientras toma el diálogo de registro de una cuadrícula. Sin ella, una carta abre la página de su registro donde su tabla tiene una (KanbanBoard.ShowRecordLinks), Otra: KanbanDefaultFormlas columnas de la vista y la columna del carril.
FormLocation
DialogLocation
Center
Donde se abre el registro de una carta: centrado, o en un panel lateral a la izquierda o derecha. Por defecto se pone centrado.
Height
string
600px
Altura de toda la placa, incluida la barra de herramientas, como cualquier longitud CSS. Por defecto es 600px.
IncludeSearchInPersistedState
bool
False
Si la búsqueda se mantiene con el resto del estado. No tiene efecto sin KanbanBoard.PersistedStateQueryParameter.
LaneAggregateFormats
IReadOnlyDictionary<string, string>?
El formato en KanbanBoard.LaneAggregates el que se muestran los totales de cada columna se muestra en ('N0'), por su nombre.
LaneAggregates
IReadOnlyDictionary<string, QueryAggregate>?
Los totales que muestra el encabezado de cada carril al principio — una suma, un promedio, el mínimo, el máximo o un conteo de una columna, por su nombre. El usuario los cambia con el botón de Totales y un guardado La vista los mantiene.
LaneColumn*
string
La columna de la que provienen los carriles: una elección, una razón de estado, un Sí/No, una consulta o una columna de fecha de la tabla del tablero. Cualquier otro muestra un mensaje en lugar del tablero. Los carriles de una columna de fecha son cuando cae, en días de la zona horaria del usuario: Vencido, Hoy, Mañana, Esta semana, La próxima semana, Más tarde y Sin fecha, o las páginas KanbanBoard.DateLanes (KanbanBoard.DateLaneDrop, KanbanBoard.DateLaneOrder).
LaneLimits
IReadOnlyDictionary<string, int>?
La mayor cantidad de cartas que debería tener cada carril, por KanbanLane.Key: cabecera de una línea limitada muestra su recuento respecto a su límite ('4 / 5'), y lo marca cuando el carril tiene más. El El recuento es el de todo el carril, sea lo que sea que muestren la búsqueda y los filtros del usuario. Un carril sin nombre No tiene límite.
Lanes
IEnumerable<string>?
En qué líneas se muestra el tablero, y en qué orden, por KanbanLane.Key: una opción valor ('1'), ' 1' y ' 0' de Sí/No, el ID de un registro, la clave de una línea de fechas (KanbanDateLane.Key: 'atrasado','hoy', ...), o una llave vacía para el Carril de cartas sin valor. Cada carril, en el orden de Dataverse, cuando no está dado. Para carriles de fecha Selecciona entre los KanbanBoard.DateLanes, cuyos días permanecen tal y como los definen.
LookupLanes
IEnumerable<LookupValue>?
Los carriles de una consulta: uno para cada registro, en el orden indicado. Sin ellos, el tablero muestra un carril para cada registro, el nombre de las cartas de la vista.
PageSize
int
20
Las cartas que una línea lee a la vez; las siguientes vienen con su Carga más. Por defecto es 20.
PersistedStateQueryParameter
string?
El nombre de un parámetro de consulta URL para mantener el estado de la placa — la vista elegida, los carriles colapsado y (con KanbanBoard.IncludeSearchInPersistedState) la búsqueda — así que una recarga o un Link lo abre donde lo dejó. Cada cambio reemplaza la entrada de historial del navegador.
PrepareNewRecord
Func<KanbanNewRecord, Task>?
Prepara el registro de una nueva carta antes de que se abra su forma — desde el botón Añadir de una línea o KanbanBoardContext.NewAsync(PowerPortalsPro.Common.Models.KanbanLane) — una vez que el tablero le ha dado el valor de la línea: la Host establece valores predeterminados a través del indexador del registro (card. Record['column'] = valor), y Cada valor que establece se guarda junto con el registro. El formulario no se abre si se lanza, y el error también aparece se muestra como el is de un creador fallido.
RankColumn
string?
Una columna decimal donde el tablero guarda el orden de las cartas, a mano: cada carril está ordenado por ella, y una carta que se deja caer entre otras dos recibe un valor entre los suyos. Sin ella, las cartas siguen La vista es más o menos, y una carta solo se mueve a otro carril.
SaveChange
Func<KanbanCardMove, Task<bool>>?
Guarda un movimiento en lugar del tablero; al devolver false la carta vuelve a poner, como cuando se rechaza la tirada. Sin ella, el tablero guarda la jugada en sí. Una jugada que cierra la La tarjeta se entrega una vez que el usuario ha explicado cómo, con la solicitud de enviar KanbanCardMove.Close; uno que cambia un estado que gobiernan las transiciones de la tabla, una vez que el usuario lo haya confirmado.
SavedViewsKey
string?
Nombra este tablero entre los controles de su tabla, así las vistas guardadas en él y las del usuario Las vistas predeterminadas y ocultas son propias. Sin una, el tablero comparte sus vistas con cada cuadrícula, calendario y tabla de la tabla que no tiene ninguna. Letras, dígitos, -, _ y...
ShowEmptyLanes
bool
True
Si se muestra una línea sin cartas. Por defecto se muestra .true
ShowRecordLinks
bool
True
Si las tarjetas enlazan a las páginas de sus registros, registradas en AddRecordPage, como cuadrículas las filas y consultas sí. Cuando la tabla del tablero tiene una página y el tablero recibe no KanbanBoard.Form, el título de una carta enlaza con la página de su registro y al abrir la tarjeta se lleva allí; una consulta en una carta enlaza a la página de su registro donde esa tabla tiene una. Una tabla sin página abre sus cartas en el cuadro de diálogo del tablero. Siempre se crea una nueva carta en el diálogo. Valor predeterminado true.
SignInUrl
string
Account/Login
Cuando un usuario que no está conectado es enviado a iniciar sesión, desde el menú de vistas guardadas; vuelve a aparecer a esta página. En relación con la dirección base de la app. Por defecto es Cuenta/Inicio de sesión.
Title
string?
El encabezado del tablero, mostrado en lugar del selector de vistas cuando solo hay una vista.
ToolbarItems
RenderFragment?
Controles para la barra de herramientas — KanbanBoardButtons, o cualquier otro marcado — delante del cuadro de búsqueda.
ViewIds
IEnumerable<Guid>?
Otras vistas de la misma tabla el usuario puede cambiar, en el selector de vistas.
ViewSort
ViewSort
NameAscending
El orden de las vistas en el selector. Por defecto es ViewSort.NameAscending, como en una cuadrícula.
Nombre:AllowFiltering
Tipo:bool
Default:False
Descripción:Si el usuario puede cambiar los filtros de la vista, desde el menú de Filtros, como en una cuadrícula. Apagado por Por defecto: el usuario puede eliminar todos los filtros que tenga la vista.
Nombre:AllowNew
Tipo:bool
Default:True
Descripción:Si cada carril de un KanbanBoard.Editable tablero ofrece una nueva carta, con un botón de Añadir en su Cabecera: una que el usuario puede crear, en el valor del carril — ninguna en una línea de cartas cerradas, como una El registro se crea abierto. Por defecto es true.
Nombre:AllowSavedViews
Tipo:bool
Default:False
Descripción:Permitamos a los usuarios que han iniciado sesión guardar el tablero tal como lo han organizado — la vista que muestra con su filtros, los campos y ordenación de sus cartas, los totales de las líneas y las vías colapsadas o ocultas — como vistas propias, ofrecidas en el selector de vistas junto a las de la página, y eligen su vista predeterminada Y oculta las vistas que no usan. Desactivadas por defecto. Necesita la solución Power Portals Pro Core tablas de vistas guardadas; un usuario interno también necesita las vistas guardadas de Power Portals Pro Rol de seguridad.
Nombre:AllowSearch
Tipo:bool
Default:True
Descripción:Si la barra de herramientas tiene un cuadro de búsqueda. Por defecto es true.
Nombre:CardImageColumn
Tipo:string?
Descripción:Una columna de imagen que cada carta por defecto muestra como avatar junto a su título, como hacen las cartas de una cuadrícula.
Nombre:CardTemplate
Tipo:RenderFragment<KanbanCardContext>?
Descripción:El contenido de cada carta, en lugar de la predeterminada: su título — la primera columna de la vista — y las otras columnas de The View bajo sus títulos.
Nombre:CustomViewDefinitions
Tipo:List<ViewDefinition>?
Descripción:Vistas que define la página — las s de Models.ViewDefinitionla cuadrícula — ofrecidas en el selector junto KanbanBoard.ViewIds sin aparecer allí; KanbanBoard.DefaultViewId puede nombrar uno. A La placa puede tener solo estas opciones. Cada una se lee con su propio FetchXML y displace la tarjeta como indica (Models.ViewDefinition)): las cartas que lee una línea a la vez, la carta de sus columnas campos ocultos o titulados, y los totales de las líneas. Queda uno de otra tabla distinta al del tablero fuera. Construye la lista una vez — en un campo, no en línea en el marcado — mientras una nueva lista inicia el De nuevo a bordo.
Nombre:DateLaneDrop
Tipo:KanbanDateLaneDrop
Default:ChangeDate
Descripción:Lo que hace una carta caída en otra línea de citas, donde es KanbanBoard.LaneColumn una cita: toma el primer día de la línea (KanbanDateLaneDrop.ChangeDate, el valor predeterminado) — manteniendo su hora del día; sin fecha en Sin fecha; ninguna se omite en Atrasado — o los carriles de fecha no toman cartas entre ellos (KanbanDateLaneDrop.None). Sin efecto en otras líneas.
Nombre:DateLaneOrder
Tipo:KanbanDateLaneOrder
Default:Rank
Descripción:Cómo se ordenan las cartas de los carrils de fecha, donde el KanbanBoard.LaneColumn es una fecha: por el KanbanBoard.RankColumn como otros carriles son (KanbanDateLaneOrder.Rank, el por defecto), o por la fecha en sí (KanbanDateLaneOrder.Date) — una carta que se coloca debajo otro toma su día, marcando su propio tiempo, uno se deja caer en la parte superior del carril el primer día, y No se usa la columna de rango. No afecta a otros carriles.
Nombre:DateLanes
Tipo:IReadOnlyList<KanbanDateLane>?
Descripción:Los carriles que una fecha KanbanBoard.LaneColumn indica, en orden de fecha: presets como KanbanDateLane.Today, KanbanDateLane.ThisMonth o KanbanDateLane.ThisFiscalQuarter — calculado en cada lectura de hoy en la de los usuarios Huso horario, la semana de la cultura y el año fiscal de la organización — o carriles propios (DateTime,System.DateTime) y similares). Cada uno empieza donde termina la anterior, de modo que cada carta cae en un solo carril como máximo; una carta cuya fecha Ningún hold no está en el tablero. Sin ellos, el siete por defecto (KanbanDateLane.Defaults): Atrasado, Hoy, Mañana, Esta semana, La semana que viene, Más tarde y Sin fecha. Un carril se titula por su KanbanDateLane.Title, o bien por el nombre de un preset. en el idioma del usuario, si no, es clave. Una nueva lista de los mismos carriles — uno escrito en línea en el marcado — no vuelve a iniciar el tablero; lo hacen otras líneas.
Nombre:DefaultViewId
Tipo:Guid?
Descripción:La vista desde la que se abre el tablero. La mesa del tablero es la de la vista.
Nombre:Editable
Tipo:bool
Default:False
Descripción:Si las cartas pueden moverse. Una carta se mueve cuando el usuario puede cambiar su registro y su carril columna, y — en los carriles de una razón de estado — las transiciones de estado de la tabla permiten el movimiento (Models.KanbanLane)): una línea solo ofrece los movimientos que hace, y un drop que la desecho vuelve. Una carta caída en un carril al que sus transiciones la cierran — una oportunidad ganada o Perdido, un caso resuelto, un presupuesto Ganado o Cerrado, un pedido Cumplido o Cancelado — está cerrado a través del propio mensaje de Dataverse: el consejo pregunta cómo — la razón, la línea en primer lugar, y Lo que registra el Close. Cualquier otro cambio de estado que hagan — reabrir una oportunidad, cancelar un caso, activar una cotización — se pide confirmar primero. Apagado por defecto.
Nombre:EnforceLaneLimits
Tipo:bool
Default:False
Descripción:Ya sea que el tablero se mantenga en KanbanBoard.LaneLimits: una línea llena no toma carta de otra — una caída allí vuelve atrás, y Mover a la deja fuera — y no ofrece carta nueva. Las cartas siguen moviéndose dentro de él. Apagado por defecto: un carril por encima de su límite solo está señalizado.
Nombre:Form
Tipo:Type?
Descripción:La forma en la que se abre el registro de una tarjeta: un componente de los editores, mientras toma el diálogo de registro de una cuadrícula. Sin ella, una carta abre la página de su registro donde su tabla tiene una (KanbanBoard.ShowRecordLinks), Otra: KanbanDefaultFormlas columnas de la vista y la columna del carril.
Nombre:FormLocation
Tipo:DialogLocation
Default:Center
Descripción:Donde se abre el registro de una carta: centrado, o en un panel lateral a la izquierda o derecha. Por defecto se pone centrado.
Nombre:Height
Tipo:string
Default:600px
Descripción:Altura de toda la placa, incluida la barra de herramientas, como cualquier longitud CSS. Por defecto es 600px.
Nombre:IncludeSearchInPersistedState
Tipo:bool
Default:False
Descripción:Si la búsqueda se mantiene con el resto del estado. No tiene efecto sin KanbanBoard.PersistedStateQueryParameter.
Nombre:LaneAggregateFormats
Tipo:IReadOnlyDictionary<string, string>?
Descripción:El formato en KanbanBoard.LaneAggregates el que se muestran los totales de cada columna se muestra en ('N0'), por su nombre.
Nombre:LaneAggregates
Tipo:IReadOnlyDictionary<string, QueryAggregate>?
Descripción:Los totales que muestra el encabezado de cada carril al principio — una suma, un promedio, el mínimo, el máximo o un conteo de una columna, por su nombre. El usuario los cambia con el botón de Totales y un guardado La vista los mantiene.
Nombre:LaneColumn*
Tipo:string
Descripción:La columna de la que provienen los carriles: una elección, una razón de estado, un Sí/No, una consulta o una columna de fecha de la tabla del tablero. Cualquier otro muestra un mensaje en lugar del tablero. Los carriles de una columna de fecha son cuando cae, en días de la zona horaria del usuario: Vencido, Hoy, Mañana, Esta semana, La próxima semana, Más tarde y Sin fecha, o las páginas KanbanBoard.DateLanes (KanbanBoard.DateLaneDrop, KanbanBoard.DateLaneOrder).
Nombre:LaneLimits
Tipo:IReadOnlyDictionary<string, int>?
Descripción:La mayor cantidad de cartas que debería tener cada carril, por KanbanLane.Key: cabecera de una línea limitada muestra su recuento respecto a su límite ('4 / 5'), y lo marca cuando el carril tiene más. El El recuento es el de todo el carril, sea lo que sea que muestren la búsqueda y los filtros del usuario. Un carril sin nombre No tiene límite.
Nombre:Lanes
Tipo:IEnumerable<string>?
Descripción:En qué líneas se muestra el tablero, y en qué orden, por KanbanLane.Key: una opción valor ('1'), ' 1' y ' 0' de Sí/No, el ID de un registro, la clave de una línea de fechas (KanbanDateLane.Key: 'atrasado','hoy', ...), o una llave vacía para el Carril de cartas sin valor. Cada carril, en el orden de Dataverse, cuando no está dado. Para carriles de fecha Selecciona entre los KanbanBoard.DateLanes, cuyos días permanecen tal y como los definen.
Nombre:LookupLanes
Tipo:IEnumerable<LookupValue>?
Descripción:Los carriles de una consulta: uno para cada registro, en el orden indicado. Sin ellos, el tablero muestra un carril para cada registro, el nombre de las cartas de la vista.
Nombre:PageSize
Tipo:int
Default:20
Descripción:Las cartas que una línea lee a la vez; las siguientes vienen con su Carga más. Por defecto es 20.
Nombre:PersistedStateQueryParameter
Tipo:string?
Descripción:El nombre de un parámetro de consulta URL para mantener el estado de la placa — la vista elegida, los carriles colapsado y (con KanbanBoard.IncludeSearchInPersistedState) la búsqueda — así que una recarga o un Link lo abre donde lo dejó. Cada cambio reemplaza la entrada de historial del navegador.
Nombre:PrepareNewRecord
Tipo:Func<KanbanNewRecord, Task>?
Descripción:Prepara el registro de una nueva carta antes de que se abra su forma — desde el botón Añadir de una línea o KanbanBoardContext.NewAsync(PowerPortalsPro.Common.Models.KanbanLane) — una vez que el tablero le ha dado el valor de la línea: la Host establece valores predeterminados a través del indexador del registro (card. Record['column'] = valor), y Cada valor que establece se guarda junto con el registro. El formulario no se abre si se lanza, y el error también aparece se muestra como el is de un creador fallido.
Nombre:RankColumn
Tipo:string?
Descripción:Una columna decimal donde el tablero guarda el orden de las cartas, a mano: cada carril está ordenado por ella, y una carta que se deja caer entre otras dos recibe un valor entre los suyos. Sin ella, las cartas siguen La vista es más o menos, y una carta solo se mueve a otro carril.
Nombre:SaveChange
Tipo:Func<KanbanCardMove, Task<bool>>?
Descripción:Guarda un movimiento en lugar del tablero; al devolver false la carta vuelve a poner, como cuando se rechaza la tirada. Sin ella, el tablero guarda la jugada en sí. Una jugada que cierra la La tarjeta se entrega una vez que el usuario ha explicado cómo, con la solicitud de enviar KanbanCardMove.Close; uno que cambia un estado que gobiernan las transiciones de la tabla, una vez que el usuario lo haya confirmado.
Nombre:SavedViewsKey
Tipo:string?
Descripción:Nombra este tablero entre los controles de su tabla, así las vistas guardadas en él y las del usuario Las vistas predeterminadas y ocultas son propias. Sin una, el tablero comparte sus vistas con cada cuadrícula, calendario y tabla de la tabla que no tiene ninguna. Letras, dígitos, -, _ y...
Nombre:ShowEmptyLanes
Tipo:bool
Default:True
Descripción:Si se muestra una línea sin cartas. Por defecto se muestra .true
Nombre:ShowRecordLinks
Tipo:bool
Default:True
Descripción:Si las tarjetas enlazan a las páginas de sus registros, registradas en AddRecordPage, como cuadrículas las filas y consultas sí. Cuando la tabla del tablero tiene una página y el tablero recibe no KanbanBoard.Form, el título de una carta enlaza con la página de su registro y al abrir la tarjeta se lleva allí; una consulta en una carta enlaza a la página de su registro donde esa tabla tiene una. Una tabla sin página abre sus cartas en el cuadro de diálogo del tablero. Siempre se crea una nueva carta en el diálogo. Valor predeterminado true.
Nombre:SignInUrl
Tipo:string
Default:Account/Login
Descripción:Cuando un usuario que no está conectado es enviado a iniciar sesión, desde el menú de vistas guardadas; vuelve a aparecer a esta página. En relación con la dirección base de la app. Por defecto es Cuenta/Inicio de sesión.
Nombre:Title
Tipo:string?
Descripción:El encabezado del tablero, mostrado en lugar del selector de vistas cuando solo hay una vista.
Nombre:ToolbarItems
Tipo:RenderFragment?
Descripción:Controles para la barra de herramientas — KanbanBoardButtons, o cualquier otro marcado — delante del cuadro de búsqueda.
Nombre:ViewIds
Tipo:IEnumerable<Guid>?
Descripción:Otras vistas de la misma tabla el usuario puede cambiar, en el selector de vistas.
Nombre:ViewSort
Tipo:ViewSort
Default:NameAscending
Descripción:El orden de las vistas en el selector. Por defecto es ViewSort.NameAscending, como en una cuadrícula.
Métodos
Nombre
Parámetros
Tipo
Descripción
RefreshAsync
Task
Lee todos los carriles mostrados otra vez.
Nombre:RefreshAsync
Tipo:Task
Descripción:Lee todos los carriles mostrados otra vez.
ActualizarActualizar
Apply comienza con un filtro en las siguientes columnas:
Prioridad
Propietario
Razón del estado
Respecto a
Tema
Utiliza comparaciones de fechas o años en las siguientes columnas:
Fecha de parto
Apply comienza con un filtro en las siguientes columnas:
Cliente potencial
Contacto
Correo electrónico
Cuenta
Tema
Utiliza comparaciones numéricas en las siguientes columnas:
Estimación de ingresos
Probabilidad
Utiliza comparaciones de fechas o años en las siguientes columnas:
Fecha de cierre
Center Right Left Rank Date Default NameAscending NameDescending ChangeDate None
Apply comienza con un filtro en las siguientes columnas:
Prioridad
Propietario
Razón del estado
Respecto a
Tema
Utiliza comparaciones de fechas o años en las siguientes columnas:
Fecha de parto
Apply comienza con un filtro en las siguientes columnas:
Cliente potencial
Contacto
Correo electrónico
Cuenta
Tema
Utiliza comparaciones numéricas en las siguientes columnas:
Estimación de ingresos
Probabilidad
Utiliza comparaciones de fechas o años en las siguientes columnas: