cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Access is not permitted to advanced query capabilities

SOLVED
Highlighted
Newbie

Access is not permitted to advanced query capabilities

Hello ,

I'm writing advanced API Query to fetch the all parts latest version and iteration but I'm unable to execute the query. Here my code:

import wt.fc.QueryResult;

import wt.inf.library.WTLibrary;

import wt.part.WTPart;

import wt.part.WTPartMaster;

import wt.query.ClassAttribute;

import wt.query.OrderBy;

import wt.query.QueryException;

import wt.query.QuerySpec;

import wt.query.SQLFunction;

import wt.query.SearchCondition;

import wt.query.SubSelectExpression;

/**

*

* @author mgangappa

*/

public class Extractor {

    public static void main(String[] args) {

        Extractor ex = new Extractor();

       

        ex.getAllPartsLatestVersionAndIteration();

    }   

   

    public void getAllPartsLatestVersionAndIteration() {

        try {

            final QuerySpec qs = new QuerySpec();

            qs.setAdvancedQueryEnabled(true);           

           

            final int lib = qs.addClassList(WTLibrary.class, false);

            final int masterIndex = qs.addClassList(WTPartMaster.class, false);

            final int partIndex = qs.addClassList(WTPart.class, true);

           

           

            final QuerySpec subSelect = new QuerySpec();

            final int partSubInt = subSelect.appendClassList(WTPart.class, false);           

            final SQLFunction max = SQLFunction.newSQLFunction(SQLFunction.MAXIMUM, new ClassAttribute(WTPart.class, "iterationInfo.branchId"));                       

           

            subSelect.appendSelect(new ClassAttribute(WTPart.class, "masterReference.key.id"), new int[]{partSubInt}, true);                                              

            subSelect.appendSelect(max, new int[]{partSubInt}, true);   

            subSelect.setAdvancedQueryEnabled(true);

           

            subSelect.appendGroupBy(new ClassAttribute(WTPart.class, "masterReference.key.id"), new int[]{partSubInt}, true);                                                      

           

            qs.appendWhere(new SearchCondition(WTLibrary.class, WTLibrary.NAME, SearchCondition.NOT_LIKE, "%test%"), new int[]{lib});

           

            qs.appendAnd();           

            qs.appendWhere(new SearchCondition(WTPartMaster.class, "containerReference.key.id", WTLibrary.class, "thePersistInfo.theObjectIdentifier.id"), new int[]{masterIndex, lib});

           

            qs.appendAnd();           

            qs.appendWhere(new SearchCondition(WTPart.class, "masterReference.key.id", WTPartMaster.class, "thePersistInfo.theObjectIdentifier.id"), new int[]{partIndex, masterIndex});

           

            qs.appendAnd();           

            qs.appendWhere(new SearchCondition(WTPart.class, WTPart.LATEST_ITERATION, SearchCondition.EQUAL, true), new int[]{partIndex});

           

            qs.appendAnd();

            final SubSelectExpression inList = new SubSelectExpression(subSelect);

            inList.setAccessControlRequired(false);

            qs.appendWhere(new SearchCondition(new ClassAttribute(WTPart.class, "iterationInfo.branchId"), SearchCondition.IN, inList), new int[]{partIndex});

           

            qs.appendOrderBy(new OrderBy(new ClassAttribute(WTPartMaster.class, WTPartMaster.NUMBER), true), new int[] {masterIndex});

           

            QueryResult qr = ExecuteQueryInServerContext.executeAdvanceQueryInServer(qs, "executeQuery");

                       

        } catch (QueryException ex) {

            ex.printStackTrace();

        }

    }

}

I'm executing it in the RemoteMethodServer.invoke (see below code):

import java.lang.reflect.InvocationTargetException;

import java.rmi.RemoteException;

import wt.fc.PersistenceHelper;

import wt.fc.PersistenceServerHelper;

import wt.fc.QueryResult;

import wt.method.RemoteAccess;

import wt.method.RemoteMethodServer;

import wt.pds.StatementSpec;

import wt.query.QuerySpec;

import wt.util.WTException;

/**

*

* @author mgangappa

*/

public class ExecuteQueryInServerContext implements RemoteAccess {

    public static QueryResult executeAdvanceQueryInServer(QuerySpec query, String method) {

        Class[] pClasses = new Class[1];

        pClasses[0] = QuerySpec.class;

        Object[] pObjects = new Object[1];

        if (query == null) {

            return null;

        } else {

            pObjects[0] = query;

        }

        try {

            return (QueryResult) RemoteMethodServer.getDefault().invoke(method, ExecuteQueryInServerContext.class.getName(), null, pClasses, pObjects);

        } catch (RemoteException ex) {

            ex.printStackTrace();

        } catch (InvocationTargetException ex) {

            ex.printStackTrace();

        }

        return null;

    }

    public static QueryResult executeQuery(QuerySpec qs) throws WTException { 

        System.out.println("executeQuery => PersistenceServerHelper ");

        QueryResult result = PersistenceServerHelper.manager.query(qs);       

        return result;

    }

   

    public static QueryResult executeQueryManager(QuerySpec qs) throws WTException {       

        QueryResult result = PersistenceHelper.manager.find((StatementSpec) qs);       

        return result;

    }

}

But I'm keep getting the below error:

nServerContext, executeQuery, , 0, 0, 0.0, 0, 0.0, 0.01, 0.007444714

(wt.pds.pdsResource/23) wt.pds.AdvancedQueryAccessException:

Access is not permitted to advanced query capabilities.

  at wt.pds.SQLDatabasePds.query(SQLDatabasePds.java:616)

  at wt.pom.PersistentObjectManager.query(PersistentObjectManager.java:1108)

  at wt.pom.PersistentObjectManager.query(PersistentObjectManager.java:1017)

  at wt.fc.StandardPersistenceManager._query(StandardPersistenceManager.java:1878)

  at wt.fc.StandardPersistenceManager.query(StandardPersistenceManager.java:1417)

  at wt.fc.StandardPersistenceManager.query(StandardPersistenceManager.java:1301)

  at com.google.extractor.ExecuteQueryInServerContext.executeQuery(ExecuteQueryInServerContext.java:50)

What I'm doing wrong? Do I need to set or change config?

Thanks,

Manjunath Reddy

1 ACCEPTED SOLUTION

Accepted Solutions

Re: Access is not permitted to advanced query capabilities

Hi Lori,

    Yes, this is resolved with the attached modified Java files. Manjunath Reddy confirms as this is resolved.

Thanks,

Shirish

View solution in original post

3 REPLIES 3

Re: Access is not permitted to advanced query capabilities

Hi Manjunath,

I noticed that you opened a case with Tech Support to investigate this issue (C12944368). Did using the QuerySpec.setAdvancedQueryEnabled(true) method in your code resolve this issue?

Re: Access is not permitted to advanced query capabilities

Hi Lori,

    Yes, this is resolved with the attached modified Java files. Manjunath Reddy confirms as this is resolved.

Thanks,

Shirish

View solution in original post

Re: Access is not permitted to advanced query capabilities

You should mark this post as answered.