Добрый день!
Есть деталь, которая строит и отображает поля с 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 и поставить брейкпоинты в них и смотреть, что конкретно вызывается и в какой последовательности.

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

Добрый день!

 

Пользуемся Sales Enterprise. Хочу подвязать договоры к Продаже, добавила деталь "Договоры", но когда нажимаешь плюсик для добавления договора, он не подвязывается к текущей продаже. Как исправить?

Нравится

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

Не могли бы вы сделать скриншот настроек добавленой вами детали?

Айгуль, а сам договор создаётся? В нем поле Продажа заполняется при создании новой записи из детали?

В настройках самой детали должны быть корректно указаны связи. 

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

Коллеги подскажите пожалуйста имеется ли возможность отключить добавление записей в таблицу ActivityParticipant. Необходимо для оптимизации системы, за один год было добавлено более 100 млн записей, поскольку отправка сообщения из системы основано на активностях

Нравится

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

В своём пакете заместить объект активности и во встроенном БП заменить две функции с этой логикой пустыми:

#region Methods: Public
 
//Не записывать в деталь Участников
public override void UpdateParticipantsByOwnerContact() {}
public override void CreateActivityParticipantsFromInsertedValues() {}
 
#endregion

 

Спасибо, попробую ваш вариант

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

Добрый день коллеги, при загрузке раздела дважды возникает ошибка

 

Заголовок для подписи "SymptomsFieldContainer1" не был найден.

Невозможно найти колонку по конфигурации: "{"layout":{"colSpan":24,"rowSpan":1,"column":0,"row":2},"name":"SymptomsFieldContainer1"}" .

 

SymptomsFieldContainer1 это поле типа контейнер для того, чтобы было реализовано новое поле по типу "Описание".

Оно было добавлено в замещающей странице CasePage

{
	"operation": "insert",
	"name": "SymptomsFieldContainer1",
	"values": {
		"layout": {
			"column": 0,
			"row": 2,
			"colSpan": 24,
			"rowSpan": 1,
			"layoutName":"Header"
		},
		"wrapClass": [
			"control-width-15 control-left solution-field-container"
		],
		"itemType": 7,
		"items": []
	},
	"parentName": "CaseInformation_gridLayout",
	"propertyName": "items",
},

Методом проб и ошибок выяснилось, что ошибка возникает дважды на двух старых схемах

При этом CasePage является родительской для всех Page в данном разделе.

Ошибка не возникает на других двух схемах, но при этом видимо конфликтует с старыми.

Нравится

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

Добрый день,

 

Попробовал добавить этот контейнер на демку - никаких ошибок нет. Кроме того, Вы уверены, что у страниц редактирования из Вашего скриншота родитель CasePage, а не BaseModulePageV2 (стандартная для типизированных страниц). Или была дополнительная кастомизация и родитель у страниц менялся? Если так, то можно получить полный код одной из страниц редактирования, открытие которой возвращает ошибку и еще как она влияет на работу сайта помимо того, что контейнер не отображается?

Добавить комментарий

Oleg Drobina,

Спасибо за ваш ответ, визуально проблем выявлено не было, но само наличие ошибки смущает.
Родительская страница у всех CasePage, но при реализации кастомного пакета, этот CasePage был замещен и в нём реализован новый контейнер, прикрепляю код данной страницы

