Добрый день community. Подскажите, кто как учился работать  ExtJS и потом как вы адаптировали свои знания с работой Terrasoft?  Есть проблема роста в разработке. Я и раньше задавал вопрос тут , спасибо Вам многие помогли подсказали и даже пару месяцев поддерживали в вопросах связанных с разработкой. Сейчас лучше, чем в начале пути, но у меня снова руки опушены, чувствую что за год, очень мало знаю. Я начал работать с хорошим знанием Js, но без знания ExtJs, может проблема в этом? Резюмирую свой вопрос:
1) Как мне учить ExtJs (документация ну такое себе)
2) И как применить это в Terrasoft (как понять структуру, я так понял Terrasoft переписал под себя для удобства библиотеку?) 

Спасибо.

Нравится

3 комментария
Лучший ответ

Ислам Ибрагимжанов,

Сейчас с документацией дело получше, чем когда я начинал. Сам обучался на реальных задачах, никаких курсов. Значительная часть кода, не относящаяся к ядру клиентскому никак не минифицирована, не обфусцирована, так что можно пытаться найти уже реализованную аналогичную функциональность. У меня на старте были поверхностные знания JavaScript, до этого несколько лет на C# программировал, так что с серверной частью проще было. Вот с мобильным приложением по-прежнему туго с документацией, очень мало примеров, много подводных камней, некоторые простые доработки для веба в мобилке довольно неочевидным образом делаются, чего-то вообще нет. 

Несколько лет разрабатываю под эту CRM, и могу сказать, что какие-то глубокие познания в ExtJs почти не нужны. На клиентской части, кроме Ext,create, Ext.String.format, Ext.getCmp, ну и this.callParent вряд ли что-то ещё понадобится. Очень редко требуется какое-то более глубокое взаимодействие непосредственно с самим Ext, большинство потребностей покрывается инструментарием, построенном ТС поверх всего этого.

Для мобильного приложения чуть сложнее. Часто приходится определять новые классы через Ext, нужно понимать разницу между override (расширяет существующий класс) и extend (новый класс-наследник). Но тут материала на день изучения. 

Лучше сфокусироваться на изучении инструментария ТС. Сам Ext подучивать по мере возникновения потребностей 

Но вообще, Террасофт переходит на Angular. Насколько нужно в нём разбираться нужно не могу сказать, т.к. не приходилось пока работать с ним.

А что касается проблем с английским, то лучше его подтянуть хотя бы до уровня, чтобы можно было читать документацию, лишним точно не будет. И далеко не только для Ext или Angular

Бершеда Д. Н., 
Благодарю, а сам ТС вам хватило, что есть в документации? И как вы изучили если можно узнать ТС? Проходили их курсы? 

P.S С английский как раз борюсь, думаю в этом году закрою эту проблему.

Ислам Ибрагимжанов,

Сейчас с документацией дело получше, чем когда я начинал. Сам обучался на реальных задачах, никаких курсов. Значительная часть кода, не относящаяся к ядру клиентскому никак не минифицирована, не обфусцирована, так что можно пытаться найти уже реализованную аналогичную функциональность. У меня на старте были поверхностные знания JavaScript, до этого несколько лет на C# программировал, так что с серверной частью проще было. Вот с мобильным приложением по-прежнему туго с документацией, очень мало примеров, много подводных камней, некоторые простые доработки для веба в мобилке довольно неочевидным образом делаются, чего-то вообще нет. 

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

Добрый день мне нужно в созданном мной модуле сделать функцию для bind к кнопке "Добавить". Я делаю расширение от LookupPage. 

Вот весь код: 
 

