基本上我需要从莲花笔记本身的视图中访问一些记录或数据。我无法使用@DBLookup
,因为我们的目标不是刷新表单。我知道使用AJAX有可能虽然我还没有尝试过AJAX但是如果你有详细的教程请在这里分享。
我的主要问题基本上是在视图中访问这些记录的其他任何更简单的方法吗?直接在字段的javascript部分编码。非常感谢。
基本上@DbLookup
=“?” Javascript(不是AJAX)。
答案 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=YourCategory
或hxxp://server/db.nsf/YourLookupView?ReadViewEntries&restricttocategory=YourCategory&OutputFormat=json
的网址,并使用&#34; native&#34;解析结果。 javascript ...