рдПрдЯрд▓рд╕рд┐рдпрди рдЬреАрд░рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рд╕реЛрдпрд╛, рдЖрд╡рд╢реНрдпрдХрддрд╛, рдмреИрдХрдмреЛрди рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдЬреАрд░рд╛ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рд╣рдо рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдпрд╛, рд░рд┐рдХреНрдЬреЗрд╕реНрдЯ, рдмреИрдХрдмреЛрди рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕реЛрдпрд╛, рд░рд┐рдХреНрдЬреЗрд╕реНрдЯреНрд╕, рдмреИрдХрдмреЛрди рдЬреЗрдПрд╕ рдмрд┐рд▓реНрдЯ-рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред

рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрд░рд╛ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдХрд╕рд┐рдд рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЬреАрд░рд╛ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╡рд░реНрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ред рдкреИрд░рд╛рдореАрдЯрд░ рджреЛ рд╕реНрдХреНрд░реАрди (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░) рдкрд░ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреАрдиреНрд╕ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЬреАрд░рд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрдВрдХрд╛рд▓ рдмрдирд╛рдПрдБ


рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
atlas-create-jira-plugin

рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ:

 Define value for groupId: : ru.matveev.alexey.jira.tutorial.webworkui Define value for artifactId: : webwork-soy-require-backbone Define value for version: 1.0.0-SNAPSHOT: : Define value for package: ru.matveev.alexey.jira.tutorial.webworkui: : Y: : Y 

Pom.xml рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ


рдкреНрд▓рдЧрдЗрди рдХрд╛ рдХрдВрдХрд╛рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЯрд▓рд╕рд┐рдпрди-рд╕реНрдкреНрд░рд┐рдВрдЧ-рд╕реНрдХреИрдирд░ 2 рдХреЗ рд▓рд┐рдП рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

2.0.0 рдореЗрдВ рдПрдЯрд▓рд╕рд┐рдпрди-рд╕реНрдкреНрд░рд┐рдВрдЧ-рд╕реНрдХреИрдирд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 <atlassian.spring.scanner.version>2.0.0</atlassian.spring.scanner.version> 

рд╕рдВрдХрд▓рди рд╕реЗ рдкреНрд░рджрддреНрдд рдПрдЯрд▓рд╕рд┐рдпрди-рд╕реНрдкреНрд░рд┐рдВрдЧ-рд╕реНрдХреЗрдирд░-рдПрдиреЛрдЯреЗрд╢рди рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдмрджрд▓реЗрдВ:

 <dependency> <groupId>com.atlassian.plugin</groupId> <artifactId>atlassian-spring-scanner-annotation</artifactId> <version>${atlassian.spring.scanner.version}</version> <scope>provided</scope> </dependency> 

рдПрдЯрд▓рд╕рд┐рдпрди-рд╕реНрдкреНрд░рд┐рдВрдЧ-рд╕реНрдХреИрдирд░-рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рдХрд╛рд▓реЗрдВред

рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВред

src / main / java / ru / matveev / alexey / jira / tutorial / webworkui / api / PluginSettingService.java
 package ru.matveev.alexey.jira.tutorial.webworkui.api; public interface PluginSettingService { String getConfigJson(); void setConfigJson(String json); } 


рдЕрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

src / main / java / ru / matveev / alexey / jira / tutorial / webworkui / impl / PluginSettingServiceImpl.java
 package ru.matveev.alexey.jira.tutorial.webworkui.impl; import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport; import com.atlassian.sal.api.pluginsettings.PluginSettings; import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory; import ru.matveev.alexey.jira.tutorial.webworkui.api.PluginSettingService; import javax.inject.Inject; import javax.inject.Named; @Named public class PluginSettingServiceImpl implements PluginSettingService { public final PluginSettings pluginSettings; private static final String PLUGIN_STORAGE_KEY = "ru.matveev.alexey.jira.tutorial.webworkui."; private static final String CONFIG_JSON = "configjson"; @Inject public PluginSettingServiceImpl(@ComponentImport PluginSettingsFactory pluginSettingsFactory) { this.pluginSettings = pluginSettingsFactory.createGlobalSettings(); } private void setSettingValue(String settingKey, String settingValue) { this.pluginSettings.put(PLUGIN_STORAGE_KEY + settingKey, settingValue != null?settingValue:""); } private String getSettingValue(String settingKey) { return pluginSettings.get(PLUGIN_STORAGE_KEY + settingKey) != null?pluginSettings.get(PLUGIN_STORAGE_KEY + settingKey).toString():""; } @Override public String getConfigJson() { return getSettingValue(CONFIG_JSON); } @Override public void setConfigJson(String json) { setSettingValue(CONFIG_JSON, json); } } 


