2014-05-09 1 views
0

프로필 문서에 작동하지 않는 것은 행동의 코드가 실행 스크립트입니다 :이 코드는 모든 프로필 문서를 열되지Docuemt postopen 이벤트가 여기 프로필 문서에서 문서의 일련 번호를 저장하고 필요

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(); 
    } 

. 코드에 어떤 문제가 있습니까?

+2

프로필 문서는 HTTP 작업에 의해 캐시되므로주의해야합니다. 따라서 프로필 문서에서 값을 읽을 때 문제가 발생할 가능성이 큽니다. –

답변

1

"LastNumber"는 프로필 문서를 만드는 데 사용되는 양식의 이름입니까? 이 프로필 문서가 이미 존재합니까? 이 프로파일 문서에는 판독기 필드가 없습니다. 다음 행에 오류가 있습니다. var pdoc : NotesDocument = database.getProfileDocument ("LastNumber", "")? 또는 디버그하여 pdoc이 null인지 확인하십시오. 대신 pdoc.getItemValue ("lastNumber")의

[0] 당신은 내가이 필드에 숫자가 포함되어 있음을 가정 입력 된 결과 를 얻을 수 pdoc.getItemValueInteger ("lastNumber")를 사용할 수 있으며 그것을

를 증가 할

대신 inputText 필드를 사용하면 document1.setValue ("NumberField", lnm); 값을 직접 설정할 수 있습니다.

1

초당주의 사항을 제안합니다. 프로필 문서는 짐승이 될 수 있습니다. 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 변수를 따라갈 수 있습니다. 이는 내가 콩을 사용하는 이유 중 하나입니다. 다른 하나는 저장을 비동기 적으로 수행 할 수 있으므로 더 빠를 것입니다.

참고 :이 아닌 복제 데이터베이스가있을 때 어떤 경우에 번호 생성에만 작동합니다. 그러나이 함수를 추상화하면 프로파일의 번호를 중앙 숫자 생성기 또는 다른 메커니즘으로 호출하여 대체 할 수 있습니다. 양식을 다시 변경하지 않아도됩니다.