define("CasePage", [], function() {
	return {
		entitySchemaName: "Case",
		attributes: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{
			"FileDetailV2fe3b2d92": {
				"schemaName": "FileDetailV2",
				"entitySchemaName": "CaseFile",
				"filter": {
					"detailColumn": "Case",
					"masterColumn": "Id"
				}
			},
			"KnowledgeBaseInCaseDetailfca68878": {
				"schemaName": "KnowledgeBaseInCaseDetail",
				"entitySchemaName": "KnowledgeBaseInCase",
				"filter": {
					"detailColumn": "Case",
					"masterColumn": "Id"
				}
			},
			"VisaDetailV218d4bda2": {
				"schemaName": "VisaDetailV2",
				"entitySchemaName": "ITdsCaseVisa",
				"filter": {
					"masterColumn": "Id",
					"detailColumn": "ITdsCase"
				}
			}
		}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "ReclassificationButton",
				"values": {
					"itemType": 5,
					"caption": {
						"bindTo": "Resources.Strings.ReclassificationButtonCaption"
					},
					"click": {
						"bindTo": "onReclassificationButtonClick"
					},
					"enabled": true,
					"visible": true,
					"style": "red",
					"layout": {
						"column": 1,
						"row": 6,
						"colSpan": 1
					}
				},
				"parentName": "LeftContainer",
				"propertyName": "items",
				"index": 10
			},
			{
				"operation": "insert",
				"name": "TestButton1",
				"values": {
					"itemType": 5,
					"caption": "Test",
					"click": {
						"bindTo": "onTestButtonClick1"
					},
					"enabled": true,
					"visible": false,
					"style": "yellow",
					"layout": {
						"column": 1,
						"row": 6,
						"colSpan": 1
					}
				},
				"parentName": "LeftContainer",
				"propertyName": "items",
				"index": 11
			},
			{
				"operation": "insert",
				"name": "NegotiationButton1",
				"values": {
					"itemType": 5,
					"caption": {
						"bindTo": "Resources.Strings.NegotiateButtonCaption1"
					},
					"click": {
						"bindTo": "onNegotiationButtonClick1"
					},
					"enabled": {
						"bindTo": "isNegotiatorSet1"
					},
					"visible": {
						"bindTo": "isNegotiatorSet1"
					},
					"style": "green",
					"layout": {
						"column": 1,
						"row": 6,
						"colSpan": 1
					}
				},
				"parentName": "LeftContainer",
				"propertyName": "items",
				"index": 12
			},
			{
				"operation": "remove",
				"name": "Symptoms"
			},
			{
				"operation": "insert",
				"name": "SymptomsFieldContainer",
				"values": {
					"layout": {
						"column": 0,
						"row": 1,
						"colSpan": 24,
						"rowSpan": 1
					},
					"wrapClass": [
						"control-width-15 control-left solution-field-container"
					],
					"itemType": 7,
					"items": []
				},
				"parentName": "CaseInformation_gridLayout",
				"propertyName": "items",
			},
			{
				"operation": "insert",
				"name": "Symptoms",
				"values": {
					"itemType": 3,
					"dataValueType": 1,
					"contentType": 4,
					"value": {
						"bindTo": "Symptoms"
					},
					"markerValue": "Symptoms",
					"labelConfig": {
						"visible": false
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "onImageLoaded"
						},
						"imagePasted": {
							"bindTo": "onImagePasted"
						},
						"plainTextValue": {
							"bindTo": "NotHtmlNote"
						},
						"images": {
							"bindTo": "Images"
						},
						"plainTextMode": {
							"bindTo": "plainTextMode"
						}
					}
				},
				"parentName": "SymptomsFieldContainer",
				"propertyName": "items"
			},
			{
				"operation": "move",
				"name": "ESNTab",
				"parentName": "Tabs",
				"propertyName": "tabs"
			},
			{
				"operation": "move",
				"name": "TimelineTab",
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 3
			},
			{
				"operation": "insert",
				"propertyName": "tabs",
				"parentName": "Tabs",
				"name": "Tabf1d4d2a9TabLabel",
				"values": {
					"caption": {
						"bindTo": "Resources.Strings.TabVisaCaption"
					},
					"items": []
				}
			},
			{
				"operation": "insert",
				"propertyName": "items",
				"parentName": "Tabf1d4d2a9TabLabel",
				"name": "VisaDetailV218d4bda2",
				"values": {
					"itemType": 2,
					"markerValue": "added-detail"
				}
			}
		]/**SCHEMA_DIFF*/
	};
});

 

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

 Добрый день коллеги, столкнулся с проблемой, которую не в силах решить, заказчик попросил реализовать новый фильтр в разделе, решением оказался fixedfilter с использованием метода initfixedfilterconfig.

