직장에서 사고/인시던트를 기록하기 위한 데이터베이스로 SharePoint 목록을 사용하고 있습니다. 각 사건에는 번호가 할당되어 있습니다. 여러 사람이 이 목록을 사용하므로 <발생 번호> 열에 다음 순차 번호가 자동으로 채워지도록 하고 싶습니다. 아래는 현재 모습의 이미지입니다. 이 경우 사용자가 '새 항목'을 선택하면 첫 번째 필드는 자동으로 '14-0002'가 되어야 합니다;
제가 원하는 것은 사용자가 '새 항목'을 만들 때 첫 번째 필드에 아래 그림과 같이 다음 #이 이미 채워지는 것입니다.
이게 가능한가요? 이 문제에 대해 어떤 도움을 주시면 정말 감사하겠습니다. 회사에서 SharePoint 2013을 사용하는 데 큰 장애물이 되고 있습니다.
자바스크립트에서는 SPUtility.js 라이브러리를 사용하여 이 작업을 수행할 수 있습니다.
추신: 이 예제에서는 SharePoint 2010을 사용했지만 동일합니다. SP 2013을 사용했습니다.
예를 들어 간단한 목록 '일련 번호 ' 를 만들었습니다:
모든 목록에는 항목을 추가, 표시 및 편집할 수 있는 세 가지 기본 양식이 있으며, 목표를 달성하기 위해 이 양식을 편집하겠습니다.
수정을 시작하기 전에 공유 문서 라이브러리에서 두 파일을 SharePoint에 업로드하는 것보다 SPUtility.js 및 JQuery를 다운로드하세요.
'기본 새 양식'을 편집하고 콘텐츠 편집기 웹 파트를 추가합니다.
웹 파트의 Html 콘텐츠를 편집하고 아래 코드를 붙여넣습니다:
<script src="/Shared%20Documents/jquery-1.10.2.min.js"></script>
<script src="/Shared%20Documents/sputility.min.js"></script>
<script>
// Get the current Site
var siteUrl = '/';
function retrieveListItems() {
var clientContext = new SP.ClientContext(siteUrl);
// Get the liste instance
var oList = clientContext.get_web().get_lists().getByTitle('sequential number');
var camlQuery = new SP.CamlQuery();
// Get only the last element
camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name=\'ID\' Ascending=\'False\' /></OrderBy></Query><RowLimit>1</RowLimit></View>');
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
var listItemInfovalue = oListItem.get_item('Occurrence_x0020__x0023_');
// Based in you request the id is : 14-00001
// Split the first
var res = listItemInfovalue.split("-");
console.log(res[1]);
// increment the index
var newId = parseInt(res[1])+1;
// create the new id
SPUtility.GetSPField('Occurrence #').SetValue(res[0] + '-' + pad(newId, 5) );
}
console.log(listItemInfo.toString());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
// Create new id with fixed size :
// exp : 00001, 00001
// num : is the number
// size : is the number size
function pad(num, size) {
var s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
$(document).ready(function(){
ExecuteOrDelayUntilScriptLoaded(retrieveListItems, "sp.js");
});
</script>
이제 결과물입니다:
일반적으로 목록 항목 ID 번호가 이 작업을 수행하는 데 사용됩니다. 2013년에는 이것이 얼마나 달라졌는지 잘 모르겠지만 2010년에는 목록에 항목을 추가하는 데 사용되는 양식을 편집하고 목록에서 데이터 검색 유형의 데이터 연결을 추가하고 목록을 선택한 다음 ID 필드를 선택해야 합니다.
그런 다음 '데이터 쿼리' 작업을 사용하여 데이터를 쿼리하는 규칙을 만들고 방금 만든 데이터 쿼리를 선택한 다음 다음과 같은 방법으로 발생 번호 값을 설정합니다:
concat("14-", max(ID))
첫 번째 문서에는 14-1, 열 번째 문서에는 14-10 등이 표시됩니다.
우리가 원했던 것처럼 앞의 0을 원한다면 제가 찾은 가장 빠른 <해결 방법>은 4개의 규칙을 만들어 첫 번째 규칙에서 max(ID)가 10보다 작은지 확인하고 연결 문에 <000>을 추가한 다음, 다음 규칙은 max(ID)가 100보다 작은 경우에만 실행하고 연결문에 <00>을 추가하는 식으로 실행하는 것이었습니다. 조건이 충족되면 나머지 규칙을 실행하지 않음에 대한 규칙의 확인란이 선택되어 있는지 확인합니다. 이 작업을 수행하는 더 좋은 방법이 있을 수 있지만 제 해킹 작업은 우리를 위해 작동합니다.
목록이 비어 있으면 max(ID)에 대한 값이 없고 처음 호출할 때 NaN 값이 나오지만 그 이후에는 정상적으로 작동합니다.
이 링크는 제가 사용한 솔루션으로 즐겨찾기에 등록되어 있었지만, IT 부서의 무한한 지혜로 인해 워드프레스가 이제 제한된 사이트라고 결정하여 확인할 수 없습니다:
http://claytoncobb.wordpress.com/2009/06/20/auto-generating-filenames-for-infopath-forms/
또 다른 일반적인 방법은 'OccurrenceID'라는 별도의 열을 만드는 것입니다. 그런 다음 워크플로우에서 설정 목록 값을 기반으로 값을 설정하도록 합니다.
'발생 설정'이라는 별도의 사용자 지정 목록을 만들고 '값'이라는 새 열을 만듭니다(한 줄의 텍스트로 설정).
항목을 만듭니다(제목: 다음 발생 ID, 값: 1).
설정 목록이 아닌 발생 목록에서 공유 목록 워크플로우를 만듭니다. 발생 ID 필드를 다음 발생 ID로 설정합니다. 그런 다음 설정 목록 항목을 다음 발생 ID + 1과 같도록 업데이트합니다. 만들 때만 트리거되도록 설정합니다.
그러면 항목이 생성된 후 선택한 특정 식별자가 할당되고 자동으로 증가합니다. 단점은 워크플로 설계에 따라 값이 즉시 설정되지 않고 항목이 생성된 후 어느 시점에 발생한다는 것입니다.
도움이 되셨기를 바랍니다. :)