ラベル FileMaker の投稿を表示しています。 すべての投稿を表示
ラベル FileMaker の投稿を表示しています。 すべての投稿を表示

2021年11月11日木曜日

FileMaker Treeview Navigation

 -

-

-

-

-

-

-

-

-

スクリプト名NavHide(PortalRowNumber)
  • 変数を設定 [ $arg; 値:Get(スクリプト引数) ]
  • If [ IsEmpty ( $arg ) ]
  • 現在のスクリプト終了 [ ]
  • End If
  • 変数を設定 [ $targetPortalRowNumber; 値:$arg ]
  • 変数を設定 [ $_kActive; 値:GetNthRecord ( NavSelector»Nav::_k ; $targetPortalRowNumber ) ]
  • 変数を設定 [ $PortalRowNumber; 値:$targetPortalRowNumber + 1 ]
  • 変数を設定 [ $filter; 値:NavSelector::gNavFilter ]
  • 変数を設定 [ $level; 値:"" ]
  • 変数を設定 [ $MAX; 値:Count ( NavSelector»Nav::_k ) ]
  • Loop
  • Exit Loop If [ $PortalRowNumber > $MAX ]
  • Exit Loop If [ Length ( $level )>Length ( GetNthRecord(NavSelector»Nav::level;$PortalRowNumber) ) ]
  • Exit Loop If [ IsEmpty ( GetNthRecord(NavSelector»Nav::level;$PortalRowNumber) ) ]
  • 変数を設定 [ $_kPotal; 値:GetNthRecord( NavSelector»Nav::_k ; $PortalRowNumber ) ]
  • 変数を設定 [ $filter; 値:Substitute ( $filter ; $_kPotal ; $_kActive & "/" & $_kPotal) ]
  • If [ IsEmpty ( $level ) ]
  • 変数を設定 [ $level; 値:GetNthRecord( NavSelector»Nav::level ; $PortalRowNumber ) ]
  • End If
  • 変数を設定 [ $PortalRowNumber; 値:$PortalRowNumber+1 ]
  • End Loop
  • フィールド設定 [ NavSelector::gNavFilter; $filter ]
  • レコード/検索条件確定 [ ダイアログなし ]
  • ポータルの更新 [ オブジェクト名: "portal_Nav" ]

-

スクリプト名NavShow(_kChild)
  • 変数を設定 [ $arg; 値:Get(スクリプト引数) ]
  • If [ IsEmpty ( $arg ) ]
  • 現在のスクリプト終了 [ ]
  • End If
  • 変数を設定 [ $_kNav; 値:$arg ]
  • フィールド設定 [ NavSelector::gNavFilter; Substitute ( NavSelector::gNavFilter; $_kNav & "/" ; "" ) ]
  • レコード/検索条件確定 [ ダイアログなし ]
  • ポータルの更新 [ オブジェクト名: "portal_Nav" ]

-

スクリプト名NavShowAll
  • フィールド設定 [ NavSelector::gNavFilter; Let( ~val=Substitute ( NavSelector::gNavFilter ; "/" ; ¶ ) ; UniqueValues ( ~val ; 1 ) ) ]
  • レコード/検索条件確定 [ ダイアログなし ]
  • ポータルの更新 [ オブジェクト名: "portal_Nav" ]

-

スクリプト名NavHideAll
  • 変数を設定 [ $MAX; 値:Count ( NavSelector»Nav::_k ) ]
  • 変数を設定 [ $PortalRowNumber; 値:$MAX ]
  • Loop
  • Exit Loop If [ $PortalRowNumber ≤ 0 ]
  • 変数を設定 [ $_kPotal; 値:GetNthRecord ( NavSelector»Nav::_k ; $PortalRowNumber ) ]
  • If [ PatternCount ( $filter ; $_kPotal & "/" )=0 and $MAX ≠ $PortalRowNumber ]
  • 変数を設定 [ $bool; 値:Let([ ~p1=GetNthRecord ( NavSelector»Nav::level ; $PortalRowNumber ) ;~p2=GetNthRecord ( NavSelector»Nav::level ; $PortalRowNumber+1 ) ]; Case( ~p1 = ~p2 ; 0; IsEmpty ( ~p2 ) ; 0; Length ( ~p1 )>Length ( ~p2 ) ; 0; 1 ) ) ]
  • If [ $bool ]
  • スクリプト実行 [ 「NavHide(PortalRowNumber)」; 引数: $PortalRowNumber ]
  • End If
  • End If
  • 変数を設定 [ $PortalRowNumber; 値:$PortalRowNumber-1 ]
  • End Loop
  • レコード/検索条件確定 [ ダイアログなし ]
  • ポータルの更新 [ オブジェクト名: "portal_Nav" ]

-

2021年2月22日月曜日

【解決】 WEBビューアが印刷できない。プレビューモードで表示されない。- FIleMaker

