Archívy kategórie: SharePoint rozvoja

HTTP 406 Chyba pri použití uhlové $http.get proti SharePoint ZVYŠOK koncové body

Aktualizácia: Marc AD ndersson poukázal na to, tento veľký kus info: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. To vysvetľuje veľa :).

To môže byť niekedy najhoršie názov blogu! Anyhoo.

Zvyčajne robiť, všetky moje prototypovania proti O365 stupňa. Mám moje osobné stupňa tak, že nemusím obávať ovplyvňujúce niekto. Ako stranou-Pamätajte si, kedy nazývame vykonáva okolo virtuálnych strojov na našich laptopoch machom-SQL Server, IIS, rozhodovaní vs Hyper-V. VMWare? Anyhoo...

Mali vyvinuté aplikácie pomocou uhlového v tomto prostredí, ktoré má, okrem iného, this:

$http.Get(AdresaURLServera)
.úspech(Funkcia(údaje, stav, hlavičky, config) {

var getLinksResponse = údaje;

getLinksResponse.value.forEach(Funkcia(theResult) {

// a tak ďalej a tak penou

To bolo v poriadku len v dvoch rôznych SharePoint online prostredie. Avšak, keď môj kolega portovaný na inštanciu Cloudshare, on bol stále HTTP 406 chyba (ktorý bol prvýkrát, čo som kedy dostal ten, Takže... hurá, hádam). Som trochu výskumu a všimol si, že "Prijať" Hlavička bol preč. On-line služby SharePoint bol úplne spokojný s:

Prijať: Aplikácia/json

Ale cloudshare stupňa (čo je SP na prem, hostil na virtuálnom serveri) chcel klasické "Odate = ukecaný" pridané v aj:

Prijať: Aplikácia/json;Odata = podrobného

Opraviť to, pridali sme hlavičky ako také:

var config = {hlavičky: {
"Accept": "aplikácie/json;Odata = verbose "
}
};

$http.Get(AdresaURLServera,config)
.úspech(Funkcia(údaje, stav, hlavičky, config) {

var getLinksResponse = údaje;

getLinksResponse.value.forEach(Funkcia(theResult) {

// a tak ďalej a tak penou

Že sa zbavili 406, ale to tiež zmenil formát odpovede. To bolo viac... podrobného. (haha!) Ďalšie zmeny boli požadované, a tu je konečný výsledok:

var config = {hlavičky: {
"Accept": "aplikácie/json;Odata = verbose "
}
};

$http.Get(AdresaURLServera,config)
.úspech(Funkcia(údaje, stav, hlavičky, config) {

var getLinksResponse = údaje;

getLinksResponse.d.results.forEach(Funkcia(theResult) {

// a tak ďalej a tak penou

Len sa zmenil 30 minúte problém pre nás, tak my lucked von. Dúfajme, že niekto nájde to užitočné.

</koniec>

Rastúce povedomie / Prijatie JavaScript rámcov

Môj kolega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), písal krátke zhrnutie blogu o rámcoch on má rád, alebo aspoň bola s pomocou so službou SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery sa zdá k boli víťaza na poli, tak povediac, rokov, ale iní sú viac nových a fotografie zoradiť to bojuje, ako Uhlová. (SPServices, samozrejme, bol záchranca života pre rokov a naďalej bude tak myslím).

Čo sú ľudia pomocou? Sa viac sústreďuje na obrábanie spoločnosti Microsoft (CSOM / JSOM) alebo pohybujú viac smerom k Uhlová, Knockout, Ember, atď?

Mám rastúci sklonmi k týchto rámcov, non-Microsoft. Myslím, že MSFT vecí je ťažšie a ťažšie pre prácu s, vyžadujúce takmer toľko učenia ako staré-štýl na strane servera dev.

Post komentár tu, alebo po dobu Big Apple SharePoint Ak chcete diskutovať o (Big Apple bude mať viac pravdepodobné, dobrá diskusia).

</koniec>

Spinning úlohy časovača SharePoint z lokality kolekcia konfigurácie

Môj kolega, Ashish Patel, napísal blog post opisujúce flexibilné časovača prácu architektúry to poskytuje niektoré pekné flexibilitu na podporu dlho-bežiaci úlohy alebo správy.  Podľa jeho slov:

1. Analýza začiarknuté súbory a zasielanie upomienok na jednotlivcov, ak počet dní (pretože súbor bol vzatý k sebe) prekročiť určité prahové limity

2. Odstránenie odkazov od ostatného obsahu pri konkrétnom obsahu je odstránený alebo archivovať zo systému

3. Používateľ chce vidieť všetky upozornenia, na ten objednaný vo všetkých webových lokalít v kolekcii lokalít

4. Zasielanie upomienok na autorov cieľom preskúmanie obsahu po dobu preskúmanie bola zadaná v obsahu a že sa blíži dátum

Dobre, zoznam pokračuje...

– Viac na: http://www.bigapplesharepoint.com/ stránok/View--Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

Sú chvíle, v mojej minulosti, kedy niečo takého by bolo veľmi užitočné.

</koniec>

ako: Nakonfigurujte jednotku Test a Test pokrytia s QUnit.js a Blanket.js pre kanceláriu 365 SharePoint App

Intro

Skúma jednotkové testovanie a test pokrytia JavaScript ako som pracovať na novej aplikácie SharePoint pre službu SharePoint online v Office 365 apartmán.  Zjavné výskum cesty ma viedli k Qunit.js a hneď po ktoré, na Blanket.js.

QUnit dajte mi nastaviť unit testov a ich zoskupujú do modulov.  Modul je len jednoduchý spôsob, ako organizovať súvisiace testy. (Nie som si istý som používať to ako určené, ale funguje to pre mňa tak ďaleko s malým sadu testov doteraz definovali).

Blanket.js integruje s Qunit a ukáže mi aktuálne riadky JavaScript boli – a dôležitejšie – nie boli skutočne vykonané v priebehu vykonávanie skúšok.  To je "pokrytie"-linky, ktoré vykonávajú sú pokryté skúšobnými zatiaľ čo iní nie.

Medzi nastavenia dobrý testovacie prípady a zobrazením pokrytie, môžeme znížiť riziko, že náš kód má skryté vady.  Dobré časy.

Qunit

Predpokladám, že máte vaše Visual Studio projektu nastaviť, Začnite stiahnutím JavaScript balík od http://qunitjs.com.  Pridajte zodpovedajúce CSS a JavaScript na vašich riešenie.  Baňa vyzerá takto:

image

Obrázok 1

Ako môžete vidieť, Bol som pomocou 1.13.0 v tej dobe som napísal tento blog post. Nezabudnite stiahnuť a pridať CSS súbor.

Ktoré z cesty, Ďalším krokom je vytvoriť nejaký druh testu postroj a referenčných Qunit kúsky.  Som testovanie banda funkcie súboru so skriptom tzv "QuizUtil.js", tak som vytvoril stránku HTML s názvom "QuizUtil_test.html" ako je uvedené:

image Obrázok 2

Tu je kód:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<vedúci>
    <názov>QuizUtil test s Qunit</názov>
    <odkaz rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <skript typ= text/javascript"" src="QuizUtil.js" údajov-kryt></skript>
    <scenár typu ="textu/javascript" src ="qunit-1.13.0.js"></skript>
    <scenár typu ="textu/javascript" src ="blanket.min.js"></skript>

    <skript>
        modul("getIDFromLookup");
        skúška("QuizUtil getIDFromLookupField", Funkcia () {
            var goodValue = "1;#Paul Galvin";

            rovnaké(getIDFromLookupField(goodValue) + 1, 2), "ID [" + goodValue + "] + 1 by mala byť 2";
            rovnaké(getIDFromLookupField(Nedefinovaný), Nedefinovaný, "Nedefinovaný vstupný argument by sa mal vrátiť Nedefinovaný výsledok.");
            rovnaké(getIDFromLookupField(""), Nedefinovaný, "Prázdne vstupný argument by sa mal vrátiť hodnotu undefined.");
            rovnaké(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), Nedefinovaný,"Mali by vždy vrátiť výsledok kabriolet Integer");
            rovnaké(getIDFromLookupField("2;#nejakej inej osobe"), "2", "Kontrola [2;#nejakej inej osobe].");
            rovnaké(getIDFromLookupField("9834524;#dlhý hodnota"), "9834524", "Veľké hodnoty testu.");
            notEqual(getIDFromLookupField("5;#niekto", 6), 6, "Testovanie notEqual (5 nerovná sa 6 pre tento vzorka: [5;#niekto]");

        });

        modul("htmlEscape");
        skúška("QuizUtil htmlEscape()", Funkcia () {
            rovnaké(htmlEscape("<"), "&lt;", "Unikol menej ako prevádzkovateľ ('<')");
            rovnaké(htmlEscape("<div class =  "someclass">Nejaký text</DIV>"), "&lt;div triedy =&quot;someclass&quot;&gt;Nejaký text&lt;/DIV&gt;", "Zložitejšie testovací reťazec.");
        });

        modul("getDateAsCaml");
        skúška("QuizUtil getDateAsCaml()", Funkcia () {
            rovnaké(getDateAsCaml(nové Dátum("12/31/2013")), "2013-12-31T:00:00:00", "Testovanie tvrdý kódovaný dátum: [12/31/2013]");
            rovnaké(getDateAsCaml(nové Dátum("01/05/2014")), "ROKU 2014-01-05T:00:00:00", "Testovanie tvrdý kódovaný dátum: [01/05/2014]");
            rovnaké(getDateAsCaml(nové Dátum("01/31/2014")), "ROKU 2014-01-31T:00:00:00", "Testovanie tvrdý kódovaný dátum: [01/31/2014]");
            rovnaké(getTodayAsCaml(), getDateAsCaml(nové Dátum()), "getTodayAsCaml() by sa mal rovnať getDateAsCaml(nový dátum())");
            rovnaké(getDateAsCaml("nezmysel hodnota"), Nedefinovaný, "Snažte sa získať dátum s hodnotou nezmysel.");
            rovnaké(getDateAsCaml(Nedefinovaný), Nedefinovaný, "Skúste získať dátum [Nedefinovaný] dátum.");
        });

        modul("getParameterByName");
        skúška("QuizUtil getParameterByName (z reťazca dotazu)", Funkcia () {
            rovnaké(getParameterByName(Nedefinovaný), Nedefinovaný, "Snažte sa dostať Nedefinovaný parameter by sa mal vrátiť Nedefinovaný.");
            rovnaké(getParameterByName("neexistuje"), Nedefinovaný, "Skúste si hodnoty parametra, keď vieme, že parameter neexistuje.");

        });

        modul("Cookies");
        skúška("QuizUtil rôznych cookie funkcie.", Funkcia () {
            rovnaké(setCookie("skúška", "1", -1), getCookieValue("skúška"), "Získať nastaviť súbor cookie by mal fungovať.");
            rovnaké(setCookie("anycookie", "1", -1), pravda, "Nastavenie platné varenie mali vrátiť"pravda".");
            rovnaké(setCookie("blázon cookie meno !@#$%"%\^&*(()?/><.,", "1", -1), pravda, "Nastavenie názvu zlé cookie by sa vrátiť"false".");
            rovnaké(setCookie(Nedefinovaný, "1", -1), Nedefinovaný, "Absolvovanie Nedefinovaný názov cookie.");
            rovnaké(getCookieValue("neexistuje"), "", "Cookie neexistuje testu.");
        });

    </skript>
</vedúci>
<telo>
    <DIV Identifikácia= "qunit"></DIV>
    <DIV Identifikácia= "qunit-svietidlo"></DIV>

</telo>
</HTML>

Existuje niekoľko vecí sa deje tu.:

  1. Odkazovanie na môj kód (QuizUtil.js)
  2. Odkazovanie na Qunity.js
  3. Definovanie niektorých modulov (getIDFromLookup, Súbory cookie, a.i.)
  4. Umiestnenie <DIV> ktorého ID je "qunit".

Potom, Môžem len vytiahnuť túto stránku a dostanete niečo takého:

image

Obrázok 3

Ak sa pozriete cez vrchol, máte niekoľko možností, z ktorých dva sú zaujímavé:

  • Skryť prešiel testami: Docela zrejmé.  Môžete pomôcť vaše oči len vidieť problémové oblasti a nie veľa neporiadok.
  • Modul: (Rozbaľovací zoznam): To bude filtrovať testy na len tých skupín skúšok chcete.

Pokiaľ ide o samotných – pár komentárov testov:

  • Je samozrejmé, že musíte napísať svoj kód tak, aby sa testovatelné na prvom mieste.  Pomocou nástroja môže pomôcť uplatneniu tejto disciplíne. Napríklad, Mal som funkciu s názvom "getTodayAsCaml()”.  To nie je veľmi testovatelné, pretože to trvá žiadny vstupný argument a to vyskúšať pre rovnosť, budeme musieť neustále aktualizovať kód testu odrážať aktuálny dátum.  Som prepracovaný Pridanie dát vstupný parameter potom absolvovanie aktuálny dátum kedy chcem dnešného dátumu vo formáte CAML.
  • Qunit rámci dokumenty svojej vlastnej testy a sa zdá byť docela silný.  To môže robiť jednoduché veci, ako je testovanie pre rovnosť a má tiež podporu pre ajax štýle volania ("skutočné" alebo Posmívali pomocou vášho obľúbeného posměvače).
  • Prechádzajú procesom tiež núti vás premyslieť hrana prípady-čo sa stane s "nedefinované" alebo null je odovzdaný do funkcie.  Je to mŕtvy jednoduchý test týchto scenárov von.  Dobré veci.

Pokrytie s Blanket.js

Blanket.js dopĺňa Qunit sledovanie skutočného riadky kódu vykonať v priebehu beží vaše testy.  Integruje priamo do Qunit takže aj keď je úplne samostatná app, hrá pekne-naozaj vyzerá to je jeden plynulý app.

To je blanket.js v akcii:

image Obrázok 4

image

Obrázok 5

(Vlastne musíte kliknúť na "Umožniť pokrytie" políčko v hornej [Pozri obrázok 3] aby to bolo.)

Zvýraznenej čiary na obrázku 5 neboli realizované niektorý z mojich testov, Takže Musím vymyslieť test, ktorý by sa mohli spustiť ak chcem plné pokrytie.

Získajte blanket.js pracuje podľa nasledujúcich krokov:

  1. Stiahnuť z: http://blanketjs.org/.
  2. Pridajte ju do vášho projektu
  3. Aktualizovať stránku postroj testu (QuizUtil_test.html v mojom prípade) takto:
    1. Referenčný kód
    2. Ozdobte svoj <skript> odkaz takhle:
    <skript typ= text/javascript"" src="QuizUtil.js" údajov-kryt></skript>

Blanket.js zdvihne atribút "údajov-obal" a má svoje kúzlo.  Háky do Qunit, Aktualizácia používateľského rozhrania pridať možnosť "Povoliť pokrytie" a voila!

Zhrnutie (TL; DR)

Použitie Qunit písať testovacie prípady.

  • Stiahnite si ju
  • Pridajte ju do vášho projektu
  • Napísať test postroj stránku
  • Vytváranie testov
    • Niektoré kód, aby sa testovatelné refactor
    • Buďte kreatívny!  Myslím, že blázon, možné scenáre a testovať ich Každopádne.

Použitie blanket.js zabezpečiť pokrytie

  • Skontrolujte, či Qunit funguje
  • Stiahnuť blanket.js a pridajte ho do vášho projektu
  • Pridajte ju do postroja testovaciu stránku:
    • Pridať odkaz na blanket.js
    • Pridať atribút "údajov-kryt" na vašom <skript> Tag
  • Spustiť Qunit testov.

Nikdy som nič z toho predtým a mal nejaké primitívne veci pracovať v niekoľkých hodín. 

Happy testovanie!

</koniec>

undefinedVyberajte 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

Jedna príčina pre "tvorca Táto porucha nešpecifikoval dôvod.”

Bol som robí veľa práce s SharePoint vyhľadávanie v poslednej dobe a špeciálne triedy KeywordQuery, vlastnosti a metódy.

Ak chcete výslednú množinu výsledkov nad rámec obvyklý podozrivé (pozri tu), môžete pridať do kolekcie SelectedProperties, rovnako ako v:

myKeywordQuery.SelectProperties.Add("xyzzy");

Mnohé vďaka a tip klobúk na Corey Roth a Táto nesmierne užitočná blog post (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

V mojom prípade, "xyzzy" nie je skutočne spravovaných vlastnosť.  Keď som ho pričlenilo k SelectedProperties napriek tomu, SharePoint hodil jeden z mojich obľúbených niekedy runtime výnimky:

"Tvorca Táto porucha nešpecifikovala dôvod."

I predovšetkým ako veľké "R" v dôvod.  To znie mi ako ekvivalent .net"Nemám žiadne úst, a I musia scream.”

</koniec>

Vyberajte môj blog.

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

Užitočný odkaz: Predvolené je výsledkom KeywordQuery Search

Keď vyvolať spustiť() metóda na KeywordQuery, môžete vytvoriť ResultTable založené na ResultType.RelevantResults.  Tento kód úryvok ilustruje, čo znamená:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

Výsledná tabuľka bude mať tieto stĺpce s informáciami: 

Identifikácia
Hodnosť
Hlava
Autor
Veľkosť
Cesta
Popis
Písať
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Tento zoznam I pochádzajúce z lokality SharePoint 2010 životné prostredie, Enterprise edition.  Dúfajme, že to bude užitočné pre niekoho v budúcnosti.

</koniec>

Vyberajte môj blog.

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

Jedným z dôvodov: "Neporadilo sa extrahovať súbor cab v roztoku”

Pri práci na program visual studio webová časť projektu dnes, Urobil menšie re-org niektoré súbory umiestniť do priečinka _layouts ako súčasť procesu nasadenia. Osobitne, Premenovaný súbor .js z "TypeAhead.js" na "TypeAhead(staré).js"  Mám v pláne ju odstrániť ako jej nástupca "TypeAhead.js" dokáže správne.  To vyzeralo, ako to:

image

To okamžite spôsobil problém s programu visual studio, keď som sa pokúsil rozvinúť projektu:

Vyskytla sa chyba v nasadení kroku pridať riešenie: Neporadilo sa extrahovať súbor cab v roztoku.

Ukazuje sa, že by mala dať zátvorka nie v názvoch súborov.  I vyňal moc hlavy a že vyriešený problém.

</koniec>

Vyberajte môj blog.

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