1

BluePrinted を含む特定のスキーマ (tcm:3-3-8) および特定の出版物 (tcm:0-3-1) に基づくすべてのコンポーネントを表示する CMS サーバー上にある .NET ページを作成したいと考えています。ローカライズされたアイテム。ただし、そのスキーマの「URL」フィールドの値が「http://www.google.com」である場合のみ。

これはかなり遅く、信頼性が低いため、検索サービスを使用せずにこれは可能ですか?

4

3 に答える 3

2

検索コレクションのインデックスが作成されていないため、検索が遅くなる可能性があります。

より適切で迅速な結果を得るには、定期的に検索コレクションのインデックスを作成する必要があります。

于 2012-12-05T18:13:56.113 に答える
1

これは、個々のコンポーネントを開いてフィールドの値を確認するコストがかかるため、コストのかかる操作ですが、確かに実行可能です。

  1. スキーマ オブジェクトを取得する
  2. このスキーマを使用するコンポーネントのリストを取得します (スキーマの WhereUsed で ItemType = component のフィルターを使用)
  3. 各コンポーネントを開き、フィールドの値を確認し、List<Component>一致する場合はに追加します
  4. 表示リスト (おそらく ASP.NET GridView を使用)
于 2012-12-05T16:33:19.320 に答える
0

私はそれをテストする機会がありませんでしたが、このようなもの

    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);
        }
    }
于 2013-01-07T10:11:12.173 に答える