WEBビューアが印刷できない。プレビューモードで表示されない。- FIleMaker

Windows, macOS 対応。iOS(FileMaker Go)は、非対応。

Chart.js が印刷できないとか、Google Map が印刷できないとか、
WEBビューアをキャプチャして画像として保存したい場合に使用。

GoogleChrome でWEBビューアに表示されている内容をキャプチャして印刷で使用する。

WebViewerCaptureChrome.fmp12
動作検証:
FileMaker:16,17,18,19
Windows 10, macOS:10.15.6, 10.13.6
Windows:Powershell使用(Windows標準インストール)
macOS:AppleScript使用(macOS標準インストール)

サンプルファイル

※サンプルファイルは、高解像度キャプチャ対応
https://fm-aid.stores.jp/items/60327a4e2438607fc668027c

使用方法

WebViewerCaptureChrome.fmp12 を開く

画面右上の[⚙(歯車)]アイコンをクリック。
Google Chrome のパスを設定。(Chromeのインストール先を変更していなければそのままでOK)
※Google Chrome のパスは、アドレスバーに chrome://version/ と入力で確認できます。
例:
Windows:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
macOS:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

-

ExampleWebViewerCaptureChrome.fmp12 を開く


「WebViewer DATA or SOURCE」に URL または、HTML を入力。

「capture[object]」ボタンでキャプチャしたpng画像(実データ)が取得できます。

「capture[path]」ボタンでキャプチャしたpng画像をファイルパスが取得できます。
※png画像はテンポラリフォルダに保存されています。

WEBビューアの式 例:

プレビュー・印刷モードの時は、キャプチャした画像を表示。
キャプチャした画像は、パスがあればその画像を優先、なければオブジェクトフィールドの画像を表示。 となっています。
詳しくは、サンプルファイル:ExampleWebViewerCaptureChrome.fmp12 を参照

/*
フィールド値が、URL,file,<HTML>どれでも表示
プレビュー・印刷モードの時は、キャプチャした画像を表示
キャプチャした画像は、パスがあればその画像を優先、なければオブジェクトフィールドの画像を表示
*/
Let([
¢mode=Get (ウインドウモード)
;¢DATA=Let(
¢source=Trim(WVCaptureChrome::WebViewerDATAorSOURCE)
;
Case ( Left ( ¢source ; 1 ) = "<" ; "data:text/html;charset=utf-8,"; "" ) & ¢source
)
;¢CPath=WVCaptureChrome::CapturePath
;¢CObj=WVCaptureChrome::CaptureObj
;¢html=
"data:text/html,
<html>
<head>
<meta charset='UTF-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='initial-scale=1.0' />
<style>
* {border:0; margin:0px; padding:0px;overflow:hidden;}
img {
object-fit: cover;
}
</style>
</head>
<body>
<img src='{src}' onLoad='this.style[this.width>this.height?\"width\":\"height\"]=\"100%\"'>
</body>
</html>"
];
Case ( ¢mode=2 or ¢mode=3 ;
Case (
not IsEmpty ( ¢CPath ) ; Substitute ( ¢html ; "{src}" ; "file://" & ¢CPath );
not IsEmpty ( ¢CObj ) ; Substitute ( ¢html ; "{src}" ; "data:image/png;base64," & Base64Encode ( ¢CObj ) );
¢DATA
);
¢DATA
)
)


既存ファイルからの利用方法

外部データソースに「WebViewerCaptureChrome.fmp12」を登録。

ファイル -> 管理 -> 外部データソース


新規 をクリックし「WebViewerCaptureChrome.fmp12」を選択

[OK]をクリックで登録完了。


スクリプト例: キャプチャした画像を取得

スクリプト名:Capture[object]

#{"source":"https://fm-aid.com/bbs2/viewforum.php?id=2","width":"300","height":"300"}
変数を設定 [ $source; 値:WVCaptureChrome::WebViewerDATAorSOURCE ]
変数を設定 [ $width; 値:GetLayoutObjectAttribute ( "WEB01" ; "width" ) ]
変数を設定 [ $height; 値:GetLayoutObjectAttribute ( "WEB01" ; "height" ) ]
変数を設定 [ $json; 値:Let([¢json="" ;¢json=JSONSetElement ( ¢json ; "source" ; $source ; 1 ) ;¢json=JSONSetElement ( ¢json ; "width" ; $width ; 1 ) ;¢json=JSONSetElement ( ¢json ; "height" ; $height ; 1 ) ]; ¢json ) ]
スクリプト実行 [ 「Capture(json)」 , ファイル: 「WebViewerCaptureChrome」; 引数: $json ]
フィールド設定 [ WVCaptureChrome::CaptureObj; Get(スクリプトの結果) ]

引数(json)を作成し、「WebViewerCaptureChrome.fmp12」のスクリプト:Capture(json) を実行

