LANG SELRCT

コードを書く場所

2019年5月27日月曜日

JIRAの設定で解決状況が選択されていなかったらステータスをDoneにできなくする


1.Project settingsをクリックします


2.Workflowsをクリックして、Actionsの鉛筆アイコンをクリックします


3.Done(31)をクリックします


4.ValidationsタブをクリックしてAdd validatorをクリックします


5.Field Required ValidatorのラジオボタンをチェックしてAddボタンをクリックします


6.Available fieldsからResolutionを選択して「Add >>」をクリックします


7.
① Required fieldsにResolutionが追加されたことを確認して
② Error messageに表示したいメッセージを入力して
③ Addをクリックします


8.このように設定されるので、Publish Draft をクリックして反映させます


9.YesかNoを選択してPublishボタンをクリックします


10.To Doの課題でResolutionを選択せずにDoneをクリックします


11.設定したエラーメッセージが表示されます


12.Resolutionを選択して✔をクリックして確定後、再度Doneをクリックすると


13.DONEにできます


補足

解決フィールド値を定義する
を見ると、ステータスを完了にする時
解決状況を選択する画面を表示できそうなことが書かれていました
(日本語はちょっとあやしい)
しかしその方法は書かれていなくて、ちょっとググっただけではそれらしき情報にたどり着くことができませんでした。

探しているうちに今回の方法を実現する方法にたどり着きました。


JIRAのステータスをDoneにしたとき解決状況を自動で変更したくない


初期設定のままではワークフローのステータスを「Done」にすると
Resolutionも自動的に「Done」になります。


これは事後操作でそういうふうに自動化する処理が入っているためです。

今回はその事後操作を削除して、自動でResolutionが「Done」にならないようにしていきます。


1.Project settingsをクリックします


2.WorkflowsをクリックしてActionsの鉛筆アイコンをクリックします


3.Done(31)のリンクをクリックします

4.Post Functionのタブをクリックすると
1番目にThe Resolution of the issue will be set to Done.
という設定があります。これが自動で解決状況を「Done」にしている事後操作です
その行にマウスを合わせると右端に✕アイコンが出てくるのでクリックして削除します


5.削除後、上の方にあるPublish Draftをクリックしてこの設定を反映させます


6.Save a backup copy? でYesかNoを選択して「Publish」をクリックします


7.The draft workflow now active.と表示されます


これでステータスを「Done」にしてもResolutionは自動で「Done」にならなくなりました。



参考

高度なワークフローの設定
https://ja.confluence.atlassian.com/adminjiracloud/advanced-workflow-configuration-776636620.html

JIRAの解決状況を編集できるようにしたい


APIの話ではなく、JIRAの設定の話です

リファレンスを探してみましたがこれといった情報を見つけられず、手元でいろいろ試してたどり着いた方法を書き残していきます。

キャプチャ画面が英語表記になっているので、適宜読み替えてください
「解決状況」=「Resolution」


この記事でやること

Resolutionを編集できなかったので、できるようにしていきます


1.Project settingsをクリックします


2.Fieldsをクリックします


3.ActionsからEdit fieldsを選択します


4.Field configurationsをクリックします


5.Default Field Configurationをクリックします


6.resolution(解決状況)で検索して
結果に出てきたResolutionのScreensをクリックします


7.対象の画面にチェックを入れてUpdateをクリックします


8.再度課題を開くとResolutionが編集できるようになりました
(手元の環境ではなぜか英語と日本語が表示されてしまいました)


2019年5月26日日曜日

Googleアドオン開発のCSSパッケージ


<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">

↑を<head></head>内に入れておく


テキストボックスとボタンを表示する例

スタイルを設定しなくてもガイドに沿ったスタイルを適用してくれる


スタイルを読み込まない場合はこうなる



コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}
意訳
この機能がやること
指定したHTMLファイルを表示する




index.html
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>

<body>
  <input type='text'>
  <button>button</button>
</body>

</html>
意訳
これはHTML5文書です



スタイルを読み込む



テキストボックス
ボタン





参考

CSS package for editor add-ons
https://developers.google.com/gsuite/add-ons/guides/css

2019年5月25日土曜日

フォーカス時の青い枠を消したい


この青枠を消すには

スタイルに outline: none を設定する

たとえばこんなスタイルを用意する
  .outline_none {
      outline: none;
  }


デモ

通常のテキストエリア



フォーカス時の青枠を消す




コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}
意訳
この機能がやること
指定したHTMLファイルを表示する




index.html
<!DOCTYPE html>
<html>

<head>
  <style>
  .outline_none {
    outline: none;
  }
  </style>
</head>

<body>
  <textarea class='outline_none'></textarea>
</body>
</html>



2019年5月24日金曜日

LiveChatのイベントログをシートに書き出したい


LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい
の改良版です。


イベントのログを残したい

Logger.logでは複数のログの記録を残せなくて
console.logでのStackdriver LoggingでGCPのプロジェクトと関連付ける程でもなくて

軽くログを見たいだけなのでSpreadsheetに書き出すようにしてみます
一行目は見出しを入れておきます



LiveChat側でWebhookの設定をして
以下のコード.gsの シートのURL を各自で使うものに変更すると
チャット開始、タグの更新、チャット終了のタイミングでシートにログが書き込まれます



コード.gs
function doPost(e) {
  var contents = e.postData.contents
  var jobj = JSON.parse(contents);
  var eventType = jobj['event_type'];
  var isEnded = judgeEnded(jobj);
  
  var message;
  switch(eventType) {
    case 'chat_started':
      message = 'not ended';
      break;
    case 'chat_changed':
      if(isEnded) {
        message = 'ended & changed';
      } else {
        message = 'not ended';
      }
      break;
    case 'chat_ended':
        message = 'ended';
      break;
  }
  
  var datetime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss:SSS');

  var values = [eventType, message, contents, datetime];
  set_values(values);
}

function judgeEnded(jobj) {
  var events = jobj['chat']['events'];
  if(events === undefined || events[0] === undefined) {
    return false;
  }
  return true;
}

function set_values(array){
  var ss = SpreadsheetApp.openByUrl("シートURL");
  var sh = ss.getSheets()[0];
  var last_row = sh.getLastRow();
  var start_row = last_row + 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = array.length;
  var range = sh.getRange(start_row, start_col, 1, num_cols);
  range.setValues([array]); 
}

意訳
この機能がやること
飛んできたデータからcontentsを取得して
オブジェクトに変換して
event_typeを取得して
chatが終わっているか判定して

messageの入れ物を用意して
eventTypeによって分岐させる
chat_startedなら
 messageにnot endedを入れる
 switchの判定から抜ける
chat_changedで
 chatが終わっているなら
  messageにended & changedを入れる
 終わっていないなら
  messageにnot endedを入れる

 switchの判定から抜ける
chat_endedなら
 messageにendedを入れる
 switchの判定から抜ける


現在日時を取得してフォーマットして

配列にeventType, message, contents, datetimeを入れて
set_valuesに渡す


この機能がやること
chatのeventsを取得して
もしeventsが存在しないかeventsの0番目が存在しなければ
falseを返す

存在していればtrueを返す


この機能がやること
スプレッドシートを取得して
0番目のシートを取得して
値が入っている最終行を取得して
その行数に1足して
1列目から
1行だけ
配列の要素の列数
の範囲を取得して
その行に値を入れる シートは2次元配列なので[[1列目の値,2列目の値,3列目の値]]という形にする




関連記事

LiveChatでチャット終了後のタグ更新をwebhookでキャッチしたい


参考

Building webhook integration
https://developers.livechatinc.com/docs/build-integration/

2019年5月23日木曜日

GASのライブラリ内で参照されたくない関数は末尾に_(アンダーバー)をつける


Best practices
https://developers.google.com/apps-script/guides/libraries#best_practices
の2番目に記載されています

ライブラリ内だけで使うけど、外からは参照されたくない関数の末尾に_をつける


以下のコードをライブラリ化すると、get_token()を呼び出せる

コード.gs
function get_token() {
  return PropertiesService.getScriptProperties().getProperty('token')
}
意訳
この機能がやること
スクリプトのプロパティのtokenの値を返す



関数の末尾にアンダーバーをつけると、get_token()_を呼び出せなくなる

コード.gs
function get_token_() {
  return PropertiesService.getScriptProperties().getProperty('token')
}
意訳
この機能がやること
スクリプトのプロパティのtokenの値を返す



参考


Google Formの回答を{ 質問1 : 回答1 , 質問2 : 回答2 }の形で取得したい


このようなフォームを作って


USERNAME@gmail.com
{"Country":"オーストラリア","City":"シドニー"}

のように回答を取得したくて書いたコードです。



コード.gs
function getFormResponse(event) {
  var email = event.response.getRespondentEmail();
  var responseObj = getItemResponseObj(event);
  var json = JSON.stringify(responseObj);
  Logger.log(email);
  Logger.log(json);
}

function getItemResponseObj(event) {
  var itemResponses = event.response.getItemResponses();
  var obj = {};
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    obj[question] = answer;
  }
  return obj;
}

意訳
この機能がやること
eventからユーザのEmailを取得する
getItemResponseObjにeventを渡して質問:回答を取得する
取得した質問:回答をJSON形式にする
Emailをログに出す
jsonをログに出す


この機能がやること
eventから質問と回答を取得する
空のオブジェクトを作る
質問:回答の数だけ繰り返す
質問:回答を一つずつ取得して
質問のタイトルを取得して
その回答を取得して
objに質問 : 回答 の形で追加していく

出来上がったobjを返す




実行結果


2019年5月21日火曜日

macOS MojaveにしたらChromeで音声入力できなくなった(解決済)


解決したいこと
音声で検索をクリックして
話しかけてみると
反応せずこうなった


ググってみるとAppleの公式サポートに記載がありました。
macOS Mojave のインストール後にオーディオを録音できなくなった場合

解決する手順
  1. システム環境設定
  2. セキュリティとプライバシー
  3. マイクを選択
  4. Chromeにチェック
  5. 今すぐ終了
  6. アプリを再起動


手順通りやったら解決しました

システム環境設定を開きます


セキュリティとプライバシーを選択します


左のリストからマイクを選択して
右に出てきたChromeのチェックボックスをクリックします


今すぐ終了をクリックします


再度Chromeを開くと音声入力できるようになりました。


参考

macOS Mojave のインストール後にオーディオを録音できなくなった場合
https://support.apple.com/ja-jp/HT209175

2019年5月20日月曜日

Google Apps Scriptのプロジェクトを削除したい


スプレッドシートに紐付いているプロジェクトが複数ある時
オーナー権限を持っていれば
ファイルメニューの「プロジェクトを削除」から削除できます



たとえば

スプレッドシートでスクリプトエディタを選択して


複数のプロジェクトがある場合はこのような選択画面が表示されます

無題のプロジェクトを開くと


無題のプロジェクト2を開くと

どちらも「プロジェクトを削除...」を選択できます


補足

自分がオーナーではない場合は「プロジェクトを削除...」の選択肢が表示されません

この場合はオーナーに削除してもらいましょう