6

InventTable フォームを変更して、ユーザーがデフォルトの注文設定セットアップ フォームで「停止」ステータスに応じてアイテムをフィルター処理できるようにしました。2 つのチェックボックスの値に応じて、「購入可能な」アイテム、「販売可能な」アイテム、すべてのアイテム、または販売または購入がブロックされているアイテムのリストを取得します。

InventItemSalesSetup および InventItemPurchSetup データソースをコードに追加し、ユーザーがチェックボックスをオンまたはオフにしたときにそれらを有効または無効にします。

データソースの 1 つが無効になっている場合を除いて、すべて正常に動作します。その後、「高度なフィルター/並べ替え」オプションが機能しなくなります。「データ ソースが有効になっていません」というエラーが表示されます。

エラーは、SysQueryForm フォームのメソッド「saveCueEnabled」から発生します。呼び出し時:

if (!CueRun::canSaveQueryAsCue(this.args().caller()))
    return false;

どの呼び出し:

static boolean canSaveQueryAsCue(QueryRun qr)
{
    int numOfDataSources, i;
    QueryBuildDataSource ds;
    Query q;
    Common cursor;
    ;

    if (!qr)
    return false;

    q = qr.query();
    if (!q)
        return false;

    numOfDataSources = q.dataSourceCount();
    for(i = 1; i <= numOfDataSources; i++)
    {
        ds = q.dataSourceNo(i);
        if(ds.dynalinkCount() > 0)
            return false;

        // Check if it is temp
        cursor = qr.getNo(i);
        if (cursor.dataSource() && cursor.isTmp())
            return false;
    }

    return true;
}

クエリでデータ ソースの数を取得すると、「dataSourceCount」メソッドは無効なデータ ソースの数も返します。ループで無効なデータ ソースの QueryBuildDataSource を取得すると、空の DS が取得され、次の場合にクラッシュします。一時テーブルかどうかを確認します。

「saveCueEnabled」コードに追加の if を追加して問題を解決しましたが、このエラーを発生させずにデータ ソースを有効/無効にする方法があるのだろうかと思います。

私は自分自身をよく説明したことを願っています、ありがとう!

4

2 に答える 2

4

私が思いつく唯一の解決策は、canSaveQueryAsQue() を変更することです。

for ループに対するこの更新は簡単で、問題を解決するはずです。

for(i = 1; i <= numOfDataSources; i++)
{
    ds = q.dataSourceNo(i);
    if(ds && ds.dynalinkCount() > 0)
        return false;

    // Check if it is temp
    cursor = qr.getNo(i);
    if (cursor.dataSource() && cursor.isTmp())
        return false;
}

このコードはテストしていませんが、他の状況で同様のコードを使用しました。それが役立つことを願っています!

于 2013-01-25T20:29:39.343 に答える
0

提案された編集は実際には機能しません。これは、テスト時に「ds」変数がまだ「真実」であるためです。

以下はうまくいくようです:

for(i = 1; i <= numOfDataSources; i++)
{
    ds = q.dataSourceNo(i);
    if(ds.enabled() && ds.dynalinkCount() > 0)
        return false;

    // Check if it is temp
    if(ds.enabled())
    {
        cursor = qr.getNo(i);
        if (cursor.dataSource() && cursor.isTmp())
            return false;
    }
}

'.enabled()' プロパティをテストに追加すると、コードは要求に応じて無効なデータ ソースをスキップできます。

于 2013-04-18T16:49:18.080 に答える