Приветы,

 

Подскажите как получать данные в 

onActiveRowAction: function(buttonTag, Id, parentOnActiveRowAction) {

                switch (buttonTag) {

                    // замещение базового метода для правильной обработки нажатия по тэгу

                    case "tagBnBackCall":

                        alert('QBackCall! = ' + Id);

Пару вопросов:

Дано Id данных есть - выбранной строки 

Как получить данные из других столбцов грида через запрос к БД

Как через this добраться к jquery желательно? 

Нравится

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

Привет,



если есть айди записи, то получение данных из бд есть на академии https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-en…;



на примере что то вроде такого:

 

var id = Id; // Айди выбранной записи
var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Contact" }); // Таблица куда запрос
esq.addColumn("Name");//К примеру имя, можно добавить остальные колонки, подробнее по ссылке
esq.getEntity(id, function (result) {
    if (!result.success) {
        this.showInformationDialog("Ошибка запроса данных"); 
        return;
    }
    // Какие либо действия 
    this.showInformationDialog(result.entity.get("Name");//Например вывести имя
}, this);

Тут показал пример getEntity так же рекомендую посмотреть на реализацию getEntityCollection и добавление колонок в запрос.

"Как через this добраться к jquery желательно? " не понял, что имеется ввиду

Сериков Асхат Кайратович,

Привет, этот пример видел, но есть нюансы, может что-то не настроил или версия не та. По клиентской части вижу в require что jquery есть но не вызывается и в консоли хрома ее как нет, вот код:

                  onActiveRowAction: function(buttonTag, Id, parentOnActiveRowAction) {

                switch (buttonTag) {

                    /*

                    case "edit":

                        alert('Нельзя открыть кандидата!');

                        break;

                    case "copy":

                        alert('Нельзя копировать кандидата!');

                        break;

                    case "delete":

                        alert('Нельзя удалить кандидата!');

                        break;

                    */

                    // замещение базового метода для правильной обработки нажатия по тэгу

                    case "tagBnBackCall":

                        alert('QBackCall! = ' + Id);

                        alert(jQuery.fn.jquery);

                        alert($.fn.jquery);

                        var userId = Terrasoft.core.enums.SysValue.CURRENT_USER.value;

                        var uId = "#SxCandidateSectionDataGridGrid-item-" + Id;//SxCandidateSectionDataGridGrid-item-5713f1f2-7ac2-4970-a3b6-d1ad822335ee

                        alert(uId);

                        var mobNumber = this.JQ(uId).find('a').attr('title');

                        alert(mobNumber);

О JQuery: ни один из алертов где есть jquery не работает, каждый из них по отдельности комментировал, т. е. исключено что ошибка в одном и другие просто не идут. Пробовал просто с $(uId).find('a').attr('title'); and this.JQ(uId).find('a').attr('title'); and this.$(uId).find('a').attr('title'); - в общем у меня в строке грида есть Id и рядом идут нужные данные т. е. по факту мне запрос делать - лишнее. Но попробую с ним тк надо учиться и все такое

QArt,

понял, так глубоко я не копал, надобности использовать jquery как таковой не было. 

Вообще получить значения в гриде можно если пройтись по гриду, сам не пробовал, но думаю это то что вам нужно https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-dobavit-dey…; особенно метод 

showOrderInfo 

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

Сериков Асхат Кайратович,

Спасибо! Cделал, получилось без JQuery.

Учусь, составил себе план:

1) Подменить ViewModel

2) Все-таки, разобраться с JQuery

3) Попробовать сделать тоже самое через var esq = Ext.Create(...

Посоветуй ссылками или кусками кода :)

QArt,

Не за что, сам тоже продолжаю учиться

Для меня Академия лучший источник,

куски кода подходят только по ситуации,

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

По JQuery и ViewModel не имею идей к сожалению

Сериков Асхат Кайратович,

Спасибо. Вот вопросы по запросам к данным в БД. Если нужно читать и писать данные то как и где это делать? Прямо в замещающем клиентском модуле или лучше что-то создавать если создавать то как все это подключать, какие практики?

QArt,

Думаю зависит от ситуации, можешь привести пример в каком контексте будешь писать и читать? 

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

Сериков Асхат Кайратович,

Сейчас сделал кнопку позвонить в кандидатах, он выросли из контактов. Сделал кнопку "позвонить", убрал лишние кнопки. Теперь нужно считать сколько раз звонили кандидату, на кнопке выводить "позвонить (2, 3, ...)". Для реализации создал объект - он стал таблицей, 

AACandCall - idcand, callcount, calltime, calldate наследуется от базового объекта

            //0 если первый раз звонят, -1 if Error

            getCallCount: function (candId) {

                // Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой [Contact].

                var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "AACandCall"

                });

                // Добавляем колонку с именем основного контакта контрагента, который относится к данному контакту.

                esq.addColumn("CallCount");

                // Получаем одну запись из выборки по [Id] объекта карточки и отображаем ее

                // в информационном окне.

                esq.getEntity(candId, function(result) {

                if (!result.success) {

                    // обработка/логирование ошибки, например

                    //this.showInformationDialog("Ошибка запроса данных");

                    return -1;

                }

                return result.entity.get("CallCount");

                }, this);

            },


