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 ModalDialog Callback Problem

Geprüfte Antwort Dieser Beitrag hat 12 Antworten

Ohne Rang
142 Beiträge
Andman erstellt 24 Nov. 2015 10:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo!

Ich habe einen ModalDialog geöffnet und möchte ich meiner CallBack Funktion je nach Usereingabe reagieren. Aber irgendwie kommt immer nur "undefined" raus. Was mach ich falsch, oder funktioniert das gar nicht?!

Testhalber möchte ich beim Click auf ok einfach nur den Wert aus dem Feld "Titel" ausgeben..aber nicht mal das geht. Ist immer undefined

function Callback(result, target) {
        if (result === SP.UI.DialogResult.OK) {
var value = $('input[title="Titel"]');
alert(value);
}
}
var options = {
title: "Brief erstellen",
url: 'sp2013/crm/contacts/Lists/Serienbriefe/newform.aspx',
dialogReturnValueCallback:Callback
};
SP.UI.ModalDialog.showModalDialog( options );

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Nov. 2015 10:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andman"]function Callback(result, target) [...] [/quote]

Gibt's das auch mit lateinischen Buchstaben? ;-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 10:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hat er es nicht richtig dagestellt?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Nov. 2015 11:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Jetzt schon, aber vorher siehe mein Zitat weiter oben.

Wie auch immer: Du kannst nicht innerhalb der Callfunktion direkt auf ein Feld im Dialog zugreifen ($("input...) Das Feld ist ja in einer anderen HTML-Datei. Stattdessen mußt Du innerhalb des Dialogs ebenfalls etwas Script platzieren und dort den Rückgabewert setzen:

SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, returnValue);

returnValue kann dabei ein beliebiges Objekt oder auch nur eine Zahl sein. Was immer Du möchtest. In der Callbackfunktion bekommst Du dann genau das als zweiten Parameter (hier target).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 13:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Verstehe was du meinst. Aber bekomm es nicht hin. Gehts bisschen konkreter, bzw. wie muss ich meinen Code anpassen. :) Sorry :)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Nov. 2015 13:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Tut mir leid, aber noch konkreter kann ich es nicht beschreiben. Ich habe doch schon exakt beschrieben, was Du zum Schließen des Dialogs machen mußt und wie Du an die übergebenen Werte wieder rankommst.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 13:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann bin ich doch zu doof..

Habs jetzt mal so probiert. Bekomm aber kein alert.

function modalClosed(result, args) {
        if (result === SP.UI.DialogResult.OK) {
            alert(args.arg1);
        }
    }
var options = {
title: "Brief erstellen",
url: '[[=Context.Site.Url]]/crm/contacts/Lists/Serienbriefe/newform.aspx?contactids=' +[[ID]]+'&activityid=6',
dialogReturnValueCallback:modalClosed,
            args: {
                arg1: "Test1",
                arg2: "TEst2"
            }
        };
SP.UI.ModalDialog.showModalDialog( options );

Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 13:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Jetzt! Oh man!

"Stattdessen mußt Du innerhalb des Dialogs ebenfalls etwas Script platzieren und dort den Rückgabewert setzen:"

Damit bin ich nicht klar gekommen. Aber ich hab jetzt noch auf das Formular, also den dialog selber noch nen scripteditor geadded, der mir den Rückgabewert liefert. Hat bisschen gedauert. Sorry. Danke dir

Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 14:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ein Problem hab ich noch. Der alert ist leer und kommt sofort, nachdem ich den Dialog öffne. Der sollte aber erst kommen wenn ich ok drücke und mir den Inhalt des Feldes anzeigen. Hoffe ich nerve noch nicht. Aber ich bin nicht sehr JavaScript affin.

Also auf meinem Dialog hab ich in einem ScriptEditor mit dem Inhalt:

<script type="text/javascript">
    ExecuteOrDelayUntilScriptLoaded(
                function() {
                    var args = $("input[title='Titel Pflichtfeld']").val();                   
                    SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, args);
                }, 'SP.UI.Dialog.js');
</script>

Und mein eigentliches Script ist das:

function modalClosed(result, args) {
        if (result === SP.UI.DialogResult.OK) {
            alert(args);
        }
    }
JavaScript: var options = {
title: "Brief erstellen",
url: '[[=Context.Site.Url]]/crm/contacts/Lists/Serienbriefe/newform.aspx?contactids=' +[[ID]]+'&activityid=6',
dialogReturnValueCallback:modalClosed
        };
SP.UI.ModalDialog.showModalDialog( options );

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Nov. 2015 15:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Über das ExecuteOrDelay... wird das Script ja sofort beim Laden des Dialogs ausgeführt. Es schließt den Dialog und gibt dabei das anfangs leere Feld zurück. Dieses Script sollte eigentlich zum Schließen des Dialogs verwendet werden, also z.B. beim Klick auf den Speichern-Button.

Ah, ich sehe gerade, daß es gar nicht Dein eigenes Formular sondern offenbar ein Standard-NewForm ist. Da sehe ich nicht wirklich eine Möglichkeit das gewünschte zu realisieren. Du müßtest ja den Klick auf den Standard-Speichern-Button abfangen und bist dann auch für das Speichern des Elements verantwortlich.

Entweder Du überdenkst Dein Konzept nochmal (ist das wirklich notwendig auf diese Art) oder Du baust das Script so um, daß es keinen Rückgabewert braucht sondern sich einfach das letzte neu angelegte Element aus der Liste holt oder Du baust Deinen eigenen Dialog und speicherst dann auch das Element selbst. Alles kein Hexenwerk :-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 24 Nov. 2015 15:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Habs jetzt

<script type="text/javascript">
 function PreSaveAction(){
 var args = $("input[title='Titel Pflichtfeld']").val();                 
SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, args);
return true;
}
</script>

...damit gehts. Danke dir für deine Hilfe. Schwere Geburt.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Nov. 2015 17:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andman"]damit gehts[/quote]

Echt? Und das neue Element wird gespeichert? Ich hätte gedacht, daß man SharePoint durcheinanderbringt, wenn man den Dialog selbst schließt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 25 Nov. 2015 08:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ne, geht auch nicht. Er speichert das Element nicht ab. Die Freude währte nur kurz..