define("UsrAccountBaseLookupModule", [
        "LookupPage",
        "LookupPageViewGenerator",
        "LookupUtilitiesV2",
        "css!LookupPageCSS"
    ],
    function(LookupPage, LookupPageViewGenerator) {
        return Ext.define("Terrasoft.configuration.UsrAccountBaseLookupModule", {
            alternateClassName: "Terrasoft.UsrAccountBaseLookupModule",
            extend: "Terrasoft.LookupPage",
            render: function() {
                this.callParent(arguments);
                // if()
                this.myRenderLookupView(this.lookupInfo.entitySchema, this.lookupInfo.gridProfile);
            },
            renderLookupView: Terrasoft.emptyFn,
            myRenderLookupView: function(schema, profile){
                var config = this.getLookupConfig(schema, profile);
                var topPanelConfig = LookupPageViewGenerator.generateFixed(config);
                var buttonsConfig;
                _.some(topPanelConfig.items, function(target) {
                    if (target.id === "selectionControlsContainerLookupPage") {
                        _.some(target, function(target) {
                            if (Array.isArray(target)) {
                                buttonsConfig = target;
                                return true;
                            }
                        });
                        return true;
                    }
                });
                _.some(buttonsConfig, function(target) {
                    if (target.caption === "Добавить") {
                        target.enabled = {bindTo:"getViewModelValues"};
                        return true;
                    }
                });
                this.renderLookupControls(config, topPanelConfig);
            },
            getViewModelValues: function() {
                if(Terrasoft.SysValue.CURRENT_USER.value !== "8239c02a-1376-4e23-82f5-d5b142ac16f4") {
                    window.console.log(Terrasoft.SysValue.CURRENT_USER.value !== 
                        "8239c02a-1376-4e23-82f5-d5b142ac16f4");
                    return false;
 
              } else {
                   return this.render();
 
             }
                var values = {
                    canEdit: true,
                };
                return values;
            },
            generateViewModel: function() {
                var viewModel = this.callParent(arguments);
                this.applyViewModelMethods(viewModel);
                return viewModel;
            },
 
            applyViewModelMethods: function(viewModel, scope) {
                Ext.override(viewModel, {
                    onSearchButtonClick: function() {
                        var parentMethod = this.getParentMethod(this, arguments);
 
                        Terrasoft.chain(
                            function(next) {
                                 // Вот тут нужно сделать вызов функции чтобы кнопка Добавить стала активной
                                this.Ext.callback(scope, this.getViewModelValues);
                                next();
                            },
                            parentMethod,
                            this
                        );
                    }
                });
            },
        });
    });

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

Вот тут я не могу сделать вызов функции. Пожалуйста подскажите

Нравится

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

Добрый день!

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

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

Коллеги, я никак не могу понять, суть зависания моей системы, я подумал это связано с диском, так как чтение идет оттуда. Купил SSD Samsung 980 PRO NVMe M.2 1000 ГБ, но без результатно, подумал может в оперативке зависает сделал сейчас 21гб оперативки, все без результатно. Базу устанавливаю локально, как может так виснет? Со вчерашнего дня не могу зайти нормально даже на страницы, если даже зайти, то при обновлении получаю ошибку 

Load timeout for modules: BankCardSectionV2,CardModuleV2

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

Нравится

1 комментарий
Лучший ответ

Добрый день!

 

Для анализа проблемы производительности важно сперва определить проблемную подсистему. В основном это может быть либо приложение (Web Server), либо сервер баз данных (Database Server).

Из опыта решения разного рода аналогичных проблем мы пришли к выводу, что не всегда проблемная подсистема является причиной самой проблемы. К примеру, если у Вас очень нагружен Database Server, то проблема может быть на стороне WebServer’а, логика которого работает неверно и нагружает БД. Или наоборот, сервер БД отдал слишком большой объем данных, но быстро, а после этого Web Server начинает их обворачивать в свои внутренние структуры для обработки/передачи клиенту.

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

Также рекомендуем рассмотреть вариант с использованием разных инструментов/утилит для того, что бы проводить системный мониторинг (Grafana, Zabbix) и в дальнейшем предотвращать подобные проблемы.

 

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

 

С уважением,

