У меня есть деталь DocumentsDetail с реестром, отображающая Grid документов. Я реализовал в ней группировку документов по типу и в качестве содержимого каждой группы отображаю Grid с набором документов соответствующего типа. Но возникает вопроса:

Как унаследовать конфигурацию Grid и столбцов из DocumentDetail, чтобы Grid каждой группы выглядел идентично гриду детали? Т.е, 1)Имел идентичный набор столбцов. 2) Имел идентичные настройки внешнего вида, стилизацию.

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

 

//diff:

            {               

                "operation": "merge",

                "name": "Detail",

                "values": {

                    }

                }

            },                        

            {

                "operation": "insert",

                "parentName": "Detail",

                "name": "DocumentsTestList",

                "propertyName": "items",

                "values": {

                    "generator": "ConfigurationItemGenerator.generateContainerList",

                    "idProperty": "Id",

                    "itemPrefix": "BorrowerDocGroup",

                    "collection": "BorrowerDocGroupsCollection",

                    "onGetItemConfig": "getDocsControlGroupConfig"

                }

            }

//methods:

getDocsControlGroupConfig: function (itemConfig, item) {             

               

                var itemId = item.get("Id");

                var testItemGroupConfig = {

                    "className": "Terrasoft.ControlGroup",                    

                    "caption": {

                        "bindTo": "Caption"

                    },

                    "collapsed": true,

                    "id": "DocsGroup" + itemId,

                    "items": [{                        

                        "className": "Terrasoft.Grid",

                        "type": "listed",                        

                        "id": itemId,

                        "idProperty": "Id",

                        "itemPrefix": "Id",

                        "collection": {

                            "bindTo": "Collection"

                        },

//как настроить отображение грида, который реализует функциональность первоначального грида детали и имеет идентичную конфигурацию столбцов? 

//здесь мне хотелось бы написать "columnsConfig": { "bindTo: "...?????"}

                        "columnsConfig": [                            

                            {

                                cols: 1,

                                key: [

                                    {

                                        "name": {

                                            "bindTo": "MDocument"

                                        }

                                    } 

                                ]

                            }

                        ],

                        "captionsConfig": [

                            {

                                cols: 1,

                                name: "document caption"

                            }                            

                        ],

                        //"onGetItemConfig": {

                        //    "bindTo": "getDocItemViewConfig"

                        //},                                               

                        "dataItemIdPrefix": "document-item"                        

                    }]

                };               

                itemConfig.config = testItemGroupConfig;                

            },

   

Нравится

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

Ты создаешь внутри одной детали несколько гридов?

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



 

