cybozu developer network

カテゴリー内の他の記事

顧客ごとの自動採番

(著者:サイボウズ 佐藤 紅志)

年次ごとの自動採番については、以前の年次ごとの自動採番を行うワザで既に紹介されていますが、今回はこれを案件毎に採番する方法を解説させて頂きます。とは言っても、利用するアプリは2つです。

具体的には、アプリストアの「営業支援(SFA)パック」を利用して、案件情報を登録する時の「案件名」に、任意のフィールド情報と共に、ルックアップで取得された「顧客ごとの連番」を文字列連結した上で、デフォルト表示を行うというものです。

ご利用される場合は、このアプリパックをkintoneアプリストアから追加して下さい。

デモ環境

デモ環境で実際に動作を確認できます。

ログイン情報は cybozu developer network デモ環境 で確認してください。

フォームイメージ

採番フォーマット

[顧客名]-[連番5桁]-[案件種類]

フィールドの設定

顧客情報アプリ

顧客ごとの連番を管理する必要がありますので、顧客情報アプリに採番管理用のフィールドを以下の内容にて追加します。※表記以外はデフォルトです。
追加するフィールド フィールド名 初期値 フィールドコード
数値 案件連番 0 案件連番
※普段必要なフィールドではないので、グループパーツで隠しておくのも良いかと思います。
 
次に上記案件連番を更新するために顧客情報のアプリIDが必要になるのですが、これを検索するためのアプリコードの設定を行います。設定は[アプリの設定]-[詳細設定]を展開-[高度な設定]画面より行います。
 

案件情報アプリ

案件情報アプリにも、上記の顧客情報アプリ同様の数値パーツフィールドを追加します。
また、後ほど顧客情報アプリの更新時に必要なレコード番号を取得するため、以下のフィールドを追加します。
追加するフィールド フィールド名 初期値 フィールドコード
数値 案件連番 0 案件連番
数値 顧客情報レコード番号 - 顧客情報レコード番号
上記2フィールドを追加した後、顧客名ルックアップフィールドの設定、[ほかのフィールドのコピー]にて、[案件連番]及び[顧客情報レコード番号]の値を取得するように設定します。

次に[案件名]に付与する任意のフィールドとして、以下の追加を行います。現在のapiバージョンでは、ルックアップフィールドのイベント取得ができないため、ここで追加するフィールドのイベントで案件名の設定を行います。

追加するフィールド フィールド名 項目と順番 フィールドコード
 ドロップダウン 案件種類  新規,追加,変更   案件種類

案件連番の取得と編集を行うソースコード

まず、レコード追加・編集画面で"案件種類"を変更したタイミングで、「案件名」に採番をおこなうサンプルです。
JavaScriptファイルができたら、「案件情報」アプリに適用しましょう。

連番を更新するソースコード

次に、レコードを追加した際に連番を更新するサンプルです。
JavaScriptファイルができたら、先ほど同様「案件情報」アプリに適用していきます。

ソースコードの解説

顧客ごとの連番を適用する部分については、ルックアップフィールドの設定内容にある、取得先の情報を利用しているため、ソースコードはとても簡単なコードとなっております。

連番を更新するソースコードにについても、同様で、ルックアップフィールド設定時に、顧客情報レコードIDを取得するようにしておりますので、レコードの特定には画面上の項目を利用しています。

アプリIDにつきましては、本記事執筆中にリリースされました2014/9/14リリースバージョンから、アプリ情報を取得するapiが追加されましたので、それを利用しました。名称や複数のコードを利用して、一括取得が可能なりましたが、ここでは設定したアプリコードから、アプリIDを取得しています

注意事項など

顧客情報の案件連番更新に関する一連の処理は、案件情報登録時の、'app.record.create.submit'イベントを元に、別のアプリのフィールドを更新しますが、顧客情報が更新中だったり削除されていた場合は当然の事ながら、更新はされません。また案件変更時も、イベント自体が対象外であり、また顧客が変更されたという情報も捕捉しておりませんので、手作業の修正による対応が必要となります。
 