Катя

Добрый день!

 

Для анализа проблемы производительности важно сперва определить проблемную подсистему. В основном это может быть либо приложение (Web Server), либо сервер баз данных (Database Server).

Из опыта решения разного рода аналогичных проблем мы пришли к выводу, что не всегда проблемная подсистема является причиной самой проблемы. К примеру, если у Вас очень нагружен Database Server, то проблема может быть на стороне WebServer’а, логика которого работает неверно и нагружает БД. Или наоборот, сервер БД отдал слишком большой объем данных, но быстро, а после этого Web Server начинает их обворачивать в свои внутренние структуры для обработки/передачи клиенту.

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

Также рекомендуем рассмотреть вариант с использованием разных инструментов/утилит для того, что бы проводить системный мониторинг (Grafana, Zabbix) и в дальнейшем предотвращать подобные проблемы.

 

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

 

С уважением,

Катя

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

Доброго времени суток!
В конфигурации не можем открыть исходный код страницы. Сообщение ошибки показано на скриншоте ConfigurationError.png
Ни перезагрузка пула, ни перезагрузка сервера, ни очистка редиса, не полная компиляция, ни генерация исходного кода, не переход в режим файловой системы, ни попытка в других браузерах не помогли. 
Можете помочь с решением проблемы? Спасибо заранее.

Прикрепленные файлы

Нравится

1 комментарий
Лучший ответ

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

 

Для решения проблемы необходимо установить в файле \Terrasoft.WebApp\Web.config в секции <appSettings>
параметр <add key="UseIncludeDependenciesSource" value="false" />

 

С уважением,
Анастасия

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

 

Для решения проблемы необходимо установить в файле \Terrasoft.WebApp\Web.config в секции <appSettings>
параметр <add key="UseIncludeDependenciesSource" value="false" />

 

С уважением,
Анастасия

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

Доброго времени суток! 

Ситуация такая: Вчера запустил импорт данных из Excel в количестве 43000 записей обращений и закрыл страницу импорта. Теперь хочу узнать прогресс этого процесса и, если возникла ошибка, то где в логах пишется эта ошибка ?

Нравится

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

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

 

Информацию о возможных ошибках загрузки данных вы можете просмотреть в справочнике [ Лог импорта из Excel ]. Здесь отображаются данные о тех записях файла импорта, которые не удалось загрузить.

 

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

 

Больше детальной информации в статье:

https://academy.terrasoft.ua/docs/user/bazis_platformy/dannye/excel_imp…

 

С уважением,
Анастасия

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

Доброго времени суток коллеги. Имею проблемы (очень нужна помощь) пожалуйста кто сможет подскажите. Мне нужно было сделать
1)  при открытии справочного окна сделать поле поиска по умолчанию ИНН, я посмотрел тут и создал модуль. (все работает)
2) Нужно сделать неактивной кнопку "Добавить", пока не нажимаем в кнопку "Поиск" и если пусто(то есть нет результатов поиска), то только тогда сделать кнопку "Добавить" активной. 

Шаги: Я добавил два метода как указано в этой статье, но не понимаю, куда добавлять: 

Я поискал в своем конфиругации и там создана viewModel, которая вызывает сам деталь деталь. И попробовал установить её в методе  getLookupPageConfig

define("UsrEmploymentDataRowViewModel", ["EmploymentDataRowViewModel", "LookupUtilitiesV2"],
function(LookupUtilities) {
 
Ext.define("Terrasoft.configuration.UsrEmploymentDataRowViewModel", {
extend: "Terrasoft.EmploymentDataRowViewModel",
alternateClassName: "Terrasoft.UsrEmploymentDataRowViewModel",
 
getLookupPageConfig: function() {
    this.callParent(arguments);
    var config = {
    entitySchemaName: "Lead",
    columns: ["Id"],
    associatedProjectId: this.get("Id"),
    multiSelect: true,
    actionsButtonVisible: true,
    //указываем нашу кастомизированную схему
    lookupPageName: "UsrAccountBaseLookupModule"
    };
    this.openLookup(
    config,
    function(selected) { window.console.log("selected", selected);},
    this);
},
});
    return Terrasoft.UsrEmploymentDataRowViewModel;
});

