मैंने शेयरपॉइंट ऑनलाइन के लिए एक कस्टम एक्शन रिबन बटन बनाया है और जब बटन क्लिक किया जाता है तो मैं जावास्क्रिप्ट कोड चलाने के लिए चाहता हूं।

शेयरपॉइंट दस्तावेज़ीकरण इसका एक उदाहरण भी प्रदान करता है: https://docs.microsoft.com/en-us/sharepoint/dev/schema/commanduihandler-element?redirectedfrom=MSDN#example

लेकिन जब मैं कोशिश कर रहा हूं तो यह हमेशा एक त्रुटि देता है कस्टम एक्शन यूआरएल "http:", "https:", "~appWebUrl" या "~remoteAppUrl" से शुरू होना चाहिए।

दस्तावेज़ीकरण का एक अन्य भाग कहता है कि यह संभव नहीं है https://docs.microsoft.com/en-us/sharepoint/dev/sp -ऐड-इन्स/शेयरपॉइंट-ऐड-इन्स-यूएक्स-डिजाइन-दिशानिर्देश?redirectedfrom=MSDN#figure-4-a-custom-action-in-the-contextual-मेनू

तो मैं इसे कैसे काम करूं? अब संभव नहीं है और केवल पुनर्निर्देशन ही कर सकता है? या यह स्थान पर निर्भर करता है? मैंने इसे <CommandUIDefinition Location="Ribbon.Documents.Actions.Controls._children"> के रूप में परिभाषित किया है, इसलिए इसे कमांड बार में प्रदर्शित किया जाता है।

0
alejandro Guevara 17 फरवरी 2021, 13:15

1 उत्तर

सबसे बढ़िया उत्तर

क्या यह संभव है? ... मुझे लगता है नहीं

दुर्भाग्य से एक प्रदाता द्वारा होस्ट किए गए ऐड-इन के साथ जावास्क्रिप्ट तर्क के साथ एक कस्टम रिबन क्रिया जोड़ना संभव नहीं है। मुझे लगता है कि लेख/लिंक जहां आपने पाया है कि यह संभव है सर्वर रिबन एक्सएमएल कस्टम एक्शन का संदर्भ लें जिसे सैंडबॉक्स समाधान (जैसे पुराने स्कूल शेयरपॉइंट दिनों 😊) का उपयोग करके संशोधित किया जा सकता है, लेकिन अब सैंडबॉक्स एसपी ऑनलाइन में समर्थित नहीं है।

ऐड-इन के साथ जोड़ी गई रिबन कस्टम क्रियाओं के लिए आपको सीधा लिंक निर्दिष्ट करना चाहिए। यह पहले से ही निर्दिष्ट करने की आवश्यकता है जब हम ऐड-इन प्रोजेक्ट में वीएस में एक रिबन क्रिया जोड़ते हैं (हमें निर्दिष्ट करना चाहिए कि हम नेविगेट कर रहे थे) यहां छवि विवरण दर्ज करें

मुझे यह एमएसडीएन लेख (काफी अद्यतित - 2020 से) जहां हम पा सकते हैं:

CustomAction में JavaScript शामिल नहीं हो सकता: कोई भी UrlActions या CommandActions नेविगेट करने के लिए एक URL होना चाहिए। (...)

तो मुझे 95% यकीन है कि यह चाहिए 😉 संभव नहीं है... लेकिन मैं 5% छोड़ देता हूं क्योंकि मैं SP PRO की तरह नहीं हूं (मुझे लगता है कि यह कठिन है) एक होने के लिए यह जानना बहुत पसंद है 😋)

संभव समाधान आप ले सकते हैं

आप क्या कर सकते हैं पावरशेल का उपयोग करके कस्टम रिबन एक्सएमएल जोड़ना और पावरशेल का उपयोग करके इसमें कोई जावास्क्रिप्ट तर्क संलग्न करना है। एकमात्र कमी यह है कि जावास्क्रिप्ट फ़ाइल को किसी भी तरह पृष्ठ में जोड़ा जाना चाहिए (जैसे इसे साइटएसेट्स लाइब्रेरी में संग्रहीत किया जा सकता है)।

तो ऐसा करने के लिए हमें चाहिए:

  1. हमारे रिबन कमांड बटन के साथ स्थानीय रूप से एक एक्सएमएल फ़ाइल बनाएं जैसे:
