我们有一个基于Lotus Notes的Web表单。在这种形式,我们想要一个按钮保存,点击将保存表格,而不是关闭表格。这样用户必须能够在不关闭表单的情况下进行编辑和保存。怎么办呢?
答案 0 :(得分:0)
您可以使用Javascript编写保存功能(甚至更容易使用jQuery)。 您可以调用一个简单的Lotusscript代理将表单值保存到文档中。
我将在八月份在奥斯汀的MWLUG上做一个关于此的演讲,但您可以在我之前的演讲中找到示例代码:
http://blog.texasswede.com/mwlug-2015/ - 还包括Ajax,JSON,jQuery和Bootstrap的基础知识
http://blog.texasswede.com/my-connect-2016-presentation-demo-database/ - 来自IBM Connect 2016的演示文稿更短,更少关注基础知识,展示如何使用JSONP调用其他服务器上的代理。
以下是如何做到这一点:
1)为所有输入字段提供一个名为notes-field的自定义属性,将其设置为Domino数据库中字段的名称。看起来应该是这样的:
<input type="text" id="firstName" notes-field="FirstName">
另外,请确保将要编辑的文档的Notes doucument UNID(唯一ID)存储在HTML元素中。我将它作为数据属性存储在ID为docUNID的DIV中,如下所示:
<div id="docUNID" data-UNID="CD8808D24664739A86257FB7005B38CE">
2)将以下jQuery代码绑定到保存按钮:
// 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)创建一个回调函数,该函数将处理SaveData代理返回的数据。此函数名称必须与您将在下一步中创建的代理程序中的名称相匹配。
// 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)创建代理以将传递给它的数据保存到指定的文档中:
%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
请注意,您需要使用两个脚本库,每个脚本库都包含一个自定义类。第一个Class.URL用于读取进入代理的HTTP POST / GET中传递的数据。第二个Class.JSON帮助您创建要返回的JSON / JSONP。 您可以在我的演示文稿的示例数据库中以及我的博客中找到它们:
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/
演示文稿也在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