Ext.define("Terrasoft.controls.Название_твоего_грида", {

    alternateClassName: "Terrasoft.Название_твоего_грида",

    extend: "Terrasoft.ConfigurationGrid", // или Terrasoft.Grid

и переопределить методы 

/**
	 * Инициализирует начальное значение конфигурации колонок.
	 * @param {Object} gridConfig
	 * @return {Array}
	 */
	initColumnsConfig: function(gridConfig) {
		var type = gridConfig.type;
		var config = this[type + "Config"];
		var columnsConfig = (config ? config.columnsConfig : gridConfig.columnsConfig) || [];
		if (!gridConfig.columnsConfig) {
			gridConfig.columnsConfig = columnsConfig;
		}
		return columnsConfig;
	},

	/**
	 * Инициализирует начальное значение конфигурации заголовков.
	 * @param {Object} gridConfig
	 * @return {Array}
	 */
	initCaptionsConfig: function(gridConfig) {
		var type = gridConfig.type;
		var config = this[type + "Config"];
		var captionsConfig = (config ? config.captionsConfig : gridConfig.captionsConfig) || [];
		if (!gridConfig.captionsConfig) {
			gridConfig.captionsConfig = captionsConfig;
		}
		return captionsConfig;
	}

Если хочешь ещё и из детали получить конфигурацию, то встроенной реализации механизма сообщений нет. Придется в зависимостях прописать sandbox и инициализировать его в методе конструктора

constructor: function (config) {
    this.sandbox = new sandbox();
    this.sandbox.moduleName = "имя_модуля";

    this.sandbox.registerMessages({
        "имя_сообщения": {
            "direction": Terrasoft.MessageDirectionType.PUBLISH,
            "mode": Terrasoft.MessageMode.PTP
        }

    });

    this.callParent(arguments);
},

Как вариант, можно попробовать перехватить Profile в котором находятся конфиги на отображение в списочном и плиточном отображении (listedConfig и tiledConfig).

К примеру в методе initProfile после вызова this.callParent(arguments) взять this.get("Profile") и динамически изменить listedConfig и tiledConfig для изменения конфигуарации колонок грида.

Но только эхтим не обойтись, так как профайл только изменит внешнее отображение, что не подгрузит значения в эти колонки. Чтобы добавить в запрос также нужные колонки можно переопределить addProfileColumns и добавить в него нужные колонки обьекта.

Для примера вот как можно добавить колонку ответсственного в запрос детали с документами (DocumentDetailV2):

addProfileColumns: function(esq) {
  //берем колонки
  var profileColumns = this.getProfileColumns();
  //добавляем новую
  profileColumns.Owner = {
    aggregationType: undefined,
    caption: "Ответстсвенный",
    dataValueType: undefined,
    path: "Owner",
    subFilters: undefined,
    type: "text"
  };
  //а это взято из метода addProfileColumns из GridUtilitiesV2
  Terrasoft.each(profileColumns, function(column, columnName) {
    if (!esq.columns.contains(columnName)) {
      if (column.aggregationType) {
        this.addProfileAggregationColumn(esq, column, columnName);
      } else {
        esq.addColumn(columnName);
      }
    }
  }, this);
}

Таким образом в запросе уйдет и колонка отвественного.

Изменяя значения в Profile можно динамически поменять отображение колонок и их значений.

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

Реализовал деталь со множественным добавлением записей в соответствии с описанием в статье https://academy.terrasoft.ru/documents/technic-sdk/7-10/mnozhestvennoe-dobavlenie-zapisey-na-detal. Код детали ниже. Столкнулся со следующей проблемой: сразу после добавления записи выделяю ее в реестре и нажимаю изменить. В консоли ошибка.

Изображение удалено.

Если открывать добавленную запись после выхода из карточки и повторного захода, то ошибки нет. Подскажите, как исправить данную ошибку.

define("Schema3Detail", ["LookupMultiAddMixin"], function() {

    return {

        entitySchemaName: "WeeklyPlanScheduleInDailyPlan",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,

        mixins: {

            LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"

        },

        methods: {

            

            init: function() {

                this.callParent(arguments);

                this.mixins.LookupMultiAddMixin.init.call(this);

            },

            onActiveRowAction: function(buttonTag) {

                switch (buttonTag) {

                    case "openCard":

                        this.editRecord();

                        break;

                }

            },

            getAddRecordButtonVisible: function() {

                return this.getToolsVisible();

            },

            onCardSaved: function() {

                this.openLookupWithMultiSelect();

            },

            addRecord: function() {

                this.openLookupWithMultiSelect(true);

            },

            getMultiSelectLookupConfig: function() {

                return {

                    rootEntitySchemaName: "DailyPlan",

                    rootColumnName: "DailyPlan",

                    relatedEntitySchemaName: "WeeklyPlanSchedule",

                    relatedColumnName: "WeeklyPlanSchedule"

                };

            }

        }

    };

});

 

Нравится

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

Решали подобные проблемы. Самое простое - перечитать грид после добавления записи :)

Вариант А:

onProductInsert: function(response) {
 
this.hideBodyMask.call(this);
if (this.get("IsGridLoading")) {
	return;
}
this.beforeLoadGridData();
var filterCollection = [];
response.queryResults.forEach(function(item) {
filterCollection.push(item.id);
});
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
	rootSchemaName: this.entitySchemaName
});
this.initQueryColumns(esq);
esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
esq.getEntityCollection(function(response) {
	this.afterLoadGridData();
	if (response.success) {
	    var responseCollection = response.collection;
		this.prepareResponseCollection(responseCollection);
		this.getGridData().loadAll(responseCollection);
		this.reloadGridData(); // вот источник проблемы
	}
}, this);
}