пока это все что смог написать, возвращает undefined т. е. без ошибки работает, еще надо вот такое написать

            updateCount: function (candId, callCount) {

                return -1;      

            },

            //всегда пишет 1 в callCount

            insertCount: function (candId) {

                return -1;      

            },

Вопрос там ли я это вообще делаю и теми ли инструментами???

QArt,

Первый вопрос должен быть почему он вообще возвращает undefined.

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

Если все что нужно это только обновить то как мне кажется подходит клиентская схема.

Если же следует более сложная логика после обновления счетчика (скажем отправка почты, смена статусов и т.д), то я возможно предпочел бы сделать это веб сервисом. Конечно это можно было бы сделать и на клиентской стороне, но это не всегда удобно. Поэтому все упирается в то как удобнее именно тебе.

Сериков Асхат Кайратович,

Сделал. Столкнулся с задачей: синхронизации асинхронных вызовов. Функция getCallCount в запросе если такого нет вызывала insertCount(candId), если есть то updateCount(candId, callCount+1). Вообще мне как программисту с бэкенда не понятно как так делать вызовы к БД с клиента к тому же прямо к ОнКлик, но как фронтендер не знаю как это нормально сделать :)

Как обработать событие которое возникает при выборе строки???, когда открывается меню с кнопкой позвонить, ей надо надпись менять "позвонить" или "позвонить(номер звонка)" [важно что эта кнопка нами же добавлена по operation: insert] т. е. будет вызвана функция как getCallCount только у нее вместо insertCount and updateCount будет устанавливаться кнопке соответствующий caption. Вот мой уровень развития на фронтенде только так позволяет это сделать, а как это по нормальному делать не знаю :)

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

Добрый день.

Добавляю кнопку для каждого элемента грида в разделе. Код следующий:

define('UsrSvcCatSection', ['ext-base', 'terrasoft', 'sandbox', 'UsrSvcCat',
        'UsrSvcCatSectionStructure', 'UsrSvcCatSectionResources'],
        function(Ext, Terrasoft, sandbox, entitySchema, structure, resources) {
        structure.userCode = function() {
                this.entitySchema = entitySchema;
                // ...
                // add sync button
                this.methods.syncThis = function() {
                        this.showInformationDialog("Bla-bla-bla!");
                };
                var baseGridConfig = this.methods.modifyGridConfig;
                this.methods.modifyGridConfig = function(gridConfig) {
                        if (baseGridConfig) {
                                baseGridConfig.call(this, gridConfig);
                        }
                        var syncButtonConfig = {
                                className: "Terrasoft.Button",
                                caption: "Bla-bla",
                                enabled: true,
                                style: "blue",
                                visible: true,
                                tag: 'sync'
                        };
                        var gConfig = gridConfig;                      
                        gConfig.activeRowActions.push(syncButtonConfig);
                        return gConfig;
                };
                var baseOnActiveRowAction = this.methods.onActiveRowAction;
                this.methods.onActiveRowAction = function(buttonTag, primaryColumnValue) {
                        switch (buttonTag) {
                                case "sync":
                                        this.syncThis();
                                        break;
                                default:
                                        baseOnActiveRowAction.call(this, buttonTag, primaryColumnValue);
                                        break;
                        }
                };
        };
        return structure;
});

Код на моей кнопке отрабатывает корректно, однако не работает код на стандартных кнопках "Просмотр", "Копировать" и т.п.

Также пытался выполнить

default:
        this.callParent(arguments);
        break;

Результат аналогичен - стандартные кнопки не отрабатывают.

Подскажите пожалуйста, в чем моя ошибка?

Нравится

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

Вероятно вы не вызываете родительский код метода при его переопределении (callParent).
Посмотрите в соседнюю тему http://www.community.terrasoft.ru/forum/topic/11933

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

Я пробовал вызывать callParent - результат аналогичен. Стандартные кнопки не работают.

Проблема решена. Возможно кому-то поможет:

this.methods.onActiveRowAction = function(tag, id, parentOnActiveRowAction) {
    switch (tag) {
        case 'sync':
             this.syncThis();
             break;
        default:
             parentOnActiveRowAction.call(this, tag, id);
             break;
    }
}

Вопрос...а такое применимо для кнопок в редактируемом реестре.
Столкнулся что добавив к стандартным кнопкам свои...стандартные кнопки не работают.

onActiveRowAction: function(buttonTag) {
				var activeRow = this.getActiveRow();
				var position;
				//this.callParent(arguments);
				switch (buttonTag) {
					case "Up":
						position = activeRow.get("Position");
						if (position > 0) {
							position--;
							this.setPosition(activeRow.get("Id"), position, this.reloadGridData, this);
						}
						break;
					case "Down":
						position = activeRow.get("Position");
						position++;
						this.setPosition(activeRow.get("Id"), position, this.reloadGridData, this);
						break;
					default:
						break;
				}
			},
Показать все комментарии