引数:
{
"source":"HTML または、URL",
"width":"キャプチャする横幅",
"height":"キャプチャする縦の長さ"
}

例:
{
"source":"https://fm-aid.com/bbs2/viewforum.php?id=2",
"width":"300",
"height":"300"
}

2019年3月27日水曜日

FileMaker fmpプロトコルの対象を取得・書き換え レジストリ PowerShell


fmpプロトコルの対象を取得
PowerShell

$RegPath = "Registry::HKCR\FMP\shell\open\command" ;
$ItemProperty=Get-ItemProperty -Path $RegPath;
$ItemProperty.'(default)';

戻り値:
"C:\Program Files\FileMaker\FileMaker Pro 17 Advanced\FileMaker Pro Advanced.exe %1"




fmpプロトコルの対象を書き換え
PowerShell ※管理者権限でPowerShell を起動しておく

$value="C:\Program Files\FileMaker\FileMaker Pro 17 Advanced\FileMaker Pro Advanced.exe %1";
Set-ItemProperty $RegPath -name "(default)" -value $value;


fmpプロトコルの対象を書き換え
PowerShell ※管理者権限で実行


$Command='$value=\"C:\Program Files\FileMaker\FileMaker Pro 17 Advanced\FileMaker Pro Advanced.exe %1\";$RegPath = \"Registry::HKCR\FMP\shell\open\command\" ;Set-ItemProperty $RegPath -name \"(default)\" -value $value;';

Start-Process powershell -ArgumentList $Command -Verb RunAs -Wait;

2018年12月26日水曜日

FileMaker cURL 日本語ファイル名のファイルを読み込み。


FileMaker cURL 日本語ファイル名のファイルを読み込み。

OS:Windows
FileMaker 16以降

Windowsの場合、
スクリプト:URL から挿入 では、「file:///」プロトコルで日本語ファイル名のローカルファイルにアクセスできません。
ファイルパスをshift_jisでURLエンコードすれば、読み込み可能になります。


変数を設定 [$text; 値: "D:\!TEMP\名称未設定.txt"]
変数を設定 [$WinPathUrlEnc; 値:
Let(
[
   $txt = HexEncode ( TextEncode ( $text ; "shift_jis" ; 1 ) ) ;
   $pos = Length ( $txt ) - 1 ;
   $fnc=
      "Case ( $pos < 0 ; $txt ;
         Let(
         [
            $txt = Replace ( $txt ; $pos ; 0 ; \"%\" ) ;
            $pos = $pos - 2
         ];
            Evaluate($fnc))
      )"
];
   Evaluate($fnc)
)
]
URL から挿入 [選択; ダイアログあり:オフ; cURL::Result; "file:///" & $WinPathUrlEnc; URL を自動的にエンコードしない]



※SHIFT-JISでURLエンコードする再帰式は、以下で Shinさんが書いたものです。
初心者のFileMaker pro Q&A
https://fm-aid.com/bbs2/viewtopic.php?pid=50129#p50129

2018年1月18日木曜日

FileMaker 外部アプリケーションを実行し戻り値を取得。

FileMaker から外部アプリケーションを実行し戻り値を取得。
戻り値が文字化けする場合に有効。

OS:Windows
plugin:ScriptMakerPS
https://sites.google.com/site/scriptmakerps/

例:
Node.js を実行
フィールド:Script

$Arguments = "-e `"console.log('Hello, こんにちは?');`"";
$pinfo = New-Object System.Diagnostics.ProcessStartInfo;
$pinfo.FileName = 'C:\node\node.exe';
$pinfo.RedirectStandardError = $true;
$pinfo.RedirectStandardOutput = $true;
$pinfo.CreateNoWindow = $true;
$pinfo.UseShellExecute = $false;
$pinfo.Arguments = $Arguments;
$pinfo.StandardOutputEncoding=[system.Text.Encoding]::UTF8;
$p = New-Object System.Diagnostics.Process;
$p.StartInfo = $pinfo;
$p.Start() | Out-Null;
$Result=$p.StandardOutput.ReadToEnd();
$er=$p.WaitForExit(1000*30);<#タイムアウト ミリ秒#>
$Result;

変数を設定 [$Result;値: SMPS_Exe( Script  ) ]

スクリプト内でPowerShellを記述する場合、「"」ダブルクォーテーションをエスケイプする。
変数を設定 [$Script;値:
"$Arguments = \"-e `\"console.log('Hello, こんにちは?');`\"\";
$pinfo = New-Object System.Diagnostics.ProcessStartInfo;
$pinfo.FileName = 'C:\node\node.exe';
$pinfo.RedirectStandardError = $true;
$pinfo.RedirectStandardOutput = $true;
$pinfo.CreateNoWindow = $true;
$pinfo.UseShellExecute = $false;
$pinfo.Arguments = $Arguments;
$pinfo.StandardOutputEncoding=[system.Text.Encoding]::UTF8;
$p = New-Object System.Diagnostics.Process;
$p.StartInfo = $pinfo;
$p.Start() | Out-Null;
$Result=$p.StandardOutput.ReadToEnd();
$er=$p.WaitForExit(1000*30);<#タイムアウト ミリ秒#>
$Result;"]

