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.




javascript: wie übergebe ich eine Person richtig über Formulargrenzen hinweg?

Geprüfte Antwort Dieser Beitrag hat 11 Antworten

Ohne Rang
242 Beiträge
Peter Oswald erstellt 13 Sept. 2013 09:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

  • eine js-Function erzeugt einen Aufruf SP.UI.ModalDialog.showModalDialog().
  • Die options.url enthält mehrere Übergabeparameter. 
  • Einer der Übergabeparameter ist ein Personendatum "Verantwortlicher".
  • der modale Dialog / das Zielformular ist eine aspx-Seite, die ein Eingabeformular einer anderen Liste darstellt und natürlich die übergebenen Werte übernehmen soll.

Nun soll der Parameter "Verantwortlicher" beim Speichern des Zielformulars in eine Spalte vom Typ Person geschrieben werden. Doch das Control im Zielformular ist vom Typ asp:Textbox und kein SharePoint:FormField, was beim Abspeichern zur Fehlermeldung "Es wurden ungültige Daten zur Aktualisierung des Listeneintrags" führt.

Ist wohl nicht der richtige Weg. Wie macht man es besser? Vor allem, wie macht man es so, dass man im Zielformular nicht auch noch extensiven Code braucht? (Die Beispiele, die ich gefunden habe, beziehen sich leider meistens auf Füllen vom PeoplePicker im gleichen Formular...)

VG

P.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2013 09:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Und was spricht gegen die Verwendung eines PeolplePicker? Der ist genau dafür gedacht.

Aber wie auch immer: es gibt da nicht den einen richtigen Weg und es wird immer Code im Zielformular brauchen, der den parameter wieder aus der URL ausliest und ins Formular überträgt. Für Personen übergibt man normalerweise entweder die ID oder den Loginnamen. Je nachdem, was gerade besser paßt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 13 Sept. 2013 09:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]was spricht gegen die Verwendung eines PeolplePicker[/quote]

Im Zielformular sind Parameter definiert, die in den asp-Elementen per text="{$<ParaName>)" verbunden sind. Nach Aufruf des Formulars mit Parametern werden die Werte direkt in den Controls angezeigt, ohne einen Umweg über Code zu gehen. Ein SP-Formfield hat so ein Attribut nicht, oder gibt es eine Möglichkeit, da einen Parameter zu verbinden? 

[quote user="Andi Fandrich"]es gibt da nicht den einen richtigen Weg und es wird immer Code im Zielformular brauchen, der den parameter wieder aus der URL ausliest und ins Formular überträgt[/quote]

schön, und wie muss der aussehen? Das bedeutet, ich nehme jetzt ein FormField und muss im JavaScript des Zielformulars den Parameter-Wert auslesen und danach den PeoplePicker füllen, oder wie?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2013 10:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Peter Oswald"]Ein SP-Formfield hat so ein Attribut nicht[/quote]

Ich habe es mit dieser Methode noch nicht getestet, aber alle FormFields haben eine Value-Eigenschaft.

[quote user="Peter Oswald"]und wie muss der aussehen? Das bedeutet, ich nehme jetzt ein FormField und muss im JavaScript des Zielformulars den Parameter-Wert auslesen und danach den PeoplePicker füllen[/quote]

Entweder per JavaScript (was recht einfach ist) oder per serverseitigem Code (es ist ja eine aspx).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 13 Sept. 2013 10:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]Entweder per JavaScript (was recht einfach ist)[/quote]

schön, klar isses dann einfach - wenn man's kann :-/

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2013 11:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

http://sympmarc.com/2008/01/31/pre-populating-sharepoint-list-item-values-using-query-string-variables/

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 13 Sept. 2013 11:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

prima tipp, vielen dank. :-)

zwischenzeitlich hatte ich das Codieren von "get arguments" per

  • var args = SP.UI.ModalDialog.get_childDialog().get_args();

und

  • _spGetQueryParam

versucht, warum in diesem Konstrukt aber nur das im o. g. Link codierte

  • location.search.substring(1, location.search.length);

die Parameterliste liefert und die anderen nicht, scheint mir nicht logisch. Alles sollte sich doch eigentlich auf den aktuellen Modal-Dialog beziehen, oder nicht?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2013 12:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die beiden von Dir genannten Elemente beziehen sich nicht auf die GET-Parameter (den QueryString), sondern haben eine andere Bedeutung. Es sind die Argumente, die ein Dialog zurückgibt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 13 Sept. 2013 14:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

betr. den People Picker im Zielformular zu ermitteln und den Wert zuzuweisen: muss ich da wirklich divs und tags durchsuchen à la

http://codesnipets.wordpress.com/2010/10/08/sharepoint-set-people-piker-default-value/

oder gibt es da noch eine einfachere Möglichkeit (ohne eine codeplex-Klasse einzubinden ;-)) ?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2013 14:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist wirklich so kompliziert. Das Teil ist ziemlich komplex aufgebaut und um das richtige zu erwischen (falls es mehrere auf der Seite gibt) muß man so vorgehen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 16 Sept. 2013 09:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ok, funkt, das einzige, was ich jetzt dabei nicht verstehe sind Zeilen wir

  • if(divs[i ].id.indexOf('UserField_upLevelDiv') > 0)

Was ist "UserField_upLevelDiv"? Warum das damit funktioniert kann ich mir nicht aus der aspx-Seite erschließen, denn diesen Identifier hat mein div-Element gar nicht...

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Sept. 2013 09:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dazu solltest Du Dir nicht die aspx ansehen, sondern das fertige HTML, das im Browser angezeigt wird. Dort sind die PeoplePicker wesentlich komplexer aufgebaut.

Viele Grüße
Andi
af @ evocom de
Blog