Вот сама деталь: 

define("EmploymentDataFieldsDetail", ["UsrAccountBaseLookupModule", "UsrEmploymentDataRowViewModel"],
    function() {
        return {
            entitySchemaName: "ContactCareer",
            attributes: {
                "Account": {
                    dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                    lookupListConfig: {
                        lookupPageName: "UsrAccountBaseLookupModule",  }, },  },
            methods: {
                getRowViewModelClassName: function() {
                    return "Terrasoft.UsrEmploymentDataRowViewModel";
                } },
            diff: /**SCHEMA_DIFF*/ [] /**SCHEMA_DIFF*/ ,
        };
    });
// схема детали "Данные по занятости"

Ошибка:  

Теперь, я вместо openLookup попытался открыть через LookupUtilities, вот код: 

define("UsrEmploymentDataRowViewModel", ["EmploymentDataRowViewModel", "LookupUtilitiesV2"],
function(LookupUtilities) {
    Ext.define("Terrasoft.configuration.UsrEmploymentDataRowViewModel", {
    extend: "Terrasoft.EmploymentDataRowViewModel",
    alternateClassName: "Terrasoft.UsrEmploymentDataRowViewModel",
 
    getLookupPageConfig: function() {
    this.callParent(arguments);
    var config = {
    lookupPageName: "UsrAccountBaseLookupModule"
    };
    LookupUtilities.Open(config, function(selected){ window.console.log(selected);}, this);},
    });
    return Terrasoft.UsrEmploymentDataRowViewModel;
});

Получаю ошибку: 

Весь код, модуля: 

