2012-06-13 43 views
1

我有使用crmservice.asmx從動態CRM 4.動力學crmservice ASMX和緩存

問題檢索聯繫人自定義應用:我尋找我的自定義應用程序的接觸,並不覺得。我去MSCRM並創建聯繫人。當我嘗試在我的自定義應用程序中重新搜索時,仍然無法找到聯繫人。

它必須緩存爲crmservice.asmx,因爲當我在10分鐘後嘗試時,可以在我的自定義應用程序中找到聯繫人。

但是,如何管理crmservice.asmx上的緩存設置?

我實例化

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 

代碼和獲取聯繫人

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 
+0

我想我們需要看你的代碼。這對我來說聽起來不像預期的行爲。 –

+0

添加了一些示例代碼 – Martin

回答

0

解決方法:通過使用Retrieve()而不是RetrieveMultiple()我一次接觸到聯繫人。

這意味着通過搜索其他列新創建的聯繫人,我無法立即訪問它(必須等待幾分鐘)。我必須使用contactid。

0

這只是一個建議,但我不認爲它與緩存某種聯繫的方法。可能的問題是權限問題或條件問題。我的意思是,如果您在以某位用戶的身份登錄CRM時創建了聯繫人,但是嘗試檢索其他CRM用戶下的以前創建的聯繫人。或者可能是您添加到條件列表中的其他列,可能某些來自它們的值不具備您想要的值。

+1

用戶是否與創建聯繫人的用戶執行對CRM的調用相同的用戶?不是,你可以嘗試將這個電話作爲測試。如果您只設置了聯繫並使ContactSeq爲空或空的,是否存在此問題?我想知道是否它可能與索引類似比較運算符有關。 – Nicknow

+0

謝謝@ThinkPlusPlus我會在一天結束時檢查這一點,並嘗試使用確切的值獲取聯繫人,而無需進行類似的比較。 – Martin