2017-11-19 11 views
1

다음 코드를 사용하여 테이블 메서드에 대한 호출을 동적으로 실행할 수 있습니다.DictTable CallObject

그러나 항상 오류 실행 코드를 반환합니다. myTableName 테이블에 'myUpdateMethod'메서드가 없습니다.

Dicttable   dictTable; 
    Common   common; 
    ExecutePermission perm; 

    perm = new ExecutePermission(); 
    dictTable= new DictTable(tableName2Id('myTableName')); 
    if (dictTable != null) 
    { 
     common = dictTable.makeRecord(); 

     // Grants permission to execute the 
     // DictTable.callObject method. DictTable.callObject runs 
     // under code access security. 
     perm.assert(); 
     dictTable.callObject('myUpdateMethod', common); 
    } 

    // Close the code access permission scope. 
    CodeAccessPermission::revertAssert(); 

이 오브젝트들은 다른 모델이지만, 두 모델 사이에 차이가 있는지 확인하기 위해 시도했습니다. 문제를 해결하지 못했습니다.

감사합니다.

+0

메소드 인수가 있습니까? callobject()에는 추가 매개 변수를 지정하지 않습니다. 따라서 매개 변수없이 myUpdateMethod()를 찾습니다. --- 조언한다 : 1. SysDictTable 대신 DICT 표 2. SysDictTable.isMethodActual() 객체의 이름에 대한 문자열을 사용하지 마십시오 방법 presense 3.을 확인하는 - 그것은 상호 참조를 잃게됩니다. tableName2Id ('myTableName') 대신 tablenum (myTablename)을 사용하고 대신 'myUpdateMethod'대신 methodstr (myUpdateMethod)을 사용하십시오. – mazzy

답변

1

정적에서 비 정적으로 호출되는 메서드가 변경되었습니다.

작업을 시작한 후 callStatic()에 해당하는 항목을 찾았습니다.

여기 params가없는 비 정적 메서드에 사용 된 코드가 있습니다.

Dicttable   dictTable; 
    Common   common; 
    ExecutePermission perm; 

    perm = new ExecutePermission(); 
    dictTable= new DictTable(tableName2Id('MyTableName')); 
    if (dictTable != null) 
    { 
     common = dictTable.makeRecord(); 
     // Grants permissions 
     perm.assert(); 
     if (dictTable.doesMethodExist('myMethodName')) 
     { 
      dictTable.callObject('myMethodName', common); 
     } 
    } 

    // Close the code access permission scope. 
    CodeAccessPermission::revertAssert(); 
+1

항상 좋은 두 가지는 메소드를 실행하기 전에 존재하는지 확인합니다. 동일한 경우 전역 클래스에서 tableHasMethod 메서드를 사용하십시오. 정적 메소드 검증에는 tableHasStaticMethod 메소드가있다. –

+0

귀하의 솔루션 코드를 게시하면 나와 +1을 얻습니다. – AnthonyBlake