SHAREPOINT 2013:如何使用javascript CSOM用数组的内容更新站点列?

SHAREPOINT 2013:如何使用javascript CSOM用数组的内容更新站点列?,javascript,sharepoint-2013,csom,site-column,Javascript,Sharepoint 2013,Csom,Site Column,我是Sharepoint 2013的新手,我正在尝试用数组的内容更新网站栏的内容,我可以检索并可视化网站栏的内容,用户可以更改并保存必要的部分,更改将保存到数组中,现在我必须用数组的内容更新站点列的内容,但是由于某种原因我无法做到这一点,有什么建议/例子吗?这是到目前为止我检索、可视化站点列并将其存储到数组中的代码 <body> <select id="dropdown" name="dropdown" onchange="optSelect()">

我是Sharepoint 2013的新手,我正在尝试用数组的内容更新网站栏的内容,我可以检索并可视化网站栏的内容,用户可以更改并保存必要的部分,更改将保存到数组中,现在我必须用数组的内容更新站点列的内容,但是由于某种原因我无法做到这一点,有什么建议/例子吗?这是到目前为止我检索、可视化站点列并将其存储到数组中的代码

<body>
        <select id="dropdown" name="dropdown" onchange="optSelect()">
            <option value="EngineType_Cylinders">EngineType_Cylinders</option>
            <option value="EngineType_EngineCycle">EngineType_EngineCycle</option>
            <option value="EngineType_EngineFamily">EngineType_EngineFamily</option>
            <option value="EngineType_Euro">EngineType_Euro</option>
            <option value="EngineType_FamilyEvolution">EngineType_FamilyEvolution</option>
            <option value="EngineType_GasEmissionLevel">EngineType_GasEmissionLevel</option>
            <option value="EngineType_Power">EngineType_Power</option>
            <option value="EngineType_PowerSupply">EngineType_PowerSupply</option>
            <option value="EngineType_Use">EngineType_Use</option>
        </select><br />

        <textarea id="textareadisplay" rows="25" cols="23"></textarea><br />
        <input type ="button" value="Update values" onclick="addItemsToColumns()" />
    </body>

我的问题出在函数addItemsToColumns()上,请帮助!提前感谢。

修改示例

以下修改后的示例应该可以做到这一点:

SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
     var fieldName = $('#dropdown').find(":selected").text();   //get selected column
     populateValues(fieldName);
});


function populateValues(fieldName)
{
    getFieldChoice(fieldName,
      function(field){
           var values = field.get_choices();             
           $("textarea#textareadisplay").val(values.join("\n"));
      },
      function(sender,args){
         console.log(args.get_message());  //handle errors..
      });
}



function addItemsToColumns() {
    var fieldName = $('#dropdown').find(":selected").text();   //get selected column
    var values = $('textarea#textareadisplay').val().split('\n');
    updateFieldChoice(fieldName,values,
       function(field){
         console.log(String.format('{0} field has been updated',fieldName)); 
      },
      function(sender,args){
         console.log(args.get_message());  //handle errors..
      });
}



//SharePoint specific function for getting choice column 
function getFieldChoice(fieldTitle,success,failure) {
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var fieldChoice = ctx.castTo(web.get_fields().getByTitle(fieldTitle), SP.FieldChoice);
    ctx.load(fieldChoice);
    ctx.executeQueryAsync(
         function(){
            success(fieldChoice)
         },
         failure);
}

//SharePoint specific function for updating choice column
function updateFieldChoice(fieldTitle,choiceValues,success,failure) {
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var fieldChoice = ctx.castTo(web.get_fields().getByTitle(fieldTitle), SP.FieldChoice);
    fieldChoice.set_choices(choiceValues);
    fieldChoice.update();
    ctx.executeQueryAsync(
         function(){
            success(fieldChoice)
         },
         failure);
}
一些建议

  • 首选
    SP.SOD.executeFunc
    SP.SOD.executeOrderLayintlScriptLoaded
    ,因为它支持加载 请求脚本
  • 避免全局变量

好的,我粘贴了代码,在onClick事件中添加了函数“addItemsToColumns()”,但是我的站点列仍然没有用新值更新。。刷新页面时,站点列仍保留旧值。。我这样做是为了工作,而且让我发疯。。控制台日志显示:此功能对于与列表无关的字段不可用。啊,请将函数get_availableFields()替换为get_fields(),我相信错误会消失(请参阅更新的答案)。完成后..但现在它不再显示我的sitecolumn…:(…我开始对此失去所有希望…好吧,现在它可以工作了..我在子网站的一个页面中添加了web部件,因此以这种方式无法更新上层中的列。非常感谢!
SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
     var fieldName = $('#dropdown').find(":selected").text();   //get selected column
     populateValues(fieldName);
});


function populateValues(fieldName)
{
    getFieldChoice(fieldName,
      function(field){
           var values = field.get_choices();             
           $("textarea#textareadisplay").val(values.join("\n"));
      },
      function(sender,args){
         console.log(args.get_message());  //handle errors..
      });
}



function addItemsToColumns() {
    var fieldName = $('#dropdown').find(":selected").text();   //get selected column
    var values = $('textarea#textareadisplay').val().split('\n');
    updateFieldChoice(fieldName,values,
       function(field){
         console.log(String.format('{0} field has been updated',fieldName)); 
      },
      function(sender,args){
         console.log(args.get_message());  //handle errors..
      });
}



//SharePoint specific function for getting choice column 
function getFieldChoice(fieldTitle,success,failure) {
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var fieldChoice = ctx.castTo(web.get_fields().getByTitle(fieldTitle), SP.FieldChoice);
    ctx.load(fieldChoice);
    ctx.executeQueryAsync(
         function(){
            success(fieldChoice)
         },
         failure);
}

//SharePoint specific function for updating choice column
function updateFieldChoice(fieldTitle,choiceValues,success,failure) {
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var fieldChoice = ctx.castTo(web.get_fields().getByTitle(fieldTitle), SP.FieldChoice);
    fieldChoice.set_choices(choiceValues);
    fieldChoice.update();
    ctx.executeQueryAsync(
         function(){
            success(fieldChoice)
         },
         failure);
}