SHAREPOINT 2013: Как я могу обновить столбец сайта с содержимым массива с помощью javascript CSOM?
Я относительно новичок в 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>
Мой джаваскрипт
$(function () {
SP.SOD.executeOrDelayUntilScriptLoaded(Function.createDelegate(this, function () {
var select = document.getElementById('dropdown').value;
console.log(select);
getSiteColumns(select);
}), 'SP.js');
});
var fieldChoice;
var choices;
var addFields = [];
var slc;
var clientContext;
function optSelect() {
slc = document.getElementById('dropdown').value;
getSiteColumns(slc);
}
function getSiteColumns(selection) {
clientContext = SP.ClientContext.get_current();
if (clientContext != undefined && clientContext != null) {
var web = clientContext.get_web();
fieldChoice = clientContext.castTo(web.get_availableFields().getByTitle(selection), SP.FieldChoice);
clientContext.load(this.fieldChoice);
clientContext.executeQueryAsync(Function.createDelegate(this, this.OnLoadSuccess), Function.createDelegate(this, this.OnLoadFailed));
}
}
function OnLoadSuccess(sender, args) {
choices = fieldChoice.get_choices();
var textarea = document.getElementById("textareadisplay");
textarea.value = choices.join("\n");
}
function OnLoadFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
function addItemsToColumns() {
clientC = SP.ClientContext.get_current();
var arrayForUpdate = $('#textareadisplay').val().split('\n');
fieldChoice.set_item(, arrayForUpdate);
fieldChoice.update();
clientContext.executeQueryAsync(function () { }, function () { });
}
function OnUpdateSuccess(sender, args) {
var newchoices = fieldChoice.get_choices();
}
Моя проблема на функцию addItemsToColumns(), пожалуйста, помогите! Заранее спасибо.
1 ответ
Решение
Модифицированный пример
Следующий модифицированный пример должен сделать свое дело:
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.executeOrDelayUntilScriptLoaded
так как он поддерживает скрипты загрузки по требованию - Избегайте глобальных переменных