REST API - 无法更新托管元数据字段 [英] REST API - Unable to update managed metadata field

查看:53
本文介绍了REST API - 无法更新托管元数据字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 

我有一个工作流程,我正在尝试更新托管元数据列,但是,更新通过204响应,但是该字段没有更新。我使用其余的api"moveto"功能将文档移动到另一个库,这可以
罚款。然后我用剩下的api"checkout"功能并检查文件。这有效。我可以更新所有其他属性,但不能更新元数据。但是,如果我只是通过UI将文件拖入库中,则不会检入该文件。然后
如果我在Postman中运行相同的命令,则会更新托管元数据列。 

I have a workflow and I am trying to update a managed metadata column, however, the update goes through with a 204 response, but the field is not updated. I use the rest api "moveto" function to move the document to another library and this works fine. Then I use the rest api "checkout" function and check the document out. This works. I can update all the other properties but not the meta data. However, if I just drag a file into the library through the UI, the file is not checked in. Then if I run the same command in Postman it updates the managed metadata column. 

{
	"__metadata": {
            
            
        
            "type": "SP.Data.ComplianceItem"
        },
        "ContentTypeId": "0x0101000FAE84AD1C6A7D41A0A26667078620510053816378F7F9624EA0233C9A48817A6B",
        "Title": "new title 4",
        "HR_x0020_Document_x0020_Type": {
            "__metadata": {
                "type": "SP.Taxonomy.TaxonomyFieldValue"
            },
            "Label": "Bullying & Harassment Policy - 5.2",
            "TermGuid": "827207b3-648c-42b8-b3f9-8739ada3c033",
            "WssId": 11
        },
        "Employee_x0020_Id": "2345",
        "FirstName": "asdfg",
        "Surname": "sdfg"
}

请求如上所示。 

The request is as shown above. 

我们非常感谢任何帮助。 

Any help would be really appreciated. 

祝你好运, 

Best regards, 

        Seamus 

       Seamus 

推荐答案

您好,

这是我测试的JSOM脚本(我使用REST api进行测试,结果与您在本地SharePoint 2013服务器场中共享的结果相同)。

<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script type="text/javascript">
        function SetManagedMetaDataField(listName,
            itemID,
            fieldName,
            term) {
            var scriptbase = _spPageContextInfo.webServerRelativeUrl + "_layouts/15/";


.getScript(scriptbase +" SP.Taxonomy.js",function(){
{
var context = new SP.ClientContext.get_current();
var list = context.get_web()。get_lists()。getByTitle(listName);
var item = list.getItemById(itemID);
var field = list.get_fields()。getByInternalNameOrTitle(fieldName );
var txField = context.castTo(field,SP.Taxonomy.TaxonomyField);

context.load(field);
context.load(txField);
context.load(item);

context.executeQueryAsync(
函数(){
var termSetId = txField.get_termSetId()。toString();
var termId;
getTermIdForTerm(函数成功(id){
termId = id;
var value = item.get_item(fieldName);
var terms = new Array();

if(txField.get_allowMultipleValues()){

var enumerator = value.getEnumerator();
while(enumerator.moveNext()){
var tv = enumerator.get_current();
terms.push(tv.get_wssId()+" ;;#" + tv.get_label()+" |" + tv.get_termGuid());
}

terms.push(" -1;#" + term +" |" + termId);
termValueString = terms.join(" ;;#") ;
termVa lues = new SP.Taxonomy.TaxonomyFieldValueCollection(context,termValueString,txField);
txField.setFieldValueByValueCollection(item,termValues);
}
else {
var termValue = new SP.Taxonomy.TaxonomyFieldValue();
termValue.set_label(term);
termValue.set_termGuid(termId);
termValue.set_wssId(-1);
txField.setFieldValueByValue(item,termValue);
}

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

},函数错误(错误){
alert(err.get_message());
});
}
});

}


函数getTermIdForTerm(成功,错误,clientContext,term,termSetId){
var termId ="" ;;

var tSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext);
var ts = tSession.getDefaultSiteCollectionTermStore();
var tset = ts.getTermSet(termSetId);
var lmi = new SP.Taxonomy.LabelMatchInformation(clientContext);

lmi.set_lcid(1033);
lmi.set_trimUnavailable(true);
lmi.set_termLabel(term);

var termMatches = tset.getTerms(lmi);

clientContext.load(tSession);
clientContext.load(ts);
clientContext.load(tset);
clientContext.load(termMatches);

clientContext.executeQueryAsync(
function(){

if(termMatches&& termMatches.get_count()> 0)
termId = termMatches.get_item(0).get_id()。toString();
success(termId);

},function(sender,args){
error(args);
});
}
< / script>

< input id =" Button1" onclick =" SetManagedMetaDataField('Doc4',1,'DocType','aaa');"类型= QUOT按钮"值= QUOT按钮" />

.getScript(scriptbase + "SP.Taxonomy.js", function () { { var context = new SP.ClientContext.get_current(); var list = context.get_web().get_lists().getByTitle(listName); var item = list.getItemById(itemID); var field = list.get_fields().getByInternalNameOrTitle(fieldName); var txField = context.castTo(field, SP.Taxonomy.TaxonomyField); context.load(field); context.load(txField); context.load(item); context.executeQueryAsync( function () { var termSetId = txField.get_termSetId().toString(); var termId; getTermIdForTerm(function success(id) { termId = id; var value = item.get_item(fieldName); var terms = new Array(); if (txField.get_allowMultipleValues()) { var enumerator = value.getEnumerator(); while (enumerator.moveNext()) { var tv = enumerator.get_current(); terms.push(tv.get_wssId() + ";#" + tv.get_label() + "|" + tv.get_termGuid()); } terms.push("-1;#" + term + "|" + termId); termValueString = terms.join(";#"); termValues = new SP.Taxonomy.TaxonomyFieldValueCollection(context, termValueString, txField); txField.setFieldValueByValueCollection(item, termValues); } else { var termValue = new SP.Taxonomy.TaxonomyFieldValue(); termValue.set_label(term); termValue.set_termGuid(termId); termValue.set_wssId(-1); txField.setFieldValueByValue(item, termValue); } item.update(); context.executeQueryAsync( function () { alert('field updated'); }, function (sender, args) { alert(args.get_message() + '\n' + args.get_stackTrace()); }); }, function (sender, args) { alert(args.get_message() + '\n' + args.get_stackTrace()); }, context, term, termSetId); }, function error(err) { alert(err.get_message()); }); } }); } function getTermIdForTerm(success, error, clientContext, term, termSetId) { var termId = ""; var tSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext); var ts = tSession.getDefaultSiteCollectionTermStore(); var tset = ts.getTermSet(termSetId); var lmi = new SP.Taxonomy.LabelMatchInformation(clientContext); lmi.set_lcid(1033); lmi.set_trimUnavailable(true); lmi.set_termLabel(term); var termMatches = tset.getTerms(lmi); clientContext.load(tSession); clientContext.load(ts); clientContext.load(tset); clientContext.load(termMatches); clientContext.executeQueryAsync( function () { if (termMatches && termMatches.get_count() > 0) termId = termMatches.get_item(0).get_id().toString(); success(termId); }, function (sender, args) { error(args); }); } </script> <input id="Button1" onclick="SetManagedMetaDataField('Doc4', 1, 'DocType', 'aaa');" type="button" value="button" />

最好的问候,

Lee


这篇关于REST API - 无法更新托管元数据字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