共通マクロ書式

読み取りデータ書式 | シンボル情報取得書式 | 配信先取得書式 | 処理結果取得書式 | ユーザデータ書式 |
グローバルデータ書式 | プラグインデータ書式 | 日付書式 | ファイル名書式 | 文字列書式 |
数学書式
| 制御書式 | 実行書式 | データベース書式 | DocuWorksAPI書式 | ブラウザフォーム書式

データベース書式

NAME データベースオープン
FORMAT {%DB_OPEN(識別名,DBファイル名)}

データベースをオープンします。ファイルがない場合は、作成されます。識別名には、任意の名前を指定します。オープン後のデータベース処理は識別名を指定します。ファイル名はフルパスで指定します。拡張子は.dbにしてください。

例1
データベースファイル「C:\Home\temp\連番.db」をオープンします。
#DBオープン
{%DB_OPEN(連番1,D:\Home\temp\連番.db)}
NAME データベースクローズ
FORMAT {%DB_CLOSE(識別名)}

データベースをクローズします。識別名はデータベースオープンで指定した識別名を指定します。

例1
データベースをクローズします。
#DBクローズ
{%DB_CLOSE(連番1)}
NAME トランザクション開始
FORMAT {%DB_BEGIN_TRANS(識別名[,ビジータイムアウト])}

トランザクションを開始します。識別名はデータベースオープンで指定した識別名を指定します。

データベースでは、複数の操作が全て完了するか、全てキャンセルされることを保証するトランザクション処理が利用できます。

トランザクション開始後に追加、更新されたデータは、コミットを行うまでデータベースに書き込みされず、コミットを実行した時にデータが書き込まれます。

コミットを行わない場合(ロールバックを実行した場合)は、トランザクション開始後に行われたデータベースへの書き込みはすべてキャンセルされます。

また、トランザクションを開始するとデータベースが排他ロックされます。コミット、または、ロールバックが行われるまで、他のプロセスはトランザクションを開始できません。

排他ロックを利用すると、複数の端末からプラグイン実行で、共有フォルダに配置したデータベースファイルを排他的に更新できます。連番取得マクロを使って、複数人で重複しない連番を利用できます。

ビジータイムアウトは、排他処理でロックされている場合のタイムアウト値でミリ秒で指定します。省略した場合は、3000ミリ秒となります。(ネットワークフォルダにDBファイルがある場合は、指定した秒数以上になる場合があります。)

トランザクションが正常に開始された場合は、戻り値にOKが返却されます。IFマクロを使って、OKの場合に処理を行うようにしてください。

例1
トランザクションを開始します。
#トランザクション開始
{%IF({%DB_BEGIN_TRANS(連番1)}=OK,

 #DB操作処理

  #コミット
  {%DB_COMIT(連番1)}
,)}
NAME コミット
FORMAT {%DB_COMIT(識別名)}

トランザクションをコミットします。識別名はデータベースオープンで指定した識別名を指定します。

トランザクション開始後に追加、更新されたデータをデータベースに書き込みます。

コミットを行わない場合(ロールバックを実行した場合)は、トランザクション開始後に行われたデータベースへの書き込みはすべてキャンセルされます。

例1
トランザクションをコミットします。
#コミット
{%DB_COMIT(連番1)}
NAME ロールバック
FORMAT {%DB_ROLLBACK(識別名)}

トランザクションをロールバックします。識別名はデータベースオープンで指定した識別名を指定します。

トランザクション開始後に追加、更新されたデータをすべて取り消します。

例1
トランザクションをロールバックします。
#ロールバック
{%DB_ROLLBACK(連番1)}
NAME 連番取得とカウントアップ
FORMAT {%GET_SEQ_NO_AND_COUNT_UP(識別名)}

連番を取得後、カウントアップを行います。

本マクロは、データベースファイルを使用します。データベースオープン、トランザクション開始、コミット、データベースクローズ等のマクロと組み合わせて使用します。

識別名はデータベースオープンで指定した識別名を指定します。

内部的には、データベース内に以下のテーブルを作成し、識別名、番号、リセットキーを保持します。

create table if not exists SeqNumberTable (Name text, SeqNumber integer, ResetKey text, primary key (Name))

本マクロが呼び出されると、識別名で検索を行い、SeqNumberを取得します。その後、SeqNumberを+1した数値で更新します。

本マクロは、連番リセットマクロ(RESET_SEQ_NO)とセットで使用します。本マクロの直前にRESET_SEQ_NOを記述してください。

例1
連番を取得し、カウントアップを行う。取得した連番を文書属性(受付連番)に追加する。連番は1〜10000とし、10000を超えた場合は1にリセットする。
#DBオープン
{%DB_OPEN(連番1,D:\Home\temp\連番.db)}

#--

