Automatisieren von benutzerdefinierter Felderstellung in Redmine
-
20-09-2019 - |
Frage
Ich möchte ein Plugin für redmine schreiben, die auf ganz wenige benutzerdefinierte Felder abhängen , so würde Ich mag die benutzerdefinierten Felder automatisch erstellen. Im Idealfall innerhalb des Plugin-Code, oder wenn sie nicht von einem Skript kann ich laufen, wenn ich das Plugin installieren - ich mag wirklich nicht 10+ Felder über die Web-Schnittstelle zu schaffen haben, wenn ich diese nach oben gesetzt, vor allem wenn man eine Liste ist mit ganz wenigen Werten.
Kann mir jemand sagen, ob es Standard-Möglichkeiten dies zu tun?
Auch ist es eine gute Möglichkeit, die benutzerdefinierten Felder aus einer vorhandenen Installation zu exportieren?
Lösung
Sie sollten Migrate Skripte verwenden. Legen Sie Ihre Skripte in #{PLUGIN_ROOT}/db/migrate
und Call .create
dort. Die Redmine Quellen enthalten viele ähnliche Skripte.
Zum Beispiel kann das Skript einen Namen hat. 001_populate_custom_fields.rb
Inhalt:
class PopulateCustomFields < ActiveRecord::Migration
def self.up
CustomField.create ...
end
def self.down
end
end
Andere Tipps
Benutzerdefinierte Felder werden im Wesentlichen so ziemlich als Ressource implementiert (jedoch gibt es keine Ressource Weg für custom_fields). Ich sehe keinen Grund, warum sollten Sie nicht in der Lage sein, nur CustomField.create / new Verwenden Sie die Felder Ihr Plugin Bedürfnisse zu erstellen. Ebenso sollten Sie in der Lage sein, nur find () verwenden alle vorhandenen benutzerdefinierten Felder zu erhalten. Allerdings muss ich sagen, dass ich noch nie zuvor getan haben und nicht wissen, ob dies der normale Weg ist. Aber aus der Hand, ich kann nichts falsch sehe damit auf diese Weise zu tun.
Wie Andriy Lesyuk beantwortet, setzen Sie Ihr Skript unter #{PLUGIN_ROOT}/db/migrate
und testen Sie es mit dem Befehl für die Installation / Plugin zu deinstallieren.
Für das Plugin verwenden Sie den Befehl zu installieren:
rake redmine:plugins:migrate
und für die Deinstallation es:
rake redmine:plugins:migrate NAME=<your plugin name> VERSION=0
Auf der offiziellen Dokumentation für weitere Details.
Zum Beispiel das Skript 001_populate_custom_fields.rb
könnte etwas wie:
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
Dies wird das benutzerdefinierte Feld „Ein neuen benutzerdefiniertes Feld“ vom Typ „Text“ erstellen / löschen, nachdem seine Existenz aus der redmine Datenbanktabelle custom_fields zu überprüfen.