| ダッシュボードを作成するには |  |
| ダッシュボードを作成するには、以下の作業が必要です。 セッション (ttadv2500m000) セッションでダッシュボードセッションとそのフォームを作成する。ダッシュボードセッションは、選択するエンティティのメインテーブルを使用します。 ダッシュボードセッションの UI スクリプトを作成する。UI スクリプトは、選択、計算、詳細セッションの開始など、ほとんどの処理を制御します。 詳細セッションを作成する。これにより、ダッシュボードユーザはダッシュボードに表示された概要の詳細にドリルダウンできます。 重要 以下のセクションでは、ダッシュボードを作成するために必要なセッションについて説明します。ただし、これらのセッションの詳細についてすべて説明しているわけではありません。セッションの詳細については、Infor Web Helpを参照してください。 セッションを作成するには ダッシュボードセッションは、選択するエンティティのメインテーブルを使用します。このセッションは概要セッションに似ていますが、 概要セッションは通常、ひとつの同期ダイアログを持ち、その詳細セッションを同期ダイアログとします。ダッシュボードセッションは、複数の詳細セッションと同期し、それらの同期をプログラムスクリプト内で管理します。 例- 品目ダッシュボード 品目をメインエンティティとして使用するダッシュボードセッションを作成する必要があります。品目を選択すると、ダッシュボードに品目、品目の記述、購買価格、手持在庫、および発注済在庫が表示されます。購買価格の隣に前回の購買価格が算出されます。手持在庫の隣に在庫の価値 (仕入値)が表示されます。発注済在庫の隣に未納入オーダの前回のオーダ日が表示されます。伝票ボタンを押すと、品目の購買オーダを表示できます。 品目のダッシュボードセッションは品目テーブルを使用して作成します。セッションは表示セッションタイプです。 セッションのプロパティは、下図を参照してください。 作成セッション フォームを作成するには ダッシュボードセッションのフォームには、表示フィールドとグリッドの 2 つの領域があります。 ダッシュボードセッションの領域 表示フィールド領域には、テーブルフィールドではなく、変数として宣言されているフィールドが含まれています。必須ではありませんが、これらのフィールドは通常 1 つまたは複数のグループで定義されています。 表示領域にはチェックボックスとボタンがあります。チェックボックスは、セッションのプログラムスクリプトで定義される変数です。チェックボックスにはラベルがありません。ボタンはフィールドレベルのフォームコマンドで、チェックボックスにリンクしています。フォームコマンドはラベルを使用して、ボタンの名称を提供します。 表示フィールド領域にはグループボックスとフィールドボタンが含まれているので、フォームの [セッションのプロパティ] で詳細表示を選択する必要があります。 グリッドは通常、別のグループで定義されます。グリッドにはテーブルフィールドが含まれており、グリッド内のフィールド数が少数のキーフィールドに限られている場合もあります。新しいグループは必須ではありませんが、2 つの領域を分離するのに役立ちます。 例- 品目ダッシュボード 品目のダッシュボードセッションは品目テーブルを使用して作成します。セッションは表示セッションタイプです。 ダッシュボードフォームエディタ ダイナミックフォームエディタで、セッションのプロパティ、フィールドのプロパティ、フォームコマンドを指定する必要があります。 セッションのプロパティダイアログボックスで以下のプロパティを指定します。
フィールド | 値
概要セッション | あり
詳細表示 | あり
残りのフィールド | なし
表示領域のフィールドは、セッションのプログラムスクリプトで定義されている変数です (sel.item など)。その他の例は、このセクションのサンプルスクリプトを参照してください。フィールドのプロパティダイアログボックスの位置タブで、以下のプロパティを指定します。
フィールド | 値
概要セッション | あり
表示フィールド | あり
残りのフィールド | なし/空
文書チェックボックスフィールドのプロパティにはラベルコードがありません。各文書チェックボックスの横にあるボタンは、フィールドレベルのフォームコマンドとして定義され、対応するチェックボックスフィールドにリンクしています。このボタンは、プログラムスクリプトで定義される関数を実行します。 ｢sel.orders｣ チェックボックスにリンクしているフィールドレベルのフォームコマンド ダイナミックフォームエディタの概要セッションの表示コマンドからセッションを開始できます。 概要セッションの表示結果 プログラムスクリプトを作成するには プログラムスクリプトは、詳細セッションの選択、計算、開始など、ほとんどの処理を制御します。 ユーザが行を選択したときに起動される処理は、mark.occur イベントでプログラミングします。このイベントは、選択した値の情報を収集し、フォームコマンドを有効にします。詳細セッションの再同期も行います。 詳細セッションはフォームコマンドから開始します。スクリプトは同期を制御するため、フォームコマンドでスクリプトの関数を呼び出すことを推奨します。この関数は extern 関数として定義します。 例- 品目ダッシュボード 品目ダッシュボードでは以下のことが必要です。 フォーム変数を宣言する フォーム変数の計算に使用されるテーブルを宣言する (ライブラリがこれらの値を計算する場合を除く) mark.occur イベントの処理を含む フィールドレベルのフォームコマンドで呼び出される関数の処理を含む フィールドレベルのフォームコマンドで呼び出される関数で同期した子プロセスを開始する。start.synchronized.child 関数を使用する 下図の例を参照してください。
    |*********************************************************
    |* cxoes0520 0 VRC B61U a dv00
    |* Items Dashboard
    |* Development User
    |* 2005-02-10
    |*********************************************************
    |* Main table cxoes020 Items, Form Type 1
    |*********************************************************

    |****************************** declaration section ******
    declaration:

    table tcxoes020 | Items
    table tcxoes022 | PO Headers
    table tcxoes023 | PO Lines

    extern domain cxitem sel.item
    extern domain cxdscr sel.dscr
    extern domain cxprice sel.ppri, sel.lopp, sel.sval
    extern domain cxquan sel.stoh, sel.stoo
    extern domain cxdate sel.lodt
    extern domain cxyeno sel.orders

    long orders.session.child.id, dummy.ret

    |****************************** program section **********
    |****************************** group section ************
    |****************************** choice section ***********
    choice.mark.occur:
    after.choice:
    if number.of.marks = 1 then
    |use a pre-defined var to test that only
    |one item is selected from the list
    fill.sel.values()
    sync.open.session()
    else
    clear.sel.values()
    endif
    | need to display values because they are not
    | displayed automatically
    display.all()

    |****************************** function section *********

    functions:
    function fill.sel.values()
    {
    sel.item = cxoes020.item
    sel.dscr = cxoes020.dscr
    sel.stoh = cxoes020.stoh
    sel.stoo = cxoes020.stoo
    sel.ppri = cxoes020.ppri
    sel.sval = sel.stoh * sel.ppri
    get.last.order.info.for.item()
    }

    function clear.sel.values()
    {
    sel.item = " "
    sel.dscr = " "
    sel.ppri = 0.0
    sel.lopp = 0.0
    sel.sval = 0.0
    sel.stoh = 0
    sel.stoo = 0
    sel.lodt = 0
    sel.orders = cxyeno.no
    }

    function get.last.order.info.for.item()
    {
    |* last purchase price is latest order, no matter of status
    select cxoes022.*, cxoes023.*
    from cxoes022, cxoes023
    where cxoes023.orno refers to cxoes022
    and cxoes023.item = :sel.item
    order by cxoes022.odat desc
    as set with 1 rows
    selectdo
    sel.lopp = cxoes023.ppri
    sel.orders = cxyeno.yes
    selectempty
    sel.lopp = 0
    sel.orders = cxyeno.no
    endselect

    |* last purchase order date is latest open order
    |* stat <> delivered

    select cxoes022.*, cxoes023.*
    from cxoes022, cxoes023
    where cxoes023.orno refers to cxoes022
    and cxoes023.item = :sel.item
    and cxoes022.stat <> cxstat.delivered
    order by cxoes022.odat desc
    as set with 1 rows
    selectdo
    sel.lodt = cxoes022.odat
    selectempty
    sel.lodt = 0
    endselect
    }

    function extern exec.orders()
    {
    if sel.orders = cxyeno.yes then
    | document is checked, start the child process
    if orders.session.child.id then
    | already started the session, so re-use it
    | but refresh with new item values
    | if closed, will set child.id to 0
    dummy.ret = synchronize.with.child(orders.session.child.id)
    endif
    if not orders.session.child.id then
    | need to start the session
    session.zoomindex = 1
    | if there is a alt key by item, we could use it
    orders.session.child.id = start.synchronized.child(
    "cxoes0523m100",
    "cxoes020.item",
    "cxoes020.item")
    |* start orders by item. Send parent var of cxoes023.item,
    |* and child var of cxoes020 for query extension to
    |* work in child session.
    endif
    endif
    }

    function sync.open.session()
    {
    | have the dashboard sync the open sessions when a new
    | item value is selected
    if orders.session.child.id then
    | already started the session, so re-use it
    | but refresh with new item values
    dummy.ret = synchronize.with.child(orders.session.child.id)
    endif
    }
