• java.lang.ClassCastException: java.lang.String cannot be cast to com.openkm.bean.form.Select

  • OpenKM has many interesting features, but requires some configuration process to show its full potential.
OpenKM has many interesting features, but requires some configuration process to show its full potential.
Forum rules: Please, before asking something see the documentation wiki or use the search feature of the forum. And remember we don't have a crystal ball or mental readers, so if you post about an issue tell us which OpenKM are you using and also the browser and operating system version. For more info read How to Report Bugs Effectively.
 #41173  by rizkywib
 
Dear people,

i have error when i assign user using <select> option list. i want to get the value from option, then use the value to send email as an actor.
i attached the snapshot and .par file below.
thanks :D

forms.xml
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 2.4//EN"
                                "http://www.openkm.com/dtd/workflow-forms-2.4.dtd">
<workflow-forms>
  <workflow-form task="assignResign">
  	<input label="IT" name="ituser"></input>
 	<select name="superiors" label="List Superior">
 		<option label="Andy Permadi" value="andyperm" />
 		<option label="Andy Gunawan" value="andyguna" />
 		<option label="Usertest" value="usertest" />
 	</select>
    <button label="Next" name="next" />
  </workflow-form>
  
  <workflow-form task="appIT">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="appSup">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="processToFinance">
  	<button label="Approved" name="approve" />
  </workflow-form>
  
  <workflow-form task="financeClear">
  	<button label="Approved" name="approve" />
  </workflow-form>
</workflow-forms>
ActorSuperAssignHandler.Java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

import com.openkm.bean.form.Select;
//import com.openkm.bean.form.SuggestBox;

public class ActorSuperAssignHandler implements AssignmentHandler {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
		Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
		/*
		if (superiors != null) {
			assignable.setActorId(superiors.getName());
		} else {
			assignable.setActorId("okmAdmin");
		}*/
	}
}
actorSuperAction.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

import com.openkm.bean.form.Select;
//import com.openkm.bean.form.SuggestBox;

public class actorSuperAction implements ActionHandler {
	private static final long serialVersionUID = 1L;
	//public static String user="";

	@Override
	public void execute(ExecutionContext executionContext) throws Exception {
		Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
		
		//user = superiors.getValue();
		
		if (superiors != null) {
			executionContext.getContextInstance().setVariable("superiors", superiors.getName());
		}
		
	}
	
}
Code: Select all
<mail-node name="mailSuper" actors="#{superiors}">
		<subject>
			test mailSuper
		</subject>
		<text>
			test workflow OpenKM
		</text>
		<transition to="Superior" name="to Superior"></transition>
	</mail-node>
Attachments
(25.27 KiB) Downloaded 312 times
errorNext.png
errorNext.png (163.89 KiB) Viewed 6225 times
listUser.png
listUser.png (156.28 KiB) Viewed 6225 times
 #41178  by jllort
 
Attach also the complete stack trace error.

I advance to you I do not like this line:
Code: Select all
executionContext.getContextInstance().setVariable("superiors", superiors.getName());
I suspect you should add a new Select object.
 #41197  by jllort
 
You should do something like:
Code: Select all
Select superiors new Select();
// etc...
executionContext.getContextInstance().setVariable("setData", select);
I think you are trying to doing it ( see data="setData" , the select is used for mapping existing form element )
Code: Select all
select name="superiors" label="List Superior" data="setData">
       <option label="Andy Permadi" value="andyperm" />
       <option label="Andy Gunawan" value="andyguna" />
       <option label="Usertest" value="usertest" />
    </select>
 #41201  by rizkywib
 
i want to get the value from the select option. for example: i choose the Usertest in select option.
then i want to send an email to the Actor usertest. then what the step by step i must to do jllort?
please help me. i'm very confused :roll:
below i attached my code below.

forms.xml
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 2.4//EN"
                                "http://www.openkm.com/dtd/workflow-forms-2.4.dtd">
