1

いくつかの事務処理を評価するために割り当てられた評価者の名前を格納するために単一のフィールドを使用する構成ドキュメントがあります。LotusScript では、これらの NotesNames を短縮名にメッセージして、あまり論争することなくリストを作成することができました。NotesName の配列はコンボボックスで使用され、ユーザーが評価者名を選択できるようにします。

Function getEvaluatorSelections As Variant
    Dim evaluatorArray As Variant
    ReDim evaluatorSelections (0) As String
    Dim count As Integer
    Dim evalName As NotesName
    count = 0
    evaluatorArray = DetermineMultiValueKeyword ("EVALUATORS")
    ForAll entries In evaluatorArray
        ReDim Preserve evaluatorSelections (count)
        Set evalName = New NotesName ( entries )
        evaluatorSelections (count) = evalName.Abbreviated
        count = count + 1
    End ForAll

    If count = 0 Then
        getEvaluatorSelections = username
    Else
        getEvaluatorSelections = evaluatorSelections
    End If  
End Function

XPages で同じことをしようとしたとき、Vector から始めて、SSJS の書き方をよく理解していなかったため、行き詰まってしまいました。

var thisdb = session.getCurrentDatabase();
var dbProfileView = thisdb.getView("dbprofile");
var evaluatorDoc = dbProfileView.getDocumentByKey("EVALUATORS");
var evaluatorVector:Vector = evaluatorDoc.getItemValue("Value");
return evaluatorVector.toArray();

これで完全な識別名が返されます。これで十分ですが、クライアントが見たいと思っているものではないことは確かです。

Vector 値を配列に入れて省略名を取得しようとしましたが、以下のコードのバリエーションでエラー 500 が発生し続けました。

var thisdb = session.getCurrentDatabase();
var dbProfileView = thisdb.getView("dbprofile");
var evaluatorDoc = dbProfileView.getDocumentByKey("EVALUATORS");
var evaluatorVector:Vector = evaluatorDoc.getItemValue("Value");
var evaluatorArray = new Array (evaluatorVector.toArray());
var returnArray = new Array(); 
var evalNames:NotesName;

for(var i=1;i<evaluatorArray.length;i++){
    evalNames = New NotesName ( evaluatorArray[i] );
    returnArray[i] = evalNames.getAbbreviated();
}
return returnArray();

LotusScript にあるものを SSJS に複製するにはどうすればよいですか? それとも、完全に間違ったアプローチをとったのでしょうか?

4

3 に答える 3

1

この質問は少し古いことは知っていますが、誰かが解決策の恩恵を受けることができると思います. 質問から、SSJS を使用して Common Names を返したいと思います。

1 つの方法は、リスト (evaluatorVector) をループしてから、返された値を配列に格納する前に、各名前を共通名に変換することです。

以下の解決策:

var evaluatorVector = evaluatorDoc.getItemValue("Value");
var returnArray = []; 
for(var i = 1; i < evaluatorArray.length; i++){
  if(evaluatorVector != null){
      returnArray.push(@Name('[CN]', evaluatorVector[i]));
  }
}
print(returnArray); //list of common names
于 2016-11-01T11:28:46.083 に答える
0

複数の問題があったことがわかりました。

Vector の値の配列へのプッシュが正しく行われませんでした。次から切り替えます。

var evaluatorArray = new Array (evaluatorVector.toArray());

2 行に:

var evaluatorArray = new Array ();
evaluatorArray = evaluatorVector.toArray();

次に、New NotesName の代わりに session.createName を使用する必要がありました。最後に、return は配列全体を送信する必要があります。

//get database
var thisdb = session.getCurrentDatabase();
//get view
var dbProfileView = thisdb.getView("dbprofile");
//getDocumentByKey ("EVALUATORS")
var evaluatorDoc = dbProfileView.getDocumentByKey("EVALUATORS");
//getItemValue to get all values from the Value field as a Vector
var evaluatorVector:Vector = evaluatorDoc.getItemValue("Value");
var evaluatorArray = new Array ();
evaluatorArray = evaluatorVector.toArray();
var returnArray = new Array(); 
var evalNames:NotesName;

for(var i=0;i<evaluatorArray.length;i++){
    evalNames = session.createName ( evaluatorArray[i] );
    returnArray[i] = evalNames.getAbbreviated();
}
return returnArray;

これはクリーンアップして最適化できると確信していますが、機能します。

于 2013-07-26T19:30:28.730 に答える