Hi Guys , i trying to invoke a dbOperation from ccxml is a execute Operation.
Always i getting :
Session:uid_286: --In Event FETCH.DONE--
Session:uid_286: --Error in DB call: FAIL
Session:uid_286: --Error detail: java.lang.NullPointerException
I try with and without the out param on namelist properties , with the @ throws a semantic error.
I Try change the in-out params to jus out and the error is the same nullPointer
This my dbop :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<DbOp version="1.0">
<Datasource name="TpMarketingDesa"/>
<DbObject name="dbo.SptblCampaniaInstanciaProgramadosMarcadorClasificacion_INS;1" returntype="2" selectall="false" type="procedure">
<DbObjectParam datatype="4" function="" name="@RETURN_VALUE" sqltype="" tablename="" type="return" typename="INTEGER"/>
<DbObjectParam datatype="12" function="" name="@IN_strANI" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strVDN" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="4" function="" name="@IN_intTimeOutCall" sqltype="" tablename="" type="in" typename="INTEGER"/>
<DbObjectParam datatype="4" function="" name="@IN_intTimeOutClassification" sqltype="" tablename="" type="in" typename="INTEGER"/>
<DbObjectParam datatype="12" function="" name="@IN_strSessionId" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strClassificationResult" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam1" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam2" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam3" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam4" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam5" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam6" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam7" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam8" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam9" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="12" function="" name="@IN_strParam10" sqltype="" tablename="" type="in" typename="VARCHAR"/>
<DbObjectParam datatype="4" function="" name="@OUT_intError" sqltype="" tablename="" type="in-out" typename="INTEGER"/>
<DbObjectParam datatype="12" function="" name="@OUT_strError" sqltype="" tablename="" type="in-out" typename="VARCHAR"/>
</DbObject>
<Operation name="Execute"/>
<Clause>
<Where/>
</Clause>
<Clause>
<Order/>
</Clause>
<SQLQuery>{ ? = call dbo.SptblCampaniaInstanciaProgramadosMarcadorClasificacion_INS;1 ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }</SQLQuery>
</DbOp>
This is my ccxml i just calling an own event at the init to call directly the sp with no logic just hardcode values :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ccxml PUBLIC "-//W3C//DTD CCXML 1.0//EN" "http://www.w3.org/TR/ccxml/ccxml.dtd">
<ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml">
<%@ page import="java.util.*"%>
<%@ page import="java.net.*"%>
<%@ page contentType="application/ccxml+xml"%>
<%
/* do not want jsp content cached */
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "1");
URL url = new URL (request.getRequestURL().toString());
String host = url.getHost();
String port = Integer.toString(url.getPort());
String locationExt = "http://" + host + ":" + port;
String locationProxy = "http://" + host + ":" + port + "/OutboundCall/DbProxy";
System.out.print(locationProxy);
%>
<script>
function objectToString( obj ) {
var result = " [\n";
result += extractprops( "", obj);
result += " ]";
return result;
}
function extractprops ( parent, obj ) {
var prop, name, result = "";
var count = 1;
if ( typeof ( obj ) == "object" ) {
for ( prop in obj ) {
name = parent + prop;
if ( typeof ( obj [ prop ] ) == "object" ) {
result += extractprops( name+".", obj [ prop ] );
} else {
result += " " + name + ":" + obj [ prop ] + "\n";
}
count = count + 1;
}
} else {
if (obj == undefined ) {
result += "___undefined";
} else {
result += obj;
}
}
return result;
}
</script>
<var name="in_connectionid"/>
<var name="out_connectionid"/>
<var name="dialogid"/>
<var name="statusResult"/>
<var name="OUT_strError" expr="''"/>
<var name="OUT_intError" expr="'0'"/>
<var name="RETURN_VALUE" expr="'0'"/>
<!-- Initialize the state for this page -->
<var name="state" expr="'init'"/>
<!-- Possible states:
init - The initialized state, accept the call.
callhost - Placing an outbound call
-->
<!-- Event processor -->
<eventprocessor statevariable="state">
<!-- STATE: new ivan -->
<transition event="ccxml.loaded" state="init" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<assign name="state" expr="'callhost'"/>
<var name="status" expr="'success'"/>
<send name="'avaya.launchresponse'" targettype="'avaya_platform'" target="session.id" namelist="status"/>
<log expr="'-- session.id : ' + session.id"/>
<!-- Start things going by sending an event to our self -->
<send targettype="'ccxml'" name="'update.dbTpMarketing'" target="session.id" delay="'0s'"/>
</transition>
<transition event="call.host" state="callhost" >
<script>
var hints = new Object();
hints.enable_call_classification = true;
hints.call_classification_timeout ='5000';
hints.call_classification_connectWhen='OnConnect';
</script>
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<createcall dest="'tel:'+session.values.avaya.ParameterMap.ani" connectionid="out_connectionid" timeout="50000" hints="hints" />
</transition>
<!-- STATE: new ivan -->
<!-- New call is coming in, accept it blindly -->
<transition event="connection.alerting" state="init" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<assign name="in_connectionid" expr="event$.connectionid"/>
<accept/>
</transition>
<transition event="connection.connected" state="callhost" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="'connected to caller'"/>
<assign name="state" expr="'callerConected'"/>
</transition>
<transition event="connection.signal" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<if cond="event$.connectionid == out_connectionid">
<if cond="event$.info.callprogress != undefined">
<log expr="' call recognition : ' + event$.info.callprogress"/>
<if cond="event$.info.callprogress == 'live_voice'">
<assign name="statusResult" expr="event$.info.callprogress"/>
<log expr="' *** Answer Human'"/>
<var name="dialog_values" expr="new Object();"/>
<assign name="dialog_values.ConnectWhen" expr="'OnProceeding'"/>
<redirect connectionid="out_connectionid" dest="'tel:'+session.values.avaya.ParameterMap.vdn"/>
<!-- STATE: call Sp -->
<elseif cond="event$.info.callprogress == 'start_of_voice'"/>
<log expr="' *** start wait futher clasification'"/>
<elseif cond="event$.info.callprogress == 'ringing'"/>
<log expr="' *** ring back tone , wait futher clasification'"/>
<elseif cond="event$.info.callprogress == 'early_media'"/>
<log expr="' *** early_media , wait futher clasification'"/>
<else/>
<log expr="' ***No customer contact' + event$.info.callprogress "/>
<assign name="statusResult" expr="event$.info.callprogress"/>
<send targettype="'ccxml'" name="'update.dbTpMarketing'" target="session.id" delay="'0s'"/>
</if>
<else/>
<log expr="' *** No call progress in this connection.signal\n'"/>
</if>
<else/>
<log expr="' *** Not the out connection\n'"/>
</if>
</transition>
<transition event="connection.redirected" state="callerConected" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<send targettype="'ccxml'" name="'update.dbTpMarketing'" target="session.id" delay="'0s'"/>
</transition>
<transition event="update.dbTpMarketing" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<assign name="state" expr="'invokeDB'"/>
<var name="classname" expr="'connectivity.db.operations.spStatusCallTpMarketing'"/>
<var name="IN_strANI" expr="'3000000'"/>
<var name="IN_strVDN" expr="'123'"/>
<var name="IN_intTimeOutCall" expr="'5000'"/>
<var name="IN_intTimeOutClasification" expr="'5000'"/>
<var name="IN_strSessionId" expr="'session.id'"/>
<var name="IN_strClassificationResult" expr="'statusResult'"/>
<var name="IN_strParam1" expr="'session.values.avaya.ParameterMap.param1'"/>
<var name="IN_strParam2" expr="'session.values.avaya.ParameterMap.param2'"/>
<var name="IN_strParam3" expr="'session.values.avaya.ParameterMap.param3'"/>
<var name="IN_strParam4" expr="'session.values.avaya.ParameterMap.param4'"/>
<var name="IN_strParam5" expr="'session.values.avaya.ParameterMap.param5'"/>
<var name="IN_strParam6" expr="'session.values.avaya.ParameterMap.param6'"/>
<var name="IN_strParam7" expr="'session.values.avaya.ParameterMap.param7'"/>
<var name="IN_strParam8" expr="'session.values.avaya.ParameterMap.param8'"/>
<var name="IN_strParam9" expr="'session.values.avaya.ParameterMap.param9'"/>
<var name="IN_strParam10" expr="'session.values.avaya.ParameterMap.param10'"/>
<log expr="'IN_strANI [' + IN_strANI +']'"/>
<log expr="'IN_strVDN [' + IN_strVDN +']'"/>
<log expr="'IN_intTimeOutCall [' + IN_intTimeOutCall +']'"/>
<log expr="'IN_intTimeOutClasification [' + IN_intTimeOutClasification +']'"/>
<log expr="'IN_strSessionId [' + IN_strSessionId +']'"/>
<log expr="'IN_strClassificationResult [' + IN_strClassificationResult +']'"/>
<log expr="'IN_strParam1 [' + IN_strParam1 +']'"/>
<log expr="'IN_strParam2 [' + IN_strParam2 +']'"/>
<log expr="'IN_strParam3 [' + IN_strParam3 +']'"/>
<log expr="'IN_strParam4 [' + IN_strParam4 +']'"/>
<log expr="'IN_strParam5 [' + IN_strParam4 +']'"/>
<log expr="'IN_strParam6 [' + IN_strParam6 +']'"/>
<log expr="'IN_strParam7 [' + IN_strParam7 +']'"/>
<log expr="'IN_strParam8 [' + IN_strParam8 +']'"/>
<log expr="'IN_strParam9 [' + IN_strParam9 +']'"/>
<log expr="'IN_strParam10 [' + IN_strParam9 +']'"/>
<log expr="'locationProxy [' + 'http://10.151.230.209:7080/OutboundCall/DbProxy' +']'"/>
<fetch next="'http://localhost:8080/OutboundCall/DbProxy'" type="'text/ecmascript'" namelist="IN_strANI IN_strVDN IN_intTimeOutCall IN_intTimeOutClasification IN_strSessionId IN_strClassificationResult IN_strParam1 IN_strParam2 IN_strParam3 IN_strParam4 IN_strParam5 IN_strParam6 IN_strParam7 IN_strParam8 IN_strParam9 IN_strParam10 OUT_intError OUT_strError classname"/>
</transition>
<transition event="fetch.done" state="invokeDB">
<log expr="'--In Event FETCH.DONE--'"/>
<var name="dbResult" expr="'OKAY'"/>
<var name="dbResultMessage" expr="''"/>
<script fetchid="event$.fetchid"/>
<if cond="dbResult == 'OKAY'" >
<assign name="state" expr="strANI"/>
<log expr="'OUT_intError is:' + state[0]"/>
<log expr="'OUT_strError is:' + OUT_strError"/>
<exit/>
<else/>
<log expr="'--Error in DB call: ' + dbResult"/>
<log expr="'--Error detail: ' + dbResultMessage"/>
<exit expr="'DB error'"/>
</if>
<exit/>
</transition>
<transition event="connection.failed" state="callhost" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
<log expr="'failed to connect to caller' + event$.info.callprogress"/>
<assign name="statusResult" expr="event$.info.callprogress"/>
<send targettype="'ccxml'" name="'update.dbTpMarketing'" target="session.id" delay="'0s'"/>
</transition>
<transition event="connection.failed" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
<log expr="'failed to connect to caller'"/>
<exit/>
</transition>
<transition event="connection.disconnected">
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
<if cond="event$.connectionid == in_connectionid">
<exit expr="'Caller Hungup'"/>
<else/>
<exit expr="'Called Number Hungup'"/>
</if>
</transition>
<transition event="error.fetch" state="invokeDB">
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
<exit/>
</transition>
<!-- STATE: ANYSTATE. Catch all, aids in debugging and to see the missed events -->
<transition event="error.fetch" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
<exit/>
</transition>
<transition event="ccxml.exit" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
</transition>
<transition event="ccxml.kill" >
<log expr="'-- ' + event$.name +' -- [' + state +']'"/>
<log expr="' eventdata... \n' + objectToString(event$)"/>
</transition>
<transition event="" >
<log expr="'-- missed ' + event$.name +' -- [' + state +']'"/>
<!-- <log expr="' eventdata... \n' + objectToString(event$)"/> -->
</transition>
</eventprocessor>
</ccxml>
<%
request.getSession().invalidate();
%>
This is my dbOperation java code :
package connectivity.db.operations;
/**
* This class is generated automatically. Manual edits must be outside of the tagged
* areas (for example, "START:CLASS:..." and "END:CLASS:..."). Changes within the
* tag areas will be overwritten when the database operation is regenerated.
* Last generated by Orchestration Designer at: 2020-OCT-27 07:01:05 PM
*/
public class spStatusCallTpMarketing extends com.avaya.sce.runtime.connectivity.db.DbQuery {
//{{START:CLASS:FIELDS
//}}END:CLASS:FIELDS
/**
* Constructor for spStatusCallTpMarketing.
* Last generated by Orchestration Designer at: 2020-OCT-27 07:01:05 PM
*/
public spStatusCallTpMarketing( com.avaya.sce.runtimecommon.IRuntimeSession mySession ) {
//{{START:CLASS:CONSTRUCTOR
super(mySession);
setDataSourceName("jdbc/TpMarketingDesa");
setDbObjectName("dbo.SptblCampaniaInstanciaProgramadosMarcadorClasificacion_INS;1");
setOperation(4);
setReturnType(2);
setSQLQuery("{ ? = call dbo.SptblCampaniaInstanciaProgramadosMarcadorClasificacion_INS;1 ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
// List variable that may be used
java.util.List list;
// Parameters
com.avaya.sce.runtime.connectivity.db.DbQueryParam parameter;
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@RETURN_VALUE",5,4, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strANI",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strVDN",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_intTimeOutCall",1,4, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_intTimeOutClassification",1,4, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strSessionId",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strClassificationResult",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam1",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam2",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam3",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam4",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam5",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam6",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam7",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam8",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam9",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@IN_strParam10",1,12, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@OUT_intError",2,4, ""));
addParameter(new com.avaya.sce.runtime.connectivity.db.DbQueryParam("@OUT_strError",2,12, ""));
//}}END:CLASS:CONSTRUCTOR
}
}