Вот как в функции вернуть не undefined ? :)

proc: function(Id)

{

  return getCallCountForButtonCaption(Id);

Вот как сделать чтобы возвращать не undefined, а результат асинхронного вызова который

аяксом вернется из getCallCountForButtonCaption т. е. синхронизировать асинхронный вызов

}

            getCallCountForButtonCaption: function (candId) {

                this.logStep('getCallCountForButtonCaption started...');

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

                

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

                    rootSchemaName: "AACandCall"

                });

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

                esq.addColumn("CallCount");

                esq.filters.add("filterByIdCand",

                    esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                        "IdCand", candId));

                esq.getEntityCollection(function (response) {

                       this.logStep('ForButtonCaption callCount request has started!');

                    if (response.success) {

                        this.logStep('ForButtonCaption callCount response.success is true');

                        if (response.collection.getCount() > 0) {

                            var firstItem = response.collection.getByIndex(0);

                            var callCount = firstItem.values.CallCount;

                            //this.setButtonCaption(callCount);

                            return callCount;

                        }

                        else {

                            this.logStep('ForButtonCaption response.collection.getCount() is ZERO');

                            return -1;

                        }

                        return -1;

                    }

                    else {

                        this.logStep('ForButtonCaption callCount response.success is false');

                        return -1;

                    }

                }, this);

                this.logStep('getCallCount finished...');

            },

 

Нравится

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

Добрый день

У вас не получится сделать синхронным асинхронный вызов. Вам нужно сделать bind свойства на атрибут модели, а в обработке callback'а асинхронной функции устанавливать значение того же атрибута

Пример:

diff: [
   {
    ... 
    "caption": {"bindTo": "MyAttribute"}
    ...
   }]
...
methods: {
   someFunction: function() {
       var callback = function(value) {
          this.set("MyAttribute", value);
       }.bind(this);
       this.callAsync(callback);
   }
}

 

Артем Гура,

Спасибо! Смотрится интересно, буду пробовать. Мне интересно как делать в платформе подряд два асинхронных вызова, когда вызов второго зависит от ответа первого. Конкретная задача: юзар нажимает кнопку "позвонить", запросом проверяем в бд первый звонок если да то делаем вызов инсерт иначе апдейт - это уже сделано, но как далее в методе клик кнопки еще и каптион ее поменять с "позвонить" на "позвонить (1, 2, 3)" Вроде ваш ответ поможет, спасибо. Какая практика по подобным сценариям, ща осваиваю фронтэнд, в основном на c# писал и куча приколов...

Артем Гура,

Попробую спросить в более точной форме. 

Дано:

        attributes: {

            "IsButtonVisible": {

                "dataValueType": Terrasoft.DataValueType.BOOLEAN,

                "value": false

            },

            "ButtonCaption": {

                "dataValueType": Terrasoft.DataValueType.TEXT,

                "value": "Позвонить"            

            }

        },

        diff: [{

            "operation": "insert",

            "name": "bnBackCall",

            "parentName": "DataGrid",

            "propertyName": "activeRowActions",

            "index": 111,

            "values": {

                "className": "Terrasoft.Button",

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

                "caption": { "bindTo": "ButtonCaption" },

                "tag": "tagBnBackCall"

            }

        },

Где мне нужно менять каптион кнопки моей, по логике в 

rowSelected: function(Id) 

            {

                //this.setButtonCaption(Id);

                this.set("ButtonCaption", "КАПТИОН");

            },

Но так не работает, при этом мне нужно устанавливать каптион в зависимости от значения прочитанного с БД (это умею), но эта функция чтения асинхронная, как это нормально сделать???

QArt,

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

Demchenko Olha,

Спасибо, пробовал. Пришлось через js править, плохо что у террасофт если рендеринг поменяется в следующей версии то придется править. Каптион - волшебный, не меняется через атрибуты и ресурсы советовали, но тоже самое биндинг с полем каптион не помогает.

QArt,

Почитайте документацию 

https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-knop…, там и примеры есть реализации. Попробуйте сделать как там, просто вывести кнопку с caption через привязку к локализируемой строке схемы, не делая значение изменяемым. А когда уже получится стандартную кнопку вывести, тогда и пробуйте экспериментировать.

Demchenko Olha,

Хорошо, спасибо :) Все-таки, кнопка выводится - ок, ее каптион биндится к атрибуту, меняя атрибут сам каптион не меняется. 

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

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

Нравится

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

Пример динамического создания перечисления.
Оно?

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

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

