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.855 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

Ohne Rang
10 Beiträge

Hallo,

bin ziemlich neu in dem Gebiet und wollte mal fragen, was ich machen muss um so einen Button auf unsere Seite zu bekommen. Ich habe den Code mal in der Ansichtsform mit Quellcode einbetten in dem Web-Part Script-Editor eingefügt, aber es macht nix.

Was muss ich beachten, ausser der Anpassung der Benennungen und wie genau muss ich vorgehen?

Danke.

Top-10-Beitragsschreiber
18.855 Beiträge

Was soll der Button denn machen? Einen simplen Button bekommst Du in die Seite, wenn Du das hier in ein Script-Editor-Webpart einfügst:

<input type="button" value="Klick mich" />

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

Genau das was oben steht.

 

Er soll zu der jeweils geöffneten Aufgabe im Ansichtsformular durch Klick auf einen Button eine (weitere) Unteraufgabe darunter erstellen und die Form NewItem aufrufen.

Top-10-Beitragsschreiber
18.855 Beiträge

Hast Du auch jQuery und SPUtility referenziert? https://archive.codeplex.com/?p=sputility

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

Hallo,

also anbei ist mien Code; was genau ist daran falsch? Meinst du mit referenzieren am Anfang die Definition?

Hier müsste er mir doch beim draufklicken ein neues Unteritem mit dem Titel new subtask machen, oder?

Vielen Dank!

<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('TestListe');                                                                                                             
                var itemCreationInfo = new SP.ListItemCreationInformation();              
                this.oListItem = oList.addItem(itemCreationInfo);              

                var strlookupId = getQueryStringParameter("ID");              
                var intlookupId = parseInt(strlookupId, 10);  
               
                oListItem.set_item('Titel', '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"/>

Top-10-Beitragsschreiber
18.855 Beiträge

Mit referenzieren meine ich genau das:

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

An sich sieht das vernünftig aus und es sollte eine der Meldungen über Erfolg oder Mißerfolg kommen. Wahrscheinlich gibt es einfach vorher schon einen Fehler, aber das kannst Du im Debugger ganz einfach herausfinden. Mache doch mal einen Breakpoint in die erste Zeile von newSubTask und gehe das dann zeilenweise durch.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

Kannst du mir bitte nohc sagen, wie ich SPUtility referenzier?

Top-10-Beitragsschreiber
18.855 Beiträge

In Deinem Code oben ist ja kein SPUtility mehr drin. Aber grundsätzlich geht das mit externen JS-Dateien immer gleich: runterladen, in einer SharePoint-Bibliothek parken (z.B. in Site Assets) und dann von dort referenzieren.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

Habe meinen Code jetzt etwas abgeändert:

 

<script type="text/javascript" src="/_catalogs/masterpage/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">


 

function newSubTask(){

                var clientContext = new SP.ClientContext.get_current();
 
                var oList = clientContext.get_web().get_lists().getByTitle('TestListe');
 
                var itemCreationInfo = new SP.ListItemCreationInformation();
 
    this.oListItem = oList.addItem(itemCreationInfo);
 
                oListItem.set_item('Title', 'Neue Unteraufgabe: Bitte Ausfüllen!');
       
                var aufgabenId = oListItem.get_id();
   
    oListItem.set_item('ParentID', aufgabenId);
 
                oListItem.update();
 
                clientContext.load(oListItem);
 
        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded2(aufgabenId)), Function.createDelegate(this,
 
 
this.onQueryFailed2));
 
}
 
function onQuerySucceeded2(aufgabenId) {
 
    alert('Teilvorgang erstellt, die ID lautet: ' + oListItem.get_id());
 
}
 
function onQueryFailed2(sender, args) {
 
   alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace());

}

</script>

 

<input id="Button1" type="button" value="Neue Unteraufgabe" onclick="newSubTask()" />

 

Nun kommt folgende Meldung nach dem Ausführen, trotz erfolgreichem Debugging:

Request Failed. Das Listenelement konnte nicht hinzugefügt oder aktualisiert werden, weil doppelte Werte in den folgenden Feldern der Liste gefunden wurden: [Priorität].nundefined

Eine Idee? Danke.

 

Top-10-Beitragsschreiber
18.855 Beiträge

Die Fehlermeldung klingt, als ob für das Feld Priorität eindeutige Werte erzwungen würden. schau da mal nach. Kann aber auch sein, daß die Fehlermeldung Quatsch ist. Setze einfach mal einen Wert für Priorität, direkt nach oListItem.set_item('Title', ...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

Danke schonmal soweit.

Nun funktioniert es weitesgehend, aber ich hätte gerne noch das Formular nach Erstellen geöffnet. Kannst du mir einen Befehl sagen, mit dem ich nach erstellen der Unteraufgabe diese automatisch öffnet zum Ausfüllen?

Top-10-Beitragsschreiber
18.855 Beiträge

Schaue Dir die Adresse der Seite mal an. Sie geht ungefähr so:
...site/Lists/<NameDerListe>/EditForm.aspx?ID=4711

Statt 4711 setzt Du einfach die ID des von Dir neu erzeugten Elements (oListItem.get_id() ). Die ganze Adresse weist Du dann window.location zu und der Browser leitet dorthin um.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

tiptop habs mit windows.open gemacht.

kann man jetzt als Sahnehäubchen auch noch sofort das angezeigte Fenster im EditForm starten, sodass das Ausfüllen nicht vergessen werden kann?

Top-10-Beitragsschreiber
18.855 Beiträge

Verstehe ich nicht. Kannst Du die Anforderung nochmal anders formulieren?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
10 Beiträge

habs raus, aber viele Dank. Habs jetzt komplett fertig.

Seite 2 von 3 (34 Elemente) < Zurück 1 2 3 Weiter > | RSS