Skip to main content
1-Visitor
February 19, 2016
Solved

Access is not permitted to advanced query capabilities

  • February 19, 2016
  • 2 replies
  • 4175 views

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

Best answer by ShirishMorkhade_238755

Hi Lori,

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

Thanks,

Shirish

2 replies

23-Emerald I
February 27, 2016

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?

16-Pearl
March 2, 2016

Hi Lori,

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

Thanks,

Shirish

21-Topaz I
March 2, 2016

You should mark this post as answered.