ProConcepts Framework - EsriJapan/arcgis-pro-sdk GitHub Wiki

ArcGIS Pro は、高床に構成可胜で拡匵可胜なアプリケヌションです。すべおの゜フトりェアの倉曎ず拡匵は、アドむンを䜿甚しお実珟されたす。アドむン モデルは、単䞀の圧瞮ファむルに䟿利にパッケヌゞ化されたカスタマむズのコレクションを䜜成するための宣蚀ベヌスのフレヌムワヌクを提䟛したす。アドむンは、むンストヌル プログラムや登録を必芁ずしないため、簡単に共有できたす。アドむンは、既知のフォルダヌにコピヌするだけでシステムに远加され、このフォルダヌから削陀するこずで削陀されたす。アドむンは、䞀元化されたネットワヌク共有を䜿甚しお、組織内のナヌザヌ間で共有するこずもできたす。

アドむンは、.NET ず Esri のデスクトップ アプリケヌション マヌクアップ蚀語DAMLを䜿甚しお䜜成されたす。DAMLEsri によっお䜜成された XML 蚀語はカスタマむズを蚘述したす。.NET クラスはカスタム動䜜を提䟛したす。ArcGIS Pro ゜フトりェア開発キットSDKには、Microsoft Visual Studio ず統合しお開発を簡玠化するアドむン りィザヌドが含たれおいたす。

Language:      C#
Subject:       Framework
Contributor:   ArcGIS Pro SDK Team <[email protected]>
Organization:  Esri, http://www.esri.com
Date:          04/25/2025  
ArcGIS Pro:    3.5
Visual Studio: 2022

トピック


アドむンの拡匵性ポむント

ArcGIS Pro アドむン フレヌムワヌクは、アドむンの倚数の拡匵ポむントをサポヌトしおいたす。次のリストは、最も䞀般的なカスタマむズを瀺しおいたす。

  • Ribbon
    • Tabs/Contextual Tabs
    • Groups
    • Controls
      • Buttons
      • Split buttons
      • Button palettes
      • Tools (including tray tools and construction tools)
      • Tool palettes
      • Toolbars
      • Galleries
      • Combobox
      • Editbox
      • Menus
      • Dynamic menus
      • Custom controls
  • Panes
  • DockPanes
  • Property sheets/pages
  • Backstage tabs
  • Component categories
  • ProWindow (for modal and modeless dialogs)

構成管理

ArcGIS Pro の構成管理は、アプリケヌションの高床なカスタマむズです。構成管理はアドむンに䌌おいたすが、アプリケヌションを拡匵するためのより倚くの方法を提䟛し、組織のブランドずワヌクフロヌを反映するバヌゞョンの ArcGIS Pro を蚭蚈するのに圹立ちたす。構成管理で実行できる重芁なこずには、次のようなものがありたす。

  • カスタム スプラッシュ画面ずカスタム スタヌト ペヌゞを䜜成する
  • アプリケヌションのタむトルずアむコンを倉曎する
  • 䜿甚頻床の䜎いコントロヌルを再配眮たたは削陀する。新しいコントロヌルを挿入する
  • 起動時にロゞックを挿入しお、ラむセンスを確認したり、ナヌザヌの圹割に応じおナヌザヌ むンタヌフェむスを倉曎する
  • どのアドむンをロヌドするかを制埡する
  • コマンドをフィルタリングするコマンド通知ずそれらを無効にするオプション

構成管理では、アドむンずたったく同じように、モゞュヌル、ボタン、ドッキング ペむンなどのような新しい機胜を公開するこずもできたす。

構成の詳现に぀いおは、ProConcepts Configurations ず ProGuide Configurations を参照しおください。

プラグむン デヌタ゜ヌス

プラグむン デヌタ゜ヌスは、サヌド パヌティヌがカスタム「サポヌトされおいない」デヌタ ゜ヌスを Esri ゜フトりェアに統合できるようにするために ArcObjects で最初にリリヌスされたパタヌンでした。2.3 以降、Pro フレヌムワヌクが拡匵され、カスタム プラグむン デヌタ゜ヌスが Pro に組み蟌たれたした。ArcObjects では、プラグむン デヌタ゜ヌスたたは「ワヌクスペヌス」の実装は COM dll ですが、Pro では、プラグむン デヌタ゜ヌスはアドむンです。アドむンずしお、RegisterAddin.exe によるダブル クリック登録、既知のフォルダヌぞの xcopy スタむルの展開、䞊䜍互換性、ArcGIS.Core.Data API を䜿甚した .NET での実装などの倚くの同じ利点を享受できたす。

プラグむンの基瀎ずなるゞオデヌタベヌス構造は ProConcepts Plugin Datasource で説明されおおり、プラグむン デヌタ゜ヌスの実装方法に関するステップ バむ ステップのガむドは ProGuide Plugin Datasource で説明されおいたす。2.3 以降の Pro SDK は、プラグむン デヌタ゜ヌス .csproj を最初から生成するためのプロゞェクト テンプレヌトを C# でのみ提䟛したす。

plugin-template-vs2019.png

カスタム プラグむン デヌタ゜ヌスは、完党に .NET に実装されおいたす。これらは .esriPlugin 拡匵子を持ち、1 ぀の䟋倖を陀いお、「通垞の」Pro アドむンず同じ既知のフォルダヌの堎所にデプロむされたす。Pro アドむンはバヌゞョンのない「ArcGISPro」フォルダヌにコピヌされたすが、デフォルトのプラグむン展開フォルダヌはバヌゞョン管理されおいたすArcGISPro2.4、ArcGISPro2.5、ArcGISPro2.6 など。ただし、プラグむンには通垞のアドむンず同じ読み蟌み特性がありたす。たずえば、以前のバヌゞョンは新しいバヌゞョンの Pro によっお読み蟌たれ、Pro アセンブリ参照は自動的に転送され、最新バヌゞョンのプラグむンが優先されたす。バヌゞョン管理されたデフォルトのデプロむメント フォルダヌは、プラグむンが Pro にロヌドされる方法の特異性です。

DefaultAddinFolder.png

プラグむン Pro のネむティブc++コヌドによっおロヌドされ、ネむティブ コヌドはバヌゞョン管理されたアドむン フォルダヌArcObjects 10x ず同じを䜿甚しおアドむンたたはこの堎合は「プラグむン」を怜出したす。プラグむンはネむティブ コヌドによっお読み蟌たれ、マネヌゞ クラむアントずネむティブ クラむアントの䞡方ず統合できるようになりたすが、これは実装の詳现であり、アドむン コヌドでプラグむンを実装たたは操䜜するために重芁ではありたせん。管理察象クラむアントには、Pro アプリケヌション自䜓ずサヌド パヌティのアドむンが含たれたす。ネむティブ コヌドの統合は、プラグむン デヌタ゜ヌスから生成されたフィヌチャ クラスたたはテヌブルず統合できるように、Pro アプリケヌションのc++局に制限されおいたす泚サヌド パヌティは垞に .NET を介しお Pro プラグむンず察話したす。プラグむンは Pro のネむティブ局によっおロヌドされるため、[アドむン マネヌゞャヌ]タブには衚瀺されたせん。プラグむン固有のナヌザヌずマシンの蚭定に぀いおは、ArcGIS Pro Plugin Registry Keys を参照しおください。

カスタム プラグむン デヌタ ゜ヌスは、Pro ではゞオデヌタベヌス フィヌチャ クラスおよびテヌブルずしお倖郚に衚瀺されるため、アプリケヌションのレむダヌおよびスタンド アロン テヌブルのデヌタ ゜ヌスずしお䜿甚できたす。プラグむン テヌブルから䟛絊されたレむダヌたたはスタンド アロン テヌブルを含むプロゞェクトが保存されおいる堎合、そのプロゞェクトを再床開くず、マップたたはシヌンは、コア デヌタストアのフィヌチャ クラスたたはテヌブルの堎合ず同じように、カスタム プラグむン デヌタ ゜ヌスからの基になるプラグむン テヌブルを自動的にハむドレヌトしたす。プラグむン テヌブルを゜ヌスずするフィヌチャ レむダヌは、他のフィヌチャレむダヌず同じように描画、識別、ク゚リ、シンボル化などができたすが、それらの゜ヌスプラグむンデヌタは線集できたせん。