Вариант Б - замещайте функцию editRecord:

editRecord: function(record) {
 
	var activeRow = record || this.getActiveRow();
	if (!activeRow) {
		return;
	}
	if (!this.getIsCardValid()) {
		return;
	}
	var isCardChanged = this.getIsCardChanged();
 
 
	// вот тут возникает проблема у вас. Если activeRow не объектного типа, тогда не можем получить его своейство и падаем				
	if (typeof activeRow === "object") {
		var primaryColumnValue = activeRow.get("Id");
	} else {
		var primaryColumnValue = activeRow;
	}
 
    var typeColumnValue = this.getTypeColumnValue(activeRow);
	if (isCardChanged) {
		this.set("CardState", configurationEnums.CardStateV2.EDIT);
		this.set("EditPageUId", typeColumnValue);
		this.set("PrimaryValueUId", primaryColumnValue);
		var args = {
			isSilent: true,
			messageTags: [this.sandbox.id]
		};
		this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
	} else {
		this.openCard(configurationEnums.CardStateV2.EDIT, typeColumnValue, primaryColumnValue);
	}
}

Но первый способ гарантированно решит проблему. 

 

Дмитрий, спасибо, первый вариант помог.

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

У меня не получается добавить действие НА ДЕТАЛЬ. Инструкций как это делается я не нашел. Попробовал переопределить метод addToolsButtonMenuItems, но это не помогло(возможно я что-то делаю не так?). Способ решения проблемы описанный в теме https://community.terrasoft.ru/questions/dobavlenie-novoi-detali-bpm-73 не работает.

addToolsButtonMenuItems: function() {

                this.callParent(arguments);

                var tbm = this.get("ToolsButtonMenu"); 

                tbm.addItem(this.getButtonMenuSeparator());

                tbm.addItem(this.getButtonMenuItem({                    

                    "caption": "Approve",

                    "tag": "approveAction",

                    //Click: {"bindTo": "test"},

                    "visible": "true"

                }));

            }

Хотелось бы узнать, как добавлять действие НА ДЕТАЛЬ

Нравится

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

Добрый день. Тут два момента: 1) этот метод имеет сигнатуру addToolsButtonMenuItems: function(toolsButtonMenu) 2) вы get сделали, а вот set обратно - нет. В итоге локально в методе объект изменен, но на детали ничего не видно. Если указанные места поправить - все работает.

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

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

Добрый день!

 

Необходимо скрыть кнопку добавить с детали (https://db.tt/ecrKWQAcZv) на странице Юр. лица, в зависимости от определенных условий (например от типа Физ. лица текущего пользователя). Подскажите, пожалуйста, каким образом это можно реализовать?

Нравится

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

 код кнопки из baseGridDetail:

{
	"operation": "insert",
	"name": "AddRecordButton",
	"parentName": "Detail",
	"propertyName": "tools",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"click": {"bindTo": "addRecord"},
		"visible": {"bindTo": "getAddRecordButtonVisible"},
		"enabled": {"bindTo": "getAddRecordButtonEnabled"},
		"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
		"imageConfig": {"bindTo": "Resources.Images.AddButtonImage"}
	}
},

Вариантов 2: либо замерджить и написать свой bindTo для св-ва visible, либо заместить метод getAddRecordButtonVisible

Данила, перед тем как создать тему мы испробовали данный метод и получили следующий результат - при переопределении метода getAddRecordButtonVisible и указании "return false" то кнопка остается доступна на детали, а если пишем "return true", то добавляется новая кнопка добавления (и их становится две). Есть ли другие способы? возможно это из старых версий?

А мёрдж использовать не получится т.к. у нас динамическое условие.

Сергей Фролов КРОК пишет:

а если пишем "return true", то добавляется новая кнопка добавления (и их становится две).

Судя по всему у вас 2 кнопки. стандартная скрыта, у второй какой-то свой бинд на visible. Надо в схеме ковыряться смотреть на что видимость кнопки установлена. 

