Visto che per l’ennesima volta stavo perdendo la testa su come e dove creare i metodi custom per l’accesso al db, ho fatto questo piccolo documento che può servire per non perdere tempo ogni volta.
******************************************
Si vuole implementare un metodo custom del tipo “ReturnType newMethodName(InputType arg)” per l’entità Xyz
fase 1) nella classe src/a.b.c.servicebuilder.service.persistence.XyzFinderImpl inserire il nuovo methodo con tutto il codice necessario
public ReturnType newMethodName(InputType arg) throws SystemException {
…
}
Lanciando ora il “build-service” verranno modificate le classi/interface
1.a) service/a.b.c.servicebuilder.service.persistence.XyzFinder (interface) con la definizione
public ReturnType newMethodName(InputType arg) throws SystemException;
1.b) service/a.b.c.servicebuilder.service.persistence.XyzFinderUtil (class) con il metodo
public static ReturnType newMethodName(InputType arg) throws com.liferay.portal.SystemException {
return getFinder().newMethodName(arg);
}
Pertanto sarà possibile richiamare il metodo come XyzFinderUtil.newMethodName(value);
Se si vuole rendere disponibile il nuovo metodo anche dalla XyzLocalServiceUtil (cosa consigliabile):
fase 2) nella classe src/a.b.c.servicebuilder.service.impl.XyzLocalServiceImpl inserire il codice del metodo
public ReturnType newMethodName(InputType arg) throws SystemException {
return xyzFinder.newMethodName(arg);
}
Lanciando nuovamente il “build-service” verranno modificate le classi
2.a) service/a.b.c.servicebuilder.service.XyzLocalService
2.b) service/a.b.c.servicebuilder.service.XyzLocalServiceClp
2.c) service/a.b.c.servicebuilder.service.XyzLocalServiceUtil
Pertanto sarà possibile richiamare il metodo come XyzLocalServiceUtil.newMethodName(value);
——————————————————-
Per poter lanciare il “build-service” solo una volta (e non due come nel caso precedente) si deve “anticipare” la creazione della definizione nell’interfaccia service/a.b.c.servicebuilder.service.persistence.XyzFinder:
fase 1) nella classe src/a.b.c.servicebuilder.service.persistence.XyzFinderImpl inserire il nuovo methodo
public ReturnType newMethodName(InputType arg) throws SystemException {
…
}
fase 2) inserire direttamente nell’interface service/a.b.c.servicebuilder.service.persistence.XyzFinder la definizione
public ReturnType newMethodName(InputType arg) throws SystemException;
fase 3) nella classe src/a.b.c.servicebuilder.service.impl.XyzLocalServiceImpl inserire il codice del metodo
public ReturnType newMethodName(InputType arg) throws SystemException {
return xyzFinder.newMethodName(arg);
}
Lanciando ora il “build-service” verranno modificate le classi/interface
3.a) service/a.b.c.servicebuilder.service.persistence.XyzFinderUtil
3.b) service/a.b.c.servicebuilder.service.XyzLocalService
3.c) service/a.b.c.servicebuilder.service.XyzLocalServiceClp
3.d) service/a.b.c.servicebuilder.service.XyzLocalServiceUtil
Pertanto sarà possibile richiamare il metodo come XyzLocalServiceUtil.newMethodName(value);