एडिटर ऐड-ऑन की अनुमति

Apps Script पर आधारित कई ऐप्लिकेशन के लिए अनुमति पाना आसान है, क्योंकि स्क्रिप्ट प्रोजेक्ट में, किसी व्यक्ति के इस्तेमाल करने की कोशिश करते समय, उन अनुमतियों के लिए कहा जाता है जो उसमें मौजूद नहीं हैं.

पुष्टि करने के लिए, एडिटर ऐड-ऑन कई वजहों से ज़्यादा जटिल:

  • जब कोई उपयोगकर्ता कोई फ़ाइल बनाता है, तो उपयोगकर्ता के इंस्टॉल किए गए सभी ऐड-ऑन, एक्सटेंशन मेन्यू में दिखते हैं. भले ही, उपयोगकर्ता ने उन ऐड-ऑन को अब तक अनुमति न दी हो.

  • ये ऐड-ऑन इसमें मौजूद फ़ाइलों पर काम करते हैं Google Drive, जिसे सहयोगियों के साथ शेयर किया जा सकता है. जिन सहयोगियों के पास Editor का एड-ऑन इंस्टॉल नहीं है उन्हें उन दस्तावेज़ों में यह एड-ऑन दिखता है जिनमें फ़ाइल बनाने वाले व्यक्ति ने इसका इस्तेमाल किया है.

  • एडिटर ऐड-ऑन, अपने-आप onOpen() काम करते हैं दस्तावेज़ के खुलने पर फ़ंक्शन काम करता है.

उपयोगकर्ता के डेटा को सुरक्षित रखने के लिए, अनुमति मोड लागू किए जाते हैं. इनकी वजह से, onOpen() के लिए कुछ सेवाएं उपलब्ध नहीं होतीं. इस गाइड से आपको यह समझने में मदद मिलेगी कि आपका कोड कब और कैसे कर सकते हैं.

अनुमति देने वाला मॉडल

एडिटर ऐड-ऑन का ऑथराइज़ेशन मोड, इन बातों पर निर्भर करता है उसकी स्थिति, जो इस पर निर्भर करती है कि उसका इस्तेमाल कौन कर रहा है: वह उपयोगकर्ता जिसने ऐड-ऑन इंस्टॉल किया है या सहयोगी के तौर पर मार्क किया जा सकता है.

एडिटर ऐड-ऑन की स्थितियां

एक्सटेंशन मेन्यू में मौजूद एडिटर ऐड-ऑन, इंस्टॉल किया गया हो, चालू किया गया हो या दोनों.

  • किसी खास यूआरएल के लिए, ऐड-ऑन इंस्टॉल किया गया है उपयोगकर्ता को या उनके एडमिन को Google Workspace Marketplace और इसे अपने Google डेटा को ऐक्सेस करने की अनुमति देना.
  • जब कोई व्यक्ति किसी दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट में ऐड-ऑन का इस्तेमाल करता है, तो वह ऐड-ऑन उसमें चालू हो जाता है.
  • जब लोग किसी फ़ाइल पर मिलकर काम करते हैं और उनमें से कोई एक व्यक्ति किसी ऐड-ऑन का इस्तेमाल करता है, तो वह ऐड-ऑन उस व्यक्ति के लिए इंस्टॉल हो जाता है और फ़ाइल के लिए चालू हो जाता है.

यहां दी गई टेबल में, इंस्टॉल किए गए और चालू किए गए वर्शन के बीच के अंतर के बारे में बताया गया है. ध्यान दें कि किसी स्क्रिप्ट को ऐड-ऑन के तौर पर टेस्ट करने पर, टेस्ट को इनमें से किसी एक या दोनों स्थितियों में चलाया जा सकता है.

इंस्टॉल किया गया चालू
इस पर लागू होता है उपयोगकर्ता दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट
इसके कारण स्टोर से ऐड-ऑन पाना ऐड-ऑन का इस्तेमाल करते समय, स्टोर से ऐड-ऑन हासिल करना दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट या
पहले से इंस्टॉल किए गए ऐड-ऑन का इस्तेमाल करके दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट
मेन्यू इन्हें दिखेगा सिर्फ़ वह उपयोगकर्ता, उन सभी दस्तावेज़ों, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट में उस दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन पर सभी मिलकर काम करने वाले लोग या स्प्रेडशीट
onOpen() के लिए अनुमति मोड
AuthMode.NONE (जब तक कि उसे चालू न किया गया हो. इस स्थिति में AuthMode.LIMITED)
AuthMode.LIMITED

