如何将超过3400字节的文本插入Tridion代理中的字段?

时间:2013-02-12 06:05:17

标签: tridion tridion-2011 tridion-content-delivery

我有一个包含大量元数据字段的模式。我们希望能够通过Tridion API从代理中搜索基于该模式的组件,如:

using Tridion.ContentDelivery.DynamicContent.Query;
private static Criteria getSearchCriteria(
        string searchText,
        params BrokerConstants.MetadataField[] fields)
    var searchCriteria = new List<Criteria>();
    foreach (var f in fields)
    {
        var mkcText = new CustomMetaKeyCriteria(f.Name);
        var mvcText = new CustomMetaValueCriteria(
                mkcText, 
                "%" + searchText + "%",
                Criteria.Like);
        searchCriteria.Add(mvcText);
    }
    return new OrCriteria(searchCriteria.ToArray());
}

到目前为止,此工作正常:用户可以输入一些搜索文本,我们通过代理API将搜索文本传递给Tridion,Tridion会将返回与搜索文本匹配的组件返回给我们。

但是!如果我在任何组件的内容字段中添加了大量文本,则Tridion发布过程将在“部署”阶段失败:

  

阶段:部署处理阶段失败,无法部署组件   [Component id = tcm:9-2617-16 title = xyz schema = tcm:9-2325-8],CustomMeta   field,StringValue,大于支持的3400字节大小!

我尝试将代理数据库的CUSTOM_META表中的KEY_STRING_VALUE列从nvarchar(3400)更改为nvarchar(MAX),但这似乎没有解决问题。

我没有超过极限:“wc”告诉我文本中有4037个字节。大约6000左右的声音听起来像是我需要的舒适上限。

是否有一种简单的方法可以增加此字段中允许的文本字节数?

2 个答案:

答案 0 :(得分:10)

没有支持的方式来完成你想要完成的任务。另外,请记住自定义元的实际目的是什么。在我看来,你通过在专栏中添加大量内容来滥用它。

无论如何,如果你真的想走这条路,那么你需要联系Tridion支持或访问sdltridionworld(需要登录)并下载CD_2011.1.1.83467(或任何包含CD_2011.1.1.81125的修补程序)除了CD_2011.1.1.83475 !!!)。修补程序更改的内容是删除对部署时完成的元数据大小的硬性检查。换句话说,它允许您通过让数据库服务器决定是否允许您在该列中存储那么多内容来拍摄自己。请注意,Tridion支持更改数据库列

希望这会有所帮助。

答案 1 :(得分:5)

更改代理数据库中列的定义支持,并且可能会在将来导致实施的支持和升级问题。

听起来像你正在获取组件的文本内容并将其放入基于文本的元数据字段中,以便在前端提供某种全文搜索功能(原谅我)如果我错了)这不一定符合Content Delivery API的预期目的。

我推荐您之前关于实施自由文本搜索的question以及answer