4

TOM.NET API を使用する TBB で、公開されているページのリストを取得したいと考えています。基本的には、サイトマップを作成しています。Tridion.ContentManager.CommunicationManagement.Page が公開されているかどうかを判断しようとしています。

IsPublishedプロパティやIsPublishedToメソッドはないようです。

追加できるフィルター条件はありますか? 例えば

pageFilter.Conditions["Published"] = "true";

コメントへの対応:

私は TOM.NET API を使用しており、公開されているページのリストを取得したいと考えています。基本的にはサイトマップを作成しています。

ページが BluePrint 階層内の特定のターゲットに公開されている場合、PublicationEngine.IsPublished メソッドは「true」を返しているようです。これは、予期された動作のようには見えません。

4

4 に答える 4

4

BluePrint に複数の発行物があるこのシナリオでは、現在のページに対して PublishEngine.GetPublishInfo() メソッドを使用して、発行元の発行物がそのメソッドから返された発行物に存在するかどうかを確認できます。

IList<RepositoryLocalObject> rlos = structuregroup.GetItems(pageFilter);
List<Page> pages = new List<Page>(rlos.Count);    
foreach (RepositoryLocalObject o in rlos)
{  
    Page p = (Page) o;
    bool isPublished = false;
    ICollection<PublishInfo> publishInfo = PublishEngine.GetPublishInfo(p);
    foreach (PublishInfo info in publishInfo)
    {
        if (info.Publication.Id.ItemId == p.Id.PublicationId)
        {
            isPublished = true;
        }
    }

    if(p != null && isPublished)
    {
        pages.Add(p);
    }
}

このメソッドには、発行元の現在の発行物が常に返されるというバグがあることに注意する必要があります。これは Hotfix CM_2009.1.74835 で修正されています。そうしないと、上記のコードが正しく機能しません。

于 2012-03-21T10:27:44.367 に答える
4

使用する必要がありますOrganizationalItemItemsFilter

var filter = new OrganizationalItemItemsFilter(session);
filter.BaseColumns = ListBaseColumns.Extended;
var structureGroup = (StructureGroup)session.GetObject("tcm:2-5-4");
var result = structureGroup.GetListItems(filter);

次のようなリストが返されます。

<tcm:ListItems Managed="68" ID="tcm:2-5-4" xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
      <tcm:Item ID="tcm:2-46-64" Title="p" Type="64" Modified="2012-03-19T16:21:10" IsNew="false" Icon="T64L0P0" IsPublished="false" Lock="0" IsShared="false" IsLocalized="false" Trustee="tcm:0-0-0" />
</tcm:ListItems>

のプロパティをチェックOrganizationalItemItemsFilterして、Recursive、またはIncludePathColumn

ただし、このアプローチには注意してください。どこかに公開されている場合にのみ通知されますが、期待する公開ターゲットには必要ありません。

于 2012-03-19T15:35:26.263 に答える
3

私はあなたの声明をよく理解していません.特定の出版物に公開されています. ページはパブリケーション内に存在し、1 つ以上のパブリケーション ターゲットにパブリッシュできます (ブルー プリントの場合、ページが存在するすべてのパブリケーションに対してこれを行うことができます)。

したがって、特定のページが公開されているかどうかを確認するには、少なくとも 1 つのターゲットに公開されているかどうかを確認する必要があります。これは、OrganizationalItemItemsFilter を使用して、リストで直接行うことができます。返されたリストには、公開されているかどうかに関係なく、アイテムごとに表示されます。

<tcm:Item ID="tcm:2-46-64" Title="p" Type="64" Modified="2012-03-19T16:21:10" IsNew="false" Icon="T64L0P0" IsPublished="false" Lock="0" IsShared="false" IsLocalized="false" Trustee="tcm:0-0-0" />

ここでは、ページ tcm:2-46-64 が公開されていないことがわかります。そのページの一意の ID をさらに調査すると、それが出版物 tcm:0-2-1 に存在することがわかります (出版物 ID は、アイテムの TCM URI の最初の番号です)。

属性 IsPublished の値が「true」の場合、これは、このページ (パブリケーション内) が少なくとも 1 つのターゲットに公開されていることを示します。

そのページが公開されているターゲットを見つけるには、PublishEngine.IsPublished メソッドを使用できます。最初のパラメーターとして指定する必要がある IdentifiableObject は、ページのものになります。共有 (BluePrinted)、ローカライズ、またはローカル アイテムについて話しているかどうかは問題ではありません。この場合、ページの TCM URI の出版物 ID は、どの出版物からページが出版されたかを示します。

3 番目のオーバーロード IsPublished(IdentifiableObject item, PublicationTarget publicationTarget, bool isPublishedInContext) を使用し、最後のパラメーターを true に設定する必要があることに注意してください。これにより、指定されたアイテムのみの発行ステータスが取得され、その (BluePrint) 親または子の発行ステータスは取得されません。

于 2012-03-20T12:12:55.420 に答える
3

フィルターで検索した後、PublishEngine.IsPublished メソッドの使用を試すことができます。

public static bool IsPublished(
    IdentifiableObject item,
    PublicationTarget publicationTarget
)

指定されたアイテムが指定された PublicationTarget で公開されているかどうかを返します。

于 2012-03-20T06:36:01.627 に答える