none
SCSM 2012 SP1. Работа со списками пользователей и передача в рабочий процесс "пакета" элементов RRS feed

  • Вопрос

  • Коллеги, проконсультируйте пожалуйста со следующей задаче. Прошу прощения, но скрины публиковать не даёт, потому кладу в виде ссылок.

    ДАНО:

    1. Создаю предложение запроса на обслуживание по стандартному шаблону SR;

    2. На этапе выбора типа приглашения выбираю «Результаты запроса»; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!148

    3. На настройке элемента «Результаты запроса» выбираю класс «Пользователь AD»; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!150

    4. Во вкладке «Отображение столбцов» выбираю «Имя пользователя»; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!149

    5. Во вкладке «Параметры» ставлю следующие галки и жму ОК; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!151

    6. Сопоставлений приглашения со свойствами не делаю; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!152

    7. Нажимаю «Далее» …. Завершаю создание приглашения;

    8.Открываю свой запрос на портале SSP, дохожу до момента выбора пользователей, выбираю нескольких и создаю запрос; https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!153

    9. В результате я получаю запрос, в которым есть следующие поля: https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!154

    И «затронутые элементы конфигурации» https://skydrive.live.com/redir?resid=DD4BD3AD28241F53!155

    ЗАДАЧА:

    «Вытащить» выбранных пользователей из запроса и передать на обработку в скрипт workflow или вообще куда-нибудь ещё.

    ВАРИАНТ РЕШЕНИЯ:

    В Authoring Tool, создаём новый рабочий процесс. Через свойство «Ввод данных пользователем» класса «Запрос на обслуживание» вытаскиваем строку вида

    <UserInputs>
    <UserInput Question="ttt" Answer="&lt;Values Count=&quot;3&quot;&gt;&lt;Value DisplayName=&quot;Ivanov, Nikolay&quot; Id=&quot;1dcf3362-117f-88ef-6bc7-254a425241ad&quot; /&gt;&lt;Value DisplayName=&quot;Petrov, Anton&quot; Id=&quot;bdaadbc9-5e45-e1b4-1b67-847d7b7e0203&quot; /&gt;&lt;Value DisplayName=&quot;Sidorov, Georgiy&quot; Id=&quot;5871cb9b-7c99-e35e-cf1f-b9f3ef6e5855&quot; /&gt;&lt;/Values&gt;" Type="System.SupportingItem.PortalControl.InstancePicker" />
    </UserInputs>

    Передаём её в Powershell, разбираем строку, вытаскиваем нужные имена, используем необходимые имена по назначению.

    ВОПРОСЫ:

    1. На сколько корректно данное решение?
    2. Единственно ли оно верное для данной задачи?
    3. Есть ли ещё варианты решений для запросов, в которых может фигурировать список одновременно из нескольких элементов конфигурации, с которыми в дальнейшем предпринимаются некоторые действия?
    4. Как использовать данные из «затронутые элементы конфигурации» (последняя картинка) если они не привязаны ни к одному свойству класса?



    • Изменено Dismantled 7 марта 2013 г. 13:35
    5 марта 2013 г. 12:57

Ответы

  • На мой взгляд, одно из самых простых решений оказалось таким:

    http://www.codeproject.com/Articles/61900/PowerShell-and-XML

    Это для передачи данных в классический Workflow и Powershell.

    С Get-SCSMObject и Get-SCSMRelationsClass и пр. толком так и не удалось разобратсья. Конкретных примеров найти не удалось, либо они на столько запутаны и подвыверчены, что разобраться в них без глубокого знания ХМЛ и Powershell не представляется возможным. Хотя, если Антон набросает тут пару строк ясного кода, исходя из моего примера и собственных рекомендаций (например как вытащить Petrov, Anton и присвоить его $username), то я буду очень благодарен. И думаю, не только я =).

    Оркестаротор пока не пробовал. Жду дистрибутива по партнёрке.

    • Помечено в качестве ответа Dismantled 12 марта 2013 г. 10:02
    12 марта 2013 г. 10:02
  • Отвечу сам себе.

    В случае с множеством записей с ИД "b73a6094-c64c-b0ff-9706-1822df5c2e82" (и любым другим ИД), в $Inc формируется массив. Соответственно и обращаться с ним следует, как с массивом. В нашем случае так:

    $Inc[0].TargetObject
    $Inc[1].TargetObject
    $Inc[2].TargetObject

    ...

    $Inc[n].TargetObject

    Соответственно, при необходимости обработать всё множество, необходимо использовать Циклы с индексом n.

    • Помечено в качестве ответа Dismantled 13 марта 2013 г. 19:29
    13 марта 2013 г. 19:29

