初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-02-01 15:19:16

AM11
Member

FileMaker Proからチャットワークのタスクを作成する

【環境】
・Windows 8.1
・FileMaker Pro Advanced 13
・チャットワーク(APIトークンあり)

【希望する動作】
FileMaker Pro Advanced 13から、チャットワークのタスクを作成。

【状況】
APIトークンの置き場所に困っています。

スクリプト「URLから挿入」にて、httpspostが使えるようなので、
"httpspost://api.chatwork.com/v2/rooms/{ルームID]/tasks?body={タスク内容}&to_ids={タスクの投げ先}"
という構成を考えましたが、
肝心のAPIトークンは、チャットワークの仕様でクエリストリングでは送信できません。
HTTPリクエストヘッダで送る事、となっております。

【質問】
X-ChatWorkToken={APIトークン名}に相当するものを、どこへどのように書いたら良いでしょうか?
それとも、全体的に勘違いしているでしょうか?

宜しくお願い致します。

Offline

#2 2017-02-01 19:27:29

qb_dp
Member

Re: FileMaker Proからチャットワークのタスクを作成する

「X-ChatWorkToken={APIトークン名}」は、POSTデータのヘッダーに加える必要があります。
FileMakerのスクリプト「URL から挿入[httpspost]」では、ヘッダーに情報を加えることができないので、FileMakerの標準機能だけでは、ChatWork の API を利用することはできません。
ヘッダー情報を追加できる他の言語・ソフトと連携させる必要があります。

以下は、PowerShell を使った例です。

