2012-09-12 46 views
0

在Microsoft CRM 2011聯機和使用webservices時,我在使用由webservices調用創建的OrganizationServiceStub類的Main.java中使用下面的方法。檢索到的輸出記錄的輸出是-1,有人可以幫助我出錯的地方。我想檢索名稱以「Tel」開頭的帳戶而不給予帳戶。我可以看到CRM中存在的數據。 感謝從Microsoft CRM 2011在線檢索多個帳戶

public static void getAccountDetails(OrganizationServiceStub service, ArrayOfstring fields) 
{ 
    try{ 
    ArrayOfanyType aa = new ArrayOfanyType(); 
    aa.setAnyType(new String[] {"Tel"}); 

    ConditionExpression condition1 = new ConditionExpression(); 
    condition1.setAttributeName("name"); 


    condition1.setOperator(ConditionOperator.BeginsWith); 
    condition1.setValues(aa); 

    ArrayOfConditionExpression ss = new ArrayOfConditionExpression(); 
    ss.setConditionExpression(new ConditionExpression[] {condition1}); 

    FilterExpression filter1 = new FilterExpression(); 
    filter1.setConditions(ss); 

    QueryExpression query = new QueryExpression(); 
    query.setEntityName("account"); 

    ColumnSet cols = new ColumnSet(); 
    cols.setColumns(fields); 
    query.setColumnSet(cols); 

    query.setCriteria(filter1); 

    RetrieveMultiple ll = new RetrieveMultiple(); 
    ll.setQuery(query); 

    RetrieveMultipleResponse result1 = service.retrieveMultiple(ll); 

    EntityCollection accounts = result1.getRetrieveMultipleResult(); 

    System.out.println(accounts.getTotalRecordCount());   
} 
catch (IOrganizationService_RetrieveMultiple_OrganizationServiceFaultFault_FaultMessage e) { 
    logger.error(e.getMessage()); 
    e.printStackTrace(); 
} 
catch (RemoteException e) { 
    logger.error(e.getMessage()); 
    e.printStackTrace(); 
} 
} 
+2

我不熟悉CRM 2011和Java的,但我無法看到任何明顯與查詢有關的錯誤。如果你刪除過濾器,你會得到任何結果返回? –

+1

另外,考慮執行帳戶,正在運行測試的用戶是否擁有Crm權限? –

+0

如果我通過帳戶ID,那麼它會返回值和其他詳細信息。我嘗試了所有可能的選擇。但每當我將它記錄爲-1記錄時。是的用戶是admin用戶,擁有所有權利。如果我使用演示示例,則可以創建,檢索,更新和刪除它。但是,如果我想只做檢索,它會返回-1。 – user1664770

回答

0

不知道你EntityCollection對象是多麼相似的.NET版本的SDK,但是您需要查詢的PagingInfo指定ReturnTotalRecordCount在.net爲TotalRecordCount屬性有一個值。你能否改爲檢查accounts.Entities.Count

注:我不是一個Java的傢伙要麼...

3

對於Java,包括該代碼段適用於上述問題

ArrayOfanyType aa = new ArrayOfanyType(); 
aa.setAnyType(new String[] {"555"}); 
ConditionExpression condition1 = new ConditionExpression(); 

condition1.setAttributeName("telephone1"); 

condition1.setOperator(ConditionOperator.BeginsWith); 
condition1.setValues(aa); 

ArrayOfConditionExpression ss = new ArrayOfConditionExpression(); 
ss.setConditionExpression(new ConditionExpression[] {condition1}); 

FilterExpression filter1 = new FilterExpression(); 
filter1.setConditions(ss); 

QueryExpression query = new QueryExpression(); 
query.setEntityName("account"); 

PagingInfo pagingInfo = new PagingInfo(); 
pagingInfo.setReturnTotalRecordCount(true); 

query.setPageInfo(pagingInfo); 

OrganizationServiceStub.ColumnSet colSet = new OrganizationServiceStub.ColumnSet(); 
OrganizationServiceStub.ArrayOfstring cols = new OrganizationServiceStub.ArrayOfstring(); 

cols.setString(new String[]{"name", "telephone1", "address1_city"}); 

colSet.setColumns(cols); 

query.setColumnSet(colSet); 
query.setCriteria(filter1); 

RetrieveMultiple ll = new RetrieveMultiple(); 
ll.setQuery(query); 

OrganizationServiceStub.RetrieveMultipleResponse response = serviceStub.retrieveMultiple(ll); 
EntityCollection result = response.getRetrieveMultipleResult(); 
ArrayOfEntity attributes = result.getEntities(); 

Entity[] keyValuePairs = attributes.getEntity(); 

for (int i = 0; i < keyValuePairs.length; i++) { 
    OrganizationServiceStub.KeyValuePairOfstringanyType[] keyValuePairss = keyValuePairs[i].getAttributes().getKeyValuePairOfstringanyType(); 
    for (int j = 0; j < keyValuePairss.length; j++) { 
     System.out.print(keyValuePairss[j].getKey() + ": "); 
     System.out.println(keyValuePairss[j].getValue()); 
    } 
} 
相關問題