Microsoft CRM Houston
(800) 892-6143

Your Full Name:                  Your e-mail                   Comments

Implementation & Customization

'-------------MICROSOFT CRM 3.0 CREATE SERVICE ACTIVITY FROM CASE------------

Imports System

Imports System.Collections.Specialized

Imports System.IO

Imports System.Xml

Imports System.Xml.Xsl

Imports System.Xml.Serialization

Imports RelatedServiceActivity.CrmSdk

Imports RelatedServiceActivity.CrmMeta

Imports Microsoft.Crm.Callout

Public Class ServiceActivity

Public Shared Sub NewServiceActivity(ByVal CaseGuid As Guid, ByVal CourtDate As DateTime, _

ByVal Court As Guid, _

ByVal Owner As Guid, ByVal CaseTitle As String, ByVal CourtName As String, _

ByVal Client As Guid)

'-------------SETUP THE SERVICE------------------------------------------------------------

Dim service As New CrmService

service.Credentials = New System.Net.NetworkCredential("username", "password", "DOMAIN")

service.Url = "http://crm.daviddomain.com/mscrmservices/2006/crmservice.asmx"

Dim meta As New MetadataService

meta.Credentials = New System.Net.NetworkCredential("username", "password", "DOMAIN")

meta.Url = "http://crm.daviddomain.com/mscrmservices/2006/metadataservice.asmx"

'-------------SETUP A NEW SERVICE APPOINTMENT------------------------------------------------

Dim sa As New serviceappointment

'-------------SET THE SCHEDULED BEGIN AND END TIMES

sa.scheduledstart = New CrmDateTime

sa.scheduledend = New CrmDateTime

sa.scheduledstart.Value = CourtDate.ToLocalTime.ToString

'Set the duration, longer duration means more description on the service calendar

sa.scheduledend.Value = CourtDate.ToLocalTime.AddHours(4).ToString

'-------------FIND THE FACILITY WITH THE COURT REFERENCE USED IN THIS INCIDENT---------------

Dim FacilityCols As New ColumnSet

Dim FacFilter As New FilterExpression

Dim FacQuery As New QueryExpression

Dim FacCond As New ConditionExpression

Dim FacCollection As New BusinessEntityCollection

FacCond.AttributeName = "new_courtid"

FacCond.Operator = ConditionOperator.Equal

FacCond.Values = New Object() {Court}

FacFilter.Conditions = New ConditionExpression() {FacCond}

FacilityCols.Attributes = New String() {"name", "equipmentid"}

FacQuery.EntityName = EntityName.equipment.ToString

FacQuery.ColumnSet = FacilityCols

FacQuery.Criteria = FacFilter

FacCollection = service.RetrieveMultiple(FacQuery)

'--------------ADD THE FACILITY TO THE SERVICE ACTIVITY-----------------------------------------

If FacCollection.BusinessEntities.Length > 0 Then

Dim equip

For Each equip In FacCollection.BusinessEntities

'Creates a new Activity Party

Dim crtFac As New activityparty

'This assigns a value to the activity party

crtFac.partyid = New Lookup

crtFac.partyid.type = EntityName.equipment.ToString

crtFac.partyid.Value = New Guid(equip.equipmentid.value.ToString)

'this assigns the Activity Party to the service activity

sa.resources = New activityparty() {crtFac}

Exit For

Next

End If

'------------SET THE REGARDING VALUE OF THE SERVICE ACTIVITY---------------------------------------

sa.regardingobjectid = New Lookup

sa.regardingobjectid.Value = CaseGuid

sa.regardingobjectid.type = EntityName.incident.ToString

'------------SET THE REFERENCE TO THE CLIENT-------------------------------------------------------

Dim saCust As New activityparty

saCust.partyid = New Lookup

saCust.partyid.type = EntityName.contact.ToString

saCust.partyid.Value = Client

sa.customers = New activityparty() {saCust}

'------------BUILD THE SUBJECT OF THE SERVICE APPOINTMENT-------------------------------------------

'create the clinet entity

Dim tmpClient As New contact

'setup the columns that need to be retrieved

Dim clientCols As New ColumnSet

clientCols.Attributes = New String() {"fullname"}

tmpClient = service.Retrieve(EntityName.contact.ToString, Client, clientCols)

'create a copy of this case

Dim tmpCase As New incident

'Setup the temp case columns

Dim caseCols As New ColumnSet

caseCols.Attributes = New String() {"casetypecode", "new_ticketnumber", "statuscode"}

tmpCase = service.Retrieve(EntityName.incident.ToString, CaseGuid, caseCols)

'create the new subject

Dim subTicketNum As String = ""

Dim subClient As String = ""

Dim subViolation As String = ""

subTicketNum = tmpCase.new_ticketnumber

subClient = tmpClient.fullname

subViolation = tmpCase.casetypecode.name

'Add the subject

sa.subject = tmpCase.statuscode.name & " " & subClient & " " & "Ticket#" & subTicketNum & " " & subViolation

 

 

 

 

'-------------CREATE THE SERVICE ACTIVITY-----------------------------------------------------------------

Dim saID As Guid = service.Create(sa)

'-------------RETRIEVE THE SERVICE APPOINTMENT STATUS REASON VALUE--------------------------------------------

'Store the status name of the this case

Dim mapStatus As String = tmpCase.statuscode.name

Dim SETsaState As New SetStateServiceAppointmentRequest

'Retrieve all of the status options available on the service appointment

Dim statuscollection As New StatusAttributeMetadata

statuscollection = meta.RetrieveAttributeMetadata(EntityName.serviceappointment.ToString, "statuscode")

'-------------UPDATE THE SERVICE APPOINTMENT STATUS IF A MATCHING STATUS NAME IS FOUND--------------------

'Loop through until the integer value of the string mapping is found

For Each val As StatusOption In statuscollection.Options

If val.Description = mapStatus Then

SETsaState.EntityId = saID

SETsaState.ServiceAppointmentState = ServiceAppointmentState.Scheduled

SETsaState.ServiceAppointmentStatus = val.OptionValue

service.Execute(SETsaState)

End If

Next

 

 

 

 

End Sub

End Class

Training
Microsoft CRM 101
Microsoft CRM for Outlook
Microsoft CRM Advanced Find
Microsoft CRM Reports
Microsoft CRM Database
Microsoft CRM Web Services
Microsoft CRM JavaScript
Microsoft CRM Add-ons
Microsoft CRM Resources
Microsoft CRM Callouts
Microsoft CRM Workflow