案例:选择客户名称后更新字段:
设置:1个包含数据库路径的设置视图:
DbServer:ServerOne / pcs 目录:办公室 数据库名称:Customer.nsf
这个xpages里面有一个数据源,它调用“document1”
// get the database path :
var vw3:NotesView=database.getView("Setting Path");
var doc3:NotesDocument=vw3.getFirstDocument();
var server:string = doc3.getItemValueString("DbServer");
var DName:string=doc3.getItemValueString("DbName");
var Directory:string=doc3.getItemValueString("Directory");
var DBName:string= Directory+"\\" +DName;
var db:NotesDatabase = session.getDatabase(server, DBName, false);
var vw:NotesView = db.getView("All Customer");
var doc:NotesDocument=vw.getDocumentByKey(document1.getValue("Customer"),true);
if (doc !=null) {
document1.setValue("Contact", doc.getItemValueString("Contact"));
document1.setValue("Telephone", doc.getItemValueString("Phone"));
document1.setValue("Fax", doc.getItemValueString("Fax"));
document1.setValue("Email", doc.getItemValueString("Email"));
}
问题:
该字段不会更新并从“客户”数据库中获取值。
答案 0 :(得分:2)
我在您的代码中看到了一系列问题:
将输入字段绑定到范围变量,而不是文档本身。它是一个搜索字符串,不是新文档的一部分。
您不会检查未找到客户的情况,因此您永远不知道这是否是问题。
我宁愿使用网址而不是服务器/路径/数据库(但这有点风格)
所以类似的东西(键入我的头,将包含拼写错误):
var vw3:NotesView=database.getView("Setting Path");
var vwe3 = vw3.getFirstEntry();
var db = session.resolve(vwe.entries[0]);
var vw:NotesView = db.getView("All Customer");
var doc:NotesDocument=vw.getDocumentByKey(viewScope.customer,true);
if (doc !=null) {
viewScope.result = doc.getUniversalID();
document1.setValue("Contact", doc.getItemValueString("Contact"));
document1.setValue("Telephone", doc.getItemValueString("Phone"));
document1.setValue("Fax", doc.getItemValueString("Fax"));
document1.setValue("Email", doc.getItemValueString("Email"));
doc.recycle()l
} else {
viewScope.result = "Not found!";
}
// ADD recycle() calls here!!!
将仅显示字段绑定到viewScope.result,以便您更好地了解发生的情况。您的视图必须按客户名称进行排序和索引。
当然,您可以使用OpenNTF对话框列表控件。