// Добавить фильтр по типу Обращения
initFixedFiltersConfig: function() {
	this.callParent();
	var defvalue = [
		{value: "13fa5292-c957-4452-8bea-97e5cd381ed0",displayValue: "IT"}, 
		{value: "51c2810b-2c34-4046-a4bf-2cca62b3e10a",displayValue: "Maintenance"}
	];
	var ffc = this.get("FixedFilterConfig"); // Прошлые фильтры
	var fixedFilterConfig = {
		name: "KORUSLOOKUPCaseType",
		columnName: "KORUSLOOKUPCaseType",
		caption: "Тип",
		isCustomFilter: true,
		dataValueType: this.Terrasoft.DataValueType.LOOKUP,
		appendCurrentContactMenuItem: false,
        addNewFilterCaption: this.get("Resources.Strings.SelectFilterTypeCaption"), // Выбрать тип
        hint: this.get("Resources.Strings.SelectFilterTypeCaption"), // Выберите тип обращения
		buttonImageConfig: this.get("Resources.Images.SelectFilterTypeImage"),
		defValue: defvalue,
		//appendFilter: this.appendFixedCaseTypeFilter, - добавление фильтра ( не меняет визуал)
		//getFilter: this.appendFixedCaseTypeFilter
	};
	if (ffc != undefined) {
		ffc.filters.push(fixedFilterConfig);
		this.set("FixedFilterConfig", ffc);
	}
},

Фильтр работает как надо, но после последовала просьба очищать фильтр при выборе нового значения , по сути при нажатии на кнопку "Выбрать тип", необходимо реализовать сначала логику кнопки "Очистить"

При этом нельзя затрагивать логику прошлых фильтров. Так же не хотелось бы решать эту задачу методом добавления поля типа Lookup в шапку фильтров

Нравится

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

Добрый день,

 

Реализовать эту функциональность будет крайне сложно, если возможно впринципе, потому что замещения FixedFilterViewModelV2 с моей стороны ничего не дали. Необходимо завязываться на метод lookupSelecting в FixedFilterViewModelV2, потому что колбек функция в ней как раз отвечает за обновление фильтра. В контексте выполнения функции можно сохранить текущий фильтр (вычитать this.$Filters и проверить есть ли там что-то сейчас и если есть, то очищать этот фильтр). Когда в открытом попап окне выбирается новое условие, то колбек вызывает метод addNonPeriodFilterValue, который добавляет к существующей фильтрации ту, которую мы выбираем из попап окна, внутри которого срабатывает метод filterChanged, который обновляет фильтр на UI. То есть, отталкиваться нужно было бы от метода lookupSelecting, но, похоже, это придется полностью переписывать логику View модели и переподключать её к схеме раздела.

Спасибо за ваш ответ, попробую реализовать его или какие-то обходные решения

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

When opened, the process constantly shows the loading icon, it is not possible to make any changes to it. Tried looking at the metadata, but couldn't find any errors. Please tell me how to solve this problem

Нравится

1 комментарий

Hello Hanna, 

 

Please write to support@creatio.com and clarify the website name. Also, provide external access to your website. 

 

Looking forward to hearing from you, 

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

Здравствуйте ! 

Экспорт списка записей по дефолту сохраняет данные тех полей которые настроены через вид, как сделать так чтобы выводились в Excel все поля без настройки через Вид и без доп приложений из маркета ? Есть ли вариант без разраба ? 

Нравится

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

Здравствуйте!

На данный момент в базовой конфигурации приложения нет возможности сделать выгрузку определенных полей.

