Breeze 설명서는 withParameters가 일반적으로 oData URI를 인식하지 않는 비.NET 백엔드 또는 서버와 함께 사용됨을 나타냅니다. .withParameters 때문에 where 절이 무시되고있을 가능성이 있습니까? clientID 필터를 사용하여 where 절을 다시 쓸 수 없습니까?
function getLocations(clientId) {
var self = this;
var p1 = new breeze.Predicate("activeStatus","==","0");
var p2 = new breeze.Predicate("clientId","==",clientId);
var p = p1.and(p2)
return EntityQuery.from('GetLocations')
.where(p)
.expand('LocationType')
.using(self.manager)
.execute()
.then(querySucceeded, this._queryFailed);
function querySucceeded(data) {
if (data.results.length > 1) {
locations = data.results;
}
return locations;
}
}
나는 이것을 먼저 시도 할 것이다. 백엔드에 따라 where 절을 withParameters 문에 넣으십시오. 그래도 작동하지 않으면 다른 옵션이있을 수 있습니다.
행운을 비네.
편집 :
이것은 내가 대해 쿼리 API를 엔드 포인트입니다 : 내가 사용하는 예
// qFilters is object. Values are arrays or strings, keys are id fields. SeasonClients might also be Clients
// Setup predicates
var p, p1;
// link up the predicates for passed data
for (var f in qFilters) {
var compareOp = Object.prototype.toString.call(qFilters[f]) === '[object Array]' ? 'in' : '==';
if (!qFilters[f] || (compareOp == 'in' && qFilters[f].length == 0)) continue;
fLC = f.toLowerCase();
if (fLC == "countryid") {
p1 = breeze.Predicate("District.Region.CountryId", compareOp, qFilters[f]);
} else if (fLC == "seasonid") {
p1 = breeze.Predicate("SeasonId", compareOp, qFilters[f]);
} else if (fLC == "districtid") {
p1 = breeze.Predicate("DistrictId", compareOp, qFilters[f]);
} else if (fLC == "siteid") {
p1 = breeze.Predicate("Group.Site.SiteId", compareOp, qFilters[f]);
} else if (fLC == "groupid") {
p1 = breeze.Predicate("GroupId", compareOp, qFilters[f]);
} else if (fLC == "clientid" || fLC == 'seasonclientid') {
p1 = breeze.Predicate("ClientId", compareOp, qFilters[f]);
}
// Setup predicates
if (p1) {
p = p ? p.and(p1) : p1;
}
}
// Requires [BreezeQueryable(MaxExpansionDepth = 10)] in controller
var qry = breeze.EntityQuery
.from("SeasonClients")
.expand("Client,Group.Site,Season,VSeasonClientCredit,District.Region.Country,Repayments.RepaymentType")
.orderBy("DistrictId,SeasonId,GroupId,ClientId");
// Add predicates to query, if any exist
if (p) qry = qry.where(p);
return qry;
: 여기
// GET: breeze/RST_ClientHistory/SeasonClients
[HttpGet]
[BreezeQueryable(MaxExpansionDepth = 10)]
public IQueryable<SeasonClient> SeasonClients()
{
return _contextProvider.Context.SeasonClients;
}
가 그리고 내가 사용하는 쿼리의 예입니다
그 이상의 시간이 필요합니다. 그러나 여기에 완전한 예제가 있는지 확인하고 싶습니다. .withParameters를 사용할 이유가 없음을 알 수 있습니다. 컨텍스트가 서버에 올바르게 설정되어있는 한, 체인 조건부 (where 절)는 잘 작동해야합니다. 이 경우 qFilters 객체에서 전달되는 항목에 따라 엄격한 동일성으로 필터링하는 AND 또는 컬렉션에서 IN으로 최대 10 개의 AND 절을 생성합니다.
백엔드 컨트롤러의 매개 변수를 없애고 매개 변수없는 메서드를 만들고 클라이언트 Id 일치를 쿼리의 추가 조건 자로 포함시켜야한다고 생각합니다.
이 방법을 사용하면 API 끝점을 훨씬 더 유연하게 만들 수 있습니다. ClientId와 관련이 없더라도 다양한 쿼리에 사용할 수 있습니다.
이 정보가 도움이됩니까? 질문이 더 있으시면 알려주세요.
어떤 백엔드를 사용하고 있습니까?요청이 어떻게 보이는지 보여 줄 수 있습니까 (URL 및 쿼리 문자열 매개 변수 포함)? 문제는 백엔드에서 where 절을 적용하는 방법을 모르는 것입니다. –