Codeunit "Calendar Helper V2 UTCAP"
Propose des fonctionnalités fortement typées pour construire les objets JSON attendus par le
contrôle calendrier « Calendar V2 UTCAP ». Le positionnement se fait par index de colonne
(startIndex/endIndex, 0-based, inclusifs) ; utilisez le codeunit
Calendar Column Math UTCAP (ToColumnIndex) pour convertir une (période, sous-période)
en index de colonne.
Remarks
Pattern builder : chaque Create... renvoie un objet minimal que l'on enrichit ensuite par
des procédures Set... / MakeEditable (appelées ligne à ligne sur l'objet). Chaque objet
porte une propriété _context qui identifie son type (renderer, resource, task…) : les
procédures Set... vérifient ce _context et refusent un objet d'un autre type, garantissant
qu'on n'enrichit qu'un objet valide (ex. SetLocale n'accepte qu'un objet issu de CreateTeamPlanRenderer).
Methods
CreateTeamPlanRenderer
Créé une configuration minimale pour la vue Planning d'équipe (Team).
procedure CreateTeamPlanRenderer(PeriodCount: Integer; SubPeriodCount: Integer): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| PeriodCount | Integer |
Nombre de périodes (colonnes principales). |
| SubPeriodCount | Integer |
Nombre de sous-périodes par période (sert au calcul d'index de colonne). |
Returns
| Type | Description |
|---|---|
| JsonObject |
La configuration à passer à |
CreateTeamPlanRenderer
Créé une configuration pour la vue Planning d'équipe (Team) avec les libellés de colonnes.
procedure CreateTeamPlanRenderer(PeriodCount: Integer; Periods: List of [Text]; SubPeriodCount: Integer; SubPeriods: List of [Text]): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| PeriodCount | Integer |
Nombre de périodes (colonnes principales). |
| Periods | List of [Text] |
Libellés des périodes, alignés par index. |
| SubPeriodCount | Integer |
Nombre de sous-périodes par période (≥ 1 ; sert au calcul d'index de colonne). |
| SubPeriods | List of [Text] |
Libellés des sous-périodes, alignés par index. |
Returns
| Type | Description |
|---|---|
| JsonObject |
La configuration à passer à |
Examples
// 5 jours × 2 créneaux nommés (Matin / Après-midi), répétés chaque jour :
Renderer := Helper.CreateTeamPlanRenderer(5, Days, 2, HalfDays); // HalfDays = ['Matin','Après-midi']
// 5 jours × 1 colonne, SANS ligne de sous-périodes (vue "journées") :
Renderer := Helper.CreateTeamPlanRenderer(5, Days, 1, Empty);
// 5 jours × 4 colonnes conservées pour le placement, mais sans en-tête de sous-périodes :
Renderer := Helper.CreateTeamPlanRenderer(5, Days, 4, Empty);
Remarks
STRUCTURE (nombre de colonnes) — PeriodCount et SubPeriodCount
font foi : la grille compte PeriodCount × SubPeriodCount colonnes de temps. C'est aussi le pas de
conversion (période, sous-période) → index de colonne (index = période × SubPeriodCount + sousPériode).
SubPeriodCount doit être ≥ 1 (sinon une erreur est levée).
LIBELLÉS (alignés PAR INDEX) — Periods/SubPeriods sont alignés colonne
par colonne. Une liste plus COURTE que le nombre de colonnes laisse les colonnes de fin sans libellé ; une
liste plus LONGUE voit son surplus ignoré. En mode par défaut, il n'y a PAS de bouclage des libellés.
RÉPÉTITION DES SOUS-PÉRIODES — par défaut, SubPeriods décrit les créneaux d'UNE période et
se répète à l'identique sur chaque période (ex. "Matin"/"Après-midi" affichés pour chaque jour). Des libellés
identiques consécutifs sont fusionnés en un seul en-tête (ex. ["Matin","Matin"] → un titre "Matin" sur
2 colonnes). Pour répartir les libellés sur TOUTE la grille (axe continu) au lieu de les répéter par période,
voir SetSubPeriodsMode.
MASQUER LA LIGNE DES SOUS-PÉRIODES — la ligne d'en-tête des sous-périodes ne s'affiche que s'il y a plus d'une sous-période ET au moins un libellé non vide. Autrement dit :
SubPeriodCount = 1(avec ou sans libellé) → une seule colonne par période, ligne des sous-périodes masquée (vue "journées").SubPeriodCount = N ≥ 2avecSubPeriodsVIDE (ou uniquement des libellés vides) → les N colonnes par période sont conservées pour le placement, mais la ligne des sous-périodes est masquée. Il n'existe pas deSubPeriodCount = 0(valeur ≥ 1 obligatoire) : pour masquer les sous-périodes, on joue sur les libellés, pas sur un compte nul.
Enrichissez ensuite la configuration avec les procédures Set... (largeur, coin, pauses, etc.).
SetLocale
Définit la locale d'affichage (format "xx-XX", ex. "fr-FR").
procedure SetLocale(var Config: JsonObject; Locale: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Locale | Text |
Locale au format "xx-XX". |
Remarks
Réservée : la locale est transmise au moteur de rendu mais n'influence pas encore l'affichage (les libellés sont fournis tels quels par l'AL). Prévue pour un formatage localisé ultérieur.
SetHeaderColumnWidth
Définit la largeur (px) de la colonne des ressources (colonne figée de gauche).
procedure SetHeaderColumnWidth(var Config: JsonObject; Width: Integer)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Width | Integer |
Largeur en pixels. |
Remarks
Sans appel, une largeur par défaut s'applique. La colonne reste FIGÉE horizontalement pendant le défilement ; à l'export PDF paginé A4, elle conserve cette largeur (seules les colonnes de temps sont réduites pour tenir dans la page).
SetCollapsedHeaderMaxVisibleRows
Définit le nombre maximum de sous-lignes affichées par ressource avant repli.
procedure SetCollapsedHeaderMaxVisibleRows(var Config: JsonObject; Rows: Integer)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Rows | Integer |
Nombre de sous-lignes visibles avant repli (≥ 1). |
Remarks
Quand les tâches d'une ressource se chevauchent, elles s'empilent sur plusieurs sous-lignes. Si le nombre
de sous-lignes dépasse cette valeur, un bouton de repli apparaît sur la ressource : une fois repliée, seules
les Rows premières sous-lignes (et les tâches qu'elles portent) restent visibles. Défaut : 1.
SetRowHeight
Définit la hauteur UNITAIRE d'une ligne (ressource / tâche). L'avatar et les textes (ressources ET activités)
grandissent / rétrécissent proportionnellement à cette hauteur. Même système de joker (étoile) que
SetSubPeriodWidth, mais sur l'axe VERTICAL : la position de l'étoile (avant/après le nombre) indique
s'il s'agit d'une borne MIN ou MAX.
procedure SetRowHeight(var Config: JsonObject; Height: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject | |
| Height | Text |
Hauteur au format |
Examples
Helper.SetRowHeight(Renderer, '*'); // s'adapte pile à la hauteur disponible
Helper.SetRowHeight(Renderer, '*50'); // au moins 50 px par ligne, défile si nécessaire
Helper.SetRowHeight(Renderer, '80*'); // au plus 80 px, se resserre pour éviter tout défilement
Remarks
Formes acceptées et comportement (une valeur invalide lève une erreur) :
"50"(ou un nombre) → hauteur FIXE de 50 px ; si le total dépasse la hauteur visible, défilement vertical."50*"→ 50 px MAX : les lignes sont réduites pour tout faire tenir en hauteur (jamais de défilement), sans jamais dépasser 50 px."*50"→ 50 px MIN : les lignes sont agrandies pour remplir la hauteur visible ; si 50 px ne tiennent pas toutes, défilement vertical."*"→ remplit EXACTEMENT la hauteur visible (ni plus, ni moins).- non appelé → hauteur par défaut, fixe.
Les valeurs fixes restent bornées dans un intervalle raisonnable côté control add-in ; les bornes des jokers
(
N) sont libres, comme pourSetSubPeriodWidth.
SetPeriodHeaderHeight
Définit la hauteur (px) de la ligne d'en-tête des périodes.
procedure SetPeriodHeaderHeight(var Config: JsonObject; Height: Integer)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Height | Integer |
Hauteur en pixels. |
Remarks
Facultatif — sans appel, une hauteur par défaut s'applique. Une hauteur élevée est surtout utile avec un
texte de périodes VERTICAL (cf. SetPeriodTextOrientation) et des colonnes fines, pour laisser la place
à des libellés longs. Ne modifie pas la hauteur des lignes de ressources (cf. SetRowHeight).
SetPeriodTextOrientation
Définit l'orientation du texte des périodes : horizontal (défaut) ou vertical.
procedure SetPeriodTextOrientation(var Config: JsonObject; Orientation: Enum "Calendar Period Orient UTCAP")
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Orientation | Enum CapVision.Core.Controls."Calendar Period Orient UTCAP" |
|
Remarks
En mode Vertical, les libellés de périodes sont pivotés et lus de BAS EN HAUT, centrés dans la hauteur
de l'en-tête. À combiner avec un en-tête haut (SetPeriodHeaderHeight) et des colonnes fines pour
afficher des intitulés longs sur des colonnes étroites. N'affecte pas la structure de la grille.
SetCornerCellText
Définit le texte de la cellule du coin haut-gauche (au-dessus de la colonne des ressources).
procedure SetCornerCellText(var Config: JsonObject; CornerText: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| CornerText | Text |
Texte du coin haut-gauche. |
Remarks
Affiché en petites majuscules ; sert généralement d'intitulé de la colonne des ressources (ex. « Équipe »).
SetSubPeriodWidth
Définit la largeur d'une sous-colonne (créneau). L'étoile est un joker : sa position (avant/après le nombre) indique s'il s'agit d'une borne MIN ou MAX.
procedure SetSubPeriodWidth(var Config: JsonObject; Width: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject | |
| Width | Text |
Largeur au format |
Examples
Helper.SetSubPeriodWidth(Renderer, '*'); // s'adapte pile à la largeur disponible
Helper.SetSubPeriodWidth(Renderer, '*60'); // au moins 60 px par créneau, défile si nécessaire
Helper.SetSubPeriodWidth(Renderer, '120*'); // au plus 120 px, se resserre pour éviter tout défilement
Remarks
Formes acceptées et comportement (une valeur invalide lève une erreur) :
"200"(ou un nombre) → largeur FIXE de 200 px ; si le total dépasse la largeur visible, défilement horizontal."200*"→ 200 px MAX : les colonnes sont réduites pour tout faire tenir (jamais de défilement), sans jamais dépasser 200 px."*200"→ 200 px MIN : les colonnes sont agrandies pour remplir la largeur visible ; si 200 px ne tiennent pas toutes, défilement horizontal."*"→ remplit EXACTEMENT la largeur visible (ni plus, ni moins).- non appelé → largeur par défaut, fixe.
SetSubPeriodsMode
Choisit COMMENT les libellés de sous-périodes (SubPeriods) sont répartis sur la grille. Ne change PAS
la structure (le nombre de colonnes reste PeriodCount × SubPeriodCount) : seule la disposition des
libellés d'en-tête diffère. Les trois modes sont MUTUELLEMENT EXCLUSIFS (un seul à la fois).
procedure SetSubPeriodsMode(var Config: JsonObject; Mode: Enum "Calendar SubPeriods Mode UTCAP")
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Mode | Enum CapVision.Core.Controls."Calendar SubPeriods Mode UTCAP" |
|
Examples
// Axe espacé : 12 sous-colonnes, 4 libellés → chaque libellé suivi de 2 colonnes vides (⌈12÷4⌉−1), 2 vides finaux.
Renderer := Helper.CreateTeamPlanRenderer(2, Week, 12, Points); // Points = ['SP1','SP2','SP3','SP4']
Helper.SetSubPeriodsMode(Renderer, "Calendar SubPeriods Mode UTCAP"::Stretch);
Remarks
Default (défaut, non appelé) — SubPeriods décrit les créneaux d'UNE période, ALIGNÉS PAR INDEX
et SANS bouclage : les colonnes au-delà de la liste restent VIDES. Le motif se répète à l'identique sur chaque
période et les libellés consécutifs identiques sont fusionnés en un seul en-tête centré.
Ex. grille 5 jours × 6, SubPeriods = ['Matin','Matin','Midi','Midi','Soir','Soir'] → chaque jour affiche
trois titres centrés "Matin" | "Midi" | "Soir" (chacun sur 2 colonnes).
Repeat ("bouclé") — les libellés BOUCLENT (modulo) pour remplir TOUTES les colonnes d'UNE période :
la colonne c reçoit libellés[c mod nbLibellés]. Motif répété à l'identique sur chaque période.
Ex. SubPeriodCount = 6, SubPeriods = ['A','B'] → chaque période affiche "A B A B A B".
Stretch ("axe / graduation") — les libellés sont ESPACÉS dans la période : chaque libellé occupe une
colonne puis est SUIVI de N colonnes VIDES, avec N = ⌈SubPeriodCount ÷ nbLibellés⌉ − 1. La période
peut se terminer par des colonnes vides si SubPeriodCount n'est pas un multiple. Deux cas de figure
(mêmes 4 libellés) :
SubPeriodCount = 10→ "SP1", "", "", "SP2", "", "", "SP3", "", "", "SP4" (le dernier libellé tombe pile sur la dernière colonne, aucun vide final).SubPeriodCount = 12→ "SP1", "", "", "SP2", "", "", "SP3", "", "", "SP4", "", "" (2 colonnes vides finales).
Cas particulier — s'il y a TROP de libellés pour être espacés (ex. autant ou plus de libellés que de
sous-colonnes), l'axe devient CONTINU et les libellés BOUCLENT (libellés[c mod nbLibellés]) en traversant
les frontières de période. Ex. 24 heures sur 3 périodes × 8 sous-colonnes.
SetBreakSubPeriods
Marque certaines sous-périodes comme PAUSES (ex. déjeuner) : colonnes hachurées et non-droppables.
procedure SetBreakSubPeriods(var Config: JsonObject; BreakIndexes: List of [Integer])
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| BreakIndexes | List of [Integer] |
Index (0-based, au sein d'une période) des sous-périodes de pause. |
Remarks
Les index sont 0-based et s'entendent DANS une période (0 = 1ʳᵉ sous-période) ; la pause est répétée sur chaque période. Une colonne de pause est hachurée et REFUSE le dépôt d'une tâche par glisser-déposer (le placement programmatique par index, lui, reste possible).
SetOptimistic
Active le mode OPTIMISTE du contrôle : les actions sur les tâches (déplacement, redimensionnement) sont appliquées IMMÉDIATEMENT à l'écran, avant la confirmation de BC.
procedure SetOptimistic(var Config: JsonObject; Optimistic: Boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Optimistic | Boolean |
Vrai pour activer le mode optimiste. |
Remarks
Défaut : false — le contrôle n'applique RIEN en local ; la tâche reste dans son état
d'origine jusqu'à ce que BC republie la donnée réelle. En true, le contrôle applique tout
de suite le nouveau startIndex/endIndex (et la ressource) sur la tâche, sans rien
recalculer d'autre, puis attend le retour de BC — qui fait foi et écrase l'état optimiste.
Dans les DEUX cas, BC reste seul maître de la position finale et DOIT republier la tâche
(CreateTask) avec la position retenue (acceptée, corrigée, ou d'origine si refusée).
ShowTaskSpinnerOnTreatment
Affiche un indicateur de chargement (spinner) sur une tâche pendant qu'une action initiée par le contrôle (déplacement, redimensionnement, suppression) est en cours de traitement par BC.
procedure ShowTaskSpinnerOnTreatment(var Config: JsonObject; ShowLoading: Boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| ShowLoading | Boolean |
Vrai pour afficher l'indicateur de traitement sur la tâche. |
Remarks
Défaut : false. En true, dès qu'une action est déclenchée sur une tâche, un spinner
s'affiche sur cette tâche jusqu'à ce que BC la republie (CreateTask(s)) ou la supprime
(DeleteTask(s)). Filet de sécurité : l'indicateur disparaît après un court délai si BC ne
répond pas — BC DOIT donc répondre par une republication / suppression de la tâche concernée.
AllowMultiSelection
Autorise la MULTI-SÉLECTION de tâches (Ctrl/Cmd+clic) dans le contrôle.
procedure AllowMultiSelection(var Config: JsonObject; Allow: Boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| Config | JsonObject |
Configuration issue de |
| Allow | Boolean |
Vrai pour autoriser la multi-sélection. |
Remarks
Défaut : false — un clic (simple ou Ctrl/Cmd+clic) sélectionne UNE seule tâche à la fois.
En true, Ctrl/Cmd+clic ajoute/retire une tâche de la sélection courante ; une action de
menu contextuel (OnTaskContextMenuClicked) est alors rejouée pour CHAQUE tâche sélectionnée,
une par une (le contrôle appelle le déclencheur une fois par tâche — aucun changement de contrat).
CreateResource
Créé une ressource (une ligne du planning). Enrichissez-la ensuite avec les procédures
SetResource... (description, image, couleurs, repli), puis publiez-la via CreateResource(s).
procedure CreateResource(Id: Text; Name: Text): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Id | Text |
Identifiant unique de la ressource (obligatoire). |
| Name | Text |
Nom affiché de la ressource. |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Republier une ressource avec un Id DÉJÀ PRÉSENT la met à jour : les champs fournis sont
remplacés, les champs optionnels non fournis restent inchangés. Le nom s'affiche sur 2 lignes au maximum
(tronqué avec « … » au-delà).
SetResourceDescription
Définit la description (métier / rôle) affichée sous le nom de la ressource.
procedure SetResourceDescription(var Resource: JsonObject; Description: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| Description | Text |
Description à afficher sous le nom. |
Remarks
Affichée en plus petit, sur une seule ligne (tronquée avec « … » si trop longue).
SetResourceImageColor
Définit la couleur de l'anneau entourant la photo de profil (vide = aucun anneau).
procedure SetResourceImageColor(var Resource: JsonObject; ImageColor: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| ImageColor | Text |
Couleur de l'anneau (CSS). |
Remarks
N'a d'effet visible que si une photo est fournie (cf. SetResourceImage) : sans photo, aucun cadre
n'est affiché. Couleur CSS (ex. "#21888c", "rgb(...)"). À défaut de nameColor, cette couleur sert
aussi de couleur de repli pour le nom.
SetResourceNameColor
Définit la couleur du nom de la ressource (couleur CSS).
procedure SetResourceNameColor(var Resource: JsonObject; NameColor: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| NameColor | Text |
Couleur du nom (CSS). |
Remarks
À défaut, le nom reprend la couleur de l'anneau (imageColor) si définie, sinon la couleur primaire du thème.
SetResourceCollapsed
Force l'état replié/déplié de la ligne de la ressource.
procedure SetResourceCollapsed(var Resource: JsonObject; Collapsed: Boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| Collapsed | Boolean |
Vrai pour replier la ligne. |
Remarks
Le repli n'a d'effet que si la ressource a plus de sous-lignes que le maximum configuré
(cf. SetCollapsedHeaderMaxVisibleRows). L'utilisateur peut ensuite basculer l'état via le bouton de repli.
SetResourceImage
Définit la photo de profil de la ressource (encodée en Base64 depuis le flux fourni). Un flux vide laisse la ressource SANS photo.
procedure SetResourceImage(var Resource: JsonObject; ImageStream: InStream)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| ImageStream | InStream |
Flux de l'image (PNG). |
Remarks
La photo est affichée détourée dans un cadre rond, avec l'anneau imageColor éventuel. Sans photo,
AUCUN cadre n'est affiché : seuls le nom et la description occupent la cellule. Format attendu : PNG.
SetResourceDefaultImage
Définit une image de profil PAR DÉFAUT (repli générique) pour une ressource sans vraie photo. L'image s'affiche normalement, mais en mode mobile — quand la colonne des ressources se réduit — le contrôle lui substitue un avatar « monogramme » (initiales + couleur dérivée). Un flux vide laisse la ressource sans image.
procedure SetResourceDefaultImage(var Resource: JsonObject; ImageStream: InStream)
Parameters
| Name | Type | Description |
|---|---|---|
| Resource | JsonObject |
Ressource issue de |
| ImageStream | InStream |
Flux de l'image de repli (PNG). |
Remarks
À utiliser pour un avatar anonyme commun quand la ressource n'a pas de photo personnelle. Publier ensuite une
vraie photo (SetResourceImage) lève automatiquement le caractère « par défaut ». Format attendu : PNG.
CreateTask
Créé une tâche (carte d'activité) positionnée par INDEX DE COLONNE (jamais par date/heure). Enrichissez-la
ensuite (SetTask..., SetTaskStyle, MakeEditable) puis publiez-la via CreateTask(s).
procedure CreateTask(Id: Text; ResourceId: Text; StartIndex: Integer; EndIndex: Integer): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Id | Text |
Identifiant unique de la tâche (obligatoire). |
| ResourceId | Text |
Identifiant de la ressource (ligne) à laquelle la tâche est assignée. |
| StartIndex | Integer |
Index de colonne de début (0-based). |
| EndIndex | Integer |
Index de colonne de fin (0-based, inclusif). |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
La tâche occupe une bande CONTIGUË de colonnes de StartIndex à EndIndex
(inclus) sur la ligne de la ressource ResourceId. Conversion : `index = période × SubPeriodCount
- sousPériode
. Les tâches qui se chevauchent sur une même ressource s'empilent automatiquement sur des sous-lignes (cf.SetCollapsedHeaderMaxVisibleRows). Republier une tâche avec unId` existant la met à jour (repositionnement inclus).
SetTaskText
Définit le texte principal de la carte (1ʳᵉ ligne, en gras).
procedure SetTaskText(var Task: JsonObject; PrimaryText: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| PrimaryText | Text |
Texte principal. |
Remarks
Tronqué avec « … » s'il dépasse la largeur de la carte. Sur une carte très étroite portant une pastille de quantité, les textes sont masqués au profit de la seule pastille.
SetTaskSecondaryText
Définit le texte secondaire de la carte (2ᵉ ligne, plus petit).
procedure SetTaskSecondaryText(var Task: JsonObject; SecondaryText: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| SecondaryText | Text |
Texte secondaire. |
Remarks
Tronqué avec « … » si trop long ; mêmes règles d'affichage que le texte principal.
SetTaskTertiaryText
Définit le texte tertiaire de la carte (3ᵉ ligne, plus petit, en italique).
procedure SetTaskTertiaryText(var Task: JsonObject; TertiaryText: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| TertiaryText | Text |
Texte tertiaire. |
Remarks
Tronqué avec « … » si trop long.
SetTaskQuantity
Définit la quantité de la tâche, affichée dans une pastille ronde à droite de la carte.
procedure SetTaskQuantity(var Task: JsonObject; Quantity: Decimal)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| Quantity | Decimal |
Quantité. |
Remarks
La pastille n'apparaît QUE si cette procédure est appelée (présence du champ) — ne pas l'appeler = aucune pastille. Elle reprend la COULEUR DU TEXTE de la carte (donc visible quel que soit le fond). Valeur affichée avec 2 décimales maximum (les décimales inutiles sont retirées).
SetTaskQuantity
Surcharge TEXTE de SetTaskQuantity : la quantité est déjà formatée côté AL et affichée telle quelle
dans la pastille (aucun arrondi, aucune conversion numérique).
procedure SetTaskQuantity(var Task: JsonObject; Quantity: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| Quantity | Text |
Quantité, libellé libre affiché tel quel. |
Remarks
À utiliser pour une quantité non numérique ou pré-formatée (ex. « 1/2 », « 2 h », « n/a ») ; pour une valeur
numérique, préférer la surcharge Decimal (formatage homogène par le contrôle). La pastille étant un
petit cercle, garder un libellé TRÈS COURT (2-3 caractères) : un texte long débordera du cercle. Une chaîne
vide reste une quantité PRÉSENTE (pastille vide affichée) — ne pas appeler la procédure pour ne rien afficher.
SetTaskStyle
Définit les couleurs de la tâche : BackgroundColor (fond de la carte) et
BorderLeft (bandeau vertical accentué le long du bord gauche). Une couleur vide est ignorée.
procedure SetTaskStyle(var Task: JsonObject; BackgroundColor: Text; BorderLeft: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| BackgroundColor | Text |
Couleur de fond de la carte (CSS). |
| BorderLeft | Text |
Couleur du bandeau vertical gauche (CSS). |
Remarks
Couleurs CSS ("#rrggbb", "rgb(...)"). La couleur du texte est calculée automatiquement pour rester lisible (noir ou blanc selon le contraste) ; pour l'imposer, utiliser la surcharge à trois couleurs ci-dessous. Le bandeau gauche est indépendant du fond.
SetTaskStyle
Surcharge de SetTaskStyle permettant d'IMPOSER la couleur du texte de la carte
(ForegroundColor) en plus du fond et du bandeau gauche. Une couleur vide est ignorée.
procedure SetTaskStyle(var Task: JsonObject; BackgroundColor: Text; ForegroundColor: Text; BorderLeft: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| BackgroundColor | Text |
Couleur de fond de la carte (CSS). |
| ForegroundColor | Text |
Couleur du texte de la carte (CSS). |
| BorderLeft | Text |
Couleur du bandeau vertical gauche (CSS). |
Remarks
Couleurs CSS ("#rrggbb", "rgb(...)"). Sans ForegroundColor, la couleur du texte est
calculée automatiquement d'après le fond (noir ou blanc selon le contraste) ; la fournir DÉSACTIVE ce
calcul et la couleur est conservée telle quelle, y compris si le fond change ensuite — c'est donc à l'AL
d'assurer la lisibilité. La pastille de quantité et la case de sélection reprennent cette couleur.
MakeEditable
Autorise le déplacement et le redimensionnement de la tâche par l'utilisateur (glisser-déposer).
procedure MakeEditable(var Task: JsonObject; Editable: Boolean)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| Editable | Boolean |
Vrai pour rendre la tâche éditable. |
Remarks
Le geste est appliqué IMMÉDIATEMENT à l'écran, puis l'événement OnTaskMoved est déclenché. Pour REFUSER
un déplacement, l'AL doit re-publier la tâche à son ancienne position (CreateTask) — sans quoi la carte
reste à sa nouvelle position. Une tâche non éditable ne peut être ni déplacée ni redimensionnée.
SetTaskDateTimeInfo
Attache des dates/heures purement INFORMATIVES à une tâche.
procedure SetTaskDateTimeInfo(var Task: JsonObject; StartingDateTime: DateTime; EndingDateTime: DateTime)
Parameters
| Name | Type | Description |
|---|---|---|
| Task | JsonObject |
Tâche issue de |
| StartingDateTime | DateTime |
Date/heure de début informative. |
| EndingDateTime | DateTime |
Date/heure de fin informative. |
Remarks
Ces dates ne sont JAMAIS utilisées pour le placement (qui se fait exclusivement par index de colonne) : elles sont transmises et conservées, à des fins d'affichage/tooltip ou de logique métier côté AL uniquement.
CreateMarker
Créé un marqueur posé sur les cellules d'une ressource, sur la plage de colonnes indiquée. Enrichissez-le
ensuite avec SetMarkerTitle, SetMarkerColors et, au besoin, SetMarkerAnchorType.
procedure CreateMarker(Id: Text; ResourceId: Text; StartIndex: Integer; EndIndex: Integer; Shape: Enum "Calendar Marker Shape UTCAP"): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Id | Text |
Identifiant unique du marqueur. |
| ResourceId | Text |
Ressource (ligne) sur laquelle poser le marqueur. |
| StartIndex | Integer |
Index de colonne de début (0-based). |
| EndIndex | Integer |
Index de colonne de fin (0-based, inclusif). |
| Shape | Enum CapVision.Core.Controls."Calendar Marker Shape UTCAP" |
Forme du marqueur : |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Deux formes (Shape) :
Line: une bande hachurée CONTIGUË couvrant toute la plage (peut traverser plusieurs périodes).Triangle: un petit triangle d'alerte RÉPÉTÉ sur chaque cellule de la plage (repère ponctuel, pas étiré). Ancré sur cellule par défaut (seulCellest rendu actuellement). Le marqueur se superpose aux tâches sans les bloquer. À noter :DeleteMarkerssupprime TOUS les marqueurs (il n'y a pas de suppression unitaire).
SetMarkerAnchorType
Définit le type d'ancrage du marqueur.
procedure SetMarkerAnchorType(var Marker: JsonObject; AnchorType: Enum "Calendar Anchor Type UTCAP")
Parameters
| Name | Type | Description |
|---|---|---|
| Marker | JsonObject |
Marqueur issu de |
| AnchorType | Enum CapVision.Core.Controls."Calendar Anchor Type UTCAP" |
Type d'ancrage. |
Remarks
Seul Cell est rendu actuellement ; Header/Period sont réservés (sans effet visible).
SetMarkerTitle
Définit le texte affiché en info-bulle au survol du marqueur.
procedure SetMarkerTitle(var Marker: JsonObject; Title: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Marker | JsonObject |
Marqueur issu de |
| Title | Text |
Texte affiché au survol. |
SetMarkerColors
Définit les couleurs du marqueur. Une couleur vide est ignorée.
procedure SetMarkerColors(var Marker: JsonObject; Color1: Text; Color2: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Marker | JsonObject |
Marqueur issu de |
| Color1 | Text |
Couleur principale (CSS). |
| Color2 | Text |
Couleur secondaire (CSS ; hachuré alterné pour une ligne). |
Remarks
Forme Line : hachuré alterné Color1/Color2 ; si une seule couleur
est fournie, la bande est unie. Forme Triangle : seule Color1 est utilisée.
CreateClosedPeriod
Créé une période fermée (férié, absence) applicable à TOUTES les ressources, rendue en bande hachurée/grisée.
Enrichissez-la avec SetClosedPeriodDescription / SetClosedPeriodColors.
procedure CreateClosedPeriod(Id: Text; StartIndex: Integer; EndIndex: Integer): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Id | Text |
Identifiant unique de la période fermée. |
| StartIndex | Integer |
Index de colonne de début (0-based, inclusif). |
| EndIndex | Integer |
Index de colonne de fin (0-based, inclusif). |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Calque purement VISUEL : il n'empêche PAS le placement d'activités (les tâches restent affichées et
déplaçables par-dessus). Couvre les colonnes StartIndex..EndIndex
(inclus) sur toute la hauteur du planning. Pour couvrir une période entière, indiquer la plage de colonnes
correspondante (ex. SubPeriodCount = 2 → période n° 2 = colonnes 4 à 5).
CreateClosedPeriod
Créé une période fermée limitée à UNE SEULE ressource (même rendu que la surcharge « toutes ressources »,
mais restreint à la ligne de ResourceId).
procedure CreateClosedPeriod(Id: Text; StartIndex: Integer; EndIndex: Integer; ResourceId: Text): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Id | Text |
Identifiant unique de la période fermée. |
| StartIndex | Integer |
Index de colonne de début (0-based, inclusif). |
| EndIndex | Integer |
Index de colonne de fin (0-based, inclusif). |
| ResourceId | Text |
Ressource concernée. |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Calque hachuré non bloquant, cf. la surcharge à trois paramètres.
SetClosedPeriodDescription
Définit le texte affiché en info-bulle au survol de la période fermée.
procedure SetClosedPeriodDescription(var ClosedPeriod: JsonObject; Description: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| ClosedPeriod | JsonObject |
Période fermée issue de |
| Description | Text |
Texte / tooltip. |
SetClosedPeriodColors
Définit les deux couleurs du hachuré de la période fermée. Une couleur vide est ignorée.
procedure SetClosedPeriodColors(var ClosedPeriod: JsonObject; Color1: Text; Color2: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| ClosedPeriod | JsonObject |
Période fermée issue de |
| Color1 | Text |
Couleur principale du hachuré (CSS). |
| Color2 | Text |
Couleur secondaire du hachuré (CSS). |
CreateTaskTooltip
Créé une info-bulle HTML riche affichée au survol d'une tâche ; la mise en page est entièrement décidée
côté AL. Ajoutez au besoin une classe CSS via SetTaskTooltipCssClass.
procedure CreateTaskTooltip(TaskId: Text; ContentHtml: Text): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| TaskId | Text |
Identifiant de la tâche à laquelle lier l'info-bulle. |
| ContentHtml | Text |
Contenu HTML libre (source de confiance). |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Le HTML est injecté TEL QUEL (les styles inline sont conservés : tableaux, pastilles de couleur, etc.) — la source est considérée de confiance. N'y concaténez JAMAIS d'entrée utilisateur non échappée. L'info-bulle apparaît après un court délai au survol et suit le curseur, en restant confinée à la zone du planning.
SetTaskTooltipCssClass
Ajoute une classe CSS additionnelle à l'info-bulle.
procedure SetTaskTooltipCssClass(var TaskTooltip: JsonObject; CssClass: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| TaskTooltip | JsonObject |
Info-bulle issue de |
| CssClass | Text |
Classe CSS additionnelle. |
CreateMenuItem
Créé une entrée de menu contextuel.
procedure CreateMenuItem(Identifier: Text; Caption: Text): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Identifier | Text |
Identifiant de l'élément. |
| Caption | Text |
Texte à afficher à l'utilisateur (un tiret « - » affiche un séparateur). |
Returns
| Type | Description |
|---|---|
| JsonObject |
CreateMenuItem
Créé une entrée de menu contextuel avec icône.
procedure CreateMenuItem(Identifier: Text; Caption: Text; Image: Text): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Identifier | Text |
Identifiant de l'élément. |
| Caption | Text |
Texte à afficher à l'utilisateur. |
| Image | Text |
Nom de l'icône Office UI Fabric à afficher. |
Returns
| Type | Description |
|---|---|
| JsonObject |
CreateMenuItem
Créé une entrée de menu contextuel complète (icône, raccourci, style dangereux).
procedure CreateMenuItem(Identifier: Text; Caption: Text; Image: Text; Shortcut: Text; Dangerous: Boolean): JsonObject
Parameters
| Name | Type | Description |
|---|---|---|
| Identifier | Text |
Identifiant de l'élément (renvoyé au clic). |
| Caption | Text |
Texte à afficher à l'utilisateur (« - » = séparateur). |
| Image | Text |
Nom de l'icône Office UI Fabric à afficher. |
| Shortcut | Text |
Raccourci affiché (informatif). |
| Dangerous | Boolean |
Applique le style « action dangereuse » (rouge). |
Returns
| Type | Description |
|---|---|
| JsonObject |
Remarks
Ajoutez les entrées à un JsonArray passé à OpenTaskContextMenu / OpenCalendarContextMenu
(en réponse aux événements On*ContextMenuRequested). Un Caption égal à « - » affiche
un séparateur. Pour un sous-menu, ajoutez manuellement une propriété subActions (tableau d'entrées) à
l'objet retourné. L'Identifier est renvoyé tel quel par On*ContextMenuClicked.
Le Caption accepte un Markdown minimal : **gras**, *italique*,
__souligné__ (converti en strong / em / u) — utilisable aussi dans les sous-menus.