LoginSignup
1
0

More than 3 years have passed since last update.

kintone-編集画面で検索、複数ルックアップ

Posted at

概要

この記事では、下記の処理を行うjsコードを掲載しております。
1. アプリBの編集画面で検索を行う。
2. 条件に合致するアプリAの値をアプリBのサブテーブルに入力する。

注意事項

サンプルコードは、その動作を保証するものではありません。
サンプルコードの技術的なサポート等は行っていません。
あくまで備忘録的な記事のため、コードは汚いです。

利用イメージ

アプリA
image.png

アプリB
image.png

image.png

準備

フィールド作成

kintoneに2つのアプリを作る。
アプリA

フィールドの種類 フィールド名 フィールドコード(要素ID) その他
レコード番号 レコード番号 レコード番号
文字列(1行) 文字列 (1行) 文字列 (1行)
数値 数値 数値
日付 日付 日付

アプリB

フィールドの種類 フィールド名 フィールドコード(要素ID) その他
スペース search_btn
文字列(1行) 文字列(1行) 検索用文字列__1行
日付 日付≦ 検索日付1
日付 ≦日付 検索日付2
数値
※meisaiTable
レコード番号 appBレコード番号
文字列(1行)
※meisaiTable
文字列(1行) appB文字列__1行
数値
※meisaiTable
数値 appB数値
日付
※meisaiTable
日付 appB日付

サンプルコード

それでは、やっとコードの紹介をします。

(function() {
    "use strict";
    kintone.events.on(['app.record.create.show'], function(e) {
        var date_start = "";
        var date_end = "";
        var mojiretsu="";
        var orderdatas = {};
        var body = {
            'app': 7 // アプリAのID
        }
        // 任意のスペースフィールドにボタンを設置
        var mySpaceFieldButton = document.createElement('button');
        mySpaceFieldButton.id = 'search_btn';
        mySpaceFieldButton.innerText = '検索';
        // 検索ボタンクリック
        mySpaceFieldButton.onclick = function () {
            //検索に必要な画面項目の取得 
            var record = kintone.app.record.get();
            mojiretsu = record.record.検索用文字列__1行.value;
            date_start = record.record.検索日付1.value;
            date_end = record.record.検索日付2.value;
            var tabledata = record.record.meisaiTable.value;
            if(typeof tabledata[0].value['appB文字列__1行'].value !== "undefined"){
                alert("テーブルに残っています。「クリア」ボタンをクリックしてください。")
                return;
            }
            if(typeof mojiretsu === "undefined"){ // 画面の入力状態で、検索クエリを変える
                alert("文字列__1行を入力してください。")
                return;
            }else if(typeof date_start === "undefined" & typeof date_end === "undefined"){
                body = {
                    'app':7,
                    'query': '文字列__1行 = "' + mojiretsu + '"'
                }
            }else if(typeof date_start === "undefined"){
                body = {
                    'app': 7,
                    'query': '文字列__1行 = "' + mojiretsu + '" and 日付 <="'+ date_end + '"'
                }
            }else if(typeof date_end === "undefined"){
                body = {
                    'app': 7,
                    'query': '文字列__1行 = "' + mojiretsu + '" and 日付 >="'+ date_start + '"'
                }
            }else{
                body = {
                    'app': 7,
                    'query': '文字列__1行 = "' + mojiretsu + '" and 日付 >="'+ date_start + '" and 日付 <="'+ date_end + '"'
                }
            }
            // cracpiからデータを取得
            kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
                resp.records.forEach(function(record) {
                        var appAno = record['レコード番号'].value;
                        var appAmoji = record['文字列__1行'].value;
                        var appAnumber = record['数値'].value;
                        var appAdate = record['日付'].value;
                        orderdatas[appAno] = {
                            "レコード番号":appAno,
                            "文字列__1行": appAmoji,
                            "数値": appAnumber,
                            "日付": appAdate,
                        }
                });
                setData();
            });
        }

        kintone.app.record.getSpaceElement('search_btn').appendChild(mySpaceFieldButton)    

        function setData() {
            var record = kintone.app.record.get().record;
            var TableB = record["meisaiTable"].value;
            var index = TableB.length - 1;

      // テーブル初期化
            for (var i = 0; i <= index; i++) {
                TableB.splice(0, 1);
            }

      // 取得したデータをテーブルに追加
            for (var key in orderdatas) {
                TableB.push({
                    value: {
                        "appBレコード番号": {value: Number(orderdatas[key]["レコード番号"]), type: "NUMBER"},
                        "appB文字列__1行": {value: orderdatas[key]["文字列__1行"], type: "SINGLE_LINE_TEXT"},
                        "appB日付": {value: orderdatas[key]["日付"], type: "DATE"},
                        "appB数値": {value: Number(orderdatas[key]["数値"]), type: "NUMBER"}
                    }
                });
            }
            kintone.app.record.set({record: record});
        }
    });
})();
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0