2017-09-20 252 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