초당주의 사항을 제안합니다. 프로필 문서는 짐승이 될 수 있습니다. SSJS 함수 호출에 "다음 번호"에 대한 추상 액세스 권한이 있어야합니다. Btw. 코드 스 니펫에서 실제로 마지막 숫자를 증가시키지 않습니다. 또한 : 입력 텍스트 컨트롤이 바인딩 된 경우 UI가 아닌 데이터 소스를 따라 가십시오.
이
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
변수를 따라갈 수 있습니다. 이는 내가 콩을 사용하는 이유 중 하나입니다. 다른 하나는 저장을 비동기 적으로 수행 할 수 있으므로 더 빠를 것입니다.
참고 :이 아닌 복제 데이터베이스가있을 때 어떤 경우에 번호 생성에만 작동합니다. 그러나이 함수를 추상화하면 프로파일의 번호를 중앙 숫자 생성기 또는 다른 메커니즘으로 호출하여 대체 할 수 있습니다. 양식을 다시 변경하지 않아도됩니다.
프로필 문서는 HTTP 작업에 의해 캐시되므로주의해야합니다. 따라서 프로필 문서에서 값을 읽을 때 문제가 발생할 가능성이 큽니다. –