user1664770
user1664770

Reputation: 3

Retrieve multiple accounts from Microsoft CRM 2011 Online

With Microsoft CRM 2011 online and using webservices, I am using below method in my Main.java using the OrganizationServiceStub class created by webservices call. The output retrieved no of records is -1 can someone help where I am going wrong. I want to retrieve the accounts where name begins with "Tel" without giving the accountid. I can see the data exists in CRM. Thanks

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();
}
}

Upvotes: 0

Views: 1483

Answers (2)

Vijay
Vijay

Reputation: 31

For Java, include this code snippet works for the above issue

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());
    }
}

Upvotes: 3

Greg Owens
Greg Owens

Reputation: 3878

Not sure how similar your EntityCollection object is to the .Net version in the SDK, however you need to specify ReturnTotalRecordCount in the query's PagingInfo in .Net for the TotalRecordCount property to have a value. Could you not instead check accounts.Entities.Count?

Note: I'm not a Java guy either...

Upvotes: 0

Related Questions