Добрый день, подскажите, пожалуйста можно ли реализовать, чтобы для записи в реестре детали можно было вызвать действие “изменить” при двойном клике на строке детали?

Нравится

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

Здравствуйте,
на карточке “группы” есть поле “гид” и деталь “контакты группы”. Необходимо при изменении поля “гид” пройтись по всем контактам в детали и используя значение поля “сделка” из каждого контакта, изменить поле “гид” для всех соответсвующих сделок этих контактов в разделе “сделки”.
Реализовали данную задача с помощью БП, но меняется только одна запись, подскажите пожалуйста, как можно читать всю выборку записей из детали и для множества соответствующих записей в другом разделе менять поле.

Нравится

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

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

Судя по описанию необходимо работать одновременно с коллекцией данных, а не первой выбранной записью.
Пока с коллекцией может работать только элемент "Добавить данные" в режиме выборки.
Для решения вашей задачи можно использовать [Задание-сценарий], написать в нем интересующий запрос.
Или создать циклический процесс, который будет обрабатывать 1 контакт за 1 итерацию в цикле.

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

int count = Get<int>("count");
int count2 = count - 1;
Set<int>("count", count2);
return true;

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

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

Алгоритм следующий:
А. Добавить в объект Контакты служебное поле с типом Логическое, например ForCycle.
Б. Первый процесс запускается по нужному событию и устанавливает для всех контактов ForCycle = true.
В. Второй процесс циклический:
1) читать кол-во контактов, у которых ForCycle = true
2) поток по умолчанию ведет к завершению процесса
3) условный поток: [Читать кол-во записей] > 0 - ведет к элементу Читать первый контакт, где ForCycle = true. На этом этапе мы получим Id первого интересующего контакта - > обрабатываем контакт - > устанавливаем ForCycle = false -> в конце поток перехода ведет к Пункт 1

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

Спасибо, получилось.

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

Добрый день.
Версия 7.9.0

Пробую добавить валидацию полей в редактируемую деталь с реестром и вычислаемы полями по примеру
https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-valida...

Но пример для страницы редактирования раздела. Может я не в ту схему вставляю методы? Или же я просто не вижу ошибку которую допускаю ? Буду признателен за подсказку

 

define("UsrUsrOrderOnField1Page", [], function() {
        return {
                entitySchemaName: "UsrOrderOnField",
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                attributes: {
                        "UsrReservRemains": {
                                dataValueType: Terrasoft.DataValueType.INTEGER,
                                dependencies: [
                                        {
                                                columns: ["UsrQuantity"],
                                                methodName: "calculateUsrReservRemains"
                                        }
                                ]
                        }
                },
                diff: /**SCHEMA_DIFF*/[
                        {
                                "operation": "insert",
                                "name": "UsrQuantityWorkOrdere",
                                "values": {
                                        "layout": {     "colSpan": 12,"rowSpan": 1,"column": 12,"row": 4,"layoutName": "Header"},
                                        "bindTo": "UsrQuantityWorkOrder"
                                },
                                "parentName": "Header",
                                "propertyName": "items",
                                "index": 4
                        },
                        {
                                "operation": "insert",
                                "name": "UsrQuantity",
                                "values": {
                                        "layout": {"colSpan": 12,"rowSpan": 1,"column": 0,"row": 3,"layoutName": "Header"
                                        },
                                        "bindTo": "UsrQuantity"
                                },
                                "parentName": "Header",
                                "propertyName": "items",
                                "index": 5
                        },
                        {
                                "operation": "insert",
                                "name": "UsrReservRemains",
                                "values": {
                                        "layout": {"colSpan": 12,"rowSpan": 1,"column": 0,"row": 4,"layoutName": "Header"
                                        },
                                        "bindTo": "UsrReservRemains"
                                },
                                "parentName": "Header",
                                "propertyName": "items",
                                "index": 6
                        },
                        {
                                "operation": "insert",
                                "name": "UsrToWorkOrder",
                                "values": {
                                        "layout": {"colSpan": 12,"rowSpan": 1,"column": 12,"row": 3,"layoutName": "Header"
                                        },
                                        "bindTo": "UsrToWorkOrder"
                                },
                                "parentName": "Header",
                                "propertyName": "items",
                                "index": 7
                        }
                ]/**SCHEMA_DIFF*/,
                methods: {
                        calculateUsrReservRemains: function() {
                                if (!this.get("UsrLastQuantity")) {
                                        this.set("UsrLastQuantity", 0);
                                }
                                if (!this.get("UsrReservRemains")) {
                                        this.set("UsrReservRemains", 0);
                                }
                                var result = this.get("UsrReservRemains") + this.get("UsrQuantity") - this.get("UsrLastQuantity");
                               
                                this.set("UsrReservRemains", result);
                                this.set("UsrLastQuantity", this.get("UsrQuantity"));
                        },
                        quantityVlidator: function() {
                                var invalidMessage = "";
                                if (this.get("UsrQuantity") this.get("UsrReservRemains")) {
                                        invalidMessage = this.get("Resources.Strings.ValueOfReservGraterThenQuantity");
                                }
                                return {
                                        fullInvalidMessage: invalidMessage
                                        invalidMessage: invalidMessage
                                };
                        },
                        setValidationConfig: function() {
                                this.callParent(arguments);
                                this.addColumnValidator("UsrQuantity", this.quantityVlidator);
                                this.addColumnValidator("UsrReservRemains", this.quantityVlidator);
                        }
                },
                rules: {}
        };
});

 

