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.756 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 nochmal,

 

also habe jetzt die Buttons um automatisch Unteraufgaben zu erstellen, was prima funktioniert. Nun möchte ich, dass bestimmte Werte aus der Hauptaufgabe beim Erstellen einer Unteraufgabe automatisch übernommen werden. Dabei kommt bei mir aber immer die Fehlermeldung "SCRIPT5022: Die Eigenschaft oder das Feld wurde nicht initialisiert. Es ist keine Anforderung erfolgt, oder die Anforderung wurde nicht ausgeführt. Ggf. muss eine ausdrückliche Anforderung erfolgen.". Muss ich eventuell zweimal am Anfang den context initialisieren? Weiss jmd was an diesem Code nciht stimmen könnte:


function newSubTaskPPro(){


                var clientContext = new SP.ClientContext.get_current();
 
                var oList = clientContext.get_web().get_lists().getByTitle('Test');
 
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                var aufgabenId = GetUrlKeyValue("ID", false, location.href);
               
                var contenttypeId = GetUrlKeyValue("ContentTypeId", false, location.href);
               
                this.targetListItem = oList.getItemById(aufgabenId);
               
                clientContext.load(targetListItem);
               
                if (contenttypeId = "0x0100AC8EB51D82286E40A404D369B76BE4F20300613240674F94194BB90CC8C0C428DAA3") {
               
                var test = targetListItem.get_item('CategoryDescription');
               
                }
                  
  this.oListItem = oList.addItem(itemCreationInfo);
 
                oListItem.set_item('Title', 'Bitte Ausfüllen!');

                oListItem.set_item('Priority', '');

  oListItem.set_item('ParentID', aufgabenId);
               
                oListItem.set_item('CategoryDescription', test);
               
                oListItem.update();
 
                clientContext.load(oListItem);

Top-10-Beitragsschreiber
18.756 Beiträge

Nach dem ctx.load() in Zeile 7 fehlt ein ctx.executeQueryAsync(...)

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

Danke schonmal..Neues Problem. Habe den Code etwas umgeschrieben, da ich cniht wusste, ob man zwei ctx.executeQueryAsync nacheinander laufen lassen kann. Jetzt kommt aber folgender Fehler "SCRIPT5007: Die Eigenschaft "Async" eines undefinierten oder Nullverweises kann nicht abgerufen werden.":

 

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

 

function newSubTaskPPro(){


                var clientContext = new SP.ClientContext.get_current();
 
                var oList = clientContext.get_web().get_lists().getByTitle('Test');
 
                var itemCreationInfo = new SP.ListItemCreationInformation();
               
                var aufgabenId = GetUrlKeyValue("ID", false, location.href);
               
                var contenttypeId = GetUrlKeyValue("ContentTypeId", false, location.href);
               
                var numaufgabenId = Number(aufgabenId);
               
                this.targetListItem = oList.getItemById(numaufgabenId);
               
                clientContext.load(targetListItem, 'CategoryDescription');
               
                clientContext.executeQuery.Async(Function.createDelegate(this, this.onQuerySucceeded1), Function.createDelegate(this, this.onQueryFailed));

                
               
}
               
function onQuerySucceeded1() {
            
                if (contenttypeId = "0x0100AC8EB51D82286E40A404D369B76BE4F20300613240674F94194BB90CC8C0C428DAA3") {
               
                var test = targetListItem.get_item('CategoryDescription');
               
                }
                  
  this.oListItem = oList.addItem(itemCreationInfo);
 
                oListItem.set_item('Title', 'Bitte Ausfüllen!');

                oListItem.set_item('Priority', '');

  oListItem.set_item('ParentID', aufgabenId);
               
                oListItem.set_item('CategoryDescription', test);
               
                oListItem.update();
 
                clientContext.load(oListItem);
 
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded2), Function.createDelegate(this, this.onQueryFailed));
               
}

 
function onQuerySucceeded2() {

                window.open("http://sps2.emea.festo.net/sites/fmtal/pro/P/Lists/Test/EditForm.aspx?ID="+oListItem.get_id()+"&ContentTypeId=0x0100AC8EB51D82286E40A404D369B76BE4F2030067F81E94B924C84B81CACB66F0B2E440")

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

}


</script><strong class="ms-rteThemeFontFace-1">Unteraufgabe erstellen:</strong><input id="Button1" onclick="newSubTaskPPro()" type="button" value="P-Pro"/>

Top-10-Beitragsschreiber
18.756 Beiträge

Du hast da einen Punkt zu viel. Es heißt einfach nur clientContext.executeQueryAsync - ohne Punkt zwischen Query und Async.

Mache Dich mal schlau, wie man JavaScript debuggen kann, z.B. durch die im Browser eingebauten Entwicklertools, die man durch F12 erreicht. Damit findest Du solche Fehler selbst ganz schnell.

Viele Grüße
Andi
af @ evocom de
Blog
Seite 3 von 3 (34 Elemente) < Zurück 1 2 3 | RSS