0

機能するもの:

Breeze では、次のクエリを実行できます。

Q1

breeze.EntityQuery.from('accounts').where('id', 'eq', account_id)

このリクエストは次のようになります。

R1

http://localhost:8000/odata/findash.svc/accounts
    ?$filter=id eq 'NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx'

これは、トランザクション プロパティが次のようになっていることを除いて、正しいデータを返します。

transactions: {
    __deferred: {
        uri: "http://localhost:8000/odata/findash.svc/accounts('NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx')/transactions"
    }
}

ブラウザで transactions.__deferred.uri のURIを叩いてみました

R1.1

http://localhost:8000/odata/findash.svc/
    accounts('NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx')/transactions

そして、それは私が期待するトランザクションで応答します.

機能しないもの:

Breeze を使用してそのトランザクション リストを取得するために、上記のクエリを次のように展開句で変更します。

Q2

breeze.EntityQuery.from('accounts')
    .where('id', 'eq', account_id).expand('transactions')

このリクエストは次のようになります。

R2

http://localhost:8000/odata/findash.svc/accounts
    ?$filter=id eq 'NTE5M2UxMzQzMmY3MDAxYzE1MDAwMDAx'&$expand=transactions

これは 500 エラーを生成します。

この Breeze クエリも試しました。

Q3

breeze.EntityQuery.from('transactions')
    .expand('account').where('account.id', 'eq', account_id)

これも 500 エラーを生成します。

知っておくべきこと:

Node+MongoDB+JayData で構築された OData サービスに飛び込む前に、Breeze を除外しようとしています。

上記の R1 と R2 の唯一の違いは、 の追加です&$expand=transactions。R1 は機能し、R2 は 500 エラーになります。R2 が有効な OData 要求である場合、JayData の実装にトラブルシューティングの努力を集中する必要があります。私にとっての問題は、Breeze、OData、および JayData を初めて使用することです。そのため、検索を絞り込むのに苦労しています。

参考までに、私の JayData context.js は次のとおりです。

$data.Class.define("$findash.Types.Account", $data.Entity, null, {
    id: { type: "id", key: true, computed: true },
    name: { type: "string" },
    status: { type: "string" },
    notes: { type: "string" },
    transactions: { type: "Array", elementType: "$findash.Types.Transaction", inverseProperty: "account" }
}, null);
$data.Class.define("$findash.Types.Transaction", $data.Entity, null, {
    id: { type: "id", key: true, computed: true },
    account: { type: "$findash.Types.Account", inverseProperty: "transactions" },
    payee: { type: "string" },
    memo: { type: "string" },
    amount: { type: "int" }
}, null);
$data.Class.define("$findash.Types.FinanceContext", $data.EntityContext, null, {
    accounts: { type: $data.EntitySet, elementType: $findash.Types.Account },
    transactions: { type: $data.EntitySet, elementType: $findash.Types.Transaction }
}, null);
$findash.Types.FinanceContext.generateTestData = function (context, callBack) {
    context.accounts.add(new $findash.Types.Account({
        name: 'Checking',
        status: 'Active',
        notes: '<p>Notes lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus mauris quam, elementum in tincidunt id, mollis eget urna. Nulla fermentum est id risus venenatis malesuada. Quisque sed ipsum at nisl malesuada dictum vitae nec libero.</p><p>Aenean consectetur, purus eu semper feugiat, purus lacus semper nibh, at luctus ipsum metus non justo. Donec justo mi, rutrum a scelerisque sed, feugiat vel quam. Etiam justo nisi, vehicula ac congue vitae, ultricies non quam. Aliquam a velit in mauris luctus elementum. Praesent sollicitudin quam mattis velit sodales vitae feugiat felis volutpat.</p>',
        transactions: [
            new $findash.Types.Transaction({
                payee: 'Shell Gas',
                memo: 'Checkcard Transaction',
                amount: -3500
            }),
            new $findash.Types.Transaction({
                payee: 'Kroger',
                memo: 'Checkcard Transaction',
                amount: -9000
            }),
            new $findash.Types.Transaction({
                payee: 'Papa Murphy\'s',
                memo: 'Checkcard Transaction',
                amount: -1500
            })
        ]
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Savings'
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Power Company'
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Gas Company'
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Cable Company'
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Water Company'
    }));
    context.accounts.add(new $findash.Types.Account({
        name: 'Trash Service'
    }));
    context.saveChanges(function (count) {
        if (callBack) {
            callBack(count);
        }
    });
};
module.exports = exports = $findash.Types.FinanceContext;
4

1 に答える 1