axelor / axelor-open-platform

Open source Java framework for business application development
http://axelor.com
Other
391 stars 298 forks source link

[feat] domain expression, rvalue supports multi-layer attributes (multiple dots) #118

Open cabbage89 opened 1 year ago

cabbage89 commented 1 year ago
<field colSpan="4" name="myOrder" title="my orders" domain="self.order.id = :persion.order.orderId"/>

:persion.order.orderId Can be parsed from the model

https://github.com/axelor/axelor-open-platform/blob/master/axelor-web/src/main/webapp/js/axelor.data.js#L148

post: function(data, config) {
            if (data?.data?._domain) {
              var i = 0;
              data.data._domain = data?.data?._domain?.replaceAll(/:([^\s]*)/g, (__, path) => {
                if (path.indexOf('.') !== -1) {
                  let p = `__f${i++}`;
                  try {
                    data.data._domainContext[p] = eval(`data.data._domainContext.${path}`);
                  }catch (e){
                    data.data._domainContext[p]=null;
                  }
                  return ':' + p;
                }
                return __;
              });
            }
            return $http.post(url, data, config);