FileMakerのクリップボード形式の内容を調べてみた【BFL vol.10】

Picture of 執筆者:中富 悠貴
執筆者:中富 悠貴

FileMakerエンジニア

FileMakerのクリップボード形式の内容を調べてみた

近年では日本でも最高気温が40度を超えることも珍しくない時代になりました。
多ければ多いほどいいという意味合いの言葉で、多々益々弁ず (たたますますべんず)ということわざがありますが、気温に関してはその限りではありませんね。

しかしBriller FileMaker Laboratory(BFL)ならば、検証は多ければ多いほど開発の助けになりますので、今後も様々なことを積極的に調べていきたいと思います。

目次

テーマ

今回のテーマは「クリップボード形式の内容の調査」です!

FileMaker(ファイルメーカー)でテーブルやスクリプトなど、テキストや画像ではないデータをコピー&ペーストすることはあると思いますが、どういった仕組みなのか気になったことはありませんでしょうか。

FileMakerに限らず、この話題は昔からあるので、クリップボードの内容が確認できたり、その内容を書き換えたものをペーストできるようにしたりするツールも多々あります。

細かい仕様はツール任せでも問題はないのですが、クリップボード形式の構造を理解すれば、テキストベースでデータの用意を行ったり、保存も容易になるので、より効率の良い構築が可能となります。

普段何気なくコピー&ペーストをされている方は是非とも参考にしていってください。

クリップボードについて

クリップボード自体はポピュラーな機能なので、多く説明する必要はないと思われますが、簡単に言うとパソコンで一時的にデータを保存する機能です。

Wikipedia:クリップボード

少し細かい話をしますと、クリップボードには形式が存在し、いくつかの種類があります。

・標準クリップボード形式:システム側で定義されている形式
・登録済みクリップボード形式:アプリケーション側が登録する形式
・プライベートクリップボード形式:特定のアプリケーションで扱いたい形式

Windows アプリ開発:クリップボードの形式

通常のテキストや画像は標準クリップボード形式で呼び出されるので、様々な箇所での利用が可能です。

しかし、FileMaker(ファイルメーカー)でのみ利用されるテーブル・フィールド・スクリプト・スクリプトステップ・レイアウトオブジェクト・カスタム関数は標準クリップボード形式ではないため、コピーしてもそのままテキストエディタなどにペーストすることはできません。

FM Clipboard Thingについて

上記の項で説明したように標準クリップボード形式でないFileMaker情報を確認するには標準のツールでは難しいため、今回はFM Clipboard Thingを利用します。

FM Clipboard Thing

こちらはFileMakerのクリップボード情報をXML形式で起こし、その内容をペーストに利用することもできる大変便利なツールです。

詳しい使い方は割愛させていただきますが、今回の調査ではFM Clipboard Thingを利用してクリップボードの内容を確認していきます。

環境と利用ツール

検証するにあたっての環境と利用ツールを紹介します。

ソフトウェア:FileMaker Pro 21.1.1.41
OS:Windows 11 Pro(24H2)
利用ツール:FM Clipboard Thing v1.3.4

検証方法

ファイルの準備

まずは下図のようなファイルを用意します。
フィールドはテキストフィールドのみとなっております。

BFL vol.10 フィールド

レイアウトはテキストフィールドのみ設置しております。

確認用のスクリプトを用意します。
スクリプトステップにはコメントを入れます。

BFL vol.10 スクリプト
確認用のカスタム関数を用意します。
BFL vol.10 カスタム関数

検証内容

今回確認するFileMaker(ファイルメーカー)のオブジェクトデータは以下を対象とします。

・テーブル
・フィールド
・スクリプト
・スクリプトステップ
・レイアウトオブジェクト
・カスタム関数

上記のデータからそれぞれコピーを行い、FM Clipboard Thingによってクリップボードの内容をXMLで取得し、フォーマット形式や構造の確認します。

検証結果

テーブル

