2014-01-23 18 views
5

我想創建自己的自定義向下鑽取功能,其中URL dynamics://0?myfunction_123456將啓動我自己的代碼。什麼處理動態://網址?

C\SysStartupCmd\construct,這個基本代碼:

case 'viewalert': 
     sysStartupCmd = new SysStartUpCmdViewAlert(s,parm); 
     break; 
    case 'drilldown': 
     sysStartupCmd = new SysStartUpCmdDrillDown(s,parm); 
     break; 
    case 'viewalertrule': 
     sysStartupCmd = new SysStartUpCmdViewAlertRule(s,parm); 
     break; 

我測試過這些都得到具有以下網址觸發:

  • 動態:// 0/DrillDown_382576
  • 動態: // 0 /?ViewAlert_382576
  • dynamics:// 0 /?ViewAlertRule_382576

不過,如果我添加自己的情況下,使所有其他代碼一樣,我不能得到的URL來火:

case 'myFunction': 
     sysStartupCmd = new SysStartUpCmdDrillDown(s,parm); 
     break; 

我已經挖遍系統並不能找出是什麼導致dynamics:// URL僅針對這三種情況而觸發。有沒有註冊表項或什麼?我發現C\EventDrillDownPoller似乎創建一個PipeServer來處理接收到的內容?

回答

6

當然,每次我輸入一個stackoverflow問題時我都會找出自己的答案,但我認爲這些信息非常有用。

此堆棧問題led me to find out thatC:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\AxHLink.exe %1處理Dynamics:// URLs。

這導致我到Microsoft's community forums其他人面臨與我類似的問題。

因此,解決辦法是要麼:

  • 創建自定義的C#或其他語言一個URI處理程序進行通信,以AX(Similar to this
  • 的Hi-插孔3的一個處理現有例一些自定義的X ++代碼嘗試和分離它。也許通過更改URL中的明細目標並以這種方式進行處理,或者在字符串中附加一些特殊字符。
  • 致電"c:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Ax32.exe" -startupcmd=myfunction_myParams並製作一個可點擊的鏈接。
+1

當然你想出了你自己的問題http:// en。wikipedia.org/wiki/Rubber_duck_debugging – AnthonyBlake

+0

多麼美妙的調試方式! –

6

你已經回答了你自己的問題,但它是很容易的(如果你知道如何)掛鉤的標準詳細視圖代碼定製AX開始的具體形式,如:

開始對項目03310511 AX在公司XXX

start dynamics://TEST/?DrillDown_0?table=InventTable&field=itemId&value=03310511&company=XXX 

它會採取合理的默認值。

start dynamics://TEST/?DrillDown_0?table=CustTable&value=113545 

而AX可以從HTML電子郵件中調用,假設接收方有AX客戶端!

<a href="dynamics://TEST/?DrillDown_0?table=CustTable&value=113545">113545</a> 

您在my pastebin中找到我的自定義設置。

+0

啊太棒了。非常好的代碼,爲我節省了一堆時間!你的代碼的一個問題是,當你連接到你的自定義SysStartupCmd *時,在你的情況下,你會去掉'TEST'的**實際**導航標記,這可能導致像SalesTable這樣更多變量的問題,或者如果有人使用你的代碼執行或什麼。 超好用! –

+0

它可能應該測試'TEST'是否與存儲在參數中的值相匹配(就像在正常的DrillDown代碼路徑中那樣)。 –

+0

是的:)。我將'parseDrillDownNavigationMark'中的代碼移動到一個新的靜態方法'parseDrillDownCustomParam',然後將'parseDrillDownNavigationMark'中的代碼切換回基地,然後將分隔符行更改爲'int delimiter = strscan(parm,'?',strlen(parm ),-strlen(parm));'(注意'-'符號)。然後在C \ SysStartUpCmdDrillDown \ infoRun中,我只是將'if(!EventDrillDownPoller :: checkDrillDownNavigationMark(navigationMark))'移回到您的自定義代碼的上方。輕鬆修復。 –