Quantcast
Channel: Yet Another Tridion Blog
Viewing all articles
Browse latest Browse all 215

How to Create a Folder Structure with the Core Service?

$
0
0
This topic has been asked recently on StackOverflow. The question was how to create a Folder (or actually a series of nested Folders) like /aaa/bbb/ccc/ddd using the Core Service in Tridion 2011SP1?

The answer is you have to create each individual Folder as a sub-folder of an existing parent. This means the approach is very well suited to be handled with a recursive call.

I created a method called GetOrCreate(path) that checks if the path exists. If it does, it returns the FolderData object. Otherwise, it splits the path into a parent path and a new folder name and applies recursion on the parent path. On the way out of the recursion, the new folders are created as children of the (by now) existing parents.

privateFolderDataGetOrCreateFolder(string folderPath, SessionAwareCoreServiceClient client)
{
    ReadOptions readOptions = newReadOptions();

    if (client.IsExistingObject(folderPath))
    {
        return client.Read(folderPath, readOptions) asFolderData;
    }
    else
    {
        int lastSlashIdx = folderPath.LastIndexOf("/");
        string newFolder = folderPath.Substring(lastSlashIdx + 1);
        string parentFolder = folderPath.Substring(0, lastSlashIdx);
        FolderData parentFolderData = GetOrCreateFolder(parentFolder, client);
        FolderData newFolderData = client.GetDefaultData(ItemType.Folder, parentFolderData.Id) asFolderData;
        newFolderData.Title = newFolder;

        return client.Save(newFolderData, readOptions) asFolderData;
    }
}

Note: the method does not validate the folderPath. Rather, it expects it to be syntactically correct and its stem to represent a valid and existing Publication WebDAV URL.

Call this method using a construct like this:

    FolderData folderData = GetOrCreateFolder(
        "/webdav/020 Content/Building Blocks/aaa/bbb/ccc",
        new SessionAwareCoreServiceClient());

You cal also use a CoreServiceSession, as described in my earlier post.

Viewing all articles
Browse latest Browse all 215

Trending Articles