Functions/Update-DqEntity.ps1

Function Update-DqEntity
{
  <#
    .SYNOPSIS
      Deze functie update een enkele entiteit uit een DQ Monitor Webservice.
   
    .DESCRIPTION
      De Update-DqEntity functie geeft de mogelijkheid om een enkele entiteit te updaten uit een DQ Monitor Webservice.
      Voordat deze functie gebruikt wordt, zorg ervoor dat de Context is gezet via functie Set-DqContext.
   
    .PARAMETER Name
      De unieke naam van het entiteit zoals deze bekend is bij de DQ Monitor Webservice.
     
    .PARAMETER PluralName
      De meervoudsnaam van het entiteit zoals deze opgeslagen moet worden bij de DQ Monitor Webservice.
 
    .PARAMETER Description
      De omschrijving van het entiteit zoals deze opgeslagen moet worden bij de DQ Monitor Webservice.
 
    .PARAMETER EntityObject
      In plaats van individueel parameters opgeven van het entiteit (naam, meervoudsnaam omschrijving) en kan je via deze parameter het gehele object
      meegeven dat geüpdatet moet worden bij de DQ Monitor Webservice.
 
    .REMARKS
      Let op: Indien er nog controles aan een entiteit hangen is het niet mogelijk het entiteit te verwijderen.
      Zorg er eerst voor dat het entiteit niet meer wordt gebruikt.
 
    .INPUTS
      Geen.
   
    .OUTPUTS
      Geen.
   
    .EXAMPLE
      PS> Update-DqEntity -Name "Contract" -PluralName "Contracten" -Description "andere omschrijving"
      Entiteit 'entiteit' is geüpdatet.
      1 entiteit(en) opgevoerd.
 
    .EXAMPLE
      PS> Update-DqEntity -Name "Contract" -Description "andere omschrijving"
      Entiteit 'entiteit' is geüpdatet.
      1 entiteit(en) opgevoerd.
   
    .EXAMPLE
      PS> $Entiteit = Get-DqEntities -CustomOnly | Select -First 1
          $Entiteit.Description "Aangepaste omschrijving"
          $Entiteit | Update-DqEntity
 
      Entiteit 'entiteit' is geüpdatet.
      1 entiteit(en) opgevoerd.
 
    .LINK
      Set-DqContext
  #>


  [CmdletBinding(DefaultParameterSetName="ByEntityName")]
  Param(
    [Parameter(Mandatory=$True, ParameterSetName="ByEntityName", position=1)]
    [ValidateNotNullOrEmpty()]
    [String] $Name,

    [Parameter(Mandatory=$False, ParameterSetName="ByEntityName", position=2)]
    [ValidateNotNullOrEmpty()]
    [String] $PluralName,

    [Parameter(Mandatory=$False, ParameterSetName="ByEntityName", position=3)]
    [ValidateNotNullOrEmpty()]
    [String] $Description,

    [Parameter(Mandatory=$True, ParameterSetName="ByEntityObject", ValueFromPipeline, position=1)]
    [ValidateNotNull()]
    [PsCustomObject] $EntityObject
  )
  
  If ($PSCmdlet.ParameterSetName.Equals("ByEntityName"))
  { 
    $EntityObjects = Get-DqEntities -CustomOnly | Where-Object { $_.Name -eq $Name } 
    If (-not($EntityObjects))
    {
      Write-Host "Entiteit '$($Name)' kon niet worden gevonden." -ForegroundColor Red
      Return $False;
    }

    $EntityObject = $EntityObjects | Select -First 1
  }
  
  If (-not($EntityObject.IsCustom))
  {
    Write-Host "Entiteit '$($EntityObject.Name)' is geen eigen gemaakte entiteit. Wijzigen wordt niet ondersteund." -ForegroundColor Red 
    Return;
  }

  If (-not($PSBoundParameters.ContainsKey('PluralName')) -and -not($PSBoundParameters.ContainsKey('Description')))
  {
    Write-Warning "Er is geen waarde opgegeven die aangepast moet worden. Er zijn dan ook geen wijzigingen aangebracht."
    Return;
  }

  If (-not([String]::IsNullOrEmpty($PluralName)))
  {
    $EntityObject.PluralName = $PluralName 
  }

  If (-not([String]::IsNullOrEmpty($Description)))
  {
    $EntityObject.Description = $Description 
  }

  $EntitiesToUpload = @()
  $EntitiesToUpload += [PSCustomObject]@{
    Entity = [PSCustomObject] @{
      Name = $EntityObject.Name;
      PluralName = $EntityObject.PluralName;
      Description = $EntityObject.Description;
    }
  }

  Upload-EntitiesToApi -EntitiesToUpload $EntitiesToUpload
}