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.




Feldwerte in NewForm oder EditForm automatisch per JS anpassen

Unbeantwortet Dieser Beitrag hat 15 Antworten

Ohne Rang
18 Beiträge
uhemling erstellt 21 Jan. 2010 13:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, ich habe folgendes, sicherlich schon mehrfach diskutiertes, Problem, finde aber keine passende Lösung.

Ich habe einen Print Button in einer custom EditForm.aspx. Wenn dieser betätigt wird, möchte ich gleichzeitig ein Log- Feld mit Inhalt versehen oder  z.B Text mit Uhrzeit oder ähnliches.

Weiß da jemand, wie das mit JS zu bewerkstelligen ist?

Danke  

 

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Jan. 2010 13:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="uhemling"]Weiß da jemand, wie das mit JS zu bewerkstelligen ist?[/quote]

Ja, ich :-) Wo genau liegt denn das Problem? Wie Du an die Felder rankommst, steht hier:
http://blogs.msdn.com/sharepointdesigner/archive/2007/06/13/using-javascript-to-manipulate-a-list-form-field.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 22 Jan. 2010 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich bin neu auf dem Gebiet und mir fehlen ein paar Grundlagen.

Angenommen ich möchte via Button die von dir beschrieben Funktion aufrufen, die das Feld "Titel"  mit dem Text "Testtitel" überschreibt.
Funktion über Button aufrufen funktioniert mit alert(""). Funktionsinhalt muss aber angepasst werden.

Das ist mein Titel Feld.
<SharePoint:FormField runat="server" id="ff2{$Pos}" ControlMode="Edit" FieldName="Title" __designer:bind="{ddwrt:DataBind('u',concat('ff2',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}"/>
       <SharePoint:FieldDescription runat="server" id="ff2description{$Pos}" FieldName="Title" ControlMode="Edit"/>

Wie muss ich dafür den Code anpassen, bzw. reicht das, oder muss noch mehr in dem Script geändert werden.

setLookupFromFieldName("<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);

Komplettes Script, falls noch mehr angepasst werden muss:

<script type="text/javascript">

 

// This javascript sets the default value of a lookup field identified

// by <<FIELD DISPLAY NAME>> to the value stored in the querysting variable

// identified by <<QUERYSTRING VARIABLE NAME>>

 

 

// Customize this javascript by replacing <<FIELD DISPLAY NAME>> and

// <<QUERYSTRING VARIABLE NAME>> with appropriate values.

// Then just paste it into NewForm.aspx inside PlaceHolderMain

 

_spBodyOnLoadFunctionNames.push("fillDefaultValues");

 

function fillDefaultValues() {

  var qs = location.search.substring(1, location.search.length);

  var args = qs.split("&");

  var vals = new Object();

  for (var i=0; i < args.length; i++) {

    var nameVal = args[i].split("=");

    var temp = unescape(nameVal[1]).split('+');

    nameVal[1] = temp.join(' ');

    vals[nameVal[0]] = nameVal[1];

  } 

  setLookupFromFieldName("<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);

}

 

function setLookupFromFieldName(fieldName, value) {

  if (value == undefined) return;

  var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);

 

// if theSelect is null, it means that the target list has more than

// 20 items, and the Lookup is being rendered with an input element

 

  if (theSelect == null) {

    var theInput = getTagFromIdentifierAndTitle("input","",fieldName);

    ShowDropdown(theInput.id); //this function is provided by SharePoint

    var opt=document.getElementById(theInput.opt);

    setSelectedOption(opt, value);

    OptLoseFocus(opt); //this function is provided by SharePoint

  } else {

    setSelectedOption(theSelect, value);

  }

}

 

function setSelectedOption(select, value) {

  var opts = select.options;

  var l = opts.length;

  if (select == null) return;

  for (var i=0; i < l; i++) {

    if (opts[i].value == value) {

      select.selectedIndex = i;

      return true;

    }

  }

  return false;

}

 

function getTagFromIdentifierAndTitle(tagName, identifier, title) {

  var len = identifier.length;

  var tags = document.getElementsByTagName(tagName);

  for (var i=0; i < tags.length; i++) {

    var tempString = tags[i].id;

    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {

      return tags[i];

    }

  }

  return null;

}

</script>

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Jan. 2010 14:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="uhemling"]Das ist mein Titel Feld.
<SharePoint:FormField runat="server" ...[/quote]

Das stimmt schonmal nicht. So ist das Feld auf dem Server definiert. JS läuft aber auf dem Client.

Die von Dir versuchte Funktion "setLookupFromFieldname" brauchst Du hier nicht. Die ist für Nachschlagefelder. Für Dich ist die Funktion "getTagFromIdentifierAndTitle" interessant, mit der Du eine Referenz auf die verschiedenen Controls der verschiedenen Feldtypen bekommen kannst (s. zugehörigen Artikel). Damit holst Du Dir die Textbox und beschreibst sie mit was auch immer.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 22 Jan. 2010 15:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Würde dann in meine Fall so aussehen,oder ?

