Hi,
I am able to add my custom field type (which was added via a plugin by extending MultiSelectCFType) in Jira and associate it with screen and projects. However it does not show up in the screen(eg create issue screen with which it was associated). I populate the MultiSelectCFType with in jira after adding it.
My code for the field is:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import webwork.action.ActionContext;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.bc.project.component.ProjectComponent;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.config.FeatureManager;
//import com.atlassian.jira.issue.customfields.impl.*;
//import com.atlassian.jira.issue.customfields.impl.MultiSelectCFType;
import com.atlassian.jira.issue.customfields.impl.MultiSelectCFType;
//import com.atlassian.jira.issue.customfields.impl.GenericTextCFType;
import com.atlassian.jira.issue.fields.rest.json.beans.JiraBaseUrls;
import com.atlassian.jira.issue.customfields.manager.GenericConfigManager;
import com.atlassian.jira.issue.customfields.manager.OptionsManager;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.persistence.CustomFieldValuePersister;
import com.atlassian.jira.issue.customfields.persistence.PersistenceFieldType;
import com.atlassian.jira.issue.customfields.impl.FieldValidationException;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.config.FieldConfigScheme;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager;
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItem;
import com.atlassian.jira.security.JiraAuthenticationContext;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
public class MyCustomField extends MultiSelectCFType
{
private JiraAuthenticationContext authContext;
private OptionsManager optionsManager;
private static final Logger log = LoggerFactory.getLogger(MyCustomField.class);
public MyCustomField(OptionsManager optionsManager, CustomFieldValuePersister valuePersister, GenericConfigManager genericConfigManager, JiraBaseUrls jiraBaseUrls, SearchService searchService, FeatureManager featureManager)
{
super(optionsManager, valuePersister, genericConfigManager, jiraBaseUrls, searchService, featureManager);
this.optionsManager = optionsManager;
this.authContext = authContext;
}
@Override
public Map<String, Object> getVelocityParameters(final Issue issue,
final CustomField field,
final FieldLayoutItem fieldLayoutItem)
{
final Map<String, Object> params = super.getVelocityParameters(issue, field, fieldLayoutItem);
//field.getOptions(arg0, arg1)
params.put("currentUser", authContext.getLoggedInUser().getName() );
params.put("options", ActionContext.getParameters().get(field.getName()) );
return params;
}
}
My plugin description uses two velocity files.
<customfield-type name="My Custom Field" i18n-name-key="my-custom-field.name" key="my-custom-field" class="com.fieldPlugin.jira.customfields.MyCustomField">
<description key="my-custom-field.description">The My Custom Field Plugin</description>
<resource name="view" type="velocity" location="templates/view-readonly-user.vm"/>
<resource name="column-view" type="velocity" location="templates/view-readonly-user.vm"/>
<resource name="xml" type="velocity" location="templates/view-readonly-user.vm"/>
<resource name="edit" type="velocity" location="templates/edit-readonly-user.vm"/>
</customfield-type>
My edit-readonly-user.vm is:
#customControlHeader ($action $customField.id $customField.name $fieldLayoutItem.required
$displayParameters)
<select name="$customField.id" id="$customField.id" multiple size="5">
<option value="-1">None</option>
#foreach ($option in $options)
<option value="$option.id">$option.name</option>
#end
</select>
#customControlFooter ($action $customField.id $fieldLayoutItem.fieldDescription
$displayParameters)
My view-readonly-user.vm is:
$!value
I believe I might be getting the $options in the edit-readonly-user.vm wrong (from code).
Can anyone solve this for me? I have not been able to find a working tutorial for a multi-select custom field which gave the .vm as well.
Thanks