controllerwidgetsap-commerce-cloudzulbackoffice

SAP HYBRIS [Y] : The import org.zkoss cannot be resolved


I am creating a widget in backoffice on HYBRIS.

After the generation of the extension trainingbackoffice I added it in the localxtension.xml file as following :

<extensions>
<path dir='${HYBRIS_BIN_DIR}' autoload='false' />
<extension name='mcc' />
<extension name='adaptivesearchsolr' />
<extension name='adaptivesearchbackoffice' />
<extension name='adaptivesearchsamplesaddon' />
<extension name='commerceservicesbackoffice' />
<extension name='solrfacetsearchbackoffice' />
<extension name='solrserver' />
<!-- <extension name='yacceleratorcockpits' /> -->
<!-- <extension name='yacceleratorinitialdata' /> -->
<!-- <extension name='yacceleratorstorefront' /> -->
<extension name='ycommercewebservices' />
<extension name='ycommercewebservicestest' />
<extension name='electronicsstore' />
<extension name='apparelstore' />
<extension name='captchaaddon' />
<extension name='liveeditaddon' />
<extension name='acceleratorwebservicesaddon' />
<extension name='commerceorgsamplesaddon' />
<extension name='orderselfserviceaddon' />
<extension name='rulebuilderbackoffice' />
<extension name='couponbackoffice' />
<extension name='droolsruleengineservices' />
<extension name='couponfacades' />
<extension name='promotionenginesamplesaddon' />
<extension name='assistedservicestorefront' />
<extension name='assistedserviceyprofileaddon' />
<extension name='assistedservicecustomerinterestsaddon' />
<extension name='assistedservicepromotionaddon' />
<extension name='customerticketingaddon' />
<extension name='customersupportbackoffice' />
<extension name='eventtrackingwsaddon' />
<extension name='hybrisanalyticsaddon' />
<extension name='yprofileeventtrackingws' />
<extension name='yprofileeventadapter' />
<extension name='yprofileprocessadapter' />
<extension name='privacyoverlayeraddon' />
<extension name='yaasconfigurationbackoffice' />
<extension name='textfieldconfiguratortemplatebackoffice' />
<extension name='textfieldconfiguratortemplateaddon' />
<extension name='cmswebservices' />
<extension name='smarteditwebservices' />
<extension name='cmssmarteditwebservices' />
<extension name='permissionswebservices' />
<extension name='smarteditaddon' />
<extension name='cmssmartedit' />
<extension name='consignmenttrackingaddon' />
<extension name='consignmenttrackingmockaddon' />
<extension name='consignmenttrackingbackoffice' />
<extension name='notificationaddon' />
<extension name='customerinterestsaddon' />
<extension name='stocknotificationaddon' />
<extension name='configurablebundleaddon' />
<extension name='previewpersonalizationweb' />
<extension name='personalizationcmsweb' />
<extension name='personalizationsmartedit' />
<extension name='personalizationsampledataaddon' />
<extension name='personalizationyprofile' />
<extension name='personalizationpromotions' />
<extension name='personalizationpromotionsweb' />
<extension name='personalizationservicesbackoffice' />
<extension name='personalizationpromotionsbackoffice' />
<extension name='personalizationcmsbackoffice' />
<extension name='personalizationintegrationbackoffice' />
<extension name='assistedserviceatddtests' />
<extension name='promotionengineatddtests' />
<extension name='textfieldconfiguratortemplateatddtests' />
<extension name='configurablebundleatddtests' />
<extension name='configurablebundlecockpits' />
<extension name='pcmbackofficesamplesaddon' />


<extension name='mcc' />
<extension name="hmc" />


<extension name='trainingcockpits'/>
<extension name='trainingcore'/>
<extension name='trainingfacades'/>
<extension name='trainingfulfilmentprocess'/>
<extension name='traininginitialdata'/>
<extension name='trainingstorefront'/>
<extension name='trainingtest'/>

<extension name='trainingbackoffice'/>

</extensions>

and I created a controller for the widget as following :

 package org.training.widgets.mysearch;

 import java.util.List;

 import org.training.service.SearchService;
 import org.zkoss.zk.ui.event.Events;
 import org.zkoss.zk.ui.select.annotation.WireVariable;
 import org.zkoss.zul.Messagebox;
 import org.zkoss.zul.Textbox;

 import com.hybris.cockpitng.annotations.ViewEvent;
 import com.hybris.cockpitng.util.DefaultWidgetController;



 /* @author scharafi
 *
 */
 public class MySearchController extends DefaultWidgetController
 {
private Textbox searchInput;
@WireVariable
private SearchService searchService;

@ViewEvent(componentID = "searchBtn", eventName = Events.ON_CLICK)
public void doSearch() throws InterruptedException
{
    final List<String> result = searchService.search(searchInput.getText());
    Messagebox.show(result.get(0));
}

public Textbox getSearchInput()
{
    return searchInput;
}

public void setSearchInput(final Textbox searchInput)
{
    this.searchInput = searchInput;
}

public SearchService getSearchService()
{
    return searchService;
}

public void setSearchService(final SearchService searchService)
{
    this.searchService = searchService;
}
}

and I added the controller in definitions.xml as following :

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<widget-definition id="org.training.widgets.mysearch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hybris.com/schema/cockpitng/widget-definition.xsd">

<controller class="org.training.widgets.mysearch.MySearchController"/>


<name>My Search</name>
<description>My own search widget.</description>
<defaultTitle>Search</defaultTitle>
<author>CHARAFI Saad</author>
<version>0.1</version>

</widget-definition>

After having run the command ant clean all the build does not pass.

And errors appear in the console as following :

[yjavac] 1. ERROR in C:\hybris\hybris\bin\custom\trainingbackoffice\src\org\training\widgets\mysearch\MySearchController.java (at line 6)
   [yjavac]     import org.zkoss.zk.ui.event.Events;
   [yjavac]            ^^^^^^^^^
   [yjavac]     The import org.zkoss cannot be resolved

The error is applied on all imports of zul

UPDATE :

Here is extensioninfo.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<extensioninfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="extensioninfo.xsd">

<extension abstractclassprefix="Generated" classprefix="Trainingbackoffice" managername="TrainingbackofficeManager" managersuperclass="de.hybris.platform.jalo.extension.Extension" name="trainingbackoffice" usemaven="false">

    <!-- you should add all required extensions to this list, except platform extensions which are automatically required -->
    <!-- <requires-extension name="cms"/> -->

    <requires-extension name="backoffice"/>


    <coremodule generated="true" manager="org.training.jalo.TrainingbackofficeManager" packageroot="org.training"/>

    <meta key="backoffice-module" value="true"/>

</extension>


Solution

  • Your class is defined in a global context, but ZK Framework is only available in a backoffice context.

    The extension structure:

    Move your classes which depend on ZK Framework from src to backoffice/src.


    Why ZK Framework is only available in the backoffice context? Backoffice is a web application and can use libraries located in lib and web/webroot/WEB-INF/lib directories. ZK classes are located in the web/webroot/WEB-INF/lib directory. Backoffice extensions (backoffice/src) are loaded in the web context and that is the reason why they can use ZK Framework. Classes defined in src can use only libraries located in the lib directory, so ZK classes are not available.