如何在 Tridion 组件上设置 IsPublishedTo 状态?

2023-12-11

从另一个环境恢复 Tridion CMS 数据库后,我们无法从代理取消发布组件。如果我们发布到 Broker,那么我们可以取消发布。我们希望将 IsPublishedTo 状态设置为新环境中可用的发布目标。

TOM API 有一个 SetPublishedTo 方法可用于页面和组件模板,但不可用于组件。

如何设置组件的 PublishedStatus?是否可以使用 UpdateXML 或者我们需要执行数据库黑魔法?


我在命令行工具中使用以下基于 C# 的代码,在 SDL Tridion 2009 环境切换后切换所有项目的发布状态(您使用的是什么版本?):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tridion.ContentManager.Interop.TDS;
using Tridion.ContentManager.Interop.TDSDefines;
using System.Xml;

namespace SetAllItemsAsUnpublished
{
    /// <summary>
    /// A command line script that can enable/disable users
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {

            TDSE tdse = new TDSE();
            User currentUser = tdse.User;
            ListRowFilter listRowFilter = tdse.CreateListRowFilter();
            String xpath = "/tcm:ListPublishItems/*/*[local-name()='Page' or local-name()='Component']";
            listRowFilter.SetCondition("Recursive", true);
            listRowFilter.SetCondition("OnlyPublishedPages", true);
            listRowFilter.SetCondition("OnlyPublishedCPs", true);


            //listRowFilter.SetCondition("ItemType", ItemType.ItemTypePage);

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
            nsmgr.AddNamespace("tcm", "http://www.tridion.com/ContentManager/5.0");

            //Check that the user running the script is an Administrator
            if (currentUser.privileges == TDSPrivileges.TdsPrivilegeSystemAdministrator)
            {
                Publications publications = tdse.GetPublications();
                Console.WriteLine("There are " + publications.Count + " to be processed");
                int i = 0;
                foreach (Publication publication in tdse.GetPublications())
                {
                    ++i;
                    Console.WriteLine(" - Processing " + publication.Title + "(" + i + " of " + publications.Count + ")");
                    foreach( PublicationTarget target in tdse.GetPublicationTargets()){
                        Console.Write("     checking target: " + target.Title);
                        XmlDocument publishedItemsXml = new XmlDocument();
                        try
                        {
                            publishedItemsXml.LoadXml(publication.GetListPublishItems(target.ID, false, false, ListColumnFilter.XMLListID, listRowFilter));
                            foreach (XmlElement publishedItemNode in publishedItemsXml.SelectNodes(xpath, nsmgr))
                            {
                                String uri = publishedItemNode.Attributes["ID"].Value;
                                Console.Write(".");
                                if (publishedItemNode.LocalName == "Page")
                                {
                                    Page page = (Page)tdse.GetObject(uri, EnumOpenMode.OpenModeView, publication, XMLReadFilter.XMLReadAll);
                                    page.SetPublishedTo(target, false, currentUser);
                                    if (page.Info.IsCheckedOut)
                                    {
                                        page.CheckIn(true);
                                    }
                                }
                                else
                                {
                                    foreach (XmlElement ctRenderNode in publishedItemNode.SelectNodes("tcm:RenderWith", nsmgr))
                                    {
                                        String uriCT = ctRenderNode.Attributes["ID"].Value;
                                        ComponentTemplate ct = (ComponentTemplate)tdse.GetObject(uriCT, EnumOpenMode.OpenModeView, publication, XMLReadFilter.XMLReadAll);
                                        ct.SetPublishedTo(uri, target, false, currentUser);
                                        if (ct.Info.IsCheckedOut)
                                        {
                                            ct.CheckIn(true);
                                        }
                                    }                                
                                }
                            }
                            Console.WriteLine();
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
            }
            else
            {
                //Warn when there is a non-admin user running the script
                Console.WriteLine("You must be an SDL Tridion CMS Administrator to run this application");
            }
            Console.WriteLine();
            Console.WriteLine("Done! Hit ENTER key to close");
            Console.ReadLine();
        }
    }
}

因此,基本上将 CT 设置为“未发布”应该可以满足您的需要,因为该组件在技术上并未发布,它是基于该 CT 的组件演示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tridion 组件上设置 IsPublishedTo 状态? 的相关文章

随机推荐

  • 创建 Func 以返回引用类型和值类型

    我有一个方法返回一个Func由如下表达式构建 var expr Expression Property Expressions Expression Constant new Foo Name Hans Age 3 typeof Foo A
  • C++ __COUNTER__ 定义

    我的计算机上安装了两个版本的 C 编译器 其中一位认识到 COUNTER 宏而另一个则没有 在做了一些研究以使程序在两者中编译之后 我还没有遇到宏定义 COUNTER 这是编译器完成的一些特殊宏还是我可以复制其定义 COUNTER 进入我的
  • 访问 JavaScript 对象变量属性 [重复]

    这个问题在这里已经有答案了 可能的重复 如何从 JavaScript 中的变量值创建对象属性 如何访问像这样存储在变量中的属性名称 var obj obj foo bar var propName foo I want something
  • 在等待结果时禁用 HTML 按钮

    当我单击 HTML 表单上的提交按钮时 将调用与该按钮相关的函数并执行其工作 完成工作后会发送邮件通知 这会耗费太多时间 之后 确认消息将显示在同一 HTML 页面上 不使用 Ajax 即刷新页面 我想避免让用户在发送邮件的等待期间混乱地多
  • 部署到 Google 计算引擎失败:检索 App Engine 服务帐户时出错

    After 我删除了一些值 不记得是哪个 在我的项目配置中 在开发者控制台 我无法将应用程序部署到计算引擎实例 我已经使用相同的配置成功部署了相同的代码数十次 但在删除开发人员控制台中的一些值或进行了一些我认为较小的其他调整后 使用 Mav
  • XPath 获取两个标题之间的标记

    我正在尝试编写一个小应用程序来从维基百科页面中提取内容 当我第一次想到是否可以时 我认为我可以只使用 XPath 来定位包含内容的 div 但在研究了 Wikipedia 如何构建他们的文章后 我很快发现这并不是那么容易 当我获取页面时分离
  • JavaScript 返回奇怪的值

    我正在测试一个函数 看看当它的参数是时会发生什么null并决定添加一个 else 语句 令我惊讶的是 它没有记录我传递的参数 而是完全记录其他内容 也许有人可以阐明这一点 这是代码 function testing o if o retur
  • 将预定义常量定义为什么

    我有一个数据库类 它自动建立与数据库的连接并执行一些基本的输入过滤等操作 我正在考虑设置一些预定义的常量来调整类方法的行为 我应该将常量的值设置为什么 由于这些值永远不会被直接引用或比较 而是仅在常量名称的上下文中 所以该值是否重要 我遇到
  • 导入错误:没有名为flask_mail的模块

    from flask mail import Mail Message from flask import Flask 我正在尝试邮寄 但发生导入错误 有两个同名的包 该项目在 GitHub 和PyPI uses flask mail作为包
  • 如何捕获 Fabric 中的身份验证错误并重试?

    我有两个用户名和相应的密码用于管理我的服务器 有没有办法让我的 fab 脚本 模块使用一个 如果第一个失败则使用第二个 而不必维护完整的凭据列表每个主机甚至一组主机 我在文档中看不到围绕 run 或类似的尝试 除外的方法 run和其他命令引
  • 选择不存在 Hibernate OneToOne 关联的实体

    我有两个类 它们之间具有双向 OneToOne 映射 Class A OneToOne fetch FetchType Lazy mappedBy a private B b Class B OneToOne fetch FetchType
  • 如何获取带有小数点和 2 位小数的文件夹大小(以 GB 为单位)?

    通过我的代码 我得到了以 GB 为单位的文件夹大小 没有小数位 但我需要 GB 格式 有小数点和小数点后 2 位 echo off for F tokens a IN dir C Users rinni abraham Desktop fr
  • SIFT openCV 的关键点数量?

    我使用以下代码提取并绘制图像中的 SIFT 关键点 但在我的代码中 我没有指定要提取多少个关键点 因此 这完全取决于图像有多少个关键点 我想要的是 我想指定图像中最多需要 20 个关键点 如果不存在 20 个关键点 则无需进一步处理 或者如
  • Haskell,当 A 类为 B 类提供足够的信息时生成 B 的实例

    在为集合 容器类型编写类时 顺便说一句 如果我重新发明轮子 则将我指向现有类型 以提供用于从任何 集合 类型添加和删除元素的通用接口 class Eq c a Monoid c a gt Collection c a where empty
  • Bootstrap 模态弹出框在关闭时隐藏

    我有一个模式 当尝试运行时将激活弹出窗口进行验证 我为弹出窗口添加了一个超时 以便在 3 秒后隐藏 但是 如果您关闭模式 超时功能似乎会停止 弹出窗口不会隐藏 甚至直接告诉它隐藏也不起作用 模态 HTML div class modal h
  • 当我声明与 lambda 中的变量同名的变量时,C# 会发疯

    我有以下代码 给定 a b 和 c 生成二次函数 Func
  • 事务无回滚 - Spring Boot 2.0

    我在使用 Spring Boot 2 0 0 时遇到问题 当我抛出 RuntimeException 时 它不会回滚事务 我使用的是具有相同设置的 Spring Boot 1 5 9 并且它有效 它刚刚迁移到 Spring Boot 2 并
  • 如何在超时后取消任务等待

    我使用此方法以编程方式实例化 Web 浏览器 导航到 URL 并在文档完成时返回结果 我怎样才能阻止Task并有GetFinalUrl return null如果文档加载时间超过 5 秒 我见过很多使用的例子TaskFactory但我无法将
  • 删除文本的最佳方法

    到目前为止 对于 iPhone 上删除文本的最佳解决方案是什么 我听说过多种解决方案 带有三20的东西 图像作为子视图 UIWebView还有一些带有NSAttributedString 但我没有找到有效的例子 在iOS 6中我们可以使用
  • 如何在 Tridion 组件上设置 IsPublishedTo 状态?

    从另一个环境恢复 Tridion CMS 数据库后 我们无法从代理取消发布组件 如果我们发布到 Broker 那么我们可以取消发布 我们希望将 IsPublishedTo 状态设置为新环境中可用的发布目标 TOM API 有一个 SetPu