Creating a Service Activity from a Case

'-------------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
										

<<Back
Phone 1(888) 574-EASI | Email info@easiintl.com
Site Map
Copyright © 2010 | Enterprise Alliance Systems, Inc. | Microsoft Dynamics CRM Implementation and Customization | Houston, Texas

Valid XHTML 1.0 Transitional