2009-11-09 5 views
3

대화 상자에서 양식 필드의 유효성 검사와 관련하여 인터넷에서 여러 게시물과 기사를 찾았습니다. 찾은 예제 중 아무 것도 제대로 작동하지 않는 것 같습니다.Axapta 대화 상자 유효성 검사

누군가가 하나의 텍스트 필드를 포함하는 대화 상자를 생성하고, 간단한 검증 (text = "abc")을 수행하고, 필드 값을 반환하는 창을 닫을 수있는 x ++ 코드의 간결한 예제를 게시 할 수 있습니까? 유효성 검사가 실패하면 유효성 검사가 통과되거나 대화 상자를 닫지 않고 Infolog 경고를 생성합니다.

x ++로 시작하는 사람들에게 실제 작업 예제를 작성하는 것이 좋은 출발점이 될 것이라고 생각합니다.

감사합니다.

답변

5

다음은 RunBase 클래스를 사용하여 간단한 대화 상자를 작성하는 방법에 대한 AX 2009의 예입니다. 그것에 DialogExample 클래스를 만들고 RunBase에서 파생시킵니다. 대화 상자를 표시하려면 클래스를 실행하기 만하면되지만 일반적으로 클래스의 MenuItem을 가리켜 수행하면됩니다.

public class DialogExample extends RunBase 
{ 
    DialogField dialogName; 
    Name name; 

    #DEFINE.CurrentVersion(1) 
    #LOCALMACRO.CurrentList 
     name 
    #ENDMACRO 
} 

Object dialog() 
{ 
    Dialog dialog = super(); 
    ; 

    // Add a field for a name to the dialog. This will populate the field with 
    // any value that happens to be saved in name from previous uses of the 
    // dialog. 
    dialogName = dialog.addFieldValue(TypeId(Name), name); 

    return dialog; 
} 

boolean getFromDialog() 
{ 
    ; 

    // Retrieve the current value from the dialog. 
    name = dialogName.value(); 

    return true; 
} 

boolean validate(Object _calledFrom = null) 
{ 
    boolean isValid; 

    isValid = super(_calledFrom); 


    // Perform any validation nessecary. 
    if (name != 'abc') 
    { 
     isValid = checkFailed('Name is not equal to abc') && isValid; 
    } 

    return isValid; 
} 

Name parmName() 
{ 
    ; 

    return name; 
} 

public container pack() 
{ 
    return [#CurrentVersion,#CurrentList]; 
} 

public boolean unpack(container _packedClass) 
{ 
    int version = conpeek(_packedClass, 1); 

    switch (version) 
    { 
     case #CurrentVersion: 
      [version,#CurrentList] = _packedClass; 
      break; 
     default : 
      return false; 
    } 

    return true; 
} 

public static void main(Args args) 
{ 
    DialogExample DialogExample; 
    ; 

    dialogExample = new dialogExample(); 

    // Display the dialog. This only returns true if the the user clicks "Ok" 
    // and validation passes. 
    if (dialogExample.prompt()) 
    { 
     // Perform any logic that needs to be run. 
     info(dialogExample.parmName()); 
    } 
} 

일반적으로 OK (확인) 버튼을 클릭하면 메인에서 클래스에서 실행 방법에 넣어 다음에 호출 할 것이다 실행해야이 시나리오 로직한다. run 메쏘드는 인스턴스 메쏘드가 될 것이기 때문에 parm 메쏘드가 대화 상자의 필드 값에 접근 할 필요가 없습니다.

+0

이 우수한 응답을 게시 할 시간을내어 주셔서 감사합니다. 그것은 완벽하게 작동합니다. – Brad

2

이 질문은 오래된 질문이지만, AX 개발 세계에서 시작하는 사람들에게는 AOT에 훌륭한 작업 코드 예제가 있으며, 접두사 " 지도 시간_".

Tutorial_RunBaseForm은 AOT의 클래스로서 필요한 것을 정확하게 제공합니다.

관련 문제