GetConfigJson рдФрд░ setConfigJson рд╡рд┐рдзрд┐рдпрд╛рдБ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред

рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╡рд░реНрдХ рдмрдирд╛рдПрдВ


рдкреНрд▓рдЧрдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
create-atlas-jira-plugin-module

рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВ:

 Choose a number (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34): 31 Enter Plugin Module Name My Webwork Module: : Config Show Advanced Setup? (Y/y/N/n) N: : Y Module Key config: : webwork-config Module Description The Config Plugin: : i18n Name Key config.name: : i18n Description Key config.description: : Enter Action Classname MyActionClass: : ConfigWebwork Enter Package Name ru.matveev.alexey.jira.tutorial.webworkui.jira.webwork: :Enter Alias ConfigWebwork: : Enter View Name success: : success.soy Enter Template Path /templates/webwork-config/configwebwork/success.soy.vm: : /templates/webwork-config/configwebwork/success.soy Add Another View? (Y/y/N/n) N: : N Add Another Action? (Y/y/N/n) N: : N Add Another Plugin Module? (Y/y/N/n) N: : N 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, src / main / java / ru / matveev / alexey / jira / tutorial / webworkui / jira / webwork / configWebwork.java рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:

src / main / java / ru / matveev / alexey / jira / tutorial / webworkui / jira / webwork / configWebwork.java
 package ru.matveev.alexey.jira.tutorial.webworkui.jira.webwork; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.atlassian.jira.web.action.JiraWebActionSupport; import ru.matveev.alexey.jira.tutorial.webworkui.api.PluginSettingService; import javax.inject.Inject; public class ConfigWebwork extends JiraWebActionSupport { private static final Logger log = LoggerFactory.getLogger(ConfigWebwork.class); private final PluginSettingService pluginSettingService; private String configJson; @Inject public ConfigWebwork(PluginSettingService pluginSettingService) { this.pluginSettingService = pluginSettingService; } @Override public String execute() throws Exception { super.execute(); return SUCCESS; } public void doSave() { pluginSettingService.setConfigJson(configJson); } @ActionViewData public String getConfigJson() { return pluginSettingService.getConfigJson().isEmpty()?"{}":pluginSettingService.getConfigJson(); } public void setConfigJson(String json) { this.configJson = json; } } 


@ActionViewData рдПрдиреЛрдЯреЗрд╢рди рд╕реЛрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП configJson рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдПрдХ рд╡реЗрдм рд╕реЗрдХреНрд╢рди рдФрд░ рд╡реЗрдм рдЖрдЗрдЯрдо рдмрдирд╛рдПрдБ


рд╣рдордиреЗ рд╡реЗрдмрд╡рд░реНрдХ рдЬреЛрдбрд╝рд╛ рд╣реИред рдЕрдм рдореЗрдиреВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╡реЗрдмрд╡рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
create-atlas-jira-plugin-module

рд╣рдо рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрддреЗ рд╣реИрдВ:

 Choose a number (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34): 30 Enter Plugin Module Name My Web Section: : Webwork Config Section Enter Location (eg system.admin/mynewsection): admin_plugins_menu Show Advanced Setup? (Y/y/N/n) N: : N Add Another Plugin Module? (Y/y/N/n) N: : Y Choose a number (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34): 25 Enter Plugin Module Name My Web Item: : Webwork Config Item Enter Section (eg system.admin/globalsettings): admin_plugins_menu/webwork-config-section Enter Link URL (eg /secure/CreateIssue!default.jspa): /secure/ConfigWebwork.jspa? Show Advanced Setup? (Y/y/N/n) N: : N Add Another Plugin Module? (Y/y/N/n) N: : N 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдордиреЗ Add-ons рдкреГрд╖реНрда рдкрд░ рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рдмрдирд╛рдпрд╛ред

