作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个链接到数千个项目的组件(在这种情况下,所有其他项目都是组件)。是否有一种简单/快速的方法来删除组件并删除所有链接?
我目前正在使用 Tridion 5.3,并通过 TOM API 以编程方式执行此操作。对于链接到 10000 个其他组件的一个组件,这需要大约 7 个小时。我还有很多事情要做!
我正在从 R5.3 迁移到 2011,因此可以将其用于任务。
我正在使用的代码如下...
static void Main(string[] args)
{
var componentIDToRemove = "tcm:4-123456";
var linkedComponentIDs = System.IO.File.ReadAllLines("C:\\...\\whereused.txt"); // ids of the components linked to tcm:4-123456
TDS.TDSE tdse = new TDS.TDSE();
foreach (var linkedComponentID in linkedComponentIDs)
{
TDS.Component component = null;
TDS.ItemFieldValues itemFieldValues = null;
try
{
component = (TDS.Component)tdse.GetObject(linkedComponentID, TDSDefines.EnumOpenMode.OpenModeView);
itemFieldValues = component.MetadataFields["myfield"].value;
var itemFieldValuesCount = itemFieldValues.Count;
for (var i = itemFieldValuesCount; i > 0; i--)
{
if (itemFieldValues[i].ID == componentIDToRemove)
{
component.CheckOut();
itemFieldValues.Remove(i);
component.Save();
component.CheckIn();
}
}
}
finally
{
// release the TDS objects from memory
ReleaseObject(component);
ReleaseObject(itemFieldValues);
}
}
}
public static void ReleaseObject(object o)
{
try
{
if (o != null)
{
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(o);
}
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
最佳答案
通过 TOM 使用脚本是最好的方法。 Tridion 2011 中的核心服务 API 可能快不了多少。
根据我的经验,以下是在 .NET 中通过 Interop 使用 TOM 时的最佳实践。
// do this
var items = folder.GetItems(16);
foreach(var item in items)
{
// ...
}
if(items != null)
{
Marshal.FinalReleaseComObject(items);
}
// instead of this
foreach(var item in folder.GetItems(16))
{
// ...
}
关于tridion - 删除链接到许多项目的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721630/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!