更新:
我想我第一次误读了你的问题。请允许我稍微扩展一下我的答案。我对 Web 服务的原始回答假设您正在从某种“表示层”呈现内容树——不同的网站、控制台应用程序或 WPF/WinForms 应用程序等。
您可以通过以下方式获得递归文件夹结构:
private FolderData GetFolderWithChildren(long folderId)
{
var folderApi = new Ektron.Cms.API.Folder();
var folderData = folderApi.GetFolder(folderId);
// This next method is marked as obsolete in v9.0;
// a newer overload is available in v9.0, but I
// don't know if it's available in v8.0
folderData.ChildFolders = folderApi.GetChildFolders(folderId, true);
}
我对你到底想要完成什么感到有点困惑。如果您想以图形方式显示整个树结构,您是否尝试过从内容小部件的编辑视图中获取代码和标记并将其用于非编辑视图?
我必须说,您“我需要在一个函数中完成所有这些”的要求让我有点担心。工作区内容树可以很快变得非常大。如果您尝试加载所有文件夹、所有分类法和所有集合等。那么用户可能会等待很长时间才能加载页面,并且您可能会遇到超时问题。
-- 原始答案 --
Ektron v8.0 没有 3 层选项,这太糟糕了,因为这确实会让您的工作变得更轻松。在 v8.0 中,有一些 ASMX Web 服务可供您参考,包括:
- /workarea/webservices/content.asmx
- /workarea/webservices/webserviceapi/user/user.asmx
不止于此;浏览 /workarea/ 中的文件夹以查看可用的内容。
我已经有一段时间没有使用这些服务了,所以我有点生疏了......
假设您添加了对我上面列出的这两个服务的引用,并将它们命名为 ContentService 和 UserService。您要做的第一件事是设置身份验证标头。然后,您可以像旧的遗留 API 一样调用服务方法。
var contentApi = new ContentService.Content();
contentApi.AuthenticationHeaderValue = new ContentService.AuthenticationHeader();
contentApi.AuthenticationHeaderValue.Username = username;
contentApi.AuthenticationHeaderValue.Password = password;
contentApi.AuthenticationHeaderValue.Domain = domain;
var userApi = new UserService.User();
userApi.AuthenticationHeaderValue = new UserService.AuthenticationHeader();
userApi.AuthenticationHeaderValue.Username = username;
userApi.AuthenticationHeaderValue.Password = password;
userApi.AuthenticationHeaderValue.Domain = domain;
var ud = userApi.GetUserbyUsername("jimmy456");
long folderID = 85;
bool recursive = true;
ContentData[] folderContent = contentApi.GetChildContent(folderID, recursive, "content_id");