IF、ELSE、ENDIF
例
機能
これらのコマンドを使用すると、FirstClassスクリプトで論理フローを制御できるようになります。スクリプトを実行する場合、各IFコマンドにENDIFコマンドを組み合わせて使用しなければなりません。また、各IFコマンドに、ELSEコマンドを1つ組み合わせる場合があります。
警告メッセージが出ないようにするためにIFコマンドを利用することは、ほとんど意味がありません。例えば、存在しているかどうかわからないフォルダをユーザのデスクトップから削除するような場合です。この場合、フォルダの存在をチェックしてから削除するスクリプトを作成するより、フォルダが存在していなくてもフォルダの削除動作を行うスクリプトを作成した方が効率的です。
また、多数のユーザの[ユーザ情報]フォームで[ディレクトリに公開]権限を有効にする場合も同様です。たとえ一部のユーザで[ディレクトリに公開]権限がすでに有効になっていたとしても、現在の権限設定をチェックしてから権限を有効にするより、すべてのユーザに対して権限を有効にする方がはるかに効率的です。複雑なスクリプトを書く必要がなくなり、サーバが実行すべき作業も少なくなります。
構文
IF expression test expression
条件が真に評価された場合に実行するコマンド
ELSE
条件が偽に評価された場合に実行するコマンド
ENDIF パラメータ
OBJECT path EXISTS |
指定されたオブジェクトが存在するかどうかを調べます。 |
OBJECT path MISSING |
指定されたオブジェクトが存在しないかどうかを調べます。 |
FIELD ID EXISTS |
スクリプトの対象となっているフォーム上のフィールドに、データが入力されているかどうかを調べます。 |
FIELD ID MISSING |
スクリプトの対象となっているフォーム上のフィールドに、データが入力されていないかどうかを調べます。 |
FORMFIELD path FieldID EXISTS |
他のフォーム上のフィールドにデータが入力されているかどうかを調べます。 |
FORMFIELD path FieldID MISSING |
他のフォーム上のフィールドにデータが入力されていないかどうかを調べます。 |
FIELD FieldID test FieldValue |
スクリプトの対象となっているフォーム上のフィールドの内容を、指定されたパターンで調べます。 |
FIELD FieldID test FIELD FieldID |
スクリプトの対象となっているフォーム上にある2つのフィールドの内容を比較します。 |
FORMFIELD path FieldID test FieldValue |
pathで指定された他のフォーム上のフィールドの内容を調べます。 |
test |
以下のパターンから1つを選んで、数値を比較します。 < より小さい <= より小さいか等しい == 等しい =!等しくない >= より大きいか等しい > より大きい |
path |
オブジェクトの位置です。管理者デスクトップからの相対位置で指定します。パスの各要素はコロンで区切ってください。PATHCHARコマンドを使用すると、デフォルトのパス文字を変更できます。 |
DESKTOP UserID path |
ユーザのデスクトップ上のオブジェクトです。パスは、ユーザのデスクトップからの相対位置で指定します。 |
FieldID |
フィールドIDです。 |
FieldValue |
フィールドに含まれる値です。引用符で囲む必要がある場合があります。フィールドの値は、チェックボックス、ポップアップ、および数値に対しては数値で示す必要があります。ポップアップの値は、FirstClassデザイナーで調べることができます。 |
MODIFIED |
このオブジェクトが最後に変更された日時です。 MODIFIED BEFORE date MODIFIED AFTER date MODIFIED BETWEEN StartDate EndDate MODIFIED OUTSIDE StartDate EndDate |
例 OBJECTの使用
複雑なスクリプトを書く前に、IFコマンドが予測通りの結果を返すかどうか確認する作業から始めることをお勧めします。
以下のスクリプトを実行すると、[Employee Lounge]会議室がGeneral Conferences内に存在するかどうかを確認し、TrueかFalseを含むメッセージが返されます。
REPLY
IF OBJECT "General Conferences:Employee Lounge" EXISTS
WRITE True
ELSE
WRITE False
ENDIF
この単純な作業を行うことで、スクリプトのデバッグ時にIFコマンドの誤りを見つけて削除できるようになります。この例では、Falseが返された場合に、構文か表示されたエラーを調べてください。
[Employee Lounge]会議室内にコンタクトデータベースがあり、このエイリアスを販売スタッフ全員のコンタクトフォルダ内に作成する場合を例に取ります。一部の販売スタッフのコンタクトにはこのエイリアスがすでに作成されていますが、全員が確実にこのエイリアスを利用できるようにします。また、コンタクトデータベースの名前をCustomersからEast Coast Customersに変更します。したがって、既存のエイリアスの名前を変更し、エイリアスが存在しない場合は作成するという2つの処理が必要です。
//ユーザのコンタクトフォルダ内にCustomersのエイリアスがあるかどうかをチェック
IF OBJECT desktop sbram "Contacts:Customers" EXISTS
//上の文が真であれば名前を変更
rename desktop sbram "Contacts:Customers" "East Coast Customers"
ELSE
//上の文が偽であればエイリアスを作成
LINK SPECIAL desktop sbram "Contacts" "General Conferences:Employee Lounge:East Coast Customers"
ENDIF
以下の例では、テスト結果によってドキュメント内のスクリプトが実行されます。
//ユーザのコンタクトフォルダ内にCustomersのエイリアスがあるかどうかをチェック
IF OBJECT desktop sbram "Contacts:Customers" EXISTS
//上の文が真であれば以下のスクリプトを実行
EXECUTE SCRIPT PATH desktop admin "scripts:TrueContacts"
ELSE
//上の文が偽であれば以下のスクリプトを実行
EXECUTE SCRIPT PATH desktop admin "scripts:FalseContacts"
ENDIF
ユーザIDの一覧に基づいてコマンドを繰り返す方法については、REPEATコマンドを参照してください。 FORMFIELDの使用
専用のフォームにフィールドIDが1000のチェックボックスがあり、このフィールドの値によって2つの異なるスクリプトを実行するとします。
IF FORMFIELD "General Conferences:Employee Lounge:Event form" 1000 == 1
//値が1であれば以下のコマンドを実行
ELSE
//値が1でなければ以下のコマンドを実行
ENDIF
専用のフォームにフィールドIDが1000のチェックボックスがあり、そのフィールド値が1であればスクリプトを実行するとします。値が1でなければ、スクリプトを中断します。
IF FORMFIELD "General Conferences:Employee Lounge:Event form" 1000 == 1
//値が1であれば以下のコマンドを実行
ELSE
//値が1でなければコマンドの実行をここで停止
ENDSCRIPT
ENDIF FIELDの使用
[リストからのみ選択]が有効になっている選択リストのあるフォームがユーザに提供されているとします。選択肢は、[プロジェクトを新規作成]と[プロジェクトをコピー]の2つです。[プロジェクトを新規作成]がデフォルト値です。したがって、このフィールドを[プロジェクトを新規作成]に設定すると、このフィールドは存在しない(MISSING)状態になります。これは、サーバはどのフォームのデフォルト値も保持しないためです。フィールドにデータが保持されるのは、[プロジェクトにコピー]が選択された場合だけです。
以下のコマンドのいずれかを使用できます。
IF FIELD 1000 EXISTS
//フィールドにデータがあるため、プロジェクトをコピーするスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:copy project"
ELSE
//フィールドにデータがないため、プロジェクトを作成するスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:new project"
ENDIF
または
IF FIELD 1000 MISSING
//フィールドにデータがないため、プロジェクトを作成するスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:new project"
ELSE
//フィールドにデータがあるため、プロジェクトをコピーするスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:copy project"
ENDIF
または
IF FIELD 1000 == プロジェクトをコピー
//フィールドの値が[プロジェクトをコピー]であるため、プロジェクトをコピーするスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:copy project"
ELSE
//フィールドの値が[プロジェクトをコピー]ではないため、プロジェクトを作成するスクリプトを実行
EXECUTE SCRIPT path desktop admin "my scripts:new project"
ENDIF
注意
フォームにID 1000のフィールドがない場合、IFコマンドはフィールドが存在しない(MISSING)状態であると判断します。
同じフォームにプロジェクト名を入力するフィールド(ID 1001)を配置し、IFコマンドを利用して、このフォームにプロジェクト名が存在しない(MISSING)場合にはスクリプトを中断することにします。このスクリプトでは、IFコマンドを入れ子にして使用します。
IF FIELD 1001 MISSING
REPLY
WRITEプロジェクトが入力されていないため、このスクリプトは動作しません。
ENDSCRIPT
ELSE
ENABLEFIELDSUBSTITUTION
NEW "general conferences:projects" "#1002" "" CONFERENCE 8 -1 -1 +p
//この部分は所属グループを設定するコマンドを含むスクリプト
IF FIELD 1002 == 非公開プロジェクト灯
//フィールドの値が「非公開プロジェクト」であるため、この会議室を[非公開プロジェクト]コンテナ用テンプレートに登録
ELSE
//フィールドの値が[非公開プロジェクト]ではないため、この会議室を[販売スタッフ]コンテナ用テンプレートに登録
ENDIF
ENDIF
スクリプトを利用して、スクリプトの対象となっているフォームにあるフィールドと、他のフォームにあるフィールドの内容を比較するとします。
IF FIELD 1000 == FORMFIELD "general conferences:employee lounge:Event form" 1001 MODIFIEDの使用
IF Desktop Admin "www:templates" MODIFIED OUTSIDE 2011/10/01 2011/11/01
WRITE Update not applicable
RETURN
ENDIF
関連するコマンド
EXPORT、ENABLEFIELDSUBSTITUTION、COPY、およびPGADDコマンドをIFコマンドと組み合わせて使用すると、独自のワークフローを実行するスクリプトを作成できます。
|