2009-11-09 2 views
3

Я нашел несколько сообщений и статей в сети, в которых говорилось о проверке полей формы в диалогах, но ни один из примеров, которые я нашел, не работает должным образом.Проверка Axapta Dialog

Может ли кто-нибудь опубликовать полный, краткий пример кода x ++, который генерирует диалоговое окно, содержащее одно текстовое поле, выполняет простую проверку (если текст = "abc") на нем и либо закрывает окно (возвращая значение поля) если проверка прошла или генерирует предупреждение Infolog, не закрывая диалог, если проверка не выполняется.

Для тех из нас, кто только начинается с x ++, я думаю, что было бы хорошей отправной точкой для создания фактического рабочего примера.

Спасибо!

ответ

5

Вот пример в AX 2009, как построить простой диалог с использованием класса RunBase. В нем я создаю класс под названием 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, который дает вам именно то, что вам нужно.

Смежные вопросы