Public/Activity.ps1

#CreateNewActivityEntry
function Add-CrmActivityToCrmRecord{
# .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml
    [CmdletBinding()]
    PARAM(
        [parameter(Mandatory=$false)]
        [Microsoft.Xrm.Sdk.IOrganizationService]$conn,        
        [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord", ValueFromPipeline=$true)]
        [PSObject]$CrmRecord,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="NameWithId")]
        [string]$EntityLogicalName,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="NameWithId")]
        [guid]$Id,
        [parameter(Mandatory=$true, Position=3)]
        [string]$ActivityEntityType,
        [parameter(Mandatory=$true, Position=4)]
        [string]$Subject,
        [parameter(Mandatory=$true, Position=5)]
        [string]$Description,
        [parameter(Mandatory=$true, Position=6)]
        [string]$OwnerUserId,
        [parameter(Mandatory=$false, Position=7)]
        [hashtable]$Fields
    )
    begin
    {
        $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn'))
    }  
    process
    {
        if($CrmRecord -ne $null)
        {
            $EntityLogicalName = $CrmRecord.logicalname
            $Id = $CrmRecord.($EntityLogicalName + "id")
        }
        $entity = New-Object Microsoft.Xrm.Sdk.Entity($ActivityEntityType)
        $entity["subject"] = $Subject
        $entity["description"] = $Description
        $entity["regardingobjectid"] = New-Object Microsoft.Xrm.Sdk.EntityReference($EntityLogicalName, $Id)
        if(-not [string]::IsNullOrWhiteSpace($OwnerUserId))
        {
            $entity["ownerid"] = New-Object Microsoft.Xrm.Sdk.EntityReference("systemuser", ([Guid]$OwnerUserId))
        }
        if($Fields -ne $null)
        {
            foreach($field in $Fields.GetEnumerator())
            {  
                $entity[$field.Key] = $field.Value
            }
        }
        try
        {
            return $conn.Create($entity)
        }
        catch
        {
            throw
        }
    }
}

#CloseActivity
function Set-CrmActivityRecordToCloseState{
# .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml
    [CmdletBinding()]
    PARAM(
        [parameter(Mandatory=$false)]
        [Microsoft.Xrm.Sdk.IOrganizationService]$conn,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord")]
        [PSObject]$CrmRecord,
        [parameter(Mandatory=$true, Position=1, ParameterSetName="NameWithId")]
        [string]$ActivityEntityType,
        [parameter(Mandatory=$true, Position=2, ParameterSetName="NameWithId")]
        [guid]$ActivityId,
        [parameter(Mandatory=$true, Position=3)]
        [string]$StateCode,
        [parameter(Mandatory=$true, Position=4)]
        [string]$StatusCode
    )
    $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn'))   
    if($CrmRecord -ne $null)
    {
        $ActivityEntityType = $CrmRecord.logicalname
        $ActivityId = $CrmRecord.("activityid")
    }
    try
    {
        $entity = New-Object Microsoft.Xrm.Sdk.Entity($ActivityEntityType)
        $entity.Id = $ActivityId
        $entity["statecode"] = New-Object Microsoft.Xrm.Sdk.OptionSetValue([Int32]$StateCode)
        $entity["statuscode"] = New-Object Microsoft.Xrm.Sdk.OptionSetValue([Int32]$StatusCode)
        $conn.Update($entity)
    }
    catch
    {
        throw
    }
}