doSave와 같은 저장 함수를 이용하면, 저장 완료 후 시트가 갱신되며, 기존의 포커스를 잃고 최상단으로 스크롤이 이동됩니다.
이때, 임의의 외부 변수를 두어 현재 행(Row) 객체를 담아두고, 조회가 완료된 뒤 동작하는 이벤트 onSearchFinish에서 추출한 행(Row) 객체를 이용하여 스크롤을 저장하기 전 위치로 이동할 수 있습니다.
//임의의 행 객체를 담을 변수
var tempRow = null;
//스크롤의 위치를 담을 변수
var tempScroll = null;
//저장 기능 이용 시, 임의의 function save
function save() {
//변수가 비어 있을 경우, 마지막 focus
if(tempRow == null) {
tempRow = sheet.getFocusedRow();
tempScroll = sheet.getScrollTop();
}
sheet.doSave();
}
//조회 후 동작하는 이벤트
onSearchFinish: function(evt) {
if(tempRow != null) {
//시트의 포커스를 저장 전에 위치하던 행(Row)로 지정,
//현재의 Row객체와 저장한 Row객체는 다른 객체이기 때문에 동일한 값을 가지는 id로 행(Row) 객체 호출
evt.sheet.focus(evt.sheet.getRowById(tempRow.id));
//저장 전에 위치했던 위치로 이동시킵니다.
evt.sheet.setScrollTop(tempScroll);
//스크롤 이동 후, 변수 초기화
tempRow = null;
tempScroll = null;
}
}