経緯
WEB屋ですが最近、Filemakerに興味があって勉強していてWEBとFilemakerを連携できないかと思い
WordPressのプラグインで有名な「mw wp form」と連携させてみました。(自分用メモも兼ねています。)
WordPress側
まず、mw wp formの問い合わせデータがどう保存されているかDB内部を調べるとカスタム投稿として保存されているようです。(まぁそうだろうなとは思っていましたが)
post_typeがmwf_〇〇にショートコードのidで問い合わせデータ自体はそれぞれのキーでカスタムフィールド
contact formにはapiありますが、mw wp formにはapiがおそらくありませんので独自のエンドポイントを作成します。
(誰でも問い合わせ情報が見れるようになるので対応する必要あり)
以下ソースコード
<?php
add_action('rest_api_init', 'add_custom_endpoint');
function add_custom_endpoint() {
///wp-json/custom/v1/contact
register_rest_route('custom/v1', '/contact', array(
'methods' => 'GET',
'callback' => 'contact_api',
));
}
function contact_api(WP_REST_Request $request) {
$data = array();
if(!empty($_GET["key"]) && $_GET["key"] == "〇〇"){
// レスポンス
$args = array(
'posts_per_page' => -1,
'post_type' => 'mwf_〇〇',
'order' => 'asc',
'post_status' => 'publish',
);
$contacts = get_posts($args);
if(!empty($contacts)){
foreach($contacts as $post){
setup_postdata($post);
$data[] = array(
'id' => $post->ID,
'date' => get_the_date('Y.m.d',$post->ID),
'title' => get_the_title($post->ID),
'name' => get_post_meta($post->ID,'name',true),
'address' => get_post_meta($post->ID,'address',true),
'email' => get_post_meta($post->ID,'email',true),
'tel' => get_post_meta($post->ID,'tel',true),
'subject' => get_post_meta($post->ID,'subject',true),
'other' => get_post_meta($post->ID,'other',true),
'link' => get_the_permalink($post->ID),
);
}
wp_reset_postdata();
}
$response = new WP_REST_Response($data);
$response->set_status(200);
}else{
$response = new WP_REST_Response($data);
$response->set_status(400);
}
return $response;
}
Filemaker側
Filemaker側でデータを読み込み際にどうするかというとスクリプトを書きます。(アクセスでいうVBAみたいな感じ)
ただ、結構このスクリプトが癖があって手こずります。
- ループ
→回数を指定できないのでif文でループを終了させるしか方法が無い - よくあるidからレコードを取得
→「スクリプト検索実行」を実行してからデータを取得するのがまで分かりづらい
(普通に実行して「テーブル::〇〇キー」とするだけで取得できるのですが、若干はまりました。) - エラー処理
→検索実行してデータが見つからない場合Filemakerが気を効かせてエラーダイアログが出るのですが消し方が分からなかった (エラー処理オン オフで対応できる) -
jsonの最大ループ回数をどう取得するかがFilemakerで分からなかった
→ValueCount(JSONListKeys ($json ; "")) - 配列を宣言するのが分かりづらい
→変数を指定する際に繰り返し数の値を変更すると自動的に配列判定になるっぽい?
やっている事としては、
「urlから挿入」でjson取得してきてループした際にidが無ければ「新規レコード/検索条件」で挿入。
あれば更新するだけです。
感想
僕自身ローコードツールの独自言語みたいなものとかは遊びで触るのですが、Filemakerのスクリプト今風じゃなくて若干使いづらい印象は受けました。
ただ、Filemakerのスクリプトは慣れれば早いかけると思いますし、中小企業では複数人で一斉利用する機械あまりないので、こういうツールを使うのもありかなと思いました。(わざわざ予算かけてWEB化する意味ある?みたいなものもありますよね)
Filemakerは老舗で中小企業での採用実績も多いですし。