Groovy 비즈니스 규칙 검증 이슈 해결

업그레이드된 Groovy 버전으로 마이그레이션할 때 해결해야 할 특정 이슈가 발생할 수 있습니다. Groovy 스크립트 검증기라는 프로그램은 조정해야 하는 규칙을 찾는 데 도움이 되며 이슈를 해결할 수 있도록 보고서를 제공합니다.

Note:

Groovy 스크립트 검증기는 애플리케이션에 사용자가 생성한 Groovy 비즈니스 규칙이 포함되어 있는 경우에만 사용할 수 있습니다. Groovy 스크립트 검증기 실행 방법에 대한 내용은 Groovy 스크립트 검증을 참조하십시오.

애플리케이션에서 Groovy 스크립트 검증기를 실행한 후 이 항목의 정보를 사용하여 검증 이슈를 해결합니다.

일반 가이드라인

  • def 대신 명시적 데이터 유형을 사용합니다. 예를 들어, 변수에 대해 명시적 데이터 유형(예: String, int, List<String> 또는 Map<String,Integer>)을 지정합니다.

    참고: def를 사용 중이고 검증 툴에 의해 플래그가 지정되지 않은 경우 그대로 유지할 수 있습니다.

  • 부동 소수점 수로 작업할 때 오류가 발생하면 부동 소수점 수가 "BigDecimal" 대신 "double"로 처리되도록 "d" 접미어를 사용합니다. 예: it.data = 1212121212.111d.

  • 이해할 수 없는 오류가 발생하면 스크립트의 첫번째 라인이 다음과 같이 표시되는지 확인합니다. /*RTPS: */

    RTP가 없는 경우에도 첫번째 라인인지 확인합니다.

    RTP가 있는 경우 /*RTPS: {selectedDepartment} {hireDate} {newEmployeeName} */와 같은 첫번째 라인에 추가합니다.

Note:

10월 업데이트(25.10)부터는 검증 프로세스의 일부로 사용되지 않는 날짜 함수를 해당하는 달력 함수로 더 이상 바꿀 필요가 없습니다. 이 문제는 해결될 예정이며 더 이상 이슈가 되지 않습니다. Date.format(), Date.getAt(), Date.parse() 등 메소드가 작동하며 더 이상 검증 오류를 표시하지 않습니다.

오류 및 제안된 수정

Table 3-2 오류 및 제안된 수정

오류 예제 코드 가능한 원인 가능한 해결 방법

해당 등록정보 없음: <groovy variable name> for class: groovy.lang.Binding

해당 없음

이는 RTPS 모델을 사용하지 않은 결과일 수 있으며, 변수는 대괄호 또는 중괄호를 통해 참조됩니다. 이로 인해 Groovy 엔진은 변수를 Groovy 표현식으로 평가하려고 시도합니다.

rtps.<variable name>을 사용하거나 중괄호 또는 대괄호 안의 표현식을 재확인합니다.

type java.lang.Object 유형의 값을 double 유형의 변수에 지정할 수 없습니다.

def data = []

double valFor = data[0]

목록 데이터를 명시적으로 입력하지 않아서 오류가 발생하므로 Groovy는 이를 List<Object>로 처리합니다. data[0]를 사용하여 목록에서 요소에 액세스하면 double 변수에 직접 지정할 수 없는 객체가 반환됩니다.

이 이슈를 해결하려면 다음 중 하나를 수행합니다.

  • 목록을 명시적으로 입력합니다.

    올바른 유형(예: List<Double>)으로 목록을 정의합니다.

    예를 들면 다음과 같습니다.

    List<Double> data = []

    double valFor010 = data[0]

  • 값을 double로 변환합니다.

    as double 구문을 사용하여 객체를 double 값으로 명시적으로 변환합니다.

    예를 들면 다음과 같습니다.

    def data = []

    double valFor010 = data[0] as double

java.lang.Object 유형의 값을 int 유형의 변수에 지정할 수 없습니다.

def finalList = mergeList.get(i)

int pmntfrequency = finalList.get(3)

지정되는 객체가 명시적으로 입력되거나 int로 변환되지 않기 때문에 오류가 발생합니다. 이 경우 finalList.get(3)int 변수에 직접 지정할 수 없는 객체를 반환합니다.

이 이슈를 해결하려면 값을 int로 변환합니다.

as int 구문을 사용하여 객체를 int 값으로 명시적으로 변환하거나 as int 태그를 사용합니다.

예를 들면 다음과 같습니다.

def finalList = mergeList.get(i)

int pmntfrequency = (int) finalList.get(3)

int pmntfrequency = finalList.get(3) as int

