इसके पीछे (इतना नहीं मैं स्वीकार करता हूं ...) हास्यास्पद प्रश्न एक वर्कअराउंड के बारे में एक वास्तविक सवाल है जिसका उपयोग मैं वास्तव में समझता हूं कि यह कैसे काम करता है।क्या होता है जब मैं गैस में "नींद" करता हूं? (निष्पादन समय सीमा वर्कअराउंड)
मैं बना सकते हैं और एक मेल मर्ज आवेदन में सौ दस्तावेजों के एक जोड़े ईमेल द्वारा भेज दिया:
सबसे पहले मेरी उपयोग के मामले का एक संक्षिप्त विवरण है, यह सब UiApp साइडबार में प्रदर्शित बाध्य एक दस्तावेज में हो रहा है जीएएस में लिखा है। यह पाठ्यक्रम लंबे समय तक भी 5 मिनट के निष्पादन समय सीमा तक पहुंच गए तो मैं कुछ अलग समाधान की कोशिश की कार्य करवाने के लिए बिना एक बैच में संसाधित करने के लिए की लेता है:
- एक समय स्टाम्प (ScriptProperties में संग्रहीत) का उपयोग करते हैं मैं प्रक्रिया शुरू करता हूं और जब मैं सीमा के पास एक पूर्वनिर्धारित मूल्य तक पहुंचता हूं तो मैं वर्तमान मान (पॉइंटर्स, उपयोगी वर्र्स ...) संग्रहीत करता हूं और उपयोगकर्ता इंटरफ़ेस पर वापस लौटने के लिए उपयोगकर्ता को जारी रखने के लिए लौटता हूं (या नहीं)। यह बहुत अच्छी तरह से काम करता है लेकिन पूरे कार्य को पूरा करने के लिए मानव कार्रवाई की आवश्यकता है।
- इसलिए मैंने टाइमर ट्रिगर का उपयोग करके एक समाधान स्थापित किया है जिसे मैंने पहले हैंडलर कॉल में बनाया है और यह ट्रिगर दस्तावेज़ निर्माण/प्रेषण समारोह को कॉल करता है। यह अच्छी तरह से काम कर रहा है लेकिन फ़ंक्शन नामक ट्रिगर यूआई के साथ बातचीत करने में सक्षम नहीं है क्योंकि ऐसा लगता है कि केवल हैंडलर फ़ंक्शन यूआई अपडेट कर सकते हैं। समस्या यह है कि प्रक्रिया प्रगति समाप्त होने पर मैं प्रगति नहीं दिखा सकता और न ही आसानी से दिखा सकता हूं।
- तब मुझे एक छोटा सा ऐप याद आया जो कुछ समय पहले बस मजेदार के लिए लिखा था: यह एक टाइमर था जो एक सर्वर हैंडलर ट्रिगर के रूप में चेकबॉक्स का उपयोग करता था (पुराने विचार पर रोमेन वायालार्ड द्वारा बहुत पहले सुझाए गए विचार से) और निर्णय लिया मेरे मेल भेजने की प्रक्रिया में इस चाल को आजमाने के लिए।
यह पूरी तरह से काम करता है, मैं 40 दस्तावेजों बैचों प्रत्येक कॉल (लगभग 3 मिनट के दौरान) है तो थोड़ी देर के लिए रोक सकते हैं और जब तक वह पूरा हो जाता है फिर से शुरू की प्रक्रिया। प्रत्येक कॉल चेकबॉक्स लिंक किए गए सर्वर हैंडलर द्वारा ट्रिगर किया जाता है, चेक बॉक्स स्वयं हैंडलर फ़ंक्शन में बदल जाता है, जिससे इस तरह अपना ट्रिगर बन जाता है।
मेरा प्रश्न (अंत में ;-) है: यह जानकर कि पूरी प्रक्रिया में 30 से 60 मिनट लग सकते हैं, यह कितना सटीक है? इन सर्वर हैंडलर फ़ंक्शन को एकाधिक प्रक्रिया के रूप में क्यों माना जाता है क्योंकि वे फ़ंक्शन के अंदर से बनाए जाते हैं?
मुझे आशा है कि मैं काफी स्पष्ट है, (जो मुझे शक है के बाद से यह थोड़ा मेरे मन में भ्रमित :-)
मैं घड़ी परीक्षण ऐप है कि मुझे विचार दिया कोड के नीचे में शामिल होने है हूँ, यह शायद चीजों को समझने में आसान बना देगा।
function doGet() {
var app = UiApp.createApplication().setTitle('Counter/Timer');
var Panel = app.createAbsolutePanel().setStyleAttribute('padding','35');
var counter = app.createHTML().setId('counter').setHTML('<B>Timer = wait</B>').setStyleAttribute('fontSize','40px');// set start display
var clo = app.createTextBox().setName('clo').setId('clo').setValue('0').setVisible(false);//set start value in seconds
var handler1 = app.createServerHandler('doSomething').addCallbackElement(Panel);
var chk1 = app.createCheckBox('test1').addValueChangeHandler(handler1).setVisible(true).setId('chk1').setVisible(false);
app.add(Panel.add(chk1).add(counter).add(clo));
chk1.setValue(true,true);// start the process
return app}
function doSomething(e) {
var app = UiApp.getActiveApplication();
var xx = Number(e.parameter.clo);
var disp = app.getElementById('counter')
xx++ ;// replace by xx-- to count downwards
if(xx>600){ // 10 minutes timeout for example
disp.setHTML('<B> GAME OVER ;-)</B>').setStyleAttribute('fontSize','80px').setStyleAttribute('color','RED')
return app
}
var cnt = app.getElementById('clo').setValue(xx)
disp.setHTML('<B>'+T(xx)+'</B>')
Utilities.sleep(1000); // instead of sleeping do something !
// below comes the "active" part
var chk1 = app.getElementById('chk1').setValue(false,false)
var chk1 = app.getElementById('chk1').setValue(true,true)
return app;
}
function T(val){
var min = parseInt(val/60);
var sec = val-(60*min);
if(sec<10){sec='0'+sec}
if(min<10){min='0'+min}
var st = '> '+min+':'+sec
return st
}
हालांकि यह प्रश्न बहिष्कृत यूआई सेवा का उपयोग करता है, तो आप HTML सेवा का उपयोग करके एक ही प्रभाव को पूरा कर सकते हैं। [ब्रूस मैकफेरसन ने इसके बारे में ब्लॉग किया है।] (Http://ramblings.mcpher.com/Home/excelquirks/htmlservice/parallel) – Mogsdad