none
SCSM 2012 R2. Рабочий процесс выполняется успешно, но результат отсутствует RRS feed

  • Общие обсуждения

  • Добрый день!

    Рабочий процесс запускается при обновлении статуса ручного действия. (В работе -> Завершено).

    Скрипт powershell такой: 

    import-module smlets 
    
    $nl = [System.Environment]::NewLine
    
    $Result = 'Successfully Implemented'
    $Activity = Get-SCSMObject -Class (Get-SCSMClass -Name System.WorkItem.Activity.ManualActivity$) -Filter "Id -eq $MAID"
    
    $Relations = (Get-SCSMRelationshipObject -ByTarget $Activity |?{$_.RelationshipID -eq "2da498be-0485-b2b2-d520-6ebd1698e61b"})
    
    $Relations | %{$SR = Get-SCSMObject -ID $_.SourceObject.Id;$Resolution = $SR.Notes + $nl + $Activity.Notes;$PropertyHash = @{"ImplementationResults" = $Result
    ; "Notes" = $Resolution};Set-SCSMObject -SMObject $SR -PropertyHashtable $PropertyHash}

    Задача скрипта такая - при переходе ручного действия в состояние выполнено необходимо скопировать значение поля Notes ручного действия в аналогичное поле Запроса на обслуживания, также необходимо установить значение поля "Результат реализации" в значение "Успешно реализовано".

    Рабочий процесс запускается и завершается без сбоя. Однако запрос на обслуживание не обновляется. 

    Если этот код выполнять из powershell, то запрос на обслуживание обновляется.

    Как исправить?

    18 декабря 2014 г. 9:18

Все ответы

  • Так... одну ошибку я нашел.

    Надо так: 

    $Result = Get-SCSMEnumeration -Name ServiceRequestImplementationResultsEnum.SuccessfullyImplemented


    18 декабря 2014 г. 9:50
  • Но проблема не в этом...

    можно ли преобразовать конструкцию:

    $Relations | %{$SR = Get-SCSMObject -ID $_.SourceObject.Id;$Resolution = $SR.Notes + $nl + $Activity.Notes;$PropertyHash = @{"ImplementationResults" = $Result
    ; "Notes" = $Resolution};Set-SCSMObject -SMObject $SR -PropertyHashtable $PropertyHash}

    к виду foreach или foreach-object?

     
    18 декабря 2014 г. 10:04
  • У стандартного способа создания РП с PowerShell есть одна очень не приятная особенность - даже если скрипт выдал ошибку, он всё равно будет выполнен. Выход - ставить try-catch блок и писать ошибку куда-нибудь (я обычно на этапе отладки пишу в файл).
    Можно еще поиграться с $erroractionpreference, но я не уверен в результате.

    Ну и очень полезно прогнать скрипт "руками", указав значение переменной

    >>можно ли преобразовать конструкцию
    С учетом, что % - это шортакт от foreach-object, ответ напрашивается сам собой )


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


    18 декабря 2014 г. 11:44
    Модератор
  • В том и дело, что скрипт "руками" прогоняется успешно - вместо $MAID я ему передаю что-то типа MA123.

    18 декабря 2014 г. 12:23
  • Возможно что сам service manager некорректно передает значение ID.

    Попробуйте первым же действием в скрипте записать в файл ID который получаете из SM.

    Была у меня такая история, долго мучался, оказалось что авторинг тул криво формирует XML, и параметр в скрипт не попадает.

    19 декабря 2014 г. 13:01
  • Присоединяюсь. Если вы создавали WF через Authoring Tool - попробуйте удалить его и создать заново желательно вместе с МР. Сам частенько натыкался на эти грабли. Для отладки WF желательно ВСЕ переменные передавать в какой нибуль текстовый файлик. Дальше все станет понятнее.

    26 декабря 2014 г. 9:07