MaxL Shellコマンド

MaxL Shellを起動する方法には様々なものがあり、Essbaseを操作するときにMaxL文に加えてMaxL Shellコマンドが必要になることがよくあります。MaxL Shellコマンドには、login、spool、set column width、set message level、set timestamp、echo、nesting、iferror/gotoおよびlogoutがあります。

MaxL Shellには、MaxL言語自体とは別に、便利なコマンド・セットがあります。

MaxL Shell呼び出し

MaxL Shell (essmsh)は、MaxL文を入力するための事前解析メカニズムです。

対話型で使用するようにシェルを起動して、ファイルからの入力を読み取ったり、ストリーム指向の入力(別のプロセスからの標準入力)を読み取ることができます。シェルの起動後に対話型でログインしたり、入力ファイル内のログイン文を使用してログインできます。また、-lフラグを使用して、呼び出し時にログインすることもできます。

essmshシェルを起動するには、直接起動しないでください。環境を正しく設定するためには、startMAXL.bat (Windows)またはstartMAXL.sh (UNIX)を使用して、essmshを起動する必要があります。

startMAXL.bat-h|moreと入力すると、オペレーティング・システムのコマンド・プロンプトでヘルプを利用できます。

ノート:

ヘルプ・テキストは、essmshシェル用です。ただし、環境を正しく設定するためには、startMAXL.bat (Windows)またはstartMAXL.sh (UNIX)を使用して、essmshを起動する必要があります。これまでessmshに渡していた場合と同じように、同じ引数をstartMAXLに渡すことができます。たとえば、essmsh -l username passwordではなく、今後はstartMAXL.bat -l username passwordを使用する必要があります。

対話型入力フラグ

次のようにMaxL Shellにログインして対話型で使用できます(キーボードで文を入力します)。

フラグ 説明/例
フラグなし

フラグ、ファイル名または引数なしで起動すると、MaxL Shellは対話型モードで起動し、ユーザーのログインを待機します。UNIXユーザーへのノート: 次の例では、startMAXL.batstartMAXL.shに置き換えてください。

startMAXL.bat
-aフラグ: 引数

-aフラグを指定すると、MaxL Shellは対話型モードで起動し、キーボードから位置パラメータで参照できるスペース区切りの引数を受け入れます。

スプーリングをオンにして対話型引数を使用すると、変数は入力したとおりにログ・ファイルに記録されます(たとえば、$1$2)。

startMAXL.bat -a Fiona sunflower appname dbsname

MAXL> spool on to 'D:\output\createapp.out';

MAXL> login $1 identified by $2;

      49 - User logged in: [Fiona].

MAXL> create application $3;

      30 - Application created: ['appname'].

MAXL> create database $3.$4 as Sample.Basic;

      36 - Database created: ['appname'.'dbsname'].
          
MAXL> spool off;
-lフラグ: ログイン

-lフラグを使用し、その後にユーザー名とパスワードを続けると、MaxL Shellは指定されたユーザー名とパスワードにログインし、対話型または非対話型モードで起動します。ユーザー名とパスワードは、-lのすぐ後に続け、スペースで区切る必要があります。

startMAXL.bat -l Fiona sunflower
-u、-pおよび-sフラグ: ログイン・プロンプトとホスト名選択

MaxL Shellは、-uおよび-pオプションを使用して対話型モードで起動して、起動時にユーザー名とパスワードをシェルに渡すことができます。ユーザー名とパスワードの両方を要求するには、-sオプションを使用してEssbaseサーバーのホスト名を指定します。

  • -s <host-name>をシェルに渡すと、MaxLはユーザー名とパスワードを要求し、パスワードは非表示になります。

    startMAXL.bat -s localhost
    Enter UserName> admin
    Enter Password> ********
    
     OK/INFO - 1051034 - Logging in user admin.
     OK/INFO - 1051035 - Last login on Monday, January 28, 2020 10:06:16 AM.
     OK/INFO - 1241001 - Logged in to Essbase.
     
  • -u <username>をシェルに渡し、-p <password>を省略すると、MaxL Shellはパスワードを要求し、パスワードは非表示になります。

    startMAXL.bat -u smith
     Enter Password > ******
  • -p <password>をシェルに渡し、-u <username>を省略すると、MaxL Shellはユーザー名を要求します。

    startMAXL.bat -p password
     Enter Username > smith
  • -m <messageLevel>をシェルに渡すと、指定したレベルのメッセージのみがシェルから返されます。

    startMAXL.bat -m error

    <messageLevel>値に含まれる内容: defaultallwarningerrorおよびfatal。デフォルト値はallです(defaultを指定した場合と同じです)。

