SharePointCommunity
Die deutschsprachige Community für SharePoint, Office 365 und mit Azure

Button für Teilvorgang erstellen

bewertet von 0 Usern
Beantwortet Dieser Beitrag hat 2 Geprüfte Antworten | 33 Antworten | 2 Followers

Top-500-Beitragsschreiber
49 Beiträge
Mel89 erstellt in 14 Jan 2015 11:16

Hallo zusammen

Ich möchte auf dem DispForm.aspx einer Aufgabe einen Button erstellen, der mir unter dieser Aufgabe einen Subtask generiert. Folgender Code funktioniert wunderbar:

<script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script><script type="text/javascript">

function newSubTask(){

                var clientContext = new SP.ClientContext.get_current();
               
                var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
                                            
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                this.oListItem = oList.addItem(itemCreationInfo);

                oListItem.set_item('Title', 'Test');
               
                oListItem.set_item('ParentID', '5');

                oListItem.update();

                clientContext.load(oListItem);

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this,


this.onQueryFailed));

}

function onQuerySucceeded() {

    alert('Item created: ' + oListItem.get_id());

}

function onQueryFailed(sender, args) {

   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());

}

</script><input id="Button1" onclick="newSubTask()" type="button" value="Teilaufgabe erstellen"/>

 

Nun möchte ich aber, dass es mir die ID des aktuellen Elements immer gleich übernimmt (s. gelbe Markierung im code), je nachdem auf welchem Element ich mich befinde. Ich möchte dort also keine Zahl eingeben, sondern eine Variable für die ID des aktuellen Elements. Ich krieg das irgendwie nicht hin. Kann mir jemand weiterhelfen?

DANKE!

Beantwortet Geprüfte Antwort

Top-10-Beitragsschreiber
18.677 Beiträge

Wenn es mit einer Zahl funktioniert, dann mache aus dem String eine Zahl:

var strLookupId = getQueryStringParameter("ID");
var intLookupId = parseInt(strLookupId, 10);

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Zum Abschluss dieses Forums: Es hat nun geklappt. Ich habe die ParentID vom übergeordneten Element gleich dem subtask mitgegeben und ins Feld "Hilfstext" geschrieben. Im Editform kann der Wert des Feldes aber nicht einfach mit Hilfe von SPUtility ausgelesen werden:

function newSubTask(){
        var clientContext = new SP.ClientContext.get_current();
        var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
        var itemCreationInfo = new SP.ListItemCreationInformation();
        this.oListItem = oList.addItem(itemCreationInfo);

        var feld = SPUtility.GetSPField('Hilfstext');
        var value = $(feld.GetValue()).wrap('<p>').parent().find('div').text();


        var titel = SPUtility.GetSPField('Titel');
        var titelwert = titel.GetValue();
   
    if(value)
{
   oListItem.set_item( 'ParentID', value);
   oListItem.set_item( 'Title', titelwert);
   oListItem.set_item('Body', value); 
   oListItem.update();
   clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
else
{
alert('ParentID was not found in QueryString!');
}
}

function onQuerySucceeded() {
    var neueID = oListItem.get_id(); 
    alert('Teilaufgabe wurde erstellt. Sie werden gleich auf die soeben erstellte Aufgabe weitergeleitet.');
    window.location = '/csa/Lists/Briefings/EditForm.aspx?ID=' + neueID;
}

function onQueryFailed(sender, args) {
   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());
}

//Get QueryStringByName
function getQueryStringByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
</script>
<input id="btnNewSubTask" type="button" value="Nächste Teilaufgabe" onclick="newSubTask();if (!PreSaveItem()) return false; WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ctl40$g_d4bd4b32_3af9_4de3_adb9_2ccaf99f5685$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))"  />

Alle Antworten

Top-10-Beitragsschreiber
18.677 Beiträge

Im Grunde ist das ganz einfach, weil genau diese ID immer in der Adresse enthalten ist ( DispForm.aspx?ID=123 ). Du mußt sie also nur per JavaScript abholen. Du kannst dazu die Suchmaschine Deiner Wahl mit sowas füttern "javascript get url parameter" oder die Funktion von mir nehmen, die Du z:b: hier findest: http://blogs.evocom.de/af/archive/2013/04/26/link-zum-erstellen-eines-detaildatensatzes.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Hallo Andi

Vielen Dank für die Rückmeldung! Diesen Artikel kann ich als nächstes auch sehr gut gebrauchen! Die ID habe ich jetzt, wie in deinem Artikel erwähnt mittels JavaScript:

  var lookupId = getQueryStringParameter("ID");        

abgeholt. Die Funktion habe ich ebenfalls noch hinzugefügt. Nun möchte ich diese ID einfach als ParentID in meienm neuen Element angeben:

oListItem.set_item('ParentId', 'lookupId');

