在Lotus Notes Web表单中编辑和保存

时间:2016-07-01 05:25:46

标签: javascript web lotus-notes

我们有一个基于Lotus Notes的Web表单。在这种形式,我们想要一个按钮保存,点击将保存表格,而不是关闭表格。这样用户必须能够在不关闭表单的情况下进行编辑和保存。怎么办呢?

1 个答案:

答案 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