-mフラグ: メッセージ・レベル

-m <messageLevel>をシェルに渡すと、指定したレベルのメッセージのみがシェルから返されます。

例: startMAXL.bat -m error

<messageLevel>値に含まれる内容: defaultallwarningerrorおよびfatal。デフォルト値はallです(defaultを指定した場合と同じです)。

ファイル入力

(キーボードで文を入力するのではなく)次の方法でMaxL Shellを起動して、スクリプトを実行します。

startMAXL.shまたはstartMAXL.batと入力し、その後にファイル名またはパスを続けた場合は、シェルがその指定したファイルから入力を受け取ります。

startMAXL.sh /client/scripts/filename.msh

コマンド・プロンプトで入力すると、前述の例はシェルを起動し、ファイルからMaxL文を読み取るように指示し、それが完了したらセッションを終了します。

startMAXL.bat filename

前述の例は、シェルを起動して、現在のディレクトリ(MaxL Shellの起動元のディレクトリ)にあるfilenameからMaxL文を読み取ります。

startMAXL.shまたはstartMAXL.batと入力し、その後にファイル名、さらにその後に1つの引数またはスペース区切りの引数のリストを続けた場合、essmshはコマンドライン引数を記憶します。これらは、指定したファイルで$1$2などとして参照できます。スプーリングがオンになっている場合は、ログ・ファイルにすべての変数が展開されます。

startMAXL.bat filename.msh Fiona sunflower localhost

前述の例は、シェルを起動して、現在のディレクトリにあるfilename.mshからMaxL文を読み取ります。

標準入力

-iフラグを指定すると、essmshは標準入力を使用します。これは、別のプロセスからの入力にすることもできます。次に例を示します。

program.sh | startMAXL.bat -i

program.shが出力としてMaxL文を生成した場合、program.shstartMAXL.bat-iにパイプして、program.shの標準出力をessmshの標準入力として使用できます。Essmshは、program.shが出力を生成すると入力を受け取るため、スクリプトを効率的に協調実行できます。

echo login Fiona sunflower on localhost; display privilege user;|startMAXL.bat -i

前述の例では、MaxL Shellはエコー・コマンドの出力から入力を受け取ります。ユーザーFionaがログインし、ユーザー権限が表示されます。

後続のMaxL Shellコマンドのいずれかを使用する前に、ログインが必要です(ログインを参照)

スプールのオン/オフ

MaxL Shellセッションの出力をファイルに記録します。MaxL文の実行によって生成された標準出力、情報メッセージ、エラー・メッセージおよび警告メッセージ、またはそのいずれかをファイルに送信します。

FILE-NAMEが存在しない場合は作成されます。FILE-NAMEがすでに存在する場合は上書きされます。FILE-NAMEのディレクトリ・パスが指定されていない場合、MaxL Shellの現在のディレクトリにFILE-NAMEが作成されます。スプール・コマンドを使用してディレクトリは作成できません。

メッセージ・ロギングは、spool onで開始されてspool offで終了します。


hspool.gifの説明が続きます
図hspool.gifの説明

FILE-NAME

spool on to 'output.txt';

MaxLの出力が、MaxL Shellが呼び出された現在のディレクトリにあるoutput.txtというファイルに送信されます。

説明

ほとんどのオペレーティング・システムで、入力/出力に次の3つのチャネルが使用されます。

  • STDIN (標準入力チャネル)

  • STDOUT (標準出力チャネル)

  • STDERR (標準エラー・チャネル)

