Get all workgroups by owner

Which IIQ version are you inquiring about?

8.3

I’m trying to get all the workgroups by owner, but the results always come back empty. I’m doing this:


          Identity id = ...
          QueryOptions qo = new QueryOptions();
          //qo.setCloneResults(true);
          qo.addFilter(Filter.eq("owner.name", id.getName()));
          Iterator workgroups = context.search(Identity.class, qo);

          for (Identity workgroup : workgroups) 
          {
            if (workgroup.isWorkgroup())
            {
              //do stuff
              context.saveObject(workgroup);
            }
          }

          context.commitTransaction();

My logging indicates that the workgroups iterator has nothing. Is my query correct?

Hello @AJGibson76

Try to use below approach by query all workgroups, then filter in code:-

QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("workgroup", true));
Iterator<Identity> workgroups = context.search(Identity.class, qo);

while (workgroups.hasNext()) {
    Identity workgroup = workgroups.next();
    List owners = workgroup.getMulti("workgroupOwner");
    if (owners != null && owners.contains(id)) {
        // Found a workgroup owned by the identity
//do stuff
    }
}

[quote=“Andrew Gibson, post:1, topic:158868, username:AJGibson76”]

Identity id = ...
          QueryOptions qo = new QueryOptions();
          //qo.setCloneResults(true);
          qo.addFilter(Filter.eq("owner.name", id.getName()));
          Iterator workgroups = context.search(Identity.class, qo);

          for (Identity workgroup : workgroups) 
          {
            if (workgroup.isWorkgroup())
            {
              //do stuff
              context.saveObject(workgroup);
            }
          }

          context.commitTransaction();

[/quote]use below:

          QueryOptions qo = new QueryOptions();
          //qo.setCloneResults(true);
          qo.addFilter(Filter.eqFilter.eq("workgroup", true),Filter.eq("owner", id));
          Iterator workgroups = context.search(Identity.class, qo);
          while(workgroups.hasNext()){
              Identity identity=workgroups.next()
              if(null==identity){ continue; }
             //Do your stuff
         }

There is no ‘getMulti’ method on Identity?

Yes. No direct method on identity

Try this line

List owners = (List) workgroup.get("workgroupOwner");

Instead of using below
List owners = workgroup.getMulti("workgroupOwner");

Hi @AJGibson76 ,

Identity objects do not have an owner, whereas Workgroup objects do. To retrieve all Workgroups by a specific owner, apply the filter ‘workgroup is true’ and include the ‘owner.name’ parameter.

You can verify the owner of a Workgroup by opening the Workgroup object from the Debug page and checking the ‘owner’ tag.

The following logic returns all Workgroups where ‘spadmin’ is the owner. If no results are returned, it means the specified owner does not own any Workgroup.

Identity id = context.getObjectByName(Identity.class,"spadmin");
QueryOptions qo = new QueryOptions();
qo.addFilter(Filter.eq("workgroup", true));
qo.addFilter(Filter.eq("owner.name", id.getName()));
Iterator workgroups = context.search(Identity.class, qo);

while (workgroups.hasNext()) {
    Identity workgroup = workgroups.next();
    // add the logic
}

My final approach was very similar:

          QueryOptions qo = new QueryOptions();
          //qo.setCloneResults(true);
          Filter eq1 = Filter.eq("workgroup", true);
          Filter eq2 = Filter.eq("owner", id);
          qo.addFilter(Filter.and(eq1, eq2));
          Iterator<Identity> workgroups = context.search(Identity.class, qo);

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.