Passa al contenuto principale

DEFGANTT

DesktopWebMobile

Consente di definire un diagramma di Gantt.

La fonte dati del controllo è una collezione di tipo BC_VID_GANTT.
Al suo interno, per ogni elemento, sono presenti le collezioni:

L'aggiunta e l'eliminazione di un elemento all'interno della classe BC_VID_GANTT si rifletterà automaticamente sull'oggetto grafico, contrariamente alla modifica di una proprietà specifica. Data la complessità dell'oggetto la modifica della proprietà è stata delegata al metodo specifico UPDATETASKS.

suggerimento

Nel caso in cui si debbano eseguire modifiche massive è possibile sospende l'aggiornamento del controllo video tramite la specifica '@SUSPENDEDVIDREFRESH.

note

A partire dalla versione 28.5 è possibile associare il controllo grafico ad una griglia da collezione, creando così un controllo grafico composito.

Parametri

ParametroDefinizioneI/OInformazioniVersione traduttoreSMP
NOMEInteroINObbligatorioDesktopWebMobile
RETINObbligatorioDesktopWebMobile
POSINDesktop
DIMINDesktopWebMobile
IDStringaINDesktopWebMobile
MARCATOREDATADataINDesktopWebMobile
COLLEZIONEDATICollezione di classiDesktop
AZIONEAzioneINDesktop
PREMODIFICAAzioneINDesktop
POSTMODIFICAAzioneINDesktop
PREMODIFICAGRIGLIAAzioneIN28.1Desktop
POSTMODIFICAGRIGLIAAzioneIN28.1Desktop
COLLEZIONECOLONNECollezione di classi28.1Desktop
GRIDINDesktop
STACKINDesktop
EXPANDERINDesktop
DOCKINDesktop
PERSONALIZZABILEInteroINBinarioDesktop
LINKTOINDesktop

NOME

InteroINInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktopWebMobile

Consente di definire il nome del controllo.

RET

INInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktopWebMobile

Consente di definire le coordinate della cella del reticolo da associare al controllo, allo scopo di gestire gli spostamenti sulla videata.

POS

INInputValore non necessarioValore non necessarioDesktop

Consente di definire la posizione del controllo rispetto al contenitore.

DIM

INInputValore non necessarioValore non necessarioDesktopWebMobile

Dimensione del controllo.

Consente di indicare l'altezza e la larghezza. Per entrambi è possibile specificare l'unità di misura.

DIM[Altezza [UnitàMisura], Larghezza [UnitàMisura]]

note

L'unità di misura può essere: 'C' per il posizionamento a caratteri e 'P' per il posizionamento in pixel. L'indicazione è opzionale, se omesso si assume 'C' come default.

ID

StringaINInputValore non necessarioValore non necessarioDesktopWebMobile

Consente di definire l'identificativo univoco del controllo.

note

Viene utilizzato dall'ambiente per gestire le personalizzazioni effettuate durante l'esecuzione del programma.

MARCATOREDATA

DataINInputValore non necessarioValore non necessarioDesktopWebMobile

Consente di indicare una data specifica da evidenziare con una riga colorata lungo tutta l'altezza del diagramma di Gantt.

COLLEZIONEDATI

Collezione di classiValore non necessarioValore non necessarioDesktop

Consente di definire i tasks da rappresentare.

AZIONE

AzioneINInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire la callback richiamata quando viene eseguito un doppio click su un task.

PREMODIFICA

AzioneINInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire la callback richiamata prima del salvataggio del dato modificato manualmente sulla collezione.

POSTMODIFICA

AzioneINInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire la callback richiamata dopo il salvataggio del dato modificato manualmente sulla collezione.

PREMODIFICAGRIGLIA

28.1AzioneINInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire la callback richiamata prima di riportare sulla collezione le modifiche apportate alla griglia del Gantt.

POSTMODIFICAGRIGLIA

28.1AzioneINInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire la callback richiamata dopo aver riportato sulla collezione le modifiche apportate alla griglia del Gantt.

COLLEZIONECOLONNE

28.1Collezione di classiValore non necessarioValore non necessarioDesktop