Es funktioniert aber leider nicht. Ich muss statt lookupId eine Zahl ein geben, dann klappt es... unten der gesamte Code, vielleicht kannst du mir weiter helfen:

<script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script><script type="text/javascript">

function getQueryStringParameter(paramName) {

  var params = document.URL.split("?")[1].split("&"),

      i,

      singleParam;

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

    singleParam = params[i].split("=");

    if (singleParam[0] == paramName)

      return singleParam[1];

  }

  return "";

}


function newSubTask(){

  var lookupId = getQueryStringParameter("ID");             
              
                var clientContext = new SP.ClientContext.get_current();
               
                var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
                                                                                                              
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                this.oListItem = oList.addItem(itemCreationInfo);

                oListItem.set_item('Title', 'new subtask');
                                        
                oListItem.set_item('ParentId', 'lookupId');
                               
                oListItem.update();

                clientContext.load(oListItem);

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this,


this.onQueryFailed));

}

function onQuerySucceeded() {

    alert('Item created: ' + oListItem.get_id());

}

function onQueryFailed(sender, args) {

   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());

}

</script><input id="Button1" onclick="newSubTask()" type="button" value="Teilaufgabe erstellen"/>

Top-10-Beitragsschreiber
18.677 Beiträge

Wenn es mit einer Zahl funktioniert, dann mache aus dem String eine Zahl:

var strLookupId = getQueryStringParameter("ID");
var intLookupId = parseInt(strLookupId, 10);

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Leider funktioniert es immer noch nicht.

Benötige ich die Funktion "function getQueryStringParameter(paramName) { " überhaupt? Ich habe es nun mit folgendem Code versucht - der leider aber auch nicht klappt. Hat jemand eine Idee wie es funktionieren könnte?

<script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script><script type="text/javascript">

 


function newSubTask(){

          
              
                var clientContext = new SP.ClientContext.get_current();
               
                var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
                                                                                                              
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                this.oListItem = oList.addItem(itemCreationInfo);
               
                var strlookupId = getQueryStringParameter("ID");
               
                var intlookupId = parseInt(strlookupId, 10);  

               
                oListItem.set_item('Title', 'new subtask');
                                        
                oListItem.set_item('ParentId', intlookupId);
                               
                oListItem.update();

                clientContext.load(oListItem);

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this,


this.onQueryFailed));

}

function onQuerySucceeded() {

    alert('Item created: ' + oListItem.get_id());

}

function onQueryFailed(sender, args) {

   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());

}

</script><input id="Button1" onclick="newSubTask()" type="button" value="Teilaufgabe erstellen"/>

 

Vielen Dank im Voraus!

Top-500-Beitragsschreiber
49 Beiträge

Ich habe den Fehler gefunden! Beim Einfügen des Codes habe ich ParentID falsch geschrieben. So hat es nun geklappt.

 

Vielen Dank Andi für deine Hilfe!

 

 

Top-500-Beitragsschreiber
49 Beiträge

Jetzt komme ich leider schon wieder nicht mehr weiter. Wenn ich nun den mittels js generierten Subtask bearbeite, möchte ich dort auch wieder ein Button haben, der mir direkt einen subtask erstellt. Mit der gleichen ParentID wie der bestehende subtask. Ich muss also nun die ParentID des subtasks herauskriegen. Habe es mal mit SPUtility versucht, der Wert liefert aber immer "undefinded". Bin leider noch totale js anfängerin...

 <script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script><script src="/csa/SiteCollectionDocuments/jquery-1.11.1.min.js"></script><script src="/csa/SiteCollectionDocuments/sputility.min.js"></script><script type="text/javascript">


function getQueryStringParameter(paramName) {

  var params = document.URL.split("?")[1].split("&"),

      i,

      singleParam;

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

    singleParam = params[i].split("=");

    if (singleParam[0] == paramName)

      return singleParam[1];

  }

  return "";

}

         
                                      
var parentid = SPUtility.GetSPField('ParentID');
var parentidvalue = parentid.GetValue();
var intparentid = parseInt(parentidvalue, 10);
                                        
                                          
                       

