2017-09-20 40 views
0

Je travaille actuellement sur un projet EpiServer dans lequel nous utilisons l'attribut ContentType pour définir le DisplayName et l'ordre des blocs. L'ordre est basé sur le nom du bloc. Voici un exemple:Automatiser une tâche manuelle réapparaissante (générer le numéro de commande en fonction du nom) dans 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 
{ 
} 

Apparemment Episerver ne peut pas trier les blocs par ordre alphabétique pour que nous générons l'ordre sur la base DisplayName comme un travail autour. Une formule a été inventée pour déterminer l'ordre. Un collègue a écrit une fonction JavaScript qui peut être utilisé pour générer le numéro de commande:

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}`; 
} 

Cette fonction peut être exécutée dans la console d'un navigateur. Mieux que d'avoir à calculer la commande à la main, mais cela nécessite que je passe à un navigateur, ouvrez la console, collez ce code et exécutez-le et enfin copier le résultat et le coller dans le modèle sur lequel je travaille. J'ai pensé qu'il serait beaucoup plus pratique de pouvoir générer le numéro de commande à partir de VS. J'ai examiné dans l'utilisation de Visual Studio Extensions mais je ne peux pas vraiment trouver quelque chose qui soit à mon goût.

La solution la plus optimale serait de pouvoir sélectionner la (partie de) DisplayName, faites un clic droit et sélectionnez une nouvelle commande dans le menu contextuel qui va générer la commande et collez-la à l'emplacement correct. Ou placez-le sur le plateau à pince pour pouvoir le coller facilement au bon endroit. Une pop-up affichant la commande serait bien aussi.

Est-ce encore possible?

Une autre option pourrait être une nouvelle commande dans un des menus de la barre d'outils, par exemple Outils, qui afficherait une petite fenêtre où je pourrais entrer/coller le texte et le faire générer l'ordre que je pourrais ensuite coller dans le code .

J'ai trouvé comment ajouter une commande personnalisée au menu Outils et comment je pourrais générer le code et l'afficher, mais comment puis-je entrer le texte? Ou est-il possible de récupérer le texte sélectionné dans la fenêtre de l'éditeur? Cela résoudrait mon problème aussi.

Si quelqu'un pouvait me pointer dans la bonne direction, ce serait génial!

PS. Je ne suis pas trop content du titre de cette question, donc je suis ouvert aux suggestions si quelqu'un peut penser à un titre qui décrit mieux ma question.

Répondre

1

Vous pouvez récupérer du texte sélectionné à partir de la fenêtre de l'éditeur Visual Studio avec le code suivant.

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

     string text = ""; 

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

Merci beaucoup @Wendy, cela m'a aidé une bonne affaire! J'ai maintenant une extension VS qui prend le texte sélectionné, transforme cela en un numéro de commande et place le numéro de commande dans le presse-papiers. La commande est ajoutée au menu Outils, si je pouvais l'obtenir dans le menu contextuel qui serait proche de la perfection. – elloco999

+0

@ elloco999 Vous pouvez définir un raccourci pour votre commande personnalisée. S'il vous plaît se référer à: https://msdn.microsoft.com/en-us/library/cc138531.aspx –

+0

Je vais essayer, merci! – elloco999