अनुमति देने के तरीके

जब कोई उपयोगकर्ता कोई दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट खोलता है, तो Editor ऐड-ऑन का onOpen() फ़ंक्शन अपने-आप काम करना शुरू कर देता है. लोगों की निजता को सुरक्षित रखने के लिए डेटा है, तो Apps Script onOpen() फ़ंक्शन कर सकता है. एडिटर ऐड-ऑन की स्थिति यह तय करता है कि onOpen() फ़ंक्शन किस अनुमति मोड में चलेगा.

अगर फ़ाइल में, एडिटर ऐड-ऑन की सुविधा चालू है, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट, onOpen() इसमें चलता है AuthMode.LIMITED. अगर ऐड-ऑन चालू नहीं है और सिर्फ़ इंस्टॉल है, onOpen() AuthMode.NONE में चलता है.

AuthMode.NONE में, ऐड-ऑन कुछ सेवाएं तब तक मिलती हैं, जब तक उपयोगकर्ता कस्टम फ़ंक्शन पर क्लिक करने या उन्हें चलाने के लिए किया जा सकता है. अगर आपके ऐड-ऑन, onOpen() में इन सेवाओं का इस्तेमाल करने की कोशिश करता है, onInstall() या ग्लोबल स्कोप, अनुमतियां न हो पाने और दूसरे कॉल, जैसे कि मेन्यू भरने के बारे में ज़्यादा जानें, बंद करें. सिर्फ़ मदद पाने का विकल्प उपलब्ध है.

प्रतिबंधित सेवा कॉल चलाने के लिए, आपको AuthMode.FULL की अनुमति का इस्तेमाल करना होगा मोड. यूज़र इंटरैक्शन फ़ंक्शन, जैसे कि मेन्यू के विकल्प पर क्लिक करना, ये सिर्फ़ इस मोड में काम करते हैं. कोड के AuthMode.FULL मोड में चलने के बाद, ऐड-ऑन उन सभी दायरों का इस्तेमाल कर सकता है जिनके लिए उपयोगकर्ता ने अनुमति दी है.

Apps Script, अनुमति देने वाले मोड को पास कर देती है Apps Script की authMode प्रॉपर्टी के तौर पर इवेंट पैरामीटर, e; इसका मान Apps Script में e.authMode कॉन्स्टेंट से मेल खाता है ScriptApp.AuthMode enum.

अनुमति मोड, Apps Script को एक्ज़ीक्यूट करने के सभी तरीकों पर लागू होते हैं, इसमें, स्क्रिप्ट एडिटर, मेन्यू आइटम या Apps Script में सेव किए जाने वाले निर्देशों का पालन करना भी शामिल है google.script.run कॉल. हालांकि, e.authMode प्रॉपर्टी की जांच सिर्फ़ तब की जा सकती है, जब स्क्रिप्ट नतीजे के तौर पर चलती है ट्रिगर, जैसे कि onOpen(), onEdit() या onInstall(). कस्टम फ़ंक्शन अपने खुद के अनुमति मोड, AuthMode.CUSTOM_FUNCTION, का इस्तेमाल करते हैं. जो LIMITED से मिलता-जुलता है, लेकिन इसकी पाबंदियां थोड़ी अलग हैं. बाकी सभी मामलों में, स्क्रिप्ट AuthMode.FULL में चलती हैं, जैसा कि नीचे दी गई टेबल में बताया गया है.

NONE LIMITED CUSTOM_FUNCTION FULL
यह तब होता है, जब onOpen() (अगर उपयोगकर्ता ने कोई ऐड-ऑन इंस्टॉल किया है, लेकिन उसे दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट में चालू नहीं किया है) onOpen() (अन्य सभी समय)
onEdit() (सिर्फ़ Sheets में)
कस्टम फ़ंक्शन अन्य सभी समय, जिनमें ये शामिल हैं:
इंस्टॉल किए जा सकने वाले ट्रिगर
onInstall()
google.script.run
उपयोगकर्ता के डेटा का ऐक्सेस सिर्फ़ स्थान-भाषा सिर्फ़ स्थानीय भाषा सिर्फ़ स्थानीय भाषा हां
दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट का ऐक्सेस नहीं हां हां — सिर्फ़ पढ़ने के लिए हां
यूज़र इंटरफ़ेस का ऐक्सेस मेन्यू आइटम जोड़ना मेन्यू आइटम जोड़ना नहीं हां
Properties का ऐक्सेस नहीं हां हां हां
Jdbc, UrlFetch का ऐक्सेस नहीं नहीं हां हां
अन्य सेवाएं Logger
Utilities
ऐसी कोई भी सेवा जो उपयोगकर्ता का डेटा ऐक्सेस नहीं करती ऐसी कोई भी सेवा जो उपयोगकर्ता का डेटा ऐक्सेस नहीं करती सभी सेवाएं

