问题描述
下面是我的控制器
Controller<ClassA,ClassB,ClassC>* myController = new Controller<ClassA,ClassC>(*a,*b,*c);
myController->setValues(32.3);
double commonValue = myController->getValue();
Visualforce页面
public class FlowController {
public String flowResult {get; set;}
Map<String,Object> inputs = new Map<String,Object>();
public Integer ICP_Count {get; set;}
public String dbHtml {get; set;}
Flow.Interview.Flow_ICP_Component_Update_Workflow myFlow =
new Flow.Interview.Flow_ICP_Component_Update_Workflow (inputs);
public void start() {
myFlow.start();
ICP_Count = Integer.valueOf(myFlow.getvariableValue('ICP_Count'));
flowResult = 'Flow Completed';
}
}
当我第一次单击“ UpdateComponentWorkflow”按钮时,该流似乎运行良好,并更新了“已处理的ICP总数量”字段。但是,它不会更新“ FlowResult”。当我再次单击按钮时,出现以下错误
<apex:page controller="FlowController">
<apex:pageBlock title="ICP Component Flows">
<apex:form>
<apex:commandButton action="{!start}" value="UpdateComponentWorkflow" reRender="text"/>
<br></br>
<apex:outputLabel id="text">Total Icps Processed = {!ICP_Count}</apex:outputLabel>
<br></br>
<apex:outputLabel id="text3">FlowResult = {!flowResult}</apex:outputLabel>
</apex:form>
</apex:pageBlock>
</apex:page>
要使按钮再次起作用,我必须刷新页面。我的假设是流程(自动启动)未正确结束,或者与VF页面的生命周期有关。我想要一些指导。
编辑:我认为如果显示流程图会有所帮助
解决方法
问题在于您正在创建Flow的单例实例,该实例是在您首次单击按钮时启动的。然后,再次单击该按钮时,您将在Flow的同一实例上调用start()。
解决此问题的方法是每次单击按钮时实例化Flow,如下所示:
public class FlowController {
Flow.Interview.Flow_ICP_Component_Update_Workflow myFlow;
Map<String,Object> inputs = new Map<String,Object>();
public void start() {
myFlow = new Flow.Interview.Flow_ICP_Component_Update_Workflow(inputs);
myFlow.start();
}
}