を参考にしましたが、 たとえば メニューのアプリが別にあり、商品番号からルックアップをしてメニュー名、金額を追加してテーブルで行追加をしていきます。 その際にメニューアプリに存在しないメニュー名と金額はマニュアル記入をさせたいのですがよい実装方法はありますでしょうか。
最終的に テーブル内の金額を合計金額で表示させたく
よろしくおねがいします
を参考にしましたが、 たとえば メニューのアプリが別にあり、商品番号からルックアップをしてメニュー名、金額を追加してテーブルで行追加をしていきます。 その際にメニューアプリに存在しないメニュー名と金額はマニュアル記入をさせたいのですがよい実装方法はありますでしょうか。
最終的に テーブル内の金額を合計金額で表示させたく
よろしくおねがいします
23件のコメント
GP-KIYOさん
手軽なのは、貼ってもらっているリンクにあるような方法で、ルックアップにおけるコピーフィールドのdisabledを都度外すという方法だと思います。
項目数次第では、ルックアップでコピーするフィールドとは別にて入力用のフィールドを準備しておき、ルックアップ時に(changeイベントで)手入力用のフィールドにルックアップでコピーしてきた値を同時にセットするというのはよくやります。前者はやや公式感が薄いので、対策的にやってる方法です。
早速の回答ありがとうございます。
可能であれば具体的なサンプルなどあると助かります。
実際に
(function(){
'use strict';
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event){
event.record["項目"].disabled = false;
event.record["単価"].disabled = false;
return event;
});
})();
といれましたが、編集不可のままになってしまいます。
サブテーブル中のフィールドであれば、
record.明細.value[0].value.項目.disabled = false;
のようなアクセスが必要かと思いますが、いかがでしょうか。あと、
> disabledを都度外す
というのがポイントで、サブテーブルの行を追加する度に対応が必要かと思います。
ありがとうございます。
(function(){
'use strict';
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event){
record.明細.value[0].value.項目.disabled = false;
record["テーブルでない項目名"].disabled = false;
return event;
});
})();
としましたが、 テーブルでない項目名も含めて編集不可の状態です。
disabledを都度外す については、テーブルで+が押されたら というアクションをキーにして編集可にしたらよいのかと思います(具体的にはわかっていませんが・・・・)
まずは根本的にルックアップから取り出す項目を編集可能にできないと進められないので困ってます。
失礼しました
var record = event.record;
が抜けてただけでした。
(function(){
'use strict';
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event){
var record = event.record;
record.明細.value[0].value.項目.disabled = false;
record.明細.value[0].value.単価.disabled = false;
record['テーブルでない項目名']['disabled'] = false;
return event;
});
})();
でまずはできました。
次にご指摘頂いている 行が追加された毎に編集可能にするアクションの実装ですね・・・。
https://cybozudev.zendesk.com/hc/ja/community/posts/201074074-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E8%A1%8C%E8%BF%BD%E5%8A%A0%E6%99%82%E3%81%AB%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%86%85%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92disable%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84
を拝見しました。 まっまさかの 行追加時のイベントは無いのですか・・・・・。
行の追加削除は、サブテーブルのフィールドコードのchangeイベントで拾えます。最近追加された eventのchangesプロパティが利用できれば楽に実装できそうです。changesプロパティはドキュメントやこちらが参考になると思います。
ありがとうございます
見よう見まねで 下記のようにしてみましたが、だめですね。。
(function() {
"use strict";
kintone.events.on([
'app.record.create.change.項目',
'app.record.edit.change.項目',
'app.record.create.change.単価',
'app.record.edit.change.単価'
], function(event) {
var changes = event.changes;
changes['row'].value.['項目'].disabled = false;
changes['row'].value.['単価'].disabled = false;
return event;
});
})();
行追加は、サブテーブルのフィールドコードの変更イベントで拾われるので、効いてないかと思います。
サブテーブルのchangeイベントにおけるevent.changes.rowが対象の行プロパティです。event.changesやその配下のオブジェクトを、ブレイクポイントを貼るなりconsoleに出すなりして確認されながら進めるとつかみやすいと思います。
ありがとうございます。
いろいろとヒントいただきながら申し訳ございませんがちょっと私にはお手上げです。
ここまでの情報から書き起こすと、こんな感じでしょうか。
ありがとうございます!
まさにやりたいことができました。
頂いたコードだと0行目は編集不可でしたので、下記の通りにしてみました。
これから本番環境の項目に入れ込んでみたいと思います。
(function() {
"use strict";
// 新規登録・編集画面
kintone.events.on(['app.record.create.show', 'app.record.edit.show'], function(event) {
var record = event.record;
record.明細.value[0].value.項目.disabled = false;
record.明細.value[0].value.単価.disabled = false;
// 通常のフィールドのdisabled解除処理
record['テーブルではない項目']['disabled'] = false;
// 「明細」サブテーブルのdisabled解除処理
var subtable = record['明細'].value;
for (var i = 0; i < subtable.length; i++) {
subtable[i].value['単価'].disabled = false;
subtable[i].value['項目'].disabled = false;
}
return event;
});
// 「明細」サブテーブルの変更イベント(行追加削除を拾う)
kintone.events.on(['app.record.create.change.明細', 'app.record.edit.change.明細'], function(event) {
// 「明細」サブテーブルのdisabled解除処理
var row = event.changes.row;
row.value['単価'].disabled = false;
row.value['項目'].disabled = false;
return event;
});
})();
> 頂いたコードだと0行目は編集不可でしたので、
手元で試した感じだと出なかった事象なので、原因は調べておいた方がいいかもしれませんね(for文の中で0行目の指定もされている訳で、0を単発で指定した際との違いがわかりません)。ちなみに、for文にしたのはサブテーブルが複数行のレコード編集時に0しか対応できないのは困るかと考えてのことでした。
サブテーブル行が0件でも、編集画面上は1行分の編集エリアが表示されるようです。
上記コードですと、何らかの原因でサブテーブル行が0件になっていると0行目は編集不可になります。
サブテーブル行が0件の場合、1行分のサブテーブル内の項目データを追加してから、disabled解除処理を行うと対応できます。
登録がREST APIでなされ、その際にサブテーブルの値を設定しないケースだと、編集時にサブテーブル部分の配列が0行(見た目は1行)になるためですね。見た目とコードが合ってないのがどうかという話はありますが。
ルックアップコピー項目を編集可能にする処理をプラグイン化しました。
http://qiita.com/rex0220/items/7fd6279c04346952221f
無料公開しますので、ご興味のある方はお試しください。
プラグイン素晴らしいです! これで私のような素人でも活用できます。
ありがとうございます
プラグイン利用し始めたのですが、 ユーザによって編集不可のままになってしまうケースが発生しています。
ルックアップフィールド以外の項目に対して編集アクセス権限をつけているユーザで発生しています。
GP-KIYO さん
発生条件がよくわからないのですが、どのような設定を行っているのでしょうか?
ルックアップ項目、ルックアップコピー項目、編集アクセス権限を付加している項目と設定内容など
具体的に教えていただけますか?
もし、ルックアップコピー項目に、編集アクセス権限で編集不可の設定を行っているのであれば
編集不可となると思います。
アプリ管理者の権限があるA,Bというユーザがいて
Aはプラグインの設定画面でルックアップフィールドの一覧が見れるのですが、Bは一覧はでてこず、保存とキャンセルボタンだけがでてきて、ボタン自体は押せない事象が出ています。
同じPC同じブラウザでログインIDを変えてテストしても上記の事象がでます。
原因がわからずご教授いただけると幸いです
GP-KIYO さん
現象からプラグイン処理を見直したところ、不要なルックアップ元のフォーム情報取得処理がありました。
ルックアップ元のフォーム情報を取得するだけで使っていない。
他のプラグインから処理を流用した時に、本プラグインでは不要な処理が残ってしまったようです。
Aさんがルックアップ元のアプリ管理権限を持ち、Bさんが持っていないと同現象になると思います。
不要処理を削除したプラグインを公開しましたので、試してみてください。
https://rex0220.stores.jp/
kintone ルックアップコピー項目編集プラグイン Ver.2
さっそくありがとうございます。 事象解決しました。