كيفية القيام بما يلي: تعريف أمر قائمة على مخطط طراز

Visual Studio Ultimate، يمكنك تحديد عناصر إضافى للقائمة التي تظهر عند يمين-clicks مستخدم مخطط ل UML. يمكنك التحكم ما إذا كانت قائمة الأمر تظهر ويتم ممكّن عند المستخدم يمين-clicks أي عنصر تشغيل مخطط، يمكنك كتابة تعليمات برمجية التي يتم تشغيلها عند قيام مستخدم بتحديد عنصر قائمة. يمكنك حزم هذه الملحقات في Visual Studio "ملحق تكامل" ( VSIX ) ثم توزيعه على مستخدمي Visual Studio Ultimate الآخرين.

ملاحظة

كبديل للخطوات المذكورة في هذا المقطع, يمكنك استخدام "أدوات بنية قوة Visual Studio 2010 " لإنشاء مشروع Visual Studio بسرعة لتعريف أمر قائمة. استخدم المعرض المتصل لمدير الملحقات لتحميل وتثبيت هذه الأدوات. في القائمة أدوات انقر فوق مدير الملحقات، ومن ثم انقر فوق معرض عبر الإنترنت ثم استخدام حقل البحث.

إنشاء تعليمات برمجية قائمة أساسى

لتعريف قائمة الأمر، تحتاج إلى إعداد حلاً مع جهازي Visual Studioمشاريع:

  • مشروع مكتبة فئة التي تحتوي على تعليمات برمجية الخاصة بأمر قائمة.

  • VSIX مشروع يتصرف كحاوية لتثبيت الأمر. إذا كنت ترغب في ذلك، يمكنك تضمين البعض مكونات في VSIX نفسه.

إلى إنشاء مشروع "مكتبة الفئات" لأمر قائمة

  1. إنشاء مشروع مكتبة فئة، أما في جديد Visual Studioالحل، أو في موجودة الحل.

    1. من القائمة File (ملف)، أشر إلى New (جديد)، ثم انقر فوق Project (مشروع).

    2. تحت المثبتة قوالب ، انقر فوق Visual C#‎ أو Visual أساسى . في العمود وسط، انقر فوق مكتبة فئة .

    3. قم بتعيين الحل للإشارة إلى ما إذا كنت ترغب في إنشاء حل جديد أو إضافة مكوّن بحل VSIX التي قمت بفتحها بالفعل.

    4. اسم مشروع لمجموعة موقع و و انقر فوق ‏‏موافق.

  2. إضافة المراجع التالية إلى مشروع.

    المرجع

    ما يسمح لك ذلك بفعله

    النظام.ComponentModel.إنشاء

    قم بتحديد المكونات باستخدام الإدارة من التوافق مع البرامج الخارجية Framework (MEF).

    Microsoft.VisualStudio.Uml.Interfaces

    قراءة وتغيير خصائص عناصر طراز.

    Microsoft.VisualStudio.ArchitectureTools.Extensibility

    إنشاء عناصر طراز، تعديل الأشكال في المخططات.

    Microsoft.VisualStudio.Modeling.Sdk.10.0

    تعريف معالجات أحداث الطراز .

    تغليف سلسلة من التغييرات في الطراز الخاص بك. لمزيد من المعلومات، راجع كيفية القيام بما يلي: ربط تحديثات طراز باستخدام العمليات.

    Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.0

    (غير مطلوب دوماً)

    الوصول لعناصر الطراز الإضافية لمعالجات الإيماءات.

  3. إضافة ملف فئة إلى مشروع و التعيين محتواه للتعليمة البرمجية التالية.

    ملاحظة

    قم بتغيير مساحة الاسم واسم الفئة والقيمة التي يتم إرجاعها بواسطة Textإلى التفضيل.

    using System.ComponentModel.Composition;   
    using System.Linq;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
    using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
    using Microsoft.VisualStudio.Uml.AuxiliaryConstructs;
    using Microsoft.VisualStudio.Uml.Classes; 
        // ADD other UML namespaces if required
    
    namespace UMLmenu1 // CHANGE
    {
      // DELETE any of these attributes if the command
      // should not appear in some types of diagram.
      [ClassDesignerExtension]
      [ActivityDesignerExtension]
      [ComponentDesignerExtension]
      [SequenceDesignerExtension]
      [UseCaseDesignerExtension]
    
      // All menu commands must export ICommandExtension:
      [Export (typeof(ICommandExtension))]
      // CHANGE class name
      public class Menu1 : ICommandExtension
      {
        [Import]
        public IDiagramContext DiagramContext { get; set; }
    
        public void QueryStatus(IMenuCommand command)
        { // Set command.Visible or command.Enabled to false
          // to disable the menu command.
          command.Visible = command.Enabled = true;
        }
    
        public string Text
        {
          get { return "MENU COMMAND LABEL"; }
        }
    
        public void Execute(IMenuCommand command)
        {
          // A selection of starting points:
          IDiagram diagram = this.DiagramContext.CurrentDiagram;
          foreach (IShape<IElement> shape in diagram.GetSelectedShapes<IElement>())
          { IElement element = shape.Element; }
          IModelStore modelStore = diagram.ModelStore;
          IModel model = modelStore.Root;
          foreach (IElement element in modelStore.AllInstances<IClass>()) 
          { }
        }
      }
    }
    

    للحصول على مزيد من المعلومات حول ما إلى وضع في الأساليب، راجع تنفيذ "أمر" في قائمة.

