2015-01-08 3 views
4

Проблема:Изменение значения настраиваемого поля в Redmine зацепить

Мои вопросы в настоящее время есть 3 пользовательских полей, скажем FieldA (выберите список), FieldB (ненужную) и FieldC (текст).

Что должно произойти в том, что при сохранении, FieldC принимает значение <FieldA>-<date in Ymd>-<number from database>

В качестве примера, давайте предположим, что FieldA имеет значение «Test», и сегодня является 8 января 2015 FieldC должен затем be Test-20150108-001, где 001 поступает из пользовательской таблицы в базе данных, которая уникальна для значения FieldA и сбрасывается каждый год.

Что я сделал, чтобы в настоящее время:

Я использовал сценарий командной строки для создания плагина с помощью

ruby script/rails generate redmine_plugin subticket 

и модель через

ruby script/rails generate redmine_plugin_model subticket subticket_ids fa:string lastnum:integer year:integer 

(где fa - значение FieldA, lastnum - это последнее число, используемое для этого значения, а год - текущий год, для которого применим lastnum).

я тогда приступил к предварять init.rb добавить крюк слушателя, чтобы implenent на presave крючки:

require_dependency 'subticket_hooks' 

И создал файл lib/subticket_hooks.rb со следующим содержанием:

class SubticketHooksListener < Redmine::Hook::ViewListener 
    def controller_issues_edit_before_save(context={}) 
    issue = context[:issue] 

    end 
end 

Однако , Я не могу найти какую-либо документацию о том, как здесь получить/записать значение настраиваемого поля. Все еще работаю над тем, чтобы модель работала, но я предполагаю, что документация достаточно ясна для меня, чтобы экспериментировать (конечно, любая информация приветствуется!)

Обратите внимание, что это далеко за пределами моих возможностей, так как моя основная специализация на совершенно другом языке - медленно!

+0

Вы достигли какого-либо прогресса? – fjuan

ответ

1

У меня была та же задача

Мое решение: Каждый настраиваемый объект Redmine имеет custom_field_values поле, это значение является массивом CustomFieldValue. CustomFieldValue содержит текущее значение, настраиваемое описание поля и настраиваемый объект.

Необходимые значения, которые я читаю и изменяет, сортируя. Может быть, это не лучший вариант, но я недавно познакомился с рубиновым языком.

метод для чтения значений пользовательских полей:

def object_custom_field_value(object, field_name) 
    object.custom_field_values.each do |field| 
    if field.custom_field.name == field_name 
     return field.value 
    end 
    end 
end 

И для изменения:

def object_custom_field_set_value(object, field_name, value) 
    object.custom_field_values.each do |field| 
    if field.custom_field.name == field_name 
     field.value = value 
    end 
    end 
end 

Надеется, что это помогает!