新規投稿
フォローする

[Javascript API]ルックアップフィールドの「クリア」機能の実装の提案と、現時点での対策について

株式会社レキサスの村濱です。

下記リファレンスにあるように、現在JavascriptAPIにてルックアップの自動取得が可能になっています。

https://cybozudev.zendesk.com/hc/ja/articles/201941984-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E8%BF%BD%E5%8A%A0%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88#step8

しかし、ルックアップフィールドは、なんらか値を取得したあと、リセットしたい場合は「クリア」ボタンを押す必要があります。
※クリアボタンを押さなければ、レコードの保存/更新ができず、他のフィールドのコピーした項目もリセットされない。

例えば、「ルックアップフィールドはプルダウンなどと連携させたい」場合など、ルックアップフィールドへの値の挿入はJavascriptにて行えるのですが、その後リセットができなくて困る点が多々あります。
javascriptからの「クリア」機能の実装を希望しています。


現状、上記のような問題を回避する方法としては、
「ルックアップ参照元のアプリに、空欄と同等のレコードを用意する」という手段があります。
例えば、アプリBが、アプリA(例えば住所マスタ)から住所の情報を取り出したい場合は下記のようにしています。

アプリA(ルックアップ参照元アプリ)
1. なし  ←空欄と同等のレコード。デフォルト値として扱う
2. 東京都
3. 沖縄
:

このようにアプリAを設定することで、アプリBでルックアップフィールドで「なし」を選択できるようになるので、ルックアップフィールドを空欄に設定するのと同等のことは可能です。

7

5件のコメント

Avatar
cybozu Development team

<2017/06/16更新>JavaScript developer向けフォーラムから移動させていただきました。 

0
Avatar
AKAZA Hisaki

@サイボウズさん

これ、最近僕もとても困っています。

JS APIでの「クリア」機能の実装を何とかしていただけないですかね・・・

 

村濱さんのhackで確かにそれっぽいことはできますが、

手動操作の時は「クリア」を押してデータを空にするわけなので、

それがJSで自動的にできないと、開発時の選択肢がとても狭まってしまいます。

 

他のスレッドでもたくさん言及されてて、

以前から要望がかなり多い割にスルーされてる印象を受けます。

色々と開発の優先順位はあると思いますが、ぜひ真剣に検討お願いします!

0
Avatar
AKAZA Hisaki

切実さを分かっていただきたいので、具体例を挙げてみました。

 

例)

・「受注」アプリに「請求書番号」ルックアップフィールドがある

・受注レコードの新規作成時点では請求書番号は入らない

・「請求書」アプリのレコード作成時に、REST API経由で「受注」アプリの「請求書番号」を自動設定

 (その際「請求書番号」が空の受注レコードは無視する)

・過去の確定済み「受注」レコードを複製した際に「請求書番号」は自動削除

 

上記を実現したい場合、JS APIでの「クリア」ができれば

'app.record.create.submit'イベントで確実に値を削除することができますが、

submit時に「値を空にしただけ」 or 「空にしてlookup = true」では

無視されて元の値のまま確定されてしまいます。

 

村濱さん方式を使う場合、「請求書番号が空」という判定ができず、ロジックが複雑になってしまいます。

またsubmit.successイベントでREST APIで更新する手段もありますが、

「今編集しているレコードの値の書き換え」はなるべくJS APIで行いたいです。

 

上記の理由により、現状では'app.record.create.show'イベントを使っています。

 

ルックアップフィールドがdisabledになっている場合、

「取得」「クリア」をしなくてもフィールドの値を確定できるようなので、

create.showの時点でルックアップの値を空にしてやれば、そのまま確定できます。

ただ「ほかのフィールドのコピー」を使っている場合は、

それらのフィールドも全てJSで書き換えてやる必要があり、面倒です。

 

ルックアップフィールドがdisabledになっていない場合は、

JSで値を空にだけして、ユーザーに「クリア」ボタンを押してもらう必要があります。

クリアせずに確定するとエラーになりますが、

「エラーになったらクリア」という運用カバーにすることで、

「ルックアップが紐づいたまま確定してしまう状態」だけは避けることができます。

 

 

 

いずれにしても、JS APIでの「クリア」さえできれば、

上記のような努力をしなくて済み、submitで一発OKなので、

とても幸せになれるのであります。分かっていただけますでしょうか・・・

 

どうぞよろしくお願いします!!!

0
Avatar
ひらの

当件、埋もれないようにコメントのみ記載します。私も「切望」いたします。

0
Avatar
ひらの

https://developer.cybozu.io/hc/ja/articles/201941984-レコード追加イベント

にあるサンプル

> kintone.events.on('app.record.create.show', function(event) {
>   var record = event.record;
>   record['ルックアップ']['lookup'] = 'CLEAR';
>   return event;
> });

 

にて対応しました。このイベントは複製時にもキックされるようですので、今のところうまく動いています。

(昔からこのプロパティー設定があったのかは不明)

 

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