InstallPayload ({ previousVersion?: string; newVersion: string } — previousVersion è undefined in una nuova installazione), ma sono dichiarati con le proprie funzioni di definizione e vivono al di fuori del normale modello di trigger (HTTP, cron, eventi del database).
Ogni app può definire al massimo una funzione di pre-installazione e al massimo una funzione di post-installazione. La build del manifesto genera un errore se ne viene rilevata più di una per ciascun tipo.
A colpo d’occhio
Regola generale: usa post-install come impostazione predefinita. Ricorri al pre-install solo quando la migrazione stessa è distruttiva e devi intercettare lo stato precedente prima che vada perso.
Comportamento condiviso da entrambi gli hook
- La config è una config di
defineLogicFunctionmeno le impostazioni di trigger, piùshouldRunOnVersionUpgrade. - Quando viene eseguito: solo sulle nuove installazioni, per impostazione predefinita. Imposta
shouldRunOnVersionUpgrade: trueper eseguirlo anche sugli upgrade. UsapreviousVersion/newVersionper ramificare in base al percorso di upgrade. - L’idempotenza è importante: il post-install async può essere ritentato e qualsiasi hook viene rieseguito sugli upgrade quando
shouldRunOnVersionUpgradeè attivo. - Il consueto ambiente delle logic-function (
APPLICATION_ID,APP_ACCESS_TOKEN,API_URL) viene iniettato, così puoi chiamare le API di Twenty con il token della tua app. - L’hook viene collegato automaticamente al manifesto dell’applicazione in fase di build (
preInstallLogicFunction/postInstallLogicFunction) — non c’è nulla da referenziare indefineApplication(). - Il
timeoutSecondspredefinito è 300 per consentire attività di setup più lunghe, come il seeding dei dati. - Non eseguito in modalità dev:
yarn twenty devsalta il flusso di installazione e sincronizza direttamente i file, quindi gli hook non vengono mai eseguiti in quell’ambiente. Attivali invece manualmente:
definePostInstallLogicFunction
Viene eseguita dopo che la migrazione dei metadati dello spazio di lavoro è stata applicata
definePostInstallLogicFunction
Viene eseguita dopo che la migrazione dei metadati dello spazio di lavoro è stata applicata
Viene eseguito una volta che l’installazione della tua app è terminata: metadati sincronizzati, client SDK generato, nuovo schema interrogabile. Esempio — eseguire il seeding di un record predefinito nelle nuove installazioni:Il flag
src/logic-functions/post-install.ts
shouldRunSynchronously controlla il modello di esecuzione:false(predefinito) — messo in coda nella message queue (retryLimit: 3) ed eseguito da un worker. La risposta dell’installazione ritorna non appena il job viene messo in coda. Da usare per lavoro di lunga durata — seeding di grandi dataset, API di terze parti lente.true— eseguito inline durante il flusso di installazione. La richiesta di installazione rimane bloccata finché l’handler non termina; un errore lanciato viene esposto al chiamante comePOST_INSTALL_ERROR(nessun retry). Da usare per lavoro rapido che deve completarsi prima della risposta. La migrazione è già stata applicata a questo punto, quindi un errore non annulla le modifiche allo schema — si limita a esporre l’errore.
definePreInstallLogicFunction
Viene eseguita prima che la migrazione dei metadati dello spazio di lavoro sia applicata
definePreInstallLogicFunction
Viene eseguita prima che la migrazione dei metadati dello spazio di lavoro sia applicata
Viene eseguito prima della migrazione dei metadati, contro lo schema precedente — il posto giusto per eseguire il backup di dati che una migrazione perderebbe o per rifiutare un upgrade rischioso. Prima dell’esecuzione, il server esegue una “sincronizzazione ridotta” puramente additiva che registra solo la funzione di pre-install della versione nuova; tutto il resto — oggetti, campi e dati della versione precedente — rimane intatto quando il tuo handler viene eseguito.Il pre-install è sempre sincrono e blocca l’installazione. Se l’handler genera un’eccezione, l’installazione viene interrotta prima che venga applicata qualsiasi modifica allo schema — il workspace rimane sulla versione precedente in uno stato coerente. Questo è intenzionale: il pre-install è la tua ultima possibilità per rifiutare un aggiornamento rischioso.Esempio — copiare i valori di un campo legacy prima che la migrazione lo elimini:
src/logic-functions/pre-install.ts