Solaris 共通デスクトップ環境 プログラマーズ・ガイド

基本的な統合方法の作業

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

印刷統合のレベル

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

完全な印刷統合

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

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

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

印刷環境変数 

説明 

LPDEST

指定された値をファイルのプリンタ出力先として使います。この変数が設定されていない場合には、アプリケーションのデフォルトの印刷装置が使用されます。 

DTPRINTUSERFILENAME

印刷ダイアログまたは印刷出力に表示されるファイルの名前を指定します。この変数が設定されていない場合には、実際のファイル名が使用されます。

DTPRINTSILENT

印刷ダイアログ・ボックスを表示するかどうかを指定します。この変数に True が設定されているときには、印刷ダイアログは表示されません。この変数が設定されていない場合には、印刷ダイアログ・ボックスが表示されます。

DTPRINTFILEREMOVE

この変数に True が設定されているときには、印刷したあと、そのファイルは削除されます。この機能は、印刷後は保存しておく必要がない一時ファイルを対象としています。この変数が設定されていない場合には、ファイルは削除されません。

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

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

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

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

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

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

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 を使用できます。

dtlp の詳細は、dtlp(1)の マニュアル・ページを参照してください。

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

ACTION Print 
{
  ARG_TYPE       ThisAppData
  EXEC_STRING       dtlp %Arg_1%
}

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

ACTION 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

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

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

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

print_command
[-d destination] [-file filename]

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

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

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

user_file_name

画面に表示されるファイル名 

-s

サイレント印刷 ( [印刷] ダイアログ・ボックスは表示されません。) 

-e

印刷後にファイルは削除されます。 

参照はアクション定義で発生します。詳細は、「デスクトップ印刷環境変数」を参照してください。

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

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

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

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

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

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

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

ACTION 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

統合されていない印刷

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

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

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

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

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

Graphic

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

DATA_ATTRIBUTES MySpreadSheet_Data1
{
		- 
}

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

ACTION Print
{
		ARG_TYPE				MySpreadSheet_Data1
 	TYPE					MAP
 	MAP_ACTION			NoPrint
}

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

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