我在Tridion 2011上使用Core Service.我想创建一个文件夹结构,然后在该结构中创建一个组件.
示例:文件夹结构的路径:/ ABCD/DEFG/aaaaa
如果该文件夹存在,我们不需要创建文件夹.如果它不存在,我们必须创建它并在其中创建组件.
我知道如何在具有URI的文件夹中创建组件.
以下是我需要使用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)
我会使用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)