Jakarta ee Alfresco:ScriptTaskListener未执行javascript代码

Jakarta ee Alfresco:ScriptTaskListener未执行javascript代码,jakarta-ee,alfresco,Jakarta Ee,Alfresco,我正在alfresco中构建一个自定义工作流,我正在设置两个执行变量的值,如下所示 <startEvent id="startevent1" name="Start" activiti:formKey="swwf:AssignmentTask"> <extensionElements> <activiti:executionListener event="complete" class="org.alfresco.repo.workflo

我正在alfresco中构建一个自定义工作流,我正在设置两个执行变量的值,如下所示

<startEvent id="startevent1" name="Start" activiti:formKey="swwf:AssignmentTask">
      <extensionElements>
        <activiti:executionListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[logger.log("Log Start");
                        execution.setVariable('translator', task.getVariable(swwf_translator));
                        execution.setVariable('reviewer', task.getVariable(swwf_reviewer));]]></activiti:string>
          </activiti:field>
        </activiti:executionListener>
      </extensionElements>
</startEvent>

与启动任务对应的工作流模型中的类型为

        <type name="swwf:AssignmentTask" >
            <parent>bpm:startTask</parent>
             <associations>
                <association name="swwf:translator">
                    <title>Translator</title>
                    <source>
                        <mandatory>false</mandatory>
                        <many>false</many>
                    </source>
                    <target>
                        <class>cm:person</class>
                        <mandatory>false</mandatory>
                        <many>false</many>
                    </target>
                </association>
                <association name="swwf:reviewer">
                    <title>Reviewer</title>
                    <source>
                        <mandatory>false</mandatory>
                        <many>false</many>
                    </source>
                    <target>
                        <class>cm:person</class>
                        <mandatory>false</mandatory>
                        <many>false</many>
                    </target>
                </association>
          </associations>
        </type>

bpm:startTask
翻译
假的
假的
cm:人
假的
假的
审核人
假的
假的
cm:人
假的
假的

您对javascript没有被执行有多大把握

如果在
project name repo/src/main/amp/config/alfresco/module/project name repo
中没有如下适当的日志级别设置:
log4j.logger.org.alfresco.repo.jscript.ScriptLogger=DEBUG
,那么您可能无法在日志中获得任何输出

如果您感到困惑,无法验证是否正确加载了log4j.properties,请尝试
logger.error(“消息”)以确保js代码段是否正确执行

将信息/调试消息记录为错误是非常不可取的,事实上这违反了编码标准,因此在控制台中验证日志消息后,请确保返回到
logger.log()


我相当肯定你设置听众的方式有问题

activiti:executionListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
您正在调用executionListener,但为其分配了任务侦听器类。此外,“完成”是任务侦听器事件,而不是执行事件。如果您希望在提交开始表单时触发此事件,则需要将事件更改为“开始”。相反,应该是这样的:

activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
此外,正在运行的脚本也存在问题。我只是有基本相同的东西

  • task.getVariable(swwf\u translator)
    当您引用一个属性本身而不是它的内容(就像您在这里)时,您需要将该属性括在引号中。否则,任务将尝试获取一个变量,并将swwf_translator的值解释为引用不同变量的字符串。如下所示:
    task.getVariable(“swwf\u转换器”)
  • 您不能在开始事件中实际引用“任务”。这是因为启动事件基本上在流程开始之前,而不是一项任务。因此,试图以这种方式从中获取价值是行不通的。(这就是我的SO问题。请查看那里的回答。)
  • 如果您试图在流程中传递这些值,则可能需要使用方面。如果您使用这些字段创建一个方面,将其设置为开始任务的强制方面,并引用这些字段(确保您没有像我错误地引用方面本身),那么您在开始表单中输入的信息将自动放入执行级别。事实上,您还应该能够为其他表单下拉它,只需让它们也使用给定的方面,而不必编写task.setVariableLocal(xxx,execution.getVariable(xxx))之类的脚本
  • 我认为您试图设置执行值的方式通常不应该起作用(忽略上述原因)<代码>execution.setVariable('translator',task.getVariable(swwf_translator))而不是“translator”,您应该使用完整id“swwf_translator”,就像您对任务部分所做的那样

  • 为什么你这么肯定代码没有被执行?如果是因为看不到日志消息,也可能需要提高日志级别。默认情况下不会打印这些消息。我已经设置了log4j.properties以增加要调试的日志级别,@Basil您在说什么日志级别?根记录器?javascript记录器?你是如何设置log4j的?