2017-05-18 8 views
0

以下のコードを参照してください。私はアクティブなディレクトリを調べ、2つのフィールド "name"と "cn"を取得しています。これらを配列で連結し、ドロップダウンリストに割り当てたいと思います。すなわち、名前+ '' + cn。以下のコードは結果を間違って公開し、すべての名前とcnを個々の結果として表示しています。つまり、連結されていません。ラウンド配列のループと結果の連結Javascript

誰かに助言をして正しい方向に私を入れてもらえますか?

おかげで、 ジョージ

try 
{ 
    // Get LDAP Context 
    ctx = LdapServices.getLdapContext(); 

    //Specify the search scope 
    ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE); 

    var searchFilter = "(&(objectClass=group))"; 

    //Specify the Base for the search 
    var searchBase = "ou=Licensed Applications,ou=SCCM Apps,ou=Applications,ou=Groups,dc=XXX,dc=XX,dc=XX"; 

    //initialize counter to total the group members 
    var totalResults = 0; 

    //Specify the attributes to return 
    var returnedAtts=["name", "cn"]; 
    ctls.setReturningAttributes(returnedAtts); 

    //Search for objects using the filter 
    var answer = ctx.search(searchBase, searchFilter, ctls); 

    //Loop through the search results 
    while (answer.hasMoreElements()) 
    { 
     var sr = answer.next(); 

     var attrs = sr.getAttributes(); 
     if (attrs != null) 
     { 
      try 
      { 
       for (var ae = attrs.getAll();ae.hasMore();) 
       { 
        var attr = ae.next(); 
        var pos = attr.toString().indexOf(":",0); 
        var attributeName = attr.toString().substring(0,pos); 

        var name = ""; 
        var cn = "";      

        for (var e = attr.getAll();e.hasMore();totalResults++) 
        { 
          if(attributeName == "name") 
          { 
           name = e.next().replace('SCCM_',''); 
          } 

          if(attributeName == "cn") 
          { 
           cn = e.next(); 
          } 
        } 

        listItems.push(name + ' (' + cn + ')'); 
       } 
      } 
      catch (e) 
      { 
       log("Problem listing items: " + e); 
      } 
     } 
    } 
} 
catch (e) 
{ 
    log("Problem searching directory: " + e); 
} 
finally 
{ 
    // Close LDAP Context 
    ctx.close(); 
} 
+0

'listItems.push(名+は、 '( '+ CN +')')'非押すと-concatenated 'name'と' cn'を指定すると、あなたが私たちに示したコードの外にあります。なぜなら、これは明らかに適切な連結であるからです。 –

+0

はい、私は1つ以上のループに問題があると思います。しかし、私はどこを見ることができません。 –

答えて

0

私はあなたに、コードのようなJNDIを持っているために使用するものJavaScriptライブラリを知りませんが、ビューの純粋にLDAPポイントから:

属性は、マルチすることができ-valuedので、すべての属性値は、例えば、偶数(dnの可能な例外)値の単一の場合、配列に返される:

{ 
"dn":"cn=user,dc=example,dc=com", 
"name":["username"], 
"cn":["commonname"] 
} 

あなたのライブラリーは、JNDI、それができる行う方法のように動作している場合:

行の後:var attrs = sr.getAttributes();

if (attrs != null) { 
    try { 
    log ("name: " + attrs.get("name").get()); 
    log ("cn: " + attrs.get("cn").get()); 
    } catch (e) { 
    log ("Problem listing attributes from Global Catalog: " + e); 
    } 
} 
+0

ありがとうございます。答えとしてマーク。 –

+0

@GeorgeGeorgiouあなたが使用しているjavascriptライブラリ、またはそれを使用するコンテキストを教えてください。 – Esteban