3939import javax .persistence .EntityManager ;
4040import javax .persistence .NoResultException ;
4141import javax .persistence .Parameter ;
42+ import javax .persistence .ParameterMode ;
4243import javax .persistence .Query ;
44+ import javax .persistence .StoredProcedureQuery ;
4345import javax .persistence .Table ;
4446import javax .persistence .criteria .CriteriaQuery ;
4547import javax .transaction .Status ;
@@ -122,18 +124,18 @@ protected EntityManager getEntityManager(String keyId) {
122124 return dbManager .getEntityManager (keyId );
123125 }
124126
125- protected final Query createQuery (String sessionId , String queryString , Map <String , Object > parameters ){
127+ protected final Query createQuery (String sessionId , String queryString , Map <String , Object > parameters ) {
126128 IDBLinkInfo dbLinkInfo = getDBLinkInfo (sessionId );
127129 EntityManager em = getEntityManager (getEntityManagerId (dbLinkInfo ));
128-
130+
129131 parameters = addQueryParams (queryString , parameters );
130132 Query query = em .createQuery (queryString );
131133 if (parameters != null && !parameters .isEmpty ()) {
132134 populateQueryParameters (query , parameters , queryString );
133135 }
134136 return query ;
135137 }
136-
138+
137139 /**
138140 * Agrega valores de parametros constantes (ej. :true=true, :false=false
139141 * etc, :idempresa)
@@ -160,7 +162,7 @@ protected final Map<String, Object> addQueryParams(String queryString, Map<Strin
160162 }
161163 return parameters ;
162164 }
163-
165+
164166 /**
165167 * Recupera todos los registros de una tabla
166168 *
@@ -765,6 +767,39 @@ public IErrorReg sqlExec(String sessionId, String sqlString,
765767 return error ;
766768 }
767769
770+ /**
771+ * Ejecuta un procedimiento almacenado
772+ *
773+ * @param sessionId identificador de la sesión del usuario
774+ * @param procedureName procedimiento almacenado
775+ * @param params parámetros de la sentencia.
776+ * @throws java.lang.Exception
777+ */
778+ @ Override
779+ public void execSqlProcedure (String sessionId , String procedureName , Map <String , Object > params ) throws Exception {
780+ LOGGER .debug (Strings .replicate ("-" , 50 ));
781+ LOGGER .debug ("execSqlProcedure" );
782+
783+ IDBLinkInfo dbLinkInfo = getDBLinkInfo (sessionId );
784+ String persistUnit ;
785+ if (dbLinkInfo == null ) {
786+ persistUnit = IDBManager .CATALOGO ;
787+ } else {
788+ persistUnit = dbLinkInfo .getPersistUnit ();
789+ }
790+ procedureName = Strings .textMerge (procedureName , getQueryConstants (persistUnit ));
791+ EntityManager em = getEntityManager (getEntityManagerId (dbLinkInfo ));
792+
793+ StoredProcedureQuery procedure = em .createStoredProcedureQuery (procedureName );
794+ if (params != null ) {
795+ for (Map .Entry <String , Object > entry : params .entrySet ()) {
796+ procedure .registerStoredProcedureParameter (entry .getKey (), entry .getValue ().getClass (), ParameterMode .IN );
797+ procedure .setParameter (entry .getKey (), entry .getValue ());
798+ }
799+ }
800+ procedure .execute ();
801+ }
802+
768803 /**
769804 *
770805 * @param sessionId identificador de la sesión que permite realizar las
@@ -868,7 +903,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
868903 IDBLinkInfo dbLinkInfo = getDBLinkInfo (sessionId );
869904 //Si es por una sesión normal o por dispositivo movil a travez de un
870905 //un webservice.
871- if (Fn .nvl (dbLinkInfo .getUuidDevice (),"" ).isEmpty ()){
906+ if (Fn .nvl (dbLinkInfo .getUuidDevice (), "" ).isEmpty ()) {
872907 appUser = dbLinkInfo .getAppUserId ();
873908 } else {
874909 appUser = left (dbLinkInfo .getUuidDevice (), 32 );
@@ -888,7 +923,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
888923 if (event != null ) {
889924 event .beforeSave (sessionId , ejb );
890925 }
891- auditable = ejb .isAuditAble ();
926+ auditable = ejb .isAuditAble ();
892927 lastEjb = ejb ;
893928 switch (ejb .getAction ()) {
894929 case IDataRow .INSERT :
@@ -929,7 +964,7 @@ public IDataResult update(String sessionId, IDataSet dataSet) {
929964 event .afterSave (sessionId , ejb );
930965 }
931966 //Auditoria
932- auditSave (em , sessionId , ejb , auditable );
967+ auditSave (em , sessionId , ejb , auditable );
933968 }
934969 for (IDataRow ejb : ejbsRes ) {
935970 if (ejb .getAction () != IDataRow .DELETE ) {
@@ -1132,7 +1167,7 @@ public <T extends IDataRow> List<T> getData(String sessionId,
11321167 }
11331168 Query q ;
11341169 q = createQuery (sessionId , queryString , null );
1135-
1170+
11361171 if (maxRows >= 0 ) {
11371172 q .setMaxResults (maxRows );
11381173 }
@@ -1234,7 +1269,6 @@ public Long getCount(String sessionId, String queryString, Map<String, Object> p
12341269 return result ;
12351270 }
12361271
1237-
12381272 /**
12391273 * Calcula la cantidad de registros que devolveria una sentencia sql
12401274 *
@@ -1379,7 +1413,6 @@ protected final void populateQueryParameters(Query query, Map<String, Object> pa
13791413 });
13801414 }
13811415
1382-
13831416 /**
13841417 * Setea valores predeterminados de ciertas constantes en los queries.
13851418 *
@@ -1602,7 +1635,7 @@ public IErrorReg getErrorMessage(int messageNumber, String alternativeMsg, Strin
16021635 }
16031636 return errorReturn ;
16041637 }
1605-
1638+
16061639 @ Override
16071640 @ TransactionAttribute (TransactionAttributeType .SUPPORTS )
16081641 public List <Object []> findListObjsByQuery (String sessionId ,
0 commit comments