2014-10-30 74 views
2

xpages包含SAVE按钮。 xpages还包含InternetAddres字段。 当用户单击SAVE按钮时,需要首先检查names.nsf - 如果在names.nsf视图中未找到InternetAddress值,则保存成功“($ Users)” - 如果在names.nsf视图中找到InternetAddress值,则保存失败“( $ Users)“xpages保存文档时运行脚本

如何编写脚本来做到这一点?

这是脚本的LotusScript版本:

Set namesview = namesdb.GetView("($Users)") 
Set namesdoc = namesview.GetDocumentByKey(Lcase(doc.CurrentInternetAddress(0)), True) 
If (namesdoc Is Nothing) Then '-- Create New Doc 

如何在XPages中移动?

+0

接受符合您的目的的答案或评论丢失的内容被认为是礼貌的 – stwissel 2014-10-31 03:16:51

回答

0

在你的数据源中是一个querySave事件。你在那里写JS。它几乎是相同的代码。只需{}和;

备注:当有多个地址簿

  • 您的应用程序将打破,所以你你想使用@NameLookup这是相当快,并检查所有addressbooks。
  • ,除非你所需要的文档getEntry比getDocument

在SSJS你的功能应该是这样的速度更快:

function continueWithValidUser(namesDB, addressCandidate) { 
    var success = false; 
    try { 
     var view = namesDB.getView("($Users)"); 
     var doc = view.getDocumentByKey(addressCandidate); 
     success = (doc != null); 
     doc.recycle(); 
     view.recycle(); 
    } catch (e) { 
     print(e.message); 
    }   
    return success; 

}

这应该做的伎俩

+0

由于变量名称是成功的,因此您需要“返回成功”而不是“返回结果”,以防未曾已接。 – 2014-10-30 09:05:33

+0

修正了错字,thx @PaulStephenWithers – stwissel 2014-10-30 09:58:31

5

的最新版本的OpenNTF Domino API为View类添加了checkUnique()方法。它有两个参数,第一个是检查视图的键(例如字符串或字符串列表),第二个是当前文档。毕竟,如果您正在检查预先存在的文档,您不希望仅仅因为它在视图中找到此文档而失败。

因此,假设CurrentInternetAddress是一个单值字段,该代码将是:

function continueWithValidUser(namesDB, doc) { 
    var success = false; 
    try { 
     var view = namesDB.getView("($Users)"); 
     success = view.checkUnique(doc.getItemValue("CurrentInternetAddress"),doc); 
    } catch (e) { 
     print(e.message); 
    }   
    return success; 
} 

OpenNTF的Domino API回收所有句柄到Domino对象,因此不需要再循环()调用。