2016-07-01 16 views
0

Wir haben ein Webformular, das auf Lotus Notes basiert. In diesem Formular möchten wir eine Schaltfläche speichern, die bei Klick speichert das Formular und nicht das Formular zu schließen. Damit die Benutzer bearbeiten und speichern können, ohne das Formular zu schließen. Wie kann das gemacht werden?Bearbeiten und Speichern im Lotus Notes-Webformular

+0

Bitte zeigen Sie Ihren Code. Wie sieht Ihre aktuelle Schaltfläche "Speichern und Schließen" aus? –

+0

Wir haben eine check() -Funktion, die die Validierungen prüft und dann document.forms [0] .submit(); aber es reicht das Dokument ein und schließt dann das Dokument. Ist es möglich, das Dokument nach dem Speichern nicht zu schließen? – Harshi

+0

Dies geschieht normalerweise, indem das Dokument normal gesendet wird und der WebQuerySave-Agent eine Umleitungs-URL (umgeben von eckigen Klammern) druckt, die das Dokument zur Bearbeitung öffnet. Natürlich wird dadurch das Formular geschlossen und wieder geöffnet, und der Benutzer verliert seine Position, es sei denn, Sie fügen ein Skript und ein URL-Argument hinzu, um den Fokus wiederherzustellen. –

Antwort

0

Sie könnten eine Speicherfunktion mit Javascript (oder noch einfacher mit jQuery) schreiben. Sie können einen einfachen Lotusscript-Agenten aufrufen, um die Formularwerte im Dokument zu speichern.

Ich werde im August einen Vortrag über dieses bei MWLUG in Austin tun, aber Sie können Beispielcode in meinen früheren Präsentationen finden Sie hier:

http://blog.texasswede.com/mwlug-2015/ - enthält auch die Grundlagen von Ajax, JSON, jQuery und Bootstrap

http://blog.texasswede.com/my-connect-2016-presentation-demo-database/ - meine Präsentation von IBM Connect 2016, kürzer und weniger auf die Grundlagen konzentriert, zeigt, wie Sie mit JSONP Agenten auf anderen Servern aufrufen.

Hier ist, wie Sie es tun können:

1) Geben Sie alle Eingabefelder ein eigenes Attribut Notizen-Feld genannt, setzen sie auf den Namen des Feldes in der Domino-Datenbank. Es sollte wie folgt aussehen:

<input type="text" id="firstName" notes-field="FirstName"> 

Auch stellen Sie sicher, Sie speichern die Schuldverschreibungen doucument UNID (Unique ID) des Dokuments, das Sie in einem HTML-Element bearbeiten. Ich speichere es als Datenattribut in einem DIV mit der ID docUNID, wie folgt aus:

<div id="docUNID" data-UNID="CD8808D24664739A86257FB7005B38CE"> 

2) Binden Sie die folgenden jQuery-Code in Ihre speichern Taste:

// Get Document UNID for the document you want to update 
var docunid = $("#docUNID").attr("data-UNID"); 
var json = new Object(); 
// Store field values in JSON object 
json["DocUNID"] = docunid; 
$('input[notes-field]').each(function() { 
    var notesfield = $(this).attr("notes-field"); 
    json[notesfield] = $(this).val(); 
}); 
// Perform Ajax call to the server to save values    
$.ajax({ 
    url: "http://www.example.com/path/database.nsf/ajax_SaveContact.jsonp?OpenAgent", 
    dataType: "jsonp", 
    data: json 
}); 

3) Erstellen Sie einen Rückruf Funktion, die die vom SaveData-Agenten zurückgegebenen Daten verarbeitet. Dieser Funktionsname muss mit dem in Ihrem Agenten übereinstimmen, den Sie im nächsten Schritt erstellen.

// Call-back function for save contact call 
function callbackSaveContact(data) { 
    if (data.ajaxstatus=="error") { 
     alert("Failure: " + data.msg); 
    } else if (data.ajaxstatus=="success") { 
     alert("Success: " + data.msg); 
    } 
} 

4) Legen Sie Ihr Agent die Daten, um sie in das angegebene Dokument übergeben zu speichern:

%REM 
    Agent ajax_SaveContact.jsonp 
    Created Dec 24, 2015 by Karl-Henry Martinsson 
    Description: Save contact details, return status 
    and informational message as JSONP 
%END REM 
Option Public 
Option Declare 

Use "Class.JSON" 
Use "Class.URL" 

Sub Initialize 
    '--- Local Notes classes used in agent 
    Dim session As New NotesSession 
    Dim db As NotesDatabase 
    Dim doc As NotesDocument 
    '--- Custom classes 
    Dim json As JSONData 
    Dim url As New URLData 

    '*** Get document 
    Set db = session.CurrentDatabase 
    If url.GetValue("DocUNID")<>"" Then 
     Set doc = db.GetDocumentByUNID(url.GetValue("DocUNID")) 
    End If 
    '*** Check that we found a document, otherwise create a new person document 
    If doc Is Nothing Then 
     Set doc = New NotesDocument(db) 
     doc.Form = "Person" 
     Call doc.Save(True,False) 
     Call doc.ReplaceItemValue("DocUNID", doc.UniversalID) 
    End If 
    ForAll v In url.values() 
     Call doc.ReplaceItemValue(ListTag(v),v) 
    End ForAll 
    Call doc.Save(True,False) 
    Set json = New JSONData() 
    json.success = True 
    json.SetMsg("Saved " + url.GetValue("FirstName") + " " + url.GetValue("LastName")) 
    Call json.SetValue("DocUNID", doc.UniversalID) 
    Call json.SendJSONPToBrowser("callbackSaveContact") 
End Sub 

Beachten Sie, dass Sie benötigen zwei Script-Bibliotheken zu verwenden, die jeweils eine eigene Klasse enthält. Die erste Class.URL wird verwendet, um die Daten zu lesen, die im HTTP POST/GET übergeben wurden, der an den Agenten gesendet wird. Die zweite Class.JSON hilft Ihnen beim Erstellen des JSON/JSONP, das zurückgegeben werden soll. Sie können sie in den Beispieldatenbanken für meine Präsentationen sowie auf meinem Blog finden:

http://blog.texasswede.com/free-code-class-to-read-url-name-value-pairs/ http://blog.texasswede.com/calling-a-notes-web-agent-from-another-server-using-jsonp/

Die Präsentationen sind auch auf SlideShare.net:

http://www.slideshare.net/TexasSwede/ibm-connect-2016-break-out-of-the-box

http://www.slideshare.net/TexasSwede/ad102-break-out-of-the-box

Verwandte Themen