Если вдруг кому-нибудь понадобиться, то:

В системе, для деталей есть две кнопки добавления - AddRecordButton и AddTypedRecordButton.

AddRecordButton - отображается, если у детали одна карточка редактирования, AddTypedRecordButton - если несколько страниц редактирования.



За отображение первой кнопки отвечает метод getAddRecordButtonVisible, второй - getAddTypedRecordButtonVisible. Оба метода возвращают булевое значение.

Вот рабочий пример, пользуйтесь) 

Все лишнее убрано

define("UsrControlEquipmentDetail", [], function() {

    return {

        entitySchemaName: "UsrControlEquipment",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[

            {

                "operation": "remove",

                "name": "ToolsButton"

            },

            {

                "operation": "remove",

                "name": "CardDetail"

            },

            {

                "operation": "remove",

                "name": "AddRecordButton"

            },

            {

                "operation": "remove",

                "name": "ViewButton"

            }

        ]/**SCHEMA_DIFF*/,

        methods: {

            getAddRecordButtonVisible: function() {

                return false;

            },

            getAddTypedRecordButtonVisible: function() {

                return false;

            },

            addRecordOperationsMenuItems: Terrasoft.emptyFn

        }

    };

});

Литвинко Павел,

 не работает. + не убрался

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

Добрый день.

У меня есть деталь с редактируемым реестром, в реестре выведено 3 колонки:

1) колонка-справочник: выбирается запись из раздела Контакт

2) колонка-справочник: выбирается вручную из созданного справочника

3) текстовое поле, заблокировано: в данное поле должно подставляться значение из определенной колонки (UsrColumn1) из карточки Контакта

Подскажите, как мне автоматически подтянуть информацию в 3 колонку, при выборе значения в 1 колонке?

Нравится

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

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



 

"UsrColumn3": {
	"dependencies": [
		{
			"columns": ["UsrColumn1"],
			"methodName": "onChange1Column"
		}
	]
},
 
....
 
onChange1Column: function() {
	// читаем нужные данные через esq из первой this.get("UsrColumn1") колонки
	и устанавливаем их в 3ю this.set("UsrColumn3", data);
},

 

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

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

Однако, в детали просто не получается сделать добавление неактивным. Вот такой код вызывается (проверено в отладчике), но не приводит ни к какому результату. Как правильно?

define("AccountAddressDetailV2", [], function() {
	return {
		entitySchemaName: "AccountAddress",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			getEditPages: function() {
				var menuItems = this.callParent(arguments);
				for (var i = 0; i < menuItems.collection.items.length; i++) {
					menuItems.collection.items[i].values.Enabled = false;
//						{bindTo: "AddressNotExists_" + menuItems.collection.items[i].values.Tag};
				}
				return menuItems;
			}
		}
	};
});



 

Нравится

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

деталь AccountAddressDetailV2 вероятнее всего является наследником базовой AccountCommunicationDetail или является отдельной ее имплементацией.

По этому можно предположить, что с ней можно "управиться" аналогичным образом, вам необходимо предусмотреть 2 варианта добавления, через пункт меню детали "Добавить", а так же не забыть о том что в контекстном меню отдельно взятого элемента тип записи можно изменить, т.е. "Домашний адрес" можно запросто сделать "Юридическим".

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

Приведу пример замещающей схемы которая решает кейс:

Ограничить возможность добавления более 1-го пункта с типом "Основной телефон"

