Community Tip - Need to share some code when posting a question or reply? Make sure to use the "Insert code sample" menu option. Learn more! X
Hi all,
I wrote a workflow expression but it was quite long.
So I used javac to create package and store it in proper dir inside codebase/ext.
But when I'm calling my class via expression in workflow manager I get error class not found.
Checking Syntax...
e:\Windchill_9.0\Windchill\temp\WfExpression269020934.java:40: package com does not exist
ext.workflow.myClass(primaryBusinessObject);
^
1 error
Syntax check complete.
Can you help me, please?
Solved! Go to Solution.
What are you expecting to get by this code?
To get class instance you shoud write "new ext.test.TestingClass();
",
To call method "ext.test.TestingClass.main();
".
Here's an example of a call to a custom class that we use.
Code In workflow Template Activity, on Start Transition
//Add pBONumber to Assignment names
ext.alcon.workflow.WorkflowHelper.replaceInAssignmentName(self, "\\{pBONumber}", pBONumber);
custom class location
D:\PTC\Windchill_10.1\Windchill\codebase\ext\alcon\workflow\WorkflowHelper.class
Called Method in custom class
/**
* Replace a given string with another given string in the names of the assignments associated with the given pBO.
*/
public static void replaceInAssignmentName(WTObject primaryBusinessObject, String replaceThis, String withThat) {
try {
Enumeration processes = WfEngineHelper.service.getAssociatedProcesses(primaryBusinessObject,null,((WTContained)primaryBusinessObject).getContainerReference());
while(processes.hasMoreElements()) {
WfProcess process = (WfProcess) processes.nextElement();
QueryResult nodes = process.getContainerNodes();
while(nodes.hasMoreElements()){
WTObject wtObj = (WTObject) nodes.nextElement();
LocalizableMessage wtObjDispTypeLM = wtObj.getDisplayType();
String wtObjDispType = wtObjDispTypeLM.getLocalizedMessage(wt.session.SessionHelper.manager.getLocale());
String wtObjName = null;
if(wtObjDispType.contains("Wf Assigned Activity")){
wtObjName = ((WfActivity)wtObj).getName();
String wtObjNewName = wtObjName.replaceFirst(replaceThis, withThat);
((WfActivity)wtObj).setName(wtObjNewName);
PersistenceHelper.manager.save((Persistable) wtObj);
}
}
PersistenceHelper.manager.save((Persistable) process);
}
}
catch(WTException e) {
e.printStackTrace();
LOGGER.error("Error while adding PBONumber to Assignment Name: " + e);
}
}
Thanks for your reply.
Did you use standard Javac or Rational Rose?
I wrote simple TestingClass.java
package ext.test;
import java.io.File;
import java.io.FileWriter;
public class TestingClass {
public static void main (String[] args) {
try {
FileWriter outputStream = new FileWriter("C:\\test\\helloworld.txt");
for (int i = 0; i < 25; i++) {
outputStream.write("Hello World!" + "\r\n");
}
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Placed it inside of <wc.home>\codebase\ext\test
compiled using javac ext\test\TestingClass.java
<wc.home>\codebase\ext\test\TestingClass.class was created
Then I used my class in Workflow Expression
try {ext.test.TestingClass();
} catch (Exception e) {
e.printStackTrace();
}
syntax check returned
Checking Syntax...
e:\Windchill_9.0\Windchill\temp\WfExpression269079314.java:39: package ext does not exist
ext.test.TestingClass();
^
1 error
Syntax check complete.
I catched similar exception at runtime
What are you expecting to get by this code?
To get class instance you shoud write "new ext.test.TestingClass();
",
To call method "ext.test.TestingClass.main();
".
Thanks a lot, it's functional now.
Beginners mistake.
It was only testing class, and not functional I think.
Now I can move all my expressions into own class(es), yippee.