define("UsrAccountBaseLookupModule", [
    "LookupPage",
    "LookupPageViewGenerator",
    "LookupPageViewModelGenerator",
    "ProcessModuleUtilities",
    "LookupUtilities",
    "css!LookupPageCSS",
], function(
    LookupPage,
    LookupPageViewGenerator,
    LookupPageViewModelGenerator,
    LookupUtilities,
    ProcessModuleUtilities
) {
    return Ext.define("Terrasoft.configuration.UsrAccountBaseLookupModule", {
        alternateClassName: "Terrasoft.UsrEDFDAccountLookupPage",
        extend: "Terrasoft.LookupPage",
        gridWrapClasses: ["custom-lookup-control"],
 
        init: function(callback, scope) {
            callback = callback || Terrasoft.emptyFn;
            if (this.viewModel) {
                callback.call(scope);
                return;
            }
            var lookupInfo = this.getLookupInfo();
            if (this.Ext.isArray(lookupInfo)) {
                var configIndex = 0;
                var parameters = this.parameters;
                if (!this.Ext.isEmpty(parameters)) {
                    configIndex = parameters.index;
                }
                this.lookupInfo = lookupInfo[configIndex];
                this.lookupsInfo = lookupInfo;
            } else {
                this.lookupInfo = lookupInfo;
            }
            this.processModuleFlag = this.sandbox.publish(
                "CardProccessModuleInfo",
                null, [this.sandbox.id]
            );
            this.initHistoryState();
            this.getSchemaAndProfile(
                this.lookupInfo.lookupPostfix,
                function(entitySchema, profile) {
                    if (this.isDestroyed) {
                        return;
                    }
                    entitySchema.primaryDisplayColumn = {
                        caption: "ИНН",
                        columnPath: "INN",
                        dataValueType: 1,
                        isInherited: false,
                        isRequired: true,
                        isValueCloneable: true,
                        name: "INN",
                        size: 250,
                        uId: "4b8aa047-9de8-42b8-ab32-fbf0f9a39479",
                        usageType: 0,
                    };
 
                    var primaryDisplayColumn = entitySchema.primaryDisplayColumn;
 
                    if (primaryDisplayColumn) {
                        this.lookupInfo.searchColumn = {
                            value: primaryDisplayColumn.name,
                            displayValue: primaryDisplayColumn.caption,
                        };
                    }
                    this.lookupInfo.entitySchema = entitySchema;
                    this.lookupInfo.gridProfile = profile;
                    var viewModel = (this.viewModel = this.generateViewModel());
                    viewModel.lookupInfo = this.lookupInfo;
                    viewModel.load(profile, callback, scope);
                }
            );
        }, 
        renderLookupView: function(schema, profile) {
            var config = this.getLookupConfig(schema, profile);
            var topPanelConfig = LookupPageViewGenerator.generateFixed(config);
            var buttonsConfig, AddButtonConfig;
            _.some(topPanelConfig.items, function(target) {
                if (target.id === "filteringContainerLookupPage" ||
					target.id === "selectionControlsContainerLookupPage") {
                    _.some(target, function(target) {
                        if (Array.isArray(target)) {
                            buttonsConfig = target;
                            return true;
                        }
                    });
                    return true;
                }
            });
            _.some(topPanelConfig.items, function(item) {
                if (item.id === "selectionControlsContainerLookupPage") {
                    _.some(item, function(item) {
                        if (Array.isArray(item)) {
                            AddButtonConfig = item;
                            return true;
                        }
                    });
                    return true;
                }
            });
            _.some(AddButtonConfig, function(target) {
                if (target.caption === "Добавить") {
                    // delete target.tag;
					target.enabled = {
						bindTo: "false"
					};
                    return true;
                }
            });
            _.some(buttonsConfig, function(target) {
                if (target.caption === "Поиск") {
                    delete target.tag;
                    target.click = {
                        bindTo: "AddRequestButton"
                    };
					target.enabled = {
						bindTo: "false"
					};
                    return true;
                }
            });
            this.renderLookupControls(config, topPanelConfig);
        },
        generateViewModel: function() {
            var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);
            if (!this.lookupInfo.columnValue &amp;&amp; this.lookupInfo.searchValue) {
                viewModelConfig.values.searchData = this.lookupInfo.searchValue;
                viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
            }
            viewModelConfig.methods.AddRequestButton = function() {
                var associatedProjectId = this.values.LookupInfo.associatedProjectId;
                //Вызываем БП
                var args = {
                    sysProcessName: "UsrCreateNewRequestFromProject",
                    parameters: {
                        ProjectId: associatedProjectId
                    }
                };
                ProcessModuleUtilities.executeProcess(args);
                this.close();
            };
            var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
            viewModel.Ext = this.Ext;
            viewModel.sandbox = this.sandbox;
            viewModel.Terrasoft = this.Terrasoft;
            if (this.lookupInfo.updateViewModel) {
                this.lookupInfo.updateViewModel.call(viewModel);
            }
            viewModel.initCaptionLookup();
            viewModel.initHasActions();
            viewModel.initLoadedColumns();
            if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
                viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
            }
            if (this.lookupInfo.hideActions) {
                viewModel.set("hasActions", false);
            }
            return viewModel;
        }
    });
});

Пожалуйста, помогите с решением. 

Нравится

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

Ислам, добрый день!

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

"dataValueType": Terrasoft.DataValueType.LOOKUP,
"lookupListConfig": {
            lookupPageName: "UsrAccountBaseLookupModule",
 }

Дима Вовченко,
если я добавляю модуль в атрибут, ругается

LookupPageViewModelGenerator получает grid = undefined. 
Я так понимаю, это потому что ещё не отрисована сам grid,
а я пытаюсь получить к нему доступ?

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

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

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

Нравится

1 комментарий
Лучший ответ

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

 

Уточните, пожалуйста, ошибка возникает при установке кастомного пакета или приложения маркетплейс? 