إضافة أمر قائمة إلى VSIX

تجميع الخاصة بك سوف تكون موجودة في Visual Studioملحق (VSIX) حيث أنه يمكن تثبيت.

إلى إضافة أمر قائمة الخاصة بك إلى مشروع VSIX

  1. قم بإنشاء مشروع VSIX، إلا إذا كان الحل بالفعل واحد.

    1. في مستكشف الحل، يمين-انقر فوق الحل أشر إلى إضافةوثم انقر فوق مشروع جديد.

    2. تحت القوالب المثبتة، توسيع Visual C#‎ أو من Visual أساسى، ثم انقر فوق الامتداد. في العمود وسط، انقر فوق مشروع VSIX.

  2. تعيين مشروع VSIX كـ مشروع بدء التشغيل للحل.

    في "مستكشف الحل"، انقر نقراً مزدوجاً فوق مشروع VSIX ثم ثم انقر فوق تعيين مشروع كـ بدء التشغيل.

  3. في source.extension.vsixmanifest، تحت المحتوى، قم بإضافة مشروع مكتبة الفئات MEF مكوّن.

    1. source.extension.vsixmanifest بفتح

    2. انقر فوق إضافة محتوى .

    3. تحديد نوع محتوى، حدد مكوّن MEF .

    4. تحديد مصدر بيانات، انقر فوق مشروع و حدد اسم المشروع مكتبة الفئات.

  4. انقر فوق تحديد إصدارات واختر Visual Studioالإصدارات التي تريدها الملحق إلى تعمل على.

  5. قم بتعيين الاسم و حقول VSIX وصفية. احفظ الملف.

تنفيذ الأمر في قائمة

لأغراض الاختبار، قم بتنفيذ الأمر الخاص بك في يصحح الالوضع.

إلى اختبار أمر قائمة

  1. اضغط F5، أو من قائمة تصحيح ، انقر فوق تصحيح يبدأ .

    نسخة تجريبية عن Visual Studioيبدأ.

    استكشاف الأخطاء وإصلاحها: إذا كان جديد Visual Studioلم البدء، تأكد من مشروع VSIX هو تعيينها كمشروع بدء التشغيل للحل.

  2. في تجريبية Visual Studioأو فتح أو إنشاء مشروع لبناء، وفتح أو إنشاء بناء مخطط. استخدام مخطط التي ينتمي إليها واحد الأنواع المدرجة في سمات فئة أوامر قائمة الخاصة بك.

  3. ينقر على اليمين في أي مكان تشغيل مخطط. يجب أن يظهر الأمر في قائمة.

    استكشاف الأخطاء وإصلاحها: إذا لم يظهر الأمر تشغيل قائمة المختصرة، تأكد من أن:

    • مشروع أمر قائمة هو lهوted كمكون MEF في lهوt المحتوى في source.extensions.manifestفي مشروع VSIX.

    • معلمات Importو Exportالسمات الصالحة.

    • QueryStatusأسلوب هو لم يتم تعيين command.EnabledأوVisibleحقول المرادfalse.

    • نوع مخطط للطراز الذي تستخدمه (فئة UML التسلسل وهكذا) هو الأمر lهوted كواحدة قائمة السمات الفئة [ClassDesignerExtension], [SequenceDesignerExtension] وهكذا.

تنفيذ أمر قائمة

فئة أمر قائمة بتنفيذ الأساليب المطلوبة ل ICommandExtension.

string Text { get; }

أعد التسمية لعنصر القائمة الخاص بك.

void QueryStatus(IMenuCommand command);

يتم استدعائه عندما يقوم المستخدم بالنقر بزر الماوس الأيمن فوق المخطط .

