1

@NameLookUp 式を使用して、検索キーを指定してインターネット アドレスを取得していますが、正常に動作していますが、インターネット アドレスだけでなく、FirstName や LastName などの他のプロパティも取得したいと考えています。これは、検索文字列を指定して @Namelookup インターネットアドレスに使用している式です。

Vector vec=m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");

//username は文字列変数 (検索基準)

数式を 1 回だけ評価して、複数のプロパティ (firstName と lastName と InternetAddress など) を取得する方法を教えてください。@Namelookup を使用して実行できない場合、他の方法はありますか..?

4

3 に答える 3

1

これは、evaluate() を使用して Formula を呼び出すことが適切でない場合の典型的な例です。あなたがしたいことは、NotesDocument クラスを取得し、そこから値を読み取ることです。

このようなもの (免責事項、私は Java 開発者ではありません):

// Open Domino Directory on specified server
Database db = session.getDatabase("YourServer/Domain", "names.nsf");
// Get a view with user name is sorted first column
View view = db.getView("($Users)");
// Get the person document for specified user
Document doc = view.getDocumentByKey(userName, true);
if (doc != null) {
   // Get text values from Notes document
   String emailAddress = doc.getItemValueString("InternetAddress");
   String officePhone = doc.getItemValueString("OfficeNumber");
   String officeAddress = doc.getItemValueString("OfficeStreetAddress");
}

これは、evaluate() を使用した複数のルックアップよりも高速であると思います。また、完全なエラー処理と、すべてがネイティブ コードであるという追加の利点もあります。

于 2014-06-03T17:12:32.553 に答える
1

@NameLookup は、呼び出しごとに 1 つの項目の値のみを返します。

目標が Evaluate ステートメントを 1 つだけ持つことであると仮定すると、呼び出しを連鎖させて、特定の順序で値の配列を返すことができます。

Vector vec=m_session.evaluate("FirstName := @NameLookup([NoUpdate];\""+ userName + "\"; \"FirstName\"); LastName:= @NameLookup([NoUpdate];\""+ userName + "\"; \"LastName\"); InternetAddress :=@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\"); FirstName:LastName:InternetAddress");

またはおそらく:

String firstName = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"FirstName\")");
String lastName = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"LastName\")");
String internetAddress = m_session.evaluate("@NameLookup([NoUpdate];\""+ userName + "\"; \"InternetAddress\")");

次に、これら 3 つの文字列を任意の順序でベクターに追加します。

于 2014-06-03T10:59:08.530 に答える
0

もう 1 つの方法は、DirectoryNavigator クラスを使用することです。Notes/Domino 8.5 から (おそらくそれ以前から) 利用可能になっていると思います。DirectoryNavigator は @NameLookup と同じコア ロジックの一部を使用するため、うまく機能するはずです。

ここにいくつかのサンプルコードがあります。この正確なコードをテストしたことはありませんが、同様のルックアップを行う製品コードから適応させました。

    String firstName = null;
    String lastName = null;
    String inetAddress = null;

    Vector<String> lookupItems = new Vector<String>();
    lookupItems.addElement("FirstName");
    lookupItems.addElement("LastName");
    lookupItems.addElement("InternetAddress");

    Vector<String> vName = new Vector<String>();
    vName.addElement(userName);

    Directory dir = session.getDirectory();
    DirectoryNavigator dirNav = dir.lookupNames("($Users)", vName, lookupItems, true);
    if( dirNav != null && dirNav.getCurrentMatches() != 0 ) {

        // Digest the results of the lookup

        Vector<String> value = null;
        value = dirNav.getFirstItemValue();
        firstName = value.elementAt(0);

        value = dirNav.getNextItemValue();
        lastName = value.elementAt(0);

        value = dirNav.getNextItemValue();
        inetAddress = value.elementAt(0);
    }
于 2014-06-04T21:30:11.340 に答える