Consente di definire le colonne visualizzate all'interno della griglia.

GRID

INInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire l'attached property riferita ad un pannello grid.

STACK

INInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire l'attached property riferita ad un pannello stack.

EXPANDER

INInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire l'attached property riferita ad un pannello expander.

DOCK

INInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di indicare se il controllo deve occupare tutto lo spazio del DockPanel in verticale e/o in orizzontale.

PERSONALIZZABILE

InteroINInputBinarioBinarioValore non necessarioValore non necessarioDesktop

Consente di definire se il controllo grafico è personalizzabile dall'utente in fase di runtime.

Parametro con valori ammessi, si possono utilizzare i seguenti valori:

ValoreDescrizione
0No
1Si

LINKTO

INInputValore non necessarioValore non necessarioDesktop
SottoParametri

Consente di definire un legame tra due controlli esistenti all'interno della stessa videata.

Metodi

MetodoDescrizioneSMP
Get_ChangedTaskRestituisce l'elemento riferito alla riga della griglia che è stato modificatoDesktop
Get_ChangingTaskRestituisce l'elemento riferito alla riga della griglia che si sta per modificareDesktop
Get_DateRestituisce la data su cui è stato posizionato il GanttDesktop
Get_ElementoRestituisce la classe riferita al task selezionataDesktop
Get_Zoom_LevelRestituisce il livello dello zoomDesktop
Set_DateSposta il Gantt alla data indicataDesktop
Set_EditableDefinisce qualecomponente del controllo grafico è editabile o menoDesktop
Set_ZoomAggiorna un set di tasksDesktop
Set_Zoom_LevelImposta il livello dello zoomDesktop
UpdateTasksAggiorna un set di tasksDesktop

Esempi

Gantt di base

 '@DEFVID DIM[35,140] NOME[Videata] ID["IDVIDEATA"] TIT["Titolo Videata"]

