我需要在配置文件中保存文档的序列号,这是一个操作代码Execute Script:
if (document1.isNewNote()){
var pdoc:NotesDocument=database.getProfileDocument("LastNumber","")
var lnm=pdoc.getItemValue("lastNumber")[0];
var inputText6:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText6");
inputText6.setValue(lnm);
pdoc.replaceItemValue("lastNumber",lnm);
pdoc.save();
}
此代码根本没有打开个人资料文档。代码中有什么问题吗?
答案 0 :(得分:1)
" LastNumber"是用于创建个人档案文档的表单的名称? 这个档案文件已经存在? 此配置文件中没有读者字段? 你在这一行上有一个错误:var pdoc:NotesDocument = database.getProfileDocument(" LastNumber","")? 或者你已经调试它并看到pdoc为null?
而不是pdoc.getItemValue(" lastNumber")[0]你可以使用pdoc.getItemValueInteger(" lastNumber")来获得一个打字结果 我想这个字段包含一个数字,你想增加它
而不是使用inputText字段,您可以直接使用document1.setValue(" NumberField",lnm)设置值;
答案 1 :(得分:1)
我是第二个Per建议的警告。档案文件可以是野兽。您应该抽象访问"下一个号码"进入SSJS函数调用。顺便说一句。在您的代码段中,您实际上并未递增最后一个数字。另外:如果绑定了输入文本控件,请在数据源之后,而不是UI。
粗略的方法(我会使用托管的应用程序bean来实现更好的隔离)以获得更好的功能:
if(document1.isNewNote() {
document1.setValue("DocumentNumber",applicationTools.getNextNumber());
}
然后在SSJS库中你会得到:
var applicationTools = {
"getNextNumber" : function() {
synchronized(applicationScope){
var pdoc:NotesDocument=database.getProfileDocument("LastNumber","");
if (!applicationScope.lastNumber) {
applicationScope.lastNumber = pdoc.getItemValueInteger("lastNumber");
}
applicationScope.lastNumber++;
pdoc.replaceItemValue("lastNumber",applicationScope.lastNumber);
pdoc.save(); //Make sure pdoc is writeable by ALL!!!!
pdoc.recycle();
return applicationScope.lastNumber;
}
},
"someOtherUtility" : function(nameToLookup, departments) {
// more stuff here
}
}
以某种方式has been asked before,但不是个人资料字段。有人仍然可以简单地追踪applicationScope.lastNumber
变量,这是我宁愿使用bean的原因之一。另一个:你可以异步进行保存,因此会更快。
注意:在任何情况下,只有拥有非复制数据库时,数字生成才有效。但是,抽象函数可以通过调用中央数字生成器......或任何其他机制来替换从配置文件中获取数字...而无需再次更改表单。