如何使用Core Service在SDL Tridion 2011 SP1中创建文件夹结构

Pat*_*tan 6 c# tridion

我在Tridion 2011上使用Core Service.我想创建一个文件夹结构,然后在该结构中创建一个组件.

示例:文件夹结构的路径:/ ABCD/DEFG/aaaaa

如果该文件夹存在,我们不需要创建文件夹.如果它不存在,我们必须创建它并在其中创建组件.

我知道如何在具有URI的文件夹中创建组件.

Mih*_*riu 6

以下是我需要使用SDL Tridion的CoreService获取或创建文件夹时使用的代码.这是一个简单的递归方法,用于检查当前文件夹是否存在.如果它不存在,则进入GetOrCreate父文件夹,依此类推,直到找到现有路径.在离开递归的过程中,它只是创建相对于其直接父级的新文件夹.

注意:此方法不检查输入folderPath.相反,它假定它代表一个有效的路径.

private FolderData GetOrCreateFolder(string folderPath, SessionAwareCoreServiceClient client)
{
    ReadOptions readOptions = new ReadOptions();

    if (client.IsExistingObject(folderPath))
    {
        return client.Read(folderPath, readOptions) as FolderData;
    }
    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) as FolderData;
        newFolderData.Title = newFolder;

        return client.Save(newFolderData, readOptions) as FolderData;
    }
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*aer 5

我会使用IsExistingObject - 传入WebDAV URL - 来查看文件夹是否已经存在.如果返回false,则可以继续创建文件夹.

编辑:这是一些快速伪代码......

string parentFolderId = @"/webdav/MyPublication/Building%20Blocks";

var client = GetCoreServiceClient();

if (!client.IsExistingObject(parentFolderId + "/AAA"))
{
   var folder = client.GetDefaultData(2, parentFolderId);
   folder.Title = "AAA";
   client.Save(folder);
   // Create the other folders and components here
}
Run Code Online (Sandbox Code Playgroud)