Querying for no related object on n-m relationship

Hi,
I have a n-m relationship between two objects A and B. I want to query all A objects that do not have a B (a.getB().isEmpty()). Is there a way to build an expression for that ?
I cannot use getField("B_FK").isNull as the foreign key is in a relationship table and I'd like to avoid using direct SQL, so I'm kind of stuck.
Thank you for any help you could provide me.
Bye.

The trick is to use a nested query, and think of the relationship in the other direction (i.e., not that A has many B's, but that B belongs to an A).
There is an example of something similar to this on page 1-32 of the 903 "Using TopLink Foundation Library Guide". The example shows a query to find all the Employees who manage more than 5 employees.
Here is a similar example I wrote recently to find all the HockeyTeams without any Players on them (sorry, it's NHL playoff time and I am Canadian.
=====================
ExpressionBuilder team = new ExpressionBuilder();
ExpressionBuilder player = new ExpressionBuilder();
ReportQuery subQuery =new ReportQuery(Player.class, player);
subQuery.addCount();
subQuery.setSelectionCriteria(player.get("team").equal(team));
Expression exp = team.subQuery(subQuery).equal(0);
ReadAllQuery q = new ReadAllQuery(HockeyTeam.class, exp);
Vector v = (Vector)serverSession.acquireClientSession().executeQuery(q);

Similar Messages

  • A simple query for an Account object *SOLUTION INSIDE*

    I've been trying to do a query to the Account object in CRM for release 16.
    This is the result after i run my app:
    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Server
    at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171)
    at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:102)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
    at $Proxy30.accountQueryPage(Unknown Source)
    at integra.universal.accountWS.AccountWS.<init>(AccountWS.java:145)
    at integra.universal.accountWS.AccountWS.main(AccountWS.java:162)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 10 seconds)
    My code is :
    crmondemand.xml.account.query.AccountQuery queryCuenta = new AccountQuery();
    //Definimos el query a traves de QueryType
    * Cada clase tiene su propia definicion de QueryType
    * por lo que hay que ir a la direccion crmondemand.xml.<i>tipo</i>.query.QueryType
    crmondemand.xml.account.query.QueryType qt = new QueryType();
    //Definimos el valor del query
    qt.setValue("LIKE 'Ivan*'");
    //Llamamos los parametros de cada query para definir los campos de busqueda
    queryCuenta.setAccountName(qt);
    * queryCuenta.setAccountType(qt);
    * queryCuenta.setCreatedBy(qt2);
    * etc etc
    //agregamos a ListOfAccountQuery los parametros de busqueda
    crmondemand.xml.account.query.ListOfAccountQuery laqlaq = new ListOfAccountQuery();
    laqlaq.setAccount(queryCuenta);
    laqlaq.setPagesize(new BigInteger("20"));
    AccountQueryPageInput aqpi = new AccountQueryPageInput();
    * Generamos los objetos que reciben el parametro de busqueda y que regresan el resultado.
    URL wsURL, wsURL2 = null;
    //I can create the connection np.
    Conexion conecta = new Conexion();
    String jSessionId = conecta.conectaSiebel();
    String wsLocation = "https://secure-ausomxcia.crmondemand.com/Services/Integration";
    try {
    wsURL = new URL(wsLocation + ";jsessionid=" + jSessionId);
    wsURL2 = new URL(wsURL, "file:/C:/Some/Dir/Account.wsdl");
    } catch (MalformedURLException ex) {
    Logger.getLogger(AccountWS.class.getName()).log(Level.SEVERE, null, ex);
    Account_Service as = new Account_Service(wsURL2, new QName("urn:crmondemand/ws/ecbs/account/10/2004", "Account"));
    Account cuenta = as.getAccount();
    AccountQueryPageOutput aqpo = new AccountQueryPageOutput();
    //Agregamos al query la lista de propiedades a buscarse.
    aqpi.setViewMode("Manager");
    aqpi.setListOfAccount(laqlaq);
    aqpi.setBookId("");
    aqpi.setBookName("");
    aqpi.setLOVLanguageMode("");
    //Obtenemos el resultado en un objeto de tipo AccounQueryPageOutput
    aqpo = cuenta.accountQueryPage(aqpi); //The execution stops on this line.
    //Wrapper de una lista de AccountData objects
    // crmondemand.xml.account.data.ListOfAccountData lad = aqpo.getListOfAccount();
    //Estructura de datos que contiene cada AccountData object
    // List<AccountData> listaDeResultados = lad.getAccount();
    //Aqui recorremos la lista de objetos de tipo AccountData
    // for (AccountData accountData : listaDeResultados) {
    // accountData.getAccountName(); //Devuelven Strings y tipos basicos.
    Any suggestions really appreciated : )
    Edited by: user10957396 on Apr 28, 2009 1:01 PM
    Edited by: user10957396 on May 25, 2009 8:55 AM

    Thanxs for your reply Venky. You was right, i had to use wsdl instead of wsdl2, but that didn't fix it.
    Since i'm using release 16 i'm kinda lost, even that i think you guys did an amazing job with the new Web Services api(v2.0).
    Correct me if i'm wrong but i should use a code like this:
    endpoint = "https://secure-ausomxdsa.crmondemand.com/Services/Integration" + ";jsessionid=" + jsessionid;
    URL urlAddr = new java.net.URL( endpoint);
    crmondemand.ws.contact.Contact service = new crmondemand.ws.contact.ContactLocator();
    crmondemand.ws.contact.Default_Binding_Contact stub = service.getDefault(urlAddr);
    crmondemand.ws.contact.ContactWS_ContactQueryPage_Input contactlist = new crmondemand.ws.contact.ContactWS_ContactQueryPage_Input();
    crmondemand.ws.contact.ContactWS_ContactQueryPage_Output outlist = new crmondemand.ws.contact.ContactWS_ContactQueryPage_Output();
    crmondemand.xml.contact.Contact[] contacts = new crmondemand.xml.contact.Contact[1];
    crmondemand.xml.contact.Contact contact = new crmondemand.xml.contact.Contact();
    crmondemand.xml.contact.Activity[] activities = new crmondemand.xml.contact.Activity[1];
    crmondemand.xml.contact.Activity activity = new crmondemand.xml.contact.Activity();
    activity.setSubject("");
    activity.setType("");
    activity.setRowStatusOld("");
    activities[0] = activity;
    contact.setContactLastName("='Wallmueller'");
    contact.setContactFirstName("");
    contact.setContactId("");
    contact.setListOfActivity(activities);
    contacts[0] = contact;
    contactlist.setPageSize("10");
    contactlist.setUseChildAnd("false");
    contactlist.setStartRowNum("0");
    contactlist.setListOfContact(contacts);
    outlist = stub.contactQueryPage(contactlist);
    crmondemand.xml.contact.Contact[] results =
    new crmondemand.xml.contact.Contact[1];
    results = outlist.getListOfContact();
    crmondemand.xml.contact.Activity[] activitiesout =
    new crmondemand.xml.contact.Activity[1];
    int lenC = results.length;
    if (lenC > 0) {
    for (int i = 0; i < lenC; i++) {
    System.out.println(results.getContactFirstName());
    System.out.println(results[i].getContactLastName());
    System.out.println(results[i].getContactId());
    int lenA = results[i].getListOfActivity().length;
    if (lenA > 0) {
    for (int j = 0; j < lenA; j++) {
    activitiesout = results[i].getListOfActivity();
    System.out.println(" " + activitiesout[j].getSubject() + ", " + activitiesout[j].getType());
    that i found here [http://www.webbasedcrmsoftware.com.au/crm-on-demand-tutorials/65-java-access-to-crm-on-demand|http://www.webbasedcrmsoftware.com.au/crm-on-demand-tutorials/65-java-access-to-crm-on-demand]
    for the release 15. Wich is almost the same code i'm using for the new release besides lists(that now are actually lists) and i think i don't need to use any bindings.
    In particular for Account i found that only the name is a required field, so i'm just using that field for the query.
    Thanks in advance.

  • How to set query for child View Object?

    I have a hGrid in standard page. Two View Objects are present connected using view link. I need to set where clause in the child View Object. The changes are not getting reflected when i set the where clause. Also when i try to fetch rowCount it returns 0 for child View Object. But i am able to get the value for parent View Object. Any suggestions please.

    Hi,
    This solution worked for me last time, Please create One blank row and delete that row(For Child VO).
    Why we are doing this? : Because the child vo pointer might not init. See this is not our fault, this is because of OA Framework. But this works for me :)
    Thanks,
    Shrikant

  • General Query for CO related to PS

    Hi CO's
      WBS has reciever PSG in settlement rule, after settlement where the effect will shown for PSG.
    If using Resourse related billing if we do settlement first cost will be picked up in billing?
    Regards,

    If the PSG is the settlement rule, It will be updated in COPA.
    As far as resource related billing, it depends on scenario we are doing.. Some times we can capture revenue alone or costs alone..
    Please expalin your scenario in detailed.. i can answer you..

  • Querying for large number of objects... searchspec limitation

    As part of a product i'm developing i may come across a scenario where i need to query for 100+ specific objects based on ids.
    I know the query input for WS 2.0 has a "searchspec" string field, but based on the sheer number of specific objects i need to query for i'm afraid the string may eventually get too large.
    Is there a way around this? Can i send multiple individual queries in a batch request? Can i add more than one search object to a single query page request? Anything?
    Thanks!
    -Kevin

    A few options available using the WS v2.0 Query methods:
    1. Use Arguments like page size and startrownumber arguments. This will allow you to specify the pagesize of the recordset to be returned and also the starting row number.
    2. The searchspec is a powerful argument and it supports a set of binary and unary operators. Refer the Ondemand user guide for a more complete set of operators supported by searchspec. To narrow the results of your query, you could use the "AND" operator between 2 or more fields in your object query.
    Hope this helps.
    Jaya

  • Query for spatial data with a GeometryCollection fails

    There are exact 538 CurvePolygons (only exterior rings at this
    sample). All of them are valid geometries and equal in dimension
    and so on. Now I connect them to a GeometryCollection and query
    for other relating spatial data in some tables. It seems that
    the use of around (not exact!) 200 CurvePolygon in one
    GeometryCollection works fine but the adding of more
    CurvePolygon result in an error with the Spatial Index (I could
    add the ORA- error numbers if I have some data in my test tables
    again next days).
    Is there anybody else having trouble with these mysterious
    problem? Maybe there is a border by the number of points in
    GeometryCollection?
    (More details, programming code could be delivered)
    (working with Java 1.3.1, oracle.sdoapi.*, Oracle 8.1.7.)

    Hi Lutz,
    Could you provide more info or samples of what is going wrong?
    Also, could you try making sure the geometry you are passing in
    as the query window is valid (i.e. instead of passing it in as a
    query window, pass it into sdo_geom.validate_geometry).
    Thanks,
    Dan

  • Question/issue regarding querying for uncommited objects in Toplink...

    Hi, was hoping to get some insight into this problem we are encoutering…
    We have this scenario were we are creating a folder hierarchy (using Toplink)
    1. a parent folder is created
    2. child elements are created (in the same transaction as step 1),
    3. we need to lookup the parent folder and assign it as the parent
    of these child elements
    4. end the transaction and commit all data
    In our system we control access to objects by appending a filter to the selection criteria, so we end up with SQL like this example
    (The t2 stuff is the authorization lookup part of the query.) ;
    SELECT t0.ID, t0.CLASS_NAME, t0.DESCRIPTION, t0.EDITABLE,
    t0.DATE_MODIFIED, t0.DATE_CREATED,
    t0.MODIFIED_BY, t0.ACL_ID, t0.NAME, t0.CREATED_BY,
    t0.TYPE_ID, t0.WKSP_ID, t1.ID, t1.LINK_SRC_PATH,
    t1.ABSOLUTE_PATH, t1.MIME_TYPE, t1.FSIZE,
    t1.CONTENT_PATH, t1.PARENT_ID
    FROM XDOOBJECT t0, ALL_OBJECT_PRIVILEGES t2,
    ARCHIVEOBJECT t1
    WHERE ((((t1.ABSOLUTE_PATH = '/favorites/twatson2')
    AND ((t1.ID = t2.xdoobject_id)
    AND ((t2.user_id = 'twatson2')
    AND (bitand(t2.privilege, 2) = 2))))
    AND (t1.ID = t0.ID))
    AND (t0.CLASS_NAME = 'oracle.xdo.server.repository.model.Archivable'))
    When creating new objects we also create the authorization lookup record (which is inserted into a different table.) I can see all the objects are registered in the UOW identity map.
    Basically, the issue is that this scenario all occurs in a single transaction and when querying for the newly created parent folder, if the authorization filter is appended to the query, the parent is not found. If I remove the authorization filter then the parent is found correctly. Or if I break this up into separate transactions and commit after each insert, then the parent is found correctly.
    I use the conformResultsInUnitOfWork attribute on the queries.
    This is related to an earlier thread I have in this discussion forum;
    Nested UnitOfWork and reading newly created objects...
    Thanks for any help you can provide,
    -Tim

    Hi Doug, we add the authorization filter directly in the application code as the query is getting set up.
    Here are some code examples; 1) the first is the code to create new object in the system, followed by 2) the code to create a new authorization lookup record (which also uses the first code to do the actual Toplink insert), then 3) an example of a read query where the authorization filter is appended to the Expression and after that 4) several helper methods.
    I hope this is of some use as it's difficult to show the complete flow in a simple example.
    1)
    // create new object example
    public Object DataAccess.createObject(....
    Object result = null;
    boolean inTx = true;
    UnitOfWork uow = null;
    try
    SessionContext sc = mScm.getCurrentSessionContext();
    uow = TLTransactionManager.getActiveTransaction(sc.getUserId());
    if (uow == null)
    Session session = TLSessionFactory.getSession();
    uow = session.acquireUnitOfWork();
    inTx = false;
    Object oclone = (Object) uow.registerObject(object);
    uow.assignSequenceNumbers();
    if (oclone instanceof BaseObject)
    BaseObject boclone = (BaseObject)oclone;
    Date now = new Date();
    boclone.setCreated(now);
    boclone.setModified(now);
    boclone.setModifiedBy(sc.getUserId());
    boclone.setCreatedBy(sc.getUserId());
    uow.printRegisteredObjects();
    uow.validateObjectSpace();
    if (inTx == false) uow.commit();
    //just temp, see above
    if (true == authorizer.requiresCheck(oclone))
    authorizer.grantPrivilege(oclone);
    result = oclone;
    2)
    // Authorizer.grantPrivilege method
    public void grantPrivilege(Object object) throws DataAccessException
    if (requiresCheck(object) == false)
    throw new DataAccessException(
    "Object does not implement Securable interface.");
    Securable so = (Securable)object;
    ModulePrivilege[] privs = so.getDefinedPrivileges();
    BigInteger pmask = new BigInteger("0");
    for (int i = 0; i < privs.length; i++)
    BigInteger pv = PrivilegeManagerFactory.getPrivilegeValue(privs);
    pmask = pmask.add(pv);
    SessionContext sc = mScm.getCurrentSessionContext();
    // the authorization lookup record
    ObjectUserPrivilege oup = new ObjectUserPrivilege();
    oup.setAclId(so.getAclId());
    oup.setPrivileges(pmask);
    oup.setUserId(sc.getUserId());
    oup.setXdoObjectId(so.getId());
    try
    // this recurses back to the code snippet from above
    mDataAccess.createObject(oup, this);
    catch (DataAccessException dae) {
    Object[] args = {dae.getClass().toString(), dae.getMessage()};
    logger.severe(MessageFormat.format(EXCEPTION_MESSAGE, args));
    throw new DataAccessException("Failed to grant object privilege.", dae);
    3)
    // example Query code
    Object object = null;
    ExpressionBuilder eb = new ExpressionBuilder();
    Expression exp = eb.get(queryKeys[0]).equal(keyValues[0]);
    for (int i = 1; i < queryKeys.length; i++)
    exp = exp.and(eb.get(queryKeys[i]).equal(keyValues[i]));
    // check if need to add authorization filter
    if (authorizer.requiresCheck(domainClass) == true)
    // this is where the authorization filter is appended to query
    exp = exp.and(appendReadFilter());
    ReadObjectQuery query = new ReadObjectQuery(domainClass, exp);
    SessionContext sc = mScm.getCurrentSessionContext();
    if (TLTransactionManager.isInTransaction(sc.getUserId()))
    // part of a larger transaction scenario
    query.conformResultsInUnitOfWork();
    else
    // not part of a transaction
    query.refreshIdentityMapResult();
    query.cascadePrivateParts();
    Session session = getSession();
    object = session.executeQuery(query);
    4)
    // builds the authorzation filter
    private Expression appendReadFilter()
    ExpressionBuilder eb = new ExpressionBuilder();
    Expression exp1 = eb.getTable("ALL_OBJECT_PRIVILEGES").getField("xdoobject_id");
    Expression exp2 = eb.getTable("ALL_OBJECT_PRIVILEGES").getField("user_id");
    Expression exp3 = eb.getTable("ALL_OBJECT_PRIVILEGES").getField("privilege");
    Vector args = new Vector();
    args.add(READ_PRIVILEGE_VALUE);
    Expression exp4 =
    exp3.getFunctionWithArguments("bitand",args).equal(READ_PRIVILEGE_VALUE);
    SessionContext sc = mScm.getCurrentSessionContext();
    return eb.get("ID").equal(exp1).and(exp2.equal(sc.getUserId()).and(exp4));
    // helper to get Toplink Session
    private Session getSession() throws DataAccessException
    SessionContext sc = mScm.getCurrentSessionContext();
    Session session = TLTransactionManager.getActiveTransaction(sc.getUserId());
    if (session == null)
    session = TLSessionFactory.getSession();
    return session;
    // method of TLTransactionManager, provides easy access to TLSession
    // which handles Toplink Sessions and is a singleton
    public static UnitOfWork getActiveTransaction(String userId)
    throws DataAccessException
    TLSession tls = TLSession.getInstance();
    return tls.getTransaction(userId);
    // the TLSession method, returns the active transaction (UOW)
    // or null if none
    public UnitOfWork getTransaction(String uid) {
    UnitOfWork uow = null;
    UowWrapper uw = (UowWrapper)mTransactions.get(uid);
    if (uw != null) {
    uow = uw.getUow();
    return uow;
    Thanks!
    -Tim

  • How to build sql query for view object at run time

    Hi,
    I have a LOV on my form that is created from a view object.
    View object is read-only and is created from a SQL query.
    SQL query consists of few input parameters and table joins.
    My scenario is such that if input parameters are passed, i have to join extra tables, otherwise, only one table can fetch the results I need.
    Can anyone please suggest, how I can solve this? I want to build the query for view object at run time based on the values passed to input parameters.
    Thanks
    Srikanth Addanki

    As I understand you want to change the query at run time.
    If this is what you want, you can use setQuery Method then use executeQuery.
    http://download.oracle.com/docs/cd/B14099_19/web.1012/b14022/oracle/jbo/server/ViewObjectImpl.html#setQuery_java_lang_String_

  • How to run a search query for a particular folder in KM related to portal

    Hi,
    Can any one tell me the steps for : how to run a search query for a particular folder in knowledge management related to portal.
    Answers will be rewarded.
    Thanks in advance.
    KN
    Edited by: KN on Mar 18, 2008 6:33 AM

    Ok u may not require a coding
    But u req configuration
    U should first make a search option set
    Link: [Search Option set|http://help.sap.com/saphelp_nw04/helpdata/en/cc/f4e77ddef1244380b06fee5f8b892a/frameset.htm]
    Then u need 2 duplicate a KM Command by the name Search From here
    and customize it to include the Search Option that u have created
    Link: [Search from here|http://help.sap.com/saphelp_nw04/helpdata/en/2a/4ff640365d8566e10000000a1550b0/frameset.htm]
    Then in the layout add this command.
    Regards
    BP

  • Query for recurring reports using Query Builder in Business objects

    1. How to count webi Recurring reports using query builder in business objects? (Need Query for this)
    2. How to count Crystal Recurring reports using query builder in business objects? (Need Query for this)
    I am able to get summerized recurring reports using Query Builder.
    For Example we have 343 reports which are under recurring (This includes both Webi Reports and Crystal Reports).
    we need to get individually how many webi reports are under Recurring and Crystal reports are under Recurring.

    1. How to count webi Recurring reports using query builder in business objects? (Need Query for this)
    2. How to count Crystal Recurring reports using query builder in business objects? (Need Query for this)
    I am able to get summerized recurring reports using Query Builder.
    For Example we have 343 reports which are under recurring (This includes both Webi Reports and Crystal Reports).
    we need to get individually how many webi reports are under Recurring and Crystal reports are under Recurring.

  • Interface for all cost object related transtions with third party system

    Hello Guru's
    I have one required for Functional Specications i.e,  i need to create interface for all cost object related transtions with third party system for this purpose i need to create FS. any body please guide how to do..

    Hi sreedhar royals
    You need to check controlling tables you need to interact. (CSKS, COAS,....) then ask your abaper and project manager to guide you.
    Regards

  • Approval Query for AP Invoices Containing Budget Related GL Account

    Hi Experts,
    I would like to create a approval template for all AP invoices that include a GL account that is related to the budget. Can you please help me with the approval query?
    Thank you!
    Jane

    Hello Gordon Du,
    "B1 approval will only apply to document level. If you want to check line level, only the first line can be subjected to."
    I was thinking to trigger the approval process based on a document (AP invoice) containing relevant cost centres on a line by line basis as entered via one of the enabled dim fields.
    Writing a trigger query for each cost centre effected? This does not appear to be a good solution, what is a better direction. Is there another way? (PO are not yet used via SAPB1)
    Currently my invoices add, but do not trigger the approval process based on my attempts thus far.
    Can the originator manually choose an approval pathway?
    If this is against posting etiquette delete and advise.
    I am a relative newbie to SAP B1, so am happy to be pointed to relevant help files. I arrived via  google searching and arrived here.
    Thankyou.

  • $Context/?$Id$? for related object. Is it possible?

    Hi everybody!
    I have Notification Template based on 'System.Reviewer' class. 
    How can I get parent Review Activity GUID?
    Can I use something like $Context/?$Id$? but for source object of  'System.ReviewActivityHasReviewer' relationship?

    Hi Petr,
    Try 'Reviewers':
    $Context/Path[Relationship='CoreActivity!System.ReviewActivityHasReviewer' SeedRole='Target' TypeConstraint='WorkItem!System.WorkItem']/Property[Type='WorkItem!System.WorkItem']/?$Id$?
    Cheers,
    Marat
    Site: www.scutils.com  Twitter:
    LinkedIn:
    Graveyard:

  • Point-in-polygon query with SDO_GEOMETRY.RELATE

    Hello All,
    I'm trying to perform a simple point-in-polygon query using
    SDO_GEOMETRY.RELATE. Only the "anyinteract" mask seems to return
    the correct answer. Can someone point out what I'm doing wrong
    and/or suggest a better way to do this. My objective is simply
    to return a count of the number of features in the point table
    that fall with the selected feature in the polygon table.
    select count(*) count from pnttest pnt, polytest poly,
    user_sdo_geom_metadata m where SDO_GEOM.RELATE(pnt.shape,
    m.diminfo, 'anyinteract',poly.shape,m.diminfo) = 'TRUE'
    and m.table_name = 'POLYTEST' and m.column_name = 'SHAPE' and
    poly.ADMIN_NAME = 'California'
    I would have thought the "inside" mask would be what I want but
    it returns 0 instead of the correct answer of 6.
    Thanks for any help or suggestions!
    -- john

    Hi John,
    If I wanted to do this as fast as possible, and didn't mind
    returning points that touch the boundary of the polygon, I would
    do something like this (assuming the point layer is indexed):
    select /*+ ordered */count(*) count
    from polytest poly, pnttest pnt
    where SDO_RELATE(pnt.shape,poly.shape,
    'mask=anyinteract querytype=window') = 'TRUE'
    and poly.ADMIN_NAME = 'California';
    If you are wondering what relationship Oracle Spatial thinks
    there is between the 6 points and the state, try using the
    determine mask with the 6 geometries that return from
    anyinteract.
    If you are using Oracle Spatial pre-9i, you might also want to
    add layer_gtype=point in the quotes.
    Hope this is useful.
    dan

  • Ad-Hoc Query for OU's and their Cost Center

    Cost Centers are often inherited from parent OU's. If I try to make an Ad-Hoc query, select some OU's and show the Cost Centers via the relationship A11, the fields are empty unless the Cost Center is hardcoded for the OU.
    Is there a way to create an Ad-Hoc query that shows the Cost Centers even if they are inherited? I can't make any changes to system tables or other customizing.
    Thanks in advance!

    Unfortunately I'm not authorized to use SE16.
    This is my selection:
    Object ID: xxx (Selection)
    Object Type: O (Selection)
    Plan Version: 01 (Selection)
    Relationship Between Objects: 011 (IT1001)
    Relationship Specification: A (IT1001)
    Type of Related Object: K (IT1001)
    Output:
    Object ID (IT1000)
    Object Abbreviation (IT1000)
    Object Name (IT1000)
    ID of Related Object (IT1001)
    Any other way?

Maybe you are looking for