Archívy kategórie: jQuery a SharePoint

Prekonať nepríjemný problém s relatívnymi adresami URL v SharePoint Quick Launch

Chcel som pridať odkaz na rýchle spustenie navigácie druhý deň a povedal mi, SharePoint:

image

Čisto textové verzie, ktorá je:

Zabezpečiť, že URL je platný a začína buď neplatný znak (číselný znak (#) alebo lomka (/)) alebo platný podporovaný protokol (napríklad, "http://’, "https://’, "súbor://’, "ftp://’, "mailto:’, "novinky:’).

"Blech a kiahne!"Povedal som.

Riešenie pre to je používať JavaScript nájsť známe odkaz v paneli pre rýchle spustenie a prepísať jeho správanie.

Tento test, Pridať nový odkaz na vaše stránky test thusly:

image

Použil som jQuery. To vyriešiť, získať niektoré JavaScriptom a jQuery na stranu pomocou svoje obľúbené techniky a riadok kódu takhle:

 

$(dokument).pripravený( Funkcia () {

    $("a:obsahuje("Test URL náhradné")").kliknite na tlačidlo(Funkcia () { Upozornenie("zmenil kliknite na správanie!"); return FALSE;});

});

A bôb je tvoj strýko.

JQuery volič nájde každý <a> značka, ktorá má "Test URL náhradné" vo svojom mene. Ak chcete nájsť-melódiu, ktorá váš odkaz a také.

Nepokoje(Funkcia() prepíše čo SharePoint by urobil, keď používateľ klikol. Uistite sa, že ste "return false", inak to bude robiť svoje veci a potom skúste href vec príliš, takmer určite čo nie je váš cieľ.

Toto bolo robené a test v prostredí SharePoint online ale mal by fungovať aj v 2010 a skôr príliš.

</koniec>

undefinedVyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Rýchle a jednoduché: Vyriešiť "neplatná adresa URL Parameter” problém s UpdateListItems v lists.asmx

Pri práci s UpdateListItems cez lists.asmx, je to jednoduché generovanie chyby:

Neplatná adresa URL Parameter.

Poskytnutá adresa URL obsahuje neplatný príkaz alebo hodnoty. Znova skontrolujte adresu URL.

Môžete získať túto chybu, keď ste zabudli zahrnúť ID v zozname polí na aktualizáciu.  Toto, rovnako ako mnoho z týchto SP webových služieb, je trochu neintuitívne, pretože budete potrebovať zahrnúť ID atribút ID <Metóda> prvok.  A nie ste aktualizované ID a pravdepodobne nikdy chcú v prvom rade.

Táto obálka SOAP funguje:

<soapenv:Obálka xmlns:soapenv ="http://schemas.xmlsoap.org/SOAP/Envelope/ ">
  <soapenv:Orgán>                      
    <UpdateListItems xmlns ="http://schemas.Microsoft.com/SharePoint/SOAP/ ">                     
      <listnate>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listnate>                     
        <aktualizácie>                     
         <Dávkové PriChybe ="Pokračovať">
          <Metóda ID ="1" Cmd ="Update">
            <Názov poľa ="CooperativeLock">zamknuté!</Pole>
            <Názov poľa ="ID">1</Pole>
          </Metóda>
        </Dávky>                     
        </aktualizácie>                
      </UpdateListItems>             
  </soapenv:Orgán>         
</soapenv:Obálka>

Ak ste pás ID pole odkaz potom dostanete otravné "Neplatná adresa URL parameter" správa.

</koniec>

undefinedVyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

 

Chudák je cache v JavaScriptu

[TL;DR verziu: používanie cookies k ukladaniu výsledky asynchrónne volania; vykreslenie Výsledky posledných asynchrónne volania okamžite a potom overiť po načítaní stránky.]

Bol som pracoval na intranetovej lokalite SharePoint pre klienta, že funkcie, okrem iného, štylizované druhej navigácii ktorého menu voľby sú riadené prostredníctvom pravidelnej starými vlastného zoznamu.  Myšlienka je, že klient dostane kontrolovať "ich" stránky menu bez ovplyvnenia alebo byť zasiahnuté globálnej navigácie vyháňaní to.

(tam je niečo neuveriteľne podvratné pridávanie CEWP, ktorý odkazuje na súbor HTML, ktorý načíta niektoré CSS a JS zásadne zmeniť takmer všetko o webe správanie... ale to je iný post)

Kód pre tento veľmi jednoduchý:

Boľavé miesto tu je, že zakaždým, keď niekto udrie jedným zo stránky, používateľa webového prehliadača je osloviť načítať položky zo zoznamu.  Po dokončení sa dev a testovanie ukázalo veci byť stabilnejší a kompletné, Táto výzva je zbytočné viac ako 99% doby, kedy v ponuke zriedka to zmení.  Má tiež podivné UI ovplyvniť, čo je bežné v tomto odvážnom novom svete hyper-AJAX webových stránok – stránky omietky a až potom v ponuke vykresliť.  Je nervózna a rušivé podľa môjho názoru.  A nervózny. Takže, ukladanie do vyrovnávacej pamäte. 

Som upravil logika thusly:

  • Pohľad na cookie v prehliadači, ktorý obsahuje ponuku ako som naposledy čítal
    • Ak sa našiel, robí to okamžite.  Nemusíte čakať na dokončenie načítania stránky.  (Budete musieť uistite sa, že HTML je strategicky umiestnené tu., ale to nie je ťažké urobiť).
  • Čakať na stránku až do konca nakládky a asynchrónne volanie naložiť menu položky zoznamu pomocou odpočinku alebo lists.asmx alebo čokoľvek, aby
  • Porovnajte čo mám proti cookie
    • Ak sa to zhoduje, zastaviť
    • Inak, pomocou jQuery, dynamicky naplniť veľa Ak <li>je v <ul>
  • Použitie CSS robiť všetko formátovanie
  • Zisk!

Niektoré z vás chcel povedať, "Hej! Neexistuje žiadny skutočný caching deje pretože čítate menu rovnako každý jednotlivý čas.”  A máš pravdu-nejsem dáva server akýkoľvek druh prestávku.  Ale pretože hovor je asynchrónna a stane po stránke počiatočné zaťaženie HTML plne omietky, "Pripadá mi to" lepšie reagovať na užívateľa.  V ponuke omietky docela ako stránku čerpá.  Ak v ponuke dôjde k zmene, používateľ sa podrobí nervózny znovu čerpať z menu, ale iba tento raz.

Existuje niekoľko spôsobov na zefektívnenie tejto cache a pomoct server v rovnakom čase:

  • Zaviesť pravidlo, že "cookie cache" je platný pre minimálne 24 hodín, alebo nejaký iný Časový. Pokiaľ neexistuje žiadna cookie vypršala, použitie cookie ponuky snímka a nikdy hit server.

No... to je všetko, čo príde na myseľ hneď :). 

Ak má niekto nejaké chytré nápady tu by chcel poznať.

A napokon – Táto technika môže byť použitá pre iné veci.  Tento klient strana má mnoho vecí, data-riadený na rôznych stránkach, Mnohé z nich mení pomerne zriedka (ako raz týždenne alebo raz za mesiac).  Ak cielite špecifické oblasti funkčnosti, si môžete dať citlivejšie UI ťahom obsah z miestnej cookie obchodu a vykresľovanie okamžite.  Pripadá mi to rýchlejšie pre užívateľa aj ak nie ukladáte server bez cyklov.  Ste môžete uložiť na server cykly pri rozhodovaní o niektorých podmienkach a spúšťa zruší tento miestnej cookie cache.  To je všetky situačná a diletantský veci a naozaj najviac zábavy :). 

</koniec>

undefinedVyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

XSLT a jQuery vzorky

Som bol robí veľa XSLT a jQuery a myslel som zdieľať niekoľko úryvkov, ktoré iní môžu nájsť užitočné v budúcnosti.

Príklad 1: Vyžarovanie jednoduchý JavaScript / jQuery v XSLT:

<XSL:Šablóna zápas = "niečo" XML:priestor = "zachovanie">

  <!– Prázdne, skryté pole priateľské filtre dotaz –>
  <skript typ = "text/javascript">
    $(dokument).pripravený(Funkcia(){
      $("#QueryFriendlyFilters").Val("empty");
    });
  </skript>

</XSL:šablóny>

Tom trochu emituje niektoré JavaScript, ktorý čaká na načítanie stránky (z dôvodu $(dokument).pripravený(…)) a potom nastaví hodnota skryté pole s názvom QueryFriendlyFilters na Literálová hodnota "empty".

Príklad 2: Použitie <XSL:Ak> skontrolovať "väčší ako",  "menší ako", atď.

<XSL:Šablóna zápas = "niečo" XML:priestor = "zachovanie">

  <div id = "fdcAllFilters">
 
    <XSL:Ak test="@Count>0">
      <span triedy = "fdcFilterLabel">Aktuálne filtre:</span>
    </XSL:Ak>

    <!– viac vecí sa deje tu. –>

</XSL:šablóny>

Vyššie úryvok skontroluje, ak atribút s názvom "Count" prvku "niečo" je väčšia ako nula.  XML za to by bolo niečo:”

<niečo počet = "5" />

Príklad 3: Iterácia súboru cez všetky prvky, interspersing jQuery hovory.

<!– Iterácia súboru cez všetky filtre a zobraziť správne  odkazy. –>
<XSL:pre každý výber = "UserFilter">

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

  <span triedy = "fdcFilterLabel"><XSL:hodnoty z select="@FilterValue"/></span>

  <skript typ = "text/javascript">

    $(dokument).pripravený(Funkcia(){
        <XSL:text><![CDATA[$("#QueryFriendlyFilters").Val( ($("#QueryFriendlyFilters").Val() + " ]]></XSL:text>\"<XSL:hodnoty z select="@FilterValue"/>\"<XSL:text><![CDATA["));]]></XSL:text>
    });

  </skript>

</XSL:pre každý>

Vyššie úryvok je najkomplexnejšie a môže byť jednoduchšie spôsoby, ako na to.

XML za to vyzerá približne takto:

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

Tento úryvok je Iterácia prostredníctvom <UserFilter> uzly. 

Najprv emituje kotva tag, ktoré po kliknutí vyvolá funkciu JavaScript, ktorý je už na stránke, "mySubmitPage" a odovzdáva hodnotu atribútu <UserFilter> uzol, s názvom "Identifikácia". 

Potom emituje niektoré jQuery, ktorý čaká na stránku načítať.  Že jQuery aktualizuje skryté pole s názvom "QueryFriendlyFilters" pridaním hodnota atribútu FilterValue.  Poznámka všetky crazy <XSL:text> a <![CDATA[ … ]]> veci.

To je všetko, Dúfam, že pomôže!

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Lists.asmx, GetListItems a priečinkov

Bol som robiť nejaké výskum pre niekoho dnes okolo list.asmx webovej služby poskytované ako súčasť SharePoint 2010 (a staršie).  Ona sa podarilo získať zoznam položiek v hlavnom priečinku (vrátane názvov podpriečinkov), ale nemohol dostať položky v podpriečinkov.  Som urobil niektoré pozrieme na internetové a je prekvapivo spoločná otázka.  Ešte, Nemohol som sa dostať dobrú odpoveď na jednoduchú otázku, „pokiaľ viem, aby sa priečinok, ako sa dostať položky v priečinku?”  Ak chcete byť úprimný, Aj vyskúšať tvrdo všetko, pretože som chcel obrázok, tohle sa sám na chvíľu úsmev.

Nastavenie, Som vytvoril stránky s názvom "Blogovanie scenáre" a vlastný zoznam s názvom "Vlastný zoznam s Sub Folders".  Potom som vytvoril priečinky s názvom:

  • Rok 2005
  • Rok 2006
  • Rok 2007

Som pridal niekoľko položiek do priečinka „rok 2006".  To je to, čo vyzerá ako:

image

Môj priateľ nie je písania kódu C#, ale skôr pomocou Java, Obálka SOAP tak bol, čo ona naozaj potrebné.  Tú, Som napísal bitovým jQuery a potom použiť fiddler získať skutočný rozhovor HTTP.

Tu je relevantné jQuery (I skopíroval kód nadol pod Ak chcete kopírovať/vložiť):

image

Ich prvý kľúč je zahrnúť aj <queryOptions> a <QueryOptions> uzol.  Druhý kľúč je, že <Priečinok> uzol je URL, na ktorú má klient prístup.

Môžu existovať iné spôsoby, ako si to, ale to funguje dobre pre mňa, keď pomocou jQuery.

Tu je Obálka SOAP pre vyššie uvedené:

<soapenv:Obálka xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’>                
  <soapenv:Orgán>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listnate>Vlastný zoznam s priečinkami Sub</listnate>
      <viewFields>  
        <ViewFields>
          <Názov FieldRef = "hlava’ />
          <Názov FieldRef = "EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Priečinok>
http://demoserver1/blogovanie Scenáre, zoznamy alebo vlastné zoznam s Sub Folders za rok 2006</Priečinok>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Orgán>
</soapenv:Obálka>

Veľa príkladov a diskusie okolo to viedol ma domnievať sa, že všetko, čo potrebujete bol <QueryOptions> a zadajte názov priečinka.  Pre mňa, I potrebné pre obe zabaliť vnútri <queryOptions> rovnako ako zadajte úplnú adresu URL <Priečinok> uzol.

Tu je nastavenie AJAX jQuery:

$(dokument).pripravený(Funkcia() {
       var soapEnv =
           "<soapenv:Obálka xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’> \
               <soapenv:Orgán> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listnate>Vlastný zoznam s priečinkami Sub</listnate> \
                       <viewFields> \
                           <ViewFields> \
                              <Názov FieldRef = "hlava’ /> \
                              <Názov FieldRef = "EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Priečinok>http://demoserver1/Blogging Scenáre, zoznamy alebo vlastné zoznam s Sub Folders za rok 2006</Priečinok> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Orgán> \
           </soapenv:Obálka>";

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Lists.asmx, GetList a "hodnota nesmie byť null”

Dnes som zistil, že GetList() metóda lists.asmx Webová služba má byť nazývaný veľmi starostlivo alebo je náchylný k hodiť tajomný "Hodnota nesmie byť null" výnimka (a to je predpokladom, môžete získať minulosti ešte horšie generické chybové hlásenie, "Výnimka typu" Microsoft.SharePoint.SoapServer.SoapServerException’ bol hozen.")  Osobitne, Zistil som, že nemôže poskytnúť akýkoľvek druh predponu na metódu GetList.  Nasledujúci úryvok jQuery ilustruje bod:

image

Ak to urobíte, Webová služba odpovedá s "Hodnota nesmie byť null" ako na to sumár-poskytuje HTTP prepis:

<?XML verzia = "1,0" encoding = "utf-8"?>
  <mydlo:Obálka
     xmlns:mydlo ="
http://schemas.xmlsoap.org/SOAP/Envelope/"    
     xmlns:XSI = "
http://www.w3.org/ 2001/XMLSchema-stupňa
     xmlns:XSD ="
http://www.w3.org/ 2001/XMLSchema">

  <mydlo:Orgán>
    <mydlo:Chyba>
      <faultcode>mydlo:Server</faultcode>
      <faultstring>
        Výnimka typu "Microsoft.SharePoint.SoapServer.SoapServerException’ bol hozen.
      </faultstring>
      <detail>
        <errorstring xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Hodnota nemôže mať hodnotu null.
        </errorstring>
      </detail>
    </mydlo:Chyba>
  </mydlo:Orgán>
</mydlo:Obálka>

samozrejme, pravdepodobne nebude pridáte prefix "s0" na vlastnú päsť, ale niektoré nástroje sú náchylné na to (ako Eclipse).

Je to o to viac mätúce / frustrujúce, pretože iné metódy tolerovať predpony.  Napríklad, The GetListCollection metóda nevadí, ak je to bol predponou, aj s predponami nezmysel ako "xyzzy minového":

image

To "hodnota nesmie byť null" sa zdá byť dosť spoločného s lists.asmx tak dúfajme, že to pomôže niekto von v budúcnosti.

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Donekonečna vnorenia <DIV> Značky a jQuery

To sa zdá ako také podivín tému, Nie som si istý, je to naozaj stojí za blogovanie o, ale že nebol nikdy zastavený ma pred, tak tady úsmev

Som pracovať na projekt, kde I 'm ťahanie niektoré údaje z vyhľadávania, balenie je do XML správ a potom že XML sa nakoniec premení HTML pomocou XSLT.  Existuje veľa jQuery, jeden bit, ktorý implementuje niektoré tabování funkcie.  Keď kliknete na kartu (naozaj, a <DIV>), jQuery vyvolá .hide() a .show() na rôznych divs (úvodnú stránku zaťaženie prevezme všetky obsah, takže neexistujú žiadne spätných odoslaní v tomto prípade).

Pár hodín pred, kartu prepínanie logika začali správať nevyspytateľne a to by ukázať jednu z mojich záložiek.  Nakoniec sledoval som to tým, že program internet explorer (aspoň) myslel, že <DIV> Tagy vnorené ďaleko, oveľa hlbšie, než sa plánovalo.Paneli nástrojov vývojára by Ukázať:

-<div id = "Tab1Content">
  -<DIV>
    -<DIV>
      -<div id = "Tab2Content">
        -<DIV>
           …………………………
                   </DIV>  <— konečne ukazuje, že bola uzavretá celú cestu dole tu!

Takže, Ak som to urobil $("#Tab1Content").Skryť(), By tiež skryť 2 a nikdy by mohla ukázať 2 Ak nemal tiež ukazujú Tab1.  Skopírovať a vložiť kód do visual studio a to ukázal všetky div obloženia sa pekne, rovnako ako oni mali robiť, Hľadáte takhle:

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

Biť hlavou o stenu na chvíľu a všimol si, že v skutočnej HTML kód bol vytvára veľa prázdnych <DIV> Tagy, ako:

<telo>

  <div id = "Tab1Content">

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

  </DIV>

  <div id = "Tab2Content">

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

  </DIV>

</telo>

(Vyššie uvedené je waaaaaaaaaaaay nedbalo.  Prázdny div tagy sú úplne platné. Niektoré z mojich <DIV> Tagy boli plné obsahu, ale mnoho ďalších neboli.  Prišiel som k poznaniu, že moja <XSL:pre každý> smernice boli vyžarujúce krátky div Tagy kedy xsl:pre každú nemali "nájsť žiadne údaje.  Som nútený do výstupného HTML komentár, ako je uvedené:

image

 

Potom, čo som to urobil, všetky div postavili pekne a môj kartu prepínanie začal pracovať.

Ako vždy, Dúfam, že to pomôže niekto v núdzi.

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Ešte viac jQuery–Ak chcete zmeniť veľkosť príklad obrázka

Som zdedil webovú časť od klienta stará dodávateľa a má obraz veľkosti problém.  Obrázky by mali byť 60×50 ale z nejakého zvláštneho dôvodu, pôvodný dodávateľ nútený do 42×42, tak vyzerajú rozmliaždeniu:

 

Dobrý obraz

Zlý obraz

Tu je značky (trochu zjednodušené):

<Tabuľka class = "Rozšírená-outlook">
  <thead>
    <TR>
      <th  šírka = 100′>3 Utorok</th>
    </TR>
  </thead>

  <TBODY>
    <TR class = "predpoveď">
      <TD šírka = 100′>
        <ul>
          <li class = "vysoká">Vysoká: 72&deg;F</li>
          <li triedy = "nízke">Nízka: 44&deg;F</li>
          <li triedy = "stav">Slnečný
            <img src =’
http://deskwx.weatherbug.com/images/Forecast/icons/localized/60×50/EN/trans/cond007.png’ Šírka = "42’ Výška = "42’ ALT =” />
          </li>
        </ul>
      </TD>
    </TR>

  </TBODY>

</Tabuľka>

Všimnite si, že aj keď cestu k samotnému obrázku ukazuje správny rozmer (60×50) pôvodný dodávateľ nútený 42×42.  prečo?  bláznivý.

Každopádne, Chcel som rýchle a jednoduché riešenie tohto problému a obrátil som sa na jQuery.  Trik bol na vyhľadanie všetkých vhodných <IMG> Tagy.  Nechcel som muck asi s inými img Tagy (ktoré existuje veľa).  Tento bit jQuery urobil trik:

<skript type = text/javascript"" src ="http://Ajax.googleapis.com/AJAX/libs/jQuery/1.5/jQuery.min.js"></skript>

<skript typ = "text/javascript">
     $(dokument).pripravený(Funkcia () {

         $("li.condition > img ").každý(Funkcia (index, položka)
           
{
             $(položka).CSS("Šírka", "60"); 
             $(položka).CSS("výška", "50");
            });
     }); // na dokument zaťaženie
</skript>

Že trochu kódexu zistí kolekcia <li> Tagy ktorého trieda je "stav" a <IMG> deti.  Potom vykonáva iterácie, cez to všetko.  Pracoval ako kúzlo.

Pravdepodobne by mohla zjednodušenie je, ale nikdy som bol druh unix chlap, ktorý vyriešil π na 18 číslice presnosť použitia sed a awk a já nejsem tohto druhu, ak buď chlap jQuery úsmev.

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Implementovať globálny systém Pop-up oznámenia

Som napísal článok o www.SharePoint.Briefing.com pod názvom"Implementovať globálny systém Pop-up oznámenia.”  Táto funkcia bola vykonaná na community college oznámiť školy úvodu kvôli snehu a podobne. 

Používa vlastný zoznam, z krabice SharePoint webové služby a niektoré jQuery robiť prácu.

Tu je ukážka:

image

Prečítať celú vec tady: http://www.sharepointbriefing.com/features/article.php/3918471/Implement-a-Global-Pop-up-Notification-System.htm

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin

Prevziať kontrolu nad vašej OK a zrušiť tlačidlá

Napísal som Tento článok chvíľu späť, ale vyzerá to, že nemal odkaz na to z môjho blogu v čase, Takže tu ide:

image

Tento článok popisuje prinútiť newform.aspx presmerovať na jednej stránke, keď používateľ klikne na tlačidlo OK a inej stránke keď ona kliknutí zrušiť.

</koniec>

Vyberajte môj blog.

Nasledujte ma na stebėtų na http://www.twitter.com/pagalvin