Hi Jenny,
Yes. I have written such code which can generate flow on the fly or programmatically. Below is a sample which can generate either an empty flow or a flow defaulted with try catch using trident sequence.
import com.wm.app.b2b.server.ns.Namespace;
import com.wm.lang.flow.FlowRoot;
import com.wm.lang.flow.FlowService;
import com.wm.lang.ns.NSName;
import com.wm.lang.ns.NSPackage;
import com.wm.lang.ns.NSService;
import com.wm.lang.ns.NSServiceType;
public void createEmptyFlow(NSName nsName, boolean createWithTryCatch) throws Exception {
Namespace ns = Namespace.current();
NSService service = createFlow(pkg, nsName, ns);
if (createWithTryCatch){
FlowRoot flowRoot = generateTryCatchCode();
if ((flowRoot != null) && (service != null)) {
((FlowService)service).setFlowRoot(flowRoot);
}
}
ns.makeNode(service);
}
private NSService createFlow(String pkg, NSName nsName, Namespace ns) throws Exception {
NSServiceType stype = NSServiceType.create("flow", "default");
NSPackage nsPkg = ns.getPackage(pkg);
NSService service = ns.createService(nsPkg, nsName, stype);
service.setPackage(nsPkg);
return service;
}
private FlowRoot generateTryCatchCode(){
// Try-Catch Sequence
Object[][] sqSuccess = {
{ "type", "SEQUENCE" },
{ "comment", "--- main ---" },
{ "exit-on", "SUCCESS" } };
Object[][] sqFailure = {
{ "type", "SEQUENCE" },
{ "comment", "--- try ---" },
{ "exit-on", "FAILURE" } };
Object[][] sqDone = {
{ "type", "SEQUENCE" },
{ "comment", "-- catch --" },
{ "exit-on", "DONE" } };
IData sqSuccessData = IDataFactory.create(sqSuccess);
IData sqFailureData = IDataFactory.create(sqFailure);
IData sqDoneData = IDataFactory.create(sqDone);
FlowSequence fss = new FlowSequence(Values.use(sqSuccessData));
FlowSequence ffs = new FlowSequence(Values.use(sqFailureData));
FlowSequence fds = new FlowSequence(Values.use(sqDoneData));
// Get Last Error Invoke
Object[][] getLastError = {
{ "type", "INVOKE" },
{ "comment", "" },
{ "service",
"pub.flow:getLastError" } };
IData getLastErrorData = IDataFactory.create(getLastError);
FlowInvoke getLastErrorInvoke = new FlowInvoke(Values.use(getLastErrorData));
fds.addNode(getLastErrorInvoke);
fss.addNode(ffs);
fss.addNode(fds);
// Root composition
Object[][] rootValues = { { "type", "ROOT" } };
IData flowRootData = IDataFactory.create(rootValues);
FlowRoot flowRoot = new FlowRoot(Values.use(flowRootData));
flowRoot.addNode(fss);
return flowRoot;
}
#Flow-and-Java-services#webMethods#Integration-Server-and-ESB