年次ごとの自動採番については、
年次ごとの自動採番を行うワザ
でも紹介されていますが、今回はこれを案件毎に採番する方法を解説します。
アプリは、アプリストアの「
営業支援パック
」を利用するので、追加しておいてください。
追加方法は次のページを参考してください。
サンプルアプリを追加する
案件情報を登録する時の「案件名」の初期値には、次のフィールドの値を連結した値が設定されます。
「案件種類」フィールドの値を変更すると、「案件種類」の値に合わせて「案件名」の値が変わります。
また、顧客管理アプリの「案件連番」フィールドに、顧客ごとの最新の案件連番を記録します。
そのため、案件情報レコードを保存するタイミングで、顧客管理アプリの「案件連番」フィールドを更新します。
デモ環境で実際に動作を確認できます。
ログイン情報は
cybozu developer networkデモ環境
で確認してください。
顧客ごとの最新の案件連番を管理するためのフィールドを追加します。
普段必要なフィールドではないので、グループで隠しておくのもよいかと思います。
フィールドタイプ |
フィールド名 |
フィールドコード |
説明 |
数値 |
案件連番 |
案件連番 |
初期値を0に設定します。 |
案件管理アプリにも、次のフィールドを追加します。
フィールドタイプ |
フィールド名 |
フィールドコード |
説明 |
数値 |
案件連番 |
案件連番 |
案件ごとの最新の連番を特定するために使います。 |
数値 |
顧客情報レコード番号 |
顧客情報レコード番号 |
顧客管理アプリを更新する際に、レコードを特定するために使います。 |
ドロップダウン |
案件種類 |
案件種類 |
項目を次のように設定します。 |
上記フィールドを追加した後、「顧客名」ルックアップフィールドの設定を変更します。
[ほかのフィールドのコピー]にて、[案件連番]および[顧客情報レコード番号]の値を取得するように設定します。
サンプルソースコードは次のとおりです。
エディタにコピーして、38行目の顧客管理アプリのアプリIDをご自身の環境に合わせて書き換えてください。
ファイル名を「sample.js」、文字コードを「UTF-8」で保存し、案件管理アプリに適用してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/*
* sample program
* Copyright (c) 2014 Cybozu
*
* Licensed under the MIT License
* https://opensource.org/license/mit/
*/
(() => {
'use strict';
// 案件種類フィールドの更新イベントを登録します
const change_events = [
'app.record.create.change.案件種類',
'app.record.edit.change.案件種類'
];
kintone.events.on(change_events, (event) => {
const record = event.record;
const matterName =
record['顧客名'].value +
'-' +
('00000' + record['案件連番'].value).slice(-5) +
'-' +
record['案件種類'].value;
// 「案件名」フィールドに連番を設定します
record['案件名'].value = matterName;
return event;
});
// 最新の案件番号で顧客管理アプリの「案件番号」フィールドを更新します
const submit_events = [
'app.record.create.submit'
];
kintone.events.on(submit_events, (event) => {
const app_id = '1'; // 顧客管理アプリのアプリID
const record = event.record;
const rec_id = record['顧客情報レコード番号'].value;
const seq = parseInt(record['案件連番'].value, 10) + 1;
// 案件連番更新リクエスト
kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT',
{
app: app_id,
id: rec_id,
revision: -1,
record: {
案件連番: {value: seq}
}
}, (resp) => {
let errmsg = 'An error occurred while updating records.';
if (resp.message !== undefined) {
errmsg += '\n' + resp.message;
alert(errmsg);
}
}
);
return event;
});
})();
|
サンプルコードの解説
固定リンクがコピーされました
フィールドの値を取得・編集する
固定リンクがコピーされました
レコード追加・編集画面で「案件種類」を変更した際に、次のフィールドの値を取得して結合し、「案件名」にセットします。
案件ごとの最新の連番を特定するために、ルックアップで取得した顧客管理アプリの「案件連番」の値を使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// 案件種類フィールドの更新イベントを登録します
const change_events = [
'app.record.create.change.案件種類',
'app.record.edit.change.案件種類'
];
kintone.events.on(change_events, (event) => {
const record = event.record;
const matterName =
record['顧客名'].value +
'-' +
('00000' + record['案件連番'].value).slice(-5) +
'-' +
record['案件種類'].value;
// 「案件名」フィールドに連番を設定します
record['案件名'].value = matterName;
return event;
});
|
レコードを保存する際に、「案件連番」フィールドの値をインクリメントしてから、その結果を使って、顧客管理アプリの「案件連番」フィールドの値を更新します。
連番を更新するレコードの特定には、ルックアップで取得した顧客情報レコードIDを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 最新の案件番号で顧客管理アプリの「案件番号」フィールドを更新します
const submit_events = [
'app.record.create.submit'
];
kintone.events.on(submit_events, (event) => {
const app_id = '1'; // 顧客管理アプリのアプリID
const record = event.record;
const rec_id = record['顧客情報レコード番号'].value;
const seq = parseInt(record['案件連番'].value, 10) + 1;
// 案件連番更新リクエスト
kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT',
{
app: app_id,
id: rec_id,
revision: -1,
record: {
案件連番: {value: seq}
}
}, (resp) => {
let errmsg = 'An error occurred while updating records.';
if (resp.message !== undefined) {
errmsg += '\n' + resp.message;
alert(errmsg);
}
}
);
return event;
});
|
顧客管理の案件連番更新に関する一連の処理は、案件登録時のapp.record.create.submit
イベントを元に、別のアプリのフィールドを更新します。
しかし、顧客管理が更新中の場合や、削除されている場合、連番は更新されません。
また、サンプルコード内のchange_events
変数に指定されていないフィールドの値を変更した場合は、手作業の修正による対応が必要となります。
以上のように、顧客ごとの連番整合性は限定的ですのでご注意ください。