Здравствуйте! Подскажите, какой атрибут в настройках синхронизации с LDAP используется для передачи значения Активный пользователь?

Нравится

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

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



При  синхронизации нужно установить атрибут пользователей "активный" = "да".



С уважением,

Богдан

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

Добрый день!

Подскажите, можно ли не создавать учетные записи пользователей в системе при синхронизации с AD? 

Необходимо создавать только контакты.

Нравится

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

Добрый день!



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



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



С уважением,

Богдан

Bogdan,

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

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

Hello!

 

Please help... 

I am binding 16500 data records (SchemaDataDesigner / installation data). 

I am changed the setting "Maximum quantity of data strings to be bound to package"

But I am getting an error:

 

The incoming request has too many parameters. The server supports a maximum of 2100 parameters. Reduce the number of parameters and resend the request.

Нравится

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

Hi! Try to separate on a few data bindings, where each binding cosist of 2100 records 

Нигрескул Алексей,

 

Hello Alexey! I need to bind a large lookup of 65 000 entries rows, I divide it into 12 parts by the type/value of one field, but the largest part is 16 500 entries. Since splitting 65 000 / into 2100 limit = 30 parts, which is not convenient... Is it possible to increase the limit to 2100 row?

Hello! If it's a new records and you need only insert data, you can generate insert scripts and execute them on your db instance. But it's a not best practice.

Did you try change sysstem setting with code MaxPackageSchemaDataRowsCount?

Hello! I am change system setting MaxPackageSchemaDataRowsCount to 20 000. But it did not help. I wrote at the beginning 1st message that I tried to change this setting. Please help....

Hello,



You cannot change the number of parameters that can be bound in a Date element.

Please use other data import tools.

For example, you can use import from Excel:

https://academy.creatio.com/docs/user/platform_basics/business_data/exc…



You can also import data using SQL queries:

https://academy.creatio.com/docs/developer/development_tools/creatio_id…

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

Добрый день 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" />

 

С уважением,

Анастасия

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

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

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 && 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,

а я пытаюсь получить к нему доступ?

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

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

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

 

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 комментария

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

 

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

Нурлан,

А генерация исходного кода прошла успешно?

Можете уточнить по галочке - как именно отображается?

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

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

Доброго времени суток! Подскажите как получить Id и другие поля из выбранного каточки физ.лица в детали с полями?

Нравится

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

Нурлан, здравствуйте!

Можете детализировать Вашу бизнес-задачу?

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

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