SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Nachschlagewerte mit extra Anzeigefeldern, Powershell, Sp2010

Geprüfte Antwort Dieser Beitrag hat 9 Antworten

Ohne Rang
282 Beiträge
MStel erstellt 22 Juli 2015 13:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe eine Lookup Spalte auf eine andere Liste erstellt.
Diese kann man mit PowerShell ja von den Eigenschaften her bearbeiten ( Required, Eindeutige Werte, Woher sie kommen, und welchen Wert der anderen Liste man nehmen soll ). Um diese geht es allerdings nicht, da ich dies schon hinbekommen habe.

Zusätzlich kann man allerdings extra Felder anzeigen lassen, beispielsweise noch die ID oder andere Selbst hinzugefügte Spalten. In der Browseroberfläche sind diese einfach anzuhaken. In Powershell nicht. Ich habe die passende Methode dafür gefunden, bekomme aber keinen funktionierenden Aufruf hin.

Hier der MSDN Link.
https://msdn.microsoft.com/de-de/library/microsoft.sharepoint.spfieldcollection.adddependentlookup.aspx

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juli 2015 14:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Beispiel in dem verlinkten MSDN-Artikel kann man doch 1:1 in PowerShell übernehmen?

Im Prinzip erwartet die Funktion zwei Parameter:
1. den Namen des zusätzlich nachzuschlagenden Feldes als string. Das ist der interne Name des Feldes, das Du im Browser einfach anhaken würdest.
2. die ID des bereits vorhandenen Lookups als Guid.

Hier noch ein bißchen Code:

# erstelle das Lookup (hast Du ja schon
$lookupName = $fields.AddLookup(...)
# hole das neu erstellte Feld
$lookup = $fields[$lookupname]
# erzeuge das abhängige zusätzliche Feld
$otherFieldName = $fields.AddDependentLookup("Title", $lookup.Id)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 22 Juli 2015 14:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich gehe davon aus, dass das Problem auftritt, weil ich das Feld "ID" hinzufügen möchte und dieses bereits in der Liste Personen existiert.
Wenn wer Zeit hat kann er ja mal in meinem Code prüfen, das verlange ich allerdings von niemandem.

$fieldDisplayName = "Personen" 
$parentWeb = Get-SPWeb $myWeb
$parentList = $parentWeb.Lists["Personen"]
$parentSiteColumnInternalName = $parentWeb.Fields.AddLookup($fieldDisplayName, $parentList.ID, $true);
$parentSiteColumn = $parentWeb.Fields[$fieldDisplayName]
$childWeb = Get-SPWeb $myWeb
$childList = $childWeb.Lists["Auftraege"]
$newField = $childList.Fields.Add($parentSiteColumn)
$parentSiteColumn.Update($true);

#Dein code

$lookupName = $parentSiteColumnInternalName # Das ist das Feld was ich bereits erstellt habe, habe mich strickt an deinen Code oben gehalten
$lookup = $parentWeb.Fields[$lookupname]
# erzeuge das abhängige zusätzliche Feld
$otherFieldName = $parentWeb.Fields.AddDependentLookup("ID", $lookup.Id)

Fehlermeldungen vonwegen "ID ist bereitsvorhanden" erhalte ich nun keine mehr, allerdings wird gewünschte Funktionalität auch nicht ausgeführt.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juli 2015 14:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Auf welches Feld schlägt denn das ursprüngliche Lookup nach? Da Du nichts angibst, nehme ich an, daß es ebenfalls die ID ist und Du kannst dann die ID nicht als zusätzliches Feld auswählen. Sonst kann ich keinen Fehler entdecken.

Einen Tip habe ich noch:

[quote user="MStel"]$parentSiteColumnInternalName = $parentWeb.Fields.AddLookup($fieldDisplayName, $parentList.ID, $true);
$parentSiteColumn = $parentWeb.Fields[$fieldDisplayName][/quote]

Verwende in der zweiten Zeile immer den String, den Du in der ersten Zeile bekommst. Der wirkliche interne Name kann sich durchaus geändert haben (hier zwar nicht, aber zur Sicherheit)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 22 Juli 2015 14:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja da steckt ebenfalls ein Problem.
Ich bin mir anhand des Codes nichtmal wirklich sicher welches Feld ich im ursprünglichem Lookup selecte, da ich ja nichts angegeben habe.
Das Feld das aber hinzugefügt wurde gibt am ende die "Titel" Spalte zurück.
Hätte ich ein Feld angeben können, hätte ich einfach Kopieren & Einfügen gemacht und den Name von "Titel" im zweiten Codestück auf "ID" geändert.
Allerdings habe ich kein anständiges Snippet erzeugen können in dem man angibt, welches Feld man auswählt.
Im Internet steht zwar genug, aber ich bekomme hier keine Fehlermeldungen angezeigt, da ich mit einer CMD Konsole auf einem entferntem Server meine Befehle ausführe. Und mit soviel Try & Error bekomme ich leider auch nicht immer so direkt raus woran es lag, wenn der Fehler nicht offensichtlich ist.

