/ / Dynamics crmservice asmx e caching - asp.net, dinâmica-crm, dynamics-crm-4

Dinâmica asmx e armazenamento em cache - asp.net, dynamic-crm, dynamics-crm-4

Eu tenho um aplicativo personalizado que usa o crmservice.asmx para recuperar contatos da dinâmica crm 4.

O problema: Eu pesquiso o contato no meu aplicativo personalizado e não o encontro. Eu vou para o MSCRM e crio o contato. Quando eu tento pesquisar novamente no meu aplicativo personalizado, ainda não consigo encontrar o contato.

Tem que ser cache para o crmservice.asmx porque quando eu tento 10 minutos depois, o contato é encontrado no meu aplicativo personalizado.

Mas como gerencio as configurações de cache no crmservice.asmx?

Meu código para instanciar

Private Const CRMServiceUrl As String = "https://*****/mscrmservices/2007/crmservice.asmx"
Private Const MetadataServiceUrl As String = "https://*****/MSCRMServices/2007/MetadataService.asmx"
Private Const OrganizationName As String = "****"
Private Const Username As String = "****"
Private Const Password As String = "****"
Private Const Domain As String = "****"

Private ReadOnly _service As CrmService.CrmService
Private ReadOnly _metadataService As MetadataService.MetadataService


Public Sub New()
Dim crmServiceToken As New CrmAuthenticationToken()
crmServiceToken.AuthenticationType = Microsoft.Crm.Sdk.AuthenticationType.AD
crmServiceToken.OrganizationName = OrganizationName

Dim metadataServiceToken As New MetadataService.CrmAuthenticationToken()
metadataServiceToken.AuthenticationType = Microsoft.Crm.Sdk.AuthenticationType.AD
metadataServiceToken.OrganizationName = OrganizationName

Dim credentials As ICredentials = New NetworkCredential(Username, Password, Domain)

_service = New CrmService.CrmService()
_service.Url = CRMServiceUrl
_service.CrmAuthenticationTokenValue = crmServiceToken
_service.Credentials = credentials

_metadataService = New MetadataService.MetadataService()
_metadataService.Url = MetadataServiceUrl
_metadataService.CrmAuthenticationTokenValue = metadataServiceToken
_metadataService.Credentials = credentials
End Sub

e o método que obtém contatos

Public Function GetContact(ByVal request As GetContactRequest) As contact Implements ICRM.GetContact
Dim query As New QueryExpression()
query.EntityName = EntityName.contact.ToString()
query.ColumnSet = New AllColumns()

Dim condition As ConditionExpression
Dim expr As New List(Of ConditionExpression)

condition = New ConditionExpression()
condition.AttributeName = "statecode"
condition.[Operator] = ConditionOperator.Equal
condition.Values = New Object() {0}
expr.Add(condition)

If request.ContactId <> Guid.Empty Then
condition = New ConditionExpression()
condition.AttributeName = "contactid"
condition.[Operator] = ConditionOperator.Equal
condition.Values = New String() {request.ContactId.ToString}
expr.Add(condition)
End If
If Not String.IsNullOrEmpty(request.CustomerCode) Then
condition = New ConditionExpression()
condition.AttributeName = "new_orgcustomerno"
condition.[Operator] = ConditionOperator.Like
condition.Values = New String() {request.CustomerCode + "%"}
expr.Add(condition)
End If

If Not String.IsNullOrEmpty(request.ContactSeq) Then
condition = New ConditionExpression()
condition.AttributeName = "new_contact_seq"
condition.[Operator] = ConditionOperator.Like
condition.Values = New String() {request.ContactSeq + "%"}
expr.Add(condition)
End If


Dim filter As New FilterExpression()
filter.FilterOperator = LogicalOperator.[And]
filter.Conditions = expr.ToArray

query.Criteria = filter
Dim contacts As BusinessEntityCollection = _service.RetrieveMultiple(query)

If contacts.BusinessEntities.Length > 0 Then
Dim a As contact = DirectCast(contacts.BusinessEntities(0), contact)
Return a
Else
Return Nothing
End If
End Function

Respostas:

0 para resposta № 1

É apenas uma sugestão, mas eu não acho queestá relacionado de alguma forma com o armazenamento em cache. Possíveis problemas são emissão de permissões ou problemas de condições. Quero dizer, se você tiver criado contato quando tiver feito login no CRM como usuário, mas tentar recuperar contatos criados anteriormente sob outro usuário do CRM. pode haver colunas adicionais que você adicionou à lista de condições, algumas delas não têm aquele valor que você supõe estar lá.


0 para resposta № 2

resolvido: usando Retrieve () em vez de RetrieveMultiple () eu recebo o contato de uma só vez.

isso significa que, pesquisando o contato recém-criado por outras colunas, não consigo acessá-lo de uma só vez (tenho que esperar alguns minutos). Tenho que usar o contactid.