0

我目前正在使用用于 SWF 的 PHP SDK。我成功地使用以下方法提取决策任务:

$result = $client->pollForDecisionTask(array(
    "domain" => "test",
    "taskList" => array(
        "name" => "mainTaskList"
    ),
    "identify" => "default",
    "maximumPageSize" => 50,
    "reverseOrder" => true
));

$activity_type_version = "1.0";

$task_token = $result["taskToken"];
$run_id = $result["workflowExecution"]["runId"];
$last_event = $result["events"][0]["eventId"];

if($last_event == "3"){
    $activity_type_name = "SlamStart";
}

然后,我尝试使用以下内容注册我完成的决策任务:

$result = $client->respondDecisionTaskCompleted(array(
    "taskToken" => $task_token,
    "decisions" => array(
        "decisionType" => "ScheduleActivityTask",
        "scheduleActivityTaskDecisionAttributes" => array(
            "activityType" => array(
                "name" => $activity_type_name,
                "version" => $activity_type_version
            ),
            "activityId" => "1",
            "control" => "something",
            "scheduleToCloseTimeout" => "300",
            "scheduleToStartTimeout" => "300",
            "startToCloseTimeout" => "300",
            "heartbeatTimeout" => "300",
            "taskList" => array(
                "name" => "mainTaskList"
            ),
            "input" => "test input"
        )
    )
));

echo "respondDecisionTaskCompleted call went through";

以上永远不会通过,最后一行echo永远不会到达。

为什么会这样?

4

1 回答 1

1

decisions属性将一个数组包裹在第二个数组中。代替

"decisions" => array(
    "decisionType" => "ScheduleActivityTask",
    "scheduleActivityTaskDecisionAttributes" => array(
        "activityType" => array(
            "name" => $activity_type_name,
            "version" => $activity_type_version
        ),
        "activityId" => "1",
        "control" => "something",
        "scheduleToCloseTimeout" => "300",
        "scheduleToStartTimeout" => "300",
        "startToCloseTimeout" => "300",
        "heartbeatTimeout" => "300",
        "taskList" => array(
            "name" => "mainTaskList"
        ),
        "input" => "test input"
    )
)

不得不将其更改为:

"decisions" => array(
    array(
        "decisionType" => "ScheduleActivityTask",
        "scheduleActivityTaskDecisionAttributes" => array(
            "activityType" => array(
                "name" => $activity_type_name,
                "version" => $activity_type_version
            ),
            "activityId" => "1",
            "control" => "something",
            "scheduleToCloseTimeout" => "300",
            "scheduleToStartTimeout" => "300",
            "startToCloseTimeout" => "300",
            "heartbeatTimeout" => "300",
            "taskList" => array(
                "name" => "mainTaskList"
            ),
            "input" => "test input"
        )
    )
)
于 2014-12-09T14:52:51.150 回答