एडिटर ऐड-ऑन के लिए अनुमति का लाइफ़साइकल

जब किसी मौजूदा उपयोगकर्ता के लिए ऐड-ऑन इंस्टॉल किया जाता है या मौजूदा फ़ाइल में चालू किया जाता है, तो उस फ़ाइल को खोलने पर, दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट के लिए ऐड-ऑन लोड हो जाता है. यह ऐड-ऑन है एक्सटेंशन मेन्यू में मौजूद होता है और सरल ट्रिगर onInstall(), onOpen() और onEdit(). अगर कोई उपयोगकर्ता किसी एक्सटेंशन मेन्यू आइटम पर क्लिक करता है, तो वह चल जाता है.

एडिटर ऐड-ऑन इंस्टॉल हो गया

जब स्टोर से कोई एडिटर ऐड-ऑन इंस्टॉल किया जाता है, तो onInstall() फ़ंक्शन AuthMode.FULL में चलता है. अनुमति देने वाले इस मोड में, ऐड-ऑन, मुश्किल सेटअप रूटीन चला सकता है. आपको यह भी करना चाहिए onInstall() का इस्तेमाल मेन्यू आइटम बनाने के लिए करें, क्योंकि दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन, या स्प्रेडशीट पहले से खुली है और आपका onOpen() फ़ंक्शन नहीं चला है. नीचे दिए गए सैंपल में, onInstall() फ़ंक्शन से onOpen() फ़ंक्शन को कॉल करने का तरीका बताया गया है:

function onInstall(e) {
  onOpen(e);
  // Perform additional setup as needed.
}

एडिटर ऐड-ऑन खुला है

जब कोई दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट खोली जाती है, तो वह हर Editor ऐड-ऑन को लोड करती है. ये ऐसे ऐड-ऑन होते हैं जिन्हें मौजूदा उपयोगकर्ता ने इंस्टॉल किया है या जिन्हें फ़ाइल में मिलकर काम करने वाले किसी व्यक्ति ने चालू किया है. साथ ही, यह उन सभी onOpen() फ़ंक्शन को कॉल करती है. ऐसा ऑथराइज़ेशन मोड जो onOpen() इस बात पर निर्भर करता है कि ऐड-ऑन इंस्टॉल या चालू किया गया हो.

अगर कोई ऐड-ऑन सिर्फ़ बुनियादी मेन्यू बनाता है, तो मोड का कोई फ़र्क़ नहीं पड़ता. नीचे दिया गया सैंपल बेसिक onOpen() फ़ंक्शन दिखाता है:

function onOpen(e) {
  SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
      .addItem('Insert chart', 'insertChart')
      .addItem('Update charts', 'updateCharts')
      .addToUi();
}

सेव की गई Apps Script के आधार पर डाइनैमिक मेन्यू आइटम जोड़ने के लिए प्रॉपर्टी, ताकि आप या अन्य उन्नत कार्यों को करने के लिए, आपको को अनुमति देने वाले मोड की पहचान करके, उसे सही तरीके से मैनेज करना चाहिए.

नीचे दिया गया सैंपल, एक बेहतर onOpen() फ़ंक्शन दिखाता है, जो अनुमति मोड के आधार पर कार्रवाई:

function onOpen(e) {
  var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem('Start workflow', 'startWorkflow');
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    var properties = PropertiesService.getDocumentProperties();
    var workflowStarted = properties.getProperty('workflowStarted');
    if (workflowStarted) {
      menu.addItem('Check workflow status', 'checkWorkflow');
    } else {
      menu.addItem('Start workflow', 'startWorkflow');
    }
  }
  menu.addToUi();
}

ध्यान दें कि AuthMode.LIMITED में काम करते समय, ऐड-ऑन साइडबार या डायलॉग नहीं खोल सकते. आपके पास मेन्यू आइटम इस्तेमाल करने का विकल्प है साइडबार और डायलॉग बॉक्स खोलने के लिए, क्योंकि ये AuthMode.FULL में चलते हैं.

