存储和访问JIRA插件数据的最佳方法是什么?

时间:2018-03-30 05:26:00

标签: jira jira-plugin

我一直在探索Jira插件开发。

我有一个场景,我需要在后端存储用户特定的数据。将它视为一组输入字段(在右侧视图问题页面上),它会向用户询问一些信息,然后在用户保存时显示它。我不想将输入字段包含在标记中。我想通过AJS调用API(REST模块)来处理事情。请建议最佳方法。

即使经过各种文档和示例,我也找不到可靠的方法来做到这一点,但仍然存在一些混乱。

为了存储数据,我可以找到两种方法。我可以使用 PluginSettingsFactory ActiveObjects 。显然,这两个服务不能在REST模块中使用(如果我错了就纠正我。它会解决我的问题。

我想通过 ActiveObjects 方法。但我不确定我是否可以在JIRA插件中使用它,因为它是为Generic Confluence应用程序制作的。

让我们说是否可以在JIRA插件中使用ActiveObjects。我不知道如何使用AJS调用servlet的POST。如果有的话,请建议一种方法吗?

如果无法在JIRA插件中使用ActiveObjects,我无论如何都必须在servlet中使用PluginSettingsFactory,因为我很难在REST模块中使用PluginSettingsFactory。同样,我将不得不通过Servlet方法,我不知道如何使用AJS调用servlet的POST。

我知道这篇文章中有太多问题。

如果有的话,请提出建议?

1 个答案:

答案 0 :(得分:0)

您可以使用PluginSettingsFactory,至少我使用它

创建UserSettings类

@ExportAsService
@Component
public class UserSettings {


   private final PluginSettingsFactory pluginSettingsFactory;
   private String KEY="mykey"

   @Autowired
   public UserSettings(
        @ComponentImport PluginSettingsFactory pluginSettingsFactory,
   ) {

      this.pluginSettingsFactory = pluginSettingsFactory;

   }


   public void set(String namespace, string key, string value){
      PluginSettings pluginSettings = pluginSettingsFactory.createSettingsForKey(KEY + namespace);
      pluginSettings.put(key, value);
   }


   public String get(String namespace, name key){
      PluginSettings pluginSettings = pluginSettingsFactory.createSettingsForKey(KEY + namespace);
      pluginSettings.get(key);
   } 

}   

现在,您可以在REST模块中使用

Component
@Path("/path")
public class RestModule {

   private final UserSettings UserSettings;

   @Autowired
   public RestModule(
           UserSettings UserSettings
   ){
       this.userSettings = userSettings;
   }

   @POST
   @Path("{someParam}")
   @Produces({MediaType.APPLICATION_JSON})
   @Consumes({MediaType.APPLICATION_JSON})
   public Response getResponse(@PathParam("someParam") String someParam, RequestDataModel data)        
   {
      try {
            // Storing a value of data.someKey with key "someKey" in namespace someParam
            userSettings.set(someParam,"someKey", data.someKey);
      }
   }

}

免责声明:我没有专门编译和运行此代码,它是我的代码的简化版本,使用了这样的概念