Kategorija Arhiv: jQuery in SharePoint

Premagati siten Problem z relativne naslove URL v SharePoint Quick Launch

Sem želel dodati povezavo hitri zagon navigacije drugi dan in mi je povedal SharePoint:

image

Čist tekst prevod to je:

Zagotoviti, da URL je veljaven in se začne z bodisi veljaven znak (Številski znak (#) ali poševnico (/)) ali veljavno podpira protokol (na primer, "http://’, "https://’, "datoteke://’, "ftp://’, "mailto:’, "novice:’).

"Blech in pox!"Sem rekel.

Rešitev za to je, da uporabite JavaScript najti znanih link v nagel splavitev ter preglasitve njegovega vedenja.

V skušnja to, Dodajte novo povezavo na vašo spletno stran test thusly:

image

Sem rabil jQuery. To rešiti, dobili nekaj JavaScript in jQuery na stran using vaš najljubši tehniko in z linijo kodo, kot to:

 

$(dokument).pripravljena( Funkcija () {

    $("a:vsebuje("Preskusni URL zamenjavo")").kliknite(Funkcija () { Opozorilo("kliknite spremenjeno vedenje!"); vrnitev FALSE;});

});

In Bob je vaš stric.

JQuery Selektor najde vsak <a> oznako, ki je "Test URL zamenjavo" v svojem imenu. Če želite najti-tune, ki odvisno od vaše povezave in tako.

Kliknite na(Funkcija() preglasi karkoli SharePoint bi storila, ko uporabnik kliknil. Izdelovanje varen vi "return false" drugače bo naredil svoje stvari in poskusite href stvar preveč, ki je skoraj gotovo ni vaš cilj.

To je bilo storjeno in test v SharePoint online okolju pa mora delati tudi v 2010 in prej preveč.

</namen>

undefinedNaročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Hitro in preprosto: Rešiti "neveljaven Parameter URL za” problem z UpdateListItems v lists.asmx

Pri delu z UpdateListItems preko lists.asmx, To je enostavno ustvari napako:

Parameter neveljaven URL.

URL preskrbljen vsebuje neveljaven ukaz ali vrednost. Prosimo preverite naslov spet.

Lahko dobiš to napako, ko ste pozabili vključiti ID v na seznam polj za posodobitev.  To, kot veliko SP spletne storitve, je malo counterintuitive, saj morate vključiti ID v atributu ID v <Metoda> element.  In ne boš posodobiti ID in verjetno nikoli ne želite na prvem mestu.

Te ovojnice SOAP deluje:

<soapenv:Ovojnica xmlns:soapenv =' http://schemas.xmlsoap.org/SOAP/Envelope/ ">
  <soapenv:Telo>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/ ">                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <posodobitve>                     
         <Paketna NaNapaki ="Še">
          <Metoda ID ="1" Cmd ="Posodobitev">
            <Polje ime ="CooperativeLock">zaklenjena!</Polje>
            <Polje ime ="ID">1</Polje>
          </Metoda>
        </Serija>                     
        </posodobitve>                
      </UpdateListItems>             
  </soapenv:Telo>         
</soapenv:Ovojnica>

Če ste strip, sklic polja ID potem boste dobili siten vest "Parameter neveljaven URL".

</namen>

undefinedNaročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

 

Revež je predpomnjenje v JavaScript

[TL;DR. različica: uporablja piškotke za shranjevanje rezultatov asinhron klici; bili rezultati zadnjih asinhron klici takoj in jih nato potrditi po nalaganja strani.]

Sem delal na SharePointovem mestu intranet za stranko, da značilnosti, med drugim, stilizirane sekundarni navigacija, katerih možnosti menija se upravljajo preko rednih stare seznam po meri.  Ideja je, da stranka dobi nadzor nad "svoje" mesto meni brez vpliva ali vpliva globalne navigacije, dal, ki jih je.

(Obstaja nekaj neverjetno subverzivna o dodajanju CEWP, ki kaže na datoteko HTML, ki naloži nekaj CSS in JS bistveno spreminjajo skoraj vse o spletnega mesta obnašanje... ampak to je za drugo delovno mesto)

Šifra tega zal prepost:

Sore spot tukaj je, da vsakič, ko kdorkoli izmed na spletnih straneh zadetkov, to uporabnik spletnega brskalnika je dosegel, da se elementi s seznama.  Ko dev je popolna in testiranje izkazal stvari stabilno in popolne, Ta klic je nepotrebno več kot 99% od takrat redko spremembe v meniju.  Je tudi čudno UI določajo, kateri je splošen v tem krasnem novem svetu spletnih mest hiper-ajaxy-stran postane in šele nato render meniju.  Je živčnosti in moteča v mojem mnenju.  In živčnosti. Tako, predpomnjenje. 

Sem spremenil logika thusly:

  • Poiščite piškotek v brskalnik, ki vsebuje jedilnik, kot sem nazadnje prebral
    • Če najdemo, Render takoj.  Ne čakati na strani konča nakladanja.  (Vi potreba prepričati se vaš HTML strateško dani tukaj, vendar to ni težko narediti).
  • Čakati na strani konča nakladanja in da je Asinhroni klic otovoriti ki gre gor jedilnik reč na seznamu using počitek ali lists.asmx ali karkoli
  • Primerjati, kaj imam proti piškotek
    • Če se ujema, ustavi se
    • Drugače, z uporabo jQuery, dinamično zapolnijo kup, če <Li>je v a <UL>
  • Uporaba CSS storiti vse oblikovanje
  • Dobiček!

Nekateri od vas bodo rekli, "Hej! ni resnično caching tekoč naprej vsepovsod ker berete meni vseeno vsak čas.”  In imaš prav-ne dajem strežnik kakršnokoli odmor.  Ampak ker klic je asinhron in se zgodi, ko je začetno stran HTML tovora popolnoma postane, "meni" bolj odziven na uporabnika.  Meni postane precej toliko, kot stran črpa.  Če se meni zgodi, da sprememba, uporabnik je izpostavljen živčnosti ponovno pripravi menija, ampak samo en čas.

Obstaja nekaj načinov, da bi ta caching učinkovitejši in pomagati strežniku hkrati:

  • V pravilu, da "piškotek cache" velja za najmanj 24 ur ali neki drugi časovni okvir. Dokler je ni poteklo piškotek, uporabite piškotek je meni posnetek in nikoli zadeti strežnik.

No... to je vse, ki pridejo na misel zdaj :). 

Če ima kdo kakšno pametno ideje tukaj bi radi vedeli zanje.

In nenazadnje-to tehniko se lahko uporabijo za druge stvari.  Ta odjemalski strani je število podatkovnih stvari na različnih straneh, Mnogi od njih spreminjajo razmeroma redko (kot enkrat na teden ali enkrat na mesec).  Če ciljate posebnih področjih funkcionalnosti, lahko daš več odgovarajoč UI s potegom vsebine iz lokalnih piškotek trgovine in vračanje takoj.  Zdi hitreje uporabniku, tudi če ne shranjujete strežnik ciklov.  Vi lahko z odločitvijo o nekaterih pogojih in sprožilce, da izničita ta predpomnilnik lokalnih piškotek shrani strežnik ciklov.  To je vse situacijsko in artsy stvari in res najbolj zabavno :). 

</namen>

undefinedNaročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

XSLT in jQuery vzorcev

So bili delaš veliko XSLT in jQuery in misli, bi delež nekaj odrezke, da drugi lahko najdete koristne v prihodnosti.

Primer 1: Oddajajo preprostih JavaScript / jQuery v XSLT:

<XSL:predlogo ujemanje = "nekaj" XML:prostor = "ohranitev">

  <!– Prazen ven prijazno filtri skrito polje poizvedbe –>
  <skript type = "text/javascript">
    $(dokument).pripravljena(Funkcija(){
      $("#QueryFriendlyFilters").Val("prazne");
    });
  </skript>

</XSL:predlogo>

Da malo izpušča nekatere JavaScript, ki čaka na stran zdelati tovor (ker je $(dokument).pripravljena(…)) in nato Nastavi vrednost skrito polje z imenom QueryFriendlyFilters dobesedne vrednosti »empty«.

Primer 2: Uporaba <XSL:Če> Preverite "večje od",  "manj kot", itd.

<XSL:predlogo ujemanje = "nekaj" XML:prostor = "ohranitev">

  <div id = "fdcAllFilters">
 
    <XSL:Če test="@Count>0">
      <kalibrirni razred = "fdcFilterLabel">Trenutni filtri:</razpon>
    </XSL:Če>

    <!– več stvari se dogaja tukaj. –>

</XSL:predlogo>

Zgoraj košček preveri, če je atribut z imenom »Štetje« elementa "nekaj" večja od nič.  XML za to bi bilo nekaj podobnega:”

<nekaj Count = "5" />

Primer 3: Ponovi skozi vse elemente, interspersing jQuery klice.

<!– Ponovi skozi vse filtre in prikažete pravilno  povezave. –>
<XSL:za vsako izberite = "UserFilter">

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

  <kalibrirni razred = "fdcFilterLabel"><XSL:vrednost za select="@FilterValue"/></razpon>

  <skript type = "text/javascript">

    $(dokument).pripravljena(Funkcija(){
        <XSL:besedilo><![CDATA[$("#QueryFriendlyFilters").Val( ($("#QueryFriendlyFilters").Val() + " ]]></XSL:besedilo>\"<XSL:vrednost za select="@FilterValue"/>\"<XSL:besedilo><![CDATA["));]]></XSL:besedilo>
    });

  </skript>

</XSL:za vsako>

Zgoraj odlomek je najbolj zapletena in se lahko lažje načine delati to.

XML zadaj to videti približno takole:

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

Ta odlomek je ponavljanje skozi <UserFilter> vozlišča. 

To najprej izpušča sidro tag, ki ob kliku prikliče funkcijo JavaScript, ki je že na strani, "mySubmitPage" in prelaze vrednost atributa je <UserFilter> vozlišče imenovane "ID". 

Nato jo izpušča nekateri jQuery, ki čaka na stran naložiti.  Ta jQuery posodobi skrito polje z imenom "QueryFriendlyFilters" z dodajanjem vrednost atributa FilterValue.  Opomba vse je noro <XSL:besedilo> in <![CDATA[ … ]]> stvari.

To je to, Upam, da pomaga!

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Lists.asmx, GetListItems in mape

Je bila delaš nekaj raziskav za nekoga, danes okoli list.asmx spletna storitev, ki so del SharePoint 2010 (in starejših).  Ona je uspelo priti elemente seznama na korensko mapo (vključno z imena podmape), vendar strjena lava zaslužiti elemente v podmape.  Sem, da nekaj iskal okoli na internets in je presenetljivo skupno vprašanje.  Še, Nisem mogel dobiti dober odgovor na preprosto vprašanje, "če vem mapo, Kako dobim elemente v mapi?”  Iskren, Nisem poskusil vse, da težko saj sem želela slika to ena na moje za nekaj časa Smile.

To nastaviti, Ustvarili ste stran, ki je imenovan "Blogging scenarijev" in seznam po meri, imenovano »Po meri seznam s Sub mape« .  Nato ustvarili mape, imenom:

  • Leto 2005
  • Leto 2006
  • Leto 2007

Sem dodal nekaj elementov v mapo »Leto 2006« .  To je kako izgleda:

image

Moj prijatelj ni pisanje C# kodo, vendar raje uporabo Java, tako MILO ovojnico je bil, kaj je res potreben.  Zadobiti ki, Sem napisal malo jQuery in nato uporablja Violinista priti dejanske HTTP pogovor.

Tukaj je ustreznih jQuery (I kopirati šifro navzdol spodaj Če želite Kopiraj in Prilepi):

image

So prvi ključ je vključuje tako a <queryOptions> in <QueryOptions> vozlišče.  Druga ključna je, da je <Mapo> vozlišče je URL, ki ima odjemalec dostop.

Obstajajo lahko drugih načinov, da to, vendar to delal dobro za mene, ko z uporabo jQuery.

Tukaj je MILO ovojnico za zgoraj:

<soapenv:Ovojnica xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’>                
  <soapenv:Telo>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Seznam po meri s Sub mape</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef ime = "naslov’ />
          <FieldRef ime = "EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Mapo>
http://demoserver1 in Blogging Scenariji/sezname/Custom seznam s Sub mape in leto 2006</Mapo>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Telo>
</soapenv:Ovojnica>

Veliko primerov in razpravo okoli tega pripeljala me, da verjamem, da je bilo vse rabim <QueryOptions> in določite ime mape.  Za mene, I potreba obema zavijanje it znotraj <queryOptions> kot tudi določite popolnoma kvalificirano URL za v <Mapo> vozlišče.

Tukaj je jQuery AJAX setup:

$(dokument).pripravljena(Funkcija() {
       var soapEnv =
           "<soapenv:Ovojnica xmlns:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’> \
               <soapenv:Telo> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Seznam po meri s Sub mape</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef ime = "naslov’ /> \
                              <FieldRef ime = "EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Mapo>http://demoserver1/Blogging Scenariji/sezname/Custom seznam s Sub mape in leto 2006</Mapo> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Telo> \
           </soapenv:Ovojnica>";

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Lists.asmx, GetList in "vrednost ne more biti null”

Sem danes odkril da je GetList() metoda v Lists.asmx Spletna storitev je zelo skrbno imenuje ali je nagnjen k vrgel skrivnostni "Vrednost ne more biti nič" izjema (in to je ob predpostavki, da lahko prideš mimo še slabše sporočilo o splošni napaki, "Izjema tipa" Microsoft.SharePoint.SoapServer.SoapServerException’ bil vržen.")  Posebej, Sem našel kakršne koli predpono ne more zagotoviti na GetList način.  Naslednje odrezek jQuery ponazarja točka:

image

Če si to naredil, spletne storitve se odziva s "Vrednost ne more biti ničen" glede na to Fiddler-HTTP prepis, ki:

<?različica XML = "1,0" kodiranje = "utf-8"?>
  <milo:Ovojnica
     xmlns:milo ="
http://schemas.xmlsoap.org/SOAP/Envelope/"    
     xmlns:XSi = "
http://www.w3.org/ 2001/XMLSchema-primer
     xmlns:xsd ="
http://www.w3.org/ 2001/XMLSchema">

  <milo:Telo>
    <milo:Krivda>
      <faultcode>milo:Strežnik</faultcode>
      <faultstring>
        Razen tipa "Microsoft.SharePoint.SoapServer.SoapServerException’ bil vržen.
      </faultstring>
      <podrobnosti>
        <errorstring xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Vrednost ne more biti nič.
        </errorstring>
      </podrobnosti>
    </milo:Krivda>
  </milo:Telo>
</milo:Ovojnica>

seveda, verjetno ne bi dodate to predpono "s0" na svoje, vendar nekaj orodja so nagnjena k to storiti (kot Eclipse).

To je vse bolj zmedeno / frustrirajuće, ker druge metode prenašajo predpone.  Na primer, v GetListCollection metoda ne moti, če je bila pred, tudi z neumnosti predpone kot "xyzzy":

image

To »vrednost ne more biti nič« se zdi precej skupnega z lists.asmx, zato upajmo, da bo to pomagalo nekdo, v prihodnosti.

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Endlessly gnezdenje <div> Oznake in jQuery

To se zdi kot take Otkačen tema, Nisem prepričan, da je res vredno blogging o, ampak to je nikoli me je ustavil pred, tako da gremo Smile

Sem telovaditi na projektu, kjer sem vleče nekaj podatkov iz iskanja, pakiranje sporočilo o napaki XML in nato da XML na koncu preoblikovala v HTML pot XSLT.  Tam sodeluje veliko jQuery, en bit, ki izvaja nekaj funkcionalnosti tabbing.  Ko kliknete na zavihek (res, a <div>), jQuery sklicuje .hide() in .show() na različnih divs (Ko začetno polnitev stran downloads vsi zadovoljen, tako da ni nobenih povratnih objav v tem primeru).

Kup ur nazaj, zanka preklopitev logika začel obnašati nepredvidljivo in ne bi prikazuje enega od svoj tabs.  Sem navsezadnje gosenicami do dejstva, da internet explorer (vsaj) mislil, da je <div> Tags ugnezdena daleč, veliko globlje, kot predvideno.Developer toolbar bi pokazal:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <— končno kaže, da je zaprla vse poti tukaj!

Tako, Če sem storil a $("#Tab1Content").Skrij(), Bi tudi skriti Tab2 in nikoli ne bi pokazal Tab2, če tudi ni pokazal Tab1.  Kopirali in prilepili kodo v visual studio in je vse v div obloge gor lepo pokazala, tako, kot naj bi bili opravljali, videti takole:

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

Premagati mojo glavo ob zid za nekaj časa in opazil, da je bil dejanski HTML kodo ustvarja veliko praznih <div> Tags, kot:

<telo>

  <div id = "Tab1Content">

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

  </div>

  <div id = "Tab2Content">

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

  </div>

</telo>

(Zgoraj je waaaaaaaaaaaay poenostavljeno.  Prazen div oznake so popolnoma veljavna. Nekaj mojih <div> oznake so bile polne vsebine, vendar ni bilo veliko več.  Sem prišel do spoznanja, da moje <XSL:za vsako> direktiv so bili oddajajo skrajšani obliki div tags ko xsl:za vsako nisem "najde podatkov.  Sem prisiljen HTML komentar v izhod, kot je prikazano:

image

 

Čez sem storil to, vse div postavili lepo in moj zanka preklopitev začel delati.

Kot vedno, Jaz upanje to pomoč nekdo v ščepec.

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Še več jQuery–Velikost primer slike

Sem podedoval spletnih gradnikov iz starega dobavitelja naročnika in je podoba velikost problem.  Slike morajo biti 60×50 ampak za nekatere čuden razlog, original dobavitelja prisilila v 42×42, tako izgledajo Izgnječen:

 

Dobro sliko

Slab imidž

Tukaj je označevalni (nekoliko poenostavljeno):

<namizni razred = "razširjeni outlook">
  <THEAD>
    <tr>
      <th  širina = "100′>3 Torek</th>
    </tr>
  </THEAD>

  <TBODY>
    <razred tr = "napoved">
      <td širino = "100′>
        <UL>
          <Li class = "high">Visoko: 72&deg;F</Li>
          <Li class = "majhna">Nizko: 44&deg;F</Li>
          <Li class = "stanju">Sončno
            <img src =’
http://deskwx.weatherbug.com/images/Forecast/icons/localized/60×50/en/trans/cond007.png’ širina = 42’ višina = 42’ ALT =” />
          </Li>
        </UL>
      </TD>
    </tr>

  </TBODY>

</Tabela>

Bom vas opozoriti, da čeprav je pot do slike, sama prikazuje ustreznega razsežnosti (60×50) uradne to prisiljeni v 42×42.  zakaj?  noro.

Kakorkoli že, Hotela sem, da hitro in enostavno rešitev za težavo in sem se obrnil k jQuery.  Trik je najti vse ustrezne <img> Tags.  Nisem hotel postopati z vse druge oznake img (od katerih so mnogi).  Ta bit jQuery did ukana:

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

<skript type = "text/javascript">
     $(dokument).pripravljena(Funkcija () {

         $("li.condition > img ").vsak(Funkcija (indeks, element)
           
{
             $(element).CSS("širina", "60"); 
             $(element).CSS("višina", "50");
            });
     }); // na dokument obremenitev
</skript>

Ta košček kode najde zbiranje <Li> Tags katerega razreda je "stanje" in <img> otroci.  To nato poudarjeno skozi vse to.  Obdelan brezhibno.

Verjetno bi poenostaviti to, ampak nikoli nisem bil na vrste človek unix, ki reši π za 18 števk natančnost z uporabo sed in awk in nisem te vrste, če jQuery fant bodisi Smile.

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Izvajati sistem globalne Pop-up obvestila

Sem napisal članek za www.SharePoint.briefing.com z naslovom"Izvajati sistem globalne Pop-up obvestila.”  Ta funkcija je bila izvedena za community college komunicirati šole zapiranj zaradi snega in tako naprej. 

Uporablja seznam po meri, iz škatle SharePoint web storitve in nekaj jQuery za delo.

Tukaj je dražljivko:

image

Preberite celotno stvar tukaj: http://www.sharepointbriefing.com/features/article.php/3918471/Implement-a-Global-Pop-up-Notification-System.htm

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin

Prevzeti nadzor nad OK in Prekliči gumbi

Sem napisal Ta članek nekaj časa nazaj, vendar izgleda, da nisem link nanj, od svoj blog v času, Torej, tukaj gre:

image

Ta članek opisuje, kako prisiliti newform.aspx preusmeriti na eni strani, ko uporabnik klikne OK in drugo stran, ko je kliknil Prekliči.

</namen>

Naročite se na moj blog.

Sledite mi na Cvrkutati na http://www.twitter.com/pagalvin