рдПрдХ рд╕реЛрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдБ


рд╕реЛрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдо рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ
src / рдореБрдЦреНрдп / рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд╡реЗрдмрд╡рд░реНрдХ-рдХреЙрдиреНрдлрд┐рдЧрд░ / configwebwork / success.soyред

src / рдореБрдЦреНрдп / рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд╡реЗрдмрд╡рд░реНрдХ-рдХреЙрдиреНрдлрд┐рдЧрд░ / configwebwork / success.soy
 {namespace webwork.config} /** * This template is needed for drawing the formview. */ {template .formview} {@param configJson: string} {webResourceManager_requireResource('ru.matveev.alexey.jira.tutorial.webworkui.webwork-soy-require-backbone:webwork-soy-require-backbone-resources')} <html> <head> <meta charset="utf-8"/> <meta name="decorator" content="atl.admin"> <meta name="admin.active.section" content="admin_plugins_menu/telegram-config-section"> <meta name="admin.active.tab" content="telegram-general-config-item"> <title>my page page</title> </head> <body> <div id="container"> <form class="aui" action="ConfigWebwork!save.jspa" method="POST"> <div class="field-group"> <label for="configJson">Json</label> <input class="text long-field" type="text" id="configJson" name="configJson" placeholder="Json String" value="{$configJson}"> <div class="description">the configJson Parameter</div> </div> <div class="buttons-container"> <div class="buttons"> <input class="button submit" type="submit" value="Save" id="config-save-button"> <a class="cancel" href="#">Cancel</a> </div> </div> </form> </div> </body> </html> {/template} 


Atlassian-plugin.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╡реЗрдм-рд╕рдВрд╕рд╛рдзрди рдЯреИрдЧ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╕реЛрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ:

 <resource type="soy" name="webwork-config" location="/templates/webwork-config/configwebwork/success.soy"/> 

рдЕрдм рд╣рдо atlassian-plugin.xml рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдЬрдм рд╣рдо рд╡реЗрдмрд╡рд░реНрдХ рддрдХ рдкрд╣реБрдВрдЪреЗрдВ, рддреЛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕реЛрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛:

 <view name="success" type="soy">:webwork-soy-require-backbone-resources/webwork.config.formview</view> 

рд╡реЗрдмрд╡рд░реНрдХ-рд╕реЛрдпрд╛-рдЖрд╡рд╢реНрдпрдХрддрд╛-рдмреИрдХрдмреЛрди-рд╕рдВрд╕рд╛рдзрди рд╡реЗрдм-рд╕рдВрд╕рд╛рдзрди рдЯреИрдЧ рдореЗрдВ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕реЛрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рд╛ рд╣реИред

webwork.config.formview - рд╕реЛрдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдирд╛рдо рд╕реНрдерд╛рди рдФрд░ рдирд╛рдоред

рдкрд░реАрдХреНрд╖рдг рдкреНрд▓рдЧрдЗрди


рдкреНрд▓рдЧрдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
atlas-run

рдЬреАрд░рд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЬрд╛рдПрдВ:

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 2990 / рдЬреАрд░рд╛ / рд╕рд┐рдХреНрдпреЛрд░ / рдХреЙрдиреНрдлрд┐рдЧрд░рдмрд╡рд░реНрдХ.рдЬрд╕реНрдк

рд╕реНрдХреНрд░реАрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдЖрдк Json рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗрдмрд╡рд░реНрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕реНрдХреНрд░реАрди рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░реАрди рдкрд░, рд╕рд╣реЗрдЬреЗрдВ рдмрдЯрди рдХреЛ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдВрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордиреЗ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдВрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмреИрдХрдмреЛрди рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдпрд╣рд╛рдБ рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдмреИрдХрдмреЛрди рдореЙрдбрд▓ рдмрдирд╛рдПрдВ