Так же прикрепите лог установки. 

Спасибо!

С уважением,
Анастасия

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

 

Уточните, пожалуйста, ошибка возникает при установке кастомного пакета или приложения маркетплейс? 

Так же прикрепите лог установки. 

Спасибо!

С уважением,
Анастасия

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

Добрый день! В странице контакта есть определенное поле, куда передается строковое значение по типу "00000 https://someurlcrm.org/....". Как сделать данный url "https://someurlcrm.org/...." кликабельным так, чтобы при открытии странички клиента можно было нажать на данную ссылку, находящуюся в данном поле и перейти дальше по ссылке ?

Нравится

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

Добрый день, Арнур!

 

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

Дання задача уже поставлена нашим разработчикам, благодаря вашему посту мы повысили её приоритет.
 
В решении вашей бизнес-задачи вам поможет статья: https://community.creatio.com/articles/creating-custom-web-link-field

 

С уважением,

Анастасия

Anastasiia Stepanova,

Здравствуйте, спасибо за ответ! У меня есть еще один вопрос: пример, ссылку на который вы отправили предполагает, что в поле будет передаваться url в формате строки, а что, если значением строки будет не только url? Допустим, строка "Спасибо за удобный сервис! ссылка на объект: https://someurl.org" и здесь должен быть кликабельным только кусок с "https://someurl.org". Я видел, что в самом разделе, если настроить для вывода нужную нам колонку, то система распознает url, пускай и неполностью (т.е. ссылка выделена синим и кликабельна до того момента, когда строка заканчивается и начинается новая строка). 

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

Доброго времени суток! 

У меня возник такой вопрос: Хочу через пользователя в таблице "SysAdminUnit" найти, как утроена связь между организационной ролью и пользователем (думал, что есть отдельная таблица "Орг. роль", которая в виде внешнего ключа подключается к "SysAdminUnit", но оказалось, что в данной таблице содержатся все записи включая пользователей, орг./функциональные роли и тд. Подскажите, как можно найти связь между пользователем (не контактом) и его организационной ролью, чтобы можно было спокойно ссылаться на Id нужного пользователя? И правильно ли я делаю, что ищу информацию о пользователе в таблице "SysAdminUnit"?

Спасибо за ответы!

Нравится

1 комментарий
Лучший ответ

Структура ролей представлена в таблице SysUserInRole
А в таблице SysAdminUnitInRole можно найти все роли (в том числе наследуемые), которые есть у пользователя

Структура ролей представлена в таблице SysUserInRole
А в таблице SysAdminUnitInRole можно найти все роли (в том числе наследуемые), которые есть у пользователя

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

Здравствуйте! Коллеги подскажите. Сделал веб сервис

 

namespace Terrasoft.Configuration.Statements 
{
    using System;
    using Terrasoft.Core;
    using System.ServiceModel;
    using Terrasoft.Web.Common;
    using System.ServiceModel.Web;
    using Terrasoft.Core.Entities;
    using System.ServiceModel.Activation;

    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrStatements : BaseService
    {
        
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string GetContactList()
        {
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
            var colName = esq.AddColumn("Id");
            var contacts = esq.GetEntityCollection(UserConnection);
            if(contacts.Count > 0)
            {
                var result = contacts[0].GetColumnValue(colName.Id).ToString();
                return result;
            }
        }
    }
}

При вызове воращает ошибку 404. Вызываю так https://testcrm.com/0/rest/UsrStatements/GetContactList

Авторизовываюсь Supervisor-ом

Версия 7,13

Нравится

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

А компилируется без ошибок?

 

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

Нурлан,
А генерация исходного кода прошла успешно?
Можете уточнить по галочке - как именно отображается?

Добрый день. Вопрос решен. Ошибка была в браузере. Браузер не показывал некоторые ошибки и соостветвенно публикация не происходило. Спасибо всем.

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