ほとんどのオペレーティング・システムで、前述のどのチャネルでデータがパイプされるかに応じて、アプリケーションで生成されたデータのリダイレクト向けにコマンドライン・オプションも提供されています。

MaxLのエラーにはSTDERRとフラグが付けられて、オペレーティング・システムのリダイレクト・ハンドルを使用した、エラーのコマンドライン・リダイレクトが許可されます。エラー以外はSTDOUTとフラグが付けられるため、標準出力はエラー出力とは分けてログに記録されるようにできます。次に、呼出し時にエラー出力がリダイレクトされる例を示します。

essmsh script.mxl 2>errorfile.err 

ノート:

オペレーティング・システムのリダイレクト・ハンドルには様々な種類があるため、プラットフォームのドキュメントを参照してください。

spoolコマンドの対応するオプションを使用して、STDERRとSTDOUTを異なるMaxL出力ログに個別にリダイレクトすることもできます。たとえば、スクリプトに次の行を配置すると、あるファイルにエラーをリダイレクトし、別のファイルに出力できます。

spool stdout on to 'output.txt';
spool stderr on to 'errors.txt';

または、エラーのみをリダイレクトできます。

spool stderr on to 'errors.txt';

または、出力のみをリダイレクトできます。

spool stdout on to 'output.txt';

ノート:

汎用のスプールと特殊な出力チャネル・スプールを同じスクリプトで使用できません。たとえば、次のように指定することは有効ではありません。

spool on to 'session.txt';
spool stderr on to 'errors.txt';

表示列幅の設定

現在のMaxL Shellセッションについて、MaxLの表示出力表に表示される列の幅を設定します。

  • デフォルト: 20文字

  • 最小: 8文字

  • 最大: なし。


hsetcol.gifの説明が続きます
図hsetcol.gifの説明

COLUMN-WIDTH

set column_width 10;

列の幅が10文字に設定されます。

set column_width default;

列の幅が20文字に戻ります。

メッセージ・レベルの設定

MaxL Shellセッションから返されるメッセージのレベルを設定します。デフォルトでは、すべてのメッセージが返されます。


hsetmsg.gifの説明が続きます
図hsetmsg.gifの説明

表3-20 MaxL Shellメッセージ・レベル

メッセージ・レベル 説明
all エラー、警告、ステータス・レポートおよび情報メッセージ。これはデフォルトのメッセージ・レベルです。
error EssbaseおよびMaxL Shellのエラー・メッセージ。
warning Essbaseの警告メッセージ。
fatal シェルがEssbaseから切断される要因となるエラーのみ。

set message level all;

タイムスタンプの設定

MaxL文の実行後のタイムスタンプ表示を有効または無効にします。デフォルトでは、タイムスタンプは返されません。


set_timestamp.gifの説明が続きます
図set_timestamp.gifの説明

ノート:

タイムスタンプ情報は、エラー制御シェル文のgoto、iferrorおよびdefineの後には表示されません。

set timestamp on;

エコー

画面またはログ・ファイルにテキストを表示するか、変数を展開します。スプール(ログ・ファイルの生成)がオンの状態でスクリプトで使用すると、echoはログ・ファイルに変数を展開します。対話型セッションでは、変数はログ・ファイルに展開されません。かわりに、入力した変数名が記録されます(例: $1)。

構文

echo <text> | <variablename>

変数のディスカッションでechoを使用する例を参照してください(MaxL Shellの構文ルールと変数)。

ネスト

MaxLスクリプトを、別のMaxLスクリプト内から参照します(含めます)。参照されるMaxLスクリプトに、現在のMaxLスクリプトに役立つ変数が定義されている場合にこれを使用できます。

構文

msh <scriptfile>;

login fiona sunflower;
alter database sample.basic end archive;
msh calculate.msh;
alter database sample.basic
 begin archive to file bak;
 logout;
 

ノート

ネストされたスクリプトで定義または変更された変数は、ネストされたスクリプトの実行後に親スクリプト内に保持されます。