スクリプト:
{
変数を設定 [$API_token; 値:"APIトークン"]
変数を設定 [$room_id; 値:"ルームID"]
変数を設定 [$body; 値:"本文"]
変数を設定 [$limit; 値:"2017/02/01"]
変数を設定 [$to_ids; 値:"To ID"]
変数を設定 [$script; 値:"param([DateTime]$dateTime = '{limit}'); $limit = '{0:#}' -f (New-TimeSpan 1970/1/1 $dateTime).TotalSeconds; .....
変数を設定 [$Script; 値:Substitute ( $Script ; ["{room_id}" ; $room_id ] ; ["{body}" ; $body ] ; ["{limit}" ; $limit ] ; ["{to_ids}" ; $to_ids ] ; ["{API_token}" ; $API_token ])]
Event を送信 [「aevt」; 「odoc」; "powershell -Command " & $Script]
}


$scriptの値

"param([DateTime]$dateTime = '{limit}');
$limit = '{0:#}' -f (New-TimeSpan 1970/1/1 $dateTime).TotalSeconds;

$timeout=20000;
$url= 'https://api.chatwork.com/v1/rooms/{room_id}/tasks';
$data='body={body}&limit='+$limit+'&to_ids={to_ids}';
$buffer = [System.Text.Encoding]::UTF8.GetBytes($data);
[System.Net.HttpWebRequest] $webRequest = [System.Net.WebRequest]::Create($url);
$webRequest.Timeout = $timeout;
$webRequest.Method = 'POST';
$webRequest.ContentType = 'application/x-www-form-urlencoded';
$webRequest.ContentLength = $buffer.Length;
$webRequest.Headers.add('X-ChatWorkToken','{API_token}');

$requestStream = $webRequest.GetRequestStream();
$requestStream.Write($buffer, 0, $buffer.Length);
$requestStream.Flush();
$requestStream.Close();

[System.Net.HttpWebResponse] $webResponse = $webRequest.GetResponse();
$streamReader = New-Object System.IO.StreamReader($webResponse.GetResponseStream());
$result = $streamReader.ReadToEnd();
return $result ;"

「Event を送信」は投げっぱなしになるため戻り値の取得はできません。

プラグインを使用すると戻り値の取得が出来ます。
ScriptMakerPS | FileMaker Plugin for Windows : https://sites.google.com/site/scriptmakerps/

スクリプトの
Event を送信 [「aevt」; 「odoc」; "powershell -Command " & $Script]
この部分を
変数を設定 [$Result; 値:SMPS_Exe( $Script )]
コレに変更。

Offline

#3 2017-02-01 20:23:05

AM11
Member

Re: FileMaker Proからチャットワークのタスクを作成する

ありがとうございます。
ヘッダは任意指定できないんですね。

実は、最終的にFileMaker Goからタスク作成まで行けないかと考えていました。
色々なAPIを使えると、DBを各種スマホアプリの核として使えると思ったんですが…

Googleのスプレッドシートからはタスク作成できているので、その辺を含めて何か考えてみます。
Windowsタブレット + PowerShell + WebDirectという可能性も考えてみます。

「Eventを送信」の戻りに関しては、プラグイン導入がサポート上のリスクになるかが余り分かっておらず、
(FileMakerの1年生なので、ちょっと静観しています。特にWindows10は、まだ大きなアップデートが多いので…)
今のところは自作のトリガファイル監視で対応しています。

まだまだFileMakerを取り巻く状況 & 仕様が分かっていないので、
色々と試しながら掘り下げてみます。

Offline

#4 2017-02-01 21:17:00

qb_dp
Member

Re: FileMaker Proからチャットワークのタスクを作成する

FileMaker GoならWEBビューア+JQueryでヘッダーを追加してPOSTが可能です。
以下にGoogle CalendarへPOSTするサンプルがあります。参考になると思います。
http://qbxxdp.blogspot.jp/2014/07/filem … r.html?m=1

Offline

#5 2017-02-02 10:21:18

AM11
Member

Re: FileMaker Proからチャットワークのタスクを作成する

サンプルファイルを確認してみました。
正直勘ですが、dataスキームに変数化したHTMLデータを投げ込んで実行することで、
ヘッダを付けているように見えました。

エラーの取得をwebビューア側でやっているなら、戻り値は流してしまってもいいかな?と思います。
そうすれば今回の希望は1動作で完結するので、ProもGoもできそうな気がします。

JavaScriptも触ったことが無いので、今回はまず、ライブラリを使わずに動きを見てみます。
勉強が面倒だなぁ…と思っていましたが、webアプリとの間を取り持つことが出来るんですね。
一番期待していた「DBの用途を広げる」ことに貢献しそうなので、今回を機に取り組んでみます。

本当にありがとうございました。

Offline

#6 2017-02-02 11:30:19

qb_dp
Member

Re: FileMaker Proからチャットワークのタスクを作成する

過去にChatWork APIを「WEBビューア+JQuery」で検証した時、クロスドメインの規制があるので、Windows では無理でした。
FileMaker Go (iOS)では、OK。

戻り値は、

location.href = 'fmp://$/.....

で取得出来ます。

Offline

#7 2017-02-02 11:51:31

qb_dp
Member

Re: FileMaker Proからチャットワークのタスクを作成する

おっと! 忘れていました。

jQuery.support.cors = true;

コレくっつけるとPOST出来ます。

「WEBビューア+JQuery」で、ChatWork API を利用するサンプル|メッセージ追加

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8 ; IE=9 ; IE=10">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript" ></script>
<script type="text/javascript">
jQuery.support.cors = true;
var data='body=メッセージ';
$(function() {
	$.ajax({
		url: 'https://api.chatwork.com/v1/rooms/{room_id}/messages',
		type: 'POST',
		headers: {
			'X-HTTP-Method-Override': 'POST',
			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
			"X-ChatWorkToken":"{API Token}"
			},
	dataType: 'text',
	data: data ,
	success: function(data, status, xhr){
	//console.log(xhr.getResponseHeader());
	alert(xhr.getAllResponseHeaders());
location.href = 'fmp://$/ファイル名.fmp12?script=return&$result='+data;
	},
  error:function(data, status, xhr){
    alert(xhr.getAllResponseHeaders());
  }
});
});
</script>
</head>
<body>
</body>
</html>

Offline

#8 2017-02-02 14:23:42

AM11
Member

Re: FileMaker Proからチャットワークのタスクを作成する

なるほど、GoogleにホストされたjQueryに対してAjaxリクエストを行う際、クロスドメインになってブラウザ側でセキュリティエラーではねられる、
そこでcorsをtrueに設定して、ドメインポリシーに則った通信を行う事でエラーを回避する、という理解で宜しいでしょうか。

…既にFileMakerの質問ですらないですね。すみません(汗

サンプルは、行ごとの意味は大体読めたので、IE11かedge向けにカスタマイズして試してみます。
web周りの知識は特に薄いので、非常に助かります。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 542.36 KiB (Peak: 563.27 KiB) ]