...
在本教程中,我们将遵循开发插件的 指南 来开发我们的Amazon S3 Datalist Binder插件。 有关更多详细信息步骤,请参阅第一个教程 如何开发一个Bean Shell哈希变量插件。
1.什么问题?
我们要检索Amazon S3中的文件信息。
2.如何解决问题?
我们可以为此开发一个Datalist Binder插件或用户界面菜单插件。在本教程中,我们将开发一个 Datalist Binder插件 来检索文件信息并使用列表设计器填充它。
| Note |
|---|
Datalist Binder不适合用于此目的的插件类型,因为Amazon S3客户端API无法获取文件的总数,也无法支持排序,分页和过滤等数据列表操作。我们这样写是为了学习的目的,不鼓励生产使用,因为它会有性能问题。 更好的方法是开发一个用户视图菜单,该菜单可以将文件显示为树结构,并在扩展树时加载额外的文件。 |
3.你的插件需要什么输入?
要开发Amazon S3 Datalist Binder插件,我们需要提供如下输入:
...
我们将在这里做一些不同的事情,因为一些输入将被放置在属性文件中,并在需要时从属性文件中检索。请参考如何在 文件上传表单元素与Amazon S3集成。
4.你的插件的输出和预期结果是什么?
一个数据列表,它将根据配置列出Amazon S3存储桶中的文件。
5.是否有任何资源/ API可以重复使用?
6.准备你的开发环境
我们需要始终准备好我们的Joget工作流程源代码,并按照这个指导方针建立起来 。
...
用你最喜欢的IDE打开maven项目。我将使用 NetBeans。
7.只需编码!
a.扩展插件类型的抽象类
在“org.joget”包下创建一个“AmazonS3DatalistBinder”类。然后,使用org.joget.apps.datalist.model.DataListBinderDefault 抽象类来扩展 该类。请参阅 Datalist活页夹插件。我们还需要实现 org.joget.plugin.base.PluginWebSupport 接口类,以在插件属性页面中提供Ajax验证。请参考 Web服务插件。
b.实现所有的抽象方法
像往常一样,我们必须执行所有的抽象方法。我们将使用AppPluginUtil.getMessage方法来支持i18n,并使用常量变量MESSAGE_PATH作为消息资源包目录。
...
| Code Block | ||
|---|---|---|
| ||
public void webService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isAdmin = WorkflowUtil.isCurrentUserInRole(WorkflowUserManager.ROLE_ADMIN);
if (!isAdmin) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
String action = request.getParameter("action");
if ("validate".equals(action)) {
String message = "";
boolean success = true;
try {
AmazonS3DatalistBinder.getClient();
} catch (Exception e) {
LogUtil.error(this.getClassName(), e, "");
success = false;
message = StringUtil.escapeString(e.getMessage(), StringUtil.TYPE_JAVASCIPT, null);
}
try {
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("status", (success?"success":"fail"));
JSONArray messageArr = new JSONArray();
messageArr.put(message);
jsonObject.put("message", messageArr);
jsonObject.write(response.getWriter());
} catch (Exception e) {
//ignore
}
} else {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
} |
c.管理你的插件的依赖库
我们需要在我们的POM文件中包含“jsp-api”和“aws-java-sdk-s3”库。
| Code Block |
|---|
<!-- Change plugin specific dependencies here -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.10.56</version>
</dependency>
<!-- End change plugin specific dependencies here --> |
d。让你的插件国际化(国际化)
我们在getLabel和getDescription方法中使用i18n消息密钥。我们将在我们的属性选项定义中使用i18n消息密钥。然后,我们将需要为我们的插件创建一个消息资源包属性文件。
...
| Code Block |
|---|
org.joget.AmazonS3DatalistBinder.pluginLabel=Amazon S3 Datalist Binder org.joget.AmazonS3DatalistBinder.pluginDesc=Used to retrieve the available files in Amazon S3. AmazonS3DatalistBinder.config=Configure Amazon S3 Datalist Binder AmazonS3DatalistBinder.configureationFileIsMissing=AWS S3 configuration file is missing. AmazonS3DatalistBinder.bucketFilToCreate=AWS Bucket fail to create. AmazonS3DatalistBinder.key=Key AmazonS3DatalistBinder.path=Path AmazonS3DatalistBinder.filename=File Name AmazonS3DatalistBinder.owner=Owner AmazonS3DatalistBinder.md5=MD5 Hash AmazonS3DatalistBinder.size=Size AmazonS3DatalistBinder.storageClass=Storage Class AmazonS3DatalistBinder.lastModified=Last Modified AmazonS3DatalistBinder.folder=Folder |
...
e. 注册你的插件到Felix框架
接下来,我们将需要在Activator类(在同一个类包中自动生成)中注册我们的插件类,以告诉Felix框架这是一个插件。
| Code Block | ||
|---|---|---|
| ||
public void start(BundleContext context) {
registrationList = new ArrayList<ServiceRegistration>();
//Register plugin here
registrationList.add(context.registerService(AmazonS3DatalistBinder.class.getName(), new AmazonS3DatalistBinder(), null));
} |
...
f.建立它并测试
让我们建立我们的插件。构建过程完成后,我们将在“amazon_s3_datalist_binder / target”目录下找到一个“amazon_s3_datalist_binder-5.0.0.jar”文件。
然后,让我们上传插件jar到 管理插件。上传jar文件后,再次检查插件是否正确上传并激活。
...
按下确定。它的awsS3.properties 属性文件丢失或无效。将显示错误消息。
设计数据表。
检查结果。
8.再进一步,分享或出售
您可以从amazon_s3_datalist_binder_src.zip下载源代码 。
...


