【问题标题】:Tridion 2009 SP1: Broker how to get Binary Url?Tridion 2009 SP1:Broker 如何获取二进制 URL?
【发布时间】:2012-05-28 17:22:30
【问题描述】:

我正在尝试检索作为动态组件演示文稿发布的多媒体组件文件的二进制 URL。

我可以在 Broker 数据库的 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 加载组件元数据。

关于为什么我无法加载二进制元的任何想法?我在正确的轨道上吗?

罗伯

【问题讨论】:

  • 多媒体组件是否在 Tridion Web UI 中显示“已发布”图标?
  • 第二个代码片段最终做了什么?它会记录您的错误吗?还是 VideoBinaryUrl 只是 null/empty?
  • 嗨弗兰克,都记录了错误。
  • 好。那么至少不会因为坚持使用公共 API 而受到惩罚。 ;-) 那么 MMC 在 Web GUI 中是否显示已发布/地球图标?
  • 是的,我可以通过直接查询数据库来查看元数据。上周早些时候我遇到了类似的问题,最终不得不使用过时的过滤 API。可能是许可问题或我的开发环境中未启动的服务?

标签: tridion tridion2009 tridion-content-delivery


【解决方案1】:

看起来您的第一个示例是从内部 DLL (Tridion.ContentDelivery.Interop.dll) 导入(自动生成的)方法。请不要使用这些并坚持使用 Tridion.ContentDelivery 命名空间 (Tridion.ContentDelivery.dll) 中的那些。

您可以在 SDL Tridion World 上找到 CHM 格式的官方documentation for the Content Delivery .NET API(单击链接,登录网站并再次单击链接)。来自该文档的示例如下:

//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

【讨论】:

    【解决方案2】:

    您是否有理由不使用二进制链接来获取指向所需二进制文件的特定变体的链接对象?请记住,任何 DCP 都可能呈现多媒体组件的多种变体。然后,您可以从 Link 对象获取二进制文件的 URL。

    在文档中查找 BinaryLink 以了解更多详细信息。

    【讨论】:

    • 我不知道 BinaryLink,我去看看。谢谢克里斯。
    • 绝对是推荐的方法——这就是 API 的设计目的:)
    【解决方案3】:

    试试这个:-

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

    【讨论】:

      【解决方案4】:

      我对代码执行了 SQL Profiler,发现这是因为我部署了我的测试应用程序,它没有调用代理。在实际的 Tridion Published 站点中运行代码确实命中了数据库,但它为 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);
                  }
              }
          }
      

      【讨论】:

      • 啊哈,看来你被默认变体咬了。我感觉 Tridion 2011 中发生了一些变化,但无法弄清楚它究竟如何影响查询构建。
      猜你喜欢
      • 2012-04-24
      • 2013-01-04
      • 1970-01-01
      • 2012-05-01
      • 2012-06-24
      • 2012-04-30
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多