#トランザクション開始
{%IF({%DB_BEGIN_TRANS(連番1)}=OK,

  #10000を超えたらリセット
  {%RESET_SEQ_NO(連番1,NUMBER,>,1000,1)}

  #連番取得とカウントアップ
  #連番を属性にセット(5桁0埋め)
  {%DW_SET_USER_ATTRIBUTE(受付番号,{%FORMAT({%GET_SEQ_NO_AND_COUNT_UP(連番1)},00000)})}

  #コミット
  {%DB_COMIT(連番1)}

,)}

#--

#DBクローズ
{%DB_CLOSE(連番1)}
NAME 連番取得
FORMAT {%GET_SEQ_NO(識別名)}

連番を取得します。

本マクロは、データベースファイルを使用します。データベースオープン、トランザクション開始、コミット、データベースクローズ等のマクロと組み合わせて使用します。

識別名はデータベースオープンで指定した識別名を指定します。

連番取得のみ行う場合は、本マクロを使用します。通常は、連番取得とカウントアップをセットで行う、連番取得とカウントアップマクロ(GET_SEQ_NO_AND_COUNT_UP)を使用してください。

例1
連番を取得し、ログに出力する。その後、再度、連番を取得し、カウントアップを行う。取得した連番を文書属性(受付連番)に追加する。連番は1〜10000とし、10000を超えた場合は1にリセットする。
#DBオープン
{%DB_OPEN(連番1,D:\Home\temp\連番.db)}

#--

#トランザクション開始
{%IF({%DB_BEGIN_TRANS(連番1)}=OK,

  #10000を超えたらリセット
  {%RESET_SEQ_NO(連番1,NUMBER,>,1000,1)}

  #連番取得
  #ログ出力
  {%LOG_OUT({%GET_SEQ_NO(連番1)})}

  #連番取得とカウントアップ
  #連番を属性にセット(5桁0埋め)
  {%DW_SET_USER_ATTRIBUTE(受付番号,{%FORMAT({%GET_SEQ_NO_AND_COUNT_UP(連番1)},00000)})}

  #コミット
  {%DB_COMIT(連番1)}

,)}

#--

#DBクローズ
{%DB_CLOSE(連番1)}
NAME 連番リセット
FORMAT {%RESET_SEQ_NO(識別名,比較対照(RESET_KEY|NUMBER),比較符号,比較データ,連番初期値[,リセットキー初期値])}

連番のリセット判定を行い、条件に合致した場合は初期値に更新します。

本マクロは、データベースファイルを使用します。データベースオープン、トランザクション開始、コミット、データベースクローズ等のマクロと組み合わせて使用します。

識別名はデータベースオープンで指定した識別名を指定します。

比較対照は、RESET_KEYまたは、NUMBERを指定します。条件の右辺にリセットキーの値をセットする場合は、RESET_KEYを、番号の値をセットする場合は、NUMBERを指定します。

比較符号は、>,<,=,>=,<=,!=が指定できます。比較データには、条件の左辺となる値を指定します。

連番初期値は、条件に合致した際に更新する番号の初期値を指定します。

リセットキー初期値は、条件に合致した際に更新するリセットキーの初期値を指定します。省略した場合、比較対照がRESET_KEYの場合は比較データが初期値として更新されます。比較対照がNUMBERの場合は、リセットキーの更新は行いません。

本マクロの実行時に、識別名に該当するレコードが存在しない場合は、無条件で初期値をセットし、レコードを追加します。

本マクロは、連番取得マクロの直前に記述してください。初回の初期値設定と、リセット判定、およびリセットを行います。

使用例は、連番取得とカウントアップマクロの例を参照してください。以下の例は、番号リセットマクロの記述のみ紹介します。

例1
1000になったらリセットします。(1〜999)
#1000になったらリセット(1〜999)
{%RESET_SEQ_NO(連番1,NUMBER,>=,1000,1)}
例2
年が変わったらリセットします。
#毎年リセット
{%RESET_SEQ_NO(連番1,RESET_KEY,!=,{%DATE(yyyy)},1)}
例3
月が変わったらリセットします。
#毎月リセット
{%RESET_SEQ_NO(連番1,RESET_KEY,!=,{%DATE(yyyymm)},1)}
例4
日が変わったらリセットします。
#毎日リセット
{%RESET_SEQ_NO(連番1,RESET_KEY,!=,{%DATE(yyyymmdd)},1)}
例5
毎年4月になったらリセットします。
#毎年4月にリセット
{%RESET_SEQ_NO(連番1,RESET_KEY,<=,{%DATE(yyyymm)},1,{%CALC({%DATE(yyyy)}+1)}04)}
例6
年が変わったらリセットします。または、1000になったらリセットします。(1〜999) (複数の条件は続けて記述することでOR条件となります。)
#毎年リセット
{%RESET_SEQ_NO(連番1,RESET_KEY,!=,{%DATE(yyyy)},1)}

#1000になったらリセット(1〜999)
{%RESET_SEQ_NO(連番1,NUMBER,>=,1000,1)}
例7
連番をリセットしたい場合
#強制リセット
{%RESET_SEQ_NO(連番1,NUMBER,>=,0,1)}