folder.getSheets()返回null?

时间:2015-06-30 21:08:22

标签: smartsheet-api smartsheet-java-sdk-v1

我正在尝试遍历整个工作区并在树视图中列出每个元素,但是当我尝试在找到的文件夹中抓取工作表时,Folder类中的getSheets()方法始终返回null。我做错了吗?

    TreeItem<String> workspace = new TreeItem<>("Earls Workspace", workspaceIcon);
    workspace.setExpanded(true);

    try {
        Workspace earlsWorkspace = SmartsheetConnector.getInstance().getSmartsheet().workspaces().getWorkspace(*****);
        List<Sheet> sheets = earlsWorkspace.getSheets();
        List<Folder> folders = earlsWorkspace.getFolders();

        for (Folder folder : folders) {
            TreeItem<String> item = new TreeItem<>(folder.getName(), new ImageView(folderIcon));
            System.out.println("Folder: " + folder.getName());
            List<Sheet> folderSheets = folder.getSheets(); <- problem is here
            System.out.println(folderSheets.toArray());
            for (Sheet sheet : folderSheets) {
                TreeItem<String> subItem = new TreeItem<>(sheet.getName(), new ImageView(sheetIcon));
                item.getChildren().add(subItem);
            }

            workspace.getChildren().add(item);
        }

        for (Sheet sheet : sheets) {
            TreeItem<String> item = new TreeItem<>(sheet.getName(), new ImageView(sheetIcon));
            workspace.getChildren().add(item);
        }

        sheetExplorer.setRoot(workspace);
    } catch (SmartsheetException ex) {
        ex.printStackTrace();
    }

我故意阻止了工作区ID。

1 个答案:

答案 0 :(得分:1)

由于Java SDK模仿Smartsheet API,因此ID函数的GET工作区仅返回高级文件夹信息,并且不包括文件夹中的工作表,这就是它返回null的原因。有两种方法可以解决您的问题:

  1. 从工作区获取文件夹列表后,您可以按ID功能调用GET文件夹,这将返回文件夹中的工作表列表。

    Workspace earlsWorkspace = SmartsheetConnector.getInstance().getSmartsheet().workspaces().getWorkspace(*****);
    List<Folder> folders = earlsWorkspace.getFolders();
    
    for (Folder folder : folders) {
        List<Sheet> folderSheets = SmartsheetConnector.getInstance().getSmartsheet().folders().getFolder(folder.getId()).getSheets();
    
        for (Sheet sheet : folderSheets) {
            System.out.println(sheet.getName());
        }
    }
    
  2. 调用getHome()函数。这将返回所有Home对象的嵌套列表,包括工作表,工作空间和文件夹,以及可选的报表和/或模板,具体取决于您传入的EnumSet。您必须浏览工作区列表并找到您的工作区列表从那里,您可以遍历文件夹,并致电folder.getSheets()以获取文件夹中的工作表列表。

    Home home = SmartsheetConnector.getInstance().getSmartsheet().home().getHome(EnumSet.of(ObjectInclusion.TEMPLATES);
    
  3. 在SDK的下一个版本中,将有一个选项来指定是否要加载所有内容,包括工作区内的嵌套文件夹和嵌套工作表,这样您就可以轻松调用folder.getSheets(),就像你在做的那样,拿回一张床单。