mshはシェル・コマンドであるため、元のセッションに制限されます。そのため、新しいログイン文が含まれるMaxLスクリプトは参照しないようにします。

エラーのチェックとブランチ

ifErrorでは、ラベル名で定義されたスクリプト内の特定の場所まで後続の文をスキップして、前の文のエラーに応答するようにMaxL Shellに指示されます。

ifErrorは、先行する文のみでエラーの有無を確認します。IfErrorでは、次のものが確認されます。

  • MaxL文の実行に含まれるエラー

  • 次を含む、MaxL Shellコマンドの実行に含まれるエラー

    • 権限エラーなど、spool on/offのエラー

    • 無効な幅など、set column_widthのエラー

    • 権限エラーや存在しない組込みファイルなどの、スクリプトのネストのエラー

gotoでは、ラベル名で定義されるスクリプト内の特定に場所にブランチするようにMaxL Shellに強制されます。gotoはエラーの発生に依存しません。

構文

iferror LABELNAME
goto LABELNAME
define label LABELNAME

例: iferror (MaxL)

次のスクリプト例には、ディメンション構築文と、データ・ロード文が含まれます。ディメンション構築が失敗した場合、データ・ロードはスキップされます。

login $1 $2;

import database sample.basic dimensions
 from data_file 'C:\\data\\dimensions.txt'
 using rules_file 'C:\\\\data\\rulesfile.rul'
 on error append to 'C:\\\\logs\\dimbuild.log'; 
 
iferror 'dimbuildFailed';

import database sample.basic data from data_file 
"$ARBORPATH\\app\\sample\\basic\\calcdat.txt" 
 on error abort; 

define label 'dimbuildFailed';
exit;

例: iferror (MaxL Shell)

次のスクリプト例では、MaxL Shellエラーを含む様々なエラーをテストして、終了状態の変数をゼロ以外の引数に設定して、終了状態をMaxL Shellに戻す方法を示します。

###  Begin Script ###

login $1 $2;
echo "Testing syntactic errors...";

spool on to spool.out;

set timestamp on;
iferror 'End';

msh "doesnotexistlerr.mxl";
iferror 'FileDoesNotExistError';

echo "Script completed successfully...";
spool off;
logout;
exit 0;


define label 'FileDoesNotExistError';
echo "Error detected: Script file does not exist";
spool off;
logout;
exit 1;

define label 'ShellError';
echo ' Shell error detected...';
spool off;
logout;
exit 2;

define label 'End';
echo ' Syntax error detected...';
spool off;
logout;
exit 3;

###  End Script ###

例: goto

次のスクリプト例には、ディメンション構築文と、データ・ロード文が含まれます。gotoは、データ・ロードをスキップするために使用します。

login $1 $2;

import database sample.basic dimensions
 from data_file 'C:\\data\\dimensions.txt'
 using rules_file 'C:\\\\data\\rulesfile.rul'
 on error append to 'C:\\\\logs\\dimbuild.log'; 
 
goto 'Finished';

import database sample.basic data from data_file 
"$ARBORPATH\\app\\sample\\basic\\calcdat.txt" 
 on error abort; 

define label 'Finished';
exit;

ノート

MaxL Shellでは、スクリプト内をLABELNAMEまで後ろではなく前にスキップします。

バージョン

使用しているMaxLのバージョンを表示するには、versionと入力します。

version;

ログアウト

Essbaseから、対話型のMaxL Shellを終了せずにログアウトします。

logout;

終了

対話型モードを使用した後、MAXL>プロンプトを終了します。親シェルに終了状態を返すために、オプションで、終了状態変数にゼロ以外の引数を設定できます。

ノート:

MaxLスクリプト・ファイルまたはストリーム指向の入力(-iスイッチを使用)の最後に、必ずしも終了する必要はありません。

exit 10;

MaxL Shellウィンドウまたはターミナルを戻りステータス10で閉じます。これは、IfErrorと組み合せて使用して、親シェルにゼロ以外のエラー状態を返せます。