前提・実現したいこと
kintoneにて検索窓の追加を実現しようとしています。
Javaは検索や助言をもらいながら作成をしており、全くの初心者です。
他の場所の情報から下記を作成し実施したところ、表示させるところまでは実現する事ができました。
しかし検索が思うようにできません。(クエリの構文がよくないみたい?)
必要な情報は後ほど載せるようにいたしますが、
変更点も含めご助言をいただけないでしょうか。
発生している問題・エラーメッセージ
エラーメッセージ 1つ目の窓に入力すると検索できるが、2つ目、3つ目と他の窓に入れるとエラーになる。 ### 該当のソースコード // 設定値 const FIELD_CODE1 = "フィールドコード1"; const FIELD_CODE1_NAME = "検索名1"; const AND_OR1 = "and"; // 必ず小文字 const FIELD_CODE2 = "フィールドコード2"; const FIELD_CODE2_NAME = "検索名2"; const AND_OR2 = "and"; // 必ず小文字 const FIELD_CODE3 = "フィールドコード3"; const FIELD_CODE3_NAME = "検索名3"; const AND_OR3 = "and"; // 必ず小文字 const FIELD_CODE4 = "フィールドコード4"; const FIELD_CODE4_NAME = "検索名4"; // 一覧表示のタイミングで実行 (function () { "use strict"; kintone.events.on("app.record.index.show", function (event) { // GET引数に格納された直前の検索キーワードを取得して再表示する var result = {}; var query = window.location.search.substring( 7 ); // URL固定部分(?query=)は無視 // クエリ検索条件の区切り記号 (and/or) で分割 var parameters = query.split( AND_OR1 ); // フィールドコード名と検索キーワードに分割する for( var i = 0; i < parameters.length; i++ ){ var element = parameters[ i ].split( 'like' ); var paramName = decodeURIComponent( element[0] ); var paramValue = decodeURIComponent( element[1] ); // スペースと""をtrimして、文字列だけにしてから、配列に格納 result[ paramName.replace(/^\s+|\s+$/g, "") ] = paramValue.replace(/^[\s|\"]+|[\s|\"]+$/g, ""); } // 検索キーワードその1 var search_word1 = document.createElement('input'); search_word1.onkeypress = function(e) { if (e.keyCode && e.keyCode == 13) { keyword_search(); } } if(result[ FIELD_CODE1 ] != undefined){ search_word1.value = result[ FIELD_CODE1 ]; // GET引数に、直前の検索キーワードがあったら格納しておく } // 検索キーワードその2 var search_word2 = document.createElement('input'); search_word2.onkeypress = function(e) { if (e.keyCode && e.keyCode == 13) { keyword_search(); } } if(result[ FIELD_CODE2 ] != undefined){ search_word2.value = result[ FIELD_CODE2 ]; // GET引数に、直前の検索キーワードがあったら格納しておく } // 検索キーワードその3 var search_word3 = document.createElement('input'); search_word3.onkeypress = function(e) { if (e.keyCode && e.keyCode == 13) { keyword_search(); } } if(result[ FIELD_CODE3 ] != undefined){ search_word3.value = result[ FIELD_CODE3 ]; // GET引数に、直前の検索キーワードがあったら格納しておく } // 検索キーワードその4 var search_word4 = document.createElement('input'); search_word4.onkeypress = function(e) { if (e.keyCode && e.keyCode == 13) { keyword_search(); } } if(result[ FIELD_CODE4 ] != undefined){ search_word4.value = result[ FIELD_CODE4 ]; // GET引数に、直前の検索キーワードがあったら格納しておく } // 検索ボタン var search_button = document.createElement('button'); search_button.innerHTML = '検索'; search_button.onclick = function () { keyword_search(); }; // キーワード検索の関数 function keyword_search(){ var keyword1 = search_word1.value; var keyword2 = search_word2.value; var keyword3 = search_word3.value; var keyword4 = search_word4.value; var str_query = '?query='+ FIELD_CODE1 +' like "' + keyword1 + '" ' + AND_OR +' '+ FIELD_CODE2 +' like "' + keyword2 + '" ' + AND_OR +' '+ FIELD_CODE3 +' like "' + keyword3 + '" ' + AND_OR +' '+ FIELD_CODE4 +' like "' + keyword4 + '"'; if(keyword1 == "" && keyword2 == "" && keyword3 == "" && keyword4 == ""){ str_query = ""; }else if(keyword1 != "" && keyword2 == "" && keyword3 == "" && keyword4 == ""){ str_query = '?query='+ FIELD_CODE1 +' like "' + keyword1 + '"' }else if(keyword1 == "" && keyword2 != "" && keyword3 == "" && keyword4 == ""){ str_query = '?query='+ FIELD_CODE2 +' like "' + keyword2 + '"' }else if(keyword1 == "" && keyword2 == "" && keyword3 != "" && keyword4 == ""){ str_query = '?query='+ FIELD_CODE3 +' like "' + keyword3 + '"' }else if(keyword1 == "" && keyword2 == "" && keyword3 == "" && keyword4 != ""){ str_query = '?query='+ FIELD_CODE4 +' like "' + keyword4 + '"' } // GET変数を使って、検索結果へジャンプ! document.location = location.origin + location.pathname + str_query } // キーワード入力部品を、kintoneヘッダ部分に埋め込む(重複を避けるため、最初に要素をクリアしておく) var aNode = kintone.app.getHeaderMenuSpaceElement() for (var i =aNode.childNodes.length-1; i>=0; i--) { aNode.removeChild(aNode.childNodes[i]); } var label = document.createElement('label'); label.appendChild(document.createTextNode(FIELD_CODE1_NAME)); label.appendChild(search_word1); label.appendChild(document.createTextNode(' '+ AND_OR +' ')); label.appendChild(document.createTextNode(FIELD_CODE2_NAME)); label.appendChild(search_word2); label.appendChild(document.createTextNode(' '+ AND_OR +' ')); label.appendChild(document.createTextNode(FIELD_CODE3_NAME)); label.appendChild(search_word3); label.appendChild(document.createTextNode(' '+ AND_OR +' ')); label.appendChild(document.createTextNode(FIELD_CODE4_NAME)); label.appendChild(search_word4); label.appendChild(document.createTextNode(' ')); label.appendChild(search_button); kintone.app.getHeaderMenuSpaceElement().appendChild(label); return event; }); })(); ソースコード
試したこと
特になし
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー