# 基本的なアプリケーションの統合方法

基本的なアプリケーションの統合方法は、実行することが強く推奨されるタスクのセットです。

基本的な統合方法には、デスクトップのアプリケーション・プログラマ・インタフェース(API)の拡張仕様は含まれません。 したがって、ドラッグ＆ドロップ、セッション管理、 ToolTalk® メッセージ、アクションおよびデータ型データベースへのプログラムのアクセスなど、デスクトップとの他の相互作用は提供されません。

この章で説明する統合方法の作業の一部は、ソースコードの変更を必要とします。それらはオプションですが、基本的な統合方法の作業と密接な、関係があるため、ここで説明します。

## 基本的な統合方法の特徴

基本的なアプリケーションの統合方法には、エンドユーザ向けの次のような特徴があります。

- デスクトップ上のアプリケーションを探して起動するためのグラフィカルな方法

  アプリケーションはデスクトップ
  登録パッケージを提供し、インストール・スクリプトはアプリケーションを自動的に登録します。

  登録によって、アプリケーション・マネージャのトップ・レベルにアプリケーション・グループが作成されます。アプリケーション・グループにはアイコンがあり、ユーザがアイコンをダブルクリックすると、アプリケーションが起動します。

- アプリケーションのデータ・ファイルを認識し、操作する機能

  アプリケーションは、データ・ファイルにデータ型を提供します。

  データ型定義は、データ・ファイルが固有のアイコンを使うように構成して、データ・ファイルを見分けやすくします。また、データ・ファイルは、意味があるデスクトップ動作も持っています。たとえば、ユーザはデータ・ファイルをダブルクリックすることによってアプリケーションを起動したり、デスクトップのプリンタ・ドロップ領域にデータ・ファイルをドロップして、適切な印刷コマンドを使用してファイルを印刷することができます。

- スタイル・マネージャによる簡単なフォントとカラーの選択

  アプリケーションは、インタフェースのフォントと、バックグラウンド、フォアグラウンド、およびシャドウの色を動的に変更します。

  デスクトップは、対応するアプリケーション固有のリソースがない場合に使われる、一般的なインタフェースのフォントおよびカラーのリソースを定義します。

基本的な統合方法では、システム管理者に次のような利点を提供します。

- インストールと登録が容易

  インストール時に、アプリケーションは自動的に登録されます。他にシステム管理者がしなければならないことはほとんどありません。

- 運用時の管理が容易

  デスクトップの構成ファイルは、すべて一ヶ所に集められます。また、たとえば管理者がアプリケーションを更新したい場合や、別のアプリケーション・サーバに移動したい場合には、アプリケーションの登録解除が簡単にできます。

### 基本的な統合方法情報の構成

基本的な統合に必要な作業の大部分は、既存のアプリケーションをデスクトップに統合するシステム管理者によって実行されます。 したがって、基本的な統合方法の説明の大部分は、共通デスクトップ環境　上級ユーザ及びシステム管理者ガイドの「アプリケーションの登録」の章にあります。

この章では、その説明の概要を紹介し、アプリケーション・プログラマ向けの追加説明をします。

## 基本的な統合方法の作業

基本的な統合に必要な一般的な作業は次のとおりです。

- フォントとカラーを設定するアプリケーションのリソースを変更する。これによってユーザは、スタイル・マネージャを使ってアプリケーションのインタフェース・フォントおよびカラーを変更することができます。

  共通デスクトップ環境　上級ユーザおよびシステム管理者ガイドの「アプリケーションの登録」の章の「フォント・リソースおよびカラー・リソースの変更」の節を参照してください。

- アプリケーションのための登録パッケージを作成する。

  このマニュアルの と共通デスクトップ環境　上級ユーザおよびシステム管理者ガイドの「アプリケーションの登録」の章を参照してください。

- 登録パッケージ・ファイルをインストールし、登録手順を実行するように、アプリケーションのインストール・スクリプトを変更する。

  共通デスクトップ環境　上級ユーザおよびシステム管理者ガイドの「アプリケーションの登録」の章の「`dtappintegrate`を使用したアプリケーションの登録」の節を参照してください。

- ネットワークおよびローカル・プリンタでアプリケーション・データ・ファイルを印刷する。デスクトップ・プリンタ・モデルは、印刷のためのグラフィカルな方法をユーザに提供し、UNIXの`lp`サービスの本来のネットワーク機能の上に構築されます。

### 印刷統合のレベル

ユーザが使用できる印刷機能は、統合のレベルによって異なります。統合には次の３つのレベルがあります。

- 完全な統合。を参照してください。

  アプリケーションのソースコードを変更する能力がある場合には、完全な統合を行ってください。

  完全な統合を行うと、ユーザはデータ・ファイルをプリンタ・ドロップ領域(フロントパネルのプリンタとプリント・マネージャのプリンタ・アイコン)にドロップすることによって、さまざまなプリンタで印刷することができます。その他の特定のデスクトップ動作も実現します(を参照)。

- 部分的な統合。を参照してください。

  アプリケーションのソースコードを変更する能力はないが、アクションによって印刷機能を呼び出すことができる場合には、部分的な統合を行ってください。

  部分的な統合をした場合、アプリケーションは完全統合機能の一部分の機能を提供します。たとえば、`LPDEST`環境変数を使用することによって、アプリケーションの印刷機能は、印刷の出力先をドロップ領域から獲得します。

- 統合なし。を参照してください。

  アプリケーションがデータ・ファイルの印刷アクションを提供できない場合には、ユーザがファイルをプリンタ・ドロップ領域にドロップしたときに[エラー]ダイアログ・ボックスを表示するように、データ・ファイルを構成しなければなりません。

### 完全な印刷統合

完全な印刷統合をするためには、アプリケーションは次の条件を備えていなければなりません。

- 印刷アクションを提供する。

- ４つのデスクトップ印刷環境変数を使用する。

#### デスクトップ印刷環境変数

完全に統合された印刷機能を持つためには、アプリケーションは次の４つの環境変数を参照しなければなりません。`LPDEST`変数は、とくに重要です。これによってユーザは、特定のプリンタ・ドロップ領域を使用して印刷の出力先を選ぶことができます。

印刷環境変数 | 説明
--- | ---
`LPDEST` | 指定された値をファイルのプリンタ出力先として使います。この変数が設定されていない場合には、アプリケーションのデフォルトの印刷装置が使用されます。
`DTPRINTUSERFILENAME` | 印刷ダイアログまたは印刷出力に表示されるファイルの名前を指定します。この変数が設定されていない場合には、実際のファイル名が使用されます。
`DTPRINTSILENT` | [印刷]ダイアログ・ボックスを表示するかどうかを指定します。この変数にTrueが設定されているときには、印刷ダイアログは表示されません。この変数が設定されていない場合には、[印刷]ダイアログ・ボックスが表示されます。
`DTPRINTFILEREMOVE` | この変数にTrueが設定されているときには、印刷したあと、そのファイルは削除されます。この機能は、印刷後は保存しておく必要がない一時ファイルを対象にしています。 この変数が設定されていない場合には、ファイルは削除されません。

#### 完全に統合された印刷アクション

印刷アクションは、登録パッケージの一部分であり、構成ファイルapp_root`/dt/appconfig/types/language/`name`.dt`の中で提供されます。

印刷アクションが、で示した４つの環境変数を参照するプログラムを実行する場合には、 データ型は完全に統合されています。 印刷アクションは、アプリケーションのデータ型に応じて書かなければならず、１つのファイルだけを受け入れなければなりません。

たとえば、次の印刷アクションは、`ThisAppData`という名前のデータ型に固有です。

    Print
    {
      ARG_TYPE    ThisAppData
      EXEC_STRING print_command -file %(file)Arg_1%
    }

