рд▓рдЧрднрдЧ рд╕рднреА рд╕рдВрдЧрдарди рдЬрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЪрдпрди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдЯрд▓рд╕рд┐рдпрди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реЗ JIRA рдФрд░ рдХреЙрдиреНрдлреНрд▓реБрдПрдВрд╕ рд░реВрд╕реА рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп
рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдкрдиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╡реЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рднреА рдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЕрдкрдиреА рджреГрд╖реНрдЯрд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JIRA рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рддрдм рдмрдврд╝рддреА рд╣реИрдВ рдЬрдм рдЖрдк рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ Mail.Ru Group рдореЗрдВ JIRA / Confluence рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ JIRA рдФрд░ Confluence plugins рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдХреНрдпрд╛ рдмрддрд╛рдКрдВрдЧрд╛
рдпрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдХрдИ рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб
рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдб (рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб), рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд╢реНрд░реЛрддрд╛);
- рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ рдФрд░ рд░реАрд╕реНрдЯ, рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╕реНрд░реЛрдд рдХреЛрдб рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕
рд▓реЗрдЦ рдкрдврд╝реЗрдВред
рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдбреНрд╕
рддреЛ, рдЪрд▓реЛ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдбреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝реАрд▓реНрдб JIRA рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдореВрд▓ рдЗрдХрд╛рдИ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВред рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ JIRA рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рджреЛ рдореБрдЦреНрдп рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕рд┐рд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдбред рд╕рд┐рд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░реВрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдФрд░ рдЕрдиреНрдпред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдкрд╣рд▓рд╛ рдкреНрд▓рдЧрдЗрди (рдХреНрд╡реЗрд░реА рдЗрд╢реНрдпреВ рдХрд╕реНрдЯрдо рдлреАрд▓реНрдбреНрд╕) рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рди рдЙрди рдореБрджреНрджреЛрдВ рдХреА рдХреБрдВрдЬреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА (JQL) рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рд╕реВрдЪреА рдХрд╛ рдореВрд▓реНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЗрд╢реНрдпреВ рдХреАрдЬрд╝) рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдорд╛рди рд╕реНрд╡рддрдГ рд╣реА рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рддреИрдпрд╛рд░ рдкреНрд▓рдЧрдЗрди
рдпрд╣рд╛рдБ рд╣реИ ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдпрд╣ рдЬрд┐рд░рд╛ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рдПрдХ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рд╣рдо рдХреНрд╡реЗрд░реА (JQL) рдФрд░ рдХрд╕реНрдЯрдо рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЦреЛрдЬ рдХреНрд╡реЗрд░реА (JQL) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧрдЗрдиреНрд╕ (com.atlassian.sal.api.pluginsettings.PluginSettings) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЗ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд╕рд╛рде JIRA рдХреЗ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
XStream ) рдХреА рдХреНрд░рдордмрджреНрдзрддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рдПрдЯрд▓рд╕рд┐рдпрди- plugin.xml рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
<component key="queryfields-config" name="Query issues custom fields plugin configuration" class="ru.mail.jira.plugins.lf.QueryFieldsMgrImpl"/> <component-import key="pluginSettingsFactory"> <interface>com.atlassian.sal.api.pluginsettings.PluginSettingsFactory</interface> </component-import>
рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рднреА рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ,
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд░реЛрдд рдХреЛрдб public interface QueryFieldsMgr { boolean getAddNull(long cfId, long projId); String getQueryFieldData(long cfId, long projId); void setAddNull(long cfId, long projId, boolean data); void setQueryFieldData(long cfId, long projId, String data); }
рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory; public class QueryFieldsMgrImpl implements QueryFieldsMgr { private static final String PLUGIN_KEY = "QUERY_LINKING_ISSUE_CFS"; private static final String VAL_SEPARATOR = "||"; private final PluginSettingsFactory pluginSettingsFactory; public QueryFieldsMgrImpl( PluginSettingsFactory pluginSettingsFactory) { this.pluginSettingsFactory = pluginSettingsFactory; } private String createPropKey(long cfId, long projId) { return (cfId + VAL_SEPARATOR + projId); } @Override public boolean getAddNull(long cfId, long projId) { String addNull = (String)pluginSettingsFactory.createSettingsForKey(PLUGIN_KEY).get(createPropKey(cfId, projId).concat(".addnull")); return Boolean.parseBoolean(addNull); } @Override public String getQueryFieldData( long cfId, long projId) { return (String)pluginSettingsFactory.createSettingsForKey(PLUGIN_KEY).get(createPropKey(cfId, projId)); } @Override public void setAddNull(long cfId, long projId, boolean data) { pluginSettingsFactory.createSettingsForKey(PLUGIN_KEY).put(createPropKey(cfId, projId).concat(".addnull"), Boolean.toString(data)); } @Override public void setQueryFieldData( long cfId, long projId, String data) { pluginSettingsFactory.createSettingsForKey(PLUGIN_KEY).put(createPropKey(cfId, projId), data); } }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд▓реЗрдЯ рдФрд░ рдорд╛рдирдХ рдЬреАрд░рд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
public class LinkerField extends TextCFType implements SortableCustomField<String> { private final QueryFieldsMgr qfMgr; public LinkerField( CustomFieldValuePersister customFieldValuePersister, GenericConfigManager genericConfigManager, QueryFieldsMgr qfMgr) { super(customFieldValuePersister, genericConfigManager); this.qfMgr = qfMgr; } ...
рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреГрд╖реНрда рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдкреГрд╖реНрда рдкрд░ рдпрд╣ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдмрдВрдзрди рдлрд╝реАрд▓реНрдб рдХреА рд╕реВрдЪреА рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдФрд░ рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдкреГрд╖реНрда рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рдХреЙрдо рд╕реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
atlassian.jira.web.action.JiraWebActionSupport ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдЧ рд╣реИ
ru.mail.jira.plugins.lf.QueryFieldsConfig ред рдкреНрд▓рдЧрдЗрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ
рдПрдЯрд▓рд╕рд┐рдпрди- plugin.xml рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ :
<web-item key="queryfields-configuration" name="Query issues custom fields configuration link" section="admin_plugins_menu/mailru-admin-section" weight="95"> <label key="queryfields.admin.title"/> <condition class="com.atlassian.jira.plugin.webfragment.conditions.JiraGlobalPermissionCondition"> <param name="permission">admin</param> </condition> <link linkId="queryfields-configuration">/secure/QueryConfigCfsConfig.jspa</link> </web-item> <webwork1 key="queryfields_conf" name="Query issues custom fields configuration" class="java.lang.Object"> <actions> <action name="ru.mail.jira.plugins.lf.QueryFieldsConfig" alias="QueryConfigCfsConfig"> <view name="input">/templates/queryfieldsconf.vm</view> <view name="success">/templates/queryfieldsconf.vm</view> </action> </actions> </webwork1>
JIRA URL рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдкреГрд╖реНрда рдХреЛ XSRF рд╣рдорд▓реЛрдВ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред
рдЕрдЧрд░ рд╣рдо рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдо
рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рдХреНрд╖реЗрддреНрд░ (
ru.mail.jira.plugins.lf.LinkerField ) рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рд╕реЗ рдЪрд╛рд░реНрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
ru.mail.jira.plugins.lf.LirkerFieldSearcher ,
ru.mail.jira.plugins.lf.ieldLieldFieldCieldFieldFieldValueProvider ,
ru.mail.jira.plugins.lfuginsред .LirkerFieldSearchInputTransformer рдФрд░
ru.mail.jira.plugins.lf.irkerFieldCustomFieldRielder ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдкрд╛рджрди рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
edit-linkerfield.vm рдФрд░
view-linkerfield.vm ред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рджреГрд╢реНрдп рдХреЛ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдирдХ рдлрд╝реАрд▓реНрдб рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд╡реЗрдмреИрдк / рд╡реЗрдм-рдЗрди / рдХреНрд▓рд╛рд╕ / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рдкреНрд▓рдЧрдЗрдиреНрд╕ / рдлрд╝реАрд▓реНрдбред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╕реНрдЯрдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдЖрдк рдХрд▓рд░рдкрд┐рдХрд░, рдкрд░рд┐рдХрд▓рд┐рдд рдлрд╝реАрд▓реНрдб рдХреА рд╕реВрдЪреА, рд╕реВрддреНрд░, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░
рджреВрд╕рд░рд╛ рдкреНрд▓рдЧрдЗрди рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ JIRA MRIM рд╢реНрд░реЛрддрд╛ред рдпрд╣ рдкреНрд▓рдЧрдЗрди JIRA рдИрд╡реЗрдВрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди Mail.Ru Agent рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣рд╛рдБ рд╡рд░реНрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ:
рд╕реНрд░реЛрдд рдХреЛрдб public class MyListener implements InitializingBean, DisposableBean { private static Log log = LogFactory.getLog(MyListener.class); private EventPublisher eventPublisher; public MyListener ( EventPublisher eventPublisher) { this.eventPublisher = eventPublisher; } @Override public void afterPropertiesSet() throws Exception {
рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдБ рд╣реИ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкреНрд▓рдЧрдЗрди рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдЕрдЯреИрдЪрдореЗрдВрдЯ рд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдЬреЛ рд▓реЛрдЧ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдкреБрд╕реНрддрдХ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ -
JIRA рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреБрдХрдмреБрдХ рдФрд░
https://marketplace.atlassian.com/vendors/37127 рдкрд░ рдореБрдлреНрдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдкрд╛рд▓рди
рдХрд░реЗрдВ ред
рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рд╕рдм рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рдЖрдк JIRA рдФрд░ Confluence рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореБрдлреНрдд рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗрдВ, рдмрдирд╛рдПрдВ рдпрд╛ рдорджрдж рдХрд░реЗрдВред