表紙
はじめに
T 画面の説明
U 表の扱い方
V フォルダの扱い方
W 集計表示の仕方
X HTML出力
Y 式と組込み関数
Z プログラム引数とコマンドモード
[ アクセス制御
1 アクセス制御の有効化
2 ユーザの追加・編集・削除
3 グループの追加・編集・削除
4 アクセス権の設定
\ 操作ログ
] ライセンスの設定

■ Y 式と組込み関数

PowerFolder で実際の仕事を処理しようとすると、データの検索や集計だけでなく、値の前後に単位等の表記をつけたい、単価 × 個数 のような演算をしたい、日付を表示したい、等が必要になることがあります。
このような要求に答えるために、次のものがあります。
  1. 拡張カラム − 「U-3-(1) 表示書式設定
  2. 集計の拡張カラム − 「W-2-(1) カラムの挿入
  3. フォルダのデータ処理 − 「V-7 フォルダのデータ処理
  4. カードのボタン文字枠の2行目以降 − 「U-4-(1) カード表示
  5. カードの文字枠内容の $( ) − 「W-13 カード表示
  6. HTML出力の文字枠内容の $( ) − 「X-1 文字枠
これらの記述は共通の規則があり、それに従って書かれたものを式と呼びます。
PowerFolder の式の規則は次の様なものです。
例)
(5 + 3) * 3
単価 * 個数 + '円'
"伊藤" + '博文'
氏名 + "様"


組込み関数には次のものが用意されています。

関数名
<別名>
説明
日付
<date>
日付([d, m, y])
今日の日付から d 日後、m 月後、y 年後の日付を YYYY/MM/DD で返します。
d, m, y を省略した時は 0 と見なします。

 日付(7)     7日後
 日付(-7)     7日前
 日付(10, 10)   十月十日後
 日付(0, 0, 4)  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 で返します。
年([s])
s で指定した日付の年を返します。
s を省略した時は今日になります。
月([s])
s で指定した日付の月を返します。
s を省略した時は今日になります。

日([s])
s で指定した日付の日を返します。
s を省略した時は今日になります。
年度
年度(m [, s])
m を開始月とした s で指定した日付の年度を返します。
s を省略した時は今日になります。
半期
半期(m [, s])
m を開始月とした s で指定した日付の半期を'前期'か'後期'で返します。
s を省略した時は今日になります。
四半期
四半期(m [, s])
m を開始月とした s で指定した日付の四半期を半角の 1 から 4 で返します。
s を省略した時は今日になります。
年度日
年度日(m [, s])
m を開始月とした s で指定した日付の年度内の経過日数を返します。
s を省略した時は今日になります。
年度週
年度週(m [, s])
m を開始月とした s で指定した日付の年度内の経過週数を返します。
s を省略した時は今日になります。
年度月 年度月(m [, s])
m を開始月とした s で指定した日付の年度内の経過月数を返します。
s を省略した時は今日になります。
検索
<search>
検索(条件, 取得カラム[, 取得カラム, ...], デフォルト値)
条件のレコードを検索し取得カラムを返します。
取得カラムを複数指定した場合の結果は CSV 形式で返りますので、個々のカラムの値は csvdec() で取り出します。
レコードが無い場合はデフォルト値を返します。
 例 検索( '商品マスタ.ID = ' + 商品ID, '商品名', '価格', '-----')
検索複数
<searchmul>
検索複数(条件, 取得カラム[, 取得カラム, ...], デフォルト値)
検索() と同じですが、該当するレコードを複数返します。
レコード数は resultnum() で調べます。
1件のレコードは resultcsv() で取得します。
返るレコード数の最大は999件です。
結果の文字列はカードの文字列グリッドで表示できます。
検索合計
<searchsum>
検索合計(条件, 合計カラム)
条件のレコードを検索し合計カラムの合計を返します。
検索件数
<searchcnt>
検索件数(条件)
条件のレコードを検索し件数を返します。
例 検索件数( '商品マスタ.ID = ' + 条件文字列(商品ID) )
検索A
<searcha>
検索A( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 )
検索() と同じですが、条件を分けて与えます。
検索最小
<searchmin>
検索最小( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 )
検索A() と同じですが、条件に合うレコードが複数ある場合、
最も小さいものを採用します。
検索最大
<searchmax>
検索最大( 比較カラム, 演算子, 比較値, 取得カラム, デフォルト値 )
検索最小() と同じですが、最も大きいものを採用します。
条件文字列
<condstr>
<cs>
条件文字列(s1 [, s2, ...])
文字列を連結後、検索条件の条件文字列にエスケープします。

 商品名が 「'80s ヒットソング」の時
  検索件数('商品マスタ.商品名 = ' + 商品名)
 はNGなので、以下のようにする。
  検索件数('商品マスタ.商品名 = ' + condstr(商品名))
