다중 응답 출력 제어
사용자 입력을 얻기 위해 여러 단계를 포함하는 통제를 구현합니다.
다음 API를 사용하여 다중 출력 통제에 대한 컨텍스트 데이터를 구성합니다.
일반적인 사용 사례
- 선택기의 페이지 매김을 달성하려면 다음을 수행합니다. page_no, 다음/이전 버튼을 기준으로 인바운드에서 업데이트된 pagination_length 아웃바운드에서 읽습니다.
- 첫 번째 연도, 월, 날짜 선택과 같은 날짜 선택기의 단계별 응답입니다.
다음 API는 인바운드 및 아웃바운드 변환기에서만 사용할 수 있습니다.
sn_cs.VASystemObject.setProviderUserContext( key, contextData, providerAppId, providerUserId);
sn_cs.VASystemObject.getProviderUserContext(key, providerAppId, providerUserId);
sn_cs.VASystemObject.removeProviderUserContext(key, providerAppId, providerUserId);
sn_cs.VASystemObject.removeAllProviderUserContext(providerAppId, providerUserId)선택기 컨트롤의 아웃바운드 변환기는 사용자 contextData에 현재 페이지 세부 정보를 저장할 수 있습니다.
var paginationData = {
"page_index": 1,
"pagination_length": 2
}
};
sn_cs.VASystemObject.setProviderUserContext("picker_pagination", paginationData, providerAppId, providerUserId, );선택기 컨트롤의 인바운드 변환기는 사용자 contextData에서 현재 페이지 상세 정보를 가져올 수 있습니다.
var paginationData = sn_cs.VASystemObject.getProviderUserContext("picker_pagination", providerAppId, providerUserId);선택기 제어 아웃바운드 변환기에 대한 예제 코드
(function execute(inputs, outputs) {
var control = inputs.rich_control;
var payload = inputs.payload;
var appId = payload.appId;
var userId = payload.userId;
var paginationData = sn_cs.VASystemObject.getProviderUserContext('picker_control', appId, userId);
paginationData = JSON.parse(paginationData);
//First time when the outbound picker is called when selecting the topic.
if (paginationData == null) {
paginationData = {
'page_index': 1,
'pagination_length': 5
};
sn_cs.VASystemObject.setProviderUserContext('picker_control', paginationData, appId, userId);
}
var page_index = paginationData['page_index'];
var pagination_length = paginationData['pagination_length'];
var start = (page_index - 1) * pagination_length;
var end = page_index * pagination_length;
if (control['options']) {
var options = control['options'];
var optionsLength = options.length;
if (end > optionsLength)
end = optionsLength;
var picker = control["label"] + ":";
if (start > 0)
picker += "\n" + "*" + ": " + "prev";
for (var x = start; x < end; x++) {
gs.log("here " + x + " : " + options[x]);
picker += "\n" + (x + 1) + ": " + options[x].label;
}
if (end < optionsLength)
picker += "\n" + "#" + ": " + "next";
}
outputs.text_message = picker;
})(inputs, outputs);
Example Picker Control Inbound Tranformer
(function execute(inputs, outputs) {
var request_context = inputs.request_context;
var rich_control = inputs.rich_control;
var appId = request_context.appId;
var userId = request_context.userId;
var selectedValue = request_context["typed_value"];
var result = {};
result["value"] = "";
result["search_text"] = selectedValue;
var options = rich_control['options'];
var paginationData = sn_cs.VASystemObject.getProviderUserContext('picker_control', appId, userId);
paginationData = JSON.parse(paginationData);
switch (selectedValue) {
case 'prev': {
--paginationData["page_index"];
result["send_prev_control"] = true;
}
break;
case 'next': {
++paginationData["page_index"];
result["send_prev_control"] = true;
}
break;
default: {
var selectedIndex = Number(selectedValue) - 1;
if (paginationData["page_index"] != undefined && paginationData["pagination_length"] != undefined) {
var highestOptionInPage = paginationData["page_index"] * paginationData["pagination_length"];
if (selectedIndex >= 0 && selectedIndex < highestOptionInPage) {
var selectedOption = options[selectedIndex];
result["value"] = selectedOption.value;
result["search_text"] = "";
}
} else {
var selectedOption = options[selectedIndex];
result["value"] = selectedOption.value;
result["search_text"] = "";
}
}
}
sn_cs.VASystemObject.setProviderUserContext('picker_control', paginationData, appId, userId);
outputs.result = result;
})(inputs, outputs);