8

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

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

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

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

那么,我可以只使用这个 Managed="0" 作为标志来指示正在处理的列表不会显示我的其他列并且我可以退出处理吗​​?

4

4 回答 4

8

Managedvalue 表示可以在其中创建哪些项目OrganizationItem

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

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

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

于 2012-08-14T09:16:00.953 回答
7

不幸的是,CME 目前无法提供那种粒度级别来允许您在数据扩展器中判断特定 WCF API 调用来自何处。我们的 WCF API 还不是上下文感知的。将来可能会改变。

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

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

于 2012-08-29T09:55:39.383 回答
3

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

于 2012-08-13T18:42:16.040 回答
2

根据以前的经验和 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在那里。这对我来说很有意义,因为用户可以与树和列表视图中的列表项进行交互,而他们只能在下拉列表中选择它们。因此,检查参数中是否存在ALLOWED_ACTIONS可能columns是减少数据扩展器添加信息的位置数量的一种方法。

于 2012-08-13T18:37:35.733 回答