How-To: Создание собственного UserControl для SCSM 2010 SP1 | Записки свободного админа.. (https://freemanru.wordpress.com/xmlrpc.php) (//ced.sascdn.com) (//s0.wp.com) (//s.pubmine.com) (//x.bidswitch.net) (//static.criteo.net) (//ib.adnxs.com) (//aax.amazon-adsystem.com) (//bidder.criteo.com) (//cas.criteo.com) (//gum.criteo.com) (//ads.pubmatic.com) (//gads.pubmatic.com) (//tpc.googlesyndication.com) (//ad.doubleclick.net) (//googleads.g.doubleclick.net) (//www.googletagservices.com) (//cdn.switchadhub.com) (//delivery.g.switchadhub.com) (//delivery.swid.switchadhub.com) (//a.teads.tv) (//prebid.media.net) (//adserver-us.adtech.advertising.com) (//fastlane.rubiconproject.com) (//prebid-server.rubiconproject.com) (//hb-api.omnitagjs.com) (//mtrx.go.sonobi.com) (//apex.go.sonobi.com) (//u.openx.net) (Записки свободного админа.. » Лента) (https://freemanru.wordpress.com/feed/) (Записки свободного админа.. » Лента комментариев) (https://freemanru.wordpress.com/comments/feed/) (Записки свободного админа.. » Лента комментариев к «How-To: Создание собственного UserControl для SCSM 2010 SP1») (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/feed/) (https://s0.wp.com/_static/??-eJyNjtsKwjAMhl/IGqfg4UJ8lm4NpVu6lCZ1+PZ2IgwUpjeB//D9BKZkOh4VR4WW2JtExYdRYOLsrBPTkRVBgU4WT6LNuq3OBn7g4IlbS/91a4A55SBo7vsvJJYFCM6jVqDUlIeAhuwEijGR1fqr6INwbaBHTbYb3hoi83xcoQpnnEecSSz6odYmKQy4DL/UXL/Fa3PaHZv9obmc+yfijomd&cssminify=yes) (https://s0.wp.com/wp-content/plugins/gutenberg-core/v17.6.0/build/block-library/style.css?m=1706747918i&cssminify=yes) (https://s0.wp.com/_static/??-eJzTLy/QzcxLzilNSS3WzyrWz01NyUxMzUnNTc0rQeEU5CRWphbp5qSmJyZX6uVm5uklFxfr6OPTDpRD5sM02efaGpoZmFkYGRuZGmQBAHPvL0Y=&cssminify=yes) (https://s0.wp.com/_static/??-eJyVzDEOgCAMQNELiQU1Jg7Gs2AlDYpAaInx9ro5O/7hfbiywhTFRYEcKvnIQPXN1RVSa0h4MOxOssVDBXunKoqK34DlDq5F5gb+LIoVH4k/vpyzGYe+03oyw/4AcmU1KQ==&cssminify=yes) (https://s0.wp.com/_static/??/wp-content/mu-plugins/core-compat/wp-mediaelement.css,/wp-content/mu-plugins/wpcom-bbpress-premium-themes.css?m=1432920480j&cssminify=yes) (https://s0.wp.com/_static/??-eJx9jsEOAiEMRH9IrHpYvRi/BdiKrJQSKG78e2vigWhi0kNfO5MZWIvxnAWzAHVTUg8xN1hQivV3o6e1eKbPA4g5wwPzzBVsFyYrEv2PHFr14HpMs4qr66QZRJrRvnnrW9vAUEJuSNigdAeKWEuNDaHJM+GPdigckE1ibyVqwRHMNdlY/1krusRB1wCqGvBtutB5f9xNB53ptLwAevVxqw==&cssminify=yes) (https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes) (https://s0.wp.com/_static/??-eJyNjcEKwjAQRH/IuAYr9SJ+iqSbkKRudoObIP59W/EiXrwM82B4A89qULgFblC6qdRjZoU5tOrw/mEoIlv4TkFBk3sE77x/vWvmuEfVHfxvumVGUMHsyJBE0S/4sbUUyvqbBogkk6NtcC0XOx6O9jyeBjsvURNJIw==&cssminify=yes) (RSD) (https://freemanru.wordpress.com/xmlrpc.php?rsd) (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/) (https://wp.me/p17bn1-8l) (https://public-api.wordpress.com/oembed/?format=json&url=https%3A%2F%2Ffreemanru.wordpress.com%2F2011%2F07%2F01%2Fhow-to-usercontrol-for-scsm-2010-sp1%2F&for=wpcom-auto-discovery) (https://public-api.wordpress.com/oembed/?format=xml&url=https%3A%2F%2Ffreemanru.wordpress.com%2F2011%2F07%2F01%2Fhow-to-usercontrol-for-scsm-2010-sp1%2F&for=wpcom-auto-discovery) (https://secure.gravatar.com/blavatar/17c835effbfa4c30a151598099ebf09aac55392b9fbad6db59a8462b89143aaf?s=32) (https://secure.gravatar.com/blavatar/17c835effbfa4c30a151598099ebf09aac55392b9fbad6db59a8462b89143aaf?s=32) (https://secure.gravatar.com/blavatar/17c835effbfa4c30a151598099ebf09aac55392b9fbad6db59a8462b89143aaf?s=114) (https://freemanru.wordpress.com/?openidserver=1) (https://freemanru.wordpress.com/) (https://freemanru.wordpress.com/osd.xml) (Записки свободного админа..) (https://s1.wp.com/opensearch.xml) (WordPress.com) (https://s0.wp.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b) (https://s0.wp.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?m=1363304414i&ver=3.0.9b) (https://0.gravatar.com/js/hovercards/hovercards.min.css?ver=202406131f6b765e798866d728f95661b78bbf269c86482ffff0fa8c08e18a1a65cc89) (https://s0.wp.com/wp-content/mu-plugins/actionbar/actionbar.css?v=20240115) (https://freemanru.wordpress.com/) Записки свободного админа.. OpsMgr, SCSM и все-все-все… Search: () (Перейти) (https://freemanru.wordpress.com/) Главная (https://freemanru.wordpress.com/about/) About (https://freemanru.wordpress.com/feedback/) Обратная связь\Feedback (https://freemanru.wordpress.com/feed/) Записи (https://freemanru.wordpress.com/comments/feed/) Комментарии (https://freemanru.wordpress.com/category/scsm/) SCSM (https://freemanru.wordpress.com/category/scsm/%d0%bd%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8/) Новости (https://freemanru.wordpress.com/category/sharepoint-wss/) Sharepoint / WSS (https://freemanru.wordpress.com/category/scom-2007/) SCOM 2007 (https://freemanru.wordpress.com/category/%d1%80%d0%b0%d0%b7%d0%bd%d0%be%d0%b5-%d0%be%d0%b1-it/) Разное об IT (https://freemanru.wordpress.com/category/%d0%b2%d0%b8%d1%80%d1%82%d1%83%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8fhyper-v/) Виртуализация/Hyper-V (https://freemanru.wordpress.com/category/sccm-2007/) SCCM 2007 (https://freemanru.wordpress.com/category/dcs-lua/) DCS & Lua (https://freemanru.wordpress.com/category/exchange-2003/) Exchange 2003 (https://freemanru.wordpress.com/category/opalis/) Opalis (https://freemanru.wordpress.com/2011/05/21/scsm-2010-sp1-cu2-released/) ← Вышел SCSM 2010 SP1 CU2 (https://freemanru.wordpress.com/2011/07/04/advanced-notification-in-scsm/) Сложные сценарии оповещения пользователей в SCSM → How-To: Создание собственного UserControl для SCSM 2010 SP1 01.07.2011 (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#comments) 2 комментария ВНИМАНИЕ! Описанные здесь техники в основном являются не документированными и не поддерживаемыми со стороны Microsoft. Информация предоставлена “как есть”, автор не несет ответственности за возможную потерю инфомрацию. Вступление Всё чаще я встречаю вопросы о том, как можно расширить функциональность SCSM с помощью собственных форм или контролов. Лично я предпочитаю не использовать полностью переписанные формы без крайней необходимости: это довольно большой объем работы, и при выходе новой версии продукта (выход намечен на Q4 2011 – Q1 2012) с почти 100% гарантией ваша форма перестанет работать. Контролы требуют меньше времени на разработку, а шанс, что они будут работать и в следующей версии продукта, довольно велик. Чтобы понимать, о чем пойдет речь в данной статье, необходимо иметь представление о следующих технологиях: WPF (Windows Presentation Foundation), в особенности Binding (http://msdn.microsoft.com/en-us/library/ms752914.aspx) DependencyProperty XML-схема пакета управления Итак, нам необходимо решить следующие задачи: Создать новый UserControl в Visual Studio Подключить этот контрол к форме Доставить библиотеку с контролом на все компьютеры с консолью SCSM Создание UserControl-а Для создания нового UserControl-а необходимо открыть Visual Studio, и выбрать новый проект WPF User Conrtol Library : (https://freemanru.files.wordpress.com/2011/07/image.png) (image) (image) Имя решения и имя класса могут быть любыми. После этого необходимо отредактировать название контрола. Затем необходимо подключить к проекту несколько библиотек: Microsoft.EnterpriseManagement.Core.dll (расположена в папке c:\Program Files\Microsoft System Center\Service Manager 2010\SDK Binaries на сервере SCSM) Microsoft.EnterpriseManagement.UI.Foundation.dll (расположена в папке c:\Program Files\Microsoft System Center\Service Manager 2010\) Microsoft.EnterpriseManagement.UI.SdkDataAccess.dll (расположена в папке c:\Program Files\Microsoft System Center\Service Manager 2010\) Если вы планируете использовать стандартные контролы SCSM вам также понадобиться подключить библиотеки Microsoft.EnterpriseManagement.UI.Controls.dll , Microsoft.EnterpriseManagement.UI.ExtendedControls.dll , Microsoft.EnterpriseManagement.UI.SMControls.dll и WPFToolKit.dll Все контролы, которые мы подключаем через расширение форм, обязаны иметь атрибут (http://msdn.microsoft.com/en-us/library/system.windows.markup.contentpropertyattribute.aspx) ContentProperty . С чем именно связано такое требование, мне выяснить не удалось, но такое требование обязательно. В связи с этим нам необходимо создать переменную, которую мы будем использовать в качестве значения для атрибута ContentProperty. Тип и название переменной могут быть любыми, но она должна быть определена с помощью (http://msdn.microsoft.com/en-us/library/ms752914.aspx) DependencyProperty . В итоге у вас должно получиться нечто, похожее на это: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 namespace SCSMControls { [ContentProperty( "SelectedItem" )] public partial class SCSMControl : UserControl, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public SCSMControl() { InitializeComponent(); } public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register( "SelectedItem" , typeof ( string ), typeof (SCSMControl), new UIPropertyMetadata( null , new PropertyChangedCallback(SCSMControl.OnSelectedItemChanged))); public string SelectedItem { get { return ( string ) base .GetValue(SelectedItemProperty); } set { base .SetValue(SelectedItemProperty, value); NotifyPropertyChanged( "SelectedItem" ); } } private static void OnSelectedItemChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) { //TODO } /// /// INotifyPropertyChanged implementation /// /// private void NotifyPropertyChanged( string propertyName) { if ( this .PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(propertyName)); } } } } Я также добавил интерфейс INotifyPropertyChanged, чтобы внешние компоненты могли подписываться на изменение свойств нашего контрола. Кроме этого, я показал как можно подписаться на изменение свойства нашего компонента. Иногда это бывает полезно. Но использовать оба эти подхода не обязательно. Теперь наш контрол можно добавлять на форму в SCSM, но он пока не делает ничего полезного. Для начала нужно отобразить какие-нибудь данные. В этом нам поможет такой мощный механизм WPF, как привязка (binding). Но чтобы использовать привязку, необходимо знать к каким свойствам привязываться. DataContext формы (а значит и нашего контрола) заполняется объектом типа IDataItem . Этот тип не документирован, поэтому вам придется исследовать его самим или поверить мне)). Объект типа IDataItem хранит в себе все свойства объекта, для которого открыта форма. Доступ к объектам осуществляется операцией взятия индекса ([]), а индексатором выступает внутреннее имя поля (или имя Type Projection). Несколько примеров: 1 2 3 4 IDataItem item = this .DataContext as IDataItem; string title = ( string )item[ "Title" ]; string status = ( string )(item[ "Status" ] as IDataItem)[ "DisplayName" ]; string affectedUser = ( string )(item[ "AffectedUser" ] as IDataItem)[ "DisplayName" ]; Как видно из примера, мы можем обращаться к вложенным свойствам полученных объектов также через IDataItem.Чтобы использовать эти значения в привязке, достаточно указать название свойства. Добавим на наш контрол несколько элементов: 1 2 3 4 5 6 7 8 < TextBox Name = "boxID" Grid.Column = "1" Grid.Row = "0" Text = "{Binding Path=$Id$, Mode=OneWay}" VerticalAlignment = "Center" HorizontalAlignment = "Stretch" IsReadOnly = "True" /> < TextBox Name = "boxName" Grid.Column = "1" Grid.Row = "1" Text = "{Binding Path=Id, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment = "Center" HorizontalAlignment = "Stretch" /> < TextBox Name = "boxAffectedUser" Grid.Column = "1" Grid.Row = "2" VerticalAlignment = "Center" HorizontalAlignment = "Stretch" IsReadOnly = "True" > < TextBox.Text > < Binding Path = "AffectedUser.DisplayName" Mode = "OneWay" FallbackValue = "No Affected User" /> TextBox.Text > TextBox > < TextBox Name = "boxItem" Grid.Column = "1" Grid.Row = "3" Text = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=SelectedItem}" VerticalAlignment = "Center" HorizontalAlignment = "Stretch" /> Здесь показаны несколько приемов привязки. В первом случае мы привязываемся к внутреннему идентификатору элемента (тип Guid). Во втором случае – к стандартному. Третий способ показывает, как можно задать текст для случая, если значение поля пустое. Заметьте, что это не значение по-умолчанию, а именно подстановка текста. Четвертый способ показывает, как можно сделать привязку к свойствам нашего контрола. Итак, наш контрол умеет отображать данные. Но не плохо бы научить его также и изменять данные. IDataItem не слишком хорошо подходит для манипуляции с объектами SDK, т.к. он содержит лишь информацию об одном объекте. Не плохо бы получить доступ к SDK, т.к. с помощью него мы можем производить любые манупуляции с данными. Это мы можем сделать следующим образом (см. функцию GetSession): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ContentProperty( "SelectedItem" )] public partial class SCSMControl : UserControl, INotifyPropertyChanged { EnterpriseManagementGroup mg; public event PropertyChangedEventHandler PropertyChanged; public SCSMControl() { InitializeComponent(); GetSession(); } void GetSession() { // Get the current session, more info: (http://blogs.technet.com/servicemanager/archive/2010/02/11/tasks-part-1-tasks-overview.aspx) http://blogs.technet.com/servicemanager/archive/2010/02/11/tasks-part-1-tasks-overview.aspx IServiceContainer container = (IServiceContainer)FrameworkServices.GetService( typeof (IServiceContainer)); IManagementGroupSession curSession = (IManagementGroupSession)container.GetService( typeof (IManagementGroupSession)); if (curSession == null ) throw new ValueUnavailableException( "curSession is null" ); mg = curSession.ManagementGroup; } } Итак, мы имеет доступ к SDK, давайте сделаем что-нибудь полезное. Н-р установим свойства по-умолчанию для нового объекта. Для этого нам необходимо получить объект IDataItem из DataContext, а затем установить свойства. Делать это в обработчике события FormLoaded не стоит – в этом момент DataContext еще не заполнен. Вместо этого мы подписываемся на изменение свойства DataContext, и когда там оказывается нужный нам объект – устанавливаем свойства: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 private void UserControl_DataContextChanged( object sender, DependencyPropertyChangedEventArgs e) { // wait binding if ( this .DataContext is IDataItem) { instance = ( this .DataContext as IDataItem); // If this is new incident, set some default properties if (( bool )instance[ "$IsNew$" ]) { instance[ "Title" ] = "WOW! Now we can set the default value for property!!!" ; instance[ "Description" ] = "And we can use SDK. Current management group: " + mg.Name; //IncidentTierQueuesEnum.Tier2 instance[ "TierQueue" ] = mg.EntityTypes.GetEnumeration( new Guid( "df3896f5-3145-0546-4d25-e485de6765af" )); } } } Обратите внимание на свойство $IsNew$ – оно определяет открыта ли форма для создание элемента (true) или для редактирования (false). Итак, на этом наш компонент полностью готов. Проект Vusial Studio 2010 с примером вы можете скачать в конце статьи. Добавление контрола на форму Теперь нам необходимо добавить наш контрол на форму. Для этого нам потребуется создать с помощью Authoring Tool новую модификацию для формы, а затем отредактировать её XML-код в любом редакторе. Чтобы добавить собственный контрол на форму необходимо: Создать новую модификацию формы. Как это сделать описано много где в сети, например (http://blogs.technet.com/b/servicemanager/archive/2011/01/14/customizing-forms-part-1-adding-a-new-user-picker-control-to-the-incident-form.aspx) здесь и (http://blogs.technet.com/b/servicemanager/archive/2011/01/14/customizing-forms-part-2-adding-the-affected-user-picker-to-the-change-request-form.aspx) здесь , а вот (http://blogs.technet.com/b/servicemanager/archive/2010/09/27/adding-a-customer-property-to-the-incident-class-and-form.aspx) здесь даже с видео Добавить на форму в место, где должен находится наш конрол, любой стандартный контрол, например Label Сохранить пакет управления, затем открыть его в любом текстовом редакторе. Найти секцию Forms, а в ней добавленный контрол. Заменить атрибуты Assembly и Type на данные нашего контрола. PublicKey можно узнать с помощью каманды sn.exe –T <путь к сборке> (находится в папке c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\). Можно (http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx) добавить эту команду в инструменты Visual Studio При необходимости, добавить другие свойства с помощью элемента Вот пример для формы инцидента: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 < Form ID = "CustomForm_650994d4_1a69_4f1a_975f_7d060b90a3f3" Accessibility = "Public" Target = "CustomForm_650994d4_1a69_4f1a_975f_7d060b90a3f3_TypeProjection" BaseForm = "Alias_cf5e40e8_e299_4731_9572_41860eb78176!System.WorkItem.Incident.ConsoleForm" TypeName = "Microsoft.EnterpriseManagement.ServiceManager.Incident.Forms.IncidentFormControl" > < Category >Form Category > < Customization > < AddControl Parent = "StackPanel206" Assembly = "PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type = "System.Windows.Controls.Label" Left = "92" Top = "14.2" Right = "0" Bottom = "0" Row = "0" Column = "0" /> < PropertyChange Object = "Label_1" Property = "HorizontalAlignment" > < NewValue >Left NewValue > PropertyChange > < PropertyChange Object = "Label_1" Property = "VerticalAlignment" > < NewValue >Bottom NewValue > PropertyChange > < PropertyChange Object = "Label_1" Property = "Content" > < NewValue >Custom control: NewValue > PropertyChange > < AddControl Parent = "StackPanel206" Assembly = "SCSMControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e2bef97f2bc99659" Type = "SCSMControls.SCSMControl" Left = "100.8" Top = "9.40000000000003" Right = "46" Bottom = "0" Row = "0" Column = "0" /> < PropertyChange Object = "SCSMControl_1" Property = "Width" > < NewValue >Auto NewValue > PropertyChange > < PropertyChange Object = "SCSMControl_1" Property = "Height" > < NewValue >Auto NewValue > PropertyChange > < PropertyChange Object = "SCSMControl_1" Property = "VerticalAlignment" > < NewValue >Bottom NewValue > PropertyChange > < PropertyChange Object = "SCSMControl_1" Property = "Margin" > < NewValue >0,0,0,0 NewValue > PropertyChange > < PropertyChange Object = "SCSMControl_1" Property = "SelectedItem" > < NewValue >Cool control NewValue > PropertyChange > Customization > Form > В итоге у меня получился вот такой контрол: (https://freemanru.files.wordpress.com/2011/07/image1.png) (image) (image) Для новых инцидентов автоматически заполняется Название и Группа подержки: (https://freemanru.files.wordpress.com/2011/07/image2.png) (image) (image) Доставка библиотеки Теперь нам необходимо скопировать нашу библиотеку на все рабочие станции с консолью SCSM. Хорошо, если их 3-4, а если их 50?100? А как потом обновлять эту библиотеку? Не самые приятные и простые вопросы. К счастью для нас, разработчики SCSM позаботились об этом. В SCSM существует так называемый бандл пакетов управления ((http://blogs.technet.com/b/servicemanager/archive/2009/09/04/introducing-management-pack-bundles.aspx) management pack bundle ). Данный тип пакетов управления может содержать в себе другие пакеты управления (как запечатанные, так и нет), а также различные сборки, изображения и прочие ресурсы. Необходимо лишь перед созданием бандла в пакете управления указать ссылку на ресурс (в нашем случае библиотека). Добавленные таки образом ресурсы копируются в локальный профиль пользователя, который запускает консоль, в папку %USERPROFILE%\AppData\Local\Microsoft\System Center Service Manager 2010\%GROUPNAME%\%MPVERSION% , где %GROUPNAME% – имя группы управления%MPVERSION% – версия пакета управления, который содержит ссылку на ресурс Нам достаточно добавить в конце нашего пакет управления ссылку на сборку: 1 2 3 4 5 6 LanguagePacks > < Resources > < Assembly ID = "SCSMControlAssembly" Accessibility = "Public" QualifiedName = "SCSMControl" FileName = "SCSMControl.dll" /> Resources > ManagementPack > а затем упаковать его в бандл. Для упаковки вы можете использовать скрипт по ссылке выше или мою утилиту (http://gallery.technet.microsoft.com/MPB-Maker-743f85b9) MPBMaker (перед упаковкой не забудьте скопировать библиотеку в ту же папку, где расположен пакет управления): MPBMaker.exe SCSMControlBundle “d:\Examples\Example.SCSMControl.xml” Полученный пакет необходимо импортировать в SCSM. Возникающие ошибки Если во время импортирования пакета управления вы получили ошибку вроде этой: : Failed to verify form: CustomForm_650994d4_1a69_4f1a_975f_7d060b90a3f3 The form base is not valid. Form CustomForm_650994d4_1a69_4f1a_975f_7d060b90a3f3 extends form System.WorkItem.Incident.ConsoleForm, which already has another extension (CustomForm_8c4ec25b_1dc3_4b58_bd43_7c8a83f619a0) то это означает, что форма уже модифицированна в другом пакете управления. Если после импортирования пакета ваш контрол выглядит вот таким образом: (https://freemanru.files.wordpress.com/2011/07/image3.png) (image) (image) то скорее всего вы забыли добавить атрибут ContentProperty. Заключение С помощью собственных контролов вы можете полностью контролировать поведение формы: Задавать значение по-умолчанию для свойств Изменять параметры других контролов (н-р отключать или включать обязательность полей) Отключать или прятать другие контролы на основе каких-то параметров или роли пользователя Скачать готовый проект с примером на Visual Studio, а также готовый пакет управления вы можете (https://skydrive.live.com/?cid=9e1589588902dbaa&sc=documents&uc=2&id=9E1589588902DBAA%211040#) здесь . Ваша оценка: i Rate This Share this: (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#print) (Нажмите для печати) Печать (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/?share=twitter&nb=1) (Нажмите, чтобы поделиться на Twitter) Twitter (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/?share=linkedin&nb=1) (Нажмите, чтобы поделиться на LinkedIn) LinkedIn Нравится Загрузка... Похожее (https://freemanru.wordpress.com/2011/04/12/scsm-2010-overview/) (SCSM 2010 или пробуем упорядочить мир) SCSM 2010 или пробуем упорядочить мир 12.04.2011 В "SCSM" (https://freemanru.wordpress.com/2010/12/05/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-scsm-2010-%d0%b2-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d0%b8-%d1%81-%d0%b2%d1%8b%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd%d0%bd/) (Установка SCSM 2010 в конфигурации с выделенным сервером БД) Установка SCSM 2010 в конфигурации с выделенным сервером БД 05.12.2010 В "SCSM" (https://freemanru.wordpress.com/2010/06/18/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-scsm-2010/) (Вышел локализованный SCSM 2010) Вышел локализованный SCSM 2010 18.06.2010 В "SCSM" Рубрика: (https://freemanru.wordpress.com/tag/scsm/) SCSM Tagged with (https://freemanru.wordpress.com/tag/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/) программирование , (https://freemanru.wordpress.com/tag/%d1%84%d0%be%d1%80%d0%bc%d1%8b/) формы , (https://freemanru.wordpress.com/tag/scsm/) SCSM , (https://freemanru.wordpress.com/tag/wpf/) WPF 2 Responses to How-To: Создание собственного UserControl для SCSM 2010 SP1 () SigmuS says: (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#comment-277) 02.02.2012 в 07:46 Очень познавательная статья. Особенно порадовала возможность делать обязательными другие поля на форме, например «Описание», бывает полезным. Есть один вопросик — после кастомизации МП можно ли его запечатать, потому что незапечатав его, не получится применять к расширенной форме шаблоны. (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/?replytocom=277#respond) Ответить () (https://freemanru.wordpress.com) freemanru says: (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#comment-278) 02.02.2012 в 13:27 Конечно можно. (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/?replytocom=278#respond) Ответить Оставьте комментарий (/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#respond) Отменить ответ (517) (0) (f77c8ccba4) () (c94684ef85) Δ (1707137772108) Поиск Поиск: () (Поиск) (http://twitter.com/scsmru) Верещалка (https://twitter.com/scsmru) Твиты от scsmru Свежачок (https://freemanru.wordpress.com/2011/08/16/validation-on-first-form-load/) Правила проверки контрола WPF при первой загрузке формы (https://freemanru.wordpress.com/2011/08/10/moooooving/) Блог по SCSM на новом месте (https://freemanru.wordpress.com/2011/07/07/search-in-views-issue/) Почему я не могу найти элемент в представлении SCSM? (https://freemanru.wordpress.com/2011/07/04/advanced-notification-in-scsm/) Сложные сценарии оповещения пользователей в SCSM (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/) How-To: Создание собственного UserControl для SCSM 2010 SP1 Tag Cloud (https://freemanru.wordpress.com/tag/addons/) addons (https://freemanru.wordpress.com/tag/c/) C# (https://freemanru.wordpress.com/tag/faq/) FAQ (https://freemanru.wordpress.com/tag/infopath/) InfoPath (https://freemanru.wordpress.com/tag/itil/) ITIL (https://freemanru.wordpress.com/tag/mof/) MOF (https://freemanru.wordpress.com/tag/opalis/) Opalis (https://freemanru.wordpress.com/tag/powershell/) Powershell (https://freemanru.wordpress.com/tag/sccm/) SCCM (https://freemanru.wordpress.com/tag/scsm/) SCSM (https://freemanru.wordpress.com/tag/sharepoint/) Sharepoint (https://freemanru.wordpress.com/tag/tsql/) TSQL (https://freemanru.wordpress.com/tag/wpf/) WPF (https://freemanru.wordpress.com/tag/xml/) XML (https://freemanru.wordpress.com/tag/%d0%bd%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8/) Новости (https://freemanru.wordpress.com/tag/%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f/) Обновления (https://freemanru.wordpress.com/tag/%d0%b2%d0%b5%d0%b1-%d0%bf%d0%be%d1%80%d1%82%d0%b0%d0%bb/) веб-портал (https://freemanru.wordpress.com/tag/%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81%d1%8b/) запросы (https://freemanru.wordpress.com/tag/%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f/) локализация (https://freemanru.wordpress.com/tag/%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d1%8b/) проблемы (https://freemanru.wordpress.com/tag/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/) программирование (https://freemanru.wordpress.com/tag/%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc/) программирование;решение проблем (https://freemanru.wordpress.com/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%87%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d1%8b/) рабочие процессы (https://freemanru.wordpress.com/tag/%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8f/) решения (https://freemanru.wordpress.com/tag/%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8/) ссылки (https://freemanru.wordpress.com/tag/%d1%84%d0%be%d1%80%d0%bc%d1%8b/) формы Архив (https://freemanru.wordpress.com/2011/08/) Август 2011 (https://freemanru.wordpress.com/2011/07/) Июль 2011 (https://freemanru.wordpress.com/2011/05/) Май 2011 (https://freemanru.wordpress.com/2011/04/) Апрель 2011 (https://freemanru.wordpress.com/2011/03/) Март 2011 (https://freemanru.wordpress.com/2011/02/) Февраль 2011 (https://freemanru.wordpress.com/2011/01/) Январь 2011 (https://freemanru.wordpress.com/2010/12/) Декабрь 2010 (https://freemanru.wordpress.com/2010/11/) Ноябрь 2010 (https://freemanru.wordpress.com/2010/09/) Сентябрь 2010 (https://freemanru.wordpress.com/2010/07/) Июль 2010 (https://freemanru.wordpress.com/2010/06/) Июнь 2010 (https://freemanru.wordpress.com/2010/05/) Май 2010 (https://freemanru.wordpress.com/2010/04/) Апрель 2010 (https://freemanru.wordpress.com/2010/02/) Февраль 2010 (https://freemanru.wordpress.com/2010/01/) Январь 2010 (https://freemanru.wordpress.com/2009/12/) Декабрь 2009 (https://freemanru.wordpress.com/2009/11/) Ноябрь 2009 (https://freemanru.wordpress.com/2009/10/) Октябрь 2009 (https://freemanru.wordpress.com/2009/09/) Сентябрь 2009 (https://freemanru.wordpress.com/2009/07/) Июль 2009 (https://freemanru.wordpress.com/2009/06/) Июнь 2009 (https://freemanru.wordpress.com/2009/05/) Май 2009 (https://freemanru.wordpress.com/2009/04/) Апрель 2009 (https://freemanru.wordpress.com/2009/03/) Март 2009 (https://freemanru.wordpress.com/2009/02/) Февраль 2009 (https://freemanru.wordpress.com/2009/01/) Январь 2009 (https://freemanru.wordpress.com/2008/12/) Декабрь 2008 (https://freemanru.wordpress.com/2008/11/) Ноябрь 2008 (https://freemanru.wordpress.com/2008/09/) Сентябрь 2008 (https://freemanru.wordpress.com/2008/08/) Август 2008 (https://freemanru.wordpress.com/2008/07/) Июль 2008 (https://freemanru.wordpress.com/2008/06/) Июнь 2008 (https://freemanru.wordpress.com/2008/05/) Май 2008 (https://freemanru.wordpress.com/2008/04/) Апрель 2008 (https://freemanru.wordpress.com/2008/03/) Март 2008 Blogroll (http://opsmgr.ru) OpsMgr.ru Мета (https://wordpress.com/start/ru?ref=wplogin) Регистрация (https://freemanru.wordpress.com/wp-login.php) Войти (https://freemanru.wordpress.com/feed/) Лента записей (https://freemanru.wordpress.com/comments/feed/) Лента комментариев (https://wordpress.com/) (Сайт работает на WordPress — современной персональной платформе для публикаций.) WordPress.com (https://wordpress.com/?ref=footer_blog) Блог на WordPress.com. (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/#comments) комментарий () Перепост () Подписаться () Подписано (https://freemanru.wordpress.com) () Записки свободного админа.. (Введите свой адрес электронной почты) (subscribe) (16488343) (https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/) (actionbar-follow) (008fbb7f41) (Подписаться) Подписаться Уже есть учётная запись WordPress.com? (https://wordpress.com/log-in?redirect_to=https%3A%2F%2Ffreemanru.wordpress.com%2F2011%2F07%2F01%2Fhow-to-usercontrol-for-scsm-2010-sp1%2F&signup_flow=account) Войдите в систему. (https://freemanru.wordpress.com) () Записки свободного админа.. (https://freemanru.wordpress.com/wp-admin/customize.php?url=https%3A%2F%2Ffreemanru.wordpress.com%2F2011%2F07%2F01%2Fhow-to-usercontrol-for-scsm-2010-sp1%2F) Настроить () Подписаться () Подписано (https://wordpress.com/start/) Регистрация (https://wordpress.com/log-in?redirect_to=https%3A%2F%2Ffreemanru.wordpress.com%2F2011%2F07%2F01%2Fhow-to-usercontrol-for-scsm-2010-sp1%2F&signup_flow=account) Войти (https://wp.me/p17bn1-8l) Копировать ссылку (http://en.wordpress.com/abuse/?report_url=https://freemanru.wordpress.com/2011/07/01/how-to-usercontrol-for-scsm-2010-sp1/) Сообщить об этом содержимом (https://wordpress.com/read/blogs/16488343/posts/517) View post in Reader (https://subscribe.wordpress.com/) Управление подписками () Свернуть эту панель (Принять и закрыть) Политика конфиденциальности и использования файлов сookie: Этот сайт использует файлы cookie. Продолжая пользоваться сайтом, вы соглашаетесь с их использованием. Дополнительную информацию, в том числе об управлении файлами cookie, можно найти здесь: (https://automattic.com/cookies/) Политика использования файлов cookie %d () ()