Visual Studio で、孤立した/個別の VB 関数コードをモデル化/マップすることができません。
VB.Net で記述されたレガシー アプリケーションを使用しています。ほとんどのアプリケーション コード/実行可能ファイルはエンド ユーザーにはわかりませんが、フォーム フィールドやデータ モデルと対話できるフォームの背後にユーザー空間のカスタマイズがあります。私がする必要があるのは、このユーザー定義コードをマップして、循環ロジックなどの不適切な相互作用を探すことです。
TL、DR (質問): 目的は、ある種のエンティティ関係または依存関係グラフを取得することです。これらを Viso などで描画することもできますが、すべてのコードに対してそれを行うのはかなり困難です。
関数とその内部、読み取りと書き込みのパターンを簡単に確立する方法があるべきだと私には思えます。これまでのところ何も見つかりませんでした。Excel でこれを行うべきではありません。やりすぎです。私は正規表現に精通していますが、私の経験では、このような問題を意図したものではありませんでした。
何か方法はありますか?
詳細に興味がない場合は、以下を無視してください
VS コード マップを使用してみましたが、アプリケーションのコンパイル済み部分への参照が必要ですが、それはありません。したがって、VS では、このユーザー コードは基本的に、認識されない孤立したコードです。クラス コンテキストはなく、実行時にのみ実行されます。このやり方はかなり難しそうです。そのため、VS Code では構文を強調表示できますが、Visual Studio では何もできず、コード マップや dmg (有向グラフ) などのアドオン ツールでは表示されません。
すべてのユーザー コードは単純な関数であるため、この限られたコンテキストで相互に参照する方法を確認するために、何らかの方法で DMGL に変換することを望んでいました。Excel や Regex を使用してこれを行うこともできますが、これは車輪を再発明するための大きな努力に違いありません。Object-Role Modeling も試してみましたが、手動で入力する必要があり、面倒です。
Roslynも見ましたが、Visual Studioと同じ問題です
私の疑わしい機能をすべてここにコピーするのはおそらく良くないでしょうが、コンテキスト全体を次の場所で見ることができます。
示されているコードを理解するための鍵は、タイム カードを表す親/ヘッダー フォームがあることです。Timecards テーブルのフィールドには接頭辞 lmp* が付いています。また、データベース テーブルには TimecardLines という詳細行を表す子サブフォームがあり、そのフィールドの接頭辞は lml* です。
例
これら 2 つの関数は、ユーザーがタイムカード行の特定のフィールドを編集するときに呼び出すことができます。コードは表示せず、インターフェイスのみを表示します。それぞれが、他の関数によって管理されているフィールドを参照および更新できます。そのため、可能なカスケード効果をテキスト形式で視覚化することは悪夢になる可能性があります.
依存関係としてラベル付けされた項目は、アプリケーションのコンパイル済み部分への呼び出しであり、インターフェイスのフットプリントしかなく、入口/出口ポイント以外では分析できません。それらは私にとって不変であるため、修正することはできません。不要な場合にのみ回避してください。
M1.Ax.Erp.Forms.Production.Timecard.TimecardLineView
+Timecard エントリの問題の子: M1.Ax.Erp.Forms.Production.TimecardView
注:
_Delete()
当面の間、イベントは無視します。
Function lmlRoundedEndTime_ValueChanged(sender, e)
更新:
lmlLaborHours
- 暗黙的に呼び出します: -lmlLaborHours_ValueChanged()
lmlActualEndTime
- 暗黙的に呼び出します:
TimecardLines_UpdateCompleted
- 暗黙的に呼び出します:
入力:
lmlRoundedStartTime
lmlRoundedEndTime
lmlShiftID
依存:
App.Ax("Shift").``CalculateHours``()
動作設定:
xapLMUpdateActualWithRounded
暗黙的に呼び出します:
lmpRoundedEndTime_ValueChanged()
Function lmlRoundedStartTime_ValueChanged(sender, e)
更新:
lmlRoundedEndTime
- 暗黙的に呼び出します:
lmlRoundedEndTime_ValueChanged
TimecardLines_UpdateCompleted
lmlLaborHours
lmlActualStartTime
- 暗黙的に呼び出します:
入力:
lmlActualStartTime
lmlRoundedStartTime
lmlRoundedEndTime
lmlLaborHours
lmlShiftID
依存関係:
App.Ax("Shift").``CalculateEndTime``()
App.Ax("Shift").CalculateHours()
動作設定:
xapLMCalculateEndTime
xapLMUpdateActualWithRounded
これらが編集されると、親ヘッダーが更新されるため、関連する多くの親関数がうまく相互作用しない可能性があります。
M1.Ax.Erp.Forms.Production.Timecard.TimecardView
親: +Timecard エントリの問題: M1.Ax.Erp.Forms.Production.TimecardLineView
次の関数は、次のように呼び出すことができます。TimecardLines_UpdateCompleted
Function lmpRoundedStartTime_ValueChanged(sender, e)
更新:
lmpPayrollHours
入力:
lmpRoundedStartTime
lmpRoundedEndTime
lmpShiftID
依存関係:
App.Ax("TimecardFunctions").CalculateHours()
動作設定:
xapDCPayCalculationMethod
Function lmpRoundedEndTime_ValueChanged(sender, e)
更新:
lmpPayrollHours
入力:
lmpRoundedStartTime
lmpRoundedEndTime
lmpShiftID
依存関係:
App.Ax("TimecardFunctions").CalculateHours()
動作設定:
xapDCPayCalculationMethod
等々。
PS: タグ dmgl を作成するための評判スコアがありません。あるべきです。誰かがタグ付けできたら、それは素晴らしいことです。