custom:api_js_opengwdynamictimelinetab

Apertura gwDynamicTimeLine

La gwDynamicTimeLine è una particolare tipologia di scheda descritta qui.

Per aprire questa tipologia di tab è esposta l'apposita function openGwDynamicTimeLineTab().

  • title String, optional, default Strina vuota
  • options Object, optional, default null. Contains all Additional parameters
  • tabIndex Integer, optional, default null

Parametri opzionali dentro options

  • tabWidgetId: String, optional, default null. Se fornito è l'id che verrà assegnato al tab (e con il quale si potrà in seguito fare riferimento). Se omesso ne verrà generato uno in automatico del tipo 'gwDynamicTimeLine_tab_1576518200437'
  • baseGwClass: Object, required. Object javascript contenente le informazioni della gwClass che detiene i campi temporali per la rappresentazione sulla timeline.
    Parametri:
    • gwClassName, String, required. Name della baseGwClass;
    • startAttrName, String, required. Name dell’attributo che contiene la data di inizio dell’evento della classe base;
    • endAttrName, String, optional. Name dell’attributo che contiene la data di fine dell’evento della classe base. Se omesso gli eventi si intendono puntuali e sono comunque visualizzati sulla timeline;
    • codAttrName: String, required. Name dell’attributo della baseGwClass che contiene il codice;
    • codToShowAttrName: String, opzionale. Name dell’attributo della baseGwClass che contiene il codice da mostrare. Se omesso al suo posto viene visualizzato il valore di codAttrName;
    • visualizationAttrName: String, optional. Name dell’attributo della baseGwClass che contiene la descrizione;
    • staticFilters: Object[], optional;
    • filters: Object[], optional;
  • groupGwClass: Object, optional. Object javascript contenente le informazioni della gwClass da usare come primo criterio di raggruppamento nelle ordinate.
    Parametri:
    • gwClassName: String, required. Name della baseGwClass;
    • referencingCodAttrName: String, required. Name dell’attributo della baseGwClass che referenzia la groupGwClass;
    • codAttrName: String, required. Name dell’attributo della groupGwClass referenziato dalla referencingCodAttrName;
    • codToShowAttrName: String, opzionale. Name dell’attributo della groupGwClass che contiene il codice da mostrare. Se omesso al suo posto viene visualizzato il valore di codAttrName;
    • visualizationAttrName: String, required. Name dell’attributo della groupGwClass che contiene le informazioni da mostrare;
    • staticFilters: Object[], optional, default [];
    • filters: Object[], optional, default [];
    • nestedGroupFilters: Object, optional, default null. Contiene i filtri statici che verranno applicati in automatico qualora questa gwClass si trovasse (fin dall’inizio, o tramite swap) in posizione di nestedGrupoGwClass. L’oggetto contiene una o due chiavi, con nomi uguali alla(e) altra(e) gwClass, che (fin dall’inizio, o tramite swap) potrebbe(ro) trovarsi ad essere in posizione di groupGwClass. I valori corrispondenti alle chiavi saranno la lista dei filtri che verranno applicati quando per ogni elemento group verrà fatta la query per ottenere gli elementi del nestedGroup. Nei filtri si potrà far riferimento ai valori correnti del record group padre tramite la notazione: #{map.cod_campo_group_gw_class}.
      Potranno essere inoltre impostati filtri di tipo CUSTOM, per poter inserire operatori di IN/NOT IN che operano su risultati di query SELECT innestate.
      Esempio:
      nestedGroupFilters: {
          res_resource: [],
          oma_activity_to_plan: [
              {
                  condition: 'AND',
                  columnName: 'cod_object',
                  filterType: 'CUSTOM', 
                  value: '(select oma_activity_to_plan.cod_object_program from oma_activity_to_plan where cod_object_program=#{map.cod_object_program})'
              }
          ]
      }
  • nestedGroupGwClass: Object, optional. Object javascript contenente le informazioni della gwClass da usare come secondo criterio di raggruppamento nelle ordinate. Valuto solo in presenza del parametro groupGwClass.
    Parametri:
    • gwClassName: String, required. Name della nestedGroupGwClass;
    • referencingCodAttrName: String, required. Name dell’attributo della baseGwClass che referenzia la nestedGroupGwClass;
    • codAttrName: String, required. Name dell’attributo della nestedGroupGwClass referenziato dalla referencingCodAttrName;
    • codToShowAttrName: String, opzionale. Name dell’attributo della nestedGroupGwClass che contiene il codice da mostrare. Se omesso al suo posto viene visualizzato il valore di codAttrName;
    • visualizationAttrName: String, required. Name dell’attributo della nestedGroupGwClass che contiene le informazioni da mostrare;
    • staticFilters: Object[], optional, default [];
    • filters: Object[], optional, default [];
    • nestedGroupFilters: Object, optional, default null. Contiene i filtri statici che verranno applicati in automatico qualora questa gwClass si trovasse (fin dall’inizio, o tramite swap) in posizione di nestedGrupoGwClass. L’oggetto contiene una o due chiavi, con nomi uguali alla(e) altra(e) gwClass, che (fin dall’inizio, o tramite swap) potrebbe(ro) trovarsi ad essere in posizione di groupGwClass. I valori corrispondenti alle chiavi saranno la lista dei filtri che verranno applicati quando per ogni elementi group verrà fatto la query per ottenere gli elementi del nestedGroup. Nei filtri si potrà far riferimento ai valori correnti del record group padre tramite la notazione: #{map.cod_campo_group_gw_class}.
      Potranno essere inoltre impostati filtri di tipo CUSTOM, per poter inserire operatori di IN/NOT IN che operano su risultati di query SELECT innestate.
      Esempio:
      nestedGroupFilters: {
          res_resource: [],
          oma_activity_to_plan: [
              {
                  condition: 'AND',
                  columnName: 'cod_object',
                  operator: 'IN',
                  filterType: 'CUSTOM', 
                  value: '(select oma_activity_to_plan.cod_object_program from oma_activity_to_plan where cod_object_program=#{map.cod_object_program})'
              }
          ]
      }
  • mainGwClass: Object, optional. Object javascript contenente le informazioni della gwClass da usare per essere visualizzata nel piano nella timeline, recuperando i parametri temporali dalla baseGwClass.
    Parametri:
    • gwClassName: String, required. Name della baseGwClass;
    • referencingCodAttrName: String, required. Name dell’attributo della baseGwClass che referenzia la mainGwClass;
    • codAttrName: String, required. Name dell’attributo della mainGwClass referenziato dalla referencingCodAttrName;
    • codToShowAttrName: String, opzionale. Name dell’attributo della mainGwClass che contiene il codice da mostrare. Se omesso al suo posto viene visualizzato il valore di codAttrName;
    • visualizationAttrName: String, required. Name dell’attributo della mainGwClass che contiene le informazioni da mostrare;
    • staticFilters: Object[], optional, default [];
    • filters: Object[], optional, default [];
    • nestedGroupFilters: Object, optional, default null. Contiene i filtri che statici che verranno applicati in automatico qualora questa gwClass si trovasse (fin dall’inizio, o tramite swap) in posizione di nestedGrupoGwClass. L’oggetto contiene una o due chiavi, con nomi uguali alla(e) altra(e) gwClass, che (fin dall’inizio, o tramite swap) potrebbe(ro) trovarsi ad essere in posizione di groupGwClass. I valori corrispondenti alle chiavi saranno la lista dei filtri che verranno applicati quando per ogni elementi group verrà fatto la query per ottenere gli elementi del nestedGroup. Nei filtri si potrà far riferimento ai valori correnti del record group padre tramite la notazione: #{map.cod_campo_group_gw_class}.
      Potranno essere inoltre impostati filtri di tipo CUSTOM, per poter inserire operatori di IN/NOT IN che operano su risultati di query SELECT innestate.
      Esempio:
      nestedGroupFilters: {
          res_resource: [],
          oma_activity_to_plan: [
              {
                  condition: 'AND',
                  columnName: 'cod_object',
                  operator: 'IN',
                  filterType: 'CUSTOM', 
                  value: '(select oma_activity_to_plan.cod_object_program from oma_activity_to_plan where cod_object_program=#{map.cod_object_program})'
              }
          ]
      }
  • showOnlyGroupsAlreadyInUse: Boolean, default true. Valutata solo se è configurata una nestedGroupGwClass (e quindi una groupGwClass). Se posta a true, vengono visualizzati solo gruppi e sottogruppi per cui esiste almeno un elemento della baseGwClass che fa riferimento a d essi. Se posta a false, vengono visualizzati tutti i gruppi e sottogruppi, al netto dei filtri statici e dinamici e degli ambiti. In genere, ma non necessariamente, si imposta a false quando si prevede di rendere editabile la timeline;
  • editable: Boolean o Object, default false. Quando il parametro è di tipo Object le sue sotto sezioni posso essere a loro volta Boolean o Object.
    L’oggetto foglia standard per il tipo Object è il seguente:
    {allowedCases: [{groupGwClassName: '', nestedGroupGwClassName: '', mainGwClassName: ''}, ..]}

    Alcune sotto sezioni hanno uno specifico formato (vedi sotto), ma il loro elemento foglia può essere Boolean o un Object standard allowedCases.

    {
        canAdd{
            addInGroup: false,
            addInNestedGroup: {
                allowedCases: [
                    {
                        groupClassName: 'msc_object',
                        nestedGroupClassName: 'res_resource',
                        mainClassName: 'oma_activity_to_plan'
                    }
                ]
            }
        }
        canRemove: true,
        canResize: {
            allowedCases: [
                {
                    groupClassName: 'msc_object',
                    nestedGroupClassName: 'oma_activity_to_plan', 
                    mainClassName: 'res_resource'
                }
            ]
        },
        canDrag: {
            allowedCases: [
                {
                    groupClassName: 'msc_object',
                    nestedGroupClassName: 'oma_activity_to_plan', 
                    mainClassName: 'res_resource'
                }
            ]
        },
        canChangeGroup: {
            group2group: true,
            nestedGroup2group: true,
            nestedGroup2groupParent: true,
            nestedGroup2nestedGroup: false,
            nestedGroup2nestedGroupSibling: {
                allowedCases: [
                    {
                        groupClassName: 'msc_object',
                        nestedGroupClassName: 'res_resource', 
                        mainClassName: 'oma_activity_to_plan'
                    }
                ]
            }
        }
    }
  • quickEdit: Boolean, optional, default false. Valutato solo quando editable è true o si manifestano sotto condizioni per le quali si può editare. Di base le operazioni di ridimensionamento, spostamento e cancellazione non vengono persistite immediatamente su DB, ma i cambiamenti vengono mantenuti in locale finché l’utente non ne effettua il commit o annulla il set di modifiche (si abilitano a tale scopo due tasti nella toolbar). Ponendo a true questo flag i meccanismi di persistenza dei cambiamenti vengono eseguiti immediatamente (eventualmente invocando le azioni di validazione e di consolidamento);
  • showConfirmationRequestDialog: Boolean, optional, default true. Valutato solo quando editable è true o si manifestano sotto condizioni per le quali si può editare. Se posto a true per ogni operazione di modifica e cancellazione, sia in modalità quickEdit o meno, vengono mostrati dialog di richiesta conferma. Si può disabilitare sia per far fare all’utente meno click sia per far visualizzare solo l’ eventuale dialog mostrabile tramite validationGwActionName o consolidationGwActionName;
  • validationGwActionName: String, optional, default null. Nome della gwAction (libera), presente nella baseGwClass, che esegue una validazione sul set di modifiche che si stanno effettuando. Se omessa si dà per scontato che la validazione sia superata.
    In qualsiasi caso in ingresso viene fornito un unico argomento, chiamato 'params', cosi fatto:
    {
        insertedItems: [],
        modifiedItems: [],
        oldItems: [],
        removedItems: [],
        callback
    }


    Di volta in volta dentro i vari array saranno popolati con gli opportuni elementi se presenti. In caso di assenza di modifiche per una data categoria l'array sarà passato vuoto, ma mai null. Per comunicare la correttezza della validazione l'azione dovrà esplicitamente eseguire la callback dentro params, con argomento true, cosi:

    params.callback(true);


    L'azione è soggetta al controllo delle DACL, pertanto vanno abilitati i permessi necessari per l'utente che sta utilizzando la gwDynamicTimeline;
    L'azione viene invocata su ogni tipo di modifica:

    • insert puntuale;
    • update puntuale;
    • cancellazione puntuale;
    • modifiche multiple;
  • consolidationGwActionName: String, optional, default null. Nome della gwAction (libera), presente nella baseGwClass, che esegue le operazioni di consolidamento in seguito al salvataggio del set di modifiche. Se omessa nessun consolidamento verrà effettuato.
    In qualsiasi caso in ingresso viene fornito un unico argomento, chiamato 'params', cosi fatto:
    {
        insertedItems: [],
        modifiedItems: [],
        oldItems: [],
        removedItems: [],
        callback
    }

    Di volta in volta dentro i vari array saranno popolati con gli opportuni elementi, se presenti. In caso di assenza di modifiche per una data categoria l'array sarà passato vuoto, ma mai null. L'azione è soggetta al controllo delle DACL, pertanto vanno abilitati i permessi necessari per l'utente che sta utilizzando la gwDynamicTimeline;
    L'azione viene invocata su ogni tipo di modifica:

    • insert puntuale;
    • update puntuale;
    • cancellazione puntuale;
    • modifiche multiple;
  • inToolbarActionNameList: String, optional, default null. Lista di nomi di gwAction (della baseClass, di tipo 'Libera'), separate da virgola, che determina quali azioni saranno lanciabili dalla toolbar della timeline. Verranno valutati i permessi statici. Le azioni verranno invocate con I seguenti parametri in ingresso:
    • gwDynamicTimeline, Object;
  • showContentOverflow: Boolean, optional, default false. Quando a true, evita che il testo dentro gli item nel piano della timeline venga troncato nel caso oltrepassi il confine dimensionale dell'item (che deriva direttamente dai parametri temporali sottostanti in caso di start ed end)
  • showGroupsAreaScrollControls: Boolean, optional, default false. Quando posto a true, fa si che nella toolbar compaiano due tasti (scroll Up/scroll down)
  • autoExpandFirstGroup: Boolean, optional, default true. Quando a true, se sono presenti gruppi e sottogruppi, fa si che il primo gruppo si presenti espanso in avvio.
  • showNoGroupSection: Boolean or Object, default false. Quando è di tipo Object il formato è il seguente:
    {
        allowedCase: [
            {
                groupClassName: 'msc_object',
    	    nestedGroupClassName: 'res_resource',
    	    mainClassName: 'oma_activity_to_plan'
            }
        ]
    }
  • aggregationEnabled: Boolean, optional, default true. Abilita l’aggregazione automatica dei dati;
  • aggregationThreshold: Integer, optional, default 10. Valutato solo se aggregationEnable vale true. Determina il numero massimo di elementi per sezione oltre il quale il dato viene presentato in modo aggregato;
  • styles: Object[], optional, default null. Permette di impostare una lista di regole che in caso di match applicano delle regole css al nodo dom dell’item nel piano della timeline. La lista è un array composto da elementi come nell’esempio qui sotto:
    [
        {
            property: 'is_scheduled',
            operator: '=',
            value: 0,
            styleCssRule: 'background-color: rgba(255, 0, 0, 0.2); color: red;'
        }
    ]

    Le regole applicate sovrascrivono anche le proprietà modificate al momento dalla timeline quando l’utente seleziona un item, quindi vanno scelte con cura.
    La regole contenute in styleCssRule vengono applicate solo se la proprietà dell’item property matcha value secondo il criterio definito in operator.

    • property è il nome di uno dei campi della baseGwClass;
    • operator può assumere i seguenti valori: ‘=’, ‘!=’, ‘<>’, ‘⇐’, ‘<’, ‘>’, ‘>=’, ‘IN’, ‘NOT IN’, ‘IS NULL’, ‘IS NOT NULL’;
    • value può essere di tipo Integer, String, Boolean, Integer[], String[] o Boolean[];
    • styleCssRule è un set di regole css ognuna terminante con il separatore ‘;’ .
  • openingDetailMode: String, optional, default ‘floatingPane’. Determina con quale modalità verranno aperti i dettagli delle gwClass coinvolte;
  • start: Date or Number or String or Moment, optional, default null. Imposta la data di inizio della finestra temporale della timeline. Inoltre ha la priorità sul parametro initialWindow. Se non viene impostato viene usata la data più vecchia presente negli eventi. Formati ammessi: new Date(), 1696515867321, '1696515867321', '2013-04-20', '2013-04-20 15:30:40', moment();
  • end: Date or Number or String or Moment, optional. Imposta la data di fine della finestra temporale della timeline. Inoltre ha la priorità sul parametro initialWindow. Se non viene impostato viene usata la data più recente presente negli eventi. Formati ammessi: new Date(), 1696515867321, '1696515867321', '2013-04-20', '2013-04-20 15:30:40', moment();
  • initialWindow: String, optional, default null, valori possibili: ‘year’, ‘month’, ‘week’, ‘day’, ‘hour’, ‘second’. Imposta la data di inizio e fine per gli assi della timeline, in modo da mostrare gli oggetti appartenenti allo specifico intervallo. Viene valutato solo quando i parametri di inizio e fine data non vengono specificati. Se il parametro viene omesso la timeline proverà a calcolare in automatico le date di inizio e fine;
  • max: Date or Number or String or Moment, optional, default null. Imposta la data massima di fine range, oltre la quale non è possibile spostarsi. Formati ammessi: new Date(), 1696515867321, '1696515867321', '2013-04-20', '2013-04-20 15:30:40', moment();
  • min: Date or Number or String or Moment, optional. Imposta la data minima di inizio range, oltre la quale non è possibile spostarsi. Formati ammessi: new Date(), 1696515867321, '1696515867321', '2013-04-20', '2013-04-20 15:30:40', moment();
  • moveable: Boolean, optional, default true. Specifica se la timeline può essere zoomata e spostata trascinando la finestra. Guarda anche il parametro zoomable;
  • zoomable: Boolean, optional, default true. Specifica se la timeline può essere zoomata con lo scrolling della finestra, applicabile solo se il parametro moveable è impostato a true;
  • zoomMax: number, optional, default 315360000000000. Imposta il limite massimo per lo zoom in milliseccondi, corrisponde a 10000 anni;
  • zoomMin: number, optional, default 10. Imposta il limite minimo dello zoom in millisecondi.
  • backgroundItems: (from 4.6.10, issue #1126) Object[], optional. Contiene stilizzazioni delle finestre temporali specificate. La stilizzazione è di default o può essere esplicitata. array with objects, in the format like example, with fields:
    • start: Date(), String ('yyyy-MM-dd'), moment, required
    • end: Date(), String ('yyyy-MM-dd'), moment, required
    • content, string, optional.
    • bgcolor, string, optional and mutually exclusive with className
    • className, string, optional and mutually exclusive with bgcolor (needs somewhere a css class: .vis-item.vis-background.negative { background-color: rgba(255, 0, 0, 0.2); } )
      example.js
      backgroundItems: [
       {content: 'Forbidden Period 1', start: '2023-01-01', end: '2023-10-01', type: 'background''},
       {content: 'Forbidden Period 2', start: '2024-01-01', end: '2024-10-01', type: 'background', bgcolor: 'rgba(255, 0, 0, 0.2)'},
       {content: 'Forbidden Period 3', start: '2025-01-01', end: '2025-10-01', type: 'background', className: 'negative'}
      ]

Esempio generale con utilizzo di tutti i parametri. Utile per copiare velocemente uno scheletro con la struttura di base per poi eventualmente commentare i parametri non utilizzati:

example.js
var title= 'title';
var options = {
	tabWidgetId: 'tabWidgetId',
	baseGwClassInfo: {
		gwClassName: 'oma_poc',
		startAttrName: 'start_date',
		endAttrName: 'end_date',
		codAttrName: 'cod_poc',
		visualizationAttrName: 'description',
		filters: [],
		staticFilters: [
			{condition: 'AND', columnName: 'operating_model', operator: '=', filterType: 'STRING', value: ['PROG']},
			{condition: 'AND', columnName: 'type_policies_programming', operator: '=', filterType: 'STRING', value: ['Periodica']}
		]
	},
	mainGwClassInfo: {
		gwClassName: 'res_resource',
		referencingCodAttrName: 'assignee',
		codAttrName: 'cod_resource',
		codToShowAttrName: 'cod_resource_mc',
		visualizationAttrName: 'descr_resource'
	},
	groupGwClassInfo: {
		gwClassName: 'msc_object',
		referencingCodAttrName: 'cod_object',
		codAttrName: 'cod_object',
		codToShowAttrName: 'cod_object_mc',
		visualizationAttrName: 'descr_obj'
	},
	nestedGroupGwClassInfo: {
		gwClassName: 'oma_activity_to_plan',
		referencingCodAttrName: 'cod_activity_to_plan',
		codAttrName: 'cod_activity_to_plan',
		visualizationAttrName: 'description',
		filters: [],
		staticFilters: [],
		nestedGroupFilters: {
			msc_object: [
				{condition: 'AND', columnName: 'cod_object_program', operator: 'IN', filterType: 'CUSTOM', value: '(select msc_object.cod_object from msc_object where cod_object=#{map.cod_object})'}
			],
			res_resource: []
		}
	},
	styles: [
		{
			property: 'is_scheduled',
			operator: '=',
			value: 1,
			styleCssRule: 'background-color: rgba(0,255,0,0.2); color: black; border-color: green'
		}
	],
	showOnlyGroupsAlreadyInUse: true,
	editable: {
		canAdd: false,
		canRemove: false,
		canResize: false,
		canDrag: true,
		canChangeGroup: {
			group2group: false,
			nestedGroup2group: false,
			nestedGroup2groupParent: {
				allowedCases: [
					{
						groupClassName: 'msc_object',
						nestedGroupClassName: 'res_resource', 
						mainClassName: 'oma_activity_to_plan'
					},
					{
						groupClassName: 'oma_activity_to_plan',
						nestedGroupClassName: 'res_resource', 
						mainClassName: 'msc_object'
					}
				]
			},
			nestedGroup2nestedGroup: false,
			nestedGroup2nestedGroupSibling: {
				allowedCases: [
					{
						groupClassName: 'msc_object',
						nestedGroupClassName: 'res_resource', 
						mainClassName: 'oma_activity_to_plan'
					},
					{
						groupClassName: 'oma_activity_to_plan',
						nestedGroupClassName: 'res_resource', 
						mainClassName: 'msc_object'
					}
				]
			}
		}
	},
	quickEdit: false,
	showConfirmationRequestDialog: true,
	validationGwActionName: 'gw_dynamic_timeline_validation',
	consolidationGwActionName: 'gw_dynamic_timeline_consolidation',
	inToolbarActionNameList: 'gw_dynamic_timeline_upd_ass,gw_dynamic_timeline_export_excel,gw_dynamic_timeline_print_month_excel',
	showNoGroupSection: {
		allowedCases: [
			{
				groupClassName: 'msc_object',
				nestedGroupClassName: 'res_resource',
				mainClassName: 'oma_activity_to_plan'
			}
		]
	},
	aggregationEnabled: false,
	aggregationThreshold: 10,
	openingDetailMode: 'floatingPane',
	start: null,
	end: null,
	initialWindow: 'year',
	max: null,
	min: null,
	moveable: null,
	zoomable: null,
	zoomMax: null,
	zoomMin: null,
	backgroundItems: [
		//default background-color: rgba(213, 221, 246, 0.4)
		{
			content: 'Forbidden Period',
			start: '2023-01-01',
			end: '2023-10-01',
		},
		//specific css class
		{
			content: 'Forbidden Period 2',
			start: '2024-01-01',
			end: '2024-10-01',
			className: 'negative'
		},
		//explicited bgcolor
		{
			start: '2025-01-01',
			end: '2025-10-01',
			bgcolor: 'rgba(255, 0, 0, 0.2)'
		}
	]
};
var tabWidget = openGwDynamicTimeLineTab(title, options);
  • custom/api_js_opengwdynamictimelinetab.txt
  • Ultima modifica: 2023/10/24 12:44
  • da giorgio.scali