'@DEFGRIDPANEL NOME[GridPanel] ID["IDGridPanel"] _
RIGA[ALTEZZA[0.5] LAYOUT[#FISSO]] _
RIGA[ALTEZZA[34] LAYOUT[#FISSO]] _
RIGA[ALTEZZA[0.5] LAYOUT[#FISSO]] _
COLONNA[LUNGHEZZA[0.5] LAYOUT[#FISSO]] _
COLONNA[LUNGHEZZA[139] LAYOUT[#DINAMICO]] _
COLONNA[LUNGHEZZA[0.5] LAYOUT[#FISSO]]

'@DEFGANTT NOME[GANTT] ID["IDGANTT"] POS[1,1] DIM[1,1] RET[1,1] _
COLLEZIONEDATI[CollezioneTask] _
MARCATOREDATA[MarcatoreTemporale] _
GRID[COL[1] RIGA[1] COLDIN[1] RIGADIN[1]]

'@ENDGRIDPANEL NOME[GridPanel]

'@RUNVID

...
'@SRP Load()

GoSub InitGantt
DefinizioneGantt()

Return

...
'@SR InitGantt

' Pulizia variabili
CollezioneTask.Clear()

' Definizione stili
'@DEFSTYLE STILE["base"] COLORESFONDO[AZZURRO]
'@DEFSTYLE STILE["completo"] COLORESFONDO[BLU]

'@DEFSTYLE STILE["rosso"] COLORESFONDO[ROSSO]
'@DEFSTYLE STILE["giallo"] COLORESFONDO[GIALLO]
'@DEFSTYLE STILE["blu"] COLORESFONDO[BLU]
'@DEFSTYLE STILE["bordeaux"] COLORESFONDO[BORDEAUX]
'@DEFSTYLE STILE["viola"] COLORESFONDO[VIOLA]
'@DEFSTYLE STILE["grigio"] COLORESFONDO[GRIGIOCHIARO]
'@DEFSTYLE STILE["fucsia"] COLORESFONDO[FUCSIA]
'@DEFSTYLE STILE["verdelimone"] COLORESFONDO[VERDELIMONE]

' Definizione data di partenza
Oggi = BCSystemInfo.GetDate()

' Definizione date di esempio
OggiMenoQuattro = FNDAYDATEADD(Oggi,-4)
OggiMenoDue = FNDAYDATEADD(Oggi,-2)
OggiPiuUno = FNDAYDATEADD(Oggi,1)
OggiPiuDue = FNDAYDATEADD(Oggi,2)
OggiPiuTre = FNDAYDATEADD(Oggi,3)
OggiPiuQuattro = FNDAYDATEADD(Oggi,4)
OggiPiuCinque = FNDAYDATEADD(Oggi,5)
OggiPiuSei = FNDAYDATEADD(Oggi,6)
OggiPiu24 = FNDAYDATEADD(Oggi,24)

Return

...
'@SRP DefinizioneGantt()

'Progetto
Task.Clear()
Task.Id = "Progetto1"
Task.IdPadre = ""
Task.Task = "Progetto #1"
Task.DataInizio = Oggi
Task.DataFine = OggiPiuUno
Task.OraInizio = 800
Task.OraFine = 1730
Task.Completamento = 32
Task.Durata = 1
Task.Tipologia = BCTD_GANTT_TYPE.Project

'Collegamenti progetto
Task.AggiungiCollegamento("Task1_1", BCTD_GANTT_LINK_POSITION.DaInizioAInizio)
Task.AggiungiCollegamento("Task1_2", BCTD_GANTT_LINK_POSITION.DaFineAInizio)
Task.AggiungiRisorsa(1,"Andrea")
Task.AggiungiMarker("Marker1", BCTD_GANTT_MARKER.PARTIAL, OggiPiuDue, 1830)
Task.AggiungiMarker("Marker2", BCTD_GANTT_MARKER.TERMINATE, OggiPiuQuattro, 830)

CollezioneTask.AggiungiTask(Task [INOUT])

'Milestone
CollezioneTask.AggiungiMilestone("Milestone1","Progetto3","milestone #1",OggiPiuQuattro,830,"","",0)

'Task 1 progetto 1
Task.Clear()
Task.Id = "Task1_1"
Task.IdPadre = "Progetto1"
Task.Task = "Task #1_1"
Task.DataInizio = OggiMenoQuattro
Task.DataFine = OggiPiuDue
Task.OraInizio = 800
Task.OraFine = 1730
Task.Completamento = 80
Task.Tipologia = BCTD_GANTT_TYPE.Task
Task.Colore = "base"
Task.ColoreCompletamento = "completo"
Task.Durata = 6
Task.AggiungiRisorsa(8,"Giulia")
Task.AggiungiMarker("Marker1",BCTD_GANTT_MARKER.PARTIAL,Oggi,1830)
Task.AggiungiMarker("Marker2",BCTD_GANTT_MARKER.PARTIAL,OggiMenoDue,1830)
Task.AggiungiMarker("m3",BCTD_GANTT_MARKER.PARTIAL,OggiPiuUno,1830)
Task.AggiungiMarker("m4",BCTD_GANTT_MARKER.TERMINATE,OggiPiuTre,830)
CollezioneTask.AggiungiTask(Task [INOUT])
MarcatoreTemporale = OggiPiuDue ' Data evidenziata con una riga lunga tutta l'altelzza del diagramma

'Task 2 progetto 1
Task.Clear()
Task.Id = "Task1_2"
Task.IdPadre = "Progetto1"
Task.Task = "Task #1_2"
Task.DataInizio = OggiMenoQuattro
Task.DataFine = OggiPiuDue
Task.OraInizio = 800
Task.OraFine = 1730
Task.Completamento = 80
Task.Tipologia = BCTD_GANTT_TYPE.Task
Task.Colore = "base"
Task.ColoreCompletamento = "completo"
Task.Durata = 8
Task.AggiungiRisorsa(8,"Piero")
Task.AggiungiMarker("Marker1",BCTD_GANTT_MARKER.PARTIAL,Oggi,1830)
Task.AggiungiMarker("Marker2",BCTD_GANTT_MARKER.PARTIAL,OggiMenoDue,1830)
Task.AggiungiMarker("m3",BCTD_GANTT_MARKER.PARTIAL,OggiPiuUno,1830)
Task.AggiungiMarker("m4",BCTD_GANTT_MARKER.TERMINATE,OggiPiuTre,830)
CollezioneTask.AggiungiTask(Task [INOUT])
MarcatoreTemporale = OggiPiuTre ' Data evidenziata con una riga lunga tutta l'altelzza del diagramma

Return
 '@DEFVID DIM[30,130] NOME[VideataGanttLink] ID["IDVIDEATA"] TIT["Titolo Videata"]

' Inserimento dello splitter per separare la griglia da collezione dal Gantt
'@DEFGRIDPANEL NOME[GridPanelGanttLink] TIT["Gantt"] ID["GridGantt"]_
LAYOUTTIT[STILE[#INTESTAZIONE_VIDEATA] ]_
COLONNA[LUNGHEZZA[69.5] LAYOUT[#DINAMICO]] _
COLONNA[LUNGHEZZA[60] LAYOUT[#DINAMICO]] _
RIGA[ALTEZZA[28] LAYOUT[#DINAMICO]] _
SPLITTER[COLONNA[1]]

' Associazione tra griglia da collezione e Gantt
' LINKTO["IDGANTT"] permette di associare la griglia da collezione al Gantt
'@DEFCOLLECTIONGRID NOME[GrigliaGantt] ID["GrigliaGantt"] RET[1,1] POS[1,1] DIM[1,1] _
COLLEZIONEDATI[CollezioneDati] OGGETTOCORRENTE[CurrTask] COLLEZIONECOLONNE[Colonne] _
VALIDAZIONEDATI[GES[CurrTask.Valida(VideataGanttLink.GetProprietaCorrente())] _
DERIVAZIONEDATI[CurrTask.Deriva_dati(VideataGanttLink.GetProprietaCorrente())]] _
INRIGA[IngressoRiga()] _
OUTRIGA[OutRiga()]_
LINKTO[ID["IDGANTT"]] _
GRID[COL[1] RIGA[1] COLDIN[1] RIGADIN[1]]

' Il parametro COLLEZIONEDATI non è presente, perchè sostituito dal parametro LINKTO della Griglia
'@DEFGANTT NOME[VidGantt] ID["IDGANTT"] POS[1,1] DIM[1,1] RET[1,1] _
GRID[COL[2] RIGA[1] COLDIN[1] RIGADIN[1]] _
AZIONE[DefinisciRisorse()] _
POSTMODIFICA[PostModifica()] _
MARCATOREDATA[MarcatoreTemporale]

'@ENDGRIDPANEL NOME[GridPanelGanttLink]

'@RUNVID

...
'@SRP Load1()

DefinizioneColonne()

Return

...
'@SRP DefinizioneColonne()

' Definizione colonna su cui impostare l'alberatura
Colonna.Clear()
Colonna.Init("Task",20,1,0,0,0)
Colonna.AbilitaCellaAlberata=#TRUE
Colonne.AggiungiColonna(Colonna [INOUT])

' Definizione altre colonne
Colonna.Clear() :Colonna.Init("DataInizio",15,2,0,0,0) :Colonna.Titolo="Data Inizio" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("OraInizio",10,3,0,0,0) :Colonna.Titolo="Ora Inizio" :Colonna.Formato="Ora" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("DataFine",15,4,0,0,0) :Colonna.Titolo="Data Fine" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("OraFine",10,5,0,0,0) :Colonna.Titolo="Ora Fine" :Colonna.Formato="Ora" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("Completamento",10,6,0,0,0) :Colonna.Titolo="Completamento (%)" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("Durata",10,7,0,0,1) :Colonna.Titolo="Durata (giorni)" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("DataVariazione",10,8,0,0,1) :Colonna.Titolo="Data variazione" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("OperVariazione",10,9,0,0,1) :Colonna.Titolo="Oper. variazione" :Colonne.AggiungiColonna(Colonna [INOUT])
Colonna.Clear() :Colonna.Init("Nota",15,10,0,0,0) :Colonna.Titolo="Annotazione" :Colonne.AggiungiColonna(Colonna [INOUT])

Return

...
'@SRP IngressoRiga()
Return

...
'@SRP OutRiga()
Return

...
'@SRP DefinisciRisorse()
Return

...
'@SRP PostModifica()
Return