Пожелание зафиксировано и передано на ответственную команду разработки для рассмотрения реализации в будущих версиях.

С уважением,
Богдан

Можно настроить список в аналитике и экспортировать оттуда.

Можно добавить как справочник и экспортировать оттуда.

Можно в PowerBI получить данные через ODATA

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

Добрый день!
Хочу добавить панель редактирования текста к существующему полю сообщения, но необходимая панель у него не появляется

Следовал инструкции https://community.terrasoft.ua/questions/izmenenie-teksta-v-kommentariy…

Для этого создал замещающую модель представления базовой схемы SocialFeed из пакета ESN, после чего удалось отрисовать новое поле с редактором

 

diff: [
// Сообщение в которое хочу добавить редактор текста 
//Зеленый блок на картинке
{
	"operation": "insert",
	"name": "SocialMessageEdit",
	"parentName": "SocialMessageEditContainer",
	"propertyName": "items",
	"values": {
		"generateId": false,
		"className": "Terrasoft.ESNHtmlEdit",
		"itemType": Terrasoft.ViewItemType.MODEL_ITEM,
		"dataValueType": Terrasoft.DataValueType.TEXT,
		"contentType": Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		"keydown": {bindTo: "onKeyDown"},
		"enterkeypressed": {bindTo: "onEnterKeyPressed"},
		"value": {bindTo: "SocialMessageText"},
		"placeholder": {bindTo: "Resources.Strings.WritePostHint"},
		"classes": {
			htmlEditClass: ["postMessage", "placeholderOpacity", "feedMaxWidth"]
		},
		"focus": {bindTo: "onSocialMessageEditFocus"},
		"focused": {bindTo: "SocialMessageEditFocused"},
		"blur": {bindTo: "onSocialMessageEditBlur"},
		"markerValue": "postMessageMemoEdit",
		"height": "26px",
		"prepareList": {bindTo: "prepareEntitiesExpandableList"},
		"list": {bindTo: "entitiesList"},
		"listViewItemRender": {bindTo: "onEntitiesListViewItemRender"},
		"autoGrow": true,
		"autoGrowMinHeight": 26,
		"customItemAttributes": {
			schema: {
				property: "schemaName",
				attribute: "data-schemaname"
			}
		}
	}
},
 
//Поле с редактором, которое удалось добавить
//Красный блок на картинке
{				
	"operation": "insert", // Операция добавления компонента на страницу.
	"name": "Message",//"Message", // Имя колонки схемы, к которой привязан компонент.
	"parentName": "SocialMessageEditContainer", // Мета-имя родительского контейнера, в который добавляется поле.
	"propertyName": "items", // Поле добавляется в коллекцию компонентов родительского элемента.
	"values": {
		// Заголовок поля.
		"contentType": this.Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		// Расположение поля.
		"layout": {						
			"column": 0, // Номер столбца.						
			"row": 0, // 5 Номер строки.						
			"colSpan": 12, // 12 Диапазон занимаемых столбцов.
			"layoutName": "SocialMessageEditContainer"
		},
		"height": "50px",
		"styles": {
			"background-color": "white"
		},
		"controlConfig": {  //здесь и ниже код для того, чтобы в примечания можно было добавлять картинки
			"imageLoaded": {
				"bindTo": "SortIcon"//"insertImagesToNotes"
			},
			"images": {
				"bindTo": "SummariesIcon"//"NotesImagesCollection"
			}
		}
	}
}
]

Вот такой результат вижу сейчас

Нравится

5 комментариев

Если попробовать операцией merge изменить зеленый блок, функциональность не проявляется

 

