Blog

  • Kroatien-Rundreise 2011

    Schon seit einiger Zeit wollte ich einen Blog-Eintrag über meine letztjährigen Kroatien-Ferien schreiben, doch leider kam ich bisher nicht dazu… ja, die guten, alten Prioritäten 🙂 Wie auch immer hier nun der Reise-/Ferien-Bericht.

    Vielleicht vorneweg: Warum Kroatien? Wurde uns von Freunden und Verwandten empfohlen. Es sei ähnlich wie in Italien, jedoch mit besserer Infrastruktur und die Menschen seien noch etwas netter als in Italien. Das wollten wir natürlich überprüfen 🙂

    Nachfolgend eine Übersicht unserer Reiseroute. Start in der Schweiz in Richtung Poreč (A), danach via Plitvicer Seen nach Dubrovnik und via Inseln und der Küste entlang wieder hinauf zum letzten Stop in Krk (O).

    Kroatien-Rundreise 2011
    Kroatien-Rundreise 2011: Übersicht der Reiseroute

    Los ging es Anfangs September 2011. Meine Freundin und ich fuhren mit unserem eigenen Auto durch den Gotthard, via Mailand, Vendig, Slovenien nach Koratien. Wie bereits erwähnt, war der erste grössere Stop und auch die erste Übernachtung war in Poreč, in Istrien (A). Istrien ist dieser Dreieckige Zipfel am Meer, ganz im Nordwesten von Kroatien. Die gesamte Gegend, eigentlich bis herunter nach Dubrovnik (der Küste entlang) ist italienisch angehaucht, da früher diese Gebiete zur Republik Vendig gehörten, auch verstehen noch viele Menschen dort italienisch. Als Tourist hat man aber auch mit englisch keine grösseren Schwierigkeiten, ein paar Brocken kroatisch werden aber sich gerne gehört.

    Nach Poreč fuhren wir via Funtana (kurzer Zwischenhalt) weiter nach Rovinj (B), wo wir zwar nicht übernachteten aber eine längere Pause machten, um uns den Küstenort anzuschauen. Der Ort ist wunderschön gelegen und die Altstadt wird komplett vom Meer umschlossen. Die Besichtigung kann ich sehr empfehlen. Nach Rovinj fuhren wir dem Limski-Kanal (dort gibt es Austernzuchten) entlang in Richtung Pula. Kurz vor dem Limski-Kanal gibt es noch jede Menge fahrende Händler am Strassenrand, welche einem Honig, Käse oder Schnaps (Grappa) verkaufen.

    In Pula (C) angekommen gingen wir als erstes gleich mal das Amphitheater besichtigen, eines der grössten in Europa und zum Glück auch noch einigermassen gut erhalten. Am Abend gings dann in die Altstadt von Pula, dem touristischen Zentrum. Dort gibt es einige interessante alte Architektur und den Sergierbogen zu besichtigen. Essen kann man in Pula, wie in allen Orten in denen wir waren gut. Wer Pizza, Spanferkel oder Meeresfrüchte mag, der findet sicher immer etwas zu essen.

    Nach Pula fuhren wir mit dem Auto weiter nach Premantura (D) am südlichen Zipfel von Istrien. Von dort brachte uns ein kroatischer Seebär in seinem kleinen Motorfischer-Boot nach Porer (X0), eine kleine Insel mit Leuchtturm, ca. 1.5 Kilometer vom Festland entfernt. Die Überfahrt dauerte ca. eine Stunde, welche der Kapitän uns mit einigen Gläsern selbstgemachtem kroatischen Wein verkürzte… Der Leuchtturm hat zwei 4er-Apartments, wovon eines von uns für zwei Nächte gemietet wurde. Das zweite Apartment war erst ab dem zweiten Tag von anderen Touristen belegt, so dass wir die Insel die meisten Zeit in Ruhe für uns hatten. Ein Leuchtturmwärter mit seiner Frau war zwar ebenfalls noch vor Ort, doch von dem hat man eigentlich kaum etwas mitbekommen. Da man auf dem Leuchtturm seine Ruhe hat, konnte man mal richtig schön abschalten und in Ruhe Faulenzen und ein Buch lesen. Zwei betonierte Anlagestellen dienten uns als Ausgangspunkt für einige Runden Schwimmen und Schnorcheln. Da in Kroatien praktisch alle Strände Stein-/Kiesstrände sind, ist das Wasser sehr klar. Da es sehr viele Seeigel hat, sollte man nur mit guten Badeschuhen ins Wasser gehen. Um den Leuchtturm herum, war auch eine Regelrechte Seeigel-Kolonie, aber mit ein bisschen aufpassen passiert nichts.

    Die Rückreise vom Leuchtturm gestaltete sich etwas schwierig, da der Kapitän es mit der Pünktlichkeit nicht so genau nahm und Bequemerweise zuerst gleich die nächsten Touristen abwartete um sie auf die Insel zu bringen. So mussten wir fast zwei Stunden warten, was nicht gerade sehr lustig war, wollten wir doch an diesem Tag noch einiges an Kilometer zurücklegen.

    Wieder auf dem Festland angekommen fuhren wir nach Rijeka (E), um während eines kurzen Zwischenhaltes etwas zu essen und das Stadtzentrum zu besichtigen. Das Zentrum ist schön und wenn man Einkaufen möchte, findet man eine grosse Fussgängerzone mit vielen Läden, vor allem Kleidungsläden. Am selben Tag fuhren wir dann gleich weiter in Richtung Nationalpark Plitvicer Seen (F). Auf dem Weg dorthin muss man irgendwann von der Autobahn, welche im Übrigens überall sehr gut ausgebaut ist, herunter und fährt auf Überlandstrassen durch Städtchen und Dörfer weiter. An vielen Häusern sind noch die Spuren des Krieges sichtbar (Einschusslöcher) und es gibt viele leerstehende und verfallene Häuser. Zuerst hatten wir etwas Mühe unseren Camping-Platz zu finden, wo wir zelten wollten, da dieser im Navigationsgerät nicht auffindbar war, aber nach einigen Extrafahren über die Strasse, welche durch den Nationalpark führt lokalisierten wir den Camping-Platz einige Kilometer vor dem Eingang des Parks in Korana, respektive beim Fluss Korana.

    Das Zelt konnte relativ schnell aufgebaut werden und danach ging es ab zum Einkaufen in den nächstgelegen Ort, damit wir etwas auf dem Gasbrenner kochen und anschliessen verzehren konnten.

    Am nächsten Morgen gingen wir dann in den Nationalpark. Dieser ist sehr eindrücklich, schön und empfehlenswert. Dies wissen leider auch die anderen gefühlten 100’000 Touristen, so steht man sich im Park teilweise fast gegenseitig auf die Füsse, da alle auf den selben schmalen Trampelfaden rund um die einzelnen Seen herumspazieren muss. Trotzdem ist das nicht sehr tragisch und man kann die wunderschön blau- und türkis-schimmernden Seen und die vielen Wasserfälle bestaunen.

    Nach einer weiteren Übernachtung im Zelt ging es am nächsten Morgen in der Früh weiter nach Dubrovnik (G). Eine sehr lange Strecke, aber auf den guten Autobahnen lässt diese sich in vernünftiger Zeit bewältigen. Kurzzeitig mussten wir einige Kilometer vor Dubrovnik noch durch Bosnien fahren, da Dubrovnik eine Exklave bildet und nur auf dem Seeweg, über Fähren, direkt mit dem restlichen Kroatien verbunden ist. In Dubrovnik hatten wir leider nicht wie an allen anderen Orten vorzeitig ein Hotel reserviert und hatten grosse Mühe noch ein Zimmer für zwei Nächte zu finden. Die meisten Hotels waren ausgebucht oder verlangten horrende Preise für ihre Zimmer. Nach ca. 2 Stunden suchen fanden wir dann jedoch ein nicht überteuertes Zimmer im sehr schönen Hotel Ivka, welches wie wir später herausfanden auch von unserem Reiseführer empfohlen wurde. Das Hotel hat keinen Strand ist aber trotzdem relativ Zentral gelegen und zu den meisten touristischen Orten ist es nicht all zu weit entfernt. Wenn ihr euch also unnötigen Stress ersparen wollt, dann reserviert in Dubrovnik das Hotel bevor ihr dort ankommt 🙂

    Am nächsten Morgen gingen wir in die Old Town, die Altstadt von Dubrovnik, welche ca. 30 Minuten vom Hotel entfernt war. Die Altstadt ist direkt an der Adria gelegen und wird von einer mittelalterlichen Staatmauer umschlossen. Auch hier findet man sich unter tausenden anderen Touristen wieder. Trotzdem ist auch die Altstadt ein Abstecher wert und ist sehr schön anzuschauen. Interessant ist der Runtgang um die Altstadt über die Stadtmauer (kostenpflichtig). Bei 35° Grad kommt man dabei aber ganz schön ins Schwitzen, aber unterwegs gibt es einige Getränkeständer und auch ein Restaurant auf der Mauer, welches kühles, perlendes, erlösendes Bier offeriert. Von der Altstadt aus gingen wir mit einer Passagierfähre zur nahgelegen Insel Lokum. Dort besichtigen wir den botanischen Garten (nicht unbedingt ein Highlight) und wanderten bis zum höchsten Punkt der Insel zu einer Turmruine hinauf, was bei der Hitze auch relativ anstrengend war. Gegen den Abend gingen wir dann an den Felsenstrand von Lokum. In die grossen Felsen wurden Stahlleitern, welche ins Wasser führen befestigt, so dass man gut schwimmen und schnorcheln gehen kann. Auch hier ist das Wasser sehr klar und man kann schön Fische und sogar einige Schwärme mit grösseren Fischen beobachten, wenn man Glück hat.

    Nun ging die Reise am nächsten Tag weiter via Auto-Fähre nach Korčula (H). Dort angekommen besichtigen wir die Stadt Korčula selber, welche sich als Geburtsstadt von Marco Polo ausgibt. Überall gibt es zu diesem Thema Souvenier-Läden und sogar ein Musem im angeblichen Geburtshaus von Marco Polo. Da muss wohl jemand den Venzianern mitteilen, dass Marco Polo nicht ein berühmter Sohn ihrer Stadt ist. Nach dem kurzen Zwischenhalt in Korčula fuhren wir mit dem Auto gleich weiter über die Insel nach Vela Luka. Zwischendurch gab es noch eine Abzweigung zu einem Strand, welche uns über einen äusserst abenteuerlichen, engen und teilweise steilen Weg zu einer kleinen Bucht mit Kiesstrand führte. Ganz nett, aber irgendwie den Aufwand mit dem abenteuerlichen Weg nicht unbedingt wert.

    Vela Luka (I), welches wir am Abend erreichten war leider nicht gerade eine Perle von Ort. Alles sah etwas heruntergekommen aus und erinnterte mich an alte Hotelbauten aus der sozialistischen DDR, welche schon länger nicht mehr in Stand gehalten wurden. Unser Hotel (Posejdon) war äusserlich auch nicht gerade sehr hübsch aber drinnen sah es renoviert und modern aus. In Vela Luka konnte man nicht viel machen, aber in der Hauptsaison könnte man sicher mit den anderen zehntausend Touristen in den Massentourismus-Hotels und den dafür nicht gerade grossen Stränden viel Spass haben.

    Nach einer Nacht im Posejdon ging es dann wieder weiter mit der Auto-Fähre nach Split (J), der zweitgrössten Stadt Kroatiens. Dort quartierten wir uns im Hotel Consul ein, welches eher ein Business Hotel ist. Am Nachmittag ging es in die Altstadt von Split, welche direkt am Meer liegt und teilweise von einer Stadtmauer umgeben ist. Alles recht vergleichbar mit der Altstadt von Dubrovnik oder Rovinj, trotzdem sehr sehenswert. Vom Turm der Kathedrale aus hat man eine schöne Übersicht über die Altstadt und den Rest von Split.

    Am nächsten Morgen fuhren wir weiter nach Šibenik (L), machten unterwegs aber noch einen Zwischenhalt in Trogir (K). Trogir ist auch ein kleines Städtchen (zumindest die Altstadt) und liegt malerisch auf einer langezogenen Insel in einem Meeresarm. Sehr schön anzusehen und auch gut geeignet um Zwischendurch etwas zu essen. Trogir blieb aber nicht der einzige Zwischenhalt, auch in Primošten hielten wir kurz an und wanderten durch den extrem malerischen Ort, welcher praktisch komplett vom Meer umschlossen wird und so eine Insel aus Häusern bildet, welche aus der Adria ragt.

    Einige Kilometer von Šibenik entfernt lag am Meer unserer nächste Übernachtungsort für zwei Nächte, der Campingplatz Solaris. Da leider der gesamte Boden des Campingplatzes aus sehr hartem Untergrund bestand (steinig, keine Erde), waren wir mit unseren 0815-Zelt-Heringen ganz schön angeschmiert. Ich machte noch eine Odysse durch etliche kroatische Einkaufszentren, doch auch nach über einer Stunde suchen, fand sich kein besserer Hering. Glücklicherweise hatten unsere deutschen Campingplatz-Nachbarn noch einige robustere Heringe vorrätig und konnten dies uns schenken. Besten Dank hier nochmals von mir! Mit den neuen Heringen ging das Befestigen des Zeltes im steinigen Untergrund dann problemlos.

    Am darauffolgenden Morgen fuhren wir mit dem Auto nach Murter, wo wir ein Touristenboot für den Kornati Nationalpark suchten und fanden, zum Glück auch ohne Reservation. Die Rundfahrt mit dem Schiff dauerte den ganzen Tag und führte uns durch den wunderschönen National Park (X1), einem Archipel. Die Insel haben kaum Bäume da diese in der Antike abgeholzt wurden. Nur Büsche prägen die Hügelrücken, welche aus dem Wasser ragen, was sehr malerisch aussieht. Unser Schiff machte auf einer Insel einen Zwischenhalt und wir konnten uns die Beine vertreten, in einer Bucht mit weissem Sandstrand baden gehen und die Hügel der Insel erklimmen. Gegen den Abend ging es dann wieder zurück nach Murter und führ uns zurück nach Šibenik.

    Wenn ich mich richtig erinnere, ging es gleich am nächsten Tag dann ab in einen weiteren Nationalpark, den Nationalpark Krka (X2). Auch dieser ist von Šibenik aus gut mit dem Auto zu erreichen. Dieser Park wahr wieder sehr wasserfall- und seen-lastig, ist aber auch eine Reise wert. Gute Wege führen einem durch den Park und es ist sogar möglich bei einem grossen Wasserfall im Park zu baden, was die meisten Besucher dann auch machen. Gegen den Abend fuhren wir mit dem Auto weiter an einen anderen Teil des Nationalparks und besichtigten einen breiten Fluss, welcher sich durch ein Tal schlängelt.

    Šibenik selber schauten wir nur kurz am Tag der Abreise vom Camplingplatz an. So sahen wir das Stadtzentrum mit dem Schildkrötenbrunnen und eine alte Festung, welche über der Stadt thront.

    Nun ging es Richtung Krk. Wiederum eine längere Autofahrt, welche durch ein Zwischenhalt in Zadar aufgelockert wurde. Dort gibt es auch eine Altstadt zu betrachten und einen Kirchturm den man besteigen kann, um einen schönen Überblick über die Stadt zu erhalten. Auch Zadar liegt direkt am Meer und wird von diesem teilweise umschlossen.

    Schliesslich erreichten wir gegen Abend unser Hotel in Krk (O) auf der Insel Krk, der neben der Insel Cres grösste Insel der Adria. Die Insel ist durch eine grosse Brücke mit dem Festland verbunden, welche Mautpflichtig ist.

    Am nächsten Tag fuhren wir mit dem Auto nach Baška, einem Ort mit riesigem und schönem Strand am östlichen Ende von Krk. Dort gingen wir allerdings nicht baden, sondern beganen unsere Wanderung, an einem FKK-Campingplatz 😮 vorbei nach Mala Luka, respektive Vela Luka (nicht zu verwechseln mit dem Vela Luka auf Korčula), zwei Buchten. Die Wanderung zog sich etwas länger hin als erwartet und Turnschuhe waren wohl nicht die schlaueste Idee für den sehr steinigen Weg über einige Hügelkuppen – so brauchten wir für ca. 4 Kilometer gute zwei bis drei Stunden. Die Wanderung wurde jedoch belohnt mit einem wunderbaren Blick auf die zuvor genannten zwei Buchten.

    Am Strand von Vela Luka badeten wir dann kurz und tranken einige erfischende Getränke in einem kleine Restaurant und fuhren abends mit dem Schnellboot zurück nach Baška, was einiges weniger zeitaufwändig war, als die Wanderung.

    Nach einer letzten Nacht auf Krk hiess es dann Abschied nehmen von Kroatien und wir fuhren mit dem Auto zurück in die Schweiz.

  • SharePoint: Versionsnummer mit Hilfe von SharePoint Designer ermitteln

    Um die Vesionsnummer des aktuell installierten SharePoint-Servers zu ermitteln gibt es viele Wege. Einige davon sind etwas umständlicher und liefern auch nicht immer leicht verständliche Ergebnise (mehere Versionsnummern z.B., wenn man in der SharePoint Central Administration unter Check product and patch installation status nachschaut).

    Eine einfache Möglichkeit die aktuelle Versionsnummer der SharePoint-Installation zu ermitteln, bietet der SharePoint Designer. Einfach den Designer öffnen und auf eine Site auf dem gewünschten Server verbinden. Auf der Startseite findet man dann unter der Rubrik «Site Information» die aktuelle Version:

    SharePoint Designer Site Information
    SharePoint Designer Site Information

  • SharePoint: Inhaltsdatenbank-Version an SharePoint-Version angleichen

    Wenn man in einer SharePoint-Installation ein neues Cumulatives Update installiert um Programm-Fehler zu beheben, so wird die gesamte SharePoint-Version hochgehoben, also die Assemblies/Dlls etc. aktualisiert und haben dadurch höhere Versionsnummern.

    Die Inhaltsdatenbank (Content Database) wird grundsätzlich aber nicht automatisch aktualisiert und behält das alte Schema und auch die alte Versionsnummer bei.

    In der Regel ist dies nicht weiter tragisch, aber unter Umständen kann es trotzdem nötig werden, dass man die Inhaltsdatenbank aktualisiert und damit ihre Version an diejenige des SharePoint-Serves angleicht, so zum Beispiel, wenn man ein Backup einer Site-Collection einspielen möchte (Restore-SPSite), welches von einer Site/Datenbank mit der höheren Versionsnummer, die des Servers, entstammt.

    Um manuell die Inhaltsdatenbank zu aktualisieren, kann man sich der SharePoint Management Shell bedienen.

    Zuerst sollte man die gewünschte Content Database in eine Variable laden (wobei man «SQLServerName\WSS_Content_Database_Name» durch den entsprechenden Datenbank-Server und Namen der Inhaltsdatenbank ersetzen muss):

    $contentdb = Get-SPContentDatabase | Where-Object {$_.Name -match "SQLServerName\WSS_Content_Database_Name"}

    Ist unklar, wie die Inhaltsdatenbank heisst, so kann man zuerst einfach nur Get-SPContentDatabase eingeben um eine Auflistung aller Inhaltsdatenbanken zu erhalten. Sollte die gewünschte Datenbank nicht aufgeführt sein, sollte sicher gestellt werden, dass diese in der Central Administration im Status «Ready» ist.

    Danach kann man mit folgendem PowerShell-Befehl die Aktualisierung starten:

    Upgrade-SPContentDatabase -Identity $contentdb

    In der PowerShell wird der Fortschritt in Prozent angezeigt. Bei grösseren Datenbanken kann die Aktualsierung mehrere Minute bis hin zu Stunden dauern.

    Weitere Informationen findet ihr in diesem Technet-Artikel: http://technet.microsoft.com/en-us/library/ff607813.aspx

  • SharePoint: Alerts für Volltext-Suchresultate aktivieren

    SharePoint 2010 bietet ja die Möglichkeit auf Listen Alerts einzurichten. Wenn Elemente geändert oder hinzugefügt werden, kann man sich so über Email oder auch SMS benachrichtigen lassen. Sehr praktisch wenn man etwas beobachten möchte, aber nicht die ganze Zeit manuell sich durch Listen wühlen möchte.

    Solche Alerts kann man praktischerweise aber auch in der SharePoint-Suche aktivieren. So kann man sich benachrichtigen lassen, wenn die Volltextsuche zu einem bestimmten Suchbegriff ein neues oder geändertes Element findet.

    SharePoint Search Alerts anlegen
    SharePoint Search Alerts anlegen

    Die Möglichkeit solche Alerts in der Volltext-Suche zu verwenden ist jedoch in der Grundeinstellung deaktiviert. Der Link dazu ist zwar vorhanden, doch möchte man einen neuen Alert hinzufügen, erscheint folgende Fehlermeldung:

    Search alerts have been turned off for this Search Application. For assistance, contact your server administrator.

    Über die «Central Administration» von SharePoint kann dies einfach aktiviert werden:

    • In der «SharePoint 2010 Central Administration» auf «Manage service applications» gehen (in der Sektion «Application Management»)
    • In der Liste die «Search Service Application» finden und den Link zum Öffnen anklicken
    • In der obersten Rubrik «System Status» befindet sich ziemlich zu unter der Eintrag «Search alert status»
    • Bei «Search alert status» auf der rechten Seite auf «Enable» klicken um Alerts zu aktivieren

    Alerts für Suchresultate in der Search Service Administration aktivieren
    Alerts für Suchresultate in der Search Service Administration aktivieren

    Grosse Nachteile, bei aktivierter Einstellung, sind mir nicht bekannt, aber ich vermute dass bei einigen 10’000 Alerts die Performance etwas leiden könnte, vermutlich in den meisten Szenarien vernachlässigbar. Die MSDN zu Thema Alerts für die Suche erwähnt jedenfalls nichts dazu.

  • SharePoint: Elemente ohne Ordner in einem DataView-WebPart anzeigen

    Wenn man im SharePoint-Designer eine ganz normale View, welche ein XslListView-WebPart enthält bearbeitet, so kann man via Ribbon einstellen wie mit Ordnern umgegangen werden soll. Entweder es wird nur der Inhalt eines spezifischen Ordners angezeigt, es werden alle Elemente aller Ordner angezeigt oder es werden alle Elemente und alle Ordner (mit Unterordner) angezeigt.

    Verwendet man auf der View jedoch ein DataView-WebPart (zum Beispiel weil, man nach mehr als zwei Elementen gruppieren möchte), so sind diese Optionen zwar auch im Ribbon verfügbar, doch scheinen sie keine Auswirkungen mehr zu haben (Bug?).

    Die gewünsche Einstellung lässt sich aber zum Glück auch ohne (zumindest fast ohne) Klicki-Bunti von Hand erledigen:

    1. Dazu öffnet man (im SharePoint Designer) am einfachsten die View in der Split-Ansicht oder Code ansicht, so dass man den Quellcode der Seite bearbeiten kann.
    2. Nun sucht man nach dem Tag «SharePoint:SPDataSource» innerhalb des DataForm-/DataView-WebParts und klickt diesen an.
    3. Nun sollte das «Tag Properties»-Window erscheinen (falls nicht, muss dieses zuerst via Kontextmenü geöffnet werden)
    4. Unter «Tag Properties» gibt es nun einen Eintrag «Scope» und der Wert dafür kann man bequem mittels Dropdownmenü selektieren, z.B. «Recursive» (alle Elemente) oder «RecursiveAll» (alle Elemente und alle Ordner).
    5. Zum Schluss natürlich die Seite noch abspeichern und wenn nötig Publishen, damit die Änderung für einem selber und Benutzer sichtbar wird

    Mehr details zu «Scope» findet ihr in der MSDN zum SPViewScope-Eintrag.

  • SharePoint: «Ungültige Formel»-Fehler

    Heute habe ich in einer Liste eine Formel zur Validierung eines Listenelementes einbauen wollen («List Settings»->»Validation Settings»).

    Die Formel sollte sicherstellen, dass nur Elemente gespeichert werden können, bei denen das Anfgangsdatum kleiner ist als das Enddatum und dass beide Daten im selben Jahr liegen.

    Folgende Formel hatte ich zuerst verwendet:

    =AND([From Date]<=[To Date],YEAR([From Date])=YEAR([To Date]))

    Beim abspeichern der Formel erhielt ich, für mich überraschend, folgende Fehlermeldung:

    "The formula contains a syntax error or is not supported"
    Fehlermeldung: «The formula contains a syntax error or is not supported»

    Der Fehler war für mich nicht gleich ersichtlich, ich habe den Aufbau der Formel 1:1 von anderen Beispielen übernommen, wie z.B. von http://adicodes.com/column-validations-and-list-validations-in-sharepoint-2010/ oder von Microsoft selber (http://office.microsoft.com/en-us/sharepoint-server-help/examples-of-common-formulas-HA010105479.aspx).

    Nach einigem analysieren und suche im Internet bin ich auf eine Seite gestossen, welche den Fehler beschreibt.

    Scheinbar sind die Formeln abhängig von der Sprache des Betriebssystems (des Servers), sowie der gewählten Regionaleinstellungen. Auf dem Server war folgendes Listen-Trennzeichen eingestellt:

    Listentrennzeichen-Einstellung in den Regionaloptionen in der Systemsteuerung
    Listentrennzeichen-Einstellung in den Regionaloptionen in der Windows-Systemsteuerung

    Das Trennzeichen für die verschiedenen Unterformeln musste also von «,» auf «;» gewechselt werden, was folgende Formel ergab:

    =AND([From Date]<=[To Date];YEAR([From Date])=YEAR([To Date]))

    Oder im SharePoint in den «Validation Settings»:

    "SharePoint List Validation Settings"-Formel

    Danach konnte die Formel gespeichert werden und validiert nun sinngemäss die Listen-Elemente.

     

  • HTC One S

    Bis vor ca. einem Monat hatte ich ein HTC Hero als Mobiltelefon. Dieses hatte ich für etwas mehr als zwei Jahre und mit der Zeit war ich immer weniger damit zufrieden. Hauptsächlich lag es am schlechten Akku, welcher von mir vielleicht mal hätte ausgewechselt werden sollen 🙂 … jedenfalls kam es häufig vor, dass das Telefon trotz aufgeladenen Akkus nach kurzer Zeit schon seinen Geist aufgab. Besonders hilfreich, wenn man gerade mit einem Kunden am telefonieren war. Auch die Rechenpower war nach zwei Jahren nicht mehr die beste und man merkte einfach, dass es mittlerweile ein Relikt aus einer vergangenen Zeit geworden war.

    Ich habe lange nach einem neuen Telefon Ausschau gehalten. Wichtig war für mich, dass es Android 4.0 ICS (Ice Cream Sandwich) haben müsste, ein (zumindest für nich) ansprechendes Design, mindestens ein 4.3″ Display, eine hohe Performance und trotzdem lange Akku-Laufzeit.

    Da Android 4.0 noch recht neu ist, gab es noch nicht so viele Kandidaten auf dem Markt, respektive es gab einiges auf dem Markt und einige Ankündigungen, welche in naher Zukunft erscheinen sollten. In die engere Auswahl kamen für mich das Samsung Galaxy S3 und das HTC One S.

    HTC One S Press Shot

    Da ich bisher mit meinem HTC-Gerät grundsätzlich zufrieden war, die Sense-Oberfläche mochte und auch nicht bis zum Release des Galaxy S3 warten wollte (nimmt sich vermutlich nicht viel? 🙂 ), habe ich mich letzendlich für das One S von HTC entschieden und habe dies bisher noch nie bereut. Im Gegenteil ich bin begeistert. Schwer zu sagen, ob es daran lag, dass die Messlatte durch das alte Handy schon ziemlich am Boden lag oder ob es generell einfach ein überzeugendes Gerät ist. Ich vermute eine Kombination aus beidem.

    Der Akku hält (vermutlich auch durch den S4-Prozessor) sehr lange. Ich habe schon häufig stundenlange Wanderungen mit Endomono aufgezeichnet und dabei auch mit dem Handy Fotos, sowie Videos gemacht, dabei habe ich es noch nie geschafft, den Akku komplett zu leeren. Auch bei  normalen täglichen Gebrauch mit Telefonaten, surfen im Internet, Email lesen/schreiben war der Akku am Abend noch nie leer, sofern er am Morgen aufgeladen war, meistens ist er nach einem normalen Bürotag noch zu ca. 75% gefüllt; kein Vergleich zum alten Hero.

    Die Qualtität der Bilder («8 MP»-Kamera) und Videos («Full HD»-Aufnahmen sind möglich) ist ebenfalls ausgezeichnet, voausgesetzt man verwackelt das Bild nicht und hat einigermassen ausreichende Lichtverhältnisse:

    Beispiel-Videos findet ihr z.B. unter meinem Artikel «Kunstrad Regionalmeisterschaft 2012 in Uster«.

    Falls ihr euch fragt…

    • …wieso kein «One X»?: für meinen Geschmack etwas zu gross geraten, aber von den Spezifikationen natürlich beeindruckend.
    • …wieso kein iPhone?: da ich einen iMac benutze, hätte es sich sicher gut integriert und auch vom Design her sehr ansprechend, jedoch denke ich ist das Preis-/Leistungsverhältnis aktuell nicht gerade sehr verlockend, da ist beim One S einfach mehr drinn für das gleiche Geld. Auch habe ich schon diverse Anwendungen im Google Play-Store (oder wie der App-Market von Google gerade aktuelle auch immer heissen mag) gekauft und habe keine Lust dieselben Apps erneut im «App Store» von Apple zu erwerben.

    Hier noch einige interessante Spezifikationen:

    Betriebssystem Android 4.0: Ice Cream Sandwich (ICS)
    Benutzeroberfläche Sense UI
    Prozessor Qualcomm Snapdragon (1.500 MHz)
    Anzahl Kerne 2
    Grafikchip Adreno 225
    ROM / RAM 1 GByte
    Netz
    Netzmodus TriMode
    Netzstandards GSM
    UMTS
    WLAN
    Frequenz
    GSM QuadBand 850, 900, 1800, 1900 MHz
    UMTS TriBand 850, 1900, 2100 MHz
    LTE nicht vorhanden
    Strahlung mittel (0,6-1,0 W/Kg)
    SAR Wert 0,69 W/kg
    Flugzeugmodus ja
    Format Barren (Candybar)
    Höhe x Breite x Tiefe 130.9 x 65.0 x 7.9 mm
    Gewicht 121 g

    Mehr Details zu den Spezifikationen findet ihr z.B. hier bei phonearena.com. Geniale Seite um Handy-Daten zu vergleichen.

  • SharePoint: Assemblies/Dlls in WSP einbinden

    Manchmal hat mit in einem SharePoint-Visual-Studio-Projekt abhängigkeiten zu einem anderen Projekt oder gar zu externen DLLs.

    Mittels «References» können die Referenzen auf diese DLLs festgelegt werden, so dass die Klassen, Methoden etc. dieser Objekte zur Verfügung stehen und mittels «Project Dependencies» kann man die Abhängigkeiten beeinflussen, so dass die korrekte Build-Reihenfolge geplant wird. Aber wir kann man sicherstellen, dass eine externe, welche nicht aus dem aktuellen Projekt kommt, DLL auch wirklich mitausgeliefert wird, wenn man die Solution als WSP auf dem Zielserver installiert?

    SharePoint bietet hierfür eine einfache Möglichkeit. Man kann im «Solution Explorer» innerhalb des gewünschten Projektes den Package-Knoten öffnen und dort das Package öffnen:

    In der nun erscheinenden Ansicht des Package muss man im unteren Bereich des Fensters auf «Advanced» klicken um die Ansicht zu wechseln:

    In dieser Advanced-Ansicht werden alle zusätzlichen Assemblies aufgelistet. Mit einem Klick auf «Add» kann man einen Eintrag hinzufügen. Je nach Quelle der Assembly muss man wählen ob diese aus dem Output eines Projektes entstammt oder aus einer anderen Quelle. Hier zum Beispiel die Ansicht beim hinzufügen einer existierenden Assembly:

    SharePoint Package Add Existing Assembly
    Dialog für das Hinzufügen einer existierenden Assembly zum Package

    Man hat hier zudem die Möglichkeit festzulegen, ob die Assembly auf Stufe WebApplication oder in den GAC deployed werden soll.

    Hat man diese Einstellungen vorgenommen, so wird beim nächsten Packaging (Menübefehl: Build -> Package) die jeweilige Assembly ins WSP integriert.

  • SharePoint: Alle Elemente einer Liste mittels PowerShell löschen

    Wenn man alle Listen-Elemente einer SharePoint-Liste löschen möchte, dann kann das manuelle Löschen mittels Browser sehr umständlich sein. Selbst in der Datasheet-View ist es sehr mühsam alle Elemente auf einen Schlag zu löschen, da bei grosser Anzahl an Elementen Timeouts auftreten können. Leider fehlt im GUI eine benutzerfreundliche Option im Sinne von «Lösche alle Elemente dieser Liste».

    Mit einem PowerShell-Skript kann man dies Vorhaben jedoch ziemlich einfach und nerven-schonend durchführen:

    [System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
    
    # "Enter the site URL here"
    $SITEURL = "http://siteCollectionUrl"
    
    $site = new-object Microsoft.SharePoint.SPSite ( $SITEURL )
    $web = $site.OpenWeb()
    "Web is : " + $web.Title
    
    # Enter name of the List below
    $oList = $web.Lists["InternalListName"];
    
    "List is :" + $oList.Title + " with item count " + $oList.ItemCount
    
    $collListItems = $oList.Items;
    $count = $collListItems.Count - 1
    
    for($intIndex = $count; $intIndex -gt -1; $intIndex--)
    {
            "Deleting : " + $intIndex
            $collListItems.Delete($intIndex);
    }

    Das Skript in einer «ps1»-Datei speichern (z.B. «DeleteAllListElements.ps1»), darin den URL der «Site Collection» den internen Listennamen anpassen, danach direkt ausführen um die Elemente zu löschen.

    Möchte man alle Elemente, einschliesslich aller Ordner und aller Elemente in Ordnern/Unterordnern löschen, so kann man das folgende PowerShell-Skript verwenden (auch hier muss man den URL und den Listennamen anpassen):

    Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
    
    $web = Get-SPWeb "https://siteCollectionUrl"
    $list= $web.GetList("/Lists/InternalListName")
    
    
    foreach ($item in $list.items)
    {
    	$deleteItem = $list.GetItemById($item.ID)
    	$deleteItem.Delete()
    }
    
    foreach ($folder in $list.Folders)
    {
    	$deleteFolder = $list.GetItemById($folder.ID)
    	$deleteFolder.Delete()
    }

     

  • SharePoint: TaxonomyHiddenList manuell aktualisieren

    Unter gewissen Umständen und mit gewissen Cumulativen Updates für den SharePoint 2010 kann es vorkommen, dass die TaxonomyHiddenList nicht mehr auf dem aktuellsten Stand ist, da die Synchronisation mit dem Term-Store (Terminologiespeicher) nicht mehr fehlerfrei durchgeführt werden kann.

    Abhilfe (wenn auch eventuell nur temporäre?)  schafft folgendes PowerShell-Skript:

    $Assem = (
    	"Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" ,
    	"Microsoft.SharePoint.Taxonomy, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
    )
    
    $Source = @"
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Taxonomy;
    using System;
    
    namespace TaxonomyUpdater
    {
    	public static class TaxonomyHiddenList
    	{
    		public static void Update(string SiteUrl)
    		{
    			SPSite Site2Update = new SPSite(SiteUrl);
    			TaxonomySession.SyncHiddenList(Site2Update);
    			Site2Update.Dispose();
    		}
    	}
    }
    "@
    
    Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp

    Das Skript muss man in einen Text-Editor einfügen und als «UpdateTaxonomyHiddenList.ps1» abspeichern.

    Danach das Skript in einer PowerShell einmal ausführen, damit die Klasse verfügbar wird. Zum Schluss mit folgendem Befehl die Synchronisation starten:

    [TaxonomyUpdater.TaxonomyHiddenList]::Update(“http://SharePointServer”)

    Siehe auch: http://blogs.msdn.com/b/joerg_sinemus/archive/2011/03/03/terms-and-how-to-update-taxonomyhiddenlist-when-the-timer-job-was-not-able-to-update.aspx