新規投稿
フォローする

文字列(1行)の自動計算にルックアップルックアップは使えますか?

文字列(1行)の自動計算フィールドに、ルックアップフィールドを複数結合して表示することは可能ですか?

ルックアップのフィールドコード:A
ルックアップのフィールドコード:B
ルックアップのフィールドコード:C

文字列(1行)の自動計算式:A & B & C

試したところ、このような項目を3箇所作りたいのですが、1箇所は正しく結合されて表示され、他の2箇所は「#N/A!」と表示されます。

ルックアップのフィールドを結合することはできないのでしょうか?

1

6件のコメント

Avatar
山下 竜

 hiroko5572 さん、こんにちは。

 Excelのルックアップでもそうですが、「#N/A!」は検索等の対象が無い場合に出るようです。2、3箇所目において、A & B & Cをやるときにいずれかの元の値が入力されていないということはありませんでしょうか?

 ルックアップされた文字列1行、数値のフィールドを2箇所まで結合したことがありまして、3箇所目も試させて頂きましたが、結合に用いるフィールドに重複がありますが、意図通りの動きをしてくれています(個数の問題ではなさそうです)。

 2、3箇所目のフィールドに上記のような可能性は考えられませんでしょうか?

0
Avatar
hiroko5572

山下さん、お世話になります。
ご返信どうもありがとうございます。
ご指摘の通り、ABC全ての項目に値が入っていないと、正しく結合できないようですね。
入力がある場合のみ結合する、としたい場合は、JSで指定することになりますか?
何かサンプルはありますか?

0
Avatar
山下 竜

hiroko5572 さん

下記のような感じで、実現出来るのではないかと思います。

イベントとしては、「レコード追加画面の保存実行前イベント」
https://developers.cybozu.com/ja/kintone-api/apprec-createjsapi.html#i-2
等を利用したいところですが、ルックアップフィールドは現状対象に含まれていませんので、

「レコード追加画面の保存実行前イベント」
https://developers.cybozu.com/ja/kintone-api/apprec-createjsapi.html#i-2
等を利用しています。

また、条件分岐等が必要であれば追加してみてください。

(function () {

"use strict";

kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event){

    var record = event.record;

    // ルックアップ元のアプリからキーを設定してレコード取得
    var query = 'companyName="' + record['lookup']['value'] + '"';
    var appUrl = kintone.api.url('/k/v1/records') + '?app='+ kintone.app.getLookupTargetAppId('lookup') + '&query=' + encodeURIComponent(query);
    var xmlHttp;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", appUrl, false);
    xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
    xmlHttp.send(null);
    var lookupObj = JSON.parse(xmlHttp.responseText);
    //console.log(lookupObj);

    // 文字列を結合し、保存時に値が保存されるようrecordオブジェクトに格納(自動計算の代用)
    // 該当レコードは1つという前提でインデックスは0を指定
    record['combination']['value'] = lookupObj['records'][0]['record_no']['value'] + '-' + lookupObj['records'][0]['charge']['value'];

    return event;

});

kintone.events.on(['app.record.create.show','app.record.edit.show'], function(event){

    // 結合された値を格納するフィールドを入力不可にする
    var record = event.record;
    record['combination']['disabled'] = true;
    return event;

});

})();

またご不明な点がありましたら、書き込み頂ければと思います。

1
Avatar
山下 竜

ルックアップでの取得ボタンを押した際に自動計算(文字列結合)がどのようにおこなわれるかについては結果として幾つか候補がありそう(こう出力して欲しいというのが要件によって変わりそう)ですので、なかなか難しいところかと思います。

入力の有無による条件分岐等制御もあるということで、JSで実現することになろうかと思います。

0
Avatar
hiroko5572

山下さん、ご回答ありがとうございます。
アプリに少しずつJSを組み込んでいまして、イベント時の処理でやりたいことができました。
また、困った時にアドバイスお願いいたします。

0
Avatar
山下 竜

良かったです。JSも機能が充実してきていますので、ご不明な点はまた書き込み頂ければと思います(^^)

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