src / main / Resources / js / webwork-config-model.js
рдкрд░рд┐рднрд╛рд╖рд┐рдд ('рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдореЙрдбрд▓',]
'Jquery',
'рд░реАрдврд╝',
'рдЕрдВрдбрд░рд╕реНрдХреЛрд░'
], рдлрд╝рдВрдХреНрд╢рди ($, рдмреИрдХрдмреЛрди, _) {
var WebConfigModel = Backbone.Model.extend ({
рдЪреВрдХ: {
рдкреИрд░рд╛рдореАрдЯрд░ 1: '',
рдкреИрд░рд╛рдореАрдЯрд░ 2: '',
рдкреИрд░рд╛рдореАрдЯрд░ 3: '',
рдкреИрд░рд╛рдореАрдЯрд░ 4: ''
}
});
рд╡рд╛рдкрд╕реА {
рдЖрджрд░реНрд╢: WebConfigModel
};
})

рд╕реЛрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреЛ рд╡реЗрдм-рд╕рдВрд╕рд╛рдзрди рдЯреИрдЧ рдореЗрдВ atlassian-plugin.xml рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 <resource type="download" name="webwork-config-model.js" location="/js/webwork-config-model.js"/> 

рдПрдХ рдмреИрдХрдмреЛрди рджреГрд╢реНрдп рдмрдирд╛рдПрдВ


рдореИрдВрдиреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд▓рд┐рдЦреАрдВред

src / main / Resources / js / webwork-config-view.js
// рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдФрд░ рдореЙрдбрд▓ рдХреЛ рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд┐рдЧ / рд╡реНрдпреВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдореЙрдбрд▓ рдкрд░ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкрд░рд┐рднрд╛рд╖рд┐рдд ('рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рджреГрд╢реНрдп',]
'Jquery',
'рд░реАрдврд╝',
'рдЕрдВрдбрд░рд╕реНрдХреЛрд░'
], рдлрд╝рдВрдХреНрд╢рди ($, рдмреИрдХрдмреЛрди, _) {
"рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ";
var AppView = Backbone.View.extend ({
рдШрдЯрдирд╛рдПрдБ: {
"рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ" рдХреЙрдиреНрдлрд┐рдЧ-рд╕реЗрд╡-рдмрдЯрди ":" saveConfig ",
"рдЕрдЧрд▓рд╛ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ": "рдЕрдЧрд▓рд╛ рдмрдЯрди"
"рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ" рдмреИрдХ-рдмрдЯрди ":" prevButton "

}
// рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕реЗрд╡ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ
saveConfig: рдлрд╝рдВрдХреНрд╢рди () {
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 3", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 3"))ред рд╡реИрд▓ ());
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 4", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 4")ред рд╡рд╛рд▓ ());
$ ("# configJson")ред рд╡реИрд▓ (JSON.stringify (рдпрд╣.model));
}
// рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдкрд░ рдиреЗрдХреНрд╕реНрдЯ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рдЦреАрдВрдЪрддрд╛ рд╣реИ
рдЕрдЧрд▓рд╛рдмрдЯрди: рдлрд╝рдВрдХреНрд╢рди () {
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 1", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 1"))ред рд╡реИрд▓ ());
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 2", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 2")) рд╡реИрд▓ ());
var рдЯреЗрдореНрдкрд▓реЗрдЯ = webwork.config.page2 ({configJson: $ ("# configJson")ред val (), рдкреИрд░рд╛рдореАрдЯрд░ 3: this.model.get ('рдкреИрд░рд╛рдореАрдЯрд░ 3'), рдкреИрд░рд╛рдореАрдЯрд░ 4: this.model .get ('рдкреИрд░рд╛рдореАрдЯрд░ 4')} );
$ ("# рдХрдВрдЯреЗрдирд░")ред рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЯреЗрдореНрдкрд▓реЗрдЯ);
$ ("# configJson")ред рд╡реИрд▓ (JSON.stringify (рдпрд╣.model));
}
// рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рдмреИрдХ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдЦреАрдВрдЪрддрд╛ рд╣реИ
prevButton: рдлрд╝рдВрдХреНрд╢рди () {
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 3", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 3"))ред рд╡реИрд▓ ());
this.model.set ("рдкреИрд░рд╛рдореАрдЯрд░ 4", $ ("# рдкреИрд░рд╛рдореАрдЯрд░ 4")ред рд╡рд╛рд▓ ());
var рдЯреЗрдореНрдкрд▓реЗрдЯ = webwork.config.page1 ({configJson: $ ("# configJson")ред val (), рдкреИрд░рд╛рдореАрдЯрд░ 1: this.model.get ('рдкреИрд░рд╛рдореАрдЯрд░ 1'), рдкреИрд░рд╛рдореАрдЯрд░ 2: this.model .get ('рдкреИрд░рд╛рдореАрдЯрд░ 2')} );
$ ("# рдХрдВрдЯреЗрдирд░")ред рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЯреЗрдореНрдкрд▓реЗрдЯ);
$ ("# configJson")ред рд╡реИрд▓ (JSON.stringify (рдпрд╣.model));
}
рдЖрд░рдВрдн рдХрд░реЗрдВ: рдлрд╝рдВрдХреНрд╢рди () {
this.render ();
}
рд░реЗрдВрдбрд░: рдлрдВрдХреНрд╢рди () {
var рдЯреЗрдореНрдкрд▓реЗрдЯ = webwork.config.page1 ({configJson: $ ("# configJson")ред val (), рдкреИрд░рд╛рдореАрдЯрд░ 1: this.model.get ('рдкреИрд░рд╛рдореАрдЯрд░ 1'), рдкреИрд░рд╛рдореАрдЯрд░ 2: this.model .get ('рдкреИрд░рд╛рдореАрдЯрд░ 2')} );
$ ("# рдХрдВрдЯреЗрдирд░")ред рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдЯреЗрдореНрдкрд▓реЗрдЯ);
}
// рдпрд╣ рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ рдХреА рдПрдХ рдХрдбрд╝реА рд╣реИред рдЗрд╕ рддрддреНрд╡ рдХреЗ рдиреАрдЪреЗ рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рджреГрд╢реНрдп рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ред
рдПрд▓: '# рдореЗрдирдХреЙрдирдЯреЗрдирд░'
});
рд╡рд╛рдкрд╕реА {
рджреЗрдЦреЗрдВ: AppView
};
})