変数を設定 [$Result;値: SMPS_Exe( $Script  ) ]

2018年1月5日金曜日

FileMaker Pro 16 HexEncode の代がえ

FileMaker Pro 16
HexEncode の代がえ
HexEncode : http://www.filemaker.com/help/16/fmp/ja/#page/FMP_Help%2Fhexencode.html%23

OS:Windows

プラグイン使用(FileMaker16, 15以下でも動作可能)
ScriptMakerPS | FileMaker Plugin for Windows
https://sites.google.com/site/scriptmakerps/

フィールド:Value [値:FileMaker]
スクリプト:
変数を設定 [$PS; 値:Let([
PS=" $ByteData = [System.Text.Encoding]::UTF8.GetBytes(\"{Value}\");
$Result=$ByteData | FOREACH { [System.Convert]::tostring($_,16) };
[string]::Join(\"\", $Result);"
];
Substitute ( PS ;
  ["{Value}" ; Substitute ( TableName::Value ; "\"" ; "`\"" )]
 )
)]
フィールド設定 [JSON::Result; SMPS_Exe( $PS )]

戻り値:46696c654d616b6572


[System.Text.Encoding]::UTF8
上記を書き換えれば、UTF-8以外でもエンコード可能。

2017年12月23日土曜日

FileMaker Pro 16 JSONGetElement の代がえ

FileMaker Pro 16
JSONGetElement の代がえ

OS:Windows

プラグイン使用(FileMaker16, 15以下でも動作可能)
ScriptMakerPS | FileMaker Plugin for Windows
https://sites.google.com/site/scriptmakerps/

フィールド:JSON [値:JSON データの例]
フィールド:key [値:ベーカリー.製品[1].名前]
スクリプト:
変数を設定 [$PS; 値:Let([
PS="
$JSON =  \"{JSON}\" | ConvertFrom-Json;
$JSON.{KEY};
"
];
Substitute ( PS ;
["{JSON}" ; Substitute ( JSON::JSON ; "\"" ; "`\"" )]
; ["{KEY}" ; JSON::key]
)
)]
フィールド設定 [JSON::Result; SMPS_Exe( $PS )]


※上記の場合は、]. 角括弧のあとに . ドットが必要。

FileMaker Pro 16 の JSONGetElement では、、]. 角括弧のあとに . ドットを付けない。
JSONGetElement ( $$JSON ; "ベーカリー.製品[1]名前" )

2017年10月25日水曜日

FileMakerでエクスポートしたCSVファイルをUTF-8(BOMあり)にする。

OS:Windows
FileMakerでエクスポートしたCSVファイルをダブルクリックしてExcelで開くと文字を正しく認識してくれません。

UTF-8(BOMあり)にするとダブルクリックしてExcelで開けばOK。

FileMaker エクスポート CSV UTF-8 でエクスポートした場合、UTF-8(BOMなし)となります。

FileMakerでは、UTF-8(BOMあり)で出力出来ないので、PowerShellを使用します。

FileMaker からCSVファイルをエクスポート後、以下のスクリプトを実行。

スクリプト例:

変数を設定 [$win_path; 値:"C:\Users\UserName\Desktop\\test.csv"]
変数を設定 [$Command; 値:Let([
 ¢PS=
 "$Content=Get-Content -Path {$win_path} -Encoding UTF8;
 $Content|Out-File -Encoding UTF8 -FilePath {$win_path};"
 ];
  Substitute ( ¢PS ; "{$win_path}" ; Quote ( $win_path ) )
 )]
Event を送信 [「aevt」; 「odoc」; "powershell -WindowStyle Hidden -Command  " & $Command]

これで、UTF-8(BOMあり) になるので、ダブルクリックしてExcelで開いても文字列がキチンと認識されます。

2017年10月9日月曜日

FileMaker Pro 16 から Dropboxへファイルをアップロード

FileMaker Pro 16 から Dropboxへファイルをアップロード
動作検証
Windows 10|FileMaker Pro 16
iOS 10|FileMaker Go 16

Dropbox API v2 を使用する準備

以下にアクセス
https://www.dropbox.com/developers/apps/create

1. Choose an API
  Dropbox API を選択
2. Choose the type of access you need
  App folder– Access to a single folder created specifically for your app. を選択
3. Name your app
  任意の名前

[Create app]をクリック
この段階でDropbox内にName your appで指定した名前のフォルダが作成される。

