ERP en LOGICIEL LIBRE dédié aux PME-PMI

           Devenez partenaire Principal ou Majeur de Neogia

Questions fréquentes

Contents

Comment exécuter OfbizNeogia avec une configuration alternative pour éviter d'avoir à modifier les fichiers de configuration par défaut ?

  1. Créer un dossier ofbizNeogia/conf/site (il ne peut pas être commité par erreur car il est référencé dans .cvsignore)
  2. Placer les fichiers de configuration modifiés et les fichiers jars dans ce dossier
  3. Créer un fichier ofbizNeogia/site.properties qui contient la ligne suivante :
ofbiz.neogia.site.conf=conf/site

Il y a des exemples de configurations alternatives dans le dossier ofbizNeogia/conf :


Comment faire fonctionner OfbizNeogia sous Eclipse ?

  1. Sélectionner le projet ofbizNeogia, effectuer un clic-droit dessus -> Run As (Exécuter comme)-> Run (Exécuter)...
  2. Sélectionner Application Java et cliquer sur New (Nouvelle)
  3.  !! Set Run configuration name to OfbizNeogia !!
    • Onglet principal :
      • Projet : ofbizNeogia
      • Classe principale : org.ofbiz.base.start.Start
    • Arguments :
      • Arguments VM : -Xms128M -Xmx256M (coller directement cette information dans la zone qui est éditable)
      • Répertoire de travail : utiliser par défaut le répertoire de travail
    • Cheminement de classe :
      • Entrées Amorce : JRE System Library (laisser par défaut)
      • Entrées utilisateurs : ofbiz.jar depuis le projet ofbizNeogia (il faut supprimer tous existant et ne mettre que le jar : ofbiz.jar du projet à debugger)
    • Environnement :
      • Ajouter une variable à l'environnement LC_ALL=C
  4. Cliquer sur appliquer et exécuter


Vous pouvez également consulter le guide établi en espagnol :

Comment voir quels sont les fichiers modifiés après un rafraîchissement ?

Après avoir rafraîchi un composant, tous ses fichiers générés apparaissent modifiés parce que leur "timbre à date" a changé. Néanmoins, seul un petit sous-ensemble a réellement été modifié. En effectuant une mise à jour cvs au niveau du composant, le "timbre à date" des fichiers inchangés sera réactualisé.

Why some xml files contains validation errors when displayed in Eclipse?

By default, Eclipse looks for xml schema definitions by using the namespaces declared in xml documents which points to www.ofbiz.org. Xml schemas presented on this site don't contain neogia extensions that's why validation errors appear. You can define an XML catalog to force eclipse to look for xml schema on the machine instead of on the net.


Change TCP Port

You can find some basic start configuration in the file: {ofbiz.neogia.home}/base/config/ofbiz-containers.xml. On this file you can change the line:

                <property name="port" value="8080"/>

You can use any port that you want (of course an unused port).

This works for windows also. Remember that you have to be careful with the port number, for example on linux any port below 1024 requires root priviledges to work.

Comptabilité

Saisie de facture impossible; Le rôle d'acteur n'existe pas

Vous venez de charger les données minimum (seed) vous avez paramétré le centre de profit, les périodes, les comptes comptables, .... et plein d'autres choses. Vous testez votre configuration et dans la comptabilité lors de la saisie d'une facture fournisseur le message d'erreur <<Le rôle d'acteur n'existe pas>> apparait:
Vous avez oublié de modifier dans le fichier AccountingProperties.properties l'ID de l'acteur représentant la société pour lequel vous faite la compta, cet acteur doit avoir le rôle INTERNAL_ORGANIZATION.


Généralités sur les Services

L'appel du service renvoie l'erreur :
" EventHandlerException: Service invocation error (null) "

Cette erreur peut se produire lorsqu'un service n'est pas déclaré conformément à sa classe.
Par exemple s'il n'est pas déclaré en "static"(Notamment dans un XXXHelper.java ou XXXServices.java )

Généralités sur les screens et les forms

Dans un form "single", comment ajouter un champs de saisie de donnée ?

Dans un form "single", comment positionner le focus dans un des champs ?

Dans un form "single", comment définir la taille maximale du champs à renseigner ?

 <field name="productId" title="${uiLabelMap.ProductProductId}"><text maxlength="20" size="20"/></field> 
 <field name="productId" title="${uiLabelMap.ProductProductId}"><text-find /></field> 

Dans un form "single", comment choisir la position des champs ?

 <form name="FindOrder" target="Orders" type="single">
   <field name="productId" position="1"><text/></field>
   <field name="goodValue" position="2"><text/></field>
   <field name="orderId" position="3"><text/></field>
   <field name="entryDate" position="1"><date-find/></field>
   <field name="submitButton" title="${uiLabelMap.CommonFind}" position="1" widget-style="buttontext">
     <submit button-type="text-link"/>
   </field>
 </form>

