2017-09-20 290 views
0

我目前正在使用ContentType屬性設置DisplayName和Order的塊的EpiServer項目。訂單基於塊的名稱。這裏有一個例子:在Visual Studio中自動執行重新手動任務(根據名稱生成訂單號)

[ContentType(
    DisplayName = "My First Block", 
    Order = 133536, 
    GUID = "0f02e38a-a6e2-4333-9bd1-c61cf573d8d3", 
    Description = "Just an example block.", 
    GroupName = "Blocks.Content" 
    )] 
public class MyFirstBlock : BaseBlock 
{ 
} 

顯然EpiServer不能塊按字母順序,所以我們基於的顯示名稱作爲工作周圍的排序。發明了一個公式來確定順序。一個同事寫了一個JavaScript函數,可被用來生成訂單號:

function getEPiOrderNumber(value) { 
    var alphabeticalIndex = function (character) { 
     return character.toLowerCase().charCodeAt() - 96; 
    }; 

    var firstSection = alphabeticalIndex(value[0]); 
    var secondSection = alphabeticalIndex(value[1]) + 10; 
    var thirdSection = alphabeticalIndex(value[2]) + 100; 

    return `${firstSection}${secondSection}${thirdSection}`; 
} 

此功能可以在瀏覽器的控制檯執行。比手動計算順序更好,但這需要我切換到瀏覽器,打開控制檯,粘貼此代碼並執行它,最後複製結果並將其粘貼到我正在處理的模型中。

我覺得能夠從VS內部生成訂單號會更加方便。我一直在研究使用Visual Studio Extensions,但無法真正找到符合我需要的任何內容。

最理想的解決方案是能夠選擇(部分)DisplayName,右鍵單擊並從上下文菜單中選擇一個新命令,該命令將生成訂單並將其粘貼到正確的位置。或將其放在剪輯板上,以便我可以輕鬆地將其粘貼到正確的位置。顯示訂單的彈出窗口也可以。

這甚至可能嗎?

另一個選項可能是工具欄菜單中的一個工具菜單中的新命令,它會顯示一個小窗口,我可以在其中輸入/粘貼文本並生成可粘貼代碼的順序。

我已經想出瞭如何將自定義命令添加到工具菜單以及如何生成代碼並顯示它,但是如何輸入文本?或者是否有可能從編輯器窗口中檢索選定的文本?這也可以解決我的問題。

如果任何人都可以指出我正確的方向,那會很棒!

PS。我對這個問題的標題不太滿意,所以如果有人能想到一個能更好地描述我的問題的標題,我會接受建議。

回答

1

您可以使用以下代碼從Visual Studio編輯器窗口中檢索選定的文本。

 DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE)); 

     string text = ""; 

     if (dte.ActiveDocument != null) 
     { 
      var selection = (TextSelection)dte.ActiveDocument.Selection; 
      text = selection.Text; 
     } 
+0

非常感謝@Wendy,這對我幫助很大!我現在有一個有效的VS擴展,它將所選文本轉換爲訂單號並將訂單號放在剪貼板上。該命令被添加到工具菜單,如果我可以在快捷菜單中獲得它將接近完美。 – elloco999

+0

@ elloco999您可以爲自定義命令設置快捷方式。請參閱:https://msdn.microsoft.com/en-us/library/cc138531.aspx –

+0

我會盡力,謝謝! – elloco999