OAuth 2
└ Generated access token の[Generate]ボタンをクリックし、access token を控える。


FileMaker Pro 16
スクリプト:
変数を設定 [$file; 値:オブジェクトフィールド]
URLから挿入
URL:https://content.dropboxapi.com/2/files/upload
cURLオプションの指定:
"
-X POST
-H \"Authorization: Bearer APIトークン\"
-H \"Dropbox-API-Arg: {\\\"path\\\": \\\"/ファイル名.png\\\",\\\"mode\\\": \\\"add\\\",\\\"autorename\\\": true,\\\"mute\\\": false}\"
-H \"Content-Type: application/octet-stream\"
--data-binary @$file
"

2017年7月25日火曜日

PowerShell から FileMaker ODBC 経由で新規テーブルを作成。|FileMaker ODBC| CREATE TABLE |PowerShell

PowerShell から FileMaker ODBC 経由で新規テーブルを作成。|FileMaker ODBC| CREATE TABLE  |PowerShell


[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data");
$connectionString = "driver={FileMaker ODBC};server=localhost;database=ファイル名;uid=admin;pwd=;";
<#$connectionString = "driver={FileMaker ODBC};HST=localhost;PRT=2399;SDSN=Post_CURL;uid=admin;pwd=;";#>
$cmd = "CREATE TABLE `"従業員名簿`" (ID INT PRIMARY KEY, `"名`" VARCHAR(20), `"姓`" VARCHAR(20))";

$odbc_con = New-Object System.Data.Odbc.OdbcConnection($connectionString);
$odbc_con.Open();
$odbc_cmd = New-Object System.Data.Odbc.OdbcCommand;
$odbc_cmd.Connection = $odbc_con;
$odbc_cmd.CommandText = $cmd;
$Resurt = $odbc_cmd.ExecuteNonQueryAsync();

$odbc_cmd.Dispose();
$odbc_con.Close();
$odbc_con.Dispose();
$Resurt.Result;
$Resurt.Exception;

2017年5月20日土曜日

FileMaker 簡易WEBスクレイピング

FileMaker 簡易WEBスクレイピング
動作検証
OS:Windows 10
FileMaker Pro 16
※FileMaker Pro 12以降OK。たぶん。

例:WEBビューアで表示中のHTMLソースから 一番目の a href の値を取得。

■スクリプト名:SetField(fn,val)
フィールドを名前で設定 [$fn; $val]


Web ビューアの設定 [オブジェクト名:"web1"; URL:
"javascript:
function f(){
var val=document.getElementsByTagName('a')[0].href;
window.open( 'fmp://$/{ファイル名}?script=SetField(fn,val)&$fn={テーブル名::フィールド名}&$val='+encodeURIComponent(val), 'fmp' ) ;}
f();
"
]



Internet Explorer の値しいウインドウが一つ開いてしまう。
「この Web サイトがこのコンピューターのプログラムを開くことを許可しますか?」
と出る。
「この種類のアドレスを開く前に常に確認する」
のチェックを外しておくと次からは出ない。

もっと制御したい場合は、コチラ:Operate_ie : https://sites.google.com/site/scriptmakerps/operate_ie

もっと、もっと制御したい場合は、コチラ:
FileMaker + Google ChromeでWEBスクレイピング!  : https://sites.google.com/site/scriptmakerps/example/filemaker-google-chromeweb-scraping

Windows FileMaker fmpプロトコル レジストリ

Memo
FileMaker
Windows
fmpプロトコル ターゲット
レジストリ

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\FMP\shell\open\command]
@="C:\\Program Files\\FileMaker\\FileMaker Pro 16 Advanced\\FileMaker Pro Advanced.exe %1"

2017年5月13日土曜日

FileMaker 16 URLから挿入|POST Message To ChatWork

FileMaker 16
スクリプト:URLから挿入 でカスタムヘッダーの指定ができるようになったので、ChatWorkへメッセージを送信してみる。

フィールドを作成
テーブル:Post_cURL
 フィールド:
 URL
 room_id
 messages
 Result
 message_id

テーブル:settings
 フィールド:api_token

テーブル:Post_cURL と テーブル:settings はデカルト積リレーションでつなぐ。


■スクリプト作成

スクリプト名:post_message
URL から挿入 [選択; ダイアログあり:オフ; $json;
/*URLを指定*/
Substitute ( Post_cURL::URL ; "{room_id}" ; Post_cURL::room_id )
;
cURL オプション:
Let([
¢option="
--request POST
--header X-ChatWorkToken:{api_token}
--data-binary body={messages}"
];
Substitute ( ¢option ;
["{api_token}" ; settings::api_token]
; ["{messages}" ; GetAsURLEncoded ( Post_cURL::messages ) ]
)
)
;URL を自動的にエンコードしない]

POSTするだけなら、スクリプト:URL から挿入  だけでOK!