Dans un form "single", comment mettre un champs caché ?

 <field name="orderId"><hidden/></field>

Dans un form list, quels sont les opérateurs disponibles dans le service performFind utilisé pour constituer la liste ?

Dans un form list, comment peut-on charger une liste sans que les critères du performFind aient été entrés ?

 <actions>
   <service service-name="performFind" result-map-name="result" result-map-list-name="listIt">
     <field-map field-name="inputFields" env-name="requestParameters"/>
     <field-map field-name="entityName" env-name="entityName"/>
     <set field="noConditionFind" value="Y"/>
     <field-map field-name="orderBy" value="shipmentId"/>
     <field-map field-name="orderBy" value="dateCreated"/>
   </service>
 </actions>

Dans un form "list", comment faire pour qu'un champs de la liste affiche non pas la clé mais un autre champs de la table ?

       <field name="statusId" title="Nom de statut">
            <display-entity entity-name="StatusItem" description="${description}" key-field-name="statusId"/>
       </field>

Dans un form "list", comment faire lorsqu'on veut utilisé un display-entity mais que la table a plusieurs clés ?

     <row-actions>
       <entity-one entity-name="FacilityLocation" use-cache="true">
         <field-map field-name="facilityId" env-name="facilityIdTo"/>
         <field-map field-name="locationSeqId" env-name="locationSeqIdTo"/>
       </entity-one>
     </row-actions>
     <field name="locationName" title="${uiLabelMap.WarehouseLocationName}"><display /></field>

Dans un form "list", comment créer un lien pour renvoyer vers une autre uri ?

 <field name="stickerLink" widget-style="buttontext" title="${uiLabelMap.ButtonSticker}">
   <hyperlink target="stickerPDF.pdf?orderId=${orderId}&shipmentId=${shipmentId}" description="${uiLabelMap.ButtonSticker}"/>
 </field>

Dans un form "list", comment charger les éléments d'un drop-down à partir d'une table ? Comment trier ces éléments ?

 <field name="facilityId" position="1" title="${uiLabelMap.ProductFacility}:" >
   <drop-down allow-empty="true">
     <entity-options entity-name="Facility" description="${description}"  key-field-name="facilityId">
       <entity-constraint name="facilityTypeId" operator="equals"  value="PICK"/>
       <entity-constraint name="facilityId" operator="not-equals"  value="MONO"/>
       <entity-order-by field-name="description"/>
     </entity-options>
   </drop-down>
 </field>

Dans un form multi, comment utiliser un service dans les listes ?

 <form name="ListPickListItem" target="SendPicklistMulti" paginate-target="PickListItem" ....>

Dans un form multi, le retour OUT du service n'est pas pris en compte dans ma list ?

http://neogia.org/Multi_Service

Dans un form "multi", comment faire pour qu'un champs de la liste ne soit envoyé au service ?

 <field name="orderDate" title="${uiLabelMap.OrderDate}"><display also-hidden="false" /></field>

Dans un form "multi", comment ajouter des cases à cocher ?

 <form name="ListPickListItem" target="SendPicklistMulti" paginate-target="PickListItem"
   type="multi" list-name="listIt" paginate="true" use-row-submit="true">
   <actions>
     <service service-name="performFind" result-map-name="result" result-map-list-name="listIt" >
       <field-map field-name="inputFields" env-name="requestParameters" />
       <field-map field-name="entityName" env-name="entityName"/>
     </service>       
   </actions>
     <field name="_rowSubmit" title="${uiLabelMap.CommonSelect}"><check/></field>
     <field name="picklistBinId"><hidden/></field>
     <field name="picklistId" title="${uiLabelMap.PicklistId}"><display /></field>
     <field name="picklistDate" title="${uiLabelMap.PicklistDate}"><display type="date-hm"/></field>
     <field name="submitButton" title="${uiLabelMap.CommonSend}" position="1" widget-style="buttontext">
       <submit button-type="text-link"/>
     </field>
   </form>

Dans un form "multi", comment faire pour que tous les éléments de la liste soient cochés par défaut ?

 <form name="ListOrdersMulti" target="SendOrdersMulti" ... use-row-submit="true">
   <field name="_rowSubmit" title="${uiLabelMap.CommonSelect}"><check all-checked="true"/></field>
   <field name="orderStatusId" title="${uiLabelMap.CommonStatus}">
     <display-entity also-hidden="false" entity-name="StatusItem" description="${description}" key-field-name="statusId"/>
   </field>
      .....
   <field name="submitButton" title="${uiLabelMap.CommonSend}" position="1" widget-style="buttontext">
     <submit button-type="text-link"/>
   </field>
 </form>

