Kategorien
IT SharePoint

SharePoint: In-Operator in CAML-Queries mit mehreren Werten

Möchte man in einem CAML-Query ein Feld nach mehreren möglichen Werten „filtern“, kann man den IN-Operator/Tag verwenden.

Die verschiedenen Feldwerte werden wie auch sonst als <Value>-Tag eingesetzt, dann aber zusätzlich in einem <Values>-Tag gebündelt:

<Where>
    <In>
        <FieldRefName="Animals"/>
        <Values>
            <ValueType="Text">Cat</Value>
            <ValueType="Text">Dog</Value>
            <ValueType="Text">Fish</Value>
        </Values>
    </In>
</Where>

 

Kategorien
IT SharePoint

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.

 

Kategorien
IT SharePoint

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()
}