アプリケーションがToolTalkの印刷要求を処理する場合には、印刷アクションは次のアクションの変形で送ることができます。(４つの環境変数のどれかが設定されていない場合には、対応するメッセージ引数はヌルになります。メッセージ引数がヌルのときのデフォルトの解釈については、「デスクトップ印刷環境変数」を参照してください。)

    ACTION Print
    {
     ARG_TYPE ThisAppData
     ARG_CLASS FILE
     ARG_COUNT 1
     TYPE  TT_MSG
     TT_CLASS TT_REQUEST
     TT_SCOPE TT_SESSION
     TT_OPERATION Print
     TT_FILE  %Arg_1%
     TT_ARG0_MODE TT_IN
     TT_ARG0_VTYPE %Arg_1%
     TT_ARG1_MODE TT_IN
     TT_ARG1_VTYPE LPDEST
     TT_ARG1_VALUE $LPDEST
     TT_ARG2_MODE TT_IN
     TT_ARG2_VTYPE DTPRINTUSERFILENAME
     TT_ARG2_VALUE $DTPRINTUSERFILENAME
     TT_ARG3_MODE TT_IN
     TT_ARG3_VTYPE DTPRINTSILENT
     TT_ARG3_VALUE $DTPRINTSILENT
     TT_ARG4_MODE TT_IN
     TT_ARG4_VTYPE DTPRINTFILEREMOVE
     TT_ARG4_VALUE $DTPRINTFILEREMOVE
    }
    ACTION Print
    {
     ARG_TYPE ThisAppData
     ARG_CLASS BUFFER
     ARG_COUNT 1
     TYPE  TT_MSG
     TT_CLASS TT_REQUEST
     TT_SCOPE TT_SESSION
     TT_OPERATION Print
     TT_ARG0_MODE TT_IN
     TT_ARG0_VTYPE %Arg_1%
     TT_ARG0_VALUE %Arg_1%
     TT_ARG1_MODE TT_IN
     TT_ARG1_VTYPE LPDEST
     TT_ARG1_VALUE $LPDEST
     TT_ARG2_MODE TT_IN
     TT_ARG2_VTYPE DTPRINTUSERFILENAME
     TT_ARG2_VALUE $DTPRINTUSERFILENAME
     TT_ARG3_MODE TT_IN
     TT_ARG3_VTYPE DTPRINTSILENT
     TT_ARG3_VALUE $DTPRINTSILENT
     TT_ARG4_MODE TT_IN
     TT_ARG4_VTYPE DTPRINTFILEREMOVE
     TT_ARG4_VALUE false
    }

#### フィルタされたデータまたは印刷の準備ができているデータのための印刷アクションの作成

デスクトップ印刷ユーティリティ`/usr/dt/dtlp`は、`lp`サブシステムに基づく機能を提供します。`lp`の印刷オプションを集めて、指定されたファイルを印刷します。

次の条件のどちらかに該当する場合には、アプリケーションは、`dtlp`を使用することができます。

- プリンタに送る前にデータ・ファイルを処理する必要がない。

- アプリケーションがデータ・ファイルを印刷できる形式に変換するためのフィルタを備えている。

アプリケーションのデータ・ファイルが上記の条件に合わない場合には、アプリケーションの印刷システムへのエントリ・ポイントを設定しなければなりません。それによってアプリケーションは、データ・ファイルを印刷するためにXプリント・システムを使用することができます。たとえば次のようにします。

    Print
    {
     ARG_TYPE    ThisAppData
     EXEC_STRING app_name -print %Arg_1%
    }

`dtlp`サービスは、アクション・システムによる印刷(アプリケーションによる印刷ではなく)を対象としていることに、注意してください。 `dtlp`の詳細については、`dtlp`(1) リファレンス・ページを参照してください。

ファイルを印刷する準備ができている場合には、印刷アクションは、`EXEC_STRING`の中で`dtlp`を実行します。たとえば次のようにします。

    Print
    {
     ARG_TYPE    ThisAppData
     EXEC_STRING dtlp %Arg_1%

    }

アプリケーションが変換フィルタを備えている場合には、`dtlp`を実行する前にフィルタが実行されなければなりません。たとえば次のようにします。

    Print
    {
     ARG_TYPE    MyAppData
     EXEC_STRING /bin/sh `cat %Arg_1%| filter_name | dtlp`
    }

filter_nameは印刷ファイルの名前です。

### 部分的な印刷統合

部分的な印刷統合をするためには、アプリケーションは次のものを提供しなければなりません。

- 印刷アクション

- どの印刷環境変数がアクションによって処理されるかによって印刷が統合される範囲

#### 部分的な統合のための印刷コマンドの提供

部分的な印刷統合を提供するためには、アプリケーションは次の形式の印刷コマンド行を提供しなければなりません。

    print_command [options] -file filename

optionsは、 印刷環境変数のいくつかまたはすべてを参照する、あるいはどれも参照しないためのメカニズムを提供します(を参照してください)。

この印刷コマンド行のもっとも単純な形式では、オプションを省略します。

    print_command -file filename

このコマンド行を使うと、ユーザはデスクトップのプリンタ・ドロップ領域を使用して、アプリケーションのデータ・ファイルを印刷することができます。 ただし、印刷の出力先はドロップ領域によって設定されません。 また環境変数によって設定されたその他の印刷動作は実装されません。 たとえば、デスクトップは直接サイレント印刷を行ったり、一時ファイルを削除することはできません。

印刷コマンド行でデスクトップ 環境変数に対応する別のコマンド行optionsを提供する場合には、別の統合を提供することができます。