Aber was du sagst ergibt sinn, ich muss mich mit dem Ursprungs-Lookup nocheinmal etwas mehr befassen.

Vielen dank!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juli 2015 14:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich denke, Du mußt Dich mal eine Weile mit dem Thema PowerShell-debuggen auseinandersetzen. Mit einem ordentlichen Debugger kannst Du einfach die Abläufe besser erkennen und Du siehst, was wirklich in Deinen Variablen steckt und welche Eigenschaften/Methoden die Objekte haben.

Mit was schreibst Du denn aktuell die Scripte? Du kannst die zu Windows gehörende ISE verwenden oder Dir das kostenlose PowerGUI installieren. Aber Achtung: vor dem Ausliefern immer mit der ganz normalen PowerShell testen!

Zum Problem: beim Erstellen eines Lookups kann man das nachzuschlagende Feld nicht angeben, aber man kann es nachträglich setzen:

$lookup.LookupField = "Title"
$lookup.Update()

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 23 Juli 2015 10:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Das Beispiel in dem verlinkten MSDN-Artikel kann man doch 1:1 in PowerShell übernehmen?

Im Prinzip erwartet die Funktion zwei Parameter:
1. den Namen des zusätzlich nachzuschlagenden Feldes als string. Das ist der interne Name des Feldes, das Du im Browser einfach anhaken würdest.
2. die ID des bereits vorhandenen Lookups als Guid.

[/quote]

Muss ich das Add Dependent Lookup aufrufen nachdem die Lookup Spalte der Liste hinzugefügt wurde, oder davor?
Spielt es eine Rolle ob es sich um eine Listenspalte oder eine Websitespalte handelt?

Ohne Rang
282 Beiträge
MStel Als Antwort am 23 Juli 2015 11:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut


$parentSiteColumnInternalName = $parentWeb.Fields.AddLookup($fieldDisplayName, $parentList.ID, $true);
$childList = $childWeb.Lists["Auftraege"]
$newField = $childList.Fields.Add($parentSiteColumn)
$secondaryField = $childList.Fields["Personen"];
$otherFieldName = $childList.Fields.AddDependentLookup("ID", $secondaryField .Id)

Mit diesem Code bin ich so weit, dass eine Lookup Websitespalte auf die Liste Personen erstellt wird und der Liste Auftraege hinzugefügt wird.
Die AddDependentLookup Methode fügt allerdings anstatt ein sekundäres Feld ein weiteres sepperates Feld hinzu, und das auch ohne Verweis.

Was habe ich beim zweiten aufrufparameter falsch gemacht?

In der MSDN steht beim zweiten Paramter:
Der Wert der Id -Eigenschaft des SPFieldLookup -Objekts, das primäre Feld darstellt.

Ich habe also das Feld mit dem Lookup in eine Variable gelesen und diese verwendet.($secondaryField)

Ohne Rang
282 Beiträge
MStel Als Antwort am 23 Juli 2015 11:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut


$parentSiteColumnInternalName = $parentWeb.Fields.AddLookup($fieldDisplayName, $parentList.ID, $true);
$childList = $childWeb.Lists["Auftraege"]
$newField = $childList.Fields.Add($parentSiteColumn)
$secondaryField = $childList.Fields["Personen"];
$otherFieldName = $childList.Fields.AddDependentLookup("ID", $secondaryField .Id)

Mit diesem Code bin ich so weit, dass eine Lookup Websitespalte auf die Liste Personen erstellt wird und der Liste Auftraege hinzugefügt wird.
Die AddDependentLookup Methode fügt allerdings anstatt ein zusätzliches Lookup Feld "ID"  in der Listenspalte "Personen" ein weiteres sepperates Feld hinzu, und das auch ohne Verweis, was zwar ID heißt, diese aber nicht beinhaltet.

Was habe ich beim zweiten aufrufparameter falsch gemacht?

In der MSDN steht beim zweiten Paramter:
Der Wert der Id -Eigenschaft des SPFieldLookup -Objekts, das primäre Feld darstellt.

Ich habe also das Feld mit dem Lookup, das dem Web hinzugefügt wurde in eine Variable geschrieben und diese verwendet.($secondaryField)

Und ja zur verständis:
Listen: Personen, Auftraege
Websitespalte: Personen ( beinhaltet Personen Name, soll aber auch ID Beinhalten)
Websitespalte "Personen" -> wird Liste Auftraege hinzugefügt

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 Juli 2015 14:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Diese Fragen kann ich Dir nicht beantworten, aber das hat man ja in wenigen Minuten ausprobiert ;-)

Viele Grüße
Andi
af @ evocom de
Blog