このスクリプトをコンパイルすると、セッションで値が計算されます。 品目ダッシュボードと計算された値 別の品目を選択して、その品目の値を表示します。 品目ダッシュボード 詳細セッションを作成するには 詳細セッションを使用すると、ダッシュボードユーザはダッシュボードに表示された概要の詳細にドリルダウンできます。通常、詳細セッションはダッシュボードセッションから値をインポートして開始するか、表示をそれらのレコードに限定します。これらの値をインポートするには、詳細セッションのプログラムスクリプトを変更し、場合によっては必要な行だけが表示されるように問合わせを拡張できます。 例- 品目ダッシュボード 品目テーブルを使用して品目ダッシュボードセッションを作成しました。品目のオーダラインは詳細セッションに表示されるはずです。購買オーダライン (cxoes0523m100) セッションでは、購買オーダライン (cxoes023) テーブルを使用して購買オーダラインを表示します。品目フィールドが表示フィールドになるように、このセッションのフォームを編集します。 品目別購買フォーム プログラムスクリプトは before.program セクションで問合せを拡張します。フィルタを含んでいるフィールドにはインデックスがないため、問合せの拡張が必要です。
    |*************************************************************
    |* cxoes0523 0 VRC B61U a dv00
    |* Purchases by Item
    |* Development User
    |* 2005-01-07
    |*************************************************************
    |* Main table cxoes023 Purchase Order Lines, Form Type 1
    |*************************************************************

    |****************************** declaration section **********
    declaration:

    table tcxoes020 | Items
    table tcxoes023 | Purchase Order Lines

    |****************************** program section **************
    |* import item from calling session
    |* query extension to create filter

    before.program:
    query.extend.where(" cxoes023.item = :cxoes020.item")

    |****************************** group section ****************
このセッションがダッシュボードから開始されると、ダッシュボードで選択した品目のオーダのみが表示されます。 ダッシュボードと詳細セッション 別の品目を選択し、文書ボタンをクリックすると、詳細セッションが同期します。ダッシュボードセッションの品目は詳細セッションに送られ、その品目の購買オーダが表示されます。 ダッシュボードの品目の選択と詳細セッション 関連トピック ダッシュボード フォームを編集するには セッションを作成するには |