рд╕реЛрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреЛ рд╡реЗрдм-рд╕рдВрд╕рд╛рдзрди рдЯреИрдЧ рдореЗрдВ рдПрдЯрд▓рд╕рд┐рдпрди-рдкреНрд▓рдЧрдЗрди.рдПрдХреНрд╕рдПрдордПрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 <resource type="download" name="webwork-config-view.js" location="/js/webwork-config-view.js"/> 

рдмреИрдХрдмреЛрди рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ


src / main / Resources / js / webwork-soy-requirement-backbone.js
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ([
'рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд┐рдЧ / рд╡реНрдпреВ',
'рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд┐рдЧ / рдореЙрдбрд▓',
'Jquery',
'рд░реАрдврд╝',
'рдЕрдВрдбрд░рд╕реНрдХреЛрд░'
], рдлрд╝рдВрдХреНрд╢рди (webworkConfigView, webworkConfigModel, $, Backbone, _) {
var webworkConfigModel = new webworkConfigModel.Model (JSON.parse ($ ("# configJson")ред val ()));
var actionsView = рдирдпрд╛ рд╡реЗрдмрд╡рд░реНрдХрдХреЙрдиреНрдлрд╝рд┐рдЧреНрдпреВред рджреГрд╢реНрдп ({рдореЙрдбрд▓: webworkConfigModel});

})

рд╣рдорд╛рд░реЗ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреАред рд╣рдордиреЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛: рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд┐рдЧ / рд╡реНрдпреВ, рд╡реЗрдмрд╡рд░реНрдХ / рдХреЙрдиреНрдлрд┐рдЧ / рдореЙрдбрд▓, рдХреНрд╡реЗрд░реА, рдмреИрдХрдмреЛрди, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ред

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВред


Atlassian-plugin.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗрдм-рд╕рдВрд╕рд╛рдзрди рдЯреИрдЧ рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ:

 <transformation extension="soy"> <transformer key="soyTransformer"/> </transformation> <resource name="success-soy.js" type="download" location="/templates/webwork-config/configwebwork/success.soy"/> 

рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЛ js рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЛрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рд╕рдлрд▓рддрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ


рдореИрдВрдиреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реАрдВ

src / рдореБрдЦреНрдп / рд╕рдВрд╕рд╛рдзрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд╡реЗрдмрд╡рд░реНрдХ-рдХреЙрдиреНрдлрд┐рдЧрд░ / configwebwork / success.soy
 {namespace webwork.config} /** *      webwork.   json .       page1.    ,   json    backbone model. */ {template .formview} {@param configJson: string} {webResourceManager_requireResource('ru.matveev.alexey.jira.tutorial.webworkui.webwork-soy-require-backbone:webwork-soy-require-backbone-resources')} <html> <head> <meta charset="utf-8"/> <meta name="decorator" content="atl.admin"> <meta name="admin.active.section" content="admin_plugins_menu/telegram-config-section"> <meta name="admin.active.tab" content="telegram-general-config-item"> <title>my page page</title> </head> <body> <div id="maincontainer"> <div id="container"> <input class="text long-field hidden" type="text" id="configJson" name="configJson" placeholder="Json String" value="{$configJson}"> </div> </div> </body> </html> {/template} /** *    .   parameter1  parameter2. */ {template .page1} {@param configJson: string} {@param parameter1: string} {@param parameter2: string} <div id="container"> <form class="aui"> <div class="field-group"> <label for="parameter1">Parameter 1</label> <input class="text long-field" type="text" id="parameter1" name="parameter1" placeholder="Parameter1 value" value="{$parameter1}"> <div class="description">Value of Parameter 1</div> </div> <div class="field-group"> <label for="parameter2">Parameter 2</label> <input class="text long-field" type="text" id="parameter2" name="parameter2" placeholder="Parameter2 value" value="{$parameter2}"> <div class="description">Value of Parameter 2</div> </div> <div class="field-group"> <input class="text long-field hidden" type="text" id="configJson" name="configJson" placeholder="Json String" value="{$configJson}"> </div> <div class="buttons-container"> <div class="buttons"> <a class="cancel" href="#">Cancel</a> <input class="button submit" type="submit" value="Next" id="next-button"> </div> </div> </form> </div> {/template} /** *    .   parameter3  parameter4. */ {template .page2} {@param configJson: string} {@param parameter3: string} {@param parameter4: string} <div id="container"> <form class="aui" action="ConfigWebwork!save.jspa" method="POST"> <div class="field-group"> <label for="parameter1">Parameter 3</label> <input class="text long-field" type="text" id="parameter3" name="parameter3" placeholder="Parameter3 value" value="{$parameter3}"> <div class="description">Value of Parameter 3</div> </div> <div class="field-group"> <label for="parameter4">Parameter 4</label> <input class="text long-field" type="text" id="parameter4" name="parameter4" placeholder="Parameter4 value" value="{$parameter4}"> <div class="description">Value of Parameter 4</div> </div> <div class="field-group"> <input class="text long-field hidden" type="text" id="configJson" name="configJson" placeholder="Json String" value="{$configJson}"> </div> <div class="buttons-container"> <div class="buttons"> <input class="button submit" type="submit" value="Back" id="back-button"> <input class="button submit" type="submit" value="Save" id="config-save-button"> </div> </div> </form> </div> {/template} 

рдЖрд╡реЗрджрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг


рдкреНрд▓рдЧрдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:

atlas-run

рдЬреАрд░рд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ:

http://localhost:2990/jira/secure/ConfigWebwork.jspa

рдЖрдк рдирд┐рдореНрди рд╕реНрдХреНрд░реАрди рджреЗрдЦреЗрдВрдЧреЗ:



рдкреИрд░рд╛рдореАрдЯрд░ рднрд░реЗрдВ рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдирд┐рдореНрди рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ 3 рдФрд░ 4 рднрд░реЗрдВ рдФрд░ рд╕реЗрд╡ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдмреИрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдорд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi415809/


All Articles