Based on a request on JDeveloper and ADF forum I wrote a small method to dump the query of a VO together with it’s bind variables (autom. inserted by the framework and user defined) and their values.
The method below gets the query in it’s actual state, checks the variables and dumps their names and values. I’m using a simple ‘System.out.println’ to dump the information for simplicity. If you like to use the method in a more general way (e.g. in a base class) I would recommend to use a ADFLogger. See Duncan Mills bloghere
public void dumpQueryAndParameters() { // get the query in it's current state String lQuery = getQuery(); //get Valriables VariableValueManager lEnsureVariableManager = ensureVariableManager(); Variable[] lVariables = lEnsureVariableManager.getVariables(); int lCount = lEnsureVariableManager.getVariableCount(); // Dump query System.out.println("---query--- " + lQuery); // if variables found dump them if (lCount > 0) { System.out.println("---Variables:"); for (int ii = 0; ii < lCount; ii++) { Object lObject = lEnsureVariableManager.getVariableValue(lVariables[ii]); System.out.println(" --- Name: " + lVariables[ii].getName() + " Value: " + (lObject != null ? lObject.toString() : "null")); } } }
You can overwrite the executeQuery() method of the ViewObjectImpl class and call the method above like
@Override public void executeQuery() { dumpQueryAndParameters(); super.executeQuery(); }
Executing a Query you should see output like
---query--- SELECT Employees.EMPLOYEE_ID, Employees.FIRST_NAME, Employees.LAST_NAME, Employees.EMAIL, Employees.PHONE_NUMBER, Employees.HIRE_DATE, Employees.JOB_ID, Employees.SALARY, Employees.COMMISSION_PCT, Employees.MANAGER_ID, Employees.DEPARTMENT_ID FROM EMPLOYEES Employees WHERE ( ( (Employees.LAST_NAME LIKE ( :vc_temp_1 || '%') ) ) ) ---Variables: --- Name: vc_temp_1 Value: gr% --- Name: bindHireDate Value: null
The nice part of this method is that it dumps user defined bind variables as well as automatically added variables by the framework. In the output above vc_temp_1 is a variable of a filter entered in an af:table component.
Pingback: Print VO Query, Bind Variables, and Values to the Console, or How I Learned to Stop Worrying and Love Timo Hahn | De(Hu)as.te
This gives problems with Transient attributes. Is there any solution
Can you be more specific?
What kind of problems?
Pingback: JDeveloper: executeWithParams Problem: bind variable setters are not called | JDev & ADF Goodies