| Microsoft CRM
Houston (800) 892-6143 |
| Implementation & Customization |
'-------THIS EXAMPLE IS USED TO SYNCHRONIZE A SERVICE ACTIVITY TO CHANGES THAT TAKE PLACE '-------ON A CASE ENTITY '-------DESERIALIZE THE PREIMAGE XML INTO A DYNAMIC ENTITY Imports SystemImports System.Collections.SpecializedImports System.IOImports System.XmlImports System.Xml.XslImports System.Xml.SerializationImports ServiceSyncToCase.CrmSdkImports ServiceSyncToCase.CrmMetaImports Microsoft.Crm.CalloutImports RelatedServiceActivity.ServiceActivityPublic Class SyncService Inherits CrmCalloutBase Public Overrides Sub PostUpdate( _ ByVal userContext As CalloutUserContext, _ ByVal entityContext As CalloutEntityContext, _ ByVal preImageEntityXml As String, _ ByVal postImageEntityXml As String) Dim CourtDateChanged As New Integer'------------LOG THE PARAMETERS------------------------------------------------------------- Dim sw As New StreamWriter("c:\calloutlog.txt", True) With sw .Write(userContext.UserId) .Write(entityContext.EntityTypeCode) .Write(preImageEntityXml.ToString) .Write(postImageEntityXml.ToString) End Withsw.Close() '-------------SETUP THE SERVICE----------------------------------------------------------------- Dim service As New CrmServiceservice.Credentials = New System.Net.NetworkCredential("username", "password", "domain")service.Url = "http://crm.daviddomain.com/mscrmservices/2006/crmservice.asmx" Dim meta As New MetadataServicemeta.Credentials = New System.Net.NetworkCredential("username", "password", "domain")meta.Url = "http://crm.daviddomain.com/mscrmservices/2006/metadataservice.asmx" '---------------------------------------------------------------------------------------------- Dim preCase As New incident '----------------DESERIALIZE THE PREIMAGE XML INTO A DYNAMIC ENTITY----------------------------- Dim sr As TextReader = New StringReader(preImageEntityXml) Dim root As New XmlRootAttribute("BusinessEntity")root.[Namespace] = "http://schemas.microsoft.com/crm/2006/WebServices" Dim xmlSerializer As New XmlSerializer(GetType(BusinessEntity), root) Dim entity As CrmSdk.BusinessEntity = DirectCast(xmlSerializer.Deserialize(sr), BusinessEntity) Dim myDE As CrmSdk.DynamicEntity = CType(entity, DynamicEntity) '----------------DESERIALIZE THE POSTIMAGE XML INTO A DYNAMIC ENTITY----------------------------- Dim sr2 As TextReader = New StringReader(postImageEntityXml) Dim root2 As New XmlRootAttribute("BusinessEntity")root2.[Namespace] = "http://schemas.microsoft.com/crm/2006/WebServices" Dim xmlSerializer2 As New XmlSerializer(GetType(BusinessEntity), root2) Dim entity2 As CrmSdk.BusinessEntity = DirectCast(xmlSerializer.Deserialize(sr2), BusinessEntity) Dim myDE2 As CrmSdk.DynamicEntity = CType(entity2, DynamicEntity) '-----------LOOP THROUGH THE PRE IMAGE DYNAMIC ENTITY PROPERTY BAG----------------------------------------- Dim preCaseTitle As String Dim preCaseCourtDate As New CrmDateTime Dim preCaseStatusCode As New Status Dim preCaseStateCode As String
Dim i = 0 Dim sw2 As New StreamWriter("c:\calloutlog2.txt", True) For Each entityProperty As [Property] In myDE.Properties If entityProperty.Name = "title" Then '0 Dim [Property] As StringProperty = CType(entityProperty, StringProperty) preCaseTitle = [Property].Value sw2.WriteLine(i.ToString & ":" & preCaseTitle.ToString) ElseIf entityProperty.Name = "new_courtdate" Then '1 Dim [Property] As CrmDateTimeProperty = CType(entityProperty, CrmDateTimeProperty)preCaseCourtDate = [Property].Value sw2.WriteLine(i.ToString & ":" & preCaseCourtDate.Value.ToString) ElseIf entityProperty.Name = "statuscode" Then '2 Dim [Property] As StatusProperty = CType(entityProperty, StatusProperty)preCaseStatusCode = [Property].Value sw2.WriteLine(i.ToString & ":" & preCaseStatusCode.Value.ToString) ElseIf entityProperty.Name = "statecode" Then '3 Dim [Property] As StateProperty = CType(entityProperty, StateProperty)preCaseStateCode = [Property].value sw2.WriteLine(i.ToString & ":" & preCaseStateCode.ToString) Else With sw2.WriteLine(i.ToString & ":" & ":nothing here") End With End Ifi = i + 1 Next If Not i = 4 Thensw2.WriteLine(i.ToString & ":" & "Properties were missing in the preImage XML") End If 'sw2.Close() '-----------LOOP THROUGH THE POST IMAGE DYNAMIC ENTITY PROPERTY BAG----------------------------------------- Dim postCaseTitle As String Dim postCaseCourtDate As New CrmDateTime Dim postCaseStatusCode As New Status Dim postCaseStateCode As String 'Dim sw2 As New StreamWriter("c:\calloutlog2.txt") '&":"& For Each entityProperty2 As [Property] In myDE2.Properties If entityProperty2.Name = "title" Then Dim [Property] As StringProperty = CType(entityProperty2, StringProperty)postCaseTitle = [Property].Value sw2.WriteLine(i.ToString & ":" & postCaseTitle.ToString) ElseIf entityProperty2.Name = "new_courtdate" Then Dim [Property] As CrmDateTimeProperty = CType(entityProperty2, CrmDateTimeProperty)postCaseCourtDate = [Property].Value sw2.WriteLine(i.ToString & ":" & postCaseCourtDate.Value.ToString) '---------------COMPARE THE STATUS REASONS FIRST TO FIND OUT IF ANYTHING HAS CHANGED--------------------------------- If Not postCaseCourtDate.Value Is String.Empty Then If Not preCaseCourtDate.Value Is Nothing ThenCourtDateChanged = preCaseCourtDate.Value.ToString.CompareTo(postCaseCourtDate.Value.ToString) Else : CourtDateChanged = -1 End If If CourtDateChanged = -1 Then Dim thiscase As New incidentthiscase = service.Retrieve(EntityName.incident.ToString, entityContext.InstanceId, New AllColumns) Dim pccd As DateTime = postCaseCourtDate.Value.ToStringpccd = pccd.ToUniversalTime Dim tccid As New Guid(thiscase.new_courtid.Value.ToString) Dim tcoid As New Guid(thiscase.ownerid.Value.ToString) Dim tccustid As New Guid(thiscase.customerid.Value.ToString) '-----------STATUS UPDATE OF OLD SERVICE ACTIVITIES GOES HERE-------------------------------- 'PERFORM STATUS UPDATES ON ALL OF THE OPEN SERVICE ACTIVITIES PRIOR TO CREATING A NEW ONE 'FILTER EXPRESSION SHOULD FIND ALL SERVICE ACTIVITIES WHERE 'REGARDING = THISCASE.GUID 'STATUS = ACTIVE 'SET THE UPDATED SERVICE ACTIVITY STATUS TO: 'IF STATE OF THISCASE IS COMPLETED THEN DON'T PREPEND THE STRING STATUS WITH "RESET:" 'IF STATE OF THISCASE IS ACTIVE THEN PREPEND THE STRING WITH "RESET:" AND DO ALSO CREATE SERVICE ACTIVITY (CODE BELOW)'---ADD IF CONSTRUCTURE LOGIC TO PREVENT THE CREATION OF THIS SERVICE ACTIVITY IF THE POST '---IMAGE XML STATE IS SET TO INACTIVE '------WILL THE POST IMAGE XML CARRY FORTH A CLOSED STATUS????-------
NewServiceActivity(entityContext.InstanceId, pccd, tccid, tcoid, postCaseTitle.ToString, _ thiscase.new_courtid.name.ToString, tccustid)
sw2.WriteLine(i.ToString & ":" & "The courtdate has been reset to:" & pccd.ToString) Else : sw2.WriteLine(i.ToString & ":" & "The courtdate is the same:" & postCaseCourtDate.Value.ToString) End If Else : sw2.WriteLine(i.ToString & ":" & "The courtdate was set to empty") End If'-------------END OF COMPARE OF STATUS REASON FOR CREATE NEW IF THEY ARE DIFFERENT------------------------------ ElseIf entityProperty2.Name = "statuscode" Then Dim [Property] As StatusProperty = CType(entityProperty2, StatusProperty) postCaseStatusCode = [Property].Value sw2.WriteLine(i.ToString & ":" & postCaseStatusCode.Value.ToString) ElseIf entityProperty2.Name = "statecode" Then Dim [Property] As StateProperty = CType(entityProperty2, StateProperty)postCaseStateCode = [Property].value sw2.WriteLine(i.ToString & ":" & postCaseStateCode.ToString) End Ifi = i + 1 Next With sw2.WriteLine(i.ToString & ":" & ":nothing here") End Withsw2.WriteLine(i.ToString & ":" & "If nothing else then for each was skipped") sw2.Close()
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 | |
|
|
|