2017-11-19 6 views
1

DictTable CallObject。Iを動的にあってもなくてもよいテーブルメソッドの呼び出しを実行するために、次のコードを使用してい

しかし、それは常に実行エラーコードを返します。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(); 

これらのオブジェクトは、別のモデルであるが、ちょうど蹴りのために私はそれが違いを作ったかどうかを確認するために、2つのモデル間の参照を作ってみました。それは問題を解決しませんでした。

おかげ

+0

は、あなたのメソッドの引数がありますか? callobject()に追加のパラメータは指定しません。したがって、パラメータなしでmyUpdateMethod()を検索します。 --- はアドバイス: 1. SysDictTable代わりDictの表 2. SysDictTable.isMethodActualを()オブジェクト名の文字列を使用しないでください方法のpresense 3をチェックする - それは、相互参照を失います。使用tablenum(myTablename)の代わりにtableName2Id( 'myTableName')とmethodstr(myUpdateMethod)を使用する代わりに、 '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

常に良い2つは、同じことを実行する前にメソッドが存在することを確認します。同じようにグローバルクラスのtableHasMethodメソッドを使用してください。静的メソッドの検証には、tableHasStaticMethodメソッドがあります。 –

+0

あなたのソリューションコードを投稿してください、あなたは私から+1を得る – AnthonyBlake

関連する問題

 関連する問題