هذا الأسلوب لا يجب أن يغيّر الطراز.

استخدم DiagramContext.CurrentDiagram.SelectedShapes لتحديد ما إذا كنت تريد للأمر أن يظهر و يتم تمكينه.

عيّن:

  • command.Visible إلىtrue إذا كان الأمر يجب أن يظهر في القائمة عندما ينقر المستخدم بزر الماوس الأيمن فوق المخطط

  • command.Enabled إلىtrue إذا كان المستخدم يمكنه النقر على الأمر في القائمة

  • command.Text لتعيين تسمية القائمة بشكل حيوي

void Execute (IMenuCommand command);

يتم استدعاؤه عندما يقوم المستخدم بالنقر فوق عنصر القائمة الخاص بك ، إذا كان مرئياً و ممكّناً.

 

الوصول إلى الطراز في التعليمات البرمجية

تضمين التعريفات التالية في فئة أمر القائمة الخاصة بك:

[Import] public IDiagramContext DiagramContext { get; set; }

...

تعريف IDiagramContext يسمح لك بكتابة تعليمات برمجية في الأساليب الخاصة بك تصل إلى المخطط ، و التحديد الحالي, والطراز:

IDiagram diagram = this.DiagramContext.CurrentDiagram;
foreach (IShape<IElement> shape in diagram.GetSelectedShapes<IElement>())
{ IElement element = shape.Element; ... }
IModelStore modelStore = diagram.ModelStore;
IModel model = modelStore.Root;
foreach (IElement element in modelStore.AllInstances<IUseCase>()) {...}

التنقل و تحديث الطراز

تتوفر الجميع عناصر طراز UML عبر API. من التحديد الحالي أو من جذر الطراز, يمكنك الوصول إلى كافة العناصر الأخرى. للمزيد من المعلومات، راجع كيفية القيام بما يلي: الانتقال في طراز UML وبرمجة بإستخدام API UML.

إذا كنت تقوم بالتعامل مع رسم تخطيطي تسلسل، انظر أيضاً كيفية القيام بما يلي: قم بتحرير "الرسومات التخطيطية للتسلسل" استخدام API ل UML.

API يسمح لك أيضاً بتغيير خصائص العناصر, و حذف عناصر و علاقات, و إنشاء عناصر و علاقات جديدة.

بشكل افتراضي، كل تغيير تفعله في أسلوب "التنفيذ" الخاص بك سيتم تنفيذه في عملية منفصلة. سيتمكن المستخدم من التراجع عن كل تغيير بشكل منفصل. إذا كنت ترغب في تجميع التغييرات في عملية واحدة, استخدام ILinkedUndoTransaction كما هو موضح في كيفية القيام بما يلي: ربط تحديثات طراز باستخدام العمليات.

استخدام مؤشر ترابط واجه المستخدم للتحديثات

في بعض الحالات قد يكون مفيداً إلى إجراء تحديثات إلى الطراز من مؤشر ترابط الخلفية. على سبيل المثال، إذا كان الأمر الخاص بك بتحميل بيانات من مورد بطيئة، يمكنك إجراء التحميل في مؤشر ترابط brackground حيث يمكن مستخدم من مشاهدة التغييرات التي تمت أثناء تكون قيد التقدم، وقم بإلغاء الأمر تشغيل إذا كان ذلك هو الضرورية.

ومع ذلك، يجب أن تكون على علم بتخزين الطراز هو مسار غير التنفيذ آمن. يجب دوماً استخدام مؤشر ترابط لواجهة مستخدم بإجراء تحديثات، وإذا كان ممكناً، قم بمنع مستخدم من إجراء عمليات التحرير أثناء عملية الخلفية. على سبيل المثال ، راجع كيفية القيام بما يلي: قم بتحديث لطراز UML من الخلفية لمؤشر الترابط.

تثبيت و إلغاء تثبيت ملحق

يمكنك تثبيت ملحق Visual Studio على كل من الكمبيوتر الخاص بك و أجهزة الكمبيوتر الأخرى.

