0

最初の3列の値を取得していますが、最後の列の値は取得していません。組織列の値を取得できるように、リストを文字列に変換するにはどうすればよいですか?

これは私のコードです:

String appname = "abc";
String path = "//home/exportfile//";
String filename = path+"ApplicationExport-"+appname+".txt";
String ret = "false";

        QueryOptions ops = new QueryOptions();
    Filter [] filters = new Filter[1];
    filters[0] = Filter.eq("application.name", appname);
    ops.add(filters);

    List props = new ArrayList();
    props.add("identity.name");

    //Do search
    Iterator it = context.search(Link.class, ops, props);

    //Build file and export header row
    BufferedWriter out = new BufferedWriter(new FileWriter(filename));
    out.write("IdentityName,UserName,WorkforceID,Organization");
    out.newLine();          

    //Iterate Search Results
    if (it!=null)
    {                               
            while ( it.hasNext() ) {

                    //Get link and create object
                    Object [] record = it.next();
                    String identityName = (String) record[0];
                    Identity user = (Identity) context.getObject(Identity.class, identityName);

                    //Get Identity attributes for export
                    String workforceid = (String) user.getAttribute("workforceID");                 

                    //Get application attributes for export
                    String userid="";

                    List links = user.getLinks();
                    if (links!=null)
                    {
                            Iterator lit = links.iterator();
                            while (lit.hasNext())
                            {
                                    Link l = lit.next();
                                    String lname = l.getApplicationName();
                                    if (lname.equalsIgnoreCase(appname))
                                    {
                                              userid = (String) l.getAttribute("User Name");
                                              List organizations = l.getAttribute("Organization");

                                              StringBuilder sb = new StringBuilder();
                                              String listItemsSeparator = ","; // this you can change to anything you want, it separates items from list

                                                                                                            for (Object organization : organizations)
                                                                                                                    {
                                                                                                                            sb.append(organization.toString());
                                                                                                                            sb.append(listItemsSeparator);
                                                                                                                    }

                                                                                                                    org = sb.toString().trim();

                                    }
                            }
                    }                   

                    //Output file
                    out.write(identityName+","+userid+","+workforceid+","+org);                             
                    out.newLine();                                                                          
                    out.flush();
            }

                     ret="true";
    }

    //Close file and return
    out.close();
    return ret;

このコードは、Organization列の値にVoidを書き込みます。どうすればこれを修正できますか?

4

3 に答える 3

1

アプリで何が起こっているのか、または組織のリストを取得している理由について、実際にはあまり多くの情報を提供していません。しかし、これを試してください:

out.write(identityName+","+userid+","+workforceid+","+(String)orgList.get(0));   

また、リストはパラメータ化されていないため、リストに保存されているオブジェクトのタイプがわかりません。

于 2012-08-02T18:53:59.663 に答える
0

リスト内のオブジェクトのデフォルトのtoStringメソッドをオーバーライドする必要があります。リストでtoStringを呼び出すと、リスト内のすべてのオブジェクトのtoStringメソッドが呼び出されます。リストをループして、各値を出力することもできます。

于 2012-08-02T18:52:21.117 に答える
0

編集:あなたのコードは本当に厄介ですが、私はあなたが何を求めているのか知っていると思います:

    List links = user.getLinks();
    if (links != null) {
        Iterator lit = links.iterator();
        while (lit.hasNext()) {
            Link l = lit.next();
            String lname = l.getApplicationName();
            if (lname.equalsIgnoreCase(appname)) {
                userid = (String) l.getAttribute("User Name");
                List organizations = l.getAttribute("Organization");

                StringBuilder sb = new StringBuilder();
                String listItemsSeparator = " "; // this you can change to anything you want, it separates items from list

                //iterating over list, to convert it to single String 
                for (Object organization : organizations) {
                    sb.append(organization.toString());
                    sb.append(listItemsSeparator);
                }

                orgList = sb.toString().trim();

            }
        }
    }

edit2:

while (it.hasNext()) {

    //Get link and create object
    Object [] record = it.next();
    String identityName = (String) record[0];
    Identity user = (Identity) context.getObject(Identity.class, identityName);

    //Get Identity attributes for export
    String workforceid = (String) user.getAttribute("workforceID");

    //Get application attributes for export
    String userid="";

    List links = user.getLinks();
    if (links!=null)
    {
        Iterator lit = links.iterator();
        while (lit.hasNext())
        {
            Link l = lit.next();
            String lname = l.getApplicationName();
            if (lname.equalsIgnoreCase(appname))
            {
                userid = (String) l.getAttribute("User Name");
                List orgList = l.getAttribute("Organization");
                if(organization < orgList.size()) {
                    String singleOrganization = orgList.get(organization);
                    organization++;


                    //Output file
                    out.write(identityName+","+userid+","+workforceid+","+orgList);
                    out.newLine();
                    out.flush();

                }

            }
        }
    }
于 2012-08-02T18:56:05.580 に答える