Mise à jour tarif Article / Création Article depuis un Webservice


#1

Bonjour,

Est il possible de mettre à jour des tarifs depuis un webservice?
Autre question, est il possible d’ajouter une base article de la même manière?

Merci d’avance.

Cordialement,


#2

Bonjour,

Voulez-vous dire effectuer la même opération celle lorsque l’on clique sur le bouton dans la fiche produit?
Si oui, on peut voir comment cela fonctionne avec la console du navigateur:

  1. Request URL: http://localhost:8080/axelor-erp/ws/action

  2. Request Method: POST

  3. Request Payload

    {
    “model”: “com.axelor.apps.base.db.Product”,
    “action”: “save,action-product-method-update-products-prices”,
    “data”: {
    “context”: {
    “_model”: “com.axelor.apps.base.db.Product”,
    “_activeCompany”: {
    “code”: “XXX”,
    “name”: “xxxx”,
    “id”: 1
    },
    “_fromProduction”: true,
    […],
    “barcodeTypeConfig”: {
    “name”: “DATA_MATRIX”,
    “id”: 5
    },
    “id”: 600,
    […]
    “unit”: {
    “name”: “Unité”,
    “id”: 1
    },
    “packPriceSelect”: 0,
    “productSubTypeSelect”: 0,
    “checkExpirationDateAtStockMoveRealization”: false,
    “productVariant”: null,
    “productApproval”: null,
    “salesUnit”: null,
    “lengthUnit”: null,
    “name”: “Générique SE”,
    “customsCodeNomenclature”: null,
    “startDate”: “2019-02-24”,
    “defShipCoefByPartner”: false,
    “productFamily”: {
    “code”: “COMP”,
    “name”: “Composants”,
    “id”: 4
    },
    “usedInDEB”: false,
    “code”: “GEN-SE-TEST”,
    “supplierDeliveryTime”: 0,
    “avgPrice”: “0.0000000000”,
    “productVariantConfig”: null,
    “perishableNbrOfMonths”: 0,
    “description”: null,
    “isUnrenewed”: false,
    “trackingNumberConfiguration”: null,
    “inAti”: false,
    “sellable”: false,
    “purchaseCurrency”: null,
    “autoUpdateSalePrice”: false,
    “massUnit”: null,
    “accountManagementList”: [],
    “parentProduct”: null,
    “productCategory”: {
    “code”: “XXX”,
    “name”: “xxx”,
    “id”: 5
    },
    “costSheetGroup”: null,
    “productTypeSelect”: “storable”,
    […]

    }

Le payload contient l’article en entier, car l’action save est configurée dans le bouton

<button name=“updateProductsPricesBtn” title=“Update products prices” onClick=“save,action-product-method-update-products-prices”/>

On retrouve le contrôleur ici

<action-method name=“action-product-method-update-products-prices” >
<call class=“com.axelor.apps.base.web.ProductController” method=“updateProductsPrices”/>
</action-method>

La méthode est celle-ci

  public void updateProductsPrices(ActionRequest request, ActionResponse response)
      throws AxelorException {
    Product product = request.getContext().asType(Product.class);

    product = productRepo.find(product.getId());

    productService.updateProductPrice(product);

    response.setFlash(I18n.get(IExceptionMessage.PRODUCT_2));
    response.setReload(true);
  }

Donc je ne pense pas que l’on soit obligé d’envoyer tout l’objet dans le contexte, il faut probablement ne mettre que l’id et la base compagnie dans le payload, attention à bien supprimer save de la clef action, sinon cela risque de faire des misères…

{
  "model": "com.axelor.apps.base.db.Product",
  "action": "action-product-method-update-products-prices",
  "data": {
    "context": {
      "_model": "com.axelor.apps.base.db.Product",
      "_activeCompany": {
        "code": "XXX",
        "name": "XXX",
        "id": 1
      },
      "id": XXX
    }
  }
}

Il reste l’utilisation de base des web service, avec les cookies d’authentification etc. Je ne me suis jamais penché sur le sujet.