define("AccountCommunicationDetail", [], function() {
	return {
		methods: {
			//Далее в коментариях, "элемент детали" это отдельно взятая запись в коллекции детали,
			//т.е. одно отдельное средство связи в детали.
			"init": function() {
				this.callParent(arguments);
				//Подписка на изменение атрибута-флага, который принимает значение в true после полной загрузки данных
				//Установим метод-обработчик см.листинг-метку TAG1
				this.on(
					"change:IsDataLoaded",
					function() {
						if (arguments[1] === true) {
							this.mainPhoneInSubMenuExistsController();
						}
					},
					this
				);
			},
			//метод вызываемый при реализации действия "Добавить" или "Изменить" элемент детали
			"createOrUpdateCommunicationItem": function(typeId, config) {
				this.callParent(arguments);
				this.mainPhoneInSubMenuExistsController();
			},
			//метод вызываемый при реализации действия "Удалить" элемент детали
			"deleteCommunicationItem": function() {
				this.callParent(arguments);
				this.mainPhoneInSubMenuExistsController();
			},
			//метод формирующий список элементов для viewModel контекствного меню отдельного элемента детали
			//вызывается единожды при инициализации детали
			"getTypeMenuItems": function() {
				//получим список сформированный родительским методом
				var typeMenuItems = this.callParent(arguments);
 
				//ДЛЯ КАЖДОГО: элемента меню
				for (var each in typeMenuItems) {
					//ЕСЛИ: заголовок элемента "Основной телефон"
					if (typeMenuItems[each].caption === "Основной телефон") {
						//ТО: Удаляем соответствующий элемент из массива
						typeMenuItems.splice(each, 1);
						//Прерываем перебор массива
						break;
					}
				}
 
				//возвращаем модифицированное меню
				return typeMenuItems;
			},
			//TAG1
			//Метод осуществляющий контроль пункта подменю: "+" -&gt; "Телефон" -&gt; "Основной телефон"
			//Основополагающая логика: пункт не должен быть доступен если запись с типом "Основной телефон"
			//присутствует в детали (в т.ч. состоянии view), и становиться доступным при его удалении (в т.ч. состоянии view)
			"mainPhoneInSubMenuExistsController": function() {
				//Получим коллекцию ранее внесенных в деталь средств связи
				var existsCommunicationsCollection = this.get("Collection"),
					//Получим коллекцию сформированных элементов меню
					MenuItemsCollection = this.get("ToolsMenuItems");
 
				//Определим флаг наличия в ранее внесенных средствах связи, средства с типом "Основной телефон"
				var    mainPhoneNumberExistsFlag = existsCommunicationsCollection.collection.find(function(item) {
						var targetCollection = item.values ? item.values : item.changedValues;
						if (targetCollection.CommunicationType.displayValue === "Основной телефон") {
							return true;
						}
					}, this) ? true : false;
				//Определим объект элемента меню "Телефон"
				var    phoneMenuCollection = MenuItemsCollection.collection.find(function(item) {
						if (item.values.Caption === "Телефон") {
							return true;
						}
					}, this);
 
				if (mainPhoneNumberExistsFlag) {
					//Найдем в его коллекции элементов подменю пункт с заголовком "Основной телефон"
					var mainPhoneMenuItem = phoneMenuCollection.values.Items.collection.find(function(item) {
						if (item.values.Caption === "Основной телефон") {
							return true;
						}
					}, this);
					//попытка выполняется в блоке try...catch т.к. в некоторых случаях вызов
					//метода remove приводит к ошибке исполнения JS которая не влияет на результат
					//выполнения метода относительно коллекции, тем не менее прерывает выполнение здесь.
					//Проявляется при добавлении единственной записи в деталь в новой карточке контрагента
					//через поле в карточке, а не через меню детали
					try {
						//Удалим этот пункт меню из колекции подпунктов viewModel
						phoneMenuCollection.values.Items.collection.remove(mainPhoneMenuItem);
					} catch (e) {}
					//инициируем перестроение viewModel по его измененной модели
					MenuItemsCollection.loadAll();
				} else {
					//Вернем этот пункт в меню
					//выполнив новое построение колекции пунктов меню для viewModel
					this.initToolsMenuItems();
				}
			}
		}
	};
});

далее 

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

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

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

В общем, на странице, контакта необходимо скрывать или показывать деталь в зависимости от значения поля.

Решение начал с добавления custom-бизнес правила на событие Load. И в нём просто попробовал без всяких условий удалить деталь со страницы методом

Terrasoft.sdk.Details.remove

К сожалению, результат выполнения виден только при последующих открытиях карточки, а не сразу.

Есть ли другие решения?

Нравится

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

Для скрытия детали по условию, необходимо в расширить метод shouldHidePanelItem

 

Пример:

 

