使用Javascript直接在Lotus Notes中获取视图信息/记录

时间:2014-07-01 10:12:50

标签: javascript lotus-notes lotus-domino lotusscript

基本上我需要从莲花笔记本身的视图中访问一些记录或数据。我无法使用@DBLookup,因为我们的目标不是刷新表单。我知道使用AJAX有可能虽然我还没有尝试过AJAX但是如果你有详细的教程请在这里分享。

我的主要问题基本上是在视图中访问这些记录的其他任何更简单的方法吗?直接在字段的javascript部分编码。非常感谢。

基本上@DbLookup =“?” Javascript(不是AJAX)。

2 个答案:

答案 0 :(得分:3)

我会像Torsten所建议的那样,创建一个执行查找的Lotusscript代理并返回带有数据的JSON对象。然后使用Javascript或(甚至更简单的)jQuery从您的网页对该代理进行Ajax调用。

我前一段时间在我的博客上发布了一些代码。它正在做类似的事情,但它不是执行视图查找,而是根据文档ID检索特定文档的值。您可以在此处找到代码和更详细的说明: http://blog.texasswede.com/code-snippet-jquery/

这是jQuery代码:

function loadNotesFields(docunid) {
    var notesfieldname = "";
    $.ajax({
        url: "/database.nsf/ajax_GetNotesFieldFields?OpenAgent", 
        data: {"NotesUNID":docunid},
        cache: false
    }).done(function(data) {
        $('input[notesfield]').each(function() {
            notesfieldname = $(this).attr("notesfield");
            $(this).val(data[notesfieldname]);
        });
    });
}

这是Lotusscript代码:

Dim urldata List as String
Sub Initialize
    Dim session As New NotesSession
    Dim webform As NotesDocument
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim urlstring As String
    Dim urlarr As Variant
    Dim urlvaluename As Variant
    Dim i As Integer
    Dim json As String

    Set webform = session.DocumentContext
    '*** Remove leading "OpenAgent" from Query_String
    urlstring = StrRight(webform.Query_String_Decoded(0),"&")
    '*** Create list of arguments passed to agent
    urlarr = Split(urlstring,"&")
    For i = LBound(urlarr) To UBound(urlarr)
        urlvaluename = Split(urlarr(i),"=")
        urldata(urlvaluename(0)) = urlvaluename(1)
    Next
    Set thisdb = session.CurrentDatabase
    '*** Create content header for return data
    Print "content-type: application/json"
    '*** Get Notes document baed on NotesUIND argument
    Set doc = db.GetDocumentByUNID(urldata("NotesUNID"))
    '*** Build JSON for all fields in document except $fields
    json = "{" + Chr$(13)
    ForAll item In doc.Items
        If Left$(item.Name,1)<>"$" Then
            json = json + |"| + item.Name + |":"| + item.Text + |",|+ Chr$(13)
        End If
    End ForAll
    '*** Remove trailing comma and line break
    json = Left$(json,Len(json)-2)  
    json = json + "}"
    '*** Return JSON
    Print json  
End Sub

答案 1 :(得分:1)

如果这是一个XPages问题,那么答案很简单:使用JavaScript @DBLookup。

对于&#34;经典&#34;网络开发并不容易。您需要编写一个代理程序,它会以您想要的任何格式返回@DBLookup的结果,并使用ajax调用来调用该代理程序。这看起来像这样:

LotusScript-Agent,不触发

Dim ses as New NotesSession
Dim db as NotesDatabase
Dim viw as NotesView
Dim dc as NotesDocumentCollection
Dim doc as NotesDocument

Set db = ses.CurrentDatabase
Set viw = db.GetView( "YourLookupView" )
Set dc = viw.GetAllDocumentsByKey( "YourLookupKey" )
Set doc = dc.GetFirstDocument
While not doc is Nothing
  Print doc.GetItemValue( "NameOfItemToReturn" )(0)
  Set doc = dc.GetNextDocument( doc )
Wend

此代理将返回&#34;页面&#34;使用所有值,每行一行......然后在你的ajax- return函数中,你想用这个值做什么。

通常你不是简单地打印值,而是返回json-对象,或者某些xml-结构,或者已经将html作为有序列表,或者其他什么,但原则应该是明确的。

然后你调用代理(例如使用ajax调用),如:hxxp://server/db.nsf/AgentName?OpenAgent

另一种可能性是使用类似hxxp://server/db.nsf/YourLookupView?ReadViewEntries&restricttocategory=YourCategoryhxxp://server/db.nsf/YourLookupView?ReadViewEntries&restricttocategory=YourCategory&OutputFormat=json的网址,并使用&#34; native&#34;解析结果。 javascript ...