L'une des fonctionnalités puissantes de Liferay est le flux de travail. Le flux de travail peut être défini graphiquement à l'aide de Kaleo Designer sur l'écran de gestion, mais dans les cas réels, non seulement les fonctions standard mais aussi les scripts (Groovy, Javascript) sont utilisés pour approuver dynamiquement l'approbateur. Fait souvent des sélections et des notifications.
Ce faisant, j'utilise souvent les services intégrés de Liferay ou les services personnalisés que j'ai développés, mais l'appel de service standard sur dev.liferay.com utilise toujours l'ancien 6.2 LocalServiceUtil, ce qui est faux. J'ai essayé de faire un échantillon ci-dessous.
L'architecture est passée de Liferay7 / DXP à OSGi, et la méthode d'appel de service a changé depuis la version 6.2. Cela prend la forme de se renseigner sur le framework OSGi et de récupérer les services nécessaires.
Lorsque vous appelez normalement un service à partir du code Java, utilisez l'annotation @Reference comme vous pouvez le voir en vous référant au codage du groupe de services dans le noyau Liferay sur https://github.com/liferay/liferay-portal. fais le
WSRPAdminPortlet.java
@Reference(unbind = "-")
protected void setWSRPConsumerPortletLocalService(
WSRPConsumerPortletLocalService wSRPConsumerPortletLocalService) {
_wSRPConsumerPortletLocalService = wSRPConsumerPortletLocalService;
}
private static WSRPConsumerPortletLocalService
_wSRPConsumerPortletLocalService;
Il peut être écrit comme suit, mais dans les balises telles que l'affectation par script dans Workflow, il est décrit comme suit.
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker
import com.liferay.portal.scripting.groovy.internal.GroovyExecutor
def st = null
try {
Bundle bundle = FrameworkUtil.getBundle(GroovyExecutor.class);
st = new ServiceTracker(bundle.getBundleContext(), "com.liferay.journal.service.JournalArticleLocalService", null);
st.open();
if (!st.isEmpty()) {
def service = st.getService();
def articles = service.getArticles();
for (def article: articles) {
System.out.println("article Name:${article.getUrlTitle()}");
}
}
} catch(Exception e) {
System.out.println("Handle error here appropriately")
e.printStackTrace()
} finally {
if (st != null) {
st.close()
}
}
Cela fonctionne même s'il est décrit dans la définition du workflow, mais si vous voulez l'essayer facilement, après avoir créé du contenu Web, sélectionnez Groovy dans Panneau de configuration-> Configuration-> Administration du serveur-> Script. Si vous demandez et collez le code ci-dessus dans le champ Script, le titre du contenu Web créé sera affiché.
Selon la méthode d'OSGi, spécifiez le bundle de départ avec FrameworkUtil.getBundle (dans ce cas, puisque le moteur Groovy Script est utilisé, spécifiez GroovyExecutor.class) Ensuite, obtenez le service cible avec ServiceTracker Je le fait.
Recommended Posts