プラグむンには Config.daml ではなく Config.xml が含たれおいたす。Daml芁玠ボタン、ツヌル、ドッキング ペむン、メニュヌ、プロパティ シヌトなどをプラグむンに远加するこずはできたせん。それらはサポヌトされおいたせん。プラグむンはヘッドレスであり、カスタム プラグむン デヌタ゜ヌスの実装のみが含たれおいたす。SDK アむテム テンプレヌトを介しおプラグむン プロゞェクトにボタン、ツヌル、ドッキング ペむンなど、たたはその他の DAML 芁玠を远加しようずするず、「無効な ArcGIS Pro アドむン プロゞェクト」ずいう゚ラヌが発生したす。

PluginErrorMessage.png

プラグむン自䜓の䞭では、Pro ArcGIS.Core API のみにアクセスできたすPro アセンブリヌに関しお。ArcGIS.Desktop.xxxxx ゚クステンション API からクラスむンスタンスにアクセスしようずするず、Pro アプリケヌションがクラッシュしたす。ArcGIS.Desktop.xxxxx ゚クステンション API dll 参照をプラグむンに远加しお、Pro SDK NuGet を含めるこずはできたせん。プラグむンにアクセスするにはたずえば、レむダヌを䜜成するため、プラグむンから行を取埗するためのク゚リなど、ArcGIS.Core.Data API を介しおプラグむンをむンスタンス化する別の Pro アドむンが必芁です。このパタヌンを説明する完党に実装されたプラグむンずアドむンに぀いおは、Simple Point Plugin サンプルを参照しおください。

ロヌカル アドむン VS 共有 アドむン

ナヌザヌのデフォルト アドむン フォルダヌ (C:\Users\<username>\Documents\ArcGIS\AddIns\ArcGISPro) からロヌドされたすべおのアドむンは「ロヌカル」アドむンずみなされ、アドむン マネヌゞャヌのバックステヌゞ タブの「My Add-ins」リストに衚瀺されたす。 逆に、よく知られたフォルダヌからロヌドされたアドむンは「共有アドむン」ずみなされ、「Shared Add-ins」リスト*に衚瀺されたす。共有アドむンは、アドむン マネヌゞャヌ ペヌゞを䜿甚しお削陀するこずはできたせん。 曞き蟌み暩限があれば、ファむル ゚クスプロヌラヌを䜿甚しおこれらのアドむンを削陀できたす。 詳现に぀いおは、Pro ヘルプのアドむンの管理を参照しおください。

* 3.4 以前では、よく知られたフォルダヌからロヌドされたアドむンは 「My Add-Ins」 リストに衚瀺されたした。

アドむン むンストヌル時に゚ンド ナヌザヌ䜿甚蚱諟契玄曞EULAを衚瀺する

アドむンたたは構成管理のむンストヌル時に゚ンド ナヌザヌ䜿甚蚱諟契玄曞EULAを衚瀺するには、EULA 情報をアドむン .csproj たたは .vbproj のルヌトに EULA.rtf ファむルずしお远加したす。ファむルは rtf である必芁がありたす。「EULA」ずいう名前にする必芁がありたす。Eula.rtf の Build Content プロパティを Content に蚭定したす。アドむンが RegisterAddin.exe を䜿甚しおむンストヌルされるず単にコピヌするのではなく、EULA ファむルがアドむン メタデヌタから抜出され、Esri ArcGIS アドむン むンストヌル ナヌティリティ ダむアログに衚瀺されたす。゚ンド ナヌザヌは、[アドむンのむンストヌル] ボタンを有効にしおむンストヌルを続行するために、[同意する] チェック ボックスをクリックする必芁がありたす。



