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

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

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

## 利用イメージ
アプリA
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374573/2e62c3d5-c822-7d7e-ac7c-8722c0149d73.png)

アプリB
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374573/99ea5900-b2d4-fed9-4c04-d2cf22c31dfc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374573/a2e3e026-3550-3f71-a4f0-6b9c94318da3.png)

# 準備
## フィールド作成
kintoneに２つのアプリを作る。
アプリA

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

アプリB

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


# サンプルコード
それでは、やっとコードの紹介をします。

```js
(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});
        }
    });
})();
```