function newSubTask(){

               
                var clientContext = new SP.ClientContext.get_current();
               
                var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
                                                                                                                                                                                                                             
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                this.oListItem = oList.addItem(itemCreationInfo);
                                                                         
                oListItem.set_item('ParentID', intparentid);
                                               
                oListItem.update();

 

Danke im Voraus!!

Top-10-Beitragsschreiber
18.677 Beiträge

Ich kann Dir nur sagen, daß SPUtility normalerweise mit Lookups klarkommt. Ich nehme an, daß es ein ähnliches Problem wie oben ist, d.h. Du hast Dich wahrscheinlich beim Namen verschrieben.

Eine andere Möglichkeit wäre, die Methoden zum Setzen des Wertes zu verwenden. Du hast es ja geschafft, den Wert aus der URL auszulesen und zu setzen. Diese Methode kann man leicht abgewandelt auch zum Auslesen verwenden.

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Verschrieben habe ich mich (leider) nicht.

Ich komme einfach nicht an die ParentID des aktuellen Subtasks ran...

Wie hast du das mit dem Auslesen gemeint? Die Parent ID ist ja nicht in der URL drin...

Top-10-Beitragsschreiber
18.677 Beiträge

Mel89:
Verschrieben habe ich mich (leider) nicht

Vielleicht ein Problem mit dem sichtbaren Namen und dem internen Namen? Jede Spalte hat einen sichtbaren Namen, der sprachabhängig sein kann und nach Belieben geändert werden kann. Und sie hat einen unveränderlichen internen Namen und den solltest Du mit SPUtility.GetSPFieldByInternalName() verwenden.

Mel89:
Wie hast du das mit dem Auslesen gemeint? Die Parent ID ist ja nicht in der URL drin

Mit dem bestehenden Code holst Du ja die ID aus der URL und setzt sie in das Feld. Jetzt suchst Du das Feld und möchtest von ihm die ID haben...

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

GetSPFieldByInternalName habe ich auch bereits versucht, hat leider auch nicht geklappt...

Habe nun recherchiert wie ich das mit dem Auslesen machen könnte - komme da aber überhaupt nicht weiter. Dafür verstehe ich zu wenig von JavaScript.

Ich kann nicht glauben dass wirklich nirgends steht, wie man an die parentID eines subtask rankommt...

 

Trotzdem vielen Dank für deine Hilfe!

Top-10-Beitragsschreiber
18.677 Beiträge

Ich habe oben vergessen zu erwähnen, wie man an den internen Namen kommt. Wahrscheinlich ist der einfach anders als Du denkst ;-)

Klicke in den Listeneinstellungen auf die Spalte und in der Adresszeile des Browsers findest Du den internen Namen bei Field=...

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Das Problem dabei ist, dass die Parent ID nirgends als Spalte angezeigt wird. Ich kann da nicht irgendwo draufklicken. Diese Spalte ist irgendwo im Hintergrund. ABER sie existiert, da man sie braucht um überhaupt einen Subtask generieren zu können....

Im Quellcode habe ich "parentID" gefunden. Steht aber einfach so im Freien. Aber denke, dass dies der korrekte Name wäre.

Top-10-Beitragsschreiber
18.677 Beiträge

Aaaah, jetzt erinnere ich mich, daß Du ja mit Aufgaben und Teilvorgängen rummachst. Ich muß zugeben, daß ich mich mit dem Feature noch nicht so ausführlich beschäftigt habe.

Wahrscheinlich gibt es da auf dem EditForm einfach gar kein Feld für die ParentID und dann kannst Du natürlich lange suchen. Die einzige Möglichkeit wäre dann das Element über das JavaScript Object Model zu laden und so die ParentID auszulesen. Da habe ich Dir aber kein Beispiel parat...

Viele Grüße
Andi
af @ evocom de
Blog
Top-500-Beitragsschreiber
49 Beiträge

Zum Abschluss dieses Forums: Es hat nun geklappt. Ich habe die ParentID vom übergeordneten Element gleich dem subtask mitgegeben und ins Feld "Hilfstext" geschrieben. Im Editform kann der Wert des Feldes aber nicht einfach mit Hilfe von SPUtility ausgelesen werden:

function newSubTask(){
        var clientContext = new SP.ClientContext.get_current();
        var oList = clientContext.get_web().get_lists().getByTitle('Briefings');
        var itemCreationInfo = new SP.ListItemCreationInformation();
        this.oListItem = oList.addItem(itemCreationInfo);

        var feld = SPUtility.GetSPField('Hilfstext');
        var value = $(feld.GetValue()).wrap('<p>').parent().find('div').text();


        var titel = SPUtility.GetSPField('Titel');
        var titelwert = titel.GetValue();
   
    if(value)
{
   oListItem.set_item( 'ParentID', value);
   oListItem.set_item( 'Title', titelwert);
   oListItem.set_item('Body', value); 
   oListItem.update();
   clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
else
{
alert('ParentID was not found in QueryString!');
}
}

function onQuerySucceeded() {
    var neueID = oListItem.get_id(); 
    alert('Teilaufgabe wurde erstellt. Sie werden gleich auf die soeben erstellte Aufgabe weitergeleitet.');
    window.location = '/csa/Lists/Briefings/EditForm.aspx?ID=' + neueID;
}

function onQueryFailed(sender, args) {
   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());
}

//Get QueryStringByName
function getQueryStringByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
</script>
<input id="btnNewSubTask" type="button" value="Nächste Teilaufgabe" onclick="newSubTask();if (!PreSaveItem()) return false; WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ctl40$g_d4bd4b32_3af9_4de3_adb9_2ccaf99f5685$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))"  />

Seite 1 von 3 (34 Elemente) 1 2 3 Weiter > | RSS