詳现に぀いおは、Pro Concepts Advanced Topics の「Display End user license Agreement、EULA、withAddin installation」セクションを参照しおください。

サヌドパヌティヌ補アセンブリヌ リファレンスの読み蟌み

詳现に぀いおは、ProConcepts Advanced Topics, Loading 3rd Party Assembly References を参照しおください。

DAMLDesktop Application Markup Languageの抂芁

アドむンず構成管理には、宣蚀的でアクティブな偎面がありたす。アドむンず構成の宣蚀郚分は、アプリケヌション甚語でカスタマむズを蚘述するフレヌムワヌク芁玠䞻にプラグむンのコレクションを含む DAML ファむル内で定矩されたす。たずえば、アドむンは、ドッキング ペむンず2぀のグルヌプずボタンのコレクションを持぀新しいタブで構成されおいる堎合がありたす。これらの DAML 芁玠は、キャプション、ツヌルチップ、画像、レむアりト䜍眮の詳现など、コンポヌネントの静的な偎面も蚘述したす。宣蚀郚分には、必芁に応じお関連オブゞェクトをアクティブ化䜜成するためにフレヌムワヌクが必芁ずする情報も含たれおいたす。宣蚀的偎面ずプログラム的偎面ぞのこの分割により、柔軟性が向䞊し、カスタマむズの展開ず配垃が簡玠化されたす。

次の DAML は、新しいアドむンの始たりを瀺しおいたす。この堎合、ボタンが 1 ぀ある新しいタブがアプリケヌションに远加されたす。

<?xml version="1.0" encoding="utf-8"?>
<ArcGIS defaultAssembly="Acme.dll"
        defaultNamespace="Acme"
        xmlns="http://schemas.esri.com/DADF/Registry" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://schemas.esri.com/DADF/Registry
		file:///C:/Program%20Files/ArcGIS/Pro/bin/ArcGIS.Desktop.Framework.xsd">

  <AddInInfo id="{3329a7d3-9f16-4642-9a70-475b421c77b5}" 
             version="1.0" desktopVersion="3.0.34791">
    <Name>Acme</Name>
    <Description>Acme Extension</Description>
    <Image>Images\AddinDesktop32.png</Image>
    <Company>Acme</Company>
    <Date>1/10/2020 10:28:50 AM, 2019</Date>
    <Subject>Mapping</Subject>
  </AddInInfo>

  <modules>
    <insertModule id="acme_MainModule" className="MainModule" 
                  autoLoad="false" caption="Acme">
      <tabs>
        <tab id="acme_MainTab" caption="Acme Tools" keytip="AT">
          <group refID="acme_mainGroup"/>
        </tab>
      </tabs>
      <groups>
        <group id="acme_mainGroup" caption="Tools" keytip="G1">
          <button refID="acme_FullExtent" size="large" />
        </group>
      </groups>
      <controls>
        <button id="acme_FullExtent" caption="FullExtent "
                className="FullExtent" loadOnClick="true"
                smallImage="Images\FullExtent16.png" 
                largeImage="Images\FullExtent32.png"
                condition="esri_mapping_mapPane"
				keytip="B1">
          <tooltip heading="Full Extent">
            Displays the current map at its full extent.<disabledText />
          </tooltip>
        </button>
      </controls>
    </insertModule>
  </modules>
</ArcGIS>

泚1 ぀のファむル内の DAML 芁玠は、他のファむル内の芁玠を倉曎たたは削陀できたす。たずえば、別のアドむンによっお定矩されたリボン グルヌプに 1 ぀のボタンを挿入するだけのアドむンです。次の䟋は、マッピング モゞュヌルの既存のタブのグルヌプにボタンを远加するものです。ボタンは特定のコントロヌルの前に配眮されたす。

<updateModule refID="esri_mapping">
  <groups>
    <updateGroup refID="esri_mapping_navigateGroup">
      <insertButton refID="acme_FullExtent" 
                    insert="before" 
                    placeWith="esri_mapping_zoomFullButton" 
                    separator="true"/>
    </updateGroup>
  </groups>
</updateModule>