Нравится

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

"Сергей Джулай" написал:Буду признателен за подсказку

Скрин консоли с ошибкой приложите, пожалуйста

Да дело в том что ошибки в консоли нету. На странице редактирования заказа деталь с редактируемым реестром(21.jpg), и валидация там не работает (но и ошибок нет). Когда же на странице редактирования самой детали работает все отлично(20.jpg).
А нужна валидация, что бы не открывать новую страницу.

А код немного сменил (Упростил)

quantityVlidator: function() {
    var invalidMessage = "";
        if (this.get("UsrQuantity") < 1) {
            nvalidMessage = this.get("Resources.Strings.ValueOfReservGraterThenQuantity");
        }
    return {
        fullInvalidMessage: invalidMessage,
        invalidMessage: invalidMessage
    };
},
setValidationConfig: function() {
    this.callParent(arguments);
    this.addColumnValidator("UsrQuantity", this.quantityVlidator);
}

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

save: function() {
	if (this.get("UsrString").length === 12) {
		this.callParent(arguments);
	} else {
		this.showInformationDialog("Колонка String должна содержать 12 символов!");
	}
}

Спасибо Максим. Я так и реализовал валидацию, но это слабовато, так как в РР если внести неверное значение, то оно все равно сохранится, хоть и выдаст информационное окно с ошибкой. А это уже риск сломать некую логику. Может можно как то реализовать некую валидацию в момент события сохранения в GRIDе ? Например на событие выделения строки, поля которые должны проверяться сохраняются в временные переменные, а по событию save происходит валидация и если она не проходит, то значения возвращаются с временных переменных.

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

Спасибо Максим. За подсказку - буду дальше размышлять в подсказанном направлении.

Сергей,

Поделитесь, пожалуйста, решением данной задачи.

Добрый день Алла. К сожалению до правильной реализации руки так и не дошли. Сейчас проверки выполнена с помощью предупреждения.

attributes: {
	"UsrQuantityWorkOrder": {
		dataValueType: Terrasoft.DataValueType.INTEGER,
		dependencies: [
			{
				columns: ["UsrQuantityWorkOrder"],
				methodName: "validationUsrQuantityWorkOrdere"
			}
		]
	}
},
methods: {
	validationUsrQuantityWorkOrdere: function() {
		if (this.get("UsrQuantityWorkOrder") > this.get("UsrReservRemains")) {
			this.showInformationDialog("Значение больше чем значиние Остаток в резерве");
		}
	}
}

Сергей, спасибо за информацию.

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

Кстати, интересно реализована ли валидация для редактируемого реестра в версии 7.10?

Кто в курсе?

Да, вы правы, пользователь может внести неверное значение, нужно все таки разобраться с sandbox и ConfigurationGridUtilities.

