Открытие ссылки на карточку редактирования из детали

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

В лиде есть деталь. Деталь стандартная, при нажатии на "+" открывается карточка создания.
задача состоит в том, чтобы из детали можно было открыть карточку редактирования по ссылке,а не через выбор пункта "изменить". например, как сделано с деталью Контакты в контрагенте. Делаю по аналогии, но у меня не работает. также в детали выведено поле UsrName и при клике на него нужно открыть объект UsrStructure.

есть особенность -объект детали был создан через конфигурацию,а не через мастер разделов. но у него есть страница редактирования,которая настраивается через деталь.

пробовала и через linkClicked и через on[ColumnName]LinkClick. первый вообще не вызывается. Второй тоже, но для него я знаю почему - так как в Terrasoft.configuration.ModuleStructure нет моей сущности.
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

подскажите, пожалуйста, как я могу реализовать эту задачу?

Нравится

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

"Zaitova Liubov" написал:подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали

"Варфоломеев Данила" написал:
Zaitova Liubov пишет:

подскажите, пожалуйста, как я могу реализовать эту задачу?

Можно поковыряться в GridUtilitiesV2, метод addColumnLink. Метод вызывается при формировании любого грида, ссылку можно сделать принудительно, для конкретной детали


я рассматривала метод addColumnLink. в нем есть следующая строка
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
но моей сущности нет в этой коллекции Terrasoft.configuration.ModuleStructure, потому что я создавала ее через конфигурацию,а не через мастер.

"Zaitova Liubov" написал:var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

Шаг 1: Нафиг выкинуть все методы террасофта
Шаг 2: Костыли. Я к примеру хочу в детали адрес контрагента лепить ссылку на поле "адрес":

addColumnLink: function(item, column) {
	var columnPath = column.columnPath;
	var onColumnLinkClickName = "on" + columnPath + "LinkClick";
	var profileColumns = this.getProfileColumns();
	var profileColumn = profileColumns[columnPath];
	var isProfiledLinkColumn =
		profileColumn && (profileColumn.type === Terrasoft.GridCellType.LINK);
	var isLinkColumn = this.getIsLinkColumn(this.getGridEntitySchema(), column);
	if ((isProfiledLinkColumn || isLinkColumn) && !this.getIsEditable()) {
		var referenceSchemaName = column.referenceSchemaName;
		var schemaConfig = Terrasoft.configuration.ModuleStructure[referenceSchemaName];
		var scope = this;
		if (column.isLookup && schemaConfig) {
			item[onColumnLinkClickName] = function() {
				var record = this.get(columnPath);
				if (!record) {
					return "";
				}
				var recordId = record.value;
				if (!recordId) {
					return "";
				}
				return scope.createLink.call(this, referenceSchemaName, columnPath,
					record.displayValue, recordId);
			};
		} else {
			var columnIdName = item.primaryColumnName;
			var entitySchemaName = this.getGridEntitySchemaName();
			var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
			if (entitySchemaConfig) {
				item[onColumnLinkClickName] = function() {
					var recordId = this.get(columnIdName);
					if (!recordId) {
						return "";
					}
					var displayValue = this.get(columnPath);
					if (scope.Ext.isEmpty(displayValue)) {
						return "";
					}
					var link =
						LinkColumnHelper.createLink(entitySchemaName, columnPath, displayValue, recordId);
					return link || scope.createLink.call(this, entitySchemaName, columnPath,
						displayValue, recordId);
				};
			}
		}
	}
	/**КОСТЫЛИ**/
	if (columnPath === "Address") {
		var scope = this;
		var columnIdName = item.primaryColumnName;
		var entitySchemaName = this.getGridEntitySchemaName();
		item[onColumnLinkClickName] = function() {
			var recordId = item.get("Id");
			if (!recordId) {
				return "";
			}
			var displayValue = item.get("Address");
			if (scope.Ext.isEmpty(displayValue)) {
				return "";
			}
 
			var editPageName ="AccountAddressPageV2";
			var link = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#CardModuleV2/"+editPageName+"/edit/"+recordId;
			return {
				caption: displayValue,
				target: "_self",
				title: displayValue,
				url: link
			};
		};
	}
	if (Ext.isEmpty(item[onColumnLinkClickName])) {
		item[onColumnLinkClickName] = function() {
			return (item.getLinkColumnConfig ? item.getLinkColumnConfig(column) : null);
		};
	}

Шаг 3: Вставить в methods детали.
Результат:
зшс

В чём проблема, то?:smile:

"Варфоломеев Данила" написал:В чём проблема, то?


видимо, во мне) большое спасибо, все работает!

В дополнение, у меня возникла проблема возврата в ту вкладку, из которой вызывалась страница. В addColumnLink сформировал ссылку. Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй. Те же ссылки стандартные, например, "Контрагент" переходят и возвращаются корректно. Что упустил - понять не могу.

"Лапшин Павел Александрович" написал:Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй.

Надо разбираться с HistoryState и браузерной строкой. Иногда при переходе по страницам bpm-ка не меняет путь и вот фиг знает, если честно, как система отреагирует на закрытие карточек(PushBackHistoryState событие). Надо тестить)

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