Хорошо, хорошо хорошая новость заключается в том, что вы можете сделать что-то работу с JavaScript, но это не будет достаточно.
Вы можете изменить форму «Новый элемент» для своего списка SharePoint и добавить веб-часть редактора содержимого под веб-частью формы по умолчанию.
Редактируйте свойства веб-части редактора содержимого и задайте его свойство «ссылка на контент» как текстовый файл в библиотеке документов на вашем сайте.
В этом текстовом файле вы можете вставлять любые HTML и JavaScript, которые вы хотите ... в этом случае мы добавим JavaScript, который использует объектную модель на стороне клиента SharePoint (CSOM), чтобы запросить список и получить самый большой номер в номере. Затем мы переопределим функцию PreSaveAction()
(которая запускается всякий раз, когда кто-то нажимает «Сохранить»), и установите для этого номера элемента значение, равное этому, плюс один перед сохранением.
В приведенном ниже коде замените «Список примеров» названием вашего списка и «MyAutonumberColumn» с внутренним внутренним именем вашего столбца с номером autonumbering.
<script>
window.MyNamespace = new Object(null);
var my = window.MyNamespace;
my.listName = "Example List";
my.columnInternalName = "MyAutonumberColumn";
ExecuteOrDelayUntilScriptLoaded(GetAutoNumber,"SP.JS");
function PreSaveAction(){
var fieldDictionary = new Object(null);
var fields = document.querySelectorAll("td.ms-formbody");
for (var i=0, len = fields.length; i < len; i++){
var start = fields[i].innerHTML.indexOf("FieldInternalName=");
if(start >= 0){
start += 19;
var internalName = fields[i].innerHTML.substring(start);
internalName = internalName.substring(0,internalName.indexOf('"'));
fieldDictionary[internalName] = fields[i];
}
}
if(fieldDictionary[my.internalColumnName]){
var element = fieldDictionary[my.internalColumnName].querySelector("select, textarea, input");
element.value = my.autoNumber;
return true;
}
}
function GetAutoNumber(){
var my = window.MyNamespace;
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("my.listName");
var camlQuery = new SP.CamlQuery();
// use a CAML query to retrieve a set of list items:
camlQuery.set_viewXml(
'<View><Query>'+
'<OrderBy>'+
'<FieldRef Name=\'"+my.columnInternalName+"\' Ascending='FALSE' />'+
'</OrderBy>'+
'</Query><RowLimit>1</RowLimit></View>');
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(
/* code to run on success: */
Function.createDelegate(this,
function(){
var item, itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
item = itemEnumerator.get_current();
var number = item.get_item(my.columnInternalName);
my.autoNumber = +(number) + 1;
}
}
),
/* code to run on error: */
Function.createDelegate(this,
function(sender,args){
alert(args.get_message());
}
)
);
</script>
Существует очевидный недостаток такого подхода: если два человека начинают создавать предметы, в то же время, они будут созданы с тем же номером. Вы всегда можете войти и отредактировать эти элементы, чтобы при необходимости дать им разные номера, что может быть хорошо, если этот список не часто обновляется новыми элементами, созданными несколькими людьми.