В D365/X++, почему '(' недопустимо, когда я использую «this», чтобы указать, что переменная существует в экземпляре?

У меня следующий класс:

      public class MyDialogSelect extends RunBase
{
    private DialogField nameField;

    // Snipped for brevity

    public Object dialog()
    {
        Dialog dialog = super();
        nameField = dialog.addField(extendedTypeStr(CustName));
        // Snipped for brevity
        return dialog;
    }

    public void dialogSelectCtrl()
    {
        CustTable customerTable = CustTable::find(accountField.value());
        nameField.value(customerTable.name());
        // Snipped for brevity
    }
}

Это компилируется и работает, как ожидалось.

Однако я предпочитаю использовать ключевое слово, чтобы указать, принадлежат ли переменные экземпляру, поэтому я пытаюсь изменить его на:

      public class MyDialogSelect extends RunBase
{
    private DialogField nameField;

    // Snipped for brevity

    public Object dialog()
    {
        Dialog dialog = super();
        this.nameField = dialog.addField(extendedTypeStr(CustName));
        // Snipped for brevity
        return dialog;
    }

    public void dialogSelectCtrl()
    {
        CustTable customerTable = CustTable::find(accountField.value());
        this.nameField.value(customerTable.name());
        // Snipped for brevity
    }
}

Но это не будет компилироваться, вместо этого приведет к Invalid token '('.. Однако, если я удалю раньше nameField.value(customerTable.name());, он снова работает, как ожидалось. (Примечание: я все еще указываю в this.nameField = dialog.addField(extendedTypeStr(CustName));).

Почему он не компилируется, если я добавляю перед свойством, вызывающим метод? Я также наблюдал это с this.nameField.enabled(false)также не удается. Есть ли более общее правило или принцип, который я должен здесь понять о том, когда x++ разрешает, запрещает или требует this?

2 ответа

Решение

Вы не можете использовать это для ссылки на переменные экземпляра в X++. Как в C++.

Вы можете (и должны) использовать это для ссылки на методы экземпляра.

Это относится к контексту разработки, в вашем примере это относится к классу в целом. Если вы добавляете другой метод, вы вызываете этот метод, используя this.

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

Другие вопросы по тегам