POSTに成功した場合、変数:$json に {"message_id":"2001*******"}  が返ってきます。
cURLオプションの --data-binary body={messages} は、--Form だと改行が無くなります。
--data body={messages} これでもイケるみたいです。

■戻り値の解析:
JSON関連の関数が追加されたので、解析がカンタンです。
関数:JSONGetElement ( $json ; "message_id" ) とするだけ。

FileMaker 16 の スクリプト:URLから挿入 は、まんま、cURL(https://curl.haxx.se/)が組み込まれている様子。
なので、上記で設定した cURL オプションが、curl.exe でそのまま使えます。
FileMaker 15 以前のバージョンの場合は、
$URL=
$cURL_option=
としておいて
Event を送信 [「aevt」; 「odoc」;
"C:\curl\curl.exe " & $URL & " " & $cURL_option ]
としておけば、16への移行時に楽なのと、バージョンが混在していてもスクリプトの切り替えが楽です。
ただ、このままだと、戻り値の取得ができません。
戻り値の取得方法は、以下が参考になります。

FileMaker cmd.exe dirコマンドを実行して戻り値を取得。あれこれ。

2017年5月10日水曜日

FileMaker、Excelと連携。プラグイン無し!

FileMaker、Excelと連携。プラグイン無し!
プラグインは使いません。
Windows 7以降で標準搭載のPowerShellを使用します。
前準備:特に無し。

動作検証
Windows 10
FileMaker 11以降
Excel 2007, 2016

ファイル:Book1.xlsx を開き、セル:A1、A2 を書き換え、別名保存します。

スクリプト:
変数を設定 [$script; 値:
Let([
script="
$file='{filePath}';
$SavePath='{SavePath}';
$excel = New-Object -ComObject Excel.Application;
$excel.Visible =1;
$book = $excel.Workbooks.Open($file);
$sheet = $book.ActiveSheet;
$sheet.Range('A1')='{A1}';
$sheet.Range('A2')='{A2}';
$book.SaveAs($SavePath);
$book.FullName;
$excel.Quit();
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) ;
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) ;
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) ;
"];
Substitute ( script ;
["{filePath}" ; "C:\Users\PCUSER\Desktop\!Temp\Book1.xlsx"]
; ["{SavePath}" ; "C:\Users\PCUSER\Desktop\!Temp\Book1a.xlsx"]
; ["{A1}" ; Example::f1]
; ["{A2}" ; Example::f2]
)
)
]
Event を送信 [「aevt」; 「odoc」; "powershell -windowstyle hidden -Command " & Quote ( $script )]


「$sheet.Range('A1')='{A1}';」の部分を追加・変更すれば、他のセルへも文字列の設定ができます。

もっと複雑な操作が必要な場合は、プラグイン:ScriptMakerPSを使用する、「Operate Excel」が便利です。

2017年3月12日日曜日

別PCのFileMakerのスクリプトを実行。簡易版

http://joy-h.com/bbs2/viewtopic.php?id=6096
上記に書いたものと同じ内容。

別PCのFileMakerのスクリプトを実行。
動作検証は、少なめです。何か予期しない不具合があるかも?

テーブルを一つ作成し、

テーブル:Command
フィールド:Target
フィールド:Source

ターゲットのテーブルと
デカルト積[X]のリレーションを設定します。

ターゲットのテーブルがあるレイアウトのヘッダーに
WEBビューアを設置
式:
If (  FilterValues ( Get ( システム IP アドレス ) ; Command::Target ) ; "Data:text/html," & Command::Source ; "" )

iPad(FileMaker Go)で、
フィールド:Target
値:操作したいPCのIPアドレス

フィールド:Source
値:

上記のようにすると、
フィールド:Target
または、
フィールド:Source
を書き換えるたびに、ターゲットのPCで「"fmp://$/{ファイル名}?script=receive&$argu=012345あいうえお"」が実行されます。

追記

フィールド:Source に

があるままだと、レコード移動やその他のタイミングで実行されるので、

テーブル:Command に フィールド:Code を追加。

送信側実行スクリプトは、

フィールド設定 [Command::Source; Command::Code]
フィールドへ移動 []

こうしておき、

受信側スクリプトでは、以下のようにして フィールド:Source を初期化する。

フィールド設定 [Command::Source; "(´・_・`)"]
フィールドへ移動 []

2017年2月10日金曜日

FileMaker フィールド内のNull文字を消す。

FileMaker フィールド内のNull文字を消す。

メモ:
Substitute ( text ; Base64Decode ( "AA==" ) ; "" )
この方法でのNull文字の置換は、FileMaker 14・15 で可能です。(FileMaker 13 では、Base64Decode ( "AA==" ) で、 Null文字を返しません。)

http://joy-h.com/bbs2/viewtopic.php?pid=36685#p36685

