列表视图 XML 中的托管= "0"是什么意思?



我编写了一个数据扩展器类和编辑器扩展,当您浏览 CME(文件夹和结构组)中的列表时,它可以正确显示项目的几个附加列。我必须注册我的类来处理 GetList、GetListSearch、GetListUserFavorites 和 GetListCheckedOutItems 等命令。

我注意到的是,即使为 CME 中的下拉列表加载了模式列表,代码也会运行(例如在创建新组件时,您在下拉列表中获得模式列表)。 因此,即使在这种情况下不需要我的其他数据列,代码仍在执行,并且会减慢速度。

似乎是在这些情况下调用的 GetList 命令。因此,我不能只是根据命令跳过处理。因此,我开始查看类为列表接收的 XML,并注意到当为下拉列表运行代码时,XML 中有一个Managed="0"。例如:

  • 对于结构组列表:<tcm:ListItems Managed="64" ID="tcm:103-546-4">
  • 对于文件夹列表:<tcm:ListItems Managed="16" ID="tcm:103-411-2">
  • 但对于架构列表:<tcm:ListItems ID="tcm:0-103-1" Managed="0">
  • 对于显示类别关键字值的下拉列表:<tcm:ListItems Managed="0" ID="tcm:103-506-512">

那么,我是否可以仅使用此 Managed="0" 作为标志来指示正在处理的列表不会显示我的其他列,我可以退出处理?

Managed值表示可以在OrganizationItem中创建哪些项目:

  • 64 表示您可以创建页面
  • 16 表示您可以创建组件
  • 例如,10 意味着您可以创建文件夹 (2) + 架构 (8)
  • 518 - 文件夹 (2) + 结构组 (4) + 类别 (512)

对于非组织项目,值为 0。

值取决于项目本身(例如,不能在文件夹中创建页面),以及您对出版物和组织项目的安全设置

遗憾的是,

CME 目前无法提供这种粒度级别,以允许您在数据扩展器中告知特定 WCF API 调用的来源。我们的 WCF API 尚不具有上下文感知功能。将来可能会改变。

信任 Managed="0" 不是一个好主意。原因是模型列表是每个筛选器缓存的客户端。在当前设计中,筛选器具有与 CM 相关的数据,并且与触发请求的上下文无关。通常,客户端用户界面会尽可能重用缓存的模型数据。例如,可以在 CME 仪表板中使用相同的模型列表,并将下拉控件放置在某个项目视图中,但具有不同的 xml 列表定义:第一个列表在列表定义中定义的列比后者多。它们基本上是相同数据的不同视图。

因此,您可能需要为您的问题考虑不同的解决方案。现在。。。这些额外列背后的数据来自哪里?是Tridion CM还是第三方提供商?有时,Web 服务器缓存可能会提供一种可接受的方法来缩短响应时间。但这是你应该评估和决定的设计。

我认为如果您读取列表的 ID,并且只执行类型 2 和 4(分别为文件夹和结构组)的列表的代码,您将拥有更强大的解决方案。 但这对搜索视图等没有帮助。

根据以前的经验和 User978511 所说的内容,Managed 属性指示可以从该列表的上下文中创建的项目类型。

不幸的是,这意味着对于没有

足够权限创建项目的任何用户,Managed 属性很可能为 0。 例如,检查不允许创建页面或结构组的用户的结构组中的Managed。在这种情况下,它也可能是0的,这意味着它对您的情况毫无用处。

更新

您可以通过查看columns参数来更好地实现目标:

context.Parameters["columns"]

在我运行的一些测试中,我得到了不同的值,具体取决于我是否获得了主列表视图、树或下拉列表的列表。

543
 23
  7
这些

值是这些常量的位掩码(来自Constants.js):

/**
 * Defines the column filter.
 * Used to specify which attributes should be included in XML list data.
 * @enum
 */
Tridion.Constants.ColumnFilter =
{
    ID: 1,
    ID_AND_TITLE: 3,
    DEFAULT: 7,
    EXTENDED: 15,
    ALLOWED_ACTIONS: 16,
    VERSIONS: 32,
    INTERNALS: 64,
    URL: 128,
    XML_NAME: 256,
    CHECK_OUT_USER: 512,
    PUBTITLE_AND_ITEM_PATH: 1024
};

因此,从我有限的测试来看,下拉列表似乎请求DEFAULT列,而主列表视图和树都ALLOWED_ACTIONS。这对我来说很有意义,因为用户可以与树和列表视图中的列表项进行交互,而他们只能在下拉列表中选择它们。因此,检查 columns 参数中是否存在ALLOWED_ACTIONS可能是减少数据扩展器添加信息的位置数的一种方法。

最新更新