likestr
<ls>
likestr(s1 [, s2, ...])
文字列を連結後、検索時の演算子 LIKE の条件文字列にエスケープします。

 「50%」を含む商品名を検索する時
  検索('商品名 LIKE ' + condstr('%50%%'), ...)
 は、「50」を含むと解釈されNGなので、以下のようにする。
  検索('商品名 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
制約文字列
<restrictstr>
制約文字列(文字列)
文字列を次の様に処理した文字列を返します。
 ・半角スペース、全角スペースを省く
 ・全角の数字は半角に変換
 ・半角と全角のアルファベットは全て半角大文字に変換
 ・半角カタカナは全角カタカナに変換
 ・次の全角記号は半角に変換
!”#$%&’()*+,‐./:;<=>?@[¥]^_`{|}〜
空文字列
<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 [, ...])
文字列の桁別の論理ORを返します。
文字列は,最長のものに合わせ足りない分は、"0" が続くのもとして扱い、"0"以外の文字は"1"として扱います。
文字列AND
<strand>
文字列AND(s1, s2 [, ...])
文字列の桁別の論理ANDを返します。
文字列XOR
<strxor>
文字列XOR(s1, s2 [, ...])
文字列の桁別の論理XORを返します。
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' が出力される
 # : 文字の桁に値があればその数字が、それ以外は何も出力されない
 . : ピリオドは少数点を示す
 , : カンマは整数部分の3桁区切りを示す
例)
 書式指定文字列
  (なし)   1234    0.5  0
   0      1234    1   0
   0.00     1234.00  0.50  0.00
   #.##    1234    .5   
乱数初期化
<randomize>
乱数初期化() or randomize()
乱数を初期化します。
乱数
<random>
乱数(val) or randomize(val)
0 から val-1 までの乱数を返します。
bgcolor
bgcolor(s)
背景色を s で指定した色にします。
色は以下の文字列か RGB を16進2桁ずつで指定します。
 "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
メール送信
<sendmail>
メール送信(ホスト, 差出人, 宛先, 件名, 本文, [ポート番号])
メールを送信します。
ホストはメール送信を中継するホスト名です。


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


以下の関数は集計表示の拡張カラムの式にのみ記述できます。
関数名
<別名>
説明
集計累計
<accumulatesum>
集計累計(見出し名) or accumulatesum(見出し名)
集計表示の時、処理中のカラムのひとつ上のカラムの値に「見出し名」で指定したカラムの値を加えた値を返します。
集計カラム値
<getsumval>
集計カラム値(見出し名, [集計回数], [行数], [デフォルト値])
集計表示の時、見出し名 で指定したカラムの値を返します。
集計回数は複数集計時における何回目の集計かを指定します。
集計回数の先頭は1で省略時は処理中のカラムの回数になります。
行数の先頭は1で省略時は処理中のカラムの行になります。
集計空白
<sumspace>
集計空白(見出し名, [集計回数], [行数])
集計表示の時、見出し名 で指定したカラムが空白かを返します。
集計回数は複数集計時における何回目の集計かを指定します。
集計回数の先頭は1で省略時は処理中のカラムの回数になります。
行数の先頭は1で省略時は処理中のカラムの行になります。
集計回数
<sumcount>
集計回数()
処理中のカラムの集計回数を返します。
最大集計回数
<maxsumcount>
最大集計回数()
集計回数の最大を返します。
集計順位
<sumrank>
集計順位(見出し名)
集計表示の時、見出し名 で指定したカラムの順位を返します。
集計順位最後
<lastsumrank>
集計順位最後(見出し名)
集計表示の時、見出し名 で指定したカラムの順位の最下位を返します。
集計構成比
<sumrate>
集計構成比(見出し名)
集計表示の時、「見出し名」で指定したカラムの構成比を%で返します。
集計累計比
<accsumrate>
集計累計比(見出し名)
集計表示の時、「見出し名」で指定したカラムの累計値の構成比を%で返します。
移動平均
<movingave>
移動平均(見出し名, n, フラグ) or movingave(見出し名, n, フラグ)
「見出し名」で指定したカラムの移動平均を返します。
移動平均は指定したカラムの2つ前の視点の内容が同じ行を範囲とし、上から n で指定した行数の平均を求めます。
行数が n に満たない場合、フラグが 1 の時は空白、それ以外はそこまでの行数の平均になります。
移動累計
<movingsum>
移動累計(見出し名, n, フラグ) or movingsum(見出し名, n, フラグ)
「見出し名」で指定したカラムの移動累計を返します。
移動累計は指定したカラムの2つ前の視点の内容が同じ行を範囲とし、上から n で指定した行数の累計を求めます。
行数が n に満たない場合、フラグが 1 の時は空白、それ以外はそこまでの行数の累計になります。
増減比率
<incdecrate>
増減比率(見出し名, 種類, 閾値)
集計表示の時、「見出し名」で指定したカラムの増減比率を%で返します。
増減比率は指定したカラムの2つ前の視点の内容が同じ行を範囲とし、範囲の最後の行の値が、他の行の値に対してどのくらい増減したかを返します。
比較する値は「種類」の値により次のようになります。
  1=直前の値(前回値), 2=平均値, 3=先頭の値, 4=増減開始値
「閾値」は種類が 4 の時に増減開始値を求める際の閾値です
増減回数
<incdecfreq>
増減回数(見出し名, 種類, 閾値)
集計表示の時、「見出し名」で指定したカラムの連続増減回数を返します。
増減回数は指定したカラムの2つ前の視点の内容が同じ行を範囲とし、範囲の最後の行から上方へ向かって該当カラムの大小を比較し、最初に決まった増減傾向が連続する回数を求めます。
比較する値は「種類」の値により次のようになります。
  1=直前の値(前回値), 2=平均値
値を比較する時、差分の絶対値の被比較値に対する割合の%が「閾値」よりも小さい場合は等しいと判定します。
等しいと判定された場合は、厳密に大小比較し、結果が増減傾向と同じであればカウントし、そうでない時はスキップします。
増減傾向が決まっていない時は、保留し、増減傾向が決まった時点で同じ傾向のカウント分だけが加えられます。


ページの先頭に戻る