====== xdataset_callback 가이드 ======
데이터셋 컬럼의 UpdateCallback Function 속성에 대한 샘플 화면이다.
Callback 속성을 이용하여 데이터셋으로부터 값을 가져올 때, 데이터셋으로 값을 설정할 때, 데이터에 대한 변경 처리가 가능하다.
Callback 함수의 파라미터는 여러가지 정보를 포함하고 있는 오브젝트가 전달되며, 세부 내용은 XDatasetGetCallback 함수 주석을 참조한다.
XDataSet의 getdata 함수에는 콜백 함수 무시 여부를 지정할 수 있는 옵션 파라미터가 제공된다.
===== 예시 =====
템플릿 위치: /HTML5/COMPONENT/XDATASET/websocket
템플릿 파일
* [[xf5projecthome>template/screen/HTML5/COMPONENT/XDATASET/xdataset_callback.xml|xdataset_callback.xml]]
* [[xf5projecthome>template/screen/HTML5/COMPONENT/XDATASET/xdataset_callback.js|xdataset_callback.js]]
* [[xf5projecthome>template/template.html?xframe_screen_url=/HTML5/COMPONENT/XDATASET/xdataset_callback|새창으로 실행]]
echo '';
echo '';
echo '';
==== 화면 스크립트 ====
function screen_on_load()
{
}
/**
* XDataset Column Callback용 예시 함수이다.
* @param objXDataSetCallbackInfo = {
bxdatasettoobj: false, // xDataSet에서 오브젝트로 데이터가 반영되는 순간인가?
strupdatedata: "", // Update되는 데이터
instxdataset: null, // xDataSet 인스턴스
nxdatasetrow: -1, // 대상 xDataSet Row
nxdatasetcolumn: -1, // 대상 xDataSet Column
instscreen: null, // 화면 인스턴스
instobject: null, // 대상 오브젝트 인스턴스
nrow: -1, // 대상 오브젝트가 그리드, 트리그리드, 멀티라인그리드 일경우 행인덱스
nsubrow: -1, // 대상 오브젝트가 멀티라인그리드일경우 Sub 행인덱스
ncolumn: -1 // 대상 오브젝트가 그리드, 트리그리드, 멀티라인그리드 일경우 열인덱스
}
* @returns {*} 변경된 값 또는 undefined (콜백 함수에서 값을 리턴하지 않은 경우에는 아무런 효과도 없음)
*/
function XDatasetGetCallback(objXDataSetCallbackInfo)
{
var strUpdateData, object_kind;
strUpdateData = objXDataSetCallbackInfo.strupdatedata;
if (objXDataSetCallbackInfo.bxdatasettoobj == true) {
// xdataset -> object
factory.consoleprint("xdataset의 값이 object로 반영되는 경우");
if (objXDataSetCallbackInfo.instobject != null) {
object_kind = objXDataSetCallbackInfo.instobject.getobjectkind();
if (object_kind == XFD_OBJKIND_XDATASET) {
factory.consoleprint("XDATASET 자체에 의해서 값을 구하는 경우, ID = " + objXDataSetCallbackInfo.instobject.getid());
}
else if (object_kind == XFD_OBJKIND_CONTROL) {
factory.consoleprint("컴포넌트에 의해서 값을 구하는 경우, Name = " + objXDataSetCallbackInfo.instobject.getname());
}
}
// strUpdateData는 오브젝트에 반영할 xDataSet의 변경된 데이터
return strUpdateData + "_get";
}
}
function XDatasetSetCallback(objXDataSetCallbackInfo) {
var strUpdateData, object_kind;
strUpdateData = objXDataSetCallbackInfo.strupdatedata;
if (objXDataSetCallbackInfo.bxdatasettoobj == false) {
// object -> xdataset
factory.consoleprint("object의 값이 xdataset에 반영되는 경우");
if (objXDataSetCallbackInfo.instobject != null) {
object_kind = objXDataSetCallbackInfo.instobject.getobjectkind();
if (object_kind == XFD_OBJKIND_XDATASET) {
factory.consoleprint("XDATASET 자체에 의해서 값을 반영되는 경우, ID = " + objXDataSetCallbackInfo.instobject.getid());
}
else if (object_kind == XFD_OBJKIND_CONTROL) {
factory.consoleprint("컴포넌트에 의해서 값을 반영되는 경우, Name = " + objXDataSetCallbackInfo.instobject.getname());
}
}
// strUpdateData는 xDataSet에 반영할 오브젝트의 변경된 데이터
return strUpdateData + "_set";
}
}
function btn_grid_data_get_on_mouseup(objInst)
{
factory.consoleprint("Data = [" + grdList.getitemtext(0, 1) + "]");
}
function btn_grid_data_set_on_mouseup(objInst)
{
grdList.setitemtext(0, 0, "BY_GRID");
}
function btn_xdataset_data_get_on_mouseup(objInst)
{
factory.consoleprint("Data = [" + DS_PRODUCT.getdata(0, 1) + "]");
factory.consoleprint("Data (Ignore Callback) = [" + DS_PRODUCT.getdata(0, 1, true) + "]");
}
function btn_xdataset_data_set_on_mouseup(objInst)
{
DS_PRODUCT.setdata(1, 0, "BY_XDATASET");
}
function btn_field_data_get_on_mouseup(objInst)
{
factory.consoleprint("Data = [" + fldData.gettext() + "]");
}
function btn_field_data_set_on_mouseup(objInst)
{
fldData.settext("BY_FIELD");
}