Dans un form "multi" avec des cases à cocher, comment faire pour qu'une ligne ne soit pas cochable ?

 <form name="ListReceive" target="ReceiveIn" paginate-target="ReceiveSelection"
 type="multi" list-name="listIt" paginate="true" use-row-submit="true">
   <field name="facilityId"><hidden /></field>
   <field name="_rowSubmit" title="${uiLabelMap.CommonSelect}" use-when="! "PICK".equals( "${facilityId}" )"><check/></field>
   <field name="_rowSubmit" title="${uiLabelMap.CommonSelect}" 
     use-when=" "STOCK".equals( "${facilityId}" )"><display/></field>
   <field name="quantity" entry-name="qtyToReceive" title="${uiLabelMap.CommonQty}" 
     use-when="! "BIG_P".equals( "${facilityId}" )"><text size="2" /></field>
   <field name="orderId" title="${uiLabelMap.OrderOrderId}"><display /></field>
   <field name="productId" title="${uiLabelMap.ProductProductId}">
     <display description="<a onClick="showDetail('ShowProduct','productId', '${productId}')">${productId}</a>"/>
   </field>
   <field name="orderDate" title="${uiLabelMap.OrderDate}"><display type="date-hm"/></field>
   <field name="submitButton" title="${uiLabelMap.CommonSend}" widget-style="buttontext"><submit /></field>
 </form>

Dans un screen, comment récupérer des informations dans une table ?

Ex: 
 <entity-one entity-name="Product" value-name="product">
   <field-map field-name="productId"/>
 </entity-one>
 <entity-and list-name="lOrderItem" entity-name="OrderItem">
   <field-map field-name="orderId"/>
 </entity-and>
 <entity-condition list-name="lInvent" entity-name="InventoryItem" >
   <condition-list combine="and">
     <condition-expr field-name="productId" env-name="productId"/>
     <condition-expr field-name="quantityOnHandTotal" operator="greater-equals" value="1"/>
   </condition-list>
 </entity-condition>

Dans un screen, comment faire pour afficher un form ou un screen selon une variable récupérer dans les paramètres ?

<screen ...>
  <actions>
    ....
    <set field="productId" from-field="parameters.productId"/>
  </actions>
  <widgets>  
    <container>
      <section>
        <condition><not><if-empty field-name="productId"/></not></condition>
        <widgets>
          <include-form-ftl name="Features" location="component://warehouse/widget/warehouse/WarehouseForms.xml"/>
        </widgets>
        <fail-widgets>
          <include-screen name="OrderStock"/>
        </fail-widgets>
      </section>
    </container>
  </widget>
</screen>


Freemarker (*.ftl)

Comment faire pour appeler un service dans un fichier .ftl ?

Exemple :

<#assign pageTotal = dispatcher.runSync("getTotalAmountForAdvancedGlEntry", Static["org.ofbiz.base.util.UtilMisc"].toMap("trItIdName",
 '${transaction.idName}' , "trTyIdName", '${transactionType.idName}', "userLogin", userLogin))/>

Comment lire une map ?

${entryMaps["entryMap${i}"]}
${entryMaps["entryMap${i}"]["bonDyns"][0].description?if_exists}

Afficher une valeur au format 0,00

Test si la variable contient une valeur, si oui, on applique le formatage. Il n'est pas possible de combiner ?if_exists et ?string...

<#if pageTotal["amounts"].ChargeAchatCol_Charge_Achat_1?has_content>${monthTotal["amounts"].ChargeAchatCol_Charge_Achat_1?string(",##0.00")}

Boucle finie

<#list 1..30 as i >
    <fo:block>${i}</fo:block>
</#list>
<#list nomDeListe as item >
    <fo:block>${item.champ}</fo:block>
</#list>

Affichage date au format jj/mm/aaaa

${dateEdition?string("dd/MM/yyyy")}

XSL-FO pour générer des fichiers au format pdf via FOP

Ecrire un texte vertical

On crée un block-container de la taille voulue et on indique via reference-orientation l'orientation du texte. Dans ce block-container, il ne reste plus qu'à mettre un block standard contenant le texte.

<fo:block-container width="30mm" height="4mm" reference-orientation="90">
   <fo:block text-align="center" font-size="8pt">Mon texte vertical</fo:block>
</fo:block-container>

Nettoyage des logs

Les tableaux

Si message de ce style :

INFO  [LayoutManager] table-layout="fixed" and width="auto", but auto-layout not supported => assuming width="100%"

Dans la déclaration du tableau, mettre :

<fo:table table-layout="fixed" width="100%">

Liste de liens

Tutoriel renderx

les paragraphes

XSL-FO généralités

[XSL-FO sur w3schools

Les balises du language XSL-FO

XSL-FO table-row Object

RenderX - XSL FO Features Test: Demo Code

XSL Formatting Objects

Extensible Stylesheet Language (XSL) Version 1.1

XSL-FO Tutorial and Samples

Tuteur XSL-FO -- XSL-FO tutorial

Using XSL-FO to create printable documents

Régions et marges

Messages d'erreurs dans les logs