Сохранение полей детали

Добрый день!

Есть деталь, которая строит и отображает поля с esq фильтрами и вычисляемыми полями на странице.

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

Если ли какой то способ сохранить данные поля?

Есть 4 группы полей :

    1. getPreviousValueItemConfig (Старое значение, itemType: this.Terrasoft.ViewItemType.MODEL_ITEM)

    2. getValueItemConfig (Значение, itemType: this.Terrasoft.ViewItemType.MODEL_ITEM) 

    3. getDeltaItemConfig (Дельта, itemType: this.Terrasoft.ViewItemType.MODEL_ITEM) 

    4. getLabelItemConfig 

    

    Поля строятся на основе следующего кода :

...
	methods: {
		/**
		   * Return row view config with delta and previous value columns
		   */
		  getDetailRowItemsWithVirtualColumnsViewConfig: function(item) {
			  const displayColumn = this.getValueType(item.$SpecificationType);
			  const rowViewConfig = [];
 
			  const column = this.findEntityColumn(displayColumn);
			  if (column) {
				  const columnName = column.name;
				  const dataValueType = column.dataValueType;
 
				  const containerItemConfig = {
					  itemType: this.Terrasoft.ViewItemType.GRID_LAYOUT,
					  name: columnName + "-grid-layout",
					  items: [
						  this.getValueItemConfig(columnName, dataValueType, displayColumn),
						  this.getPreviousValueItemConfig(columnName, dataValueType),
						  this.getDeltaItemConfig(columnName, dataValueType),
						  this.getLabelItemConfig(columnName)
					  ],
					  // index: 0
				  };
				  rowViewConfig.push(containerItemConfig);
			  }
 
			  return rowViewConfig;
		  },
 
		  /**
		   * Returns value type.
		   * @public
		   * @return {String} Value type.
		   */
		  getValueType: function(dataType) {
			  switch (dataType.value) {
				  case SpecificationBuilderConstants.SpecificationType.Lookup:
					  return "SpecificationListItem";
				  case SpecificationBuilderConstants.SpecificationType.Text:
					  return "TextValue";
				  case SpecificationBuilderConstants.SpecificationType.Float:
					  return "FloatValue";
				  case SpecificationBuilderConstants.SpecificationType.Integer:
					  return "IntegerValue";
				  case SpecificationBuilderConstants.SpecificationType.Boolean:
					  return "BooleanValue";
				  default:
					  return "";
			  }
		  },
 
		  /**
		   * Returns label config for row
		   * @param {String} columnName
		   * @returns {Object}
		   */
		  getLabelItemConfig: function(columnName) {
			  const labelItemConfig = {
				  itemType: this.Terrasoft.ViewItemType.LABEL,
				  id: columnName + "-label-" + this.Terrasoft.generateGUID(),
				  name: columnName + "-label-" + this.Terrasoft.generateGUID(),
				  caption: {
					  bindTo: "Caption"
				  },
				  layout: {
					  row: 0,
					  column: 0,
					  colSpan: 6,
					  rowSpan: 1
				  }
			  };
 
			  if (columnName !== "BooleanValue") {
				  labelItemConfig.isRequired = {
					  "bindTo": "getControlRequired"
				  };
			  }
			  return labelItemConfig;
		  },
 
		  /**
		   * Returns previous value control config for row
		   * @param columnName
		   * @param dataValueType
		   * @returns {Object}
		   */
		  getPreviousValueItemConfig: function(columnName, dataValueType) {
			  return {
				  itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
				  dataValueType: dataValueType,
				  id: columnName + "-previousValue-" + this.Terrasoft.generateGUID(),
				  name: columnName + "-previousValue-" + this.Terrasoft.generateGUID(),
				  caption: this.get("Resources.Strings.PreviousValueCaption"),
				  visible: {
					  bindTo: "ControlVisible",
					  bindConfig: {
						  converter: function() {
							  return this.getControlVisible(columnName);
						  }
					  }
				  },
				  layout: {
					  row: 0,
					  column: 6,
					  colSpan: 6,
					  rowSpan: 1
				  },
				  enabled: this.$CanChangeOppProductConditionSpecificationFieldsDetailAttr,
				  bindTo: "PreviousValue"
			  };
		  },
 
		  /**
		   * Returns value control config for row
		   * @param {String} columnName
		   * @param {Terrasoft.DataValueType} dataValueType
		   * @param {String} displayColumn
		   * @returns {Object}
		   */
		  getValueItemConfig: function(columnName, dataValueType, displayColumn) {
			  const valueItemConfig = {
				  itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
				  dataValueType: dataValueType,
				  id: columnName + "-" + this.Terrasoft.generateGUID(),
				  name: columnName + "-" + this.Terrasoft.generateGUID(),
				  caption: this.get("Resources.Strings.ValueCaption"),
				  layout: {
					  row: 0,
					  column: 12,
					  colSpan: 6,
					  rowSpan: 1
				  },
				  bindTo: displayColumn,
				  enabled: {
					  bindTo: "isEditable"
				  }
			  };
 
			  if (dataValueType === Terrasoft.DataValueType.LOOKUP) {
				  valueItemConfig.contentType = Terrasoft.ContentType.ENUM;
			  }
			  return valueItemConfig;
		  },
 
		  /**
		   * Returns delta value control config for row
		   * @param columnName
		   * @param dataValueType
		   * @returns {Object}
		   */
		  getDeltaItemConfig: function(columnName, dataValueType) {
			  return {
				  itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
				  dataValueType: dataValueType,
				  id: columnName + "-deltaValue-" + this.Terrasoft.generateGUID(),
				  name: columnName + "-deltaValue-" + this.Terrasoft.generateGUID(),
				  caption: this.get("Resources.Strings.DeltaValueCaption"),
				  visible: { "bindTo": "getIsDeltaVisible" },//isNumberValue,
				  layout: {
					  row: 0,
					  column: 18,
					  colSpan: 6,
					  rowSpan: 1
				  },
				  enabled: this.$CanChangeOppProductConditionSpecificationFieldsDetailAttr,
				  bindTo: "DeltaValue"
			  };
		  }
	}
...

 

Нравится

2 комментария

Визуально деталь выглядит так :

Добрый день!

В данном случае боюсь не выйдет определить причину такого поведения без проведения дебага логики этой детали. Со своей стороны скажу, что при изменении поля должен вызываться базовый метод onItemChanged, который отправляет сообщение "itemChanged". Следует проверить путь этого сообщения на наличии препятствий его обработки. Далее стоит проверить логику вызова базового метода onSaved, что он делает и что происходит далее. Точно не скажу в каких конкретно схемах искать данные методы, лучше вбить их в поиск dev tools и поставить брейкпоинты в них и смотреть, что конкретно вызывается и в какой последовательности.

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