フォーマット形式:XMTB

				
					<fmxmlsnippet type="FMObjectList">
  <BaseTable name="bfl10">
    <Field id="12" dataType="Text" fieldType="Normal" name="テキスト">
      <Comment></Comment>
      <AutoEnter allowEditing="True" constant="False" furigana="False" lookup="False" calculation="False">
        <ConstantData></ConstantData>
      </AutoEnter>
      <Validation messageCalc="False" message="False" maxLength="False" valuelist="False" calculation="False" alwaysValidateCalculation="False" type="OnlyDuringDataEntry">
        <NotEmpty value="False"></NotEmpty>
        <Unique value="False"></Unique>
        <Existing value="False"></Existing>
        <StrictValidation value="False"></StrictValidation>
      </Validation>
      <Storage autoIndex="True" index="None" indexLanguage="Japanese" global="False" maxRepetition="1"></Storage>
    </Field>
  </BaseTable>
</fmxmlsnippet>
				
			

フィールド

フォーマット形式:XMFD

				
					<fmxmlsnippet type="FMObjectList">
  <Field id="12" dataType="Text" fieldType="Normal" name="テキスト">
    <Comment></Comment>
    <AutoEnter allowEditing="True" constant="False" furigana="False" lookup="False" calculation="False">
      <ConstantData></ConstantData>
    </AutoEnter>
    <Validation messageCalc="False" message="False" maxLength="False" valuelist="False" calculation="False" alwaysValidateCalculation="False" type="OnlyDuringDataEntry">
      <NotEmpty value="False"></NotEmpty>
      <Unique value="False"></Unique>
      <Existing value="False"></Existing>
      <StrictValidation value="False"></StrictValidation>
    </Validation>
    <Storage autoIndex="True" index="None" indexLanguage="Japanese" global="False" maxRepetition="1"></Storage>
  </Field>
</fmxmlsnippet>
				
			

スクリプト

フォーマット形式:XMSC

				
					<fmxmlsnippet type="FMObjectList">
  <Script includeInMenu="True" SiriShortcutVisible="False" runFullAccess="False" id="1" name="スクリプト">
    <Step enable="True" id="89" name="# (コメント)">
      <Text>スクリプトステップ</Text>
    </Step>
  </Script>
</fmxmlsnippet>
				
			

スクリプトステップ

フォーマット形式:XMSS

				
					<fmxmlsnippet type="FMObjectList">
  <Step enable="True" id="89" name="# (コメント)">
    <Text>スクリプトステップ</Text>
  </Step>
</fmxmlsnippet>
				
			

レイアウトオブジェクト

フォーマット形式:XML2

				
					<?xml version="1.0" encoding="UTF-8"?>
<fmxmlsnippet type="LayoutObjectList">
  <Layout enclosingRectTop="100.0000000" enclosingRectLeft="50.0000000" enclosingRectBottom="130.0000000" enclosingRectRight="300.0000000">
    <Object type="Field" key="2" LabelKey="0" flags="0" rotation="0">
      <Bounds top="100.0000000" left="50.0000000" bottom="130.0000000" right="300.0000000" />
      <FieldObj numOfReps="1" flags="32" inputMode="0" keyboardType="1" displayType="0" quickFind="1" pictFormat="5">
        <Name>bfl10::テキスト</Name>
        <ExtendedAttributes fontHeight="13" graphicFormat="5">
          <NumFormat flags="2304" charStyle="0" negativeStyle="0" currencySymbol="¥" thousandsSep="44" decimalPoint="46" negativeColor="#DD000000" decimalDigits="2" trueString="はい" falseString="いいえ" />
          <DateFormat format="0" charStyle="0" monthStyle="1" dayStyle="1" separator="47">
            <DateElement>8</DateElement>
            <DateElement>4</DateElement>
            <DateElement>1</DateElement>
            <DateElement>0</DateElement>
            <DateElementSep index="0"></DateElementSep>
            <DateElementSep index="1">年</DateElementSep>
            <DateElementSep index="2">月</DateElementSep>
            <DateElementSep index="3">日</DateElementSep>
            <DateElementSep index="4"></DateElementSep>
          </DateFormat>
          <TimeFormat flags="159" charStyle="0" hourStyle="0" minsecStyle="1" separator="58" amString=" 午前" pmString=" 午後" ampmString="" />
          <CharacterStyle mask="32695">
            <Font-family codeSet="ShiftJIS" fontId="4" postScript="ヒラギノ角ゴ ProN W3">ヒラギノ角ゴ ProN W3</Font-family>
            <Font-size>16</Font-size>
            <Face>0</Face>
            <Color>#282828</Color>
          </CharacterStyle>
        </ExtendedAttributes>
        <Styles>
          <FullCSS>[CSSが長いため割愛]</FullCSS>
          <ThemeName>com.filemaker.theme.apex_blue</ThemeName>
        </Styles>
        <DDRInfo>
          <Field name="テキスト" id="12" repetition="1" maxRepetition="1" table="bfl10" />
        </DDRInfo>
      </FieldObj>
    </Object>
  </Layout>
