2017-10-19 8 views
0

특정 테이블의 범위를 publicOnServer으로 설정할 수 없습니다. 내 model.js에서 테이블의 범위를 설정합니다. 범위 변경은 My 원격 모델 (4D 데이터베이스)을 Wakanda에서 볼 때 볼 수 있습니다. 변경 후 테이블의 범위가 업데이트됩니다.Wakanda 2.x에서 특정 테이블의 범위를 publicOnServer로 설정할 수 없습니다.

일부 테이블의 경우 범위를 설정하고 클라이언트 측에서 모든 테이블에 대해 모든 종류의 쿼리를 수행하면 브라우저의 콘솔에 오류가 채워지고 쿼리가 실패합니다. 효과적으로 model.js의 특정 테이블의 범위를 설정하면 관계없는 테이블조차도 쿼리가 중단됩니다.

하나의 차이점은 범위 변경이 작동하는 테이블과 관계형 속성이있는 테이블이 다르다는 점입니다. 이러한 테이블의 범위를 설정하면 일관되게 쿼리 기능이 중단되고 관계형 속성이없는 테이블의 설정 범위가 일관되게 올바르게 작동합니다. 이거 버그 야?

크롬 콘솔 출력 : model.js에서 ERROR Error: Uncaught (in promise): Error: Needed Contractor dataClass is not present on catalog

라인 : model.Contractor.properties.scope="publicOnServer";

계약자는 원격 모델의 테이블과는 관계 특성을가집니다.

답변

1

솔루션을 실행하고 프로젝트 모델을 기반으로했습니다. 이것은 표준 동작이며 오류가 예상됩니다. "PublicOnServer"로 설정된 모든 데이터 클래스는 클라이언트 측에서 "제거됨"또는 "숨김"으로 간주됩니다. 이 클래스를 참조하는 다른 클래스의 관계 속성은 존재하지 않는 클래스를 참조하는 것처럼 오류로 간주됩니다. Books 클래스가 다른 클래스와 관련이 없으므로 Books 클래스가 "PublicOnServer"로 설정된 경우 오류가 표시되지 않습니다.

당신은 오류 스택의 첫 번째 줄을 클릭하면 : wakanda - client.no-promise.js 라인 :

//Check if we have all needed dataClasses on the catalog 
for (var _e = 0, _f = _this.seenDataClasses; _e < _f.length; _e++) { 
    var dcName = _f[_e]; 
    if (!catalog[dcName]) { 
     throw new Error('Needed ' + dcName + ' dataClass is not present on catalog'); 
    } 
} 

라인 1775에서이 기능을 찾을 수 : 1880은 다음과 같은 코드를 찾을 것 데이터 클래스가 필요한 seenDataClasses라는 배열을 비교하는 neededDataClass().

사실 와카 다 클라이언트 프레임 워크는 모든 공용 데이터 클래스를 즉시 검사하여 비공개 데이터 클래스를 참조하는 관계형 특성이 있는지 여부를 검사합니다. 이렇게하면 이후 쿼리에서 향후 문제를 피할 수 있습니다.

"회사 테이블에 대한 액세스를 제한하지 않고 솔루션을 시작하면 콘솔의 오류가 사라집니다." Wakanda 클라이언트가 잘못된 관계 속성이 들어있는 Client 테이블을 쿼리하지 못하도록 약속했다. 난 당신의 코드에서 캐치()를 추가하는 것이 좋습니다 것은 그것을 처리하기 :

wakanda.getCatalog() 
    .then((ds) => { 
     this.ds = ds; 
    }).catch(error=>{ 
     //handle the error 
}); 

이전 답변 :

내 이해에서

때 "publicOnServer로 설정 쿼리하는 테이블의 관련 테이블 "를 사용하면 관련 테이블이 쿼리 문자열이나 쿼리 결과에서 참조되지 않는 한 쿼리가 작동합니다.

모델 및 쿼리 문자열을 포함하는 코드의 재현 가능한 예를 제공 할 수 있습니까?

+0

예 - 아래 링크를 클릭하십시오. 사실 wakanda 카탈로그를받는 것은 오류를 발생시킵니다. 심지어 쿼리 할 필요도 없습니다. https://www.dropbox.com/s/85pr5svswpi6m07/TableScope.zip?dl = 0 – NAMS

+0

고맙습니다. 이 동작은 Wakanda 1.x와 다릅니다. 그래서 놀랐습니다. 나는 모든 테이블을 public으로두고, 그에 따라 모든 테이블에 대한 제한 (etc) 메소드를 작성하는 해결 방법을 생각했다. – NAMS

+0

다른 권한을 가진 두 개 이상의 사용자 그룹이있는 경우 권한 제어를 사용하고 쿼리를 제한하는 IMO가 더 나은 솔루션 일 수 있습니다. 그것을 다루는 [KB에 대한 2016 년 정상 회의] (http://kb.4d.com/assetid=77627)가있다. 대부분의 서버 구현은 여전히 ​​V2에 적용됩니다. –