我正在使用C#代码和Tridion(CMS)类从Tridion获取数据,下面是从Tridion获取所有发布列表的代码.
protected void btnPublishPublicationList_Click(object sender, EventArgs e)
{
try
{
PublicationBL pubBL = new PublicationBL();
TridionCollection<Publication> pubAllList = pubBL.getAllPublicationList();
List<PublicationsBO> pubBos = new List<PublicationsBO>();
foreach (Publication pub in pubAllList)
{
if ((pub.Title.StartsWith("07"))||(pub.Title.StartsWith("08")))
{
PublicationsBO pubBO = new PublicationsBO();
pubBO.publicationID = pub.ID;
pubBO.publicationName = pub.Title;
pubBos.Add(pubBO);
}
}
pubBL.createPublicationListXML(pubBos);
}
catch (Exception ex)
{
log.Error(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
在按钮单击上面的代码中,我使用.net代码并使用Tridion类获取所有发布列表如下:
TridionCollection<Publication> pubAllList = pubBL.getAllPublicationList();
Run Code Online (Sandbox Code Playgroud)
我从Tridion中快速得到了我的所有出版物列表,但是当我按照下面的方式进行foreach循环时,我的进程被卡住了,这需要很多时间来完成.
foreach (Publication pub in pubAllList)
{
if ((pub.Title.StartsWith("07"))||(pub.Title.StartsWith("08")))
{
PublicationsBO pubBO = new PublicationsBO();
pubBO.publicationID = pub.ID;
pubBO.publicationName = pub.Title;
pubBos.Add(pubBO);
}
}
Run Code Online (Sandbox Code Playgroud)
经过调试后,我发现当调试器出现时需要foreach (Publication pub in pubAllList)花费很多时间.我认为在制作Publication类对象时需要时间,而且它是Tridion类.
请建议任何其他方式来执行此操作或建议上述代码中的错误.
谢谢.
这确实是因为Tridion的懒惰装载.如果您只需要一份出版物ID和标题列表,我建议您使用:
TDSE tdse = new TDSEClass():
XmlDocument publicationList = new XmlDocument();
publicationList.LoadXml(tdse.GetListPublications(ListColumnFilter.XMLListIDAndTitle));
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个XML文档,其中包含所有发布的列表(/ tcm:ListPublications/tcm:Item),每个Item将包含Title和ID属性.
如果您需要更多详细信息而不仅仅是ID和标题,那么您必须单独加载每个发布,您可以使用ID属性tdse.GetObject()来完成.
希望这可以帮助.ñ