2012-05-28 1 views
1

Я пытаюсь получить двоичный URL-адрес файла мультимедийного компонента, который публикуется как динамическое представление компонентов.Tridion 2009 SP1: Брокер, как получить двоичный код?

я могу увидеть адрес в таблице Binaries в базе данных брокера, но я не могу показаться, чтобы получить двоичный 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); 
    } 
}       

Использование Binary Meta завод:

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 ,

Любые идеи о том, почему я не могу загрузить двоичную мета? Я на правильном пути?

Роб

+0

Отображает ли мультимедийный компонент значок «Опубликован» в веб-интерфейсе Tridion? –

+0

Что делает второй фрагмент кода? Записывает ли ваша ошибка? Или VideoBinaryUrl просто null/empty? –

+0

Привет, Франк, оба регистрируют ошибку. –

ответ

3

Есть ли причина, что вы не используете Binary ссылку, чтобы получить объект Ссылки на конкретный вариант двоичного файла вы хотите? Имейте в виду, что любой DCP может отображать несколько вариантов вашего мультимедийного компонента. Из объекта Link вы можете получить URL-адрес двоичного файла.

Подробнее см. BinaryLink в документации.

+0

Я не знал о BinaryLink, я посмотрю. Спасибо Крису. –

+0

Определенно рекомендуемый способ сделать это - это то, для чего был разработан API: –

+0

Это сработало отлично. –

1

Попробуйте это: -

BinaryMeta binaryMeta = b.GetBinaryMeta(queryStringId); 
if(binaryMeta != null) { 
     VideoBinaryUrl = binaryMeta.URLPath; 
} 
+0

У меня, кажется, нет этого метода. Я должен каким-то образом импортировать неправильные DLL. –

5

Похоже, ваш первый пример импорта (автоматически сгенерированные) методы из внутренней DLL (Tridion.ContentDelivery.Interop.dll). Пожалуйста, не используйте их и придерживайтесь их в пространстве имен Tridion.ContentDelivery (Tridion.ContentDelivery.dll).

Официальный сайт documentation for the 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.

1

Я сделал SQL-профилировщик кода и заметил, что это потому, что я развернул тестовое приложение, которое он не вызывал брокера. Запуск кода внутри фактического сайта Tridion Published попал в базу данных, но он передал значение «[# def #]» для столбца variantId.

Теперь я получил это работает со следующим кодом:

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); 
      } 
     } 
    } 
+0

Ага, поэтому кажется, что вас укусил вариант по умолчанию. У меня есть ощущение, что в Tridion 2011 что-то изменилось, но не смогли выяснить, как это точно влияет на построение запроса. –