2013-10-28 87 views
1

我习惯于使用关系数据库,您可以在其中定位特定记录。例如,使用下面的伪sql。查询Lotus Notes中的特定记录

SELECT id, name, otherVar FROM students WHERE id=:studentId 

但是,我不确定如何甚至在Lotus Notes中用它的扁平数据模型解决这个问题。我一直在使用Google,但不断提出如何更新Lotus Notes本身,而不是Lotus Notes内部的文档。如果某些具有一定的LN专业知识的人可以指引我正确的方向,那将非常感激。

回答

6

使用SQL语句作为比喻,可以说你有一个视图students,列id,nameotherVar。列id应该排序(升序或降序)。因此,认为看起来是这样的

╔════╦════════════╦═════════════╗ 
║ id ║ name  ║ otherVar ║ 
╠════╬════════════╬═════════════╣ 
║ 1 ║ Daniel  ║ ---------- ║ 
║ 2 ║ Joseph  ║ ---------- ║ 
║ 3 ║ Michelle ║ ---------- ║ 
╚════╩════════════╩═════════════╝ 

查找这个观点,你会写这样的事情在LotusScript中:

Dim session As New NotesSession 'Get current session 
Dim currentDB As NotesDatabase 
Dim view As NotesView 
Dim doc As NotesDocument 
Dim studentId As String 

studentId = "<STUDENT_ID>" 'The student ID that needs to be searched 
Set currentDB = session.CurrentDatabase 'Get current database 
Set view = currentDB.GetView("students") 'Get the view 
Set doc = view.GetDocumentByKey(studentId, True) 'Look up the view with student ID to get the student document 

做一个简单的谷歌搜索NotesView以获取更多信息。在公式语言中,您可以将其写为:

@DbLookup("Notes":"NoCache"; ""; "students"; "<STUDENT_ID>"; "<FIELD TO BE RETRIEVED>"; [FailSilent]); 

但是如果您想要执行复杂的计算,则公式不太灵活。

+0

我将您标记为答案,但我还在数据库类中找到了一个名为getDocumentByID的函数。我以前没有找到它,因为我错误地认为像这样的功能应该放在View类上。我猜这是有道理的,因为View只是一种组织数据库内容的方式。 –

+2

@JRSmith:'getDocumentByID'函数通过Notes标识获取文档。 Lotus Notes中还有另一件名为Universal ID的概念,这个概念本身是一个单独的主题,所以我不会在这里离题。 'getDocumentByID'函数将在创建文档时基于Lotus Notes生成的Notes标识获取文档。你确定'studentId'与文档的Notes ID相同吗?如果是,那么它工作,如果没有,那么你将不得不通过'NotesView'去。 – Naveen

+3

最好将它称为NoteID,而不是Notes标识 - 因为后者很容易与Notes标识文件混淆,这也是一个完全不同的概念。 NoteID不是一个稳定的值。你永远不能确定它匹配任何东西。甚至不能保证匹配相同数据库的两个不同副本中的同一文档。 –

0

尝试使用Domino数据服务。让您的Notes管理员为REST Services工作打开数据库,并且您几乎可以从任何地方获取Domino数据!请参阅Domino Data Services manual on the web