Как собственно и в обычных деталях и карточках - Ваша задача изучить цепочку вызовов функций сохранения (в каждом случае все немного отличается).
Определите подходящий метод в цепочке вызовов (который вызывается на исполнение до непосредственной записи в БД, обладает необходимым контекстом (this) и т.д.), ну и переопределите его - обогатив своей логикой валидации.
Валидация пройдена - "отпускаем" по this.callParent(arguments) [По естественной ветке]
Не пройдена - прерываем выполнение, и всего делов (показываем наши сообщения, открываем справочники - все что душе угодно)
Если в валидации задействованы асинхронные вызовы - например ESQ запросы.
вам вот сюда "Раcширить логику save, после валидации. Контроль Chain выполнения"

Илья,

в моем кейсе все усложняется тем, что это редактируемый реестр и согласно всему написанному выше не факт, что даже можно напилить свой костыль, чтобы пользователь всё-таки не мог сохранить изменения, если они не валидны. Попробовать, конечно, можно :wink:

Пока решили реализовать только само предупреждение и соответственно планирую создать обращение на support с пожеланием (чем больше будет пожеланий от пользователей, тем выше вероятность реализации базовых механизмов в ближайших релизах)!

Спасибо за то, что поделились опытом!

Советую присмотреться и отладить метод "unSelectRow"
в частности вызываемый им "saveRowChanges" (схема ConfigurationGridUtilities)


Так что замещайте ConfigurationGridUtilities переопределяйте saveRowChanges
Внедряя в нее логику валидации до "row.save"- и будет Вам счастье.

Илья,

спасибо Вам за помощь в поиске подходящего решения :smile:

Добрый день! Коллеги,  в 7.12 до сих пор валидация для редактируемого реестра не реализована(((...сейчас как раз задача есть. В  каких следующих версиях можно ожидать?

 

В анонсе 7,13 єтого нет (не кидайте в меня тапками если не заметил) Так что ждите или программируйте!

Григорий Чех,

Думаю, что такой доработки в коробке ещё долго не будет, учитывая дату публикации данного поста и все сложности, которые возникают при малейшей попытке доработки редактируемого реестра в базовой версии crying

Значит или ждать или кастомно делать под себя, (Проверять до сохранения и потом если все ок сохранять )

Григорий Чех пишет:Получается в saveRowChanges изменять условие под себя из ответа Севостьянов Илья Сергеевич?

См. также тут и тут.

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

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

К примеру. У детали "продукт в заказе" можно добавить поле "тип продукта". Которое будет информационным.

Как только мы делаем деталь с редактируемым реестром, мы уже не можем так сделать, у нас есть только те поля которые мы имеем.

Как быть? Чтобы отображать в редактируемом реестре связанные таблицы?

Нравится

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

1) Осуществлять запросы в БД (ESQ запрос), например если Вам необходимо получить какое либо значение из текущей карточки (в которой деталь находиться), то в коде выполняемом в окружении детали всегда доступно значение

this.get("MasterRecordId")

Которое возвращает Вам то поле по которому деталь связана с карточкой (как правило это ее Id).
По нему - ESQ запросом можно получить уже любые данные из карточки (сохраненные на данный момент в БД)
2) Публикация события-запроса, подписка на событие-ответ, публикация события-ответа происходит в подписке на событие-запрос в необходимых вам схемах других объектов (н/п карточки, других деталях)
в событие-ответ передаются необходимые данные. (в виде JS-объекта вторым аргументом в вызове метода this.sundbox.publish)

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

При создании разделов и деталей при помощи мастера, возникают ошибки с блокировкой файлов в svn.

К примеру мой кейс.
Создал раздел UsrX который в момент компиляции выполнился с ошибкой. Система создала стандартный набор файлов и сразу из заблокировала(зеленый замок).
Значит так конец рабочего дня надо идти. Мы это дело фиксируем и идем домой.
На следующий день понимаем что надо удалить раздел UsrX (описание тут https://academy.terrasoft.ru/documents/bank-customer-journey/7-9/chasto-...)
Но мы уже не помним что файлы у нас залоченные, удалив из БД, мы удаляем наши зеленые файлы.
Соответственно фиксируем чтобы было это видно.

Ну и начинаем заново создавать раздел, ура сегодня он создался удачно, мы рады. Комитим, и тут нам svn ругается что такой файл уже есть и он залочен - разблокируй его. Но уже никак. С таким именем уже не сделать.

Мои выводы, перед удалением файлов надо снимать с блокировки из svn, либо выводить сообщение что файл в svn залочен и перед удалением надо снять блокировку.

Кто-то сталкивался с таким уже?

Нравится

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

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

Александр, да все верно. В моем случае это помогло. Но ошибка которая выходила при этом меня сбила столку.

Элементы невозможно зафиксировать в хранилище, т.к. один или несколько компонентов заблокированы другим пользователем
Working copy '\Usr' locked
SvnErrorCode: SVN_ERR_WC_LOCKED
RootCause: sqlite[S14]: unable to open database file

Долго мучился, пока на самом деле не удалил папку C:\Windows\Temp\NN\Worspace\TerrasoftPackages
где NN - номер приложения
Worspace - Имя Worspace.

Было бы классно в FAQ добавить)))

