2

我需要开发一个应用程序来提取 Ektron 工作区的内容选项卡中的所有内容,并且我还必须保留文件夹的树结构(分类、集合、表单等)。当我单击内容时,我需要获取内容ID 也在后面的代码中。我需要在一个函数中完成所有这些。

我在工作区中使用内容块小部件的概念尝试了这个要求。当我们拖动该小部件并对其进行编辑时,会弹出一个窗口,并以树状结构显示工作区的文件夹。但是当我创建一个 aspx 页面时,将相同代码和我浏览该页面我没有得到所有内容的树结构。只有主选项卡(文件夹、分类和搜索)是可见的。然后我在 aspx 页面中拖动用户控件。但它也不起作用。

那么我将如何解决上述问题。

我可以使用 API 代码从根工作区中提取树结构中的所有内容吗?那么任何人都可以提供 API 代码来解决吗?

请任何人回复!

4

2 回答 2

0

假设您使用的是 8.6,请从这里开始: http ://reference.ektron.com/developer/framework/content/contentmanager/getlist.aspx

于 2013-03-18T17:03:08.893 回答
0

更新:

我想我第一次误读了你的问题。请允许我稍微扩展一下我的答案。我对 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");
于 2013-11-05T03:41:11.693 回答