java.util.List <java.lang.String> 유형의 값을 java.lang.String[] 유형의 변수에 지정할 수 없습니다.

String[] arrGridMbrs = it.getMemberNames()

it.getMemberNames()String[] 배열에 직접 지정할 수 없는 List<String>을 반환하기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 as String[] 변환을 추가하여 List<String>String[] 배열로 명시적으로 변환합니다.

예를 들면 다음과 같습니다.

String[] arrGridMbrs = it.getMemberNames() as String[]

다음을 호출할 수 없습니다.

oracle.epm.api.grid.DataGridDefinitionBuilder#addPov(java.util.List <java.lang.String>, java.util.List <java.util.List>)

다음 인수 사용

[java.util.List <java.lang.Object>, java.util.List <java.lang.Object>]

def columnDims = []

def columnMbrs = []

builder.addColumn(columnDims, columnMbrs)

List<String>List<List<String>> 인수는 List<Object>List<Object>로 전달되기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 변수의 데이터 유형을 지정합니다.

예를 들면 다음과 같습니다.

List<String> columnDims = []

List<List<String>> columnMbrs = []

builder.addColumn(columnDims, columnMbrs)

다음을 호출할 수 없습니다.

oracle.epm.api.grid.DataGridDefinitionBuilder#addRow(java.util.List <java.lang.String>, java.util.List <java.util.List>)

다음 인수 사용

[java.util.List <java.lang.Object>, java.util.List <java.lang.Object>]

dataGridDefinitionBuilder.addRow(['Account', 'Period'], [['Account1'],['P1']])

List<String>List<List<String>> 인수는 List<Object>List<Object>로 전달되기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 as String[] 변환을 추가하여 List<String>String[] 배열로 명시적으로 변환합니다.

예를 들면 다음과 같습니다.

dataGridDefinitionBuilder.addRow(['Account', 'Period'] as List<String>, [['Account1'],['P1']] as List<List<String>>)

다음을 호출할 수 없습니다.

oracle.epm.api.grid.DataGridDefinitionBuilder#addColumn(java.util.List <java.lang.String>, java.util.List <java.util.List>)

다음 인수 사용

[java.util.List <java.lang.Object>, java.util.List <java.lang.Object>]

dataGridDefinitionBuilder.addColumn(['Account', 'Period'], [['OCX_Payment Frequency'],['Begbalance']])

List<String>List<List<String>> 인수는 List<Object>List<Object>로 전달되기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 as String[] 변환을 추가하여 List<String>String[] 배열로 명시적으로 변환합니다.

예를 들면 다음과 같습니다.

dataGridDefinitionBuilder.addRow(['Account', 'Period'] as List<String>, [['Account1'],['P1']] as List<List<String>>)

일치하는 메소드 java.util.Date#getAt(int)를 찾을 수 없습니다.

rtps.endDate.getDataAsDate().getAt(Calendar.YEAR)

이전에 이전 버전의 Groovy에서 사용가능했던 getAt(int) 메소드를 더 이상 사용할 수 없기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 다음을 입력합니다.

Calendar calendar = Calendar.getInstance()

calendar.setTime(rtps.endDate.getDataAsDate())

int year = calendar.get(Calendar.YEAR)

일치하는 메소드 java.util.Date#format(java.lang.String)을 찾을 수 없습니다.

rtps.endDate.getDataAsDate().format("yyyy-MM-dd")

이전에 이전 버전의 Groovy에서 사용가능했던 형식 메소드를 더 이상 사용할 수 없기 때문에 오류가 발생합니다.

이 이슈를 해결하려면 다음을 입력합니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")

String formattedDate = sdf.format(rtps.endDate.getDataAsDate())

일치하는 메소드 oracle.epm.api.model.Application#getDimension(java.lang.String, java.util.List)를 찾을 수 없습니다.

List <Cube> cube = operation.application.getCubes() Dimension dimScenario = operation.application.getDimension("Scenario", cube.toArray(new Cube[cube.size()]))

List<Cube>가 예상되는 두번째 인수 및 0개 이상 큐브로 전달됩니다.

이 이슈를 해결하려면 다음 중 하나를 수행합니다.

  • 선언된 유형이 올바르고 메소드가 존재하는지 확인합니다.

  • 다음을 입력합니다.

    List <Cube> cubes = operation.application.getCubes()

    Dimension dimScenario = operation.application.getDimension("Scenario", cubes.toArray(new Cube[cube.size()]))

  • 특정 큐브에 적합한 차원만 필요한 경우 다음을 입력합니다.

    Cube cube = application.getCube("Plan1")

    Dimension dimScenario = operation.application.getDimension("Scenario", cube)