здесь на форуме и в интерфейсе демки я его не встретил.

Уточните, в каких случаях (конкретных) Вам требуется автозаполнение(автодополнение). В Террасофте достаточно удобный механизм выбора из справочника, и я раньше не встречал постановки подобной задачи.

Насколько я понял имеется в виду автозаполнение поля при вводе начальных n-символов. Такого пока в Террасофт я не встречал.

"Глова Сергей" написал:Уточните, в каких случаях (конкретных) Вам требуется автозаполнение(автодополнение). В Террасофте достаточно удобный механизм выбора из справочника, и я раньше не встречал постановки подобной задачи.

в базовом поиск в справочнике идет по нажатию на "поиск".
Наверное имеется ввиду прикрутить поиск на OnChange поля ввода...
Правда тогда пользователь будет слегка "долбить" сервер запросами.

"Агутин Алексей" написал:Насколько я понял имеется в виду автозаполнение поля при вводе начальных n-символов. Такого пока в Террасофт я не встречал.

Что-то подобное получается если в поле справочника ввести некоторый текст, а уже потом нажать на "лупу", автоматически сработает поиск по введенному тексту.

меня смущает понятие "достаточно удобный" :)
прикручивать надо на событие keyup.

"долбить", безусловно, будут - является ли это проблемой производительности?

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

Выводить новый список после каждой буквы ? Насколько критичен для Вас данный функционал ?

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

"Венгеров Андрей" написал:здесь же достаточно часто обсуждается вопрос дублирования значений в справочниках и таблицах.

Предварительно, для проверки, используйте поиск.

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

Если кто-то начнет писать "Ма" то "Москва" у него не найдется ни так (как в Террасофте) ни сяк (Как хотите Вы по буквам) - вот Вам и дубль в справочнике.

"Венгеров Андрей" написал:является ли это проблемой производительности?

Считайте при вводе/удаление каждого символа будет идти запрос вида select top 40 ... (при обычном справочнике - выборка одного - двух полей) сам запрос отработает мгновенно + заполнение самого датасета. В целом, думаю не страшно, если это локально.
Все зависит от сервера и от канала.

а это и есть механизм автокомплита

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

Поверьте, это оч.удобно

"Венгеров Андрей" написал:в связаных с ним договорах, то при заведении новой компании система должна самостоятельно пытаться на ходу проверить на совпадении имен.

Так в функционале это есть (Проверка на дубли при заведении новой компании).

Если есть возможность (TeamViewer + Skype) я могу быстро объяснить Вам все нюансы при работе со справочниками.

Не умеет такого TS. Единственое как это можно попытаться сделать это через скрещивание Edit с ActionMenu. Но думаю работать будет через пень-колоду.

"Underscore a.k.a. _" написал:Единственое как это можно попытаться сделать это через скрещивание Edit с ActionMenu

А можно во как :)
1. Написать свой компонент, который умеет это делать и который TOleControl поймет.. кхм..
2. В террасофте можно отображать веб-страницу. Можно подобный функционал, скажем на АСП.нет сделать..
Но это я так )

"Доленко Юрий" написал:Но это я так )

"Мсье знает толк в извращениях" :smile:

Спасибо большое!
с удовольствием свяжусь в ближайшее время.(четв -пятн)
Есть несколько вопросов

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

В продолжение темы:

http://community.terrasoft.ua/blogs/3521

Хочу продемонстрировать работоспособный вариант использования каласса itsTerrasoftWS

Веб написан на PHP + AJAX

Приятного просмотра!

Нравится

Поделиться

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

Хороший пример. А сколько времени заняло создание примера?

Сергей:

1 день - разобрался с веб-сервисами Terrasoft и создал класс

2 дня (пятница-суббота) - написание данного веб-приложения

Использовал GPL библиотеки: XAJAX, pChart, MailClass (для нотификации на Email о добавлении нового инцидента)

Есть еще несколько идей - буду развивать... :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Забыл детальку показать в разделе [Контрагенты]

--
www.it-sfera.com.ua
Terrasoft Solution Partner

А имя пользователя на ней есть?

А нужно? ;)

Тогда будет!

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Ну это мелкое замечание при взгляде со стороны. Думаю нужно.

Зачем имя пользователя? Имя пользователя в верхнем "гриде". Это ж деталька!

Женя, можно просто изменить приведенный в примере принцип аутентификации (не по контрагенту, а по контакту), тогда имя пользователя очень кстати :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

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