2014-07-16 6 views
1

그래서 DMFWriteExportData이라는 클래스를 작업하고 배치에서 실행하려고합니다. fieldControl을 없애고 서버에서 클래스를 실행하고 서버에서 실행 중이라고 가정하지 않기 때문에 오류가 발생하는 이유를 파악해야하는 시점에 있습니까? (확실하지 않은)Dynamics AX 2012 - 대화 상자에서 사용자 정의 조회

Error: "The method Dialog Control.control cannot be called from the server; use methods on the Dialog Field class instead." 

-

public Object dialog() 
{ 
    DialogRunbase  dialog = new DialogRunbase("@DMF372", this); 
    FormStringControl control; 
    dialogExecution = dialog.addFieldValue(extendedTypeStr(dMFExecutionId), executionId); 
    control   = dialogExecution.fieldControl(); 
    control.mandatory(true); 
    control.displayLength(24); 
    control.registerOverrideMethod(methodstr(FormStringControl, lookup), methodstr(DMFWriteExecutionParameters, executionIdLookup), this); 
    control.registerOverrideMethod(methodstr(FormStringControl, modified), methodstr(DMFWriteExecutionParameters, executionIdModified), this); 
    dialogdescription=dialog.addFieldValue(extendedTypeStr(description),DMFExecution::find(executionId).Description); 
    dialogdescription.enabled(false); 

    return dialog; 
} 

궁금 오전 :

  1. 이 control.registerOverrideMethod
  2. 사용하는 경우이 클래스는 서버 로 설정 될 수 없다는 사실은 사실 인 경우
  3. 예인 경우,이 상황을 극복하기위한 이상적인 솔루션은 무엇입니까? 내가 만드는 방법은 무엇입니까? 맞춤 조회? DialogField 클래스에 registerOverrideMethod라는 메소드 이 있습니다.

어떤 도움을 주시면 감사하겠습니다.

감사합니다, 코 슬라

답변

1

에만 클라이언트 측에 존재 대화 상자 컨트롤을 사용하기 때문에 (그리고해야한다) 일괄 적으로 위의 코드입니다 실행할 수 없습니다 이유. 서버에서 이런 종류의 코드를 실행해서는 안됩니다. 수업의 runon 속성을 확인하고에서 호출하도록 설정하십시오.

그러나 RunBaseBatch를 사용하고 있다고 가정합니다. AX 2012를 사용 중이라면 대신 SysOperation 프레임 워크를 사용해야합니다.

RunBaseBatch를 사용할 때 모든 코드는 동일한 클래스에 있습니다. 이렇게하면 클라이언트 측 코드 (main 메서드, dialog 메서드 등)와 서버 (run 메서드)에서 실행해야하는 코드가 혼합됩니다. 이러한 이유 때문에 클래스의 "runon"속성을 으로 지정해야합니다.이 아닌 서버이 호출되어야합니다. 을 사용하면이 두 모델을 깔끔하게 구분하는 MVC (Model View Controller) 패턴을 적용하여이 문제를 해결할 수 있습니다. 통찰력에 대한 AX2012: SysOperation introduction

+0

정말 감사합니다 : SysOperation에 대한 소개

, 여기에 내 블로그를 확인합니다. 나는 그것을 곧바로 들여다 볼 것이다. – khosla