Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

FileMaker Proの機能を拡張するプラグインの作成

第10回 FileMakerプラグイン作成の基礎

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/05/08 12:35

この連載では、システム開発において採用が増えつつある「FileMaker」というデータベースソフトウェアについて、最前線で活躍するエンジニアがリレー形式でその魅力を紹介します。第10回は、FileMakerの機能を拡張するソフトウェア「プラグイン」の開発方法について、簡単なサンプルを元に作成方法を解説していきます。

目次

はじめに

 今回は、FileMakerの機能を拡張するソフトウェア「プラグイン」の開発方法について、簡単なサンプルを元に作成方法を解説していきます。

プラグインとは

 プラグインとは、FileMakerに機能を追加するソフトウェアです。プラグインを利用すると、FileMakerの可能性をさらに広げることができます。

 例えば、弊社が販売している「GN-File」というプラグインがあります。これはFileMaker上でファイルのコピーなど、フォルダ・ファイルを操作できるプラグインです。FileMakerのスクリプトでは基本的にフォルダ・ファイルを操作することはできませんが、プラグインを追加することでスクリプトからフォルダ・ファイルを操作できるようになります。

プラグインの概要

 プラグインはクライアントのPCにインストールして利用します。拡張子は「fmx」です。プラグインの作成には、Windows版はCまたはC++、Macintosh版はXcodeを利用します。

今回作成するプラグインのバージョン
 プラグインはFileMaker 6以前と7以降、およびWindows版とMacintosh版で扱いが異なりますが、今回は、Windows版FileMaker 7以降のプラグインを対象とします。

サンプルを利用する

 まずは、FileMakerのインストールCDに含まれているコードテンプレートをビルドして、プラグインをFileMakerにインストールしてみましょう。

ビルドの方法

  1. コードテンプレートはインストールCDに含まれています。
  2. まず、CD内の「日本語エキストラ」フォルダをパソコンにコピーしてください。コピーが完了したら「日本語エキストラ\サンプル\FMExample\FMPlugInSDK\Example」フォルダを開き、プロジェクトファイル「WinExample.vcproj」を実行します。
     
  3. 次に、このプロジェクトをビルドしてください。これで、プラグインプロジェクトのビルドは完了です。

インストール方法の確認

  1. 「日本語エキストラ\サンプル\FMExample\FMPlugInSDK\Example」フォルダにある「WinExampleD.fmx」ファイルを「FileMaker\FileMaker Pro 9 Advanced\Extensions」フォルダにコピーします。
  2. FileMakerを立ち上げます。
  3. メニュー編集の環境設定を選択します。
  4. プラグインタブをクリックし、プラグインが正しくインストールされたことを確認します。
 

外部関数を作成する

 次は、簡単なプラグインのビルドの仕方を説明します。このプラグインに含まれる関数は次の通りとします。

  1. プラグインの実行中に、「Hello」 メッセージボックスを表示します。
  2. FileMakerから文字列を取得し、その文字列をFileMakerに返します。

 環境は次の通りです。

  • 言語: Microsoft Visual C++
  • 開発環境: Microsoft Development Environment 2003

作成手順

 次のステップを順番に行ってください。

  1. 「日本語エキストラ\サンプル\FMExample\FMPlugInSDK\Example」フォルダの「WinExample.vcproj」を実行してください。
  2.  
  3. 「FMPlugInExample.cpp」を開いて、下図のように新しいStringIDをインサートします。
  4.  
    // The following strings are usually not localized,
    // but it is your option.
    enum
    {
            kXMpl_AddStringID = 102,
            kXMpl_AppendStringID = 103,
            kXMpl_EvaluateStringID = 104,
            kXMpl_StartScriptStringID = 105,
            kXMpl_UserFormatNumberStringID = 106,
            kXMpl_FormatNumberStringID = 107,
            kXMpl_NumToWordsStringID = 108,
            kXMpl_VersionStringID = 109,
            GNEXT_HelloID = 110 // New StringID
    };
    
     
  5. 「FMPluginFunctions.h」を開いて、新しいFunctionIDを追加します。
  6.  
    // Function IDs
        enum
        {
            kXMpl_Add,
            kXMpl_Append,
            kXMpl_Evaluate,
            kXMpl_StartScript,
            kXMpl_UserFormatNumber,
            kXMpl_FormatNumber,
            kXMpl_NumToWords,
            kXMpl_Version,
            GNEXT_Hello // New FunctionID
        };
    
     
  7. 「FMPluginFunctions.cpp」に下記の関数を定義します。
  8.  
    FMX_PROC(fmx::errcode) Do_GNEXT_Hello(short /* funcId */,
     const fmx::ExprEnv& /* environment */,
     const fmx::DataVect&  dataVect, fmx::Data& results)
    {
        // System variable
        fmx::errcode errorResult = 0;
        // Store entered text
        fmx::TextAutoPtr    resultTxt;
    
        resultTxt->SetText(dataVect.AtAsText(0),0,
                           dataVect.AtAsText(0).GetSize());    
        
        // Show a hello message box
        MessageBox(NULL, "Hello", "Hello", MB_OKCANCEL);
    
        // Return value to FM
        results.SetAsText( *resultTxt, results.GetLocale());
    return(errorResult);
    } // Do_GNEXT_Hello
    
     
  9. 「FMPluinExample.rc」に定数の文字列をインサートします。
  10.  
    // This string table is usually not localized, but it is your option.
    //
    
    STRINGTABLE
    BEGIN
        102    "XMpl_Add( number1; number2 )"
        103    "XMpl_Append( textToAppend... )"
        104    "XMpl_Evaluate( calcToEvaluate )"
        105    "XMpl_StartScript( filename; scriptname )"
        106    "XMpl_UserFormatNumber( textOrNumber )"
        107    "XMpl_FormatNumber( formatString; textOrNumber )"
        108    "XMpl_NumToWords( number )"
        109    "XMpl_Version"
        110    "GNEXT_Hello( text )" // String constant
    END
    
     
  11. FMPlugInExample.cppに新たにコマンドをインサートします。
  12.  
    //GNEXT_HelloID
    Do_GetString(GNEXT_HelloID, name, true);
    Do_GetString(GNEXT_HelloID, prototype);
    err = fmx::ExprEnv::RegisterExternalFunction(*pluginID,
        GNEXT_Hello, *name, *prototype, 1, 1,
        regFunctionFlags, Do_GNEXT_Hello);
    
     
    外部プラグインのパラメータの最大と最小は赤字のように設定してください。また上記のコードブロックは必ずDo_PluginInit関数にインサートしてください。
     
     
     
  13. 「FMPluginFunctions.h」ファイルの外部関数を宣言します。
  14.  
    FMX_PROC(fmx::errcode) Do_vnext_Hello(short funcId,
        const fmx::ExprEnv& environment,
        const fmx::DataVect& dataVect, fmx::Data& results);
    
     
  15. 最後に 「サンプルを利用する」で述べたビルドとインストールを行ってください。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • TRAN NGOC SON(トラン グオク ソン)

    ベトナム、ホーチミン市出身。東京大学工学部卒。大学院に進学したが、ビジネスの道に惹かれ中途退学して株式会社ジーネクストに入社。 エクセル、ファイル、FTPなどさまざまな種類のプラグインを作った。2005年9月にアメリカのアリゾナ州に行われるFileMakerDeveloperConferenc...

バックナンバー

連載:FileMaker Pro 実践チュートリアル

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5