たとえば、次のコマンド行は`LPDEST`を参照する能力を提供します。

    print_command [-d destination] [-file filename]

destinationは、出力先プリンタです。

次の印刷コマンド行は、４つの変数すべてを参照するためのオプションを提供します。

    print_command [-d destination] [-u user_file_name] [-s] [-e] -file filename

user_file_name | 画面に表示されるファイル名。
`-s` | サイレント印刷（[印刷]ダイアログ・ボックスは表示されません）。
`-e` | 印刷後に、ファイルは削除されます。

参照は、アクション定義で発生します。詳しくは、を参照してください。

#### 環境変数のコマンド行スイッチへの変換

アクションは４つの環境変数を参照できないが、対応するコマンド行オプションをとることができる場合について、この項では環境変数をコマンド行オプションに変換する方法を説明します。

たとえば、次の例は`LPDEST`を参照する簡単な印刷アクション です。

    Print
    {
      ARG_TYPE    data_type
      EXEC_STRING print_command -d $LPDEST -file %(file)Arg_1%
    }

しかし、この印刷アクションは、`LPDEST`が設定されていない場合には、予測できない動作を生む場合もあります。

変数が設定されていないときに適切な動作を提供する印刷アクションを作成するための１つの方法は、印刷アクションが使うシェル・スクリプトを作成することです。

たとえば、次のアクションとそれが使用するスクリプトは、４つの環境変数すべてを正しく処理します。

    Print
      ARG_TYPE    data_type
      EXEC_STRING app_root/bin/envprint %(File)Arg_1%
    }

`envprint`スクリプトの内容は次のとおりです。

    #!/bin/sh
    # envprint - sample print script
    DEST=””
    USERFILENAME=””
    REMOVE=””
    SILENT=””

    if [ $LPDEST ]; then
       DEST=”-d $LPDEST”
    fi

    if [ $DTPRINTUSERFILENAME ]; then
       USERFILENAME=”-u $DTPRINTUSERFILENAME”
    fi

    DTPRINTFILEREMOVE=echo $DTPRINTFILEREMOVE | tr “[:upper:]”
    “[:lower:]”`
    if [ “$DTPRINTFILEREMOVE” = “true” ]; then
       REMOVE=”-e”
    fi

    DTPRINTSILENT=`echo $DTPRINTSILENT | tr “[:upper:]” “[:lower:]”`
    if [ “$DTPRINTSILENT” = “true” ]; then
       SILENT=”-s”
    fi

    print_command $DEST $USERFILENAME $REMOVE $SILENT -file $1

### 統合されていない印刷

アプリケーションがデスクトップと印刷機能を統合しない場合には、データ・ファイルを正しく印刷するために、ユーザがアプリケーションを開かなければなりません。

それでも、アプリケーションのデータ・ファイルをプリンタ・ドロップ領域にドロップするときに動作する印刷アクションを提供すべきでしょう。 さもなければ、デスクトップはファイルがテキスト・データを含むとみなして、印刷出力を勝手に行うかもしれません。

デスクトップはこの目的のために[印刷なし]という印刷アクションを提供します。 [印刷なし]アクションは、プリンタ・ドロップ領域を使用してデータ・ファイルを印刷できないことをユーザに知らせるダイアログ・ボックスを表示します。

[印刷なし]アクションは、
に示されている[印刷できません]ダイアログ・ボックスを表示します。

#### 組み込みの[印刷なし]アクションによって表示されるダイアログ・ボックス

[印刷できません]ダイアログ・ボックスを使用するには、[印刷なし]アクションにマップされる、データ型に固有の印刷アクションを作成します。 たとえば、アプリケーションのデータ型を次のように仮定します。

    DATA_ATTRIBUTES MySpreadSheet_Data1
    {
     —
    }

次の印刷アクションは、このデータ型の[印刷なし]にマップされます。

    ACTION Print
    {
     ARG_TYPE   MySpreadSheet_Data1
     TYPE       MAP
     MAP_ACTION NoPrint
    }

### アプリケーションのための登録パッケージの作成

アプリケーションのために作成するデスクトップ登録パッケージは、アプリケーションのインストール・パッケージの一部にならなければなりません。 登録パッケージを作成するための手順は、既存のアプリケーションをデスクトップに統合するシステム管理者によって実行されます。 これらの手順については、共通デスク トップ環境　上級ユーザおよびシステム管理者ガイドの「アプリケーションの登録」の章に説明があります。