BluePrinted を含む特定のスキーマ (tcm:3-3-8) および特定の出版物 (tcm:0-3-1) に基づくすべてのコンポーネントを表示する CMS サーバー上にある .NET ページを作成したいと考えています。ローカライズされたアイテム。ただし、そのスキーマの「URL」フィールドの値が「http://www.google.com」である場合のみ。
これはかなり遅く、信頼性が低いため、検索サービスを使用せずにこれは可能ですか?
BluePrinted を含む特定のスキーマ (tcm:3-3-8) および特定の出版物 (tcm:0-3-1) に基づくすべてのコンポーネントを表示する CMS サーバー上にある .NET ページを作成したいと考えています。ローカライズされたアイテム。ただし、そのスキーマの「URL」フィールドの値が「http://www.google.com」である場合のみ。
これはかなり遅く、信頼性が低いため、検索サービスを使用せずにこれは可能ですか?
検索コレクションのインデックスが作成されていないため、検索が遅くなる可能性があります。
より適切で迅速な結果を得るには、定期的に検索コレクションのインデックスを作成する必要があります。
これは、個々のコンポーネントを開いてフィールドの値を確認するコストがかかるため、コストのかかる操作ですが、確かに実行可能です。
List<Component>
一致する場合はに追加します私はそれをテストする機会がありませんでしたが、このようなもの
Common common = new Common();
TDSE tdse = new TDSE();
ListRowFilter ComponentFilter = tdse.CreateListRowFilter();
Schema schema = (Schema)common.getObject("tcm:126-238630-8", ItemType.ItemTypeSchema);
ComponentFilter.SetCondition("ItemType", ItemType.ItemTypeComponent);
ComponentFilter.SetCondition("Recursive", true);
XDocument doc = common.ReadXML(schema.Info.GetListUsingItems(ListColumnFilter.XMLListID, ComponentFilter));
List<Component> MatchedComponents = new List<Component>();
XmlNamespaceManager NS = new XmlNamespaceManager(new NameTable());
NS.AddNamespace("tcm", "http://www.tridion.com/ContentManager/5.0");
NS.AddNamespace("Content", "uuid:4432F3C3-9F3E-45E4-AE31-408C5C46E2BF");
foreach (XElement component in doc.XPathSelectElements("/tcm:ListUsingItems/tcm:Item", NS))
{
Component comp = common.getComponent(component.Attribute("ID").Value);
XDocument compDoc = common.ReadXML(comp.GetXML(XMLReadFilter.XMLReadData));
foreach (XElement compNode in compDoc.XPathSelectElements("/tcm:Component/tcm:Data/tcm:Content/Content:Content/Content:feederUrl", NS))
{
MatchedComponents.Add(comp);
}
}