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,
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,
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:
Request URL: http://localhost:8080/axelor-erp/ws/action
Request Method: POST
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.