Ciao a tutti.
E' possibile settare dei valori predefiniti o dei comportamenti predefiniti per alcuni degli attributi di una classe?
Ad esempio è possibile fare in modo che un campo TIMESTAMP riporti di default (quindi senza che sia valorizzato da un utente) la data e l'ora di creazione della scheda?
Oppure è possibile che un attributo CODE si valorizzi da solo con un progressivo secondo un criterio predefinito? (es. APP001, APP002, APP003, ecc.)
Grazie
Gianluca Giaconia
Sì, è possibile.
Attualmente la soluzione da utilizzare è però quella di agire direttamente nel database.
Ovviamente le impostazioni effettuate agiranno in tal caso al momento del salvataggio nel database e non al momento della presentazione dei dati nella form.
Nel caso della data è sufficiente modificare manualmente la colonna "nomeattributo" di tipo timestamp creata da CMDBuild nella classe "nomeclasse" con il comando:
ALTER TABLE "nomeclasse" ALTER COLUMN "nomeattributo" SET DEFAULT now();
Nel caso del codice progressivo è invece necessario creare una "sequence" (contatore) nel database, ad esempio con il comando:
CREATE
SEQUENCE nomesequence
INCREMENT 1
START 1;
e creare poi una funzione trigger ed un trigger sulla classe interessata, ad esempio con i comandi:
CREATE OR
REPLACE
FUNCTION nomefunzione()
RETURNS
trigger AS
$BODY$
BEGIN
IF(
TG_OP =
'INSERT' )
THEN
NEW."Code" =
'APP' ||
(select
lpad(nextval('nomesequence')::varchar, 3, '0'));
END
IF;
RETURN
NEW;
END;
$BODY$
LANGUAGE
plpgsql
VOLATILE;
CREATE
TRIGGER nometrigger
BEFORE
INSERT OR
UPDATE
ON
"nomeclasse"
FOR EACH
ROW
EXECUTE
PROCEDURE nomefunzione(E'\\x');
Nella roadmap di CMDBuild è prevista per il prossimo anno una estensione che consenta di ottenere gli stessi risultati agendo direttamente sulla definizione dell'attributo dal Modulo di Amministrazione di CMDBuild (anzichè dal database).
Fabio
Grazie per la risposta molto dettagliata.
Reputo un compromesso assolutamente accettabile quello di agire direttamente sul DB e anzi era una cosa alla quale potevo pensare direttamente (ma il fatto di concentrarmi adesso sui processi, mi ha un po' disabituato a ragionare da tecnico).
Grazie
Gianluca