</fmxmlsnippet>
				
			

カスタム関数

フォーマット形式:XMFN
				
					<fmxmlsnippet type="FMObjectList">
  <CustomFunction id="1" functionArity="0" visible="True" parameters="" name="カスタム関数"></CustomFunction>
</fmxmlsnippet>
				
			

まとめ

レイアウトオブジェクトを除き、基本的な構造として<fmxmlsnippet type=”FMObjectList”></fmxmlsnippet>がルート要素に設けられており、その中に各内容の要素を入れ込んでいく形となっていました。

レイアウトオブジェクトは他と比べ描画に関する情報量が多い分、内容も複雑になっているのが見受けられます。

スクリプトステップは今回コメントのみとさせていただきましたが、実際の運用では様々な種類を入れての用意となり、バージョンによっては内容の入れ替わりもあります。

それら以外に関しては内容が大きく変わることはないと思われますので、手を加えやすい形で一度形を作っておけば、1つずつ入力して用意するといった手間が解消されるかもしれません。

普段何気なく利用している機能がどのようになっているのか、中身を調べてみるのは勉強になりますし、同じようなものを作るときの参考にもなります。

なんとなく知っていることも、こうして書き起こすことでより理解が深まりますので、大変有意義な調査となりました。

以上が【BFL vol.10】FileMakerのクリップボード形式の内容を調べてみたの検証となります。

ここまで読んでくださって誠にありがとうございました。また次回のBFLもお楽しみに!

また、株式会社ブリエでは、FileMakerを活用したシステム開発や運用支援を行っています。

システム開発を行うための環境構築のご相談もお気軽にお問い合わせください。

まずは、資料請求

ダウンロードできる資料の内容
・資料はすぐにメールで届きます
・1分でわかる株式会社ブリエの会社概要
・FileMaker開発の概算料金

無料相談はこちら

お問い合わせ・ご相談できること
・自社の業務の一元管理の進め方 / 改善について相談したい
・どのような機能が作れるのか知りたい
・自社に合う形で導入したときの料金を知りたい

Picture of 執筆者:中富 悠貴
執筆者:中富 悠貴

株式会社ブリエFileMakerエンジニア。ローコード開発を筆頭にプロコードからフロントエンドまで、多種多様な開発経験を活かしたフットワークの軽さが自慢のオールラウンダー。より便利に、より使いやすいUI/UXデザインをモットーに、新しい分野にも積極的に挑戦することで、あらゆるニーズに柔軟に対応できるよう、日々勉強を続けております。

【全国対応】株式会社ブリエは、企業の経営課題であるDX化、業務効率化、ペーパーレス化、情報の一元管理など、ビジネスニーズの変化に合わせてFileMakerで業務システムを開発し、柔軟に拡張して解決します。あらゆる業種や規模の企業、非営利団体、学校に固有の課題を解決するカスタムAppをご提案します。

新着記事
アーカイブ
まずは、資料請求

ダウンロードできる資料の内容
・資料はすぐにメールで届きます
・1分でわかる株式会社ブリエの会社概要
・FileMaker開発の概算料金

無料相談はこちら

お問い合わせ・ご相談できること
・自社の業務の一元管理の進め方 / 改善について相談したい
・どのような機能が作れるのか知りたい
・自社に合う形で導入したときの料金を知りたい