Archivy kategorií: jQuery a SharePoint

Překonat nepříjemný problém s relativní adresy URL v SharePoint Quick Launch

Chtěl jsem přidat odkaz na panelu Snadné spuštění navigace na druhý den a řekl mi, SharePoint:

image

Čistě textové verze, která je:

Zajistit, že adresa URL je platný a začíná buď platný znak (znak čísla (#) nebo lomítko (/)) nebo platný podporovaný protokol (například, ' http://’, ' https://’, ' soubor://’, ' ftp://’, ' mailto:’, ' Novinky:’).

"Blech a neštovice!"Řekl jsem.

Řešení pro to je najít známé odkaz v panelu Snadné spuštění a její chování přepsat pomocí JavaScript.

Pro tento test, přidáte nový odkaz na web testovací thusly:

image

Použil jsem jQuery. To vyřešit, Získejte nějaký JavaScript a jQuery na stránku vaší oblíbenou technikou a s řádkem kódu, jako je tento:

 

$(dokument).připraven( funkce () {

    $("a:obsahuje('Testovat URL náhradní')").klepněte na tlačítko(funkce () { Výstraha("změněné chování!"); návrat NEPRAVDA;});

});

A strejda je Bob.

JQuery volič najde každý <a> značka, která má "Testovat URL náhradní" v názvu. Možná budete chtít najít melodii, která podle odkazu a tak.

Klikněte(funkce() přepíše, co SharePoint by to udělal, když uživatel klepnul. Ujistěte se, že jste "return false", jinak to bude dělat svoje věci a zkuste href věc příliš, což je téměř jistě není váš cíl.

To bylo provedeno, a test v prostředí služby SharePoint online, ale měl by fungovat i v 2010 a starší příliš.

</Konec>

undefinedPřihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Rychlé a jednoduché: Řešení "parametr neplatný URL” problém s UpdateListItems v lists.asmx

Při práci s UpdateListItems prostřednictvím lists.asmx, je to snadno vygenerovat chybu:

Parametr neplatný URL.

Zadaná adresa URL obsahuje neplatný příkaz nebo hodnoty. Zkontrolujte znovu adresu URL.

Tuto chybu můžete získat, když jste zapomněl zahrnout ID v seznam polí k aktualizaci.  Toto, stejně jako mnoho z těchto SP webových služeb, je poněkud neintuitivní, vzhledem k tomu, že je třeba zahrnout ID atribut ID <Metoda> prvek.  A vy nejste aktualizovány ID a pravděpodobně nikdy chtějí v prvé řadě.

Tento obálky SOAP funguje:

<soapenv:Obálka xmlns:soapenv =' http://schemas.xmlsoap.org/SOAP/ENVELOPE/'>
  <soapenv:Tělo>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <Jméno_konference>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</Jméno_konference>                     
        <aktualizace>                     
         <Dávkové PřiChybě ="Pokračovat">
          <Metodu ID ="1" CMD ="Aktualizace">
            <Název pole ="CooperativeLock">uzamčeno!</Pole>
            <Název pole ="ID">1</Pole>
          </Metoda>
        </Dávka>                     
        </aktualizace>                
      </UpdateListItems>             
  </soapenv:Tělo>         
</soapenv:Obálka>

Pokud vyřadíte z referenční pole ID pak budete mít obtěžující zpráva "Neplatná adresa URL parametr".

</Konec>

undefinedPřihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

 

Chudák je ukládání do mezipaměti v JavaScriptu

[TL;Dr. verze: používají soubory cookie k ukládání výsledků asynchronní volání; okamžitě vykreslovat výsledky minulých asynchronní volání a poté je ověřit po načtení stránky.]

Pracoval jsem na intranetovém webu SharePoint pro klienta, že funkce, mimo jiné, stylizované sekundární navigace, jejichž možnosti nabídky jsou spravovány prostřednictvím pravidelné staré vlastní seznam.  Myšlenkou je, že klient dostane k ovládání menu "jejich" stránek bez ovlivnění nebo ovlivnění globální navigační uhasit jím.

(je něco neuvěřitelně podvratné o přidání CEWP, který odkazuje na soubor HTML, který načítá některé CSS a JS zásadně změnit téměř vše o webu chování..., ale to je na jiné místo)

Kód pro tento docela jednoduchá:

Bolavé místo tady je, že pokaždé, když někdo udeří jedním z stránek webu, jeho webový prohlížeč je oslovit získat položky ze seznamu.  Jakmile dev je kompletní a testování prokázal věci být stabilní a úplné, Toto volání je zbytečné více než 99% času od menu se mění jen zřídka.  Má také zvláštní vliv UI, které je běžné v tomto odvážném novém světě hyper ajaxy webových stránek – stránka vykreslí a teprve potom menu vykreslit.  Je nervózní a rozptylující podle mého názoru.  A nervozita. Tak, ukládání do mezipaměti. 

Upravil jsem logiku thusly:

  • Vyhledejte soubor cookie v prohlížeči, který obsahuje nabídku, když jsem naposledy četl
    • Pokud nalezen, vykreslení to okamžitě.  Nečekej na stránce na dokončení načítání.  (Musíte se ujistit, že HTML je strategicky umístěn zde, ale to není těžké udělat).
  • Čekat na stránce dokončení načítání a asynchronní volání načítání menu položky ze seznamu pomocí REST nebo lists.asmx nebo co
  • Porovnejte, co mám proti souboru cookie
    • Odpovídá-li, Stop
    • Jinak, pomocí jQuery, dynamicky naplníte parta, pokud <li>je v <ul>
  • Veškeré formátování pomocí CSS
  • Zisk!

Někteří z vás se bude říkat, "Hej! neexistuje žádný skutečný mezipaměti děje protože čtete menu stejně každý jednotlivý čas.”  A máš pravdu – nedám na serveru jakýkoliv druh přestávky.  Ale protože volání asynchronní a se stane po stránce je první plně vykreslí HTML datové, to "cítí" lépe reagovat na uživatele.  Menu vykreslí docela jako stránky kreslí.  Pokud se změna stane menu, uživatel je vystaven nervózní re-kreslit menu, ale jen jednou.

Existuje několik způsobů, jak provést tuto mezipaměť efektivnější a pomohli server ve stejné době:

  • Zavést pravidlo, že "cookie cache" je platná pro minimálně 24 hodin, nebo nějaké jiné časového rámce. Tak dlouho, dokud neexistuje žádný cookie vypršela, pomocí souboru cookie menu snímek a nikdy neuhodil server.

Dobře..., to je vše, které přicházejí na mysl hned teď :). 

Pokud má někdo nějaké chytré nápady zde rád bych znát.

A konečně – tento postup lze použít pro jiné věci.  Tohoto klienta stránka má několik věcí, řízené daty na různých stránkách, Mnozí z nich mění poměrně zřídka (jako jednou za týden nebo jednou za měsíc).  Pokud cílíte na konkrétní oblasti funkcí, vstřícnější UI můžete dát obsah z úložiště místní soubor cookie a vykreslování okamžitě.  Připadá mi to rychleji k uživateli i v případě, že se neukládají na serveru žádné cykly.  Jste může rozhodování o některých podmínkách a spouště rušit platnost mezipaměti místní soubor cookie uložte cykly na server.  To je vše situační a diletantský věci a opravdu nejzábavnější :). 

</Konec>

undefinedPřihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

XSLT a jQuery vzorky

Jsem dělal hodně XSLT a jQuery a myslel jsem, že by sdílet několik úryvků, které ostatní užitečné v budoucnosti.

Příklad 1: Generuje jednoduchý JavaScript / jQuery v XSLT:

<XSL:Šablona shoda = "něco" XML:prostor = "zachovat">

  <!– Prázdné pole Skrytá přátelské filtry dotazu –>
  <skript typ = "text/javascript">
    $(dokument).připraven(funkce(){
      $("#QueryFriendlyFilters").Val("prázdný");
    });
  </skript>

</XSL:Šablona>

Tento bit vyzařuje nějaký JavaScript, který čeká na dokončení načítání stránky (vzhledem $(dokument).připraven(…)) a pak nastaví hodnotu skrytého pole QueryFriendlyFilters na hodnotu literálu "prázdná".

Příklad 2: Použití <XSL:Pokud> Kontrola "větší než",  "menší než", atd.

<XSL:Šablona shoda = "něco" XML:prostor = "zachovat">

  <div id = "fdcAllFilters">
 
    <XSL:Pokud test="@Count>0">
      <rozpětí class = "fdcFilterLabel">Aktuální filtry:</rozpětí>
    </XSL:Pokud>

    <!– další věci se tady stane. –>

</XSL:Šablona>

Výše uvedený fragment kontroluje, zda atribut s názvem "Počet" prvku "něco" je větší než nula.  XML za tím něco jako by:”

<něco Count = "5" />

Příklad 3: Iterovat všechny prvky, vkládání jQuery volání.

<!– Iterovat všechny filtry a zobrazit správně  odkazy. –>
<XSL:pro každý select = "UserFilter">

  <Třída = "FilterHref" href = "javascript:mySubmitPage("RemoveUserFilter",'{@ ID}’)">[X]</a>

  <rozpětí class = "fdcFilterLabel"><XSL:hodnota z select="@FilterValue"/></rozpětí>

  <skript typ = "text/javascript">

    $(dokument).připraven(funkce(){
        <XSL:text><![CDATA[$("#QueryFriendlyFilters").Val( ($("#QueryFriendlyFilters").Val() + " ]]></XSL:text>\"<XSL:hodnota z select="@FilterValue"/>\"<XSL:text><![CDATA["));]]></XSL:text>
    });

  </skript>

</XSL:pro každý>

Výše uvedený fragment je nejkomplexnější a může být jednodušší způsoby, jak to udělat.

XML za to zhruba vypadá takto:

<UserFilter ID = "123" FilterValue = "xyzzy" />

Tento úryvek je iterace <UserFilter> uzly. 

Nejprve emituje Kotvicí značka, po klepnutí vyvolá funkci jazyka JavaScript, která je již na stránce, "mySubmitPage" a předá hodnotu atributu <UserFilter> uzel s názvem "ID". 

Pak emituje některé jQuery, která čeká na stránku načte.  Tento jQuery aktualizuje skryté pole s názvem "QueryFriendlyFilters" přidáním hodnoty atributu FilterValue.  Poznámka: všechny šílené <XSL:text> a <![CDATA[ … ]]> materiál.

To je ono, Doufám, že to pomůže!

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Lists.asmx, GetListItems a složky

Dělal jsem nějaký výzkum pro někoho dnes kolem list.asmx webové služby poskytované jako součást služby SharePoint 2010 (a starší).  Podařilo se jí přimět položky seznamu v kořenové složce (včetně jména podsložky), Ale nemohl položky do podsložky.  Udělal jsem nějaké rozhlížel na internets a je překvapivě společná otázka.  Přesto, Nemohu získat Dobrá odpověď na jednoduchou otázku, "Pokud vím, do složky, Jak získat položky v této složce?”  Upřímně, Nepokoušela jsem tak tvrdě od obrázku, tento jeden z sama jsem chtěl na chvíli Usměj se.

Toto nastavení, Vytvořil jsem web s názvem "Blogování scénáře" a vlastní seznam s názvem "Vlastní seznam s dílčí složky".  Pak vytvořené složky s názvem:

  • Rok 2005
  • Rok 2006
  • Rok 2007

Přidal jsem pár položek do složky "Rok 2006".  Je to, co vypadá jako:

image

Můj přítel není psaní kódu jazyka C#, ale spíše pomocí Java, SOAP Obálka to, co opravdu potřebuje.  Na to by, Napsal trochu jQuery a pak použije houslista získat skutečné HTTP konverzaci.

Tady je relevantní jQuery (Jsem opsal kód pod Pokud chcete Kopírovat/Vložit):

image

To je první klíč obsahující jak <queryOptions> a <QueryOptions> uzel.  Druhý klíč je, že <Složka> uzel je adresa URL, na kterou má klient přístup.

Může být jiné způsoby, jak si to, Ale to pro mě pracoval, když používá jQuery.

Tady je obálka SOAP pro výše uvedené:

<soapenv:Obálka xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/ENVELOPE/’>                
  <soapenv:Tělo>
    <GetListItems xmlns =’
http://schemas.microsoft.com/SharePoint/SOAP/’>
      <Jméno_konference>Vlastní seznam s podsložky</Jméno_konference>
      <viewFields>  
        <ViewFields>
          <FieldRef jméno =' titul’ />
          <FieldRef jméno ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Složka>
http://demoserver1/blogování Scénáře/seznamy/vlastní seznam s dílčí složky za rok 2006</Složka>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Tělo>
</soapenv:Obálka>

Mnoho příkladů a diskuse kolem toho vedl mě věřit, že vše co potřebuji je <QueryOptions> a zadejte název složky.  Pro mě, Třeba jak lidi uvnitř <queryOptions> stejně jako zadejte úplnou adresu URL pro <Složka> uzel.

Tady je instalace AJAX jQuery:

$(dokument).připraven(funkce() {
       var soapEnv =
           "<soapenv:Obálka xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/ENVELOPE/’> \
               <soapenv:Tělo> \
                    <GetListItems xmlns =’http://schemas.microsoft.com/SharePoint/SOAP/’> \
                       <Jméno_konference>Vlastní seznam s podsložky</Jméno_konference> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef jméno =' titul’ /> \
                              <FieldRef jméno ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Složka>http://demoserver1/Blogging Scénáře/seznamy/vlastní seznam s dílčí složky za rok 2006</Složka> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Tělo> \
           </soapenv:Obálka>";

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Lists.asmx, GetList a "hodnota nemůže být null”

Dnes jsem zjistil, že GetList() Metoda lists.asmx Webová služba musí být volán velmi pečlivě nebo je náchylný na tajemnou "Hodnota nemůže být null" výjimka (a to za předpokladu, že se že můžete dostat přes ještě horší obecnou chybovou zprávu, "Výjimka typu ' Microsoft.SharePoint.SoapServer.SoapServerException’ byla vyvolána.")  Konkrétně, Zjistil jsem, že nemůže poskytnout jakýkoliv druh předpony v metodě GetList.  Následující úryvek jQuery je znázorněna:

image

Pokud tak učiníte, Webová služba reaguje s "Hodnota nemůže být null" jak na to houslista-Pokud protokol HTTP:

<?XML verze = "1.0" kódování = "utf-8"?>
  <mýdlo:Obálka
     xmlns.:mýdlo ="
http://schemas.xmlsoap.org/SOAP/ENVELOPE/"    
     xmlns.:xsi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns.:XSD ="
http://www.w3.org/2001/XMLSchema">

  <mýdlo:Tělo>
    <mýdlo:Chyba>
      <faultcode>mýdlo:Server</faultcode>
      <řetězcem faultString>
        Výjimka typu ' Microsoft.SharePoint.SoapServer.SoapServerException’ byla vyvolána.
      </řetězcem faultString>
      <Podrobnosti>
        <errorString xmlns ="
http://schemas.microsoft.com/SharePoint/SOAP/">
Hodnota nemůže být null.
        </errorString>
      </Podrobnosti>
    </mýdlo:Chyba>
  </mýdlo:Tělo>
</mýdlo:Obálka>

Samozřejmě, pravděpodobně by přidáte tento prefix "odečtením" na vlastní, Ale některé nástroje jsou náchylné k tomu (jako Eclipse).

Je to o to víc matoucí / frustrující, protože jiné metody tolerovat předpony.  Například, v GetListCollection Metoda nebude vadit, kdyby se byla předponou, i s předponami nesmysly jako "xyzzy":

image

Toto "hodnota nemůže být null" se zdá docela běžné s lists.asmx tak snad to pomůže někomu se v budoucnu.

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Donekonečna vnoření <div> Značky a jQuery

To se jeví jako takové podivíne téma, Nejsem si jistý, že to opravdu stojí blogu, Ale to mě ještě nikdy nevadilo, Tak tady to máme Usměj se

Já pracuji na projektu, kde jsem si nějaké údaje z hledání, balení do XML zprávy a pak že XML je nakonec transformován do HTML pomocí XSLT.  Je o hodně jQuery, jeden bit z nich implementuje funkce procházení.  Když klepnete na kartu (Vážně, a <div>), jQuery vyvolá .hide() a jí Ukažte() na různé značky (načtení úvodní stránku stáhne veškerý obsah, takže v tomto případě neexistují žádné postbacks).

Banda před hodinami, Karta přepínání logiky začali chovat chaoticky a ji ukáže jeden z mé karty.  Nakonec dozvěděl jsem se to dolů k tomu, že aplikace internet explorer (nejméně) Myslel, že <div> značky vnořené daleko, mnohem hlubší než určené.Vývojář nástrojů by ukázal:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <— konečně ukazuje byl uzavřen až sem!

Tak, Pokud jsem udělal $("# Tab1Content").Skrýt(), Také by skrýt Tab2 a mohl bych nikdy ukázat Tab2 pokud nechtěl také zobrazit Tab1.  Zkopírovat a vložit kód v aplikaci visual studio a to vše div obložení se ukázal pěkně, stejně jako by měl dělat, Takhle:

-<div id = "Tab1Content">
  +<div>
  +<div>
-<div id = "Tab2Content">
  +<div>
  +<div>

Porazil mou hlavou proti zdi na chvíli a všiml si, že skutečné HTML kódu vytvářel spoustu prázdná <div> značky, jako:

<tělo>

  <div id = "Tab1Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

  <div id = "Tab2Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

</tělo>

(Výše uvedené je waaaaaaaaaaaay zjednodušili.  Prázdný div značky jsou naprosto platné. Některé z mého <div> značky byly plné obsahu, Ale mnohem víc.  Přišel jsem k poznání že moje <XSL:pro každý> směrnice byly výstupu zkrácené když značky div xsl:pro každý ne ' najít žádná data.  Donutila komentáře HTML do výstupu, Jak je uvedeno:

image

 

Poté, co jsem to udělal, všechny div zákrytu pěkně a moje karta přepínání začala pracovat.

Jako vždy, Doufám, že to pomůže někdo v nouzi.

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Ještě více jQuery–Změna velikosti obrázku příklad

Zdědil jsem webovou část ze staré dodavatele klienta a má problém s velikostí obrazu.  Obrazy by mělo být 60×50 Ale z nějakého zvláštního důvodu, původní dodavatel je donucena 42×42, tak vypadají pošramoceného:

 

Dobrý obrázek

Špatný obrázek

Tady je přirážka (poněkud zjednodušené):

<Tabulka class = "rozšířené outlook">
  <závit>
    <TR>
      <Čt  Šířka = "100′>3 Úterý</Čt>
    </TR>
  </závit>

  <tbody>
    <TR class = "prognózy">
      <Šířka TD = "100′>
        <ul>
          <li class = "vysoká">Vysoká: 72&deg;F</li>
          <li class = "nízkým">Nízká: 44&deg;F</li>
          <li class = "stavu">Slunečno
            <img src =’
http://deskwx.WeatherBug.com/images/Forecast/icons/Localized/60×50/EN/trans/cond007.PNG’ Šířka ='42’ Výška ='42’ ALT =” />
          </li>
        </ul>
      </TD>
    </TR>

  </tbody>

</Tabulka>

Všimněte si že i když Cesta k obrázku, samotné se zobrazí odpovídající rozměr (60×50) původní dodavatel ji donutila 42×42.  Proč?  Šílené.

Každopádně, Chtěl jsem rychlé a snadné řešení této otázky a já se obrátil k jQuery.  Trik byl k hledání vhodného <IMG> značky.  Nechtěl jsem si ty fóry s jiné značky img (z nichž je mnoho).  Tento bit jQuery trik:

<skript typ = "text/javascript" src ="http://AJAX.googleapis.com/AJAX/libs/Jquery/1.5/Jquery.min.js"></skript>

<skript typ = "text/javascript">
     $(dokument).připraven(funkce () {

         $(' li.condition > img').Každý(funkce (Rejstřík, položka)
           
{
             $(položka).CSS("Šířka", "60"); 
             $(položka).CSS("výškou", "50");
            });
     }); // Při načítání dokumentu
</skript>

Tento kousek kódu najde kolekci <li> značky, jejichž třída je "stav" a <IMG> děti.  Pak je to všechno projde.  Pracoval jako kouzlo.

Možná by jej zefektivnit, Ale já jsem nikdy nebyla druh unix chlapíka, který vyřešil π do 18 přesnost čísel pomocí sed a awk a já nejsem takový pokud jQuery buď chlap Usměj se.

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Zavést systém globální místní oznámení

Jsem napsal článek pro www.SharePoint.Briefing.com s názvem"Zavést systém globální místní oznámení.”  Tato funkce byla implementována na vejšce sdělovat škole uzávěrek kvůli sněhu a tak dále. 

Používá vlastní seznam, ze seznamu služby SharePoint web služby a některé jQuery na práci.

Tady je oříšek:

image

Přečtěte si celou věc: http://www.sharepointbriefing.com/features/article.php/3918471/Implement-a-Global-Pop-up-Notification-System.htm

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Převzít kontrolu nad vaší OK a zrušit tlačítka

Napsal jsem Tento článek chvíli zpět, ale vypadá to, že jsem nebyl na něj odkaz z mého blogu v době, Tak tady jde:

image

Tento článek popisuje, jak přinutit newform.aspx přesměrovat na jednu stránku, když uživatel klepne na OK a jiné stránky po klepnutí na tlačítko Storno.

</Konec>

Přihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin