interlude

プログラミングや私的なこと

kintone プロセス管理のイメージ

kintoneのプロセス管理は、複数人でレコードの状態を管理する時に効果を発揮します。
プロセスというのは順番のことなので、順番を管理するということを意味します。

プロセス管理のイメージは、作業内容担当者を決めて、順番通りに処理する。というのがテーマです。

例えば料理にもプロセスがあります。

AさんBさんCさんの3人で作業を分担してカレーを作るとします。
カレーを作ろうとした時のプロセスは以下になります。

1,材料を準備する 担当者A
2,野菜の皮をむく 担当者A
3,肉と野菜を適当な大きさに切る 担当者B
4,鍋に油を引いて肉と野菜を炒める 担当者B
5,水を加えて材料が柔らかくなるまで煮込む 担当者C
6,いったん火を止めルウを入れ、十分に溶かし弱火で煮込む 担当者C

人によって手順は変わると思うけど大体こんな順番だと思います。
いきなり5番から始めて、次に2番に進む人はいないでしょう。

同様にプロセス管理でも手順通りに進めます。
プロセス管理では以下のように用語が対応します。

番号 → ステータス
作業 → アクション
担当者 → 作業者

ステータス
現在の状況を表します。カレーの例で言えば番号に当たります。
今3番です。というステータスをBさん以外の担当者も把握することができます。
把握することでカレーがあとどのくらいの手順を踏めば出来るかも予想がつきますよね。

アクション
ステータスで行われている作業のことです。
5番だったら煮込んでいる最中なんだなと思うし、2番なら野菜の皮を向いているってことです。

作業者
A、B、C、のそれぞれがどのステータスの時にどんなアクションをするかを決めます。

上の例ではそれぞれ均等に作業が振られていますが、

1,材料を準備する 担当者A
2,野菜の皮をむく 担当者C
3,肉と野菜を適当な大きさに切る 担当者B
4,鍋に油を引いて肉と野菜を炒める 担当者A
5,水を加えて材料が柔らかくなるまで煮込む 担当者B
6,いったん火を止めルウを入れ、十分に溶かし弱火で煮込む 担当者B

というトリッキーな割振りも出来ます。

ここでは触れていませんが、プロセスが1→2→3と進んでから
2番に戻すことも可能です。

まとめると
作業内容と担当者を決めて、どういう順番にするかを決める。
決めることで効率的に作業することが出来る。ということです。

remark.js使ってスライドを作る

remark.jsとは
マークダウンでスライドショーが作れるというツールのことです。

http://remarkjs.com/

上記のリンク先を見ると、スタイリッシュなスライドを作れることが分かる。

早速使ってみるべく、githubへ。

https://github.com/gnab/remark

スマホ対応もしてます。

以下のコードをコピペして、ローカルに「sample.html」とか適当な名前で
保存して開いてみるとスライドが出来ています。

<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta charset="utf-8">
    <style>
      @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
      @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
      @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);

      body { font-family: 'Droid Serif'; }
      h1, h2, h3 {
        font-family: 'Yanone Kaffeesatz';
        font-weight: normal;
      }
      .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
    </style>
  </head>
  <body>
    <textarea id="source">

class: center, middle

# Title

---

# Agenda

1. Introduction
2. Deep-dive
3. ...

---

# Introduction

    </textarea>
    <script src="https://gnab.github.io/remark/downloads/remark-latest.min.js">
    </script>
    <script>
      var slideshow = remark.create();
    </script>
  </body>
</html>


「---」がページの区切りになるみたいですね。

手段じゃなく目的にこだわりたい

流行りの技術とか魅力的だけど、手段にこだわるのは間違ってるなと気づいた話です。

先日、本屋に行った時のこと。
何か儲け話はないかなと株とか金融関連のコーナーを見ていると、rubyという文字が目に入ってきました。

なぜここにrubyの本が置かれているのかと思い、よくよく見てみると「rubyではじめるシステムトレード」というタイトルでした。

システムトレードというのは自動売買取引と言ってあらかじめ決められたルールに沿って株の取引を行うこと。

Rubyではじめるシステムトレード

Rubyではじめるシステムトレード

驚いたのは著者の方は別に本職がプログラマではなく、漫画家兼元パチプロから専業の個人投資家という経歴です。

自身が考案したトレードのルールをコードに落とし込み、そのシステムを実際に運用して利益を上げているそうなのです。

最初に明確な目的があって、それを実現するための1つの手段としてプログラミングがあるのだということを、目的を見失いがちな自分にとっては衝撃でした。

最新の技術の動向を追うというのも大事ですが、技術はあくまで手段であって、目的じゃない。
手段にこだわっているうちはまだまだっす。

kintone プロセス管理の設定画面で分かりにくいところ

プロセス設定画面の項目名と、項目の並び順だと少し分かりづらいかもしれません。

プロセス管理について

参照 https://help.cybozu.com/ja/k/user/whatsprocess.html

プロセス管理機能ではワークフローを設定することが出決ます。 レコードのステータスを管理することで、申請や承認などの手続きが必要なアプリが作れるらしい。

有効化とステータス

実際の設定画面は以下になる。

f:id:tatsuyard:20150521170632p:plain

画面の「1.有効化」と「2.ステータス」はなんとなく分かります。 チェックすれば有効になるし、ステータスは増減出来るんだなと。

プロセス

「3.プロセス」はちょっと複雑そう。

f:id:tatsuyard:20150521170740p:plain

左から 「アクション実行前のステータス」、「アクションの実行条件」、「アクション実行後のステータス」、「アクション名」 となっています。

「条件」という項目があるから混乱するのだと思います。あと項目名も。 「アクション名」というのは、レコード詳細画面に表示される文字列のことです。

f:id:tatsuyard:20150521170845p:plain

所感

「現在のステータス」、「次のステータス」、「実行条件」、「表示名」 にすればもっと分かりやすいと思います。

プロセス管理についてはまだ分からないことが多いので、もっと調べて続編を書いていきます。 ちょっと分かりにくいプロセス管理を、分かりやすく噛み砕いて解説します!

kintone APIでレコードを追加する

kintone APIでレコードを追加する方法です。
最初にアプリの設定からフォームの配置とフィールドコードを設定しておく必要があります。

(function() {
	"use strict";
	// 詳細画面を開いた時のイベント
	kintone.events.on('app.record.detail.show', function(event) {
		var appId = event.appId;//  アプリID取得
		
		var recordId = event.recordId;// レコードID取得
		
		var word = "hogehoge";
		
		// レコードに追加する内容
		var params = {
			"app": アプリID,
			"record": {
				"フィールド1": { "value": appId },
				"フィールド2": { "value": recordId },
				"フィールド3": { "value": word}
				// ここに追加する内容を記述していく
			}
		};
		
		// URI、メソッド、追加する内容の指定
		kintone.api(
			kintone.api.url('/k/v1/record', true),
			'POST',
			params,
			// コールバック
			function(resp) {
			//処理が成功したとき
			},
			// エラーバック
			function(resp) {
                        // エラー処理
			}
		);
		
	});
})();

アプリID、レコードIDを取得する。
他にフィールドがあれば追加する内容を"record"内に追加していく。
kintone.apiuriとリクエストメソッド、paramsを指定してやり、成功した場合とエラーの場合のコールバックを用意する。

複数のレコードを一括で更新する場合はファイルアップロードのほうが良さそう。
外部APIと組み合わせるのが有効な使い方なのかな。

kintone APIのレスポンスパラメータのプロパティについて

kintone APIのレスポンスパラメータには、プロパティが14個用意されています。
ということでそれぞれのプロパティをアラートで表示させてみました。

(function() {
	"use strict";
	kintone.events.on('app.record.detail.show', function(event){
		// フィールドに格納された値を取得
		var appId = event.record["フィールド名"].value;
		
		if(!appId) {
			return;
		}
		
		kintone.api(
			kintone.api.url('/k/v1/app', true),
			'GET',
			{ "id": appId },
			// 成功時のコールバック
			function(resp) {
				//プロパティを指定する。
				alert(resp.appId);        //アプリID
				alert(resp.code);         //アプリコード
				alert(resp.name);         //アプリ名
				alert(resp.description);  //アプリの説明
				alert(resp.spaceId);      //スペースID
				alert(resp.threadId);     //スレッドID
				alert(resp.createdAt);    //作成日時
				alert(resp.creator);      //作成者情報
				alert(resp.creator.code); //作成者のコード
				alert(resp.creator.name); //作成者の名前
				alert(resp.modifiedAt);   //更新日時
				alert(resp.modifier);     //更新者情報
				alert(resp.modifier.code);//更新者のコード
				alert(resp.modifier.name);//更新者の名前
			}
		);
	});

})();

れぞれアラート表示されるが、cosole.logで出力するとjsコンソールにリンクが表示され、クリックするとJSのソースコードを閲覧することが出来てしまった。
アラートで表示した場合はソースコードは見ることが出来なかったんですが、これはバグなのかな・・?

kintoneでアプリのIDとレコード番号を取得する

kintoneで作成したアプリは、それぞれにアプリIDが割振られています。

このアプリID、javascriptでレコードの操作を行う際に必要になります。

ちなみに割振られたIDと、レコード番号を取得するコードは以下のようになります。

(function() {
	"use strict";
	kintone.events.on('app.record.detail.show', function(event){
	// アプリID取得
	var appId = event.appId;
	
	// レコード番号の取得
	var recordId = event.recordId;
	
	alert('アプリID: ' + appId + ', レコード番号: ' + recordId);
	
	});
})();

detail.showは一覧画面から詳細画面を表示したときに発生するイベントを表します。

eventオブジェクトで利用出来るプロパティは3つ
・appId→アプリID
・record→データを保持したレコードオブジェクト
・recordId→レコードID

取得したアプリIDのレコードに対して、JSONREST APIを使ってデータの追加や編集を行うことが出来る。

## 注意
フィールドコードが違うと動作しないので、フィールド名とフィールドコードを一致させるのが無難です。