5.7 开发工作流图形定义工具
5.7.6 图形工具主界面程序
......(接前页)
//定义临时迁移数组
private TransitionRecords temptranarray=null;
private NodeClass nextnode=null;
//And Split过程逻辑节点的递归检查函数,如果存在嵌套或不对称则返回true
private bool AndNestedCheck(NodeClass tempnode)
{
//如果参数节点tempnode是逻辑节点
if(tempnode.NodeType == nodetypedefine.andsplit ||
tempnode.NodeType == nodetypedefine.andjoin ||
tempnode.NodeType == nodetypedefine.orsplit ||
tempnode.NodeType == nodetypedefine.orjoin)
{
//如果参数节点tempnode是andjoin则表示当前并行分支不存在嵌套
if(tempnode.NodeType == nodetypedefine.andjoin)
return false;
else
return true;
}
//如果参数节点tempnode不是逻辑节点,则递归检查其后继节点
else
{
temptranarray=transitionarray.GetFromNodeTransition(tempnode.NodeName);
//如果temptranarray为空,表示已经检查到end节点仍未发现逻辑节点,则表示不符合
//逻辑节点的对称性,返回true。
if(temptranarray == null)
return true;
else
{
nextnode=nodearray.GetNode(temptranarray.GetTransition(0).ToNode);//之所
//以使用GetTransition(0),是因为非逻辑节点的后继只有一个。
//递归检查
return AndNestedCheck(nextnode);
}
}
}
//orsplit递归检查
private TransitionRecords temptranarrayb=null;
private NodeClass nextnodeb=null;
private bool OrNestedCheck(NodeClass tempnode)
{
//如果参数节点tempnode是逻辑节点
if(tempnode.NodeType == nodetypedefine.andsplit ||
tempnode.NodeType == nodetypedefine.andjoin ||
tempnode.NodeType == nodetypedefine.orsplit ||
tempnode.NodeType == nodetypedefine.orjoin)
{
//如果参数节点tempnode是orjoin则表示当前并行分支不存在嵌套
if(tempnode.NodeType == nodetypedefine.orjoin)
return false;
else
return true;
}
//如果参数节点tempnode不是逻辑节点,则递归检查其后继节点
else
{
temptranarrayb=transitionarray.GetFromNodeTransition(tempnode.NodeName);
//如果temptranarrayb为空,表示已经检查到end节点仍未发现逻辑节点,则表示不符
//合逻辑节点的对称性,返回true。
if(temptranarrayb == null)
return true;
else
{
nextnodeb=nodearray.GetNode(temptranarrayb.GetTransition(0).ToNode);//之
// 所以使用GetTransition(0),是因为非逻辑节点的后继只有一个。
//递归检查
return OrNestedCheck(nextnodeb);
}
}
}//OrNestedCheck(NodeClass tempnode)
}//public class Form1
}//namespace drawtaskbytoolbar