Все ответы

  • 1. Корректно всё то, что работает ))
    2. Нет. См. п. 3.
    3. Я вообще плохо пониманию, зачем обрабатывать XML, когда всёравно все данные привязываются к отношениям так или иначе? Почему бы не использовать отношения, тем более, что можно привязывать к каким угодно отношениям (ссылка может не работать из РФ, пробуйте анонимные прокси )) или кэш гугла )
    4. Получать из отношений (Relationships).


    SCSMSolutions
    email: freemanru (at) gmail (dot) com

    7 марта 2013 г. 15:54
    Модератор
  • Антон, благодарю за ответ. Ссылка открывается (странно, почему где-то в РФ может не открываться, вроде там нет призывов к самоубийству, путём убийства себя об стену :)).

    ОК, мы получили Отношения. Как их дальше уместно (и максимально удобно) использовать? Через Ранбуки и Оркестратор? Если да, то не подкините наглядный примерчик, если не затруднит? Просто я в данный момент использую исключительно рабочие процессы, созданные в Авторинг Туле, а там я что-то не видел нигде упоминаний о Relationships. Судя по всему, для упрощения жизни, нужно скорее погружаться в осваивание Оркестратора и использование Ранбуков.

    7 марта 2013 г. 20:05
  • Да как угодно - через Workflow (это может быть оповещение или PowerShell), через Orchestrator. Ваш выбор.

    ЗЫ. Да, ссылка работает, это радует. Просто у них была проблема с хостером - он фильтровал некоторые пулы адресов по непонятным никому причинам.


    SCSMSolutions
    email: freemanru (at) gmail (dot) com

    9 марта 2013 г. 12:01
    Модератор
  • На мой взгляд, одно из самых простых решений оказалось таким:

    http://www.codeproject.com/Articles/61900/PowerShell-and-XML

    Это для передачи данных в классический Workflow и Powershell.

    С Get-SCSMObject и Get-SCSMRelationsClass и пр. толком так и не удалось разобратсья. Конкретных примеров найти не удалось, либо они на столько запутаны и подвыверчены, что разобраться в них без глубокого знания ХМЛ и Powershell не представляется возможным. Хотя, если Антон набросает тут пару строк ясного кода, исходя из моего примера и собственных рекомендаций (например как вытащить Petrov, Anton и присвоить его $username), то я буду очень благодарен. И думаю, не только я =).

    Оркестаротор пока не пробовал. Жду дистрибутива по партнёрке.

    • Помечено в качестве ответа Dismantled 12 марта 2013 г. 10:02
    12 марта 2013 г. 10:02
  • Хорошо я искал. Уже вторую неделю эти ссылки "курю".

    Import-Module SMLets
    $ServiceRequestID = "SR806"
    $ServiceRequest = Get-SCSMObject -Class (Get-SCSMClass -Name System.WorkItem.ServiceRequest$) -Filter "ID -eq $ServiceRequestID"
    $Inc = Get-SCSMRelationshipObject -BySource $ServiceRequest | ?{$_.RelationshipID -eq "b73a6094-c64c-b0ff-9706-1822df5c2e82"}
    $Inc.TargetObject

    Подскажите лучше почему в данном примере, если объектов с ИД "b73a6094-c64c-b0ff-9706-1822df5c2e82" находит больше одного, то $Inc.TargetObject не даёт результата? С одной записью прекрасно работает. Что нужно дописать в коде, чтобы с множеством срабатывало?



    • Изменено Dismantled 13 марта 2013 г. 15:26
    13 марта 2013 г. 15:25
  • Отвечу сам себе.

    В случае с множеством записей с ИД "b73a6094-c64c-b0ff-9706-1822df5c2e82" (и любым другим ИД), в $Inc формируется массив. Соответственно и обращаться с ним следует, как с массивом. В нашем случае так:

    $Inc[0].TargetObject
    $Inc[1].TargetObject
    $Inc[2].TargetObject

    ...

    $Inc[n].TargetObject

    Соответственно, при необходимости обработать всё множество, необходимо использовать Циклы с индексом n.

    • Помечено в качестве ответа Dismantled 13 марта 2013 г. 19:29
    13 марта 2013 г. 19:29