2020年2月11日火曜日

FileMaker Serverでフィールド内容のエクスポート

Instead of "export field contents" on FileMaker Server

スクリプト:URL から挿入(cURL)、file:プロトコルで「フィールド内容のエクスポート」の代替。

変数を設定 [ $text; 値:"C:\Program Files\FileMaker\FileMaker Server\Data\Documents\テスト.png" ]
変数を設定 [ $WinPathUrlEnc; 値:GetUrlEncSJIS( $text ) ]/*カスタム関数*/
変数を設定 [ $DATA; 値:cURL::obj ]
変数を設定 [ $Path; 値:"file://" & $WinPathUrlEnc ]
URL から挿入 [ cURL::Result; $Path; cURL オプション: "-T $DATA" ] [ URL を自動的にエンコードしない; 選択; ダイアログなし ]
フィールド設定 [ cURL::Result; Get ( 最終エラー ) ]


カスタム関数 GetUrlEncSJIS( Text )
※Windowsは、パスをSHIFT-JISエンコードする
https://fm-aid.com/custom-function/1-shift-jis-url-code-127


Windows 10
Pro 17,18:OK
Server 18:ERROR
変数を設定 [ $Path; 値:"file:///" & ...

Windows Server 2016
Server 18:OK
変数を設定 [ $Path; 値:"file://" & ...


2021/06/16 追記
Macで検証
macOS:Hight Sierra(10.13.6)
FileMaker Server:17.0.1
ポイント:パスの指定を以下にする
file:///Library/FileMaker Server/Data/Documents/test.png

変数を設定 [ $path; 値:"file:///Library/FileMaker Server/Data/Documents/test.png" ]
変数を設定 [ $DATA; 値:test::obj ]
URL から挿入 [ test::Result; $path; cURL オプション: "-T $DATA" ] [ URL を自動的にエンコードしない; 選択; ダイアログなし ]
フィールド設定 [ test::Result; Get ( 最終エラー ) ]
レコード/検索条件確定 [ ダイアログなし ]

2020年2月7日金曜日

FileMaker 18|While関数のデバッグ・While関数を途中で止める

While関数のデバッグ・While関数を途中で止める


FileMaker 18
要プラグイン
ScriptMakerPS | FileMaker Plugin for Windows
FileMakerのフィールドに記述した「PowerShell」を実行し、戻り値を取得。
https://sites.google.com/site/scriptmakerps/


While関数で、途中の値をダイアログで確認。

While (
    [
        count = 0 ;
        total = 0 ;
        $a[1] = 25 ;
        $a[2] = 50 ;
        $a[3] = 75
    ] ;
    count < 3 ;
    [
        count = count + 1 ;
        total = total + $a[count];


        $$Value=List(count;total);
        $$ER=SMPS_ExecSync( "[System.Windows.MessageBox]::Show('" & $$Value & "')" )


    ] ;
    total
)



確認する値が、文字列で ' (シングルクォーテーション)を含む場合
While (
    [
        count = 0 ;
        total = 0 ;
        $a[1] = "ABC" ;
        $a[2] = "あいうえお" ;
        $a[3] = "'カキクケコ'"
    ] ;
    count < 3 ;
    [
        count = count + 1 ;
        total =List( total ; $a[count]);


        $$Value=List(count;Substitute ( total; "'" ; "''" )  );
        $$ER=SMPS_ExecSync( "[System.Windows.MessageBox]::Show('" & $$Value & "')" )


    ] ;
    total
)



While関数を途中で止める
While (
    [
        $$ER="";
        count = 0 ;
        total = 0 ;
        $a[1] = 25 ;
        $a[2] = 50 ;
        $a[3] = 75
    ] ;
    count < 3   and  $$ER ≠ "No";
    [
        count = count + 1 ;
        total = total + $a[count];


        $$Value=List(count;Substitute ( total; "'" ; "''" )  );
        $$ER=SMPS_ExecSync( "[System.Windows.MessageBox]::Show('" & $$Value & "', '' , 'YesNo')" )


    ] ;
    total
)


2020年1月25日土曜日

Receive gmail with FileMaker|Gmail API を利用しGmailのメール・メッセージをFileMakerで取得する GmailFM_lib

FileMaker Gmail 受信 連携


-----
動作検証
Windows 10
FileMaker 16,17,18

Mac OS 10.13.3
FileMaker Pro 18

iOS 13.3
FileMaker Go 18

ダウンロード:
GmailFM_Lib_v*_trial.zip(試用版)
GmailFM_Lib_v*.zip(有償)
https://fm-aid.booth.pm/items/3815294

【Q&A】不明な点や、動作しない等、以下よりお問い合わせ下さい。
https://fm-aid.com/community/viewforum.php?id=7

準備
Google API プロジェクトの作成(2020.01.25現在)
Google Developer Console にアクセス。
https://console.developers.google.com/

■プロジェクトの作成
(1)の部分をクリック。
 ※プロジェクトがない場合、[プロジェクトの選択]と表示されています。
(2)「新しいプロジェクト」をクリック

任意のプロジェクト名を設定し、[作成]をクリック

作成した「プロジェクト」を選択

■ライブラリ
「ライブラリ」をクリック

「gmail」で検索
「Gmail API」を選択

[有効にする]をクリック

■認証情報
[認証情報]をクリック

[同意画面を構成]をクリック

[外部]を選択
[作成]をクリック

「アプリケーション名」を設定し、
[保存]をクリック


[認証情報]をクリック
[認証情報を作成]をクリック
[OAuth クライアント ID]をクリック

[その他]を選択
[作成]をクリック

「クライアント ID」
「クライアント シークレット」をコピーし、控えておく


OAuth 同意画面 (2022/11/02 追記)
公開ステータス:テスト
テストユーザー を追加して下さい(Googleアカウント)

(2022/11/16 追記)
OAuth 同意画面
公開ステータス:本番環境 に設定


v1.2は、以下修正済(2024/01/15 追記)
■FileMaker(2022/11/16 追記)
ファイル:GoogleApiFM_Lib.fmp12 を修正してください。
スクリプト:Get_AuthorizationCode
redirect_uri=urn:ietf:wg:oauth:2.0:oob を変更
redirect_uri=http://localhost
URL を開く [ Let([ ¢URi="https://accounts.google.com/o/oauth2/auth?scope={scope}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id={ClientId}" ]; Substitute ( ¢URi ; ["{scope}" ; AppPermission::Scope] ; ["{ClientId}" ; GoogleApiProject::ClientId] ) ) ] [ ダイアログなし ]
URL を開く [ Let([ ¢URi="https://accounts.google.com/o/oauth2/auth?scope={scope}&redirect_uri=http://localhost&response_type=code&client_id={ClientId}" ]; Substitute ( ¢URi ; ["{scope}" ; AppPermission::Scope] ; ["{ClientId}" ; GoogleApiProject::ClientId] ) ) ] [ ダイアログなし ]

スクリプト:Get_Token
--data redirect_uri=urn:ietf:wg:oauth:2.0:oob を変更
--data redirect_uri=http://localhost
変数を設定 [ $Option; 値:Let( ¢option=" --request POST --data code={Authorization_Code} --data client_id={client_id} --data client_secret={client_secret} --data redirect_uri=urn:ietf:wg:oauth:2.0:oob --data grant_type=authorization_code " ; Substitute ( ¢option ; ["{Authorization_Code}" ; GLOBAL::gAuthorization_Code] ; ["{client_id}" ; GoogleApiProject::ClientId ] ; ["{client_secret}" ; GoogleApiProject::ClientSecret ] ) ) ]
変数を設定 [ $Option; 値:Let( ¢option=" --request POST --data code={Authorization_Code} --data client_id={client_id} --data client_secret={client_secret} --data redirect_uri=http://localhost --data grant_type=authorization_code " ; Substitute ( ¢option ; ["{Authorization_Code}" ; GLOBAL::gAuthorization_Code] ; ["{client_id}" ; GoogleApiProject::ClientId ] ; ["{client_secret}" ; GoogleApiProject::ClientSecret ] ) ) ]
変数を設定 [ $URi; 値:"https://accounts.google.com/o/oauth2/token" ]



■FileMaker
サンプルファイル「GoogleApiFM_Lib.fmp12」
レイアウト:GoogleApiProject を開く

「クライアント ID」
「クライアント シークレット」をそれぞれ設定
レイアウト:Application Permission を開く
Title:
(任意) calendar/Googleアカウント の様な入力がおすすめ
例:Gmail/xxxxx@gmail.com

GoogleAccount:
Googleアカウント(Gmail)を設定
例:xxxxx@gmail.com

FMid_GoogleApiProject:
レイアウト:GoogleApiProject で作成した APIプロジェクトを選択

Scope:
https://mail.google.com/

[Get_AuthorizationCode]ボタンをクリック

ブラウザが開きます
操作するGmailのGoogleアカウントでログインor選択


[詳細]をクリック

[アプリ名(安全ではないページ)に移動]をクリック

[許可]をクリック


[許可]をクリック
コードをコピー
(2022/11/16 追記)
クエリパラメータ code= をコピー




FileMaker に戻り、
サンプルファイル「GoogleApiFM_Lib.fmp12」
レイアウト:Application Permission を開く

[Get_Token]ボタンをクリック



先程コピーしたコードを貼り付け
[OK]をクリック


「RefreshToken」「AccessToken」が取得できれば準備完了
-----