• FMS ではあらゆる資産に対して柔軟な項目設定を行っていくことができます。 
      ここで設定された項目は即時台帳の入力時の項目だけでなく検索時および出力時の項目として反映されるので、開始時に管理項目に悩むことなく資産の管理が始められます。 

      「設定項目」には
      1:種別 → 「台帳」のこと(例)契約情報、タレント、ドキュメントなど 
      2:種別共通項目 → 「台帳の共通的な項目、フィールド」のこと 
      3:管理区分 → 「台帳をさらに分割する区分」 
      4:管理区分別項目 → 「管理区分の専用項目、フィールド」のこと 

      の4つがあり、
      「1:種別」に対して「2:種別共通項目」が、「3:管理区分」に対して「4:管理区分別項目」が紐づいているイメージです。
      また「1:種別」に「3:管理区分」が紐づいており、よってある管理区分下の資産の情報を扱うときは「2:種別共通項目」と「4:管理区分別項目」にある管理項目を合わせた入出力項目となります。

      (イメージ)
      1:種別
      「03: 展示場」


      2:種別共通項目
      「floor: フロア数」

      3:管理区分
      「0301: ブース」

      4:管理区分別項目
      「price : 販売価格」、「booth_area: 面積」

      「0302: 休憩室」

      4:管理区分別項目
      なし

      「0303: VIPルーム」

      4:管理区分別項目
      なし




      • 管理種別の管理

        FMS では、「カテゴリ」「種別」「管理区分」の 3階層構造であらゆるオブジェクトを管理、維持することができます。
        カテゴリは「建物等」「設備等」「その他」の3つの固定です。
        ひとつ管理種別を更新してみる場合の方法を示します。
         
         
        (1)設定項目を「種別」に設定し、検索ボタンを押下します。 
           
        (2)変更したいデータをクリックします。下段にデータがコピーされます。 変更の必要な項目を書き換え、右端の「更新」ボタンを押下します。
           
        (3)確認ダイアログが出てきますので、「はい」を押して更新を確定してください。 管理項目の変更はこれで OK です。

      • 管理項目の管理

        管理項目は「共通」と「管理区分別」の2段階で管理することができます。
        「建物等」「設備等」はその中で種別を変更しながら検索や入力ができますが、「その他」に分類した場合、一覧や入力上での種別の変更はできないインターフェースとなります。利用用途に合わせて資産の分類を行ってください。 利用できる項目の入力形式:
        形式表
        入力形式
        説明・注意
        文字列 自由に文字列を入力できる
        半角英数 半角英数のみ入力できる
        日付 日付を入力できる
        時間 時間を入力できる
        参照(地区) 地区を組織マスタから選択できる
        参照(部) 部を組織マスタから選択できる
        参照(課) 課を組織マスタから選択できる
        参照(組織) 組織マスタから選択できる
        参照(ユーザー) 社員マスタから選択できる
        参照(カスタム) その他マスタ(銀行マスタ、国マスタ等 FMS でサポートされるマスタ)から選択できる
        参照(データ) 入力した台帳を呼び出し入力できる
        参照(データ選択肢) 入力した台帳から選択できる
        参照(選択) 作成した選択肢を呼び出し入力できる
        参照(選択肢) 作成した選択肢から選択できる
        HTML・数式 HTML で自由に表現ができる。また、処理中の値を計算します +, -, *, / で四則演算が可能
        リンク URL や電話番号をリンク付で表現できる
        ファイル あらゆるファイルを添付することができる
        緯度・経度 住所または地図を利用して位置情報を入力できる
        手書きサイン等 手書きの入力ができる
        利用できる項目のパラメータ:
        パラメータ表
        パラメータ名
        説明・注意
        必須入力 入力必須とする
        改行 前の要素の改行後に配置する
        行間 改行した場合に、前の行とのマージンをとる(px)
        QR時表示 QRからの表示項目に指定する
        表示順序 項目の表示順
        ページ 項目の表示ページ。表示順序より優先される
        繰り返し 表形式の入力項目とするためのキー(例:matrix)と表の名称
        最小行数 表形式の入力にした場合の最小入力行数(最小値:1、デフォルト:1)
        最大行数 表形式の入力にした場合の最小入力行数(最小値:1、デフォルト:なし)
        検索対象 検索する台帳の種別
        入力制限 半角英数にて入力を可能にする記号等の設定。
        ただし以下の値に設定すると、明示的に一括設定可能
        設定値入力制限内容
        (設定なし)0~9, a-z, A-Z
        e-noハイフン及び大文字のみ
        ren_no大文字のみ
        eda_no数値のみ
        names,.'()_- を許容
        email@_-. を許容
        number.- を許容
        all全ての記号を許可
        取得キー 参照したデータの表示キー。nm(名称)、ex_nm.s(略称)、ex_nm.e(英名)、ex_nm.k(カナ名)、remark(備考)のほか、参照先データの管理項目キーが利用できます。
        また、台帳に対しては設定内容や入力内容で参照状況を変化させる特別な指定も可能です。
        特別な指定設定例
        参照データを限定する x_grp=C01,x_nm,x_tanto
        (グループコードが C01 のデータだけを参照します) x_grp=data.x_daicho
        (グループコードが入力中の項目 x_grp で参照したコードの値であるデータだけを参照します) ※ この指定をした参照キーは参照表示対象には含まれません。
        繰り返しの中を参照する mtx100@super_daicho,lev
        (入力中の super_daicho 項目で参照されたデータの繰り返し mtx100 の中を参照する) ※ 台帳の入力値は繰り返しの index となります。参照先の値変わると値も変更されますので、ご注意ください。 ※ この指定をした参照キーは参照表示対象には含まれません。
        繰り返しの中の値を表示する mtx100.hyouji_mei (mtx100 が繰り返しの名前)
        関連コード 「参照(カスタム)」にて複数の項目でひとつの値を構成する場合に指定する相手方の項目キーです。 例:bank_cd
        値表示 「参照(カスタム)」にてダイアログ参照後に参照するデータオブジェクトのキーと挿入先の項目キーです。例:data.bank.nm=bank_nm
        文字寄せ 文字の寄せ方
        許容数 ファイルの許容数量(最小値:1、デフォルト:1)
        ラベル幅 ラベルの表示幅(px)
        入力幅 入力欄の幅(px)
        ラベル高 ラベルの表示高(px)
        入力高 入力欄の表示高(px)
        接尾語 入力欄のあとにつける文字(単位など)
        接尾幅 接尾語の表示幅(px)
        最小桁数 入力できる最小の桁数
        最大桁数 入力できる最大の桁数
        初期値 初期表示値
        日付形式 日付の表示形式
        最小日付 入力できる最小の日付
        最大日付 入力できる最大の日付
        管理項目の設定Tips:
        参照(データ)
        参照(データ)形式とは、別の台帳の情報を参照する形式です。
        以下の例では、
        ・管理選択肢 にて、 線種 を定義
        ・部品マスタ にて、 電線 を定義
        ・設計マスタ にて、 電線を利用して、部品が参照しているサイズ・色・線種(の名称)を表示
        するための設定方法を示しています。
        <設定>

        <入力時>


      • 発生イベントの管理

        日々発生する「記録」にあたる部分を管理します。この記録は作成したいずれかの資産に紐づくものであるという想定になります。kanren_object というキーに入力値は管理され、資産の評価軸として用いることができます。 「詳細」ボタンにて「カテゴリ」と「資産種別」を選択するのを忘れないでください。 (イベント入力時にオブジェクトが選択できず、エラーが発生してしまいます。) 複数の資産と関連がある場合はその他の管理項目として設定することで解決できます。
      • 選択肢の管理

        入力で用いる単純な選択肢の管理ができます。
      • 選択肢の初期データ

        選択肢にはシステムを動作させるために初期データとして必要なものがいくつか存在します。
        SYS_ もしくは sel_ から始まるデータが大凡その対象です。
        ※これらのデータはあらかじめ登録されています。
        登録されていない場合は、販売元にお問合せください。

        必要に応じて以下の選択肢を作成・置き換えしてください。
        (「ファイル」があるものはデフォルト候補を取り込むことができます。選択肢の新規作成および選択肢を誤って修正してしまい初期化したい場合などにご利用ください。)

        管理コード管理名称 利用目的
        (*)ファイルは「2:選択肢」の「ファイル取り込み」 に利用できます。
        sel_hourカレンダー - 時 カレンダーの時間の刻みに利用します
        ☆選択肢変更可
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        sel_minuteカレンダー - 分 カレンダーの分の刻みに利用します
        ☆選択肢変更可
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        sel_kigenカレンダー - 期限 カレンダーの通知タイミングに利用します
        *変更非推奨
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        sel_roomsカレンダー - 会議室 カレンダーの会議室の候補に利用します
        ☆選択肢変更可
        (自由に設定してください。)
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        SYS_dauthシステム - 台帳権限メニュー上への表示・非表示を制御します。
        *指定キーの変更不可(権限キー追加および名称変更可)
        public ... 誰でも編集できる台帳
        creator ... 作成者のみ編集可能な台帳(閲覧は参照された場合のみ可能)
        admin ... 管理者および管理タブ閲覧権限のあるユーザーのみ編集可能な台帳(閲覧は同上)
        その他、以下の指定を行うことで、様々な権限設定が可能です。
        (1) tab_xxxx ... タブ xxxx を見れるユーザーにのみに、公開します。(e.g. tab_calendar)
        (2) exe_xxxx ... 実行権限 xxxx を持つユーザーのみに、公開します。(e.g. exe_output)
        (3) ck_xxxx ... 地区コード xxxx に所属するユーザーのみに、公開します。(e.g. ck_C01)
        (4) bu_xxxx ... 部門コード xxxx に所属するユーザーのみに、公開します。(e.g. bu_B01)
        (5) ka_xxxx ... 課コード xxxx に所属するユーザーのみに、公開します。(e.g. ka_K01)
        (suffix(接尾語)付与) _r ... 読み込み専用権限にします。(e.g. ck_C01_r)
        その他実現したい設定状況があれば、販売元にご相談ください。
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        SYS_fixedシステム - 既定項目レイアウト 台帳の既定入力項目を制御します
        *キー変更不可(無効設定可、名称変更可)
        no_attach ... 台帳の添付ファイルエリアがなくなる
        no_fixed ... 台帳の名称、略名、備考エリアがなくなる
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        SYS_suruシステム - する、しない 台帳の動作制御(重み計算)に利用します
        *キー変更不可(無効設定可、名称変更可)
        1 ... する(重み計算を実施)
        2 ... しない(重み計算をしない)
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
        repeat繰り返し アラートの設定に利用します
        *キー変更不可(無効設定可、名称変更可)
        none ... なし
        daily ... 毎日
        weekly ... 毎週
        monthly ... 毎月
        annually ... 毎年
        配布初期データファイル (別窓で開いてしまった時は「右クリック」->「別名で保存」で対応ください。)
        [ 2022.08.09 版 ] ダウンロード
      • 計算項目の設置

        計算項目の設置には「HTML」を用います。
        他の項目の引用には以下の関数が利用できます

        関数表(計算項目)
        関数 利用例 説明・注意
        calc calc( value(gaku) + value(zei) ) 処理中の値を計算します +, -, *, / で四則演算が可能です。値がない value 結果は 0 に変換します
        value value(nm) 資産の管理項目値を取得します
        (*)表形式の入力をした際は value(matrix1.nm) とすることで値が配列で取得されます
        (*)value(matrix1.gaku, op) op = N / MIN / MAX / SUM / AVG / VAR / SD でそれぞれ matrix1 の gaku 列の「行数」「最小」「最大」「合計」「平均」「分散」「標準偏差」を取得します。
        date date(koushin_kigen) date() 資産の時間項目を、比較可能な形式で取得します。引数になにも与えないときは実行した日時が返されます
        fmtN fmtN( value(gaku), 0 ) 数字をフォーマットします
        fmtD fmtD( date(koushin_kigen), Y/M/D ) 日付をフォーマットします
        src src[[ value(gaku) + value(zei) ]] [[ ... ]] 内をスクリプト処理します。JavaScript にある全ての関数が自由に利用できます。value 関数および calc 関数はこのスクリプト処理より前に解析されるので、これらも利用することができます。
        値がない value 結果は空文字に変換します
      • アラートの設定

        アラートは台帳やイベントに登録した値と、プログラム(シンプルな文法で世界的に利用されている言語である JavaScript (リンクは基礎文法の紹介サイト) )を利用して様々な設定をすることが可能です。

        設定項目(アラート)
        項目ラベル 説明・注意
        カテゴリ アラート対象とするカテゴリを選択します。
        資産種別 アラート対象とする種別を選択します。
        管理区分 アラート対象とする管理区分を選択します。
        繰り返し アラートの繰り返しを「する」にした場合のスパンを指定します
        残回数 アラートに回数を設ける場合の残回数を指定します。無限に繰り返す場合は -1 とします。
        反復 アラートに指定したフローの繰り返し回数を指定します。通常は 1 を指定し、登録されたデータ回数だけロジックを通過します。
        タイミング 繰り返しの詳細タイミングを指定します。
        毎年 ... 実行月を指定します。
         日付、時間はアラート設定を継承します。
        毎月 ... 実行日付を指定します。「月末」は「EOM」(END_OF_MONTH)を指定します。
         時間はアラート設定を継承します。
        毎日 ... 実行時間を指定します。
         分単位はアラート設定を継承します。
        毎時 ... 実行分を指定します。

        範囲を指定した管理項目から値を取得する場合、例えば項目名が kigen_date だった場合は kigen_date_s、kigen_date_e のように _s、_e が後ろにつくことに注意してください。
        また、表形式の入力を行った場合、項目に指定した表番号にしたがって matrix_n(「n」は項目に指定した表番号)と何番目のデータかが必要です。例えば value('matrix_1.kigen_date.0') とすれば表番号と入力順序にしたがった値の取得が可能です。

        なお、アラートを設定する場合、アラートタスクの設定リクエスト が必要です。
        アラート動作がうまく確認できない場合は販売元にお問い合わせください。


        関数表(アラート)
        関数 利用例 説明・注意
        ※全体を通しての注意:
        (1)用意された関数名、変数名はすべて半角英数字です。大文字、小文字の区別があります。
        (2)シングルクゥォテーション(')/ダブルクゥォテーション(")に動きの違いは出ません。
        (3) *アラート専用 のもの以外は「タイプ:ステート」設定したコマンド実行で利用できます。
         ただし、value 関数で期待した値を得るには、実行時に { stateObj: (処理中のオブジェクト) } のオプションを渡してください。
         それ以外の関数や変数は { execArgs: [ { .... } ] } オプションを渡すことで、関数や変数をパススルーすることができます。
         (コマンド実行は execArgs 配列を前から順番に a0, a1 ... という変数で受け取ります。)
        1.基本関数
        value value('nm') 資産の管理項目値を取得します。
        参照項目においてコードに対する名称を参照したい場合は _view_[key] もしくは _ref_[key]と記述できます。
        例)
        管理項目 - 担当者: m_tanto (入力形式:参照(ユーザー)、取得キー:名前(nm), メール(contact.email))の場合
        担当者(コード値): value('m_tanto')
        担当者名(参照値): value('m_tanto_view_nm' or 'm_tanto_ref_nm')
        担当メール(参照値): value('m_tanto_ref_contact_email')
        ※注)取得キーの1つ目のみ、_view_[key] or _ref_[key] で取得できます。
           取得キーの2つ目以降は、_ref_[key] でのみ取得可能です。

        *アラート処理中に rc(requireCommand) 内で期待した値を取得するには { stateObj: (処理中のオブジェクト } オプションを渡すことが必要です。
        date date('koushin_kigen') date() 資産の時間項目を、比較可能な形式(UNIX TIME というミリ秒(1/1000秒)単位の整数値)で取得します。
        引数になにも与えないときは実行した日時が返されます。
        Y / M / D / h / m / s を単位とする数値を与えると、そのミリ秒を返します。(例:3h=>10800000(3時間分のミリ秒値))これを使うと、時間の比較式が容易に記述できます。
        /* 台帳項目 alert_time : date.alert_time  -  今日のミリ秒が 1日のミリ秒より小さい時 */
        if(date('alert_time') - date() < date('1D')) {
        return 'アラート'; // 設定時間1日前にアラートを発生させる
        }
        /* 台帳項目 kijitu : data.kijitu が 3日後 の時にメールを送る */
        if (date('kijitu') == date() + date('3D')) {// date() = 今日 + date('3D') = 3日分のミリ秒を足す。
        return [{type: "mail", to: ["aaa@mail.com", "cc:bbb@mail.com"], subject: "aiueo", body: "hoge hoge"}];
        }
        calc
        calc( value('gaku'), '+', value('zei') ) 処理中の値を計算します
        memo
        mem
        mem('nm', 'hoge') mem('nm') 処理中に値を一時保存します もしくは一時保存した値を取得します。
        mem('変数名', 保存する値); で、変数に保存する値を格納します。
        mem('変数名') で、保存した値を参照します。
        例)
          mem('宛先', value('shinseisha_email')); // 台帳のデータから申請者メールアドレスを宛先に保存
        mem('件名', 'データ更新のお知らせ'); // 件名の保存
        mem('本文', ''); // 本文に「''(空文字)」を保存することで初期化
        memPad('本文', value('shinseisha_ref_nm') + '様'); // 本文に申請者名+様+改行を保存
        memPad('本文', 'xxxxのデータが更新されました。'); // 本文にメッセージ+改行を追加保存
        memPad('本文', '内容を確認してください。'); // 本文にメッセージ+改行を追加保存
        ....
        // メールの送信(申請者+管理者)
        return [{ type: "mail", to: [mem('宛先'),"cc:admin@test.net"], subject:mem('件名'), body: memPad('本文') }];
        memoPad
        memPad
        memPad('nm', 'hoge') memPad('nm') 文字列を積み上げていきます もしくは積み上げた文字列を取得します
        最後尾に改行コード(もしくは第三引数に与えた値)が自動付与されますので、文章作成などが可読性よく記述できます。
        memPad('本文', '拝啓 FMSユーザー様');
        memPad('本文', '');
        memPad('本文', 'おはようございます。');
        memPad('本文', '今後ともよろしくお願いします。');
        exeLog(memPad('本文')); // =>
        /* ログへの出力:
        拝啓 FMSユーザー様
        おはようございます。
        今後ともよろしくお願いします。
        */
        rc「管理」タブにある「コマンド管理・実行画面」で登録した命令文を呼び出します。
        第二引数のキーに execArgs を指定すると呼び出し先に a0, a1 ... の順で変数化して渡されます。
        すなわち、アラートの処理中の状態により、コマンドの実行内容を分岐することができます。
        // -----
        rc('ResNet-50 を利用した画像認識', { execArgs: [ URL ] })
        // -----
        exeLog(v); // => 画像認識結果の出力
        kanri kanri(1) kanri('区分名') 種別、区分のコード値もしくは名称を取得します。
        set set('joutai', '000') 扱っているデータの管理項目に値を設定します。(dbへの保存はまだされていません)
        2.ログ *アラート専用
        exeLog exeLog('現在台帳データ「' + value('nm') + '」を処理しています') 処理実行ログを出力します。アラート作成者や管理者が「アラート確認」メニューから実行状況を確認することができます。
        errLog errLog('台帳データ「' + value('nm') + '」の処理ができませんでした') 処理エラーログを出力します。アラート作成者や管理者が「アラート確認」メニューから確認することができます。
        3.フォーマット
        fmtNum
        fmtN
        fmtN( value('gaku') ) 数字をフォーマットします
        fmtDate
        fmtD
        fmtD( value('kigen_date'), 'Y/M/D H:m:s' ) 日付をフォーマットします
        ※アラート上で日付を取り扱う場合、データベース上の日付はGMTとなっているため、表示用にはロケール日付にする「sync.newDate('日付', TRUE)」を通した後に行ってください。
        例)fmtD(sync.newDate(value('kigen_date'), TRUE), 'Y/M/D')
        toDate toDate( value('kigen_date') ) toDate( 2020, 12, 31, 10, 59 ) 日付データを JavaScript の型で取得します
        toNum toNum( "001" ) // => 1 文字列データを JavaScript の Number 型で取得します
        4.データ操作
        ※これらの関数は「非同期」と呼ばれるネットワークを経由下処理のため、処理を区切って結果を受け取る必要があります。利用例は「(例8)データを利用した処理の例」を参照ください
        LIST
        LIST(資産コード, フィールド, フィルタ, 取得期間(from), 取得期間(to) ) 資産コードに一致するデータ一覧を取得します
        //(記述例)  アラート設定内で可能な略記述
        -----
        // 引数1(資産コード):カテゴリ: event(イベント), 種別:shinsei01(申請)
        // 引数2(フィールド):台帳に登録した管理コードの必要な物を指定
        // 引数3(フィルタ):以下の例ではjoutai(状態)が001 + (かつ)shonin_sha=(承認者台帳のキー)のもの
        // 引数4(期間From):shinsei_jikan(申請時間)が−10m(10分前)
        LIST("event:shinsei01", [ "kanri_cd", "shinsei_sha", "shonin_sha" ], "joutai=001+shonin_sha=" + value('_cd'), "shinsei_jikan:-10m");
        -----
        /* 後続処理 */
        mem('件数', v.length);// 件数をメモリに記録
        if(mem('件数') == 0) { return; } // => 件数が 0 の時、この人がチェックすべき申請はない。
        mem('申請データ', [ ]);
        // 対象データ(v)を一件づつ処理して申請データに蓄積する
        return WAIT( v.map(one=>GET("event:shinsei01:ippan:" + one.kanri_cd).then(v=>mem('申請データ').push(v))) );
        -----
        /* 後続処理 */
        ・期間指定の記述方法
        フィールド名:(+/-)数値(Y/M/D/W/h/m)
        (+/-) : +増、-減
        (Y/M/D/W/h/m) : Y(年),M(月),D(日),W(週),h(時),m(分)
        WAIT
        WAIT(処理) 処理が全て完了するまで本処理を続けます
        //(記述例)  アラート設定内で可能な略記述
        mem('申請データ', [ ]);
        // 対象データ(v)を一件づつ処理して申請データに蓄積する
        return WAIT( v.map(one=>GET("event:shinsei01:ippan:" + one.kanri_cd).then(v=>mem('申請データ').push(v))) );
        -----
        /* 後続処理 */
        LOOP
        LOOP(資産コード, フィールド, フィルタ, 取得期間(from), 取得期間(to), 処理 { forEachBlock, forEachObject } ) 資産コードに一致するデータを反復処理します
        SUM
        SUM(資産コード, フィールド, フィルタ, 取得期間(from), 取得期間(to)) 資産コードに一致するデータを集計します
        SORT
        SORT(オブジェクト配列, キー, [降順フラグ]) 配列をキーで並び替えます
        EACH
        EACH(オブジェクト配列, 処理) 配列の値をひとつずつ処理します
        GET
        GET(資産コード[, フィールド][, フィルタ])
        *「資産コード」とは カテゴリ、種別、区分、管理コードを ":" で接続したキーです。アラート中のデータからは value('_cd') で取得できます。
        * 管理コード3 の部分を "*" にすることで、管理コード3を固定せずにデータの検索をすることができます。
        資産コードでデータを取得します
        //(記述例1)  アラート設定内で可能な略記述((例2)のような記述も問題ありません)
        -----
        GET('asset:ZZZ:001:ZATSU-DATA-01'); // 1行書は return が自動付与される
        -----
        v = v || { data: { } }; // 資産が取得出来なかった場合は、空箱を用意
        outLog('取得したデータの管理項目 like の値:', v.data.like); //=> 登録された値もしくは undefined を表示
        //(記述例2) コマンド実行(タイプ:ステート)での記述例
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        return Promise.resolve().then(()=>{
        return GET('(その他)ZZZ:001:ZATSU-DATA-01');
        }).then(v=>{
        /* 後続処理 */
        });
        PUT
        PUT(資産コード, データ) 資産データを保存します 。
        検索インデックスの変更も同時に行われます。
        //(記述例1) 
        PUT('asset:ZZZ:001:ZATSU-DATA-01', obj);
        //(記述例2)
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        PUT('(その他)ZZZ:001:ZATSU-DATA-01', obj);
        CNT
        CNT(資産コード[, フィルタ]) 資産コードの数を調べます
        //(記述例1)  
        CNT('asset:ZZZ:001', 'cd=/2020/'); // 2020 から始まる ZZZ 台帳 001 区分のデータ数 
        //(記述例2)
        // *キー: バリュー のオブジェクトを渡すこともできます。
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        CNT('(その他)ZZZ:001');
        SET
        SET(資産コード, { フィールド: 値 } or 'フィールド=値' 資産コードにデータをセットします
        検索インデックスの変更は行いません。
        //(記述例1)  
        SET('asset:ZZZ:001:ZATSU-DATA-01', 'nm=変更後の名前');
        //(記述例2)
        // *キー: バリュー のオブジェクトを渡すこともできます。
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        SET('(その他)ZZZ:001:ZATSU-DATA-01', { nm: "変更後の名前" });
        INC
        INC(資産コード, { フィールド: 増加値 } or 'フィールド=増加値') 資産コードの数値項目を増減させます。
        検索インデックスの変更は行いません。
        //(記述例1)  
        INC('asset:ZZZ:001:ZATSU-DATA-01', 'count=1');
        //(記述例2)
        // *キー: バリュー のオブジェクトを渡すこともできます。
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        INC('(その他)ZZZ:001:ZATSU-DATA-01', { count: 1 });
        DEL
        DEL(資産コード, 復帰(デフォルト:FALSE) ) 資産コードを削除します
        検索インデックスの変更は行いません。
        ※本削除は物理的な削除ではありません。物理削除は管理者の 「一括削除」 機能を利用してください。
        //(記述例1)  
        DEL('asset:ZZZ:001:ZATSU-DATA-01');
        //(記述例2)
        // *asset は「その他」で作成した台帳のカテゴリのため、以下の記述も可能です。
        DEL('(その他)ZZZ:001:ZATSU-DATA-01', TRUE); // => 復帰
        5.アラート基本変数 (*アラート専用)
        ALERT
        ALERT 処理中のアラート名を取得します
        DATE
        DATE 処理中のアラート開始年月日(Date型)を取得します
        TODAY
        TODAY + 'です' 処理中のアラート開始年月日(文字列)を取得します
        Y
        Y + '年' 処理中のアラート開始年を取得します
        M
        M + '月' 処理中のアラート開始月を取得します
        D
        D + '日' 処理中のアラート開始日を取得します
        W
        '第' + W + '週' 処理中のアラート開始週を取得します
        yy
        yy + '年' 処理中のアラート開始年を下二桁取得します
        TIME_h
        TIME_h + '時' 処理中のアラート開始時を取得します
        TIME_m
        TIME_m + '分' 処理中のアラート開始分を取得します
        TIME_s
        TIME_s + '秒' 処理中のアラート開始秒を取得します
        6.時間操作
        dateFormat
        dateFormat(value('kigen_date')) Y/M/D 形式に日付データを変換します
        timeFormat
        timeFormat(value('kigen_time')) 時分形式に時間データを変換します
        procTo
        procTo(202001, -8) 年月を意味する6桁の数値を操作します
        riseOfTheDay
        riseOfTheDay(conv_date, shift_month, day, conv_revert) ある日の始まり時間を取得します
        edgeOfTheDay
        edgeOfTheDay(conv_date, shift_month, day, conv_revert) ある日の終わり時間を取得します
        riseOfTheMonth
        riseOfTheMonth(conv_date, shift_month, conv_revert) ある月の始まり時間を取得します
        edgeOfTheMonth
        edgeOfTheMonth(conv_date, shift_month, conv_revert) ある月の終わり時間を取得します
        MSEC_d
        '1日=' + MSEC_d + 'ミリ秒' 1日分のミリ秒(1/1000秒)を取得します
        MSEC_h
        '1時間=' + MSEC_h + 'ミリ秒' 1時間分のミリ秒(1/1000秒)を取得します
        MSEC_m
        '1分=' + MSEC_m + 'ミリ秒' 1分分のミリ秒(1/1000秒)を取得します
        MSEC_s
        '1秒=' + MSEC_s + 'ミリ秒' 1秒分のミリ秒(1/1000秒)を取得します
        7.アラート状態変数(*アラート専用)
        isFirst
        is_1st
        if(is_1st) return; 初回の処理であることを示します。反復回数を指定した場合、2回目からここの値が偽となります
        isFirstObject
        is_1st_obj
        if(is_1st_obj) return; 最初のオブジェクトであることを示します。反復回数を指定した場合、反復回数分、真になる処理が走ります。
        isFirstFlow
        is_1st_flow
        if(is_1st_flow) return; 最初のフロー(フロー番号が1)であることを示します 。反復回数を指定した場合、反復回数分、真になる処理が走ります
        isFinal
        is_fin
        if(is_fin) return; 最終の処理であることを示します。反復回数を指定した場合、最終回以外の値が偽となります
        isFinalObject
        is_fin_obj
        if(is_fin_obj) return; 最終のオブジェクトであることを示します。反復回数を指定した場合、反復回数分、真になる処理が走ります。
        isFinalFlow
        is_fin_flow
        if(is_fin_flow) return; 最後のフロー(フロー番号が最大)であることを示します 。反復回数を指定した場合、反復回数分、真になる処理が走ります

        (例1)メールの送信
         // *日本語キーは物理キーに自動変換されます。
        if(value("nm") == "")
        return [{
        種類: "メール",
        宛先: ["info@xxx.co.jp", "cc:support@xxx.co.jp"],
        本文: "名前の設定なし (資産CD:" + value("cd") + ")"
        }];

        (例2)SMS の送付(*SMSは1通25円かかります。ご利用前にご相談ください。)
         // *日本語キーは物理キーに自動変換されます。
        if(value("nm") == "")
        return [{
        種類: "ショートメール",
        宛先: ["080xxxx1234"],
        本文: "名前の設定なし (資産CD:" + value("cd") + ")"
        }];

        (例3)メール+SMS の送付(*SMSは1通25円かかります。ご利用前にご相談ください。)
         // *日本語キーは物理キーに自動変換されます。
        if(value("nm") == "")
        return [{
        種類: "システム通知",
        宛先: ["info@xxx.co.jp"],
        電話番号: ["080xxxx1234"],
        本文: "名前の設定なし (資産CD:" + value("cd") + ")"
        }];

        (例4)お知らせの発信
        if(value("nm") == "") 
        return [{ type: "oshirase", to: "ALL", body: "名前の設定なし (資産CD:" + value("cd") + ")"
        }];

        (例5)メール + お知らせ
         var body = "名前の設定なし (資産CD:" + value("cd") + ")";
        if(value("nm") == "")
        return [{ type: "oshirase", to: "ALL", body: body
        }, { type: "mail", to: ["info@xxx.co.jp"], body: body
        }];
        ※メール・ショートメッセージ・お知らせともに { isFInalNotify: TRUE } を渡すことで、同一アラート上の以降のフローで発生するお知らせ発生を抑制することができます。
        ※お知らせにおいて渡すパラメータは以下のものがあります。
        宛先/送信先/to(必須):
         <Array>.<String> | <String>
         お知らせの表示範囲を決めます。
         文字列を与えた時は対象は全体となります。標準的な記述文言は "ALL" となります。
         配列を与えた時は、下記の「対象単位」に指定した対象に対してお知らせが可能です。
          "地区":組織マスタに登録した地区単位。["地区コード:地区略名", "地区コード:地区略名"] の形式で記述
          "部" :組織マスタに登録した部門単位。["部コード:部略名", "部コード:部略名"] の形式で記述
          "社員":社員マスタに登録した社員単位。["社員コード:社員略名", "社員コード:社員略名"] の形式で記述
         ※配列を渡さないと機能しません。
        発行区分/hakko_kbn(任意):
         <String>
         どういったお知らせを発行するかを指定できます。
         "緊急" もしくは "KINKYU" を渡すと、強制的にお知らせがオープンする「緊急」のお知らせを発行できます。
         "広告" もしくは "ADVERTISE" を渡すと、広告目的のお知らせが発行できます。
         その他は通常のお知らせデータが作成・発行されます。
        対象単位/taisho_tanni(任意):
         <String>
         to に指定する単位を指定します。 to = ALL | 全社員 となっていた場合、設定は無視されます。
         "地区" もしくは "CK" を渡すと、to に指定された地区にお知らせを通知します。
         "部"  もしくは "BU" を渡すと、to に指定された部門にお知らせを通知します。
         "社員" もしくは "SHAIN" を渡すと、to に指定された社員にお知らせを通知します。
         to の内容と矛盾があった場合、データは登録されますが、通知が意図通りにならない可能性があります。
        掲載期間/keisai_days(任意):
         <Number>
         何日表示するかを渡すことができます。デフォルトは1(当日の終わり)です。

        (例6)時間の比較
        // (*) 期間項目の場合、開始が _s、終了が _e キーとなる点にご注意ください。
        if(date("koushin_kigen") < date())
        return [{ type: "mail", to: ["info@xxx.co.jp"], body: "更新期限切れ (資産CD:" + value("cd") + ")"
        }];

        (例7)管理者へのメールの送信
        (*)送付先についてはシステム設定メニューから「管理者連絡先設定」を行なってください。
        if( value("notifty") ) return "必須の入力のない情報があります (" + value("_id") + ")"; 
        受信したお知らせの表示例:
        (例8)データを利用した処理の例
        ネットワークを経由した処理を含む、「非同期」と呼ばれる処理を跨ぐ時は、処理の区切りをつくり、数珠つなぎで記述する必要があります。FMS のアラート記述では非同期処理を "-----" を使って簡単に繋ぐことができます。
        また、戻り値が変数 v に自動で入るだけでなく、1行で記述した場合は return も自動付与されます。(2行以上にわたり記述する場合は 明示的に return する必要があります。)
        // "-----" を使って、処理を区切ることができます(Promise を用いた JavaScript 記述と同じ意味となります)
        if(isFirstObject) {
        memPad('Sbj', 'メールの件名を設定します') return '次の処理に引き継ぐ値'; // return を付与することで、前段の値を引き継ぐことができます(この例において意味はない)
        }
        -----
        // 勤怠管理データからある人の残業時間を合計する例。
        // 1行書きの場合、return は自動で付与されます
        // イベントデータは @以下に「資産CD(確認用)」を添えることで、その資産に限定したイベントデータを付与できます。
        SUM('event:4:TA001:kintai@' + value('_cd'), 'zangyo_jikan', 'フィルタなし', 'hiduke:-1W'); // "hiduke:-1W" で hiduke 項目に関して過去1週間分のデータを取得します
        -----
        // v には前の処理の結果が入っています。この場合、処理中の人の合計残業時間。
        // Txt には「~ さん:~ 時間」という文言が1行ごとに改行されながら、積み重なっていきます。
        memPad('Txt', value('nm') + 'さん: ' + v + '時間');
        -----
        if(isFinalObject) { // 最後にメールの送信
        return [{ type: "mail", to: ["info@xxx.co.jp"], subject: memPad('Sbj'), body: memPad('Txt') }]
        }

        この記述は以下と全く同義となります:
        Promise.resolve().then(()=>{
        if(isFirstObject) {
        memPad('Sbj', 'メールの件名を設定します') return '次の処理に引き継ぐ値'; // return を付与することで、前段の値を引き継ぐことができます(この例において意味はない)
        }
        }).then((v)=>{
        // 勤怠管理データからある人の残業時間を合計する例。
        // 1行書きの場合、return は自動で付与されます
        // イベントデータは @以下に「資産CD(確認用)」を添えることで、その資産に限定したイベントデータを付与できます。
        return SUM('event:4:TA001:kintai@' + value('_cd'), 'zangyo_jikan', 'フィルタなし', 'hiduke:-1W'); // "hiduke:-1W" で hiduke 項目に関して過去1週間分のデータを取得します
        }).then((v)=>{
        // v には前の処理の結果が入っています。この場合、処理中の人の合計残業時間。
        // Txt には「~ さん:~ 時間」という文言が1行ごとに改行されながら、積み重なっていきます。
        return memPad('Txt', value('nm') + 'さん: ' + v + '時間');
        }).then((v)=>{
        if(isFinalObject) { // 最後にメールの送信
        return [{ type: "mail", to: ["info@xxx.co.jp"], subject: memPad('Sbj'), body: memPad('Txt') }]
        }
        });
      • アラートの設定例

        ここではアラート設定のひとつの例として、カレンダーに登録した予定からの通知機能の付与を記載します。
        アラートの設定は全てをアラートで完結することもできますが、アラートの設定内容の見た目が複雑になるため、本設定例のように「コマンド実行」 の活用をオススメします。

        【 設定目標 】
        ■ カレンダーに登録された予定をまとめて、前日の12時に各自に通知する

        【 設定詳細 】
        ■ 以下の(手順1)~(手順5)順に設定を進めます。
        (手順1)コマンド実行にて「(アラート)カレンダーの予定 指定期間メールの準備」を用意します。
        「管理者」タブの「コマンド管理・実行画面」にて以下のようにデータ登録を行います。
        [ サンプル ] 確認(コピー&ペーストでお使いいただけます)
        (*)設定タイトルが呼び出し名となります。正確に設定ください。
        (*)会社コードはお使いのコードが表示されます。

        (手順2)コマンド実行にて「(アラート)カレンダーの予定1日前メールの準備」を用意します。
        「管理者」タブの「コマンド管理・実行画面」にて以下のようにデータ登録を行います。
        [ サンプル ] 確認(コピー&ペーストでお使いいただけます)
        (*)設定タイトルが呼び出し名となります。正確に設定ください。
        (*)会社コードはお使いのコードが表示されます。

        (手順3)コマンド実行にて「(アラート)通知メール作成」を用意します。
        「管理者」タブの「コマンド管理・実行画面」にて以下のようにデータ登録を行います。
        [ サンプル ] 確認(コピー&ペーストでお使いいただけます)
        (*)設定タイトルが呼び出し名となります。正確に設定ください。
        (*)会社コードはお使いのコードが表示されます。

        (手順4)カレンダーアラート用の資産を作成します。
        単純アラートを動かす資産を作成します。ここでは「雑台帳」というものを作成しています。
        (名前はもちろん、同様の台帳が別にあればそれを活用しても構いません)
        (1) 管理項目登録(その他)に「雑台帳」(管理コード:ZZZ)を作成します
        (2) 「雑台帳」に管理区分「単純アラート(管理コード:simple_alert)を作成します
        (3)「雑台帳 - 単純アラート」 にデータをひとつ登録します


        (手順5)アラートを設定します。
        (1) アラート名「カレンダー通知(1日前)」を作成し、詳細設定を以下のように行います。
        (2) OK で戻ったあと、繰り返しを「あり」にセットし、更新します。
        (*)rc 関数の呼出タイトルが(手順1~3)で作成したコマンドと同じになるように注意してください。
        [ アラート記述サンプル ](コピー&ペーストでお使いいただけます) 確認

        以上で設定完了です。
        動作に問題があった場合、FAQ の「アラート動作の確認がしたい」を参考に、動作検証を行ってください。

      • 重みの設定

        重みは各台帳やイベントに紐付けられる「状態(ステート)」「追加処理(バインディング)」「評点(スコア)」の総称です。
        FMS では重みを設定することで、任意の状態に対するスコアを保持することができ、帳票機構やレポーティング機構を使って、自社の資産を独自の目線で評価、集計、出力していくことができます。
        重みの記述ではアラートで利用できる関数に加えて、画面を操作するいくつかの関数が利用可能です。

        <例: 重みの設定画面(0001: 車輌台帳)>




        ■ プロパティ表(重み)■
        プロパティ名 説明・注意
        カテゴリ (読み取り専用)台帳のカテゴリになります。「建物・施設」、「設備」、「その他」のいづれかが設定されています。
        資産種別 (読み取り専用)1:種別 として定義した「資産種別」が表示されます。
        資産区分
        公開範囲
        どのレベルの利用者までこの台帳を表示するかを指定します。
        ※ creator(作成者)のみを選択して更新した場合、この台帳データを削除できるようになります。
        表示順序 台帳の一覧表示時の表示順を指定します。
        同じ順序の場合は台帳キーの辞書順になります。
        参照あり 他の台帳から参照される場合にチェックします。
        共通項目
        台帳にデフォルトで表示されるエリアの制御を行います。
        ・default(デフォルト)

        ・no_attach(関連ファイルなし)

        ・no_fixed(固定項目なし)

        ※未選択時はデフォルトと同じ挙動になります。
        印刷 この台帳のデータを利用して帳票出力する定義をしているRSDファイルのIDを指定します。
        重み計算
        この台帳データに対して、重みの計算を実行するかどうかを指定します。
        メニュー名 メニュー上に表示する際のラベルを指定します。(車輌 => 保有車輌)

        コード制限
        対象限定
        日付連携 (イベントのみ)投稿日時と連動するかをチェックします。
        チェックをすると保存時に日付の項目のいづれかでカレンダーへの登録を行えるようになります。
        ステート 状態判定をおこなう「ステート」機能を有効にすることができます。
        ステート下 本台帳に定義されている「項目」が並びます。
        重みの処理を記述する際に判定文などの条件にクリックすると項目名が複写されます。

        ■ 設定キー表(重み)■
        キーの代わりにエイリアスでも指定できます。
        キー名 エイリアス(日本語表記) 説明・注意
        1.キー名
        type タイプ/種類/種別
        2.設定値
        stage ステージ type に指定します。データの状態を定義します。
        データの状態ごとに処理を区分けして発動させたい場合に定義します。
        ステージはキーにより区別され該当条件に一致した場合にのみ処理が実行されます。
        return {
        タイプ: "ステージ",
        キー: "下書き",
        該当: ()=>toNum(value('joutai')) == 0, // 「下書き」として認識される条件
        達成: ()=>toNum(value('joutai')) > 0,
        読込前: {
        処理: ()=>{
        // (1) 申請日の初期値設定
        if(value('shinsei_bi') == NULL) set('shinsei_bi', date(NULL, TRUE));
         }
        },......(つづく)
        binding 追加動作 type に指定します。データの状態に拘らず行う動作を定義します。
        return {
        タイプ: "追加動作",
        読込後: {
        対象: 'btn_check',
        操作: 'クリック',
        処理: ()=>alert('実装OK!')
        },
        複製後: {
        処理: ()=>{ debugger; set('joutai', "000") }
        }
        }
        score 評点/評価/重み type に指定します。データを評価し、スコアリングする場合に設定します。
        1.キー名
        key キー
        2.設定値
        any 任意のキー type にステージ(stage)を指定した場合にステージを区別するキー(key) として指定します。
        ステージの中で一意になるように指定してください。

        ■ 関数表(重み)■
        関数 利用例 説明・注意
        ※全体を通しての注意:
        (1)関数名、変数名は半角英数字です。大文字、小文字の区別があります。
        (2)シングルクゥォテーション(')/ダブルクゥォテーション(")に動きの違いは出ません。
        (3)アラートで利用できる関数はほぼすべて同等に利用できます。
        1.ステート(状態判定)
        cond0 未達 データがこのステージに入る前の状態を返します。
        ※タイプ(type)= ステージ(stage)の場合のみに利用
        ※記述が複数行に渡場合は、必ず return してください。

        未達: ()=>value('joutai') == NULL, // => 状態がNULLである(1行書き)
        未達: ()=>{
        return value('joutai') == NULL; // => 状態がNULLである(return あり)
        }
        cond1 該当 データがこのステージに入る状態を返します。
        ※タイプ(type)= ステージ(stage)の場合のみに利用
        ※記述が複数行に渡場合は、必ず return してください。

        該当: ()=>toNum(value('joutai')) == 1,  // => 数値化した状態が1である(1行書き)
        該当: ()=>{
        return toNum(value('joutai')) == 1; // => 数値化した状態が1である(return あり)
        }
        cond2 達成 データがこのステージでの処理が完了している状態を返します。
        ※タイプ(type)= ステージ(stage)の場合のみに利用
        ※記述が複数行に渡場合は、必ず return してください。

        達成: ()=>toNum(value('joutai')) > 1, // => 数値化した状態が1 より大きい(1行書き)
        達成: ()=>{
        return toNum(value('joutai')) > 1; // => 数値化した状態が1 より大きい(return あり)
        }
        2.タイミング(イベント発火時点)
        beforeGet 表示前/読込前/取得前 データがデータベースより取得され、画面に設定される前のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          読込前: {
        処理: ()=>{
        // (1) 申請日の初期値設定
        if(value('shinsei_bi') == NULL) set('shinsei_bi', date(NULL, TRUE));
         }
        },
        複数の処理を行いたい場合は、配列で指定します。
          読込前: [{ 
        // 既に別の人によって承認/却下されている場合
        条件: ()=>value('inv_flg'),
        処理: ()=>alert('この承認イベントは有効ではありません')
        }, {
        // 承認者ではない
        条件: ()=>value("kanri_cd").split("-")[1] != fn.mem("div.shain.cd"),
        処理: ()=>{
        alert('この承認イベントの承認者ではないため処理できません。');
        debugger;
        item('btn_shonin').hide();
        item('btn_revert').hide();
        }
        }, {
        // 画面ロック
        条件: ()=>TRUE,
        処理: ()=>{
        debugger;
        eachElem('全て:無効');
        }
        }], // 読込前に複数の条件+処理を行う場合
        beforePut 保存前 データがデータベースに保存される前のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          保存前: {
        条件: ()=>toNum(value('joutai')) == 1,
        処理: ()=>{
        // (1) 最終申請日時の設定(date() は数値を返してくれる) => アラートにて承認イベントを生成
        set('riyu_10', ""), set('riyu_100', ""), set('shinsei_date', date())
        }
        }
        beforeDel 削除前 データがデータベースから削除される前のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          削除前: {
        処理: ()=>{ alert("関連するイベントデータも削除されます。"); }
        }
        beforeCopy 複製前/コピー前 データが複製される前のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          複製前: {
        処理: ()=>{
        debugger;
        mem('前の状態', value('joutai')); // 複製前の状態を変数に退避しておく
        }
        }
        beforeSche スケジュール保存前 イベントデータから、スケジュールの保存がされる前のタイミング
        ※分析データとイベント定義 でのみ有効。
        ※記述が複数行に渡場合は、必ず return してください。

          スケジュール保存前: {
        処理: ()=>{
        debugger;
        mem('前の状態', value('joutai')); // 複製前の状態を変数に退避しておく
        }
        }
        beforePrint 出力前/印刷前/帳票前 データが印刷される前のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          印刷前: {
        処理: ()=>{
        debugger;
        mem('全ページ数', 4); // 変数に設定しておく
        }
        }
        onGet 表示後/読込後/取得後 データがデータベースから読み込まれ、画面に設定された後のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          読込後: {
        処理: ()=>{
        alert('現在は <下書き> 状態です。N');
        // (1) 候補を「下書」「申請」のみにする
        item('joutai').filterItem([ "000", "001" ]);
        eachElem('差戻理由:無効');
        }
        },
        onPut 保存後 データがデータベースに保存された後のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          保存後: {
        処理: ()=>{
        alert('データが保存されました。');
        }
        },
        onDel 削除後 データがデータベースから削除された後のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          削除後: {
        処理: ()=>{
        alert('データが削除されました。');
        }
        },
        onCopy 複製後 データが複製された後のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          複製後: {
        処理: ()=>{ debugger; set('joutai', "000") }
        }
        onPrint 出力後/印刷後/帳票後 データが印刷された後のタイミング
        ※記述が複数行に渡場合は、必ず return してください。

          印刷後: {
        処理: ()=>{
        alert('データが印刷されました。');
        }
        },
        3.ステージタイミング(状態変化時発火)
        4.パラメータ(オプション)
        5.画面操作
        eachElem eachElem('joutai') 表示中の画面の全要素の状態操作に用います
        eachElem('全て:無効'); // => 全て入力不可にします。(閲覧モードの演出)
        eachElem('差戻し理由、承認日:無効'); // => 特定の項目を入力不可にする場合は、項目名を「、」で区切り、「:(コロン)無効」とします。
        eachDefs eachDefs('nm') 固定要素の状態操作に用います
        eachDefs('全て:無効'); // => 固定要素の入力を不可にします。
        eachBtns eachBtns('更新') ボタンの状態操作に用います
        eachBtns('更新、履歴表示、印刷:無効'); // => 更新、履歴表示および印刷ボタンの無効化
        item item('joutai')
        定義した管理項目の要素を取得します
        item('joutai').filterItem([ "001" ]); // => 選択要素 joutai の選択可能値を「001」のみにします。
        item('input_0001').data(); // => 管理項目 input_0001 の値の取得(value('input_0001') と同じ値)
        item('input_0001').on('change', ... ); // => 管理項目 input_0001 の変化時の挙動実装
        基本関数は $S.BOOK ドキュメント を参照ください。
        利用可能なオペレーションについては都度お問い合わせください。
      • 重みの設定例

        ここでは重み設定のひとつの例として、「物品購入申請・承認フロー」をイメージしたサンプルを記載します。
        【 イベント台帳 】


        ■ 物品購入申請(ステート利用)
         物品のマトリックスと承認者を選ぶ申請者用のイベント台帳
        <定義>

        <画面>

        ■ 物品購入承認(ステート利用)
         物品購入申請データへのリンクと「承認」、「差戻」のボタンを持つ承認者用のイベント台帳
        <定義>

        <画面>


        【 台帳 】


        ■ 申請者・承認者(ステート利用)
         社員マスタと連動し、申請者と承認者を定義する台帳
        <定義:共通>

        <定義:個別>

        ■ 社内ワークフロー
         イベントデータのアラート設定での抽出のためのダミーデータが登録されている台帳(使ってない?)
        <定義:共通>
        なし

        【 重み設定 】
        ■ 物品購入申請:<タイプ:ステージ、キー:下書き>
        return {
        タイプ: "ステージ",
        キー: "下書き",
        該当: ()=>toNum(value('joutai')) == 0, // 「下書き」として認識される条件
        達成: ()=>toNum(value('joutai')) > 0,
        読込前: {
        処理: ()=>{
        // (1) 申請日の初期値設定
        if(value('shinsei_bi') == NULL) set('shinsei_bi', date(NULL, TRUE));
         }
        },
        読込後: {
        処理: ()=>{
        alert('現在は <下書き> 状態です。N');
        // (1) 候補を「下書」「申請」のみにする
        item('joutai').filterItem([ "000", "001" ]);
        }
        },
        保存前: {
        条件: ()=>toNum(value('joutai')) == 1,
        処理: ()=>{
        // (1) 最終申請日時の設定(date() は数値を返してくれる) => アラートにて承認イベントを生成
        set('riyu_10', ""), set('riyu_100', ""), set('shinsei_date', date())
        }
        }
        };

        ■ 物品購入申請:<タイプ:ステージ、キー:申請>
        return {
        タイプ: "ステージ",
        キー: "申請",
        該当: ()=>toNum(value('joutai')) == 1,
        達成: ()=>toNum(value('joutai')) > 1,
        読込後: {
        処理: [ ()=>alert('現在は <申請> 状態です。X'),
        ()=>{
        // 配列を使った処理試験
        // (1) 候補を「申請」のみにする
        item('joutai').filterItem([ "001" ]); },
        ()=>{
        /* 申請待のため、削除以外できません */
        // (1) 時間の更新させない
        eachElem('全て:無効');
        // (2) 削除のみにする
        eachBtns('更新、履歴表示、印刷:無効');
        } ]
        },
        削除後: {
        処理: ()=>{ /*申請日の削除と、承認イベントの削除*/ }
        }
        };
      • コマンド実行

        INFORAP では SSSシステムに標準実装された「コマンド実行」機能を活用し、アラートの設定、重みの設定を簡易化する他、運用補助機能を付加することができます。
        特に便利に利用できる関数として以下のコマンド実行独自関数を提供しています。このほか、タイプを「ステート」とすることで、アラート設定と同じ関数が基本的に利用可能です。
        キーワード表(コマンド実行)
        関数 利用例 説明・注意
        ※全体を通しての注意:
        (1)関数名、変数名は半角英数字です。大文字、小文字の区別があります。
        (2)シングルクゥォテーション(')/ダブルクゥォテーション(")に動きの違いは出ません。
        (3)アラート、重みの実装にて「rc」関数経由で呼び出すことができます。
        1.関数
        rc rc('テキストの編集') コマンド実行の命令を再起的に呼び出します
        getFileURL getFileURL('集計データ.txt') コマンド実行に埋め込んだファイルURL を取得します
        getTextFile getTextFile('集計データ.txt') コマンド実行に埋め込んだファイルの中身を取得します
        getTextArray getTextArray('集計データ.txt'') コマンド実行に埋め込んだファイルの中身を配列取得します
        saveTextAs saveTextAs('修正データ.csv', ["a", "b", "c"], { upload: false }) 与えたデータをダウンロードします。upload を true にしてクラウドに保存することもできます。
        stockTextAs stockTextAs('フォルダ/修正データ.csv', ["a", "b", "c"]) 与えたデータを zip 形式で貯めます。
        saveZipAs saveZipAs('修正データ.zip', { upload: false }) stockTextAs で貯めたデータをダウンロードします。upload を true にしてクラウドに保存することもできます。
        2.変数
        NULL NULL == null null と同値です
        TRUE TRUE == true true と同値です
        FALSE FALSE == false false と同値です
        UNDEF UNDEF == undefined undefined と同値です
        f f.each 基本関数群 foonyah と同値です(名前空間呼び出し)
        fn fn.isFunction アプリケーションの共通関数、AppSpace.fn と同値です(名前空間呼び出し)
        fin fin('C.system') 固定値を取得する関数、fn.fin と同値です(名前空間呼び出し)
        mem mem('div.kaisha') 環境変数を取得する関数、fn.mem と同値です(名前空間呼び出し)
        sync sync.newDate() 同期関数をまとめた、fn.sync と同値です(名前空間呼び出し)
        async async.getDirectExec 非同期関数をまとめた、fn.async と同値です(名前空間呼び出し)
        DAO DAO.talk / dao(DAO.talk のエイリアス) fn.DAO と同値です(名前空間呼び出し)