<workflow-forms>
  <workflow-form task="assignResign">
  	<input label="IT" name="ituser"></input>
 	<select name="superiors" label="List Superior" data="superiors" data="setData">
 		<option label="Andy Permadi" value="andyperm" />
 		<option label="Andy Gunawan" value="andyguna" />
 		<option label="Usertest" value="usertest" />
 	</select>
 
    <button label="Next" name="next" />
  </workflow-form>
  
  <workflow-form task="appIT">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="appSup">
  	<button label="Approved" name="approve" transition="accept" />
  </workflow-form>
  
  <workflow-form task="processToFinance">
  	<button label="Approved" name="approve" />
  </workflow-form>
  
  <workflow-form task="financeClear">
  	<button label="Approved" name="approve" />
  </workflow-form>
</workflow-forms>
actorSuperAction.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

import com.openkm.bean.form.Select;

public class actorSuperAction implements ActionHandler {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void execute(ExecutionContext executionContext) throws Exception {
		Select superiors = new Select();
		superiors.getName();
		executionContext.getContextInstance().setVariable("setData", superiors);		
	}
}
ActorSuperAssignHandler.java
Code: Select all
package openkm.workflow.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

import com.openkm.bean.form.Select;

public class ActorSuperAssignHandler implements AssignmentHandler {
	private static final long serialVersionUID = 1L;
	
	public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
	      Select superiors = (Select) executionContext.getContextInstance().getVariable("superiors");
	      
	      if (superiors != null) {
	         assignable.setActorId(superiors.getName());
	         executionContext.getContextInstance().setVariable("superiors", superiors);
	      } else {
	         assignable.setActorId("okmAdmin");
	      }
	}
}
catalina.log
Code: Select all
Caused by: org.jbpm.graph.def.DelegationException: com.openkm.bean.form.Select cannot be cast to java.lang.String
	at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:388)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.ProcessDefinition_$$_javassist_21.raiseException(ProcessDefinition_$$_javassist_21.java)
	at org.jbpm.graph.def.GraphElement.raiseException(GraphElement.java:379)
	at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:301)
	at org.jbpm.graph.node.MailNode.execute(MailNode.java:29)
	at org.jbpm.graph.def.Node.enter(Node.java:390)
	at sun.reflect.GeneratedMethodAccessor715.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.enter(Node_$$_javassist_58.java)
	at org.jbpm.graph.def.Transition.take(Transition.java:167)
	at org.jbpm.graph.def.Node.leave(Node.java:479)
	at org.jbpm.graph.def.Node.leave(Node.java:451)
	at org.jbpm.graph.node.Fork.execute(Fork.java:146)
	at org.jbpm.graph.def.Node.enter(Node.java:390)
	at sun.reflect.GeneratedMethodAccessor715.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.enter(Node_$$_javassist_58.java)
	at org.jbpm.graph.def.Transition.take(Transition.java:167)
	at org.jbpm.graph.def.Node.leave(Node.java:479)
	at org.jbpm.graph.node.TaskNode.leave(TaskNode.java:213)
	at sun.reflect.GeneratedMethodAccessor760.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Node_$$_javassist_58.leave(Node_$$_javassist_58.java)
	at org.jbpm.graph.exe.Token.signal(Token.java:223)
	at org.jbpm.graph.exe.Token.signal(Token.java:150)
	at sun.reflect.GeneratedMethodAccessor854.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.exe.Token_$$_javassist_91.signal(Token_$$_javassist_91.java)
	at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:490)
	at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:406)
	at com.openkm.module.common.CommonWorkflowModule.setTaskInstanceValues(CommonWorkflowModule.java:711)
	... 52 more
Caused by: java.lang.ClassCastException: com.openkm.bean.form.Select cannot be cast to java.lang.String
	at org.jbpm.mail.Mail.evaluate(Mail.java:399)
	at org.jbpm.mail.Mail.getRecipients(Mail.java:84)
	at org.jbpm.mail.Mail.send(Mail.java:177)
	at org.jbpm.mail.Mail.execute(Mail.java:76)
	at org.jbpm.graph.def.Action.execute(Action.java:129)
	at sun.reflect.GeneratedMethodAccessor793.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
	at org.jbpm.graph.def.Action_$$_javassist_70.execute(Action_$$_javassist_70.java)
	at org.jbpm.graph.def.GraphElement.executeAction(GraphElement.java:284)
	... 87 more

 #41208  by jllort
 
Must go step by step. Work with two task. On first one you show the form. On second task do nothing. On the transaction between first->second capture the Select ( variable ) and show from console ( System.out ) the value ( better debug ). I see so much actions for what you are doing.

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.