Вы можете добавить своё пожелание, нажав кнопки под статьёй в академии. Ссылку на Ваше сообщение туда уже отправил.

Марат, получили от Вас обратную связь на Академии, спасибо! Запланировала задачу, сделаем дополнение в FAQ.

Людмила, еще момент, мы сталкиваемся с такой проблемой в SVN с тем, что система дает удалять залоченные файлы. Тем самым если в последствии системе создать аналогичный - то не получится его добавить в репозитарий.

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

Напишите, пожалуйста, подробный кейс воспроизведения данной ошибки на support@terrasoft.ru, чтобы мы могли воспроизвести ошибку и передать информацию разработчикам ядра.

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

Что за?

user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://localhost:7904/core/337b572dd248a0a080c15d716da3ea14/combined/all...
line: 888
column: 144
message: Uncaught Terrasoft.ArgumentNullOrEmptyException: Несуществующий или пустой аргумент с именем; argumentName: query
date: Wed Mar 01 2017 16:05:17 GMT+0300 (RTZ 2 (зима))
stack: undefined

Новая 791 свежая платформа....создаю первую деталь и такое.

Нравится

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

Через некоторое время вышло

Failed to create temp file 18 : It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.

все закрыв, в конфигураторе появилось 2 файла - Деталь и ее страничка.
Но саму деталь не могу добавить в мастере раздела.

И записи в [SysDetail] нет.

Не могу понять...платформа новая.

Выполнил этот запрос

DECLARE 
    -- Название схемы представления создаваемой миникарточки.
    @ClientUnitSchemaName NVARCHAR(100) = 'UsrCourierServiceDetail',
    -- Название схемы объекта, к которому привязывается миникарточка.
    @EntitySchemaName NVARCHAR(100) = 'UsrCourierService',
    -- Название детали.
    @DetailCaption NVARCHAR(100) = 'Курьерская служба'
 
INSERT INTO SysDetail(Caption, DetailSchemaUId, EntitySchemaUId)
VALUES(@DetailCaption,
     (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @ClientUnitSchemaName),
      (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @EntitySchemaName))

и заработало другие детали начали делать нормально.
Странно.

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

Здравствуйте. Подскажите пожалуйста можно ли сделать, чтобы в зависимости от раздела, у одной и той же детали был различный заголовок и отображались разные поля на странице добавления записи?

Нравится

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

Здравствуйте,
Можно, средствами разработки. Что касательно заголовка детали, с версии на версию данный функционал немного отличался, так что, если возникнут трудности, уточните конкретный продукт и версию системы. А так, заголовок можно вернуть тот или иной заместив метод в схеме детали, и анализировать имя карточки, в которой мы находимся:

getDetailCaption: function() {
var cardPageName = this.get("CardPageName");
if (cardPageName === "ActivityPageV2") {
return "Name 1";
}
return "Name 2";
}