function getTagFromIdentifierAndTitle(input, TextField, "Titel") {

  var len = identifier.length;

  var tags = document.getElementsByTagName(tagName);

  for (var i=0; i < tags.length; i++) {

    var tempString = tags[i].id;

    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {

      return tags[i];

    }

  }

  return null;

}

...Und wie schreibe ich meinen Text in das Feld rein?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Jan. 2010 16:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Für Dich könnte das ungefähr so aussehen:

var textbox = getTagFromIdentifierAndTitle("input", "TextField", "Titel");
textbox.value = "Dein neuer Inhalt";

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 24 Jan. 2010 10:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe sicherheitshalber mal ein neues Textfeld, Namens Testfeld, angelegt. (Wg. Titel oder Title, da das Titelfeld vielleicht etwas besonderes ist!?...)

var textbox = getTagFromIdentifierAndTitle("input", "TextField", "Testfeld");
textbox.value = "Dein neuer Inhalt";

Bei der var textbox meldet der Debugger immer, dass Ihm ein Objekt fehlt.

Nochmal zur Info, ich habe eine selbst erstellte EditForm1.aspx.

Gibt es da eine spezielle Stelle, an der ich die Funktion einfügen muss?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Jan. 2010 17:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="uhemling"]Gibt es da eine spezielle Stelle, an der ich die Funktion einfügen muss?[/quote]

Nein, eigentlich nicht (am Besten unterhalb des Formulars). Aufgerufen wird sie ja, sonst käme auch die Debugger-Meldung nicht. Versuche mal das ganze inkl. getTagFromIdentifierAndTitle zu debuggen. Irgendwo ist wohl noch ein Fehler.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 25 Jan. 2010 10:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

??? Wie meinst du das?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Jan. 2010 11:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="uhemling"]??? Wie meinst du das?[/quote]

Was??? Ich hatte ja mehrere Sätze gepostet ;-)

Ich meine damit, daß das Script am Besten unterhalb des Formulars aufgehoben ist. Ich meinte, daß Dein Script aufgerufen und damit gefunden wird - es ist also richtig platziert. Ich meinte damit, daß Du ja anscheinend mit dem JS-Debugger umgehen kannst und deshalb mal die ganze Funktionalität debuggen solltest, um herauszufinden, wo das Problem liegt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 25 Jan. 2010 14:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Achso,

dann war das ein Missverständnis. Ich hatte schon alles gelesen aber mein Debugging beruht lediglich auf der Funktion, die man im Explorer aktivieren kann und da gibts nur Haken rein und Haken raus, daher die ???!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Jan. 2010 15:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im IE8 gibt es unter Extras - Entwicklertools einen JS-Debugger...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 26 Jan. 2010 11:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Der gibt aber leider auch keine näheren Infos, ausser, dass er eben an dem Befehl hängen bleibt.

Ich hatte mal einen Screenshot an die automatisierte Adresse von dem Forum gesendet (community@mysharepoint.de), kommt aber scheinbar, nicht bei dir an. Gibts eine andere Möglichkeit der Übermittlung?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Jan. 2010 11:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry, aber ich kann Dir da auch mit Screenshot nicht weiterhelfen. Aus irgend einem Grund wird das Control nicht gefunden und das kannst nur Du anhand des HTML-Quellcodes und des Debuggers rausfinden. Mit dem Debugger kannst Du den JS-Code auch Schrit für Schritt durchgehen und dann hoffentlich sehen, wo es klemmt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
uhemling Als Antwort am 26 Jan. 2010 12:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

OK, ich schau mal, was ich dazu finde.

Trotzdem vielen Dank!!!

Ohne Rang
18 Beiträge
uhemling Als Antwort am 27 Jan. 2010 10:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andy,

eigentlich war das ein ganz banales Newbie 'Problem, mir hat im Script die eigentliche Funktion gefehlt:

so gehts jetzt:

<html>
<script type="text/javascript">

//_spBodyOnLoadFunctionNames.push("hideFields");

function getTagFromIdentifierAndTitle(tagName,identifier,title) {
  var len = identifier.length;
  var tags = document.getElementsByTagName(tagName);
  for (var i=0; i < tags.length; i++) {
    var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
      return tags[i];
    }
  }
  return null;
}


function setFields() {
   // uncomment the next line if you are troubleshooting
// debugger;
   var control;
   control = getTagFromIdentifierAndTitle("input","TextField","Titel");
   alert(control.value);
   control.value ="Testeintrag"
}

</script>

<a href="javascript:setFields()">Read and Set Fields</a>

</html>
Vielen Dank für Deine Hilfe!