Automatizzare la creazione di campo personalizzato in Redmine
-
20-09-2019 - |
Domanda
Voglio scrivere un plugin per redmine che dipenderà un bel paio di , quindi vorrei creare automaticamente i campi personalizzati. Idealmente all'interno del codice del plugin, o, se non da uno script che posso correre quando installo il plugin - davvero non voglio avere a creare oltre 10 campi attraverso l'interfaccia web quando ho creato questo in su, soprattutto quando si è un elenco con un bel paio di valori.
Qualcuno può dirmi se ci sono modi standard di fare questo?
Inoltre è ci un buon modo per esportare i campi personalizzati da un'installazione esistente?
Soluzione
Si dovrebbe usare la migrazione degli script. Mettete i vostri script in #{PLUGIN_ROOT}/db/migrate
e chiamare .create
lì. Le fonti Redmine contengono molti script simili.
Ad esempio, lo script può avere un nome:. 001_populate_custom_fields.rb
Contenuto:
class PopulateCustomFields < ActiveRecord::Migration
def self.up
CustomField.create ...
end
def self.down
end
end
Altri suggerimenti
I campi personalizzati in sostanza sono praticamente implementate come una risorsa (tuttavia non v'è alcun percorso risorsa per custom_fields). Non vedo una ragione per cui non si dovrebbe essere in grado di utilizzare solo CustomField.create / Nuovo per creare i campi il plugin ha bisogno. Allo stesso modo si dovrebbe essere in grado di utilizzare solo per trovare () per ottenere tutti i campi personalizzati esistenti. Tuttavia, devo dire che non ho mai fatto prima e non so se questo è il modo standard. Ma, al largo della mano, non riesco a vedere nulla di sbagliato nel fare in questo modo.
Come rispose Andriy Lesyuk, inserire lo script sotto #{PLUGIN_ROOT}/db/migrate
e testarlo utilizzando il comando per l'installazione / disinstallazione del plugin.
Per l'installazione del plugin utilizzare il comando:
rake redmine:plugins:migrate
e per la disinstallazione:
rake redmine:plugins:migrate NAME=<your plugin name> VERSION=0
Controlla il funzionario per ulteriori dettagli.
Per esempio, la 001_populate_custom_fields.rb
script potrebbe essere qualcosa del tipo:
class PopulateCustomFields < ActiveRecord::Migration
# method called when installing the plugin
def self.up
if CustomField.find_by_name('A New Custom Field').nil?
CustomField.create(name: 'A New Custom Field', field_format: 'text')
end
end
# method called when uninstalling the plugin
def self.down
CustomField.find_by_name('A New Custom Field').delete unless CustomField.find_by_name('A New Custom Field').nil?
end
end
Questo creerà / rimuovere il campo personalizzato "Un Campo New Custom" di tipo "testo", dopo aver controllato la sua esistenza dai custom_fields tabella del database Redmine.