{				
	"operation": "merge", // Операция добавления компонента на страницу.
	"name": "SocialMessageEdit",//"Message", // Имя колонки схемы, к которой привязан компонент.
	"parentName": "SocialMessageEditContainer", // Мета-имя родительского контейнера, в который добавляется поле.
	"propertyName": "items", // Поле добавляется в коллекцию компонентов родительского элемента.
	"values": {
		// Заголовок поля.
		"contentType": this.Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		// Расположение поля.
		"layout": {						
			"column": 0, // Номер столбца.						
			"row": 0, // 5 Номер строки.						
			"colSpan": 12, // 12 Диапазон занимаемых столбцов.
			"layoutName": "SocialMessageEditContainer"
		},
		"height": "50px",
		"styles": {
			"background-color": "white"
		},
		"controlConfig": {  //здесь и ниже код для того, чтобы в примечания можно было добавлять картинки
			"imageLoaded": {
				"bindTo": "SortIcon"//"insertImagesToNotes"
			},
			"images": {
				"bindTo": "SummariesIcon"//"NotesImagesCollection"
			}
		}
	}
}

 

Полный код замещающей модели представления базовой схемы SocialFeed :

https://datagr-my.sharepoint.com/:u:/g/personal/serhii_udielov_datagroup_ua/Efsq1LLC5wJOuTQV_9Ld4nMB3Y12zlmuLfn96ROGOyQHJA?e=jjhI5y 

Добрый день,

 

У меня получилось такое сделать, только нужно еще с кнопкой Publish доделать (пробовал через новые контейнеры сделать, но кнопку адекватно переместить не смог):

Сам код:

define("SocialFeed", ["ESNHtmlEditModule", "SocialMentionUtilities", "css!SocialMessagePublisherModule", "NotesUtilities"
], function() {
	return {
      	entitySchemaName: "SocialMessage",
      	mixins: {
			NotesUtilities: "Terrasoft.NotesUtilities"
		},
      	attributes: {
        	"NotesImagesCollection": {dataValueType: Terrasoft.DataValueType.COLLECTION}
		},
 
      	methods: {
          /**
			 * @inheritdoc
			 * @overridden
			 */
          	init: function(callback, scope) {
                this.callParent(arguments); 
                this.mixins.NotesUtilities.initNotesImagesCollection.call(this);
        	},
          	onNotesImagesUploadComplete: function() {
                this.hideBodyMask(); 
                this.updateFileDetail(); 
        	}, 
        	onNotesImagesUpload: function() { 
                this.showBodyMask(); 
        	},
 
          	onButtonClick: function(){
				console.log("Test");
            },
 
			postPublishActionsVisible: function() {
				return true;
			}
        },
 
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "MessageContainer",
					"parentName": "SocialFeedHeader",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
			{				
				"operation": "insert",
				"name": "Message",
				"parentName": "MessageContainer", 
				"propertyName": "items",
				"values": {
					"contentType": this.Terrasoft.ContentType.RICH_TEXT,
					"labelConfig": {
						"visible": false
					},
					"value": {bindTo: "SocialMessageText"},
					"layout": {						
						"column": 0,						
						"row": 0,						
						"colSpan": 12,
                      	"layoutName": "SocialFeedHeader"
					},
					"height": "50px",
					"styles": {
							"background-color": "white"
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "SortIcon"
						},
						"images": {
							"bindTo": "NotesImagesCollection"
						}
					}
				}
			},
 
			{
					"operation": "insert",
					"name": "MessagePublishButtonContainer",
					"parentName": "MessageContainer",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"classes": {
							wrapClassName: ["publishButtonWrap"]
						},
						"visible": {bindTo: "postPublishActionsVisible"},
						"items": []
					}
				},
 
			{
					"operation": "insert",
					"parentName": "MessagePublishButtonContainer",
					"name": "MessagePublishButton",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"caption": {bindTo: "Resources.Strings.Publish"},
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"click": {bindTo: "onPostPublishClick"},
						"markerValue": "publishPostMessageButton",
						"classes": {
							textClass: ["floatRight"]
						},
						"clickDebounceTimeout": 1000
					}
				},
			{
				"operation": "remove",
				"name": "SocialMessageContainer"
			}
		]/**SCHEMA_DIFF*/
	};
});

