如何在没有WssId的情况下处理未使用的托管元数据条款?

时间:2010-09-21 07:25:36

标签: sharepoint sharepoint-2010 metadata taxonomy

问题

我们使用FrontPage RPC(放置文档调用)将(大量)文件上载到SharePoint。据我们所知,通过此协议设置分类法字段的值需要 WssId

问题在于,除非在listitem之前明确使用过术语,否则他们似乎拥有 WSS ID。这会导致使用以前未使用的元数据术语上载文档失败。

守则

以下代码段中的电话TaxonomyField.GetWssIdsOfTerm根本不会返回这些字词的ID。

SPSite site = new SPSite( "http://some.site.com/foo/bar" );
SPWeb web = site.OpenWeb();

TaxonomySession session = new TaxonomySession( site ); 
TermStore termStore = session.TermStores[new Guid( "3ead46e7-6bb2-4a54-8cf5-497fc7229697" )];
TermSet termSet = termStore.GetTermSet( new Guid( "f21ac592-5e51-49d0-88a8-50be7682de55" ) );
Guid termId = new Guid( "a40d53ed-a017-4fcd-a2f3-4c709272eee4" );

int[] wssIds = TaxonomyField.GetWssIdsOfTerm( site, termStore.Id, termSet.Id, termId, false, 1);

foreach( int wssId in wssIds )
{
    Console.WriteLine( wssId );
}

我们还尝试直接查询分类隐藏列表,结果相似。

寻求帮助

如何解决这个问题的确认和建议将不胜感激。我看到了解决方案的三种可能途径:

  • 通过以不同方式上传术语或切换到其他协议来更改上传方式。
  • 以不同的方式查询元数据WssIds。一个适用于未使用的术语。
  • 编写/查找工具以预先解析所有术语的WssIds。关于如何优雅地做到这一点的建议是最受欢迎的。

1 个答案:

答案 0 :(得分:1)

将WssID值设置为-1可以帮助您。我有两个不同的Web应用程序之间的类似问题(复制包含元数据字段的文档)。我花了很多时间来解决奇怪的元数据问题。最后,将值设置为-1已解决了我的所有问题。即使GetWssIdsOfTerm返回一个值,我也使用-1并且它可以正常工作。 可能有一些背景逻辑可以照顾WssId。

拉​​狄克