1

動的コンポーネントプレゼンテーションとして公開されているマルチメディアコンポーネントのファイルのバイナリURLを取得しようとしています。

ブローカーデータベース内のBinariesテーブルにURLを表示できますが、次のコードのいずれかを使用してバイナリURLを取得できないようです。

SQLBinaryMetaHomeの使用:

using (var sqlBinMetaHome = new Com.Tridion.Broker.Binaries.Meta.SQLBinaryMetaHome())
{
    int componentItemId = int.Parse(queryStringId.Split('-')[1]);
    var binaryMeta = sqlBinMetaHome.FindByPrimaryKey(new TCDURI(publicationId, 16, componentItemId));

    if (binaryMeta != null)
    {
        VideoBinaryUrl = binaryMeta.GetURLPath();
    }
    else
    {
        Logger.Log.ErrorFormat("Failed ot load via SQL Binary Meta {0}", queryStringId);
    }
}                        

バイナリメタファクトリの使用:

using (var b = new BinaryMetaFactory())
{
    var binaryMeta = b.GetMeta(queryStringId);
    if (binaryMeta != null)
    {
        VideoBinaryUrl = binaryMeta.UrlPath;
    }
    else
    {
        Logger.Log.ErrorFormat("Failed to load binary meta {0}", queryStringId);
    }
}

ComponentMetaFactoryを使用してコンポーネントメタデータをロードできます。

バイナリメタを読み込めない理由について何かアイデアはありますか?私は正しい方向に進んでいますか?

ロブ

4

4 に答える 4

5

最初の例は、内部DLL(Tridion.ContentDelivery.Interop.dll)から(自動生成された)メソッドをインポートしているようです。それらを使用せず、Tridion.ContentDelivery名前空間()にあるものに固執してくださいTridion.ContentDelivery.dll

Content Delivery .NET APIの公式ドキュメントは、 CHM形式でSDL Tridion Worldにあります(リンクをクリックし、サイトにログインして、もう一度リンクをクリックしてください)。そのドキュメントから、次の例が出てきます。

//create a new BinaryMetaFactory instance:
BinaryMetaFactory binaryMetaFactory = new BinaryMetaFactory();
//find the metadata for the specified binary
BinaryMeta binaryMeta = binaryMetaFactory.GetBinaryMeta("tcm:1-123");
//print the path to the output stream:
if(binaryMeta!=null) {
    Response.Write("Path of the binary: " + binaryMeta.UrlPath);
}
//Dispose the BinaryMetaFactory
binaryMetaFactory.Dispose();

ファクトリクラスはTridion.ContentDelivery.Meta.BinaryMetaFactoryからTridion.ContentDelivery.dllです。確かにそのクラスでメソッドが見つからないGetBinaryMetaので、コードサンプルに間違いがあるようです。使用する必要がある最も可能性の高い方法はですGetMeta

于 2012-05-28T18:46:24.080 に答える
3

バイナリリンクを使用して、必要なバイナリの特定のバリアントへのリンクオブジェクトを取得しない理由はありますか?DCPは、マルチメディアコンポーネントの複数のバリエーションをレンダリングする可能性があることに注意してください。次に、Linkオブジェクトから、バイナリへのURLを取得できます。

詳細については、ドキュメントでBinaryLinkを探してください。

于 2012-05-29T12:13:47.063 に答える
1

これを試して:-

 BinaryMeta binaryMeta = b.GetBinaryMeta(queryStringId);
 if(binaryMeta != null) {
       VideoBinaryUrl = binaryMeta.URLPath;
 }
于 2012-05-28T17:45:23.017 に答える
1

コードに対してSQLプロファイラーを実行しましたが、テストアプリをデプロイしたため、ブローカーを呼び出していなかったことがわかりました。実際のTridion公開サイト内でコードを実行するとデータベースにヒットしましたが、variantId列に値「[#def#]」が渡されていました。

これで、次のコードで動作するようになりました。

IComponentMeta cm = cmf.GetMeta(queryStringId);
if (cm != null)
{
    TcmId = queryStringId;
    Title = cm.TryGetValue("title");
    Summary = cm.TryGetValue("summary");
    Product = cm.TryGetValue("product");


    if (cm.SchemaId == StreamingContentSchemaId)
    {
        VideoId = cm.TryGetValue("video_url");
        IsVimeo = true;
    }
    else if (cm.SchemaId == WebcastSchemaId)
    {
        using (var b = new BinaryMetaFactory())
        {
            var binaryMeta = b.GetMeta(queryStringId, "tcm:0-" + cm.OwningPublicationId + "-1");
            if (binaryMeta != null)
            {
                VideoBinaryUrl = binaryMeta.UrlPath;
            }
            else
            {
                Logger.Log.ErrorFormat("Failed to load binary meta {0}", queryStringId);
            }
        }
    }
于 2012-05-29T10:08:30.197 に答える