Jmix BPM add-on咨询

@bryanyin 你好,
我下载试用了jmix和bpm插件,参考QuickStart实现了简单demo,感觉非常棒。
现在有两个疑问,想向你请教:
1.bpm插件可以更改么?比如,我想实现一个流程打印的功能,我能修改bpm插件的页面或新增页面来实现么?
2.官方文档比较少,有收费文档或demo提供么?

请不吝指导,谢谢

  1. 可以扩展现有界面,包括 Jmix core 里面的界面和 addon 的界面:
    image

  2. 文档没有收费的,不过现在的文档确实还没有完善,你觉得还少了哪些内容? demo 方面有什么需求?

谢谢回复。

  1. Extend an existing screen我试了一下,一直报错:
2021-08-17 11:08:43,750 [75150164]   WARN - ndling.DefaultExceptionHandler - Studio error: 
groovy.lang.MissingPropertyException: No such property: caption for class: SimpleTemplateScript22
	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:65)
	at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:51)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:309)
	at SimpleTemplateScript22.run(SimpleTemplateScript22.groovy:1)
	at groovy.text.SimpleTemplateEngine$SimpleTemplate$1.writeTo(SimpleTemplateEngine.java:176)
	at com.haulmont.jmixstudio.backend.TemplateEngine.processString(TemplateEngine.java:159)
	at com.haulmont.jmixstudio.backend.TemplateEngine.processString(TemplateEngine.java:118)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.generateFile(ScreenCreator.java:291)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.createScreen(ScreenCreator.java:226)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.lambda$generateScreens$0(ScreenCreator.java:122)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:828)
	at com.haulmont.jpb.util.EntityUtil.ra(EntityUtil.java:971)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.generateScreens(ScreenCreator.java:111)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.create(ScreenCreator.java:99)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$compute$3(WriteCommandAction.java:160)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$1(WriteCommandAction.java:143)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:936)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.lambda$doRunWriteCommandAction$2(WriteCommandAction.java:141)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:216)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:182)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.doRunWriteCommandAction(WriteCommandAction.java:150)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.run(WriteCommandAction.java:117)
	at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.compute(WriteCommandAction.java:160)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.ScreenCreator.createInWriteCommandAction(ScreenCreator.java:105)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.CreateScreenActionProcess$createAndShowScreenWizard$1.accept(CreateScreenActionProcess.kt:105)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.CreateScreenActionProcess$createAndShowScreenWizard$1.accept(CreateScreenActionProcess.kt:39)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$runEdtProgressWriteAction$11(ApplicationImpl.java:900)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:183)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:170)
	at com.intellij.openapi.progress.util.PotemkinProgress.runInSwingThread(PotemkinProgress.java:197)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$runEdtProgressWriteAction$12(ApplicationImpl.java:900)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteActionWithClass(ApplicationImpl.java:924)
	at com.intellij.openapi.application.impl.ApplicationImpl.runEdtProgressWriteAction(ApplicationImpl.java:898)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteActionWithNonCancellableProgressInDispatchThread(ApplicationImpl.java:879)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.haulmont.jmixstudio.intellij.util.SApplicationExUtils.runWriteActionWithProgressInDispatchThread(SApplicationExUtils.java:60)
	at com.haulmont.jmixstudio.intellij.util.SApplicationExUtils.runWriteActionWithNonCancellableProgressInDispatchThread(SApplicationExUtils.java:37)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.CreateScreenActionProcess.createAndShowScreenWizard(CreateScreenActionProcess.kt:99)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.CreateScreenActionProcess.access$createAndShowScreenWizard(CreateScreenActionProcess.kt:39)
	at com.haulmont.jmixstudio.intellij.action.creation.template.cuba.CreateScreenActionProcess$run$2.invokeSuspend(CreateScreenActionProcess.kt:56)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:214)
	at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:196)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:350)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:133)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:189)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:886)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:755)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:442)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:825)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:441)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:487)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

2.我个人比较关心自定义UI这方面的内容,DEMO就是上个帖子说的BPM定制方面的,给BPM添加全流程展示、打印等国人偏好的功能。另外,像BPM和Map这种收费插件,有没有JavaDoc,详细说明所有属性/方法等。

再次感谢

我查了一下官方Training,有3个比较感兴趣:
image
image
image

这些培训有中文版么?
如果没有中文培训,英文培训提供录像和文档等可反复观看的资料么?