トップページ PowerFolder 技術紹介 事業内容 会社情報 問い合わせ
表紙
はじめに
Ⅰ　ＰｏｗｅｒＦｏｌｄｅｒの概要
Ⅱ　ＰｏｗｅｒＦｏｌｄｅｒのデータ管理
Ⅲ　ＰｏｗｅｒＦｏｌｄｅｒの使い方
Ⅲ－１　画面構成
Ⅲ－２　表の扱い方
Ⅲ－３　フォルダの扱い方
Ⅲ－４　集計表示の仕方
Ⅲ－５　HTML出力
Ⅲ－６　式と組込み関数
Ⅲ－７　アクセス制御
①　アクセス制御の有効化
②　ユーザの追加・編集・削除
③　グループの追加・編集・削除
④　アクセス権の設定
Ⅲ－８　操作ログ
Ⅲ－９　ライセンスの設定
Ⅳ　ＰｏｗｅｒＦｏｌｄｅｒの仕様

## ■ Ⅲ－６　式と組込み関数

PowerFolder で実際の仕事を処理しようとすると、データの検索や集計だけでなく、値の前後に単位等の表記をつけたい、単価 × 個数 のような演算をしたい、日付を表示したい、等が必要になることがあります。
このような要求に答えるために、次のものがあります。

1. 拡張カラム　－　「Ⅲ－２ 表の扱い方 ③データの表示 表示書式設定」
2. 集計の拡張カラム　－　「Ⅲ－４ 集計表示の仕方 ②集計カラムの操作 カラムの挿入」
3. フォルダのデータ処理　－　「Ⅲ－３ フォルダの扱い方 ⑦フォルダのデータ処理」
4. カードのボタン文字枠の２行目以降　－　「Ⅲ－２ 表の扱い方 ④データの表示 カード表示」
5. カードの文字枠内容の $( )　－　「Ⅲ－４ 集計表示の仕方 ⑥カード表示」
6. HTML出力の文字枠内容の $( )　－　「Ⅲ－５ HTML出力 ①文字枠」

これらの記述は共通の規則があり、それに従って書かれたものを式と呼びます。
PowerFolder の式の規則は次の様なものです。

- 式の要素は、数値、文字列定数、カラム名、組込み関数です。
- 数値は１０進の数字列です。
- 文字列定数は ' (シングルクオート) か " (ダブルクオート)で囲みます。
  始まりの記号と終わりの記号は同じにする必要があります。
  文字列は演算子 + で連結することができます。
- 文字列定数以外の文字列で後ろに ( ) の続くものは組込み関数です。
- 文字列定数、組込み関数以外の文字列はカラム名です。
- カラム名は検索したデータの値に変わります。
- 四則演算ができます。
  演算子は半角の +-*/ です。
- 比較演算ができます。
  演算子は半角の <, <=, =, >=, >, <>, != です。(<>, != は 等しくない)
- 論理演算ができます。
  演算子は and, or (大文字，小文字の区別なし)です。

例）
(5 + 3) * 3
単価 * 個数 + '円'
"伊藤" + '博文'
氏名 + "様"
組込み関数には次のものが用意されています。

