[kintone] JavaScriptによるボタンの追加とページ遷移

※追記で、kintoneの標準機能によるリンク作成の方法を記載しました。

# JavaScriptによるボタン追加とページ遷移
行うことは、
・kintoneのカスタマイズで標準に無いボタンの設置
・ボタンの機能は、他ページへの遷移
とする

※この機能だけなら「ラベル」フィールドでリンクでええやん。アクションの設定でええやん。　と思うかもしれなが、カスタマイズの練習を兼ねている事と、もしかすると今後このボタンのワンクリックでいろいろ済むようにするかもしれない。ということで。進めて行く。

# ボタンの設置について
標準機能に無い、ボタンの設置を設定していく。

以下手順
１　ボタン設置用のスペースを事前に追加しておく（kintone標準機能）
２　jsでボタン要素を生成
　　２－１ボタンにＩＤ属性の設定
　　２－２ボタンの表示テキスト（innerText）の設定
３　class属性の追加
４　onclick時の動作設定
５　事前に用意したボタン設置用スペースを取得して、新規生成した要素を設置用スペースの子要素に挿入

# 今回のコード
```diff_javascript
//ボタン追加用の関数
let addButton = function(event){    
    let addSoftButton = document.createElement('button');
    addSoftButton.id = 'add_soft_button';
    addSoftButton.innerText = '遷移用ボタン';
    addSoftButton.classList.add('kintoneplugin-button-dialog-ok');
    addSoftButton.onclick = function(){
      window.open('https://*****.cybozu.com/','_blank');
    };
    kintone.app.record.getSpaceElement('button_ref').appendChild(addSoftButton);
};
```

```diff_javascript
//ボタン追加の関数を発火するイベントの設定
kintone.events.on(['app.record.detail.show'
                  ,'app.record.edit.show'
                  ,'app.record.create.show'
                  ],function(event) {
  //ボタンの追加
  addButton(event);
  
  return event;
});
```

# kintoneのフィールド追加操作とコードの説明

## ボタン設置用のスペースの追加
kintoneでの操作
ドラッグアンドドロップでボタン設置用にスペースフィールドを追加する
![2022-07-04_11h35_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953679/827da4da-e4d1-146b-83c2-589f4d0a5467.png)

## JavaScriptでボタン要素を生成
kintoneではJavaScript(以後JS)による機能のカスタマイズが可能。
JSEdit for kintoneというプラグインで書き込んでいく。

### JSでボタン要素を生成
```diff_javascript 
let addSoftButton = document.createElement('button');
```

### 生成したボタン要素にID,表示テキスト,classを追加
※classを追加する理由はボタンのデザインをkintoneの仕様に合わせるため
```diff_javascript 
addSoftButton.id = 'add_soft_button';
addSoftButton.innerText = '遷移用ボタン';
addSoftButton.classList.add('kintoneplugin-button-dialog-ok');
```

:::note info

class設定なし
![2022-07-04_11h53_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953679/a270aaba-71d9-a381-b851-1d048dd5da83.png)
class設定あり
![2022-07-04_11h53_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953679/3e414146-d54a-d35a-a142-2a541da91d66.png)
:::

### onclick時の動作設定
※URLの「*****」部分はそれぞれの利用者ごとのサブドメイン
```diff_javascript
    addSoftButton.onclick = function(){
      window.open('https://*****.cybozu.com/','_blank');
    };
```
:::note info
遷移方法

* 同タブ内でページ移動
   ```diff_javascript
   location.href = '遷移先のURL'
   ```

* 別タブで開く 
   ```diff_javascript
   window.open('遷移先のURL','新しいウィンドウの開き先')
   ```

:::

### ボタン設置用に用意したスペースフィールドにボタンを設置
```diff_javascript
kintone.app.record.getSpaceElement('button_ref').appendChild(addSoftButton);
```


# 所感
ボタンの追加は、
・開き方を別タブか同タブか
・ボタンのスタイル
を気にする程度かと思う。

動作に関しては、要望に応じてonclick内を変更していけばよい。

今回は、「ルックアップ先に必要なデータがなかったら、先にルックアップ先でデータを登録してね。」という状況の時に隣に遷移ボタンがあれば忘れにくいだろうということで、取り急ぎ追加してみた次第。

以上、標準に無いボタンの追加でした。

# 追記
ページ遷移ですが、
ラベル機能を利用する事で、ボタン作成、ページ移動と同様の動作を実現できます。

ラベルフィールドを追加して
文字に対してリンクを設定する
![2023-01-27_16h16_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953679/8bfdc33a-2ba8-b746-0a2f-7a0de92cc609.png)

以上で文字をクリックすることで、ページ遷移ができるフィールドになります。

今回のボタン作成はJavaScriptの練習の参考にしてください。