2016年8月28日日曜日

FileMakerで一般公開されている「dll」を使用する。QRコード、JANコードなどを作成

C#用とか、.Netで作成された「dll」は、PowerShellを通じて、FileMakerで使うことができます。




動作確認
OS:Windows 10
FileMaker Pro 13|14|15

プラグイン無しでも動作します。
PowerShellを利用します。
※Windows 7 以降、PowerShellは、標準インストールなので気にしなくて大丈夫です。(基本的には。)
プラグイン:ScriptMakerPS でも動作します。サンプルファイルは、プラグイン「有」「無」両方に対応。
「ScriptMakerPS」が無い場合は、FilrMakerのスクリプト「Event を送信」で実行します。

サンプルファイル:
https://sites.google.com/site/scriptmakerps/example/barcode-at-c-dll


無料ライブラリー 「DotNetBarcode」 を使用してみます。
以下でダウンロード可能。
http://www.vector.co.jp/soft/win95/writing/se408449.html

「DotNetBarcode.dll」は、DotNetBarcodeさんの無料ライブラリーです。
http://www.geocities.jp/japan_inf/DotNetBarcode/

ダウンロードファイル: DotNetBarcode_V2.4.0.zip

C:ドライブ直下に「dll」フォルダを作成し、
ダウンロードした「DotNetBarcode_V2.4.0.zip」展開、その中の「DotNetBarcode.dll」を
「C:\dll」にコピー。



※重要
「セキュリティ:ブロックの解除」の確認。
「DotNetBarcode.dll」を右クリック -> プロパティー
「ブロックの解除」をチェックしし、「適用」をクリック。



PowerShellの記述は、以下の様なカンジ。


 Add-Type -Path 'C:\dll\DotNetBarcode.dll' ;
 $bc1=New-Object DotNetBarcode;
 $bc1.Type=[DotNetBarcode+Types]::QRCode;
 $bc1.SaveFileType=[DotNetBarcode+SaveFileTypes]::Png;
 $bc1.Save('0123456789あいうえおabcdefg','C:\Users\PCUSER\Desktop/Barcode.png', 600, 600);

「Windows PowerShell ISE」を起動し、実行すれば、デスクトップに「Barcode.png」が作成されます。

FileMakerに組み込み。

QRコード、JAN13、JAN8、Code39の作成が可能です。

QRコード


JAN13

JAN8

code39


2016年8月14日日曜日

FileMaker で自作dll(C#)を使う。

FileMaker で自作dll(C#)を使う。

検証
OS:Windows 10 64bit
FileMaker 14 32bit|64bit

Visual Studio 2015 でカンタンな dll サンプルを作成。







コードは、引数を受け取って、改行と"こんちちわ。" を返すだけのサンプル。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public class Class1
    {
        public string test(string str)
        {

            return str + "\r\nこんにちわ。";
        }
    }
}

ビルド。作成された「ClassLibrary1.dll」を説明をわかりやすくするために、Cドライブの直下に配置。





ここからFileMaker。

ScriptMakerPS (FileMakerのフィールドに記述した「PowerShell」を実行し、戻り値を取得。)が設定されている必要があります。
フィールド:script
フィールド:Result
を作成。

ボタンを作成し、
フィールド設定 [HelloWold::Result; SMPS_Exe( HelloWorld::Script )]
を設定。

フィールド:script  に

[void][Reflection.Assembly]::LoadFile('c:\ClassLibrary1.dll');

$cls = New-Object ClassLibrary1.Class1;

$Result=$cls.test('ハロー');
$Result;

を記述。

ボタンをクリックし、フィールド設定 [HelloWold::Result; SMPS_Exe( HelloWorld::Script )] を実行すれば、フィールド:Result に

ハロー
こんにちわ。

が帰ってきます。


2016年8月11日木曜日

FileMaker + Google ChromeでWEBスクレイピング!|Web Scraping With Filemaker

web scraping amazon
FileMaker  + ScriptMakerPS + Powershell + Selenium + Google Chrome


https://youtu.be/NKe8X6aZe2I

FileMaker  から Google Chrome を操作。


動作検証
OS:Windows 10 64bit
FileMaker Pro 14 32bit|64bit
Powershell 5.0
Selenium 2.53.1.0
ChromeDriver 2.26(20161217現在)
ScriptMakerPS (FileMakerのフィールドに記述した「PowerShell」を実行し、戻り値を取得。)


OS:Windows 7 32bit
FileMaker Pro 14 32bit
Powershell 4
Selenium 2.53.1.0
ChromeDriver
ScriptMakerPS




Seleniumの準備
以下からダウンロード。
http://www.seleniumhq.org/download/
Previous Releases をクリック。



http://selenium-release.storage.googleapis.com/index.html
「2.53」をクリック。(2016.8.11現在)


「selenium-dotnet-2.53.1.zip」をダウンロード。(2016.8.11現在)


Google Chromeの操作のために「ChromeDriver - WebDriver for Chrome」が必要です。
以下からダウンロード。
https://sites.google.com/a/chromium.org/chromedriver/downloads




chromedriver_win32.zip をダウンロード。(2016.8.11現在)




Cドライブの直下に「WebDriver」ファルダ、その下に「selenium」フォルダを作成。
「selenium-dotnet-2.53.1.zip」を解凍し、内容を保存。

C:\WEBDRIVER
└─selenium
    │  WebDriver.chm
    ├─net35
    └─net40

上で作成した「WebDriver」ファルダの下に「chromedriver_win32」フォルダを作成。
「chromedriver_win32.zip」を解凍し、中の「chromedriver.exe」を保存。
C:\WEBDRIVER
├─chromedriver_win32
│      chromedriver.exe

※保存場所は、任意ですが、ここでは、上記のようにしています。あとの説明では、上記に各ファイルがあるものとして進めます。

※重要

「セキュリティ:ブロックの解除」の確認。
「C:\WebDriver\selenium\net40」フォルダを開き、すべてのファイルの「ブロックの解除」を行ってください。
今回は、「net40」ファルダの方を使用します。

「C:\WebDriver\chromedriver_win32」フォルダ内の「chromedriver.exe」も同様に「ブロックの解除」を行ってください。


ここまでで、Seleniumの準備は、完了です。
動作確認して見ましょう。

「Windows PowerShell ISE」または、「Windows PowerShell」を起動します。(Windows 7以降では、標準でインストールされています。)
以下のコードを実行し、Google Chrome が起動し、Amazon のページが表示されれば、OKです。

Powershellスクリプト:

Add-Type -Path "C:\WebDriver\selenium\net40\WebDriver.dll" ;
Add-Type -Path "C:\WebDriver\selenium\net40\WebDriver.Support.dll" ;
$chromedriver_path = "C:\WebDriver\chromedriver_win32\" ;
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver ($chromedriver_path);
$driver.Navigate().GoToUrl("https://www.amazon.co.jp/");


FileMaker プラグイン ScriptMakerPS の設定

FileMaker 12|13|14(32bit)|15(32bit)で ScriptMakerPS を使う場合。

Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) をインストールして下さい。
http://www.microsoft.com/ja-jp/download/details.aspx?id=5555

Microsoft .NET Framework 4 以降が必要です。(Windows 7 の場合)
http://www.microsoft.com/ja-jp/download/details.aspx?id=17851
※Windows 8 の場合は、.NET Framework 4.5がプレインストールなので必要ありません。
※Windows 10 の場合は、.NET Framework 4.6がプレインストールなので必要ありません。


Powershell のバージョンの確認。(Windows 7 の場合)

※Windows 8 以降の場合は、この作業は、必要ありません。
プレインストール
Windows 8 |Windows PowerShell 3.0
Windows 8.1 |Windows PowerShell 4.0
Windows 10 |Windows PowerShell 5.0

Powershell を起動。

$PSVersionTable.PSVersion.Major
を入力。(上記をコピーして、右クリック貼り付け)



「3」以降が、返ればOK。

「2」以前の場合は、PowerShell 3以降をインストールしてください。

PowerShell3.0
http://www.microsoft.com/en-us/download/details.aspx?id=34595
64-bit versions: Windows6.1-KB2506143-x64.msu
32-bit versions: Windows6.1-KB2506143-x86.msu

FileMaker 12|13|14(32bit)|15(32bit)、ScriptMakerPS(32bit)で使用すいる場合、
32-bit versions: Windows6.1-KB2506143-x86.msu。
FileMaker 14(64bit)|15(654bit)、ScriptMakerPS(64bit)で使用すいる場合、
64-bit versions: Windows6.1-KB2506143-x64.msu が必要です。
ややこしいので、両方インストールしても問題なし。(OSが64bitの場合)



「ScriptMakerPS.fmx」をダウンロード。
FileMaker 12|13|14(32bit)|15(32bit)の場合は、以下。
https://sites.google.com/site/scriptmakerps/download-32bit
ファイル名:ScriptMakerPS_BETA22_32bit.zip(2016.8.14現在)

「ScriptMakerPS.fmx」を以下、「Extensions」ホルダにコピー。

C:\Program Files (x86)\FileMaker\FileMaker Pro 14 Advanced\Extensions
C:\Program Files\FileMaker\FileMaker Pro 14 Advanced\Extensions
など


FileMakerを起動。

「編集(E)」->「環境設定(F)」->プラグイン を開き、「ScriptMakerPS」にチュエックを入れて下さい。



サンプルファイル:
https://sites.google.com/site/scriptmakerps/example/filemaker-google-chromeweb-scraping


2016年5月25日水曜日