cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

We are happy to announce the new Windchill Customization board! Learn more.

Call custom class

Stanley
1-Newbie

Call custom class

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?

1 ACCEPTED SOLUTION

Accepted Solutions

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();".

View solution in original post

4 REPLIES 4
MikeLockwood
22-Sapphire I
(To:Stanley)

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.

Top Tags