startSession
startSession(String sessionID, 
boolean relyOnExistingSession,
boolean debug,
String interactiveChannel,
NameValuePairImpl[] audienceID,
String audienceLevel,
NameValuePairImpl[] parameters)
startSession 方法创建并定义运行时会话。startSession 可以至多触发五个操作:
*
*
*
*
将商品禁止数据装入到会话(如果 enableOfferSuppressionLookup 属性设置为 true)。
*
将分数覆盖数据装入到会话(如果 enableScoreOverrideLookup 属性设置为 true)。
startSession 方法需要以下参数:
*
sessionID - 用于标识会话标识的字符串。您必须定义会话标识。例如,您可以使用客户标识与时间戳记的组合。
要定义构成运行时会话的内容,必须指定一个会话标识。此值由客户机管理。同一会话标识的所有方法调用都必须由客户机同步。具有相同会话标识的并发 API 调用的行为是未定义的。
*
relyOnExistingSession - 一个布尔值,用于定义此方法是使用新会话还是现有会话。有效值为 truefalse。如果为 true,那么您必须为 startSession 方法提供现有会话标识。如果为 false,那么必须提供新会话标识。
如果将 relyOnExistingSession 设置为 true 并且存在某个会话,那么运行时环境将使用现有会话数据,并且不会重新装入任何数据,也不会触发细分市场划分。如果会话不存在,那么运行时环境将创建一个新会话,包括装入数据和触发细分市场划分。如果您的接触点的会话长度超过了运行时会话的长度,那么将 relyOnExistingSession 设置为 true 并且将其与所有 startSession 调用配合使用会很有用。例如,某个 Web 站点会员的生存时间是 2 小时,但是运行时会话的生存时间仅为 20 分钟。
如果您使用同一会话标识来调用 startSession 两次,那么在 relyOnExistingSession 为 false 的情况下,第一个 startSession 调用中的所有会话数据都将丢失。
*
debug - 用于启用或禁用调试信息的布尔值。 有效值为 truefalse。如果为 true,那么 Interact 会将调试信息记录到运行时服务器日志。将为每个会话单独设置一个调试标志。因此,您可以跟踪某一个别会话的调试数据。
*
interactiveChannel - 一个字符串,用于定义此会话引用的交互式渠道的名称。此名称必须与 Campaign 中定义的交互式渠道的名称精确匹配。
*
audienceID - 一组 NameValuePairImpl 对象,其中,名称必须匹配包含受众标识的任何表的物理列名称。
*
audienceLevel - 用于定义受众级别的字符串。
*
parameters - NameValuePairImpl 对象,用于标识需要与 startSession 一起传递的任何参数。 这些值存储在会话数据中,并且可以用于细分市场。
如果您对同一受众级别具有若干交互式流程图,那么必须包含所有表中所有列的超集。如果您配置运行时以装入概要文件表,并且概要文件表包含您需要的所有列,那么不需要传递任何参数,除非您希望覆盖概要文件表中的数据。 如果您的概要文件表包含必需列的子集,那么必须作为参数来包含缺失的列。
如果 audienceIDaudienceLevel 无效,并且 relyOnExistingSession 为 false,那么 startSession 调用将失败。如果 interactiveChannel 无效,那么 startSession 将失败,无论 relyOnExistingSession 为 true 还是 false。
如果 relyOnExistingSession 为 true,并且您使用同一 sessionID 来进行第二个 startSession 调用,但是第一个会话已过期,那么 Interact 将创建一个新会话。
如果 relyOnExistingSession 为 true,并且您使用相同 sessionID 但不同 audienceIDaudienceLevel 来进行第二个 startSession 调用,那么运行时服务器将更改现有会话的受众。
如果 relyOnExistingSession 为 true,并且您使用相同 sessionID 但不同 interactiveChannel 来进行第二个 startSession 调用,那么运行时服务器将创建一个新会话。
返回值
运行时服务器对应于 startSession,后者包含填充了以下属性的 Response 对象:
*
*
*
*
示例
以下示例显示了一种调用 startSession 的方法。
String sessionId="MySessionID-123";
String audienceLevel="Customer";
NameValuePair custId = new NameValuePairImpl();
custId.setName("CustomerId");
custId.setValueAsNumeric(1.0);
custId.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);
NameValuePair[] initialAudienceId = { custId };
boolean relyOnExistingSession=false;
boolean initialDebugFlag=true;
String interactiveChannel="Accounts Website";
NameValuePair parm1 = new NameValuePairImpl();
parm1.setName("SearchString");
parm1.setValueAsString("");
parm1.setValueDataType(NameValuePair.DATA_TYPE_STRING);

NameValuePair parm2 = new NameValuePairImpl();
parm2.setName("TimeStamp");
parm2.setValueAsDate(new Date());
parm2.setValueDataType(NameValuePair.DATA_TYPE_DATETIME);

NameValuePair parm3 = new NameValuePairImpl();
parm3.setName("Browser");
parm3.setValueAsString("IE6");
parm3.setValueDataType(NameValuePair.DATA_TYPE_STRING);

NameValuePair parm4 = new NameValuePairImpl();
parm4.setName("FlashEnabled");
parm4.setValueAsNumeric(1.0);
parm4.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);

NameValuePair parm5 = new NameValuePairImpl();
parm5.setName("TxAcctValueChange");
parm5.setValueAsNumeric(0.0);
parm5.setValueDataType(NameValuePair.DATA_TYPE_NUMERIC);

NameValuePair parm6 = new NameValuePairImpl();
parm6.setName("PageTopic");
parm6.setValueAsString("");
parm6.setValueDataType(NameValuePair.DATA_TYPE_STRING);

/** Specifying the parameters (optional) */
NameValuePair[] initialParameters = { parm1,
parm2,
parm3,
parm4,
parm5,
parm6
};

/** Make the call */
response = api.startSession(sessionId, relyOnExistingSession, initialDebugFlag,
interactiveChannel, initialAudienceId, audienceLevel, initialParameters);

/** Process the response appropriately */
processStartSessionResponse(response);
processStartSessionResponse 是一个用于处理 startSession 返回的响应对象的方法。
public static void processStartSessionResponse(Response response)
{
// check if response is successful or not
if(response.getStatusCode() == Response.STATUS_SUCCESS)
{
System.out.println("startSession call processed with no warnings or errors");
}
else if(response.getStatusCode() == Response.STATUS_WARNING)
{
System.out.println("startSession call processed with a warning");
}
else
{
System.out.println("startSession call processed with an error");
}

// For any non-successes, there should be advisory messages explaining why
if(response.getStatusCode() != Response.STATUS_SUCCESS)
printDetailMessageOfWarningOrError("StartSession",
response.getAdvisoryMessages());
}