Как узнать родительскую страницу на которую добавлена деталь из JS

Здравствуйте, Коллеги!

Есть деталь, добавленная на несколько страниц. Необходимо реализовать разную клиентскую JavaSdcript логику в зависимости от того, на какую странице добавлена деталь. Подскажите, пожалуйста, как это сделать из JS.

Спасибо, Коллеги!

Нравится

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

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

Для решения задачи следует:
// Взять информацию о детали
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id]) || {};
// Имя карточки, на которой размещена деталь
var cardPageName = detailInfo.cardPageName;

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

Спасибо за ответ!
Однако вылетает исключение на строчке

var detailInfo = this.sandbox.publish("getDetailInfo", null, [this.sandbox.id]) || {};

Текст исключения

Uncaught i {message: "Message getDetailInfo is not defined in undefined module"}

Сокращенный код детали:

define("UsrUsrVacancyCandidates1PageV2", ["GeneralDetails", "BusinessRuleModule", "ConfigurationConstants",
	"LookupUtilities"
], function(GeneralDetails, BusinessRuleModule, ConfigurationConstants, LookupUtilities) {
	return {
		entitySchemaName: "UsrVacancyCandidates",
		details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,
		diff: /**SCHEMA_DIFF*/ [{
			"operation": "insert",
			"name": "UsrVacancies0084c888-fcc2-467b-b586-53b355ca0765",
			"values": {
				"layout": {
					"colSpan": 12,
					"rowSpan": 1,
					"column": 0,
					"row": 0,
					"layoutName": "Header"
				},
				"bindTo": "UsrVacancies",
				"enabled": {
					"bindTo": "getUsrVacanciesEnabled"
				}
			},
			"parentName": "Header",
			"propertyName": "items",
			"index": 0
		}] /**SCHEMA_DIFF*/ ,
		attributes: {
		methods: {
			getUsrVacanciesEnabled: function() {
				// Get detail info
				var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id]) || {};
				// Get card name which hosts the detail
				var cardPageName = detailInfo.cardPageName;
				var vacanciesCardPageName = "UsrVacanciesPage";
				return cardPageName !== vacanciesCardPageName;
			}
		},
	};
});

Сообщение GetDetailInfo и метод getDetailInfo доступны в контексте детали, поэтому их можно вызывать в контексте детали:
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id])|| {};
var detailInfo = this.getDetailInfo();

В Вашем случае, для того, чтобы узнать название страницы в контексте самой страницы, достаточно прочитать свойство this.name

Код выше это код разметки детали, а не карточки. Если я оттуда вызову this.name я получу имя страницы с разметкой детали. А мне нужно получить имя страницы карточки, на которую добавлена деталь.
Вы не могли бы более подробно объяснить про "контекст детали"? Где именно я должен разместить указанные Вами строки кода, чтобы они оказались "в контексте детали"?

// v7.5
getUsrVacanciesEnabled: function() {
       var defaultValues = this.getDefaultValues();
       if (!Ext.isEmpty(defaultValues)) {
             return defaultValues.some(function(value){
                    return (value.name === "UsrCandidates")
             })
       }
}
 
// v7.6
getUsrVacanciesEnabled: function() {
       var value = this.getDefaultValueByName("UsrCandidates");
       return (!Ext.isEmpty(value));
}

Спасибо, работает!
Хотя способ конечно немного чудной)

вот это еще нашёл в bpm:

var cardPageName = this.get("CardPageName");

var OrderId = this.get("MasterRecordId");
Показать все комментарии