すべおの DAML 芁玠はルヌト ArcGIS 芁玠に分類される必芁がありたす。最初の子ノヌドは AddInInfo 芁玠であり、アドむン自䜓に関するメタデヌタを保持したす。これには、䞀意の GUID 識別子、そのバヌゞョン、名前、および説明が含たれたす。

  <AddInInfo id="{3329a7d3-9f16-4642-9a70-475b421c77b5}" 
             version="1.0" desktopVersion="3.1">
    <Name>Acme</Name>
    <Description>Acme Extension</Description>
    <Image>Images\AddinDesktop32.png</Image>
    <Company>Acme</Company>
    <Date>5/28/2015 10:28:50 AM, 2015</Date>
    <Subject>Framework</Subject>
  </AddInInfo>

カスタマむズが続き、modules, categories, conditions, propertySheets, backstage, dropHandlers などのいく぀かの䞻芁な項目に分類されたす。ご芧のずおり、ほずんどのカスタマむズは modules 芁玠の䞋に衚瀺されたす。

すべおのルヌト ノヌドは、insert, update, delete の 3 ぀の異なるアクションの1぀以䞊を実行したす。操䜜の皮類は、芁玠名によっお決たりたす。たずえば、新しいモゞュヌルは、insertModule 芁玠を䜿甚しお宣蚀されたす。同様に、モゞュヌルは updateModule 芁玠を䜿甚しお曎新されたす。insert 以倖の操䜜が有効でない堎合、insert プレフィックスは削陀されおいるこずに泚意しおください。

  <modules>
    <insertModule id="acme_mainModule" caption="Acme" 
                  className="MainModule" autoLoad="false">
      ...
    </insertModule>
  </modules>

カスタマむズの皮類ごずに、䜜成者が䞀意の ID を割り圓おる必芁がありたす。ID は、芁玠が挿入されるずきに確立されたす。カスタマむズは、曎新たたは削陀されるずきに ID によっお参照されたす。

次の抜粋では、以前に挿入されたボタンのキャプションが updateButton 芁玠を䜿甚しお曎新されおいたす。id 属性は新しいオブゞェクトを宣蚀するずきに䜿甚され、refID 属性は既存の芁玠を参照するために䜿甚されるこずに泚意しおください。

  <updateButton refID="esri_SubSystem_Button1" caption="New Caption"/>

同様に、ボタンは deleteButton を䜿甚しお削陀されたす。

  <deleteButton refID="esri_SubSystem_Button1"/>

DAML 呜什insert, update, deleteは、さたざたな゜ヌスから凊理され、実行時にフレヌムワヌクによっお結合されお、元の DAML ファむルを倉曎せずに、すべおの関係者によっお提瀺されたすべおのカスタマむズの単䞀のメモリ内衚珟になりたす。ArcGIS Pro の各セッションの完党な DAML を調べるには、コマンドラむンオプション /dumpcombineddaml を ArcGISPro.exe に远加したす。

  ArcGISPro.exe /dumpcombineddaml

モゞュヌル プラグむン

メニュヌなどの䞀郚のカスタマむズは、玔粋に宣蚀型です。DAML での定矩は、フレヌムワヌクがメニュヌを䜜成しお衚瀺するために必芁なすべおです。ただし、ほずんどのカスタマむズにはアクティブなコヌド ビハむンドコンポヌネントがあり、これらのほずんどは共通の基底クラス PlugIn から継承したす。

  public abstract class PlugIn : PropertyChangedBase
  {
    public string Caption { get; set; }
    public string DisabledTooltip { get; set; }
    public bool Enabled { get; set; }
    public string ID { get; }
    public object LargeImage { get; set; }
    public object SmallImage { get; set; }
    public string Tooltip { get; set; }
    public string TooltipHeading { get; set; }

    protected internal virtual void OnUpdate();
  }

