acumatica
Acumatica BQL 참조
수색…
BQL 구문 분석 및 검증
모든 Acumatica 응용 프로그램 개발자는 BQL 코드 작성에 많은 시간을 할애합니다. 동시에 모든 사람들이 BQL 유형이 어떻게 작동하는지에 대한 기본 세부 사항을 알지 못합니다.
BQL의 핵심은 IBqlCreator
인터페이스에 의해 선언 된 Parse()
와 Verify()
두 가지 주요 메서드입니다. Where<>
, And<>
, Or<>
등 일반적으로 사용되는 대부분의 BQL 유형은이 인터페이스에서 파생됩니다.
이 방법들이 역사적으로 붙어있는 이름은 그다지 설명이 쉽지 않다는 것을 인정해야합니다. 대체로 더 나은 대안 이름은 PrepareCommandText
및 Evaluate
입니다.
파싱
public void Parse(
PXGraph graph,
List<IBqlParameter> pars,
List<Type> tables,
List<Type> fields,
List<IBqlSortColumn> sortColumns,
StringBuilder text,
BqlCommand.Selection selection)
Parse()
의 유일한 목적은 BQL을 SQL 명령으로 변환하여 DBMS로 전송하는 것입니다. 따라서이 메서드는 현재 생성 된 SQL 명령을 나타내는 StringBuilder
매개 변수를 받아들이며 BQL 작성자는이 SQL 명령을 사용하여 자체의 SQL 텍스트 표현을 추가합니다.
예를 들어, And<>
술어의 Parse()
메소드는 " AND "
를 명령 텍스트에 추가하고 모든 중첩 된 BQL 작성자의 변환을 반복적으로 요청합니다.
특히 And<ARRegister.docType, Equal<ARDocType.invoice>>
는 "AND "ARRegister.DocType = 'AR'"
됩니다.
확인
public void Verify(
PXCache cache,
object item,
List<object> pars,
ref bool? result,
ref object value)
Parse()
와 달리 Verify()
는 순수하게 응용 프로그램 수준에서 작동합니다.
주어진 레코드 (예 : ARRegister
오브젝트)는 공식 계산 및 조건 평가를 포함하여 레코드를 표현하는 데 사용될 수 있습니다.
result
매개 변수는 부울 조건 평가 결과를 저장하는 데 사용됩니다. Where<>
와 같은 술어 BQL 작성자가 주로 사용합니다.
value
매개 변수는 표현식 계산 결과를 저장하는 데 사용됩니다. 예를 들어, BQL Constant<string>
의 value
은 해당 상수의 문자열 표현입니다.
대부분의 경우 BQL 작성자는 결과 또는 값에 영향을 미치지 만 거의 그렇지 않습니다.
Verify()
메서드의 주목할만한 사용법은 정적 BqlCommand.Meet()
메서드에 있습니다. PXCache
가 해당 항목이 BQL 명령을 충족하는지 확인하는 데 사용됩니다.
public bool Meet(PXCache cache, object item, params object[] parameters)
{
List<object> pars = new List<object>(parameters);
bool? result = null;
object value = null;
try {
Verify(cache, item, pars, ref result, ref value);
}
catch (SystemException ex) {
throw new PXException(String.Format("BQL verification failed! {0}", this.ToString()), ex);
}
return result == null || result == true;
}
결론
BQL 작성자의 진정한 힘과 아름다움은 데이터베이스와 응용 프로그램 수준에서 대부분을 사용할 수 있다는 것입니다. Acumatica의 캐시 병합 메커니즘을 사용하고 코드 재사용을위한 좋은 기회를 제공합니다.
예를 들어 데이터베이스에서 레코드를 선택할 때 BQL 명령의 Where<>
절은 다음과 같습니다.
- 명령 준비 중
Parse()
를 사용하여 SQL 텍스트로 변환합니다. - 제공 할 것입니다
Verify()
항목이 이미 캐시에 거주하는 결정하기 위해 병합 캐시시Meet()
Where<>
결과 집합에 캐시 된 항목을 포함하도록 절 조건을.