2012-11-02 4 views
1

스프레드 시트의 Google App 스크립트 양식에서 일부 사용자 입력을 개인 캐시에 저장하려고합니다. 여기 서버 처리기에서 캐시 사용

는 테스트 스크립트입니다 : 나는 메뉴 버튼을 클릭하면

var cache = CacheService.getPrivateCache(); 

function onLoad() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(), 
     entries = [{ 
     name : "Show form", 
     functionName : "showForm" 
     }]; 
    sheet.addMenu("Test Menu", entries); 
} 

function showForm() { 
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(), 
     app = UiApp.createApplication(), 
     setButton = app.createButton("Set"), 
     setHandler = app.createServerClickHandler('setTest'); 

    setButton.addClickHandler(setHandler); 
    app.add(setButton); 
    spreadsheet.show(app); 
} 

function setTest(event) { 
    cache.put("test", "test", 7200); 

    Browser.msgBox("Test was set: " + cache.get("test") + ". Use the getTest cell formula to test the cache."); 
} 

function getTest() { 
    var result = cache.get("test"); 

    return result; 
} 

는, 형태가 나타나고 서버 핸들러에서 캐시 값을 설정합니다. 그런 다음 셀에서 = getTest()를 사용하여 캐시에서 값을 가져 오려고합니다. 캐시가 값 "test"를 리턴 할 것으로 기대하지만 null을 리턴하는 것으로 보입니다.

내가 여기에이 문제를 시작

: http://code.google.com/p/google-apps-script-issues/issues/detail?id=2039

그리고 나는 또한 다른 유사한 하나 발견 : 캐시에 폼에 약간의 사용자 입력을 저장하고 서로에 액세스 할 수 있도록 노력 http://code.google.com/p/google-apps-script-issues/issues/detail?id=1804

을 나중에 작동합니다.

제안 사항?

+0

메시지 상자에 올바른 값이 표시되어 있습니까? – Srik

+0

캐시 값을 확인하는 팝업창이 실제로 setTest 함수에서 설정되었다는 메시지 상자 (msgBox)에 대해 말하면 yes입니다. – adrianb

답변

0

사용자 지정 함수는 범위가 제한되어 있으며 몇 가지 선택 서비스에만 액세스 할 수 있습니다. 그들의 한계에 대해 더 읽으십시오 here.

캐시의 경우 조금 까다 롭습니다. 캐싱은 "스크립트 범위"입니다. 따라서 캐시가 서버 처리기 스크립트 범위에서 먼저 액세스 될 때 더 많은 권한을 가지며 사용자 정의 함수가 실행되는 스크립트 범위와 다른 UiApp로 실행됩니다. 따라서 캐시는 두 범위간에 공유되지 않습니다.

사용자 지정 함수에서 설정 한 캐시 된 항목은 다른 사용자 지정 함수에서 액세스 할 수 있지만이 캐시는 이러한 경계를 벗어날 수 없습니다.

이론적으로 이것을 ScripProperties에 저장할 수는 있지만 매우 어색하고 이러한 기능을 잘못 사용하게되며 모든 사용자에게 공유됩니다. 당신이 깊이 조금 더 유스 케이스를 설명 할 수있는 경우

ScriptProperties.setProperty("test", "test") 

var result = ScriptProperties.getProperty("test"); 

는, 아마도 우리는 몇 가지 다른 솔루션을 제공 할 수 있습니다.

+0

유스 케이스는 사용자가 일부 자격 증명을 입력하고 저장 한 다음 해당 자격 증명을 사용하여 사용자 정의 함수가 REST 호출을하도록 양식을 팝업하는 것이 었습니다. – adrianb

+0

Ah. 사용자 정의 함수에 전달해야 할 수도 있습니다. 민감한 데이터는 안전하지 않을 수도 있습니다. 또는 사용자 정의 메뉴를 사용하여 필요할 때 셀에 데이터를 설정할 수 있습니다. –