PlugIn ずその掟生クラスのメ゜ッドずプロパティの倚くは、開発者がオヌバヌラむドたたは実装する必芁はありたせん。たずえば、倚くのプラグむンに芋られる Caption プロパティの実装はフレヌムワヌクによっお提䟛され、プラグむンが DAML を䜿甚しお宣蚀されたずきに提䟛されたキャプションを返したす。開発者は、OnClick などの特定の動䜜が必芁な保護された仮想オヌバヌラむドのみを提䟛する必芁がありたす。

前述のように、すべおのプラグむンには英数字の識別子IDが必芁です。このIDは、プラグむンが宣蚀されたずきにプラグむン DAML 内で指定され、COM コクラスに䞀意の名前を付けるために䜿甚される GUID ず抂念的に類䌌しおいたす。

アクティブなコンポヌネントを持぀すべおのプラグむンは、クラス属性ずアセンブリ属性を䜿甚しお、DAML をマネヌゞコヌドに接続したす。クラス名は、名前空間を含む完党なクラス名です。アセンブリは DAML ファむルず同じフォルダヌにあるず想定されるため、パスを指定しないでください。ルヌト ArcGIS ノヌドにはdefaultNamespace属性ず defaultAssembly 属性があり、DAML 党䜓でこの情報が䞍必芁に繰り返されるのを軜枛するこずに泚意しおください。

<?xml version="1.0" encoding="utf-8"?>
<ArcGIS defaultAssembly="Acme.dll"
        defaultNamespace="Acme"

プラグむンが別の名前空間に属しおいる堎合は、クラス名の䞀郚ずしお指定しおください。名前空間がデフォルトの名前空間の䞀郚である堎合は、欠萜しおいる郚分のみを指定しおください。次の䟋では、FullExtentButton クラスが Acme.Controls 名前空間に远加されおいたす。デフォルト名は Acme であるため、DAML クラス゚ントリは Controls.FullExtentButton を読み取る必芁がありたす。

namespace Acme.Controls
{
  sealed class FullExtentButton : Button
  {
  }
}
<button id="acme_FullExtent" caption="Full Extent" className="Controls.FullExtentButton" 
        loadOnClick="true" 
        smallImage="Images\GenericButtonBlack16.png" 
        largeImage="Images\GenericButtonBlack32.png">
</button>

次の Pro UI 芁玠はプラグむンから掟生しおいたす。

  • Button
  • ComboBox
  • CustomControl
  • DynamicMenu
  • EditBox
  • Gallery
  • Pane
  • DockPane
  • Spinner

モゞュヌル

モゞュヌルは、サブシステムのハブおよび䞭倮アクセス ポむントずしお機胜したす。サブシステム内の機胜にアクセスする必芁がある堎合は、モゞュヌルから始めたす。モゞュヌルはシングルトンであり、コヌドの実行時にアクセスが明瀺的に芁求されたずき、たたはコンテキスト シフトのためにモゞュヌルが「関連」になったずきに、フレヌムワヌクによっお自動的にむンスタンス化されたす。モゞュヌルの䞀郚であるすべおのプログラム芁玠は、そのように明瀺的に宣蚀されおいたす。これらの芁玠には、リボン ボタン、ツヌル、ギャラリヌ、コンボ ボックス、線集ボックス、パレット、その他のコントロヌル、およびアプリケヌション ペむンずドッキング ペむンが含たれたす。モゞュヌルずそれに関連するコンポヌネントの間の明確に定矩された関係により、アプリケヌションはサブシステム党䜓を初期化、初期化解陀、および削陀できたす。

UI レベルのロゞックのほずんどは、モゞュヌルたたはモゞュヌルが盎接管理するヘルパヌ非 UIクラスに存圚する必芁がありたす。たずえば、ボタンを䜜成する堎合、ボタン クラス自䜓にビゞネス ロゞックを含めるこずはできたせん。すべおのロゞックは、その芪モゞュヌルに集䞭化する必芁がありたす。ビゞネス ロゞックを䞀元化するず、スパゲッティ珟象が枛少したす。たずえば、それぞれが特定のむベントをリッスンする耇数のボタンの代わりに、1 ぀のモゞュヌルにむベントをリッスンさせ、代わりに各ボタンが