以上のように、顧客ごとの連番整合性は比較的緩く維持されていることをご理解の上、ご活用下さいませ。

このTipsは、2014年9月版で確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
Yoshiaki Uchino

なるほど、ちょっとした工夫ですね。
いろいろなシーンで応用できそう。

Avatar
Koji Sato

Uchinoさん、コメントありがとうございます。
カスタマイズは極力禁欲的にしつつ、どうしても必要なところについても、なるべく簡潔なコードで対応できることを理想にして行きたいと思っております。

Avatar
Emma

こんにちは

↑のソースで、kintone.api.urlを使わなくて、直接 '/k/v1/record' を使っています。

下記、どの区別がありますか。

kintone.api('/k/v1/record', 'PUT',{}, function(resp){}, function(error){});

kintone.api(kintone.api.url('/k/v1/record',true), 'PUT',{}, function(resp){}, function(error){});

 

Emmaにより編集されました
Avatar
cybozu Development team

Emma様

ご質問いただきありがとうございます。cybozu developer network運営チームです。

kintone.api(kintone.api.url('/k/v1/record',true), 'PUT',{}, function(resp){}, function(error){});

urlの引数として”true”を渡す為に、kintone.api.url('/k/v1/record',true)のように書くわけです。

ゲストスペース内で実行するには、trueを指定します。

kintone.api('/k/v1/record', 'PUT',{}, function(resp){}, function(error){});はゲストスペースでは実行されません。

詳細はkintone REST API リクエストの「URL を取得する」のパラメータ「opt_detctGuestSpace」をご確認ください。

https://cybozudev.zendesk.com/hc/ja/articles/202166310#step3

Avatar
Emma

cybozu Development team さん:

ありがとうございます!

Avatar
mika

お世話になります。

製品アプリと是正改善アプリを作成し、製品ごとに是正改善案件の自動採番を実施しようとしています。

下記のとおり、参考に作成したのですが、是正改善連番の値が更新されません。

製品名-00000-改善 といった形になります。 ゲストスペースにアプリはあります。

どこを修正すればよろしいでしょうか。よろしくお願いします。

(function() {
"use strict";

// 分類フィールドの更新イベントを登録します
var events = [
'app.record.create.change.分類',
'app.record.edit.change.分類'
];

kintone.events.on(events, function(event) {
var record = event.record;
var matterName =
record['製品名']['value'] +
"-" +
("00000" + record['是正改善連番']['value']).slice(-5) +
"-" +
record['分類']['value'];
 
record['案件名']['value'] = matterName;
return event;
});

})();

(function() {
"use strict";

// Register the events.
var events = [
'app.record.create.submit'
]

kintone.events.on(events, function(event) {

var app_code = "AppIdInitialFlow001"; // 初期流動アプリのアプリコード

kintone.api(kintone.api.url('/k/v1/apps', true), 'GET', {"codes": [ app_code ]
}, function (resp) {
var app_id = resp.apps[0].appId;
var record = event.record;
var rec_id = record['初期流動レコード番号']['value'];
var seq = parseInt(record['是正改善連番']['value'])+ 1;

// 連番更新リクエスト
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT',
{
"app": app_id, "id": rec_id, "revision": -1, "record":{
"是正改善連番" : { "value": seq }
}
}, function(resp) {
}, function(resp) {
var errmsg = 'An error occurred while updating records.';
if (resp.message !== undefined){
errmsg += '\n' + resp.message;
alert(errmsg);
}
}
);
}, function (resp) {
var errmsg = 'An error occurred while getting records.';
if (resp.message !== undefined) {
errmsg += '\n' + resp.message;
alert(errmsg);
}
});
});
})();

Avatar
cybozu Development team

mika 様

お世話になっております。cybozu developer network 運営でございます。

恐れ入りますが、こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問はcybozu developer コミュニティをご活用ください。

よろしくお願い致します。

Avatar
mika

承知しました。

サインインしてコメントを残してください。