لتثبيت ملحق

  1. في جهاز الكمبيوتر، ابحث عن .vsixالملفات التي تم إنشاؤها بواسطة مشروع VSIX الخاص بك.

    1. في مستكشف الحلول، يمين-انقر فوق مشروع VSIX وثم انقر فوق فتح مجلد في مستعرض Windows.

    2. حدد موقع الملف bin\*\ YourProject**.vsix**

  2. انسخ الملف .vsix إلى الكمبيوتر الهدف الذي تريد تثبيت الملحق عليه. يمكن أن يكون هذا الكمبيوتر الخاص بك أو آخر.

    يجب أن يكون لدى الكمبيوتر الهدف أحد إصدارات Visual Studio التي حددتها في source.extension.vsixmanifest.

  3. على الكمبيوتر الهدف, انقر نقرا مزدوجا على الملف .vsix .

    مثبت ملحقات Visual Studio يفتح ويقوم بتثبيت الملحق.

  4. شغّل أو أعد تشغيل Visual Studio.

لإلغاء تثبيت ملحق

  1. في القائمة أدوات , انقر فوق مدير الملحقات.

  2. وسِّع الملحقات المثبّتة.

  3. حدّد الملحق ، ثم انقر فوق إلغاء التثبيت.

نادراً، ملحق به خلل يفشل في التحميل و يقوم بإنشاء تقرير في نافذة الأخطاء, و لكن لا يظهر في "مدير الملحقات". في هذه الحالة، يمكنك إزالة الملحق عن طريق حذف الملف من:

LocalAppData**\Microsoft\VisualStudio\10.0\Extensions**

المثال

يُظهِر المثال التالي التعليمات البرمجية لأمر قائمة سوف يتبادل أسماء عنصرين على مخطط فئة. يجب بناء هذه التعليمات البرمجية في مشروع ملحق Visual Studio وتثبيتها كما هو موضح في الأقسام السابقة.

using System.Collections.Generic; // for IEnumerable
using System.ComponentModel.Composition;
  // for [Import], [Export]
using System.Linq; // for IEnumerable extensions
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
  // for IDiagramContext
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
  // for designer extension attributes
using Microsoft.VisualStudio.Modeling.Diagrams;
  // for ShapeElement
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
  // for IGestureExtension, ICommandExtension, ILinkedUndoContext
using Microsoft.VisualStudio.Uml.Classes;
  // for class diagrams, packages

/// <summary>
/// Extension to swap names of classes in a class diagram.
/// </summary>
namespace SwapClassNames
{
  // Declare the class as an MEF component:
  [Export(typeof(ICommandExtension))]
  [ClassDesignerExtension]
  // Add more ExportMetadata attributes to make
  // the command appear on diagrams of other types.
  public class NameSwapper : ICommandExtension
  {
  // MEF required interfaces:
  [Import]
  public IDiagramContext Context { get; set; }
  [Import]
  public ILinkedUndoContext LinkedUndoContext { get; set; }

  /// <summary>
  /// Swap the names of the currently selected elements.
  /// </summary>
  /// <param name="command"></param>
  public void Execute(IMenuCommand command)
  {
    // Get selected shapes that are IClassifiers -
    // IClasses, IInterfaces, IEnumerators.
    var selectedShapes = Context.CurrentDiagram
     .GetSelectedShapes<IClassifier>();
    if (selectedShapes.Count() < 2) return;

    // Get model elements displayed by shapes.
    IClassifier firstElement = selectedShapes.First().Element;
    IClassifier lastElement = selectedShapes.Last().Element;

    // Do the swap in a transaction so that user
    // cannot undo one change without the other.
    using (ILinkedUndoTransaction transaction =
    LinkedUndoContext.BeginTransaction("Swap names"))
    {
    string firstName = firstElement.Name;
    firstElement.Name = lastElement.Name;
    lastElement.Name = firstName;
    transaction.Commit();
    }
  }

  /// <summary>
  /// Called by Visual Studio to determine whether
  /// menu item should be visible and enabled.
  /// </summary>
  public void QueryStatus(IMenuCommand command)
  { 
    int selectedClassifiers = Context.CurrentDiagram
     .GetSelectedShapes<IClassifier>().Count();
    command.Visible = selectedClassifiers > 0;
    command.Enabled = selectedClassifiers == 2;
  }

  /// <summary>
  /// Name of the menu command.
  /// </summary>
  public string Text
  {
    get { return "Swap Names"; }
  }
  }

}

راجع أيضًا:

موارد أخرى

كيفية القيام بما يلي: تعريف و تثبيت ملحق طراز

طرازات متوسعه و مخططات

كيفية القيام بما يلي: تعريف معالج إيماءة على مخطط النمذجة

كيفية القيام بما يلي: تعريف عنصر مربع أدوات طراز مخصص

كيفية القيام بما يلي: تعريف قيود التحقق من صحة طرازات UML

كيفية القيام بما يلي: قم بتحرير "الرسومات التخطيطية للتسلسل" استخدام API ل UML

برمجة بإستخدام API UML