Что касательно полей на карточке, можно вывести их все, а видимость каждых полей что в зависимости от условий должны отображаться или не отображаться на атрибут, который в рантайме ставить в истину или ложь, в зависимости от того, из какой карточки была открыта страница редактирования.
Проверить от куда мы пришли, можно используя песочницу, между двумя схемами, схемой карточки, и схемой детали, подробнее про песочницу:
http://www.community.terrasoft.ru/forum/topic/15210

Добрый день! В 7.8.4 я реализовал вот так в схеме детали:

initDefaultCaption: function() {
if (Ext.isEmpty(this.get("Caption"))) {
var cardPageName = this.get("CardPageName");
var caption;
caption = (cardPageName === "SmrPaymentPageV2") ? this.get("Resources.Strings.CaptionInPayments") : this.get("Resources.Strings.CaptionInApplication");
this.set("Caption", caption);
}
}

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

Добрый день.
По аналогии примера сделал редактируемую деталь(смотрите фото в приложении)

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

Как заблокировать поле для редактирование пользователем, сделать его вычисляемым ?

Мой код.

define("UsrNDetail", ["ConfigurationGrid", "ConfigurationGridGenerator",
"ConfigurationGridUtilities"],
function() {
        return {
                entitySchemaName: "UsrN",
                attributes: {
                        "IsEditable": {
                                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                                value: true
                        }
                },
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
                        {
                                "operation": "merge",
                                "name": "DataGrid",
                                "values": {
                                        "className": "Terrasoft.ConfigurationGrid",
                                        "generator": "ConfigurationGridGenerator.generatePartial",
                                        "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
                                        "changeRow": {"bindTo": "changeRow"},
                                        "unSelectRow": {"bindTo": "unSelectRow"},
                                        "onGridClick": {"bindTo": "onGridClick"},
                                        "activeRowActions": [
                                                {
                                                        "className": "Terrasoft.Button",
                                                        "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                                                        "tag": "save",                                                  // Значение маркера.
                                                        "markerValue": "save",
                                                        "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                                                },
                                                {
                                                        "className": "Terrasoft.Button",
                                                        "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                                                        "tag": "cancel",
                                                        "markerValue": "cancel",
                                                        "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                                                },
                                                {
                                                        "className": "Terrasoft.Button",
                                                        "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                                                        "tag": "remove",
                                                        "markerValue": "remove",
                                                        "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                                                }
                                        ],
                                        "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
                                        "activeRowAction": {"bindTo": "onActiveRowAction"},
                                        "multiSelect": false
                                }
                        }
                ]/**SCHEMA_DIFF*/,
                mixins: {
                        ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
                },
                methods: {}
        };
});

Нравится

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

Для блокировки полей редактируемого реестра, можно писать бизнес правила блокировки на странице(!) этой детали.
rules: {
"UsrTestInt1": {
"EnabledUsrTestInt1": {
"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
"property": BusinessRuleModule.enums.Property.ENABLED,
"conditions": [
{
"leftExpression": {
"type": BusinessRuleModule.enums.ValueType.CONSTANT,
"value": true
},
comparisonType: Terrasoft.ComparisonType.NOT_EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: true
}
}
]
}
}
}

Тоже самое касается и обработчиков изменения колонок. Написав атрибут к любой колонке с методом обработки изменения и списком колонок по изменению которых будет вызван данный метод:
"Parent": {
name: "Parent",
dependencies: [
{
columns: ["Account", "OurCompany"],
methodName: "clearParent"
}
]
},

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

Кстати, а VIRTUAL_COLUMN, описанные на странице тоже смогут отображаться в детали?

Да, если добавить в diff описание объекта в который нужно отобразить ее значение.
Пример на Академии: https://academy.terrasoft.ua/documents/technic-sdk/7-9/dobavlenie-vychi…

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

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

Нашёл как передать значение из родительской карточки, но вот передача guid'а не срабатывает.

defaultValues: {
    UsrAccount: {masterColumn: "Account"}, //--- эта строка работает
    UsrRecordType: "772874ae-4265-4a9a-9393-5bdc12f670f7" // --- эта строка не срабатывает
}

Нравится

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

Нашёл решение в статье: http://www.community.terrasoft.ru/blogs/12454
Корректный код будет таким:

defaultValues: {
    UsrAccount: {masterColumn: "Account"},
    UsrRecordType: {value: "772874ae-4265-4a9a-9393-5bdc12f670f7"}
}
Показать все комментарии

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

Нравится

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

"Головачев Дмитрий Александрович" написал:кнопку

Смотря куда

"Варфоломеев Данила" написал:
Головачев Дмитрий Александрович пишет:

кнопку

Смотря куда


В каждую строку детали

Из baseSectionV2: в гриде есть activeRowActions

{
 
	"operation": "insert",
	"name": "DataGrid",
	"parentName": "DataGridContainer",
	"propertyName": "items",
	"values": {
                ...
		"activeRowActions": [],
                ...
	}
},

и потом в действия заносятся кнопки

{
	"operation": "insert",
	"name": "DataGridActiveRowOpenAction",
	"parentName": "DataGrid",
	"propertyName": "activeRowActions",
	"values": {
		"className": "Terrasoft.Button",
		"style": Terrasoft.controls.ButtonEnums.style.BLUE,
		"caption": {"bindTo": "Resources.Strings.OpenRecordGridRowButtonCaption"},
		"tag": "edit"
	}
},

Полагаю, что можно это как-то приспособить под gridDetail

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

Из baseSectionV2: в гриде есть activeRowActions

{

       

        "operation": "insert",

        "name": "DataGrid",

        "parentName": "DataGridContainer",

        "propertyName": "items",

        "values": {

                ...

                "activeRowActions": [],

                ...

        }

},

и потом в действия заносятся кнопки

{

        "operation": "insert",

        "name": "DataGridActiveRowOpenAction",

        "parentName": "DataGrid",

        "propertyName": "activeRowActions",

        "values": {

                "className": "Terrasoft.Button",

                "style": Terrasoft.controls.ButtonEnums.style.BLUE,

                "caption": {"bindTo": "Resources.Strings.OpenRecordGridRowButtonCaption"},

                "tag": "edit"

        }

},

Полагаю, что можно это как-то приспособить под gridDetail


Как можно добавить действие в выпадающее меню где троеточее?

"Головачев Дмитрий Александрович" написал:Как можно добавить действие в выпадающее меню где троеточее?

В BaseGridDetailV2 обратите внимание на методы
-initToolsButtonMenu
-addToolsButtonMenuItems

В целом достаточно 2х методов:

addToolsButtonMenuItems: function(toolsButtonMenu) {
	this.callParent(arguments);
	var button = this.getMyBtn(toolsButtonMenu);
	toolsButtonMenu.addItem(button);
}
 
getMyBtn: function(toolsButtonMenu) {
	toolsButtonMenu.addItem(this.getButtonMenuSeparator()); ///добавляет разделитель между кнопками
	toolsButtonMenu.addItem(this.getButtonMenuItem({
		Caption: "Моя кнопка",
		Click: {"bindTo": "/*функция обработчик*/"},
		Visible: {"bindTo": "/*атрибут/функция контроля видимости*/"}
	}));
}

"Варфоломеев Данила" написал:
Головачев Дмитрий Александрович пишет:

Как можно добавить действие в выпадающее меню где троеточее?

В BaseGridDetailV2 обратите внимание на методы

-initToolsButtonMenu

-addToolsButtonMenuItems

В целом достаточно 2х методов:

addToolsButtonMenuItems: function(toolsButtonMenu) {

        this.callParent(arguments);

        var button = this.getMyBtn(toolsButtonMenu);

        toolsButtonMenu.addItem(button);

}



getMyBtn: function(toolsButtonMenu) {

        toolsButtonMenu.addItem(this.getButtonMenuSeparator()); ///добавляет разделитель между кнопками

        toolsButtonMenu.addItem(this.getButtonMenuItem({

                Caption: "Моя кнопка",

                Click: {"bindTo": "/*функция обработчик*/"},

                Visible: {"bindTo": "/*атрибут/функция контроля видимости*/"}

        }));

}


Спасибо Данила

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