कोई उपयोगकर्ता, एडिटर ऐड-ऑन चलाता है

जब कोई उपयोगकर्ता एक्सटेंशन मेन्यू आइटम पर क्लिक करता है, तो सबसे पहले Apps Script यह जांच करता है कि उपयोगकर्ता ने ऐड-ऑन इंस्टॉल किया है या नहीं. अगर नहीं किया है, तो उसे इंस्टॉल करने के लिए कहा जाता है. अगर उपयोगकर्ता ने ऐड-ऑन को अनुमति दी है, तो स्क्रिप्ट उस फ़ंक्शन को चलाती है जो AuthMode.FULL में मौजूद मेन्यू आइटम से जुड़ा है. कॉन्टेंट बनाने ऐड-ऑन को दस्तावेज़, फ़ॉर्म, प्रज़ेंटेशन या स्प्रेडशीट का इस्तेमाल किया जा सकता है.

ऐड-ऑन मेन्यू रेंडर न होने की समस्या हल करना

अगर आपका कोड अनुमति मोड को सही तरीके से मैनेज नहीं करता. उदाहरण के लिए:

  • कोई ऐड-ऑन, अनुमति देने के मौजूदा मोड के साथ काम न करने वाली Apps Script सेवा को चलाने की कोशिश करता है.

  • ऐड-ऑन, उपयोगकर्ता से पहले सेवा कॉल करने की कोशिश कर रहा है उससे इंटरैक्ट करता है.

उस सेवा कॉल को हटाने या फिर से व्यवस्थित करने के लिए जिसकी वजह से अनुमति से जुड़ी गड़बड़ियां हो रही हैं AuthMode.NONE, ये कार्रवाइयां करके देखें:

  1. अपने ऐड-ऑन के लिए Apps Script प्रोजेक्ट खोलें और onOpen() फ़ंक्शन ढूंढें.
  2. Apps Script के बारे में जानकारी पाने के लिए, onOpen() फ़ंक्शन खोजें या उनसे संबंधित सेवाएं या ऑब्जेक्ट, जैसे कि PropertiesService, SpreadsheetApp या GmailApp.
  3. अगर किसी सेवा का इस्तेमाल यूज़र इंटरफ़ेस (यूआई) एलिमेंट बनाने के अलावा किसी और काम के लिए किया जाता है, तो उसे हटा दें या टिप्पणी वाले ब्लॉक में रैप कर दें. सिर्फ़ इन तरीकों को शामिल करें: .getUi(), .createMenu(), .addItem(), और .addToUi(). साथ ही, ऐसी सभी सेवा को ढूंढें और हटाएं जो फ़ंक्शन से बाहर है.
  4. उन फ़ंक्शन की पहचान करें जिनमें पिछले चरण में टिप्पणी की गई या हटाई गई कोड लाइन हो सकती हैं. खास तौर पर, उन फ़ंक्शन की पहचान करें जो अपनी जनरेट की गई जानकारी का इस्तेमाल करते हैं. साथ ही, सेवा कॉल को उन फ़ंक्शन पर ले जाएं जिनमें इनकी ज़रूरत है. पिछले चरणों में किए गए बदलावों को लागू करने के लिए, अपने कोडबेस को फिर से व्यवस्थित करें या उसे फिर से लिखें.
  5. कोड सेव करें और टेस्ट डिप्लॉयमेंट बनाएं.

    टेस्ट डिप्लॉयमेंट बनाते समय, पक्का करें कि कॉन्फ़िगरेशन फ़ील्ड मौजूदा उपयोगकर्ता के लिए इंस्टॉल किया गया हो. साथ ही, कॉन्फ़िगरेशन बॉक्स के नीचे मौजूद टेक्स्ट में AuthMode.None में टेस्ट करें लिखा हो

  6. टेस्ट डिप्लॉयमेंट लॉन्च करें और एक्सटेंशन मेन्यू खोलें.

  7. अगर मेन्यू के सभी आइटम दिखते हैं, तो समस्या ठीक कर दी गई है. अगर आपको सिर्फ़ सहायता मेन्यू दिखता है, तो पहले चरण पर वापस जाएं. हो सकता है कि आपने सेवा से जुड़ा कोई कॉल छूट दिया हो.