自定义Java Action
在 西门子Mendix 的现有功能之上添加 Java 的能力就像是 Java Geeks 蛋糕上的樱桃。另一方面,能够自定义现有代码对于初学者或像我这样对 Java 不太熟悉的人来说确实是一种祝福!
Community Commons Function Library模块为我们的应用程序提供了许多可重用的 Java 方法,这些方法可以从微流或其他自定义 Java Action 中调用。它们中的大多数是通用的,而少数是特定的,但我们有可能根据我们的需要调整它们。从这里开始全是 Java,但不用担心,我们已经掌握了!
用例场景
我将通过使用我遇到的示例引导您自定义 Java Action。
情况是根据另一个对象返回的“String”类型属性来设置“Enumeration”类型的属性 PrevStatus 的值。
方法
- 其中一种方法是通过多个决策活动使用“If-Else”来根据匹配的字符串分配枚举值。然而,有很多状态需要检查,而且这个解决方案还不够令人满意,无法继续完成所有的工作。
- 因此,出现了第二个想法:更聪明地工作,并寻找一个我们可以重用或适应的 java 操作。在 Community commons(从 Marketplace 下载)中有一个名为“EnumerationFromString”的操作。尽管我们使用此操作存在问题,因为默认情况下它已预先配置为返回/检查 LogLevel 的枚举(社区公共模块中的现有枚举)。不过,使用该操作感觉是正确的方法,我们决定根据我们所需的 Enum 类型调整 Java 代码中的值。
所以,让我们开始使用Java Action
下面看一下为设置 CaseFile 对象的 PrevStatus 而创建的 Microflow。第一个活动返回要用于 PrevStatus 的字符串值,接下来是名为“EnumerationFromString”的 Java Action,其中从第一个活动返回的值作为参数传递,最后一个是更改对象活动以设置 CaseFile 属性,其中PrevStatus 的值设置为从 Java 操作返回的枚举值。
第 1 步: 在 西门子Mendix 中打开“EnumerationFromString”Java Action 并将返回类型更改为所需的枚举类型。
第 2 步: 导航到项目目录中此操作的 Java 文件。
第 3 步: 打开 java 文件:大多数 java 文件是在Eclipse中编辑、编译和调试的,但如果您作为初学者不熟悉它,您可以在任何您熟悉的文件编辑器中打开此文件,以防出现任何错误,它们将在运行应用程序时显示。(在本例中,文件在Notepad++中打开)
Java Action 的代码如下所示:
在 java 文件中,只有在begin-end 代码块和导入之间编写的代码可以自定义并因此被执行,其他所有内容都将在运行时被覆盖。
第 4 步:如上图中 Begin Code 下的注释所述,我们可以将默认 LogLevel 替换为我们想要的 Enumeration。这很酷,对吧?
要为我们的枚举配置它,我们只需要进行一些调整:
a) 在顶部的导入部分,将“ communitycommons.proxies.LogLevel ”替换为“ main.proxies.Enum_CaseStatus ”(modulefolder.proxies.enumname)
您可以通过导航到 javasource 文件夹中模块的文件夹路径找到您的枚举,如下所示:
b) 下一步也是最后一步是用我们的枚举名称替换所有出现在 Begin 和 End Code 之间的“ LogLevel ”,我们刚刚在上面添加的那个
保存文件并在 Studio Pro 中启动/运行应用程序,以确保代码编译并检查所需的结果。
理解Java Action代码
a) 添加 Java Action 访问我们的 Enum。
b) 开始和结束代码之间存在的结果变量存储从函数“enumFromString”返回的结果,该函数接受 2 个参数:
- 枚举类(因为 Enum 是一个类,因此 EnumName.class 被传递)
- 以及需要转换的字符串。
该函数在名为“Misc”的现有社区公共 Java 文件中预定义(这就是在顶部导入 communitycommons.Misc 的原因)。最后,枚举值的名称作为结果返回。
结论
如果我们能试着更好地理解它,Java 就可以成为我们的朋友。希望这能让您了解如何在 西门子Mendix 中自定义 Java Action。记住一些事情还可以帮助您在可行的情况下修改其他 Java Action,甚至通过从现有队列中获取一些队列来创建自己的操作。
注意: 这是我如何处理特定场景的示例,可能有多种其他方法可以实现这一点,但使用和自定义 Java Action对我来说是一种学习。
思考
低代码结合传统开发的代码,是不是可以带来更好的效果了?