Задача рассматривалась уже не раз, но я никак не могу понять, где отклоняюсь от правильной процедуры.



Задача: добавить на страницу пользовательское поле, значение которого рассчитывается по изменению значения другого поля. Значение должно только отображаться на странице, сохранять его в БД нет смысла (оно строго вычисляется исходя из значений двух других колонок).



Вроде бы все должно работать, и значение поля CalculatedValue должно вычисляться после загрузки страницы и после изменения значений в полях TurnoverF и TurnoverP. Но реально изменение случается только при загрузке страницы - т.е. метод, прописанный в dependencies, не срабатывает. Почему?

entitySchemaName: "UsrTenant",
attributes: {
 "CalculatedValue": {
     dataValueType: Terrasoft.DataValueType.FLOAT,
     dependencies: {
       columns: ["TurnoverF", "TurnoverP"], 
       methodName: "calculateValue"
     }
  }
},
methods: {
  onEntityInitialized: function() {
    this.callParent(arguments);				
    this.calculateValue();
  },
  calculateValue: function() {
    var turnoverF = this.get("TurnoverF");
    if (!turnoverF) {
      turnoverF = 0;
    }
    var turnoverP = this.get("TurnoverP");
     if (!turnoverP) {
       turnoverP = 0;
     }				
    var result = (turnoverP === 0) ? 0 : (turnoverF / turnoverP - 1);
    this.set("CalculatedValue", result);
  }
},
diff : {
//.....................
{
  "operation": "insert",
  "name": "INT_TurnoverF",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 0,
      "row": 0,
      "layoutName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333"
    },
    "bindTo": "TurnoverF",
    "enabled": true
  },
  "parentName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333",
  "propertyName": "items",
  "index": 0
},
{
  "operation": "insert",
  "name": "INT_TurnoverP",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 12,
      "row": 0,
      "layoutName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333"
    },
    "bindTo": "TurnoverP",
    "enabled": true
  },
  "parentName": "Tab7ec5c1bfTabLabelGridLayout4f9aa333",
  "propertyName": "items",
  "index": 1
},
{
  "operation": "insert",
  "name": "INTCalculatedValue",
  "values": {
    "caption": "Вычисляемое поле",
    "bindTo": "CalculatedValue",
    "layout": {
      "column": 12, 
      "rowSpan": 1,
      "row": 4, 
      "layoutName": "Header",
      "colSpan": 9
    }
  },
  "parentName": "Header",
  "propertyName": "items",
  "enabled": true,
  "index": 9
},
//.....................
}

 

Нравится

2 комментария
Лучший ответ

Добрый день.

Попробуйте добавить квадратные скобки после dependencies, как на примере ниже:

	"dependencies": [
		{
			"columns": ["Patient"],
			"methodName": "setPatientFieldsValue"
		}
	]

 

Добрый день.

Попробуйте добавить квадратные скобки после dependencies, как на примере ниже:

	"dependencies": [
		{
			"columns": ["Patient"],
			"methodName": "setPatientFieldsValue"
		}
	]

 

Алла Савельева,

как и предполагалось, ошибка была абсолютно дурацкой...

Спасибо!

Показать все комментарии