<CommandUIExtension>
    <CommandUIDefinitions>
        <CommandUIDefinition Location="Ribbon.Library.ViewFormat.Controls._children">
            <Button Id="Ribbon.Library.ViewFormat.About"
                Command="TestButton"
                LabelText="Test"
                Image32by32="{SiteUrl}/_layouts/15/1033/Images/formatmap32x32.png?rev=23"
                Image32by32Top="-273"
                Image32by32Left="-1"
                Description="Test"
                TemplateAlias="o1" />
        </CommandUIDefinition>
    </CommandUIDefinitions>
    <CommandUIHandlers>
        <CommandUIHandler
            Command="TestButton"
            CommandAction="javascript:test({SelectedItemId});"
            EnabledScript="javascript:checkOneItemSelected();" />
    </CommandUIHandlers>
</CommandUIExtension>

उपरोक्त का आउटपुट इस तरह का एक बटन होगा

enter image description here

  1. इसके बाद कमांडएक्शन और इनेबल्डस्क्रिप्ट के कार्यों के साथ एक जेएस फ़ाइल (स्थानीय रूप से भी) बनाएं (इसलिए हमें एक परीक्षण () फ़ंक्शन और checkOneItemSelected () की आवश्यकता है)। तो सामग्री पसंद है
function test(itemId) {
    alert(itemId);
}

function checkOneItemSelected() {
    return (SP.ListOperation.Selection.getSelectedItems().length == 1)
}

... इसलिए स्थानीय रूप से मेरे पास दो फाइलें हैं

enter image description here

  1. अब हमें उस साइट से कनेक्ट करने की आवश्यकता है जिसे हम पावरशेल का उपयोग करके रिबन बटन जोड़ना चाहते हैं (सर्वोत्तम उपयोग करना होगा PnP Powershell 👍)
  • Connect-PnPOnline -Url <SiteUrl> का उपयोग करके साइट से कनेक्ट करें
  • अब JS लोकल फ़ाइल को साइट एसेट लाइब्रेरी जैसे Add-PnPFile -Path .\customJS.js -Folder "SiteAssets" में जोड़ने देता है

तो आउटपुट है (लाइब्रेरी में फ़ाइल)

enter image description here

  • अब साइट पर रिबन बटन जोड़ें (xml का उपयोग करके) जैसे
$ribbon = Get-Content .\CustomRibbonButton.xml
$ribbon = [string]$ribbon
Add-PnPCustomAction -Name "RibbonTester" -Title "RibbonTester" -Description "-" -Group "Tester" -Location "CommandUI.Ribbon" -CommandUIExtension $ribbon -RegistrationType ContentType -RegistrationId 0x0101

तो उपरोक्त का आउटपुट रिबन में हमारा बटन होगा (रिबन देखने के लिए हमें क्लासिक यूआई/आधुनिक यूआई को चालू करने की भी आवश्यकता है)

enter image description here

  • अब हमारे JS को Add-PnPJavaScriptLink -Name "AboutButtonScript" -Url https://tenanttocheck.sharepoint.com/sites/ClassicDeveloperSite/SiteAssets/customJS.js -Scope Web जैसे बटन के साथ संलग्न करते हैं, कृपया अपने किरायेदार के लिए परिवर्तन url से अवगत रहें😉

और आउटपुट जैसा है

enter image description here

क्या आपने माना

क्या आपने अधिक अद्यतित होने के लिए spfx एक्सटेंशन और आधुनिक UI का उपयोग करने पर भी विचार किया? एक्सटेंशन में आप जेएस का उपयोग कर सकते हैं और हो सकता है कि कुछ एंडपॉइंट के लिए कुछ http अनुरोध करें जिसे आप आईडी सरणी के साथ लक्षित करना चाहते हैं (लेकिन यह केवल एक सुझाव है)

आशा है कि मेरी पोस्ट किसी भी मदद की होगी बीआर

0
Adam 17 फरवरी 2021, 21:33
उत्तर के लिए धन्यवाद एडम। हम स्टोर में ऐड-इन की पेशकश करना चाहते हैं, इसलिए मुझे यकीन नहीं है कि इसे स्थापित करने वाले प्रत्येक ग्राहक के लिए पीएनपी विधि संभव है या नहीं।
 – 
alejandro Guevara
18 फरवरी 2021, 12:44