2013-06-12 72 views
1

我創建了一個僅基於javascript的sharepoint託管應用程序。我想更新一個列表中的多值分類字段,所以我寫了這個功能,但沒有工作。對於在線的javascript csom有一點支持。設置分類字段多個值

var list = context.get_web().get_lists().getByTitle('Company'); 
var item = list.getItemById(2); 

var field = list.get_fields().getByInternalNameOrTitle("Departments"); 
var taxField = context.castTo(field, SP.Taxonomy.TaxonomyField); 

var terms = new SP.Taxonomy.TaxonomyFieldValueCollection(context, 
'Unit 1|5bf47d1f-d890-49d1-a844-85628ca508fd;#Unit 4|334ad23d-d2d8-4acb-ab09-38d2bacb97d4', 
taxField); 

taxField.setFieldValueByValueCollection(item, terms); 

item.update(); 
context.load(taxField); 
context.executeQueryAsync(
function() { 
    console.log('field updated'); 
}); 

我也用這個代碼

var list = context.get_web().get_lists().getByTitle('Company'); 
var item = list.getItemById(2); 

item.set_item('Departments', 'Unit 1|5bf47d1f-d890-49d1-a844-85628ca508fd;Unit 4|334ad23d-d2d8-4acb-ab09-38d2bacb97d4'); 
item.update(); 
context.executeQueryAsync(
function() { 
    console.log('field updated'); 
}); 

回答

4

您必須包括一個假wssid(查詢ID)前綴值。以下是我在應用模型中用於從jsom中設置多個值字段的代碼。這工作。

function SetManagedMetaDataField() { 
appweburl = decodeURIComponent(getQueryStringParameter('SPAppWebUrl')); 
hostweburl = decodeURIComponent(getQueryStringParameter('SPHostUrl')); 
context = new SP.ClientContext(appweburl); 
factory = new SP.ProxyWebRequestExecutorFactory(appweburl); 
context.set_webRequestExecutorFactory(factory); 
appContextSite = new SP.AppContextSite(context, hostweburl); 

var list = appContextSite.get_web().get_lists().getByTitle('Documents'); 
var item = list.getItemById(5); 

var field = list.get_fields().getByInternalNameOrTitle("Cars"); 
var taxField = context.castTo(field, SP.Taxonomy.TaxonomyField); 

var terms = new SP.Taxonomy.TaxonomyFieldValueCollection(context, 
'-1;#ATS|9f3e8e20-593b-471d-a145-81ff8664fd96;#-1;#CTS|8b18f6df-22be-4548-92b4-8f240d8fbfe5', 
taxField); 

taxField.setFieldValueByValueCollection(item, terms); 

item.update(); 
context.load(taxField); 
context.executeQueryAsync(
function() { 
    alert('field updated'); 
}, function (sender,args) { 
    alert(args.get_message() + '\n' + args.get_stackTrace()); 
}); 
} 
+0

有什麼辦法可以先從項目中清除當前條款?你會傳遞空字符串,然後更新,然後傳遞條款並再次更新? – user323774