Ext.define("ContactPreviewPage.View", {

extend: "Terrasoft.view.BasePreviewPage",



xtype: "contactpreviewpageview",

config: {

id: "ContactPreviewPage"

},



/**

* @inheritdoc

* @protected

* @overridden

*/


shouldHidePanelItem: function(loadedRecord, component) {

var detailName = component.config.name;

if (detailName === "MyDetailName" && Ext.isEmpty(loadedRecord.get("MyColumn"))) {

return true;

} else {

return this.callParent(arguments);

}

}

});

Здравствуйте, Илья. Спасибо за ответ, двигался в этом направлении. Но с вашим советом получилось быстрее.

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

Имеется:
Объект1 у него Раздел1
Объект2 у него Раздел2 и Деталь1 привязанная к Разделу 1

Кейс.

Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...и запускает БП, который до заполняет поля в разделе 2.
Потом сотрудник нажимает Сохранить-Закрыть.
И тут автоматом создается О2.

У меня вопрос почему происходит автоматическое создание еще записи ?

Этого не происходит если:
Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...
Потом сотрудник нажимает Сохранить-Закрыть.
Открывает О1 и запускает БП, который до заполняет поля в разделе 2.

Нравится

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

Предположу...т.к. О2 создается из Раздела1 О1 то и при создании система чудит.

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

Предлагаю описать бизнес-задачу на примере существующих разделов системы - из текущего описания ничего непонятно.

В разделе "Договоры" создали деталь "Счета договора" соответственно это Объект - Счета.

Пользователь создает в детали "Счет договора" , счет нажатием знака + на детали.
Создается новая запись Счет, с привязкой к Счету. С номером 1

Потом у нас есть некие шаблоны Строки счета, с определенными продуктами и кол-во.
Пользователь запускает БП "заполнить строки счета", указывает шаблон и строки счета заполняются.

До заполнив остальные поля, сотрудник сохраняет счет и закрывает.
И тут создается новый счет сразу , С номером 2.

Предположу..что есть заложена логика при создании записи из детали и послед-й возвратом на раздел где нажималась +

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

На данный момент в системе, почему-то используется разный подход к выравниванию заголовка колонки и ее содержимого, в зависимости от типа содержащихся в ней значений.Н/п для колонок с числами применяется выравнивание по правому краю, в то время как для всех остальных типов по левому краю в тоге выглядит это как-то так: что многим пользователям, да и чего там таить, разработчикам нравится не очень с точки зрения эстетики. решение на самом деле есть css-fix для всех цифровых полей деталей на странице выравнивание устанавливается по левому краю так же как и для остальных полей. [grid-caption-type="number"]>label{     float: left !important; } span[grid-data-type="number"]{     float: left !important; } Идея заключается в том чтобы выравниванием можно было управлять, в тех же настройках колонок например как-то так Ну или как хотя бы их унифицировать выравнивание, желательно "по левому краю" Так же хотелось бы узнать у пользователей сообщества, сталкивался ли кто-то с этой проблемой или только меня и некоторых наших пользователей заботят такие моменты "асиметрии"/эстетики в интерфейсе ?

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

Здравствуйте, зарегистрировали ваше пожелание.

уже решился вопрос с выравниванием? уже 5 человек ждут.

Дмитрий, на данный момент идея находится в статусе "Обсуждение"

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

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

setPosition: function(recordId, position, callback, scope) {
                                var data = {
                                        tableName: UsrWorkDR",
                                        primaryColumnValue: recordId,
                                        position: position,
                                        grouppingColumnNames: "
UsrWorkDId"
                                };
                                ServiceHelper.callService("
RightsService", "SetCustomRecordPosition", callback, data, scope);

использую его на своей страничке у детали.
Но выходит сообщение

em>message: Uncaught TypeError: ServiceHelper.callService is not a function em>

Что не так?

Нравится

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

Конкретно эта ошибка говорит о том что вы скорее всего не добавили переменную ServiceHelper или добавили её в неправильной последовательности в схеме:

Смешно...но ServiceHelper был последним, сделал первым и заработало...подсказку тут нашел тут

Максим спасибо.

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