Сообщения публикуются при нажатии на Publish, осталось только переместить саму кнопку.

Oleg Drobina,
Супер! Получилось отобразить редактор, поигрался немного с индексами и вышло более-менее корректно отобразить необходимые панельки

Но теперь появилась следующая проблема :
при попытке добавить изображение с локального устройства, ловлю такое (картинка не загружаеться):

Мой текущий код елемента :
{                
              "operation": "insert",
                "name": "Message",
                "parentName": "MessageContainer", 
                "propertyName": "items",
                "values": {
                      //"bindTo": "Message",
                      "itemType": Terrasoft.ViewItemType.MODEL_ITEM,
                      //"dataValueType": Terrasoft.DataValueType.TEXT,
                    "contentType": this.Terrasoft.ContentType.RICH_TEXT,
                      //"className": "Terrasoft.ESNHtmlEdit", //- removed redactor
                    "labelConfig": {
                        "visible": false
                    },
                      // "keydown": {bindTo: "onKeyDown"}, //invalid logic in side chat
                    // "enterkeypressed": {bindTo: "onEnterKeyPressed"}, //invalid logic in side chat
                    "value": {bindTo: "SocialMessageText"}, //+
                    //"placeholder": {bindTo: "Resources.Strings.WritePostHint"},
                      "focus": {bindTo: "onSocialMessageEditFocus"},
                    "focused": {bindTo: "SocialMessageEditFocused"},
                    "blur": {bindTo: "onSocialMessageEditBlur"},
                    "markerValue": "postMessageMemoEdit",
                    "layout": {                        
                        "column": 0,                        
                        "row": 0,                        
                        "colSpan": 12,
                          "layoutName": "SocialFeedHeader"
                    },
                    "height": "26px",
                      //"classes": {
                    //        htmlEditClass: ["placeholderOpacity"]
                    //},
                    "styles": {
                            "background-color": "white"
                    },
                    "controlConfig": {                          
                        "imageLoaded": {
                            "bindTo": "SortIcon"
                        },
                        "images": {
                            "bindTo": "NotesImagesCollection"
                        }
                    }
                },
                  "index" : 0
            },

Поправил код, теперь изображения загружаются корректно

 

 define("SocialFeed", ["ESNHtmlEditModule", "SocialMentionUtilities", "css!SocialMessagePublisherModule", "NotesUtilities"
], function() {
	return {
      	entitySchemaName: "SocialMessage",
      	mixins: {
			NotesUtilities: "Terrasoft.NotesUtilities"
		},
      	attributes: {
        	"NotesImagesCollection": {dataValueType: Terrasoft.DataValueType.COLLECTION}
		},
 
      	methods: {
          /**
			 * @inheritdoc
			 * @overridden
			 */
          	init: function(callback, scope) {
                this.callParent(arguments); 
                this.mixins.NotesUtilities.initNotesImagesCollection.call(this);
        	},
			postPublishActionsVisible: function() {
				return true;
			}
        },
 
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "MessageContainer",
					"parentName": "SocialFeedHeader",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
			{				
				"operation": "insert",
				"name": "Message",
				"parentName": "MessageContainer", 
				"propertyName": "items",
				"values": {
					"contentType": this.Terrasoft.ContentType.RICH_TEXT,
					"labelConfig": {
						"visible": false
					},
					"value": {bindTo: "SocialMessageText"},
					"layout": {						
						"column": 0,						
						"row": 0,						
						"colSpan": 12,
                      	"layoutName": "SocialFeedHeader"
					},
					"height": "50px",
					"styles": {
							"background-color": "white"
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "insertImagesToNotes"
						},
						"images": {
							"bindTo": "NotesImagesCollection"
						}
					}
				}
			},
 
			{
					"operation": "insert",
					"name": "MessagePublishButtonContainer",
					"parentName": "MessageContainer",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"classes": {
							wrapClassName: ["publishButtonWrap"]
						},
						"visible": {bindTo: "postPublishActionsVisible"},
						"items": []
					}
				},
 
			{
					"operation": "insert",
					"parentName": "MessagePublishButtonContainer",
					"name": "MessagePublishButton",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"caption": {bindTo: "Resources.Strings.Publish"},
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"click": {bindTo: "onPostPublishClick"},
						"markerValue": "publishPostMessageButton",
						"classes": {
							textClass: ["floatRight"]
						},
						"clickDebounceTimeout": 1000
					}
				},
			{
				"operation": "remove",
				"name": "SocialMessageContainer"
			}
		]/**SCHEMA_DIFF*/
	};
});

 

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

