職場での事故やインシデントを記録するデータベースとして、SharePointのリストを使用しています。 各インシデントには番号が割り当てられています。 このリストは複数の人が利用しているので、"Occurrence Number"の列に次の連番が自動的に入力されるようにしたいと思っています。 下の図は、現在のイメージです。この場合、ユーザーが"new item,"を選択すると、最初のフィールドには自動的に"14-0002"が表示されるはずです。 .
私が実現したいのは、ユーザーが"new item,"を作成したときに、最初のフィールドにはすでに次の#が入力されているということです(下図参照)。 .
このようなことは可能なのでしょうか?この件で助けてくれる人がいたら、本当に感謝します。これは私の会社がSharePoint 2013の使用を進める上での大きな障害となっています。
これをJavaScriptで実現するには、SPUtility.jsというライブラリを使います。
追記:この例では、SharePoint 2010を使用していますが、同じです。 SP 2013でも同様です。
例として、シンプルなリスト '連番'を作成してみました。
すべてのリストには、アイテムを追加、表示、編集するための3つのデフォルトフォームがありますが、目的を達成するためにこのフォームを編集します。
.
修正を始める前に、SPUtility.jsとJQueryをダウンロードし、SharePointの共有ドキュメントライブラリなどにアップロードします。
Default New Form」を編集し、Content Editor Web partを追加します。
.
ウェブパーツの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フィールドを選択する必要があります。
次に、"Query for data"アクションを使用してデータをクエリするルールを作成し、作成したデータクエリを選択して、次のような方法でオカレンス番号の値を設定します。
concat("14-", max(ID))
これにより、最初のドキュメントが14-1、10番目が14-10などとなります。
先頭にゼロを付けたい場合(私たちのように)、私が見つけた最速の "workaround"は、4つのルールを作ることでした。最初のルールは、max(ID)が10未満であるかどうかをチェックし、concat文に"000"を追加し、次のルールはmax(ID)が100未満である場合にのみ実行し、concatに"00"を追加するといった具合です。ルールの「条件が満たされた場合、残りのルールを実行しない」のボックスがチェックされていることを確認します。もっと素敵な方法があるかもしれませんが、私がやったことでうまくいっています。
リストが空の場合、max(ID)には値がないので、最初にこれが呼ばれたときにはNaN値が得られますが、その後はうまくいくはずです。
このリンクは、私が使用したソリューションとしてお気に入りに登録されていましたが、私のIT部門が無限の知恵をもって、WordPressが制限されたサイトであると決定したため、確認することができません。
http://claytoncobb.wordpress.com/2009/06/20/auto-generating-filenames-for-infopath-forms/
もう一つの一般的な方法は、"OccurrenceID"という別のカラムを作成することです。そして、ワークフローで設定リストの値に基づいて値を設定します。
オカレンス設定という別のカスタムリストを作成し、値という新しい列を作成します(1行のテキストに設定)。
アイテム(Title: NextOccurenceID, Value: 1)を作成します。
オカレンスリスト(設定リストではない)にシェアポイントリストワークフローを作成します。 Occurrence IDフィールドをNextOccurrenceIDに設定します。次に、設定リストの項目をNextOccurrenceID + 1になるように更新します。 作成時のみトリガーするように設定します。
すると、アイテムが作成された後、選択した特定の識別子が割り当てられ、自動的にインクリメントされます。 デメリットは、ワークフローの設計上、アイテムが作成された後のある時点で発生するため、値がすぐに設定されないことです。
ご参考になれば幸いです。:)
シェアポイントリストアイテムには、すでに一意のID列があります。! そのフィールド名は「ID」と呼ばれます。
このカントに基づいて、この番号を使用します? または、「14-0002」の形式である必要がありますか。
コードを通じてそれを行うことができます。! イベントハンドラーを作成する必要があります。 追加されていないイベントを追加する必要があります。... ユーザーが新しいアイテムを作成するとき、最初にitemAddingコードを実行します。 コード内でリストを実行し、最新のIDを取得して、ID列にIDコードを追加する必要があります。... まだ存在していないため、自動生成された次のIDを直接プルすることはできません。
私にとっては、追加されたアイテムではそれをしません。! ただし、デフォルトのIDはそのまま使用すると問題ありません。! ただし、必要に応じて、アイテムを追加するときにユーザーが表示できる作成部分に表示できませんでした。.. むしろ、アイテムが追加されたイベントを使用できます。これは、ユーザーがリストアイテムを送信した後に発生するため、一意のIDがすでに存在します。 固有のID列はビューの追加に非表示になるため、何も追加できませんが、アイテムを表示するときに表示できます。.. 次に、変数プロパティを使用して、自動生成されたidフィールドから一意のIDを取得し、そのIDを使用する一意の列に入力して、リストに追加します。 リストの最後のアイテムを取得して、一意のID列を取得し、最後の値を新しいvalに変更して、リストアイテムを更新できます。... または、IDに追加したいロジックを用意してください。!
コードによるプログラミングが多すぎる場合は、ワークフローを使用して、警告を実行できます。! そのシンプルで迅速。
http://dlairman.wordpress.com/2011/01/10/add-a-unique-auto-incrementing-column-to-a-sharepoint-list/。
うまくいきます。 私はSPServicesでプログラム的に行いました。
$(document).ready(function() {
var idquery="";
$().SPServices({
operation: "GetListItems",
async: false,
listName: "test",
CAMLQuery: idquery,
CAMLRowLimit: 1,
completefunc: function (xData, Status)
{
$(xData.responseXML).SPFilterNode("z:row").each(function() { //alert($(this).attr("ows_Title"));
var getvalue= parseInt($(this).attr("ows_Title"))+1;//Auto increment value $("input[title='TicketNumber']").val(getvalue);
});
}
});
1。 値1変数 parseInt($(this).attr( "ows_Title"))+ 1;
を取得します。
2。 テキストボックスをバインド TICKET Number 。