|
Es este ejemplo, la idea es mostrar como, hacer una encuesta,
que se comunique con CRM, por medio de los WebServices y que a partir
de la respuesta de la misma, pueda cerrar el caso ( incident ) , además
de almacenar los resultados en una tabla ( en una base separada ) para
luego hacer estadísticas sobre el resultado de las mismas.
Es una pagina asp.net que recibe como parámetro el "Nro de
Caso" (ticketnumber) de un caso (incident). Muestra el
Cliente, el Titulo y la Descripción del caso. Para ello se conecta al
WebService y hace un Query con el nro de caso y los ítems a elegir de
la encuesta. (En este caso en particular son 4 preguntas con 4 opciones
cada una) y un Botón "Enviar".
Al "Enviar"
(dependiendo del parámetro "CerrarEncuesta") crea una
resolución de caso, la asocia al caso, y envía la petición de
resolución por medio del servicio. Poniendo como descripción de la
resolución, la respuesta de la encuesta. Además, graba un registro en
la tabla de datos de la encuesta.
El
código:
Esta función, devuelve una instancia del
WebService, usando las credenciales
correspondientes. Private Function Login() As
CrmService
'
función Login () ' Toma los
parametros del Web.config, y se loguea en el webservice
Dim MyService As New
CrmService
Dim
CRMServiceUser As String =
ConfigurationSettings.AppSettings("CRMServiceUser") Dim CRMServicePass As String =
ConfigurationSettings.AppSettings("CRMServicePass") Dim CRMServiceDominio As String =
ConfigurationSettings.AppSettings("CRMServiceDominio")
' Si el parametro
CRMServiceUser esta vacio, '
utiliza las credenciales del usuario que lo está corriendo If IsNothing(CRMServiceUser)
Then
MyService.Credentials =
System.Net.CredentialCache.DefaultCredentials Else
MyService.Credentials = New
System.Net.NetworkCredential(CRMServiceUser, CRMServicePass,
CRMServiceDominio) End
If Return MyService End Function
Esta
función, retorna un caso (incident) a partir del Nro de Caso
(string) Private Function GetCaso(ByVal NroCaso As
String) As incident ' función
GetCaso () ' Parametros :
Numero de caso ( ticketnumber ) del caso que se quiere mostrar ' Retorna : un Caso ( incident
)
' DEfinir las
columnas a recibir Dim cols
As New ColumnSet
cols.Attributes = New String() {"title", "description", "customerid",
"ticketnumber", "ownerid", "statecode"} ' Definir las Condiciones Dim condition As New
ConditionExpression
condition.AttributeName = "ticketnumber" condition.Operator =
ConditionOperator.Like
condition.Values = New String() {NroCaso}
' Armar el filtro con las
condiciones Dim filter As New
FilterExpression
filter.FilterOperator = LogicalOperator.And filter.Conditions = New
ConditionExpression() {condition}
' Crear el Query
con las Columnas y el filtro
Dim query As New QueryExpression query.EntityName =
EntityName.incident.ToString
query.ColumnSet = cols
query.Criteria = filter
Try '
Ejecutar el query
Dim Casos As
BusinessEntityCollection = service.RetrieveMultiple(query)
If
Casos.BusinessEntities.Length = 1 Then
Dim caso As incident
caso = Casos.BusinessEntities(0)
Return caso
Else
Return Nothing
End If Catch e As Exception
Return Nothing
'Stop End Try End
Function
Esta función, recibe por parámetro el
caso (incident) y el texto que ira en la descripción. Retorna
Verdadero, si pudo cerrar el caso. Podría no poder hacerlo si
se encuentra Actividades pendientes, en el caso. O si es caso ya
estuviera cerrado. Private Function
CloseCaso(ByVal caso As incident, ByVal TxtEncuesta As String) As
Boolean ' función CloseCaso
() ' Parametros :
Caso ( incident ) que se quiere cerrar
'
TxtEncuesta : texto que se va a incluir
'
como descripcion del cierre del caso (incidentresolution) ' Retorna : True si OK
If caso.statecode.Value
<> IncidentState.Activo Then
Return False Else
Dim activity As New incidentresolution
activity.incidentid = New Lookup
activity.incidentid.type = EntityName.incident.ToString()
activity.incidentid.Value = caso.incidentid.Value
activity.ownerid = New Owner
activity.ownerid.type = EntityName.systemuser.ToString()
activity.ownerid.Value = caso.ownerid.Value
activity.subject = SUBJECT_RESULUCION_CASO
activity.description = TxtEncuesta.ToString
Dim closeReq As New CloseIncidentRequest
closeReq.IncidentResolution = activity
closeReq.Status = -1
' Cierra el caso
Try
Dim stateSet As CloseIncidentResponse =
CType(service.Execute(closeReq), CloseIncidentResponse)
Return True
Catch e As Exception
'Stop
Return False
End Try
End
If
End Function
|