Добрый день. Мне необходимо перенести права доступа на записи активностей, которые были разданы бизнес процессом на другую систему, в какую таблицу они(права) пишутся?

Нравится

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

Здравствуйте,

 

Для каждого объека есть отдельная таблица с правами, названия у них по типу:

Sys[Название Объекта]Right 

Например - SysCaseRight, SysContactRight. Нужно только подставить название нужного объекта в середину.

 

С уважением,

Мирослава

Здравствуйте,

 

Для каждого объека есть отдельная таблица с правами, названия у них по типу:

Sys[Название Объекта]Right 

Например - SysCaseRight, SysContactRight. Нужно только подставить название нужного объекта в середину.

 

С уважением,

Мирослава

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

Приветствую всех!
Возникла необходимость повесить проверку на кол-во символов в обычном и расширенном фильтрах раздела из-за большого объема результата выборки, который влияет на производительность. Нужно сделать только для одного раздела. 

Мне надо повесить проверку для фильтра "Заголовок".
Если с обычным фильтром можно как-то решить вопрос через getFilter, то как стучать в расширенные?
 

Нравится

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

Здравствуйте Владислав,

 

С расширенными фильтрами так же само, как и с обычными: как только нажимается кнопка "Применить", чтобы применить расширенный фильтр, вызывается тот же метод getFilters из BaseDataView. То есть нужно смотреть как можно заменить логику этого метода.

 

С уважением,
Олег

Удалось достать значения фильтров, но понял что используя getFilter мою задачу реализовать не выйдет. Во-первых я никак не могу переопределить кнопку "применить" из схемы которая рисует и собирает конфиг расширенного фильтра - ExtendedFilterEditModelV2.
Во-вторых, как я понял, в коробке при инициализации раздела по дефолту применяется фильтрация из профайла текущего пользователя и метод getFilter при открытии раздела отрабатывает несколько раз.

Прикрепляю код переопределенной схемы раздела.
 

define("ActivitySectionV2", ["ExtendedFilterEditModelV2"], function(ExtendedFilterEditModelV2) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
 
            getFilters: function () {
                var filters = this.callParent(arguments);
                var customFilters = filters.contains("CustomFilters") ? filters.get("CustomFilters") : null;
                //debugger;
                var count = 0;
                for(var i in customFilters.collection.keys) { 
                    if(customFilters.collection.items[i].isEnabled && customFilters.collection.items[i].leftExpressionCaption == "Заголовок"){ 
                        var headerCaption = customFilters.collection.items[i].rightExpression.parameter.value; //rightExpression.parameter.value
                        if(headerCaption == null || headerCaption.length < 3) { 
                            this.showInformationDialog("WORKING");
                            //this.applyFilters();
                            return filters;
                        }
                    }
                }
                return filters;
            },
 
            applyButton: function() {
                this.showInformationDialog("btn handler works");
            },
        }
 
	};
});

По сути минимально хотелось бы достичь фикса кнопки applyButton, чтобы при apply отлавливать фильтрацию и отображать свое сообщение пользователю.
Буду благодарен за любую помощь.

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