関数名 <別名> | 説明
日付 <date> | 日付([d, m, y]) 今日の日付から d 日後、m 月後、y 年後の日付を YYYY/MM/DD で返します。 d, m, y を省略した時は 0 と見なします。 例 日付(7)　　　　　７日後 日付(-7)　　　　 ７日前 日付(10, 10)　　 十月十日後 日付(0, 0, 4)　　４年後
日付 <date> | 日付(s, [d, m, y]) s で指定した日付から d日後、m月後、y年後の日付を YYYY/MM/DD で返します。 s が日付と解釈できない時は日付([d,m,y])の書式で解釈します。 日付と解釈されるのは次の形式です。 YYYYMMDD YYYY/MM/DD YYYY-MM-DD YYYY.MM.DD YYYY年MM月DD日 DD/mmm/YYYY (mmm は Jan, Feb, Mar, .. ) 上記 YYYY は YY でも可能で YY<50 の時 +2000、50<=YY<100 の時 +1900
年月日 | 年月日([d, m, y]) or 年月日(s, [d, m, y]) 日付() と同じですが YYYY年MM月DD日 で返します。
年号月日 | 年号月日([d, m, y]) or 年号月日(s, [d, m, y]) 年月日() と同じですが年を年号で表示します。 年号は、「平成」から「宝暦」までをサポートしてます。 s に渡せる日付の形式は日付()と同じです(年号はサポートしていません)。
曜日 <dayweek> | 曜日([s]) s で指定した日付の曜日を文字列で返します。 s を省略した時は今日の日付になります。 曜日()の文字列は以下の通りです。 '日' '月' '火' '水' '木' '金' '土' dayweek()の文字列は以下の通りです。 'Sun' 'Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat'
日数 <days> | 日数([s]) s で指定した日付の基準年からの日数を返します。 s を省略した時は今日になります。
日数日付 <daysdate> | 日数日付([n]) 基準年からの日数 n の日付を YYYY/MM/DD で返します。 n を省略した時は今日になります。
月齢 <moonage> | 月齢(誕生日 [, 基準日]) 月齢を返します。 基準日が省略されると関数を実行した日になります。
年齢 <age> | 年齢(誕生日 [, 基準日]) 年齢を返します。 月齢を 12 で割った整数部分です。
時刻 <time> | 時刻() 現在時刻を HH:MM:SS で返します。
検索 <search> | 検索(条件, 取得カラム[, 取得カラム, ...], デフォルト値) 条件のレコードを検索し取得カラムを返します。 取得カラムを複数指定した場合の結果は CSV 形式で返りますので、個々のカラムの値は csvdec() で取り出します。 レコードが無い場合はデフォルト値を返します。 例　検索( '商品マスタ.ID = ' + 商品ID, '商品名', '価格', '-----')
検索複数 <searchmul> | 検索複数(条件, 取得カラム[, 取得カラム, ...], デフォルト値) 検索() と同じですが、該当するレコードを複数返します。 レコード数は resultnum() で調べます。 １件のレコードは resultcsv() で取得します。 返るレコード数の最大は９９９件です。 結果の文字列はカードの文字列グリッドで表示できます。
検索合計 <searchsum> | 検索合計(条件, 合計カラム) 条件のレコードを検索し合計カラムの合計を返します。
検索件数 <searchcnt> | 検索件数(条件) 条件のレコードを検索し件数を返します。 例　検索件数( '商品マスタ.ID = ' + 条件文字列(商品ID) )
検索Ａ <searcha> | 検索Ａ( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 ) 検索() と同じですが、条件を分けて与えます。
検索最小 <searchmin> | 検索最小( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 ) 検索Ａ() と同じですが、条件に合うレコードが複数ある場合、 最も小さいものを採用します。
検索最大 <searchmax> | 検索最大( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 ) 検索最小() と同じですが、最も大きいものを採用します。
条件文字列 <condstr> <cs> | 条件文字列(s1 [, s2, ...]) 文字列を連結後、検索条件の条件文字列にエスケープします。 例 商品名が 「'80s ヒットソング」の時 検索件数('商品マスタ.商品名 = ' + 商品名) はＮＧなので、以下のようにする。 検索件数('商品マスタ.商品名 = ' + condstr(商品名))
likestr <ls> | likestr(s1 [, s2, ...]) 文字列を連結後、検索時の演算子 LIKE の条件文字列にエスケープします。 例 「50%」を含む商品名を検索する時 検索('商品名 LIKE ' + condstr('%50%%'), ...) は、「50」を含むと解釈されＮＧなので、以下のようにする。 検索('商品名 LIKE ' + condstr('%', likestr('50%'), '%'), ...)
likecmp | likecmp(s1, s2) s1 と s2 を比較し、一致すれば 1、そうでない時は 0 を返します。 s2 には '%' をワイルドカードとして使用できます。 例：　likecmp("powerfolder", "pow%")　<<-- "pow" で始まる
マクロ文字列 <macstr> <ms> | マクロ文字列(s1 [, s2, ...]) 文字列をマクロ文字列として処理し、結果を返します。 マクロ文字列は文字列中の $(xxx) で xxx の部分を式として処理します。 例 マクロ文字列("$(氏名) 様の入院先は、$(病院名)です") 関数も使えます マクロ文字列("今日は $(date()) です")
部分文字列 <substring> | 部分文字列(str, index, [count]) str の index から始まる count 文字数分の文字列を返します。 先頭文字の index は 1 です。 count を省略した場合は、str の最後までを返します。
文字列分割 <strsep> | 文字列分割(str, sep, index) str を sep の文字で分割した index 番目の文字列を返します。 先頭の分割文字列の index は 1 です。 index に負の値を指定すると後ろから index 番目となります。 sep には半角文字列しか指定できません。
文字列結合 <strcat> | 文字列結合(s1, s2 [, ...]) 文字列を結合します。 演算子の + との違いは数字でも文字列として連結することです。 例　文字列結合(123, 456) -->> 123456 123 + '456' -->> 579
空文字列 <nullstr> | 空文字列([s1] [,s2] [,...]) 引数に関わらず、空文字列を返します。
中身 <trim> | 中身(str) str の前後の空白を除いた文字列を返します。
文字列分割 <strsep> | 文字列分割(str, sep, index[, npart]) str を sep の文字で分割した index 番目から npart 個の文字列を返します。 先頭の分割文字列の index は 1 です。 index に負の値を指定すると後ろから index 番目となります。 sep には半角文字列しか指定できません。
文字列分割逆順 <strseprev> | 文字列分割逆順(str, sep) str を sep の文字で分割した部分文字列を逆順に連結した文字列を返します。 ドメイン名を逆順にする時に使います。
文字列長 <strlen> | 文字列長(str) str の長さを返します。
文字列置換 <strexc> | 文字列置換(str, s1, s2) str 中の s1 の文字列を s2 に置き換えた文字列を返します。
文字列繰返 <strrep> | 文字列繰返(str, cnt) str を cnt 回繰り返した文字列を返します。
文字列回数 <strnstr> | 文字列回数(str, pat) str 中に pat の文字列が出現する回数を返します。
文字列文字列 <strstr> | 文字列文字列(str, idx, pat, cnt) str の idx 番目(先頭は1)の位置から pat の文字列が cnt 回出現した所の インデックス(先頭は1)を返します。
数値文字列 <numstr> | 数値文字列(str, [idx]) str の idx 番目(先頭は1)の数値文字列を返します。 idx を省略した時は先頭の数値文字列を返します。
文字列OR <stror> | 文字列OR(s1, s2 [, ...]) 文字列の桁別の論理ＯＲを返します。 文字列は,最長のものに合わせ足りない分は、"0" が続くのもとして扱い、"0"以外の文字は"1"として扱います。
文字列AND <strand> | 文字列AND(s1, s2 [, ...]) 文字列の桁別の論理ＡＮＤを返します。
文字列XOR <strxor> | 文字列XOR(s1, s2 [, ...]) 文字列の桁別の論理ＸＯＲを返します。
resultcnt | resultcnt(rst) 検索複数() の返り値 rst のレコード数を返します。 ひとつのレコードは resultcsv() で取得できます。
resultcsv | resultcsv(rst, index) 検索複数() の返り値 rst の index 番目(先頭は1)をCSV形式で返します。 返ったCSVは csvdec() で分解できます
csvdec | csvdec(csvstr, index) CSV形式の文字列 csvstr を解釈し index 番目の文字列を返します。 先頭の分割文字列の index は 1 です。
csvenc | csvenc(s1 [, s2, ...]) 引数の文字列を連結した CSV 形式の文字列を返します。
分岐 <if> | 分岐(cond, s1, s2) cond が真("0"以外)ならば、s1 を、そうでなければ s2 を返します。 例　分岐(金額 > 100, 金額, 100)
反復 <for> | 反復(前処理, 判定, 反復処理) 以下のように反復処理を繰り返します。 1.前処理 2.判定が偽なら終わり 3.反復処理をして2.へ
整数 <int> | 整数(n) n を数値に変換し整数部分を返します。
数値検査 <isdigit> | 数値検査(s) s が数値ならば 0 以外、数値でなければ 0 を返します。
数値書式化 <formatnum> | 数値書式化(fmt, n) fmt の書式指定文字列を使って n を書式化します 書式指定文字は次の通り 0 : 文字の桁に値があればその数字が、それ以外は '0' が出力される # : 文字の桁に値があればその数字が、それ以外は何も出力されない . : ピリオドは少数点を示す , : カンマは整数部分の３桁区切りを示す 例） 書式指定文字列 （なし）　　　1234　 　 0.5　　0 0　　　　　 1234　 　 1　　　0 0.00　　　 1234.00 　0.50　 0.00 #.##　　　　1234　 　 .5
bgcolor | bgcolor(s) 背景色を s で指定した色にします。 色は以下の文字列か RGB を１６進２桁ずつで指定します。 "clAqua", "clBlack", "clBlue", "clDkGray", "clFuchsia", "clGray", "clGreen", "clLime", "clLtGray", "clMaroon", "clNavy", "clOlive", "clPurple", "clRed", "clSilver", "clTeal", "clWhite", "clYellow" 注意事項 bgcolor()とfontcolor()は、特殊な並びの文字列を返す関数です。 PowerFolder は表示時に特殊な並びの文字列を解釈して色を付けます。 色指定の文字列をデータとしてディスクに書き込むと条件を指定して検索することが難しくなります。 使い方は、拡張項目の式で他の項目の値を修飾するようにします。 例えば、件数が 100 以上であれば背景を赤くするには次のようにします。 if(件数 > 100, bgcolor("clRed")) + 件数
fontcolor | fontcolor(s) フォントの色を s で指定した色にします。 色の指定は bgcolor() と同じです。 注意事項 bgcolor()の注意事項を参照してください。
表名 <tabname> | 表名() 表名を返します。
フォルダ名 <folname> | フォルダ名() フォルダ名を返します。
カラム名 <colname> | カラム名() 拡張項目のカラム名を返します（拡張項目でのみ有効）。
ユーザ名 <username> | ユーザ名() ユーザ名を返します。
ホスト名 <host> | ホスト名(ipaddr [,デフォルト値]) ipaddr をIPアドレスとしホスト名を返します。 ホスト名が見つからない時は、デフォルト値を返します。 例 ホスト名('210.175.254.130')->210-175-254-130.cust.bit-drive.ne.jp

以下の関数はフォルダのデータ処理の指示にのみ記述できます。

関数名 <別名> | 説明
setvalue | setvalue(カラム名, 値 [, カラム名, 値, ...]) 検索したレコードのカラムの値を変更してディスクに書きます。 拡張カラムや他表のカラムに対しては、値のセットをはできますが、書込みはされません。 また、存在しないカラム名を指定した時も一時的な領域に値を保存するので、変数のように使うことができます。
insert | insert(表名, カラム名, 値 [, カラム名, 値, ...]) 表名で指定した表にレコードを追加します。
update | update(表名, 条件, カラム名, 値 [, カラム名, 値, ...]) 表名で指定した表の条件に合うレコードの内容を更新します。
delete | delete(表名, 条件) 表名で指定した表の条件に合うレコードを削除します。
count | count() 処理中のレコードが何番目（先頭は1）かを返します。
maxcount | maxcount() 対象のレコードの総数を返します。
前後カラム値 <getrelval> | 前後カラム値(カラム名, 移動数 [,デフォルト値]) 現在の行から移動数だけ離れた行のカラム値を返します。 移動数のマイナスはリストの前（上）、プラスは後ろ（下）に移動します。 存在しない行を指定した場合はデフォルト値を返します。
メッセージボックス <messagebox> | メッセージボックス(s) ウィンドウを表示し、s を表示します。
実行場面 <scene> | 実行場面() 実行場面を以下の文字列で返します。 "メニュー", "ドロップ", "集計メニュー", "編集前", "編集後", "削除"

以下の関数は集計表示の拡張カラムの式にのみ記述できます。

関数名 <別名> | 説明
集計累計 <accumulatesum> | 集計累計(見出し名) or accumulatesum(見出し名) 集計表示の時、処理中のカラムのひとつ上のカラムの値に「見出し名」で指定したカラムの値を加えた値を返します。
集計カラム値 <getsumval> | 集計カラム値(見出し名, [集計回数], [行数], [デフォルト値]) 集計表示の時、見出し名 で指定したカラムの値を返します。 集計回数は複数集計時における何回目の集計かを指定します。 集計回数の先頭は１で省略時は処理中のカラムの回数になります。 行数の先頭は１で省略時は処理中のカラムの行になります。
集計空白 <sumspace> | 集計空白(見出し名, [集計回数], [行数]) 集計表示の時、見出し名 で指定したカラムが空白かを返します。 集計回数は複数集計時における何回目の集計かを指定します。 集計回数の先頭は１で省略時は処理中のカラムの回数になります。 行数の先頭は１で省略時は処理中のカラムの行になります。
集計回数 <sumcount> | 集計回数() 処理中のカラムの集計回数を返します。
最大集計回数 <maxsumcount> | 最大集計回数() 集計回数の最大を返します。

ページの先頭に戻る