Hi
Today I’d like to showcase a bit of XEO’s API to load, list and iterate instances of XEOModels, which are really basic activities while using the API, so let’s get started:
Loading an instance
You have the following choices when loading an instance
EboContext ctx = boApplication.currentContext().getEboContext(); //Load a specific BOUI, bypasses securities boObject.getBoManager().loadObject(ctx, "1234"); //Load a specific BOUI, respect securities boObject.getBoSecurityManager().loadObject(ctx,"1234"); //Load using a BOQL Query (query must return a single result) boObject.getBoManager().loadObject(ctx, "select Example where name = ?",new Objct[]{"name"}); //Load using the BOUI with the ObjectManager boApplication.getDefaultApplication().getObjectManager().loadObject(ctx, boui); //Instantiate the ManagerBean and load the object new boManagerBean().loadObject(ctx, boui);
Be aware that usually there are two paths when loading a boObject. Using the SecurityManager (which respects security policies) and the normal Manager (which bypasses security)
For listing you can do the following:
EboContext ctx = boApplication.currentContext().getEboContext(); //Select without arguments boObjectList.list(ctx, "select Example"); //Select with arguments boObjectList.list(ctx, "select Example where name = ?", new Object[]{"name"}); //Select with multiple options boObjectList.list(ctx, boql, args, page, pageSize, orderBy, fullText, letter_filter, userQuery, useSecurity, useCache); //Select using a Builder new boObjectListBuilder(ctx, "select Example where name = ? and other = ?").argsList("arg1","arg2").cache(false).pageSize(3).build(); //Use the builder without the new boObjectList.builder("select Example where name = ?").arg("name").build();
Listing functions also have a parameter to apply security policies or not.
In case you want to iterate a list you do the following.
boObjectList list = boObjectList.list(ctx, "select Example"); list.beforeFirst(); while (list.next()){ boObject current = list.getObject(); }
In case you want to iterate a collection attribute, do one of the following
bridgeHandler bridge = obj.getBridge("collection"); //Using a bridge handler directly bridge.beforeFirst(); while (bridge.next()){ boObject current = bridge.getObject(); } //Using an "iterator" boBridgeIterator it = bridge.iterator(); while (it.next()){ boObject current = it.currentRow().getObject(); }
That will be all, happy coding!