代码之家  ›  专栏  ›  技术社区  ›  Warner Soditus

列表视图XML中的Managed=“0”是什么意思?

  •  8
  • Warner Soditus  · 技术社区  · 14 年前

    我已经编写了一个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">
    • 但对于架构列表: <tcm:ListItems ID="tcm:0-103-1" Managed="0">
    • 对于显示类别关键字值的下拉列表: <tcm:ListItems Managed="0" ID="tcm:103-506-512">

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

    4 回复  |  直到 14 年前
        1
  •  8
  •   Andrey Marchuk    14 年前

    Managed 值表示可以在内部创建哪些项 OrganizationItem 以下为:

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

    非组织项目的值为0。

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

        2
  •  7
  •   lnaie    14 年前

    不幸的是,CME目前无法提供那种粒度级别,以允许您在数据扩展器中判断特定WCF API调用的来源。我们的WCF API还没有上下文感知。未来可能会发生变化。

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

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

        3
  •  3
  •   Chris Summers    14 年前

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

        4
  •  2
  •   Frank van Puffelen    14 年前

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

    不幸的是,这意味着 管理 对于没有足够权限创建项目的任何用户,属性很可能为0。例如,检查什么 管理 位于不允许创建页面或结构组的用户的结构组中。很可能是 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 在那里。这对我来说很有意义,因为用户gets可以与树和列表视图中的列表项交互,而他们只能在下拉列表中选择它们。因此,检查是否存在 允许的操作 在 列 参数可能是减少数据扩展程序添加信息的位置数量的一种方法。