Добрый день.

Настраиваю интеграцию с LDAP, не происходит импорт пользователей, только групп. Опытным путём выяснил что проблема в последнем фильтре "Фильтрация пользователей группы Active Directory". Скрипт который указан в родной документации не работает.

Посоветуйте какой фильтр в нём можно применять. Например если у всех пользователей sAMAccountType=805306368 можно ли его там использовать?

Нравится

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

Добрый день, Иван.

Фильтр, указанный в документации правильный - это родной фильтр MS. Он может не отрабатывать, если в качестве синхронизируемых объектов указывается орг.единица, а не директория. В таком случае можно использовать в фильтре любой общий атрибут для пользователей, если его нет - создать такой для них.

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

Приветы, есть аттрибуты

attributes: {

            "IsButtonVisible": {

                "dataValueType": Terrasoft.DataValueType.BOOLEAN,

                "value": false

            },

            "ButtonCaption": {

                "dataValueType": Terrasoft.DataValueType.TEXT,

                "value": "Test"

            }

        },

{

            "operation": "insert",

            "name": "bnBackCall",

            "parentName": "DataGrid",

            "propertyName": "activeRowActions",

            "index": 111,

            "values": {

                "className": "Terrasoft.Button",

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

                "caption": "Позвонить",

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

                "tag": "tagBnBackCall"

            }

        },

                {

                    "operation": "merge",

                    "name": "DataGridActiveRowOpenAction", 

                    "values": {

                        "visible": { "bindTo": "IsButtonVisible" }

                    }

                },

        {

            "operation": "merge",

            "name": "DataGridActiveRowCopyAction", 

            "values": {

                //"visible": { "bindTo": "IsButtonVisible" }

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

                //"caption": "12345",

            }

        },

Атрибут ButtonCaption не биндится к кнопке, она не видима, если задать конст то ок

Аттрибут IsButtonVisible биндится все ок к той же кнопке

Какое волшебство с caption как его менять у кнопки в rowSelected например, если атрибут не биндится

Нравится

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

Эм. А ресурсы вам чем не угодили? Caption-ы лучше через них задавать.

Варфоломеев Данила,

У меня на кнопке должно выводится "Позвонить (номерЗвонка)" тут нет смысла в ресурсах тк динамический каптион в чистом виде. Сейчас зашито вот такое: 

rowSelected: function (Id) {

                this.logStep('rowSelected(' + Id + ') started!');

                this.readCallCount(Id);

                this.sleep(500);

                var itemId = '#SxCandidateSectionDataGridGrid-actions-item-' + Id;

                var jsRow = this.Ext.select(itemId);

                jsRow.elements[0].lastElementChild.previousElementSibling.innerText = this.getButtonCaption();

                //jsRow.select('span').item(6).dom.innerHTML = this.getButtonCaption();

                this.logStep('rowSelected(' + Id + ') finished!');

                //bn.setText(this.getButtonCaption());

                //bn.text = this.getButtonCaption();

                

            },

Как сделать нормально через атрибуты платформы или еще что-то из платформы?

QArt пишет:

Как сделать нормально

 Добавить в ресурсы 2 строчки. TemplateFormatString - "Позвонить {0}" и CallButtonCaption - ""



забиндить caption кнопки

"caption": {bindTo: "Resources.Strings.CallButtonCaption"}

И в любом месте в коде

 

var number = /*номер телефона*/;
this.set("Resources.Strings.CallButtonCaption", 
     Ext.String.format(this.get("Resources.Strings.TemplateFormatString"), number));

 

Варфоломеев Данила пишет:

QArt пишет:

Как сделать нормально

 Добавить в ресурсы 2 строчки. TemplateFormatString - "Позвонить {0}" и CallButtonCaption - ""

забиндить caption кнопки

<span><span>"caption"</span></span><span>:</span> <span>{</span>bindTo<span>:</span> <span><span>"Resources.Strings.CallButtonCaption"</span></span><span>}</span>

И в любом месте в коде

 


 
var number = /*номер телефона*/;
this.set("Resources.Strings.CallButtonCaption", 
     Ext.String.format(this.get("Resources.Strings.TemplateFormatString"), number));

Спасибо, буду пробовать.

Менять ресурс - норм практика - ок. В c# так не делал, надо будет попробовать :) Но тут не c#. 

Можете подсказать как определить является ли текущий юзар админом? Версия 7.11 онлайн сэйлз энтерпрайз

Попробовал следовать вашему совету, кнопка пропала (как и в случае с обычным атрибутом типа ТЕКСТ), не знаю что делаю не так. Но вот что написано:

Что делаю не так??? (Версия 7.11 онлайн сэйлз энтерпрайз) Заранее спасибо!

В консоли и БД вижу что все значения верные, вот только кнопки нет ((

{

            "operation": "insert",

            "name": "bnBackCall",

            "parentName": "DataGrid",

            "propertyName": "activeRowActions",

            "index": 111,

            "values": {

                "className": "Terrasoft.Button",

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

                //"caption": "Позвонить",

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

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

                "tag": "tagBnBackCall"

            }

        },

 getButtonCaption: function()

            {

                var result = this.get("Resources.Strings.rButtonCallCaption");

                this.logStep('getButtonCaption = ' + result);

                return result;

            },

            

            setButtonCaption: function(callCount)

            {

                this.logStep('setButtonCaption(' + callCount + ') started!');

                var caption = 'Позвонить';

                if (callCount > 0)

                    caption += ' (' + callCount + ')';

                //this.set("ButtonCaption", caption);

                //this.logStep('setButtonCaption(' + callCount + ')');

                //this.logStep('getButtonCaption() = ' + this.getButtonCaption());

                this.set("Resources.Strings.rButtonCallCaption", caption);

                this.logStep('setButtonCaption has finished!');

            },

QArt,

у вас точно название в ресурсах такое как вы указываете 

http://prntscr.com/ilfjl6 ?

Попробуйте сделать как в примере http://prntscr.com/ilflfw

Demchenko Olha,

Спасибо за ответы, регистр точно совпадает и посимвольно тоже. Вроде js и c# регистрочувствительны и все такое. Может это в 7.11 версии кнопки мутировали :) Многое меняется, мне ребята скидывали функцию по определению админ текущий пользователь или нет, но у них более ранние версии и у меня таких столбцов в бд просто нет, хотя таблица с таким именем есть. Может подобную функцию добавят в число стандартных? Или вынесут массив ролей текущего пользователя на клиента, гуид же доступен. Еще пожелание делать синхронные запросы, не только асинхронные (чтобы можно было указать). Есть норм книга? Еще раз спасибо, хороших выходных.

QArt,

Есть стандартные константы в схеме ConfigurationConstants и там присутствует id сисадминов - http://prntscr.com/im7k0g

Получить id сисадмина можно так: ConfigurationConstants.SysAdminUnit.Id.SysAdministrators

Остаётся получить id текущего пользователя, например this.Terrasoft.SysValue.CURRENT_USER.value, и определить его роли из таблици SysUserInRole.

Потом проверить есть ли среди полученных ролей роль сисадмина. Пример работы с SysUserInRole из коробки - http://prntscr.com/im7y7o

Все примеры по версии 7.11

Спасибо! Еще бы книгу нормальную, как настроить WebStorm чтобы он подтянул платформу? А то от него пользы, если править замещенный клиентский модуль только как от "модного блокнота". Заранее спасибо.

QArt,

В WebStorm вы можете работать со всеми js файлами посли их выгрузки. При этом должны подтягиваться все переменные\методы и т.д. А если вы скачиваете отдельно файл и открываете его, то конечно это будет как "блокнот".

Demchenko Olha,

Помогите начать разработку. С бэкенда, но js знаю тк фулстек. Но поиск по всем js файлам в папке сайта, не нашлось функции из 

https://prnt.sc/im7y7o к слову. Как выгрузить все файлы для нормальной разработки в WebStorm??? (взять из папки сайта на сервере)

У нас erp enterprise 7.11 on site install.

Что делаю не так?? Можно алгоритм для начала нормальной разработки?? бОльшое спасибо, заранее!

QArt,

По всем схемам вы можете искать и в браузере - 

http://prntscr.com/in5nri

Касательно начала разработки, можете ознакомиться со статьей - https://academy.terrasoft.ru/documents/technic-sdk/7-11/rabota-s-klient…

Demchenko Olha,

Спасибо, но искать по всем сборкам пробовал (ctrl+shift+f) у нас не нашлось. Вот скрин - https://prnt.sc/in6qd6&nbsp;

Работать из файловой системы буду пробовать уже завтра, спасибо!

 

QArt,

Откройте панель уведомлений и попробойте ещё раз. Ну или откройте схему CtiPanel в конфигурации и посмотрите там код.

Demchenko Olha,

Спасибо, пробовал искать ctiPanel в веб интерфейсе и открывал все схемы, которые нашла платформа и нигде нет - это было вчера. Сегодня начал пробовать "работать из файловой системы" и получил https://prnt.sc/inl1yd - это после правки web.config согласно - https://academy.terrasoft.ru/documents/technic-sdk/7-11/razrabotka-v-fa… права на папку IIS юзарам дали - полный доступ. Что я не так делаю?

QArt,

Напишите в поддержку по этому поводу.

Demchenko Olha,

Привет, как в нее писать? им достаточно будет ссылки на нашу переписку?

QArt,

Напишите на support@bpmonline.com, опишите проблему и приложите скрины.

Demchenko Olha,

Спасибо! С праздником - 

https://www.graziosgeles.lt/wp-content/uploads/2016/10/raudona-puokste…;

QArt, воспроизведите ошибку еще раз, после направьте в поддержку полные логи приложения. Сохраняются они на веб-сервере по пути C:\Windows\Temp\BPMonline\Site_ID

QArt пишет:

Demchenko Olha,

Спасибо, пробовал искать ctiPanel в веб интерфейсе и открывал все схемы, которые нашла платформа и нигде нет - это было вчера. Сегодня начал пробовать "работать из файловой системы" и получил https://prnt.sc/inl1yd - это после правки web.config согласно - https://academy.terrasoft.ru/documents/technic-sdk/7-11/razrabotka-v-fa… права на папку IIS юзарам дали - полный доступ. Что я не так делаю?

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

Добрый день. Столкнулся со следующий проблемой при использовании html-полей. Если на странице присутствует несколько таких полей, то загрузка изображения в одно из них приведёт к загрузке такого же изображения и во все остальные html-поля, загруженные на странице. Т.е., если на другой вкладке есть html-поле, но вкладка ещё ни разу не открывалась, то всё хорошо. Но если второе поле на той же вкладке, или другая вкладка уже была открыта, то изображение будет загружено сразу во все. Пример diff-а ниже:

	{
		"operation": "insert",
		"name": "DescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 1
			},
			"bindTo": "Description",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 2
	},
	{
		"operation": "insert",
		"name": "AdditionalDescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 2
			},
			"bindTo": "AdditionalDescription",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 3
	},

Сталкивался ли кто-либо с подобной проблемой? 

Нравится

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

ага. расковыривали методы insertImagesToNotes и NotesImagesCollection и правили их. Ибо по-умолчанию система работает с одним полем Notes, и одной коллекцией под картинки NotesImagesCollection. 

Вам нужно будет под каждый контрол добавлять ещё 1 коллекцию под images

Варфоломеев Данила,

Да, в insertImagesToNotes, а точнее в методе, который он вызывает захардкодили NotesImagesCollection. То, что биндится в контрол конфиге на что-то влияет?

Бершеда Д. Н. пишет:

То, что биндится в контрол конфиге на что-то влияет?

Конечно)

накидаю пример как мы это решили. методы:

insertImagesToNotes: function(files, tag) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToNotes(file, tag);
	}, this);
},
addImageToNotes: function(file, tag) {
	FileAPI.readAsDataURL(file, function(tag, event) {
		if (event.type !== "load") {
			return;
		}
 
		var imagesCollection = this.get(tag);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this, tag));
},
 
init: function() {
	this.callParent(arguments);
	this.initImagesCollections();
},
initImagesCollections: function() {
	this.set("TESTImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST2ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST3ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
}

ну и добавление 1 элемента в дифф:

{
	"operation": "insert",
	"name": "TEST",
	"values": {
		"layout": {
			"colSpan": 24,
			"rowSpan": 2,
			"column": 0,
			"row": 0,
			"layoutName": "ProcessingTabGridLayout588b2b18"
		},
		"labelConfig": {
			"visible": false
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToNotes"
			},
			"images": {
				"bindTo": "TESTImagesCollection"
			}
		},
		"enabled": true,
		"tag": "TESTImagesCollection",
		"contentType": 4
	},
	"parentName": "ProcessingTabGridLayout588b2b18",
	"propertyName": "items",
	"index": 0
}

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

Попробовал добавить свою ImagesCollection и обработчик. Но что-то не получается. После добавления картинки теперь ничего не происходит. Что я мог упустить? Пример кода ниже:

//в diff
{
	"operation": "insert",
	"name": "DescriptionHtmlEdit",
	"values": {
		"contentType": Terrasoft.ContentType.RICH_TEXT,
		"layout": {
			"colSpan": 24,
			"rowSpan": 1,
			"column": 0,
			"row": 1
		},
		"bindTo": "Description",
		"labelConfig": {
			"visible": true
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToDescription"
			},
			"images": {
				"bindTo": "DescriptionImagesCollection"
			}
		}
	},
	"parentName": "ProductInfoBlock",
	"propertyName": "items",
	"index": 2
},
 
//в атрибутах
"DescriptionImagesCollection": {
	type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},
 
//в методах
 
insertImagesToDescription: function(files) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToHtmlField(file, "DescriptionImagesCollection");
	}, this);
},
 
addImageToHtmlField: function(file, collectionName) {
	FileAPI.readAsDataURL(file, function(event) {
		if (event.type !== "load") {
			return;
		}
		var imagesCollection = this.get(collectionName);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this));
},

 

Бершеда Д. Н. пишет:

Что я мог упустить?

инициализацию коллекции в initImagesCollections

 

Варфоломеев Данила,

Я её добавлял, только в onEntityInitialized. Попробовал Ваш вариант - всё получилось. Спасибо!

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

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

Пытаюсь заблокировать все поля на странице редактирования.

Действую по этим инструкциям раз и два, поля не блокируются.

Версия 7.11.3

Нравится

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

Здравствуйте, Борис!



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

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

Разобрался сам.

Проблема возникала в разделе, добавленном на Портал. На Портале отключена фича (Feature) CompleteCardLockout. Описание механизма отключения функциональности Feature Toggle тут

Включается так:

DECLARE @SupervisorId UNIQUEIDENTIFIER = (SELECT ContactId FROM dbo.SysAdminUnit WHERE Name = N'Supervisor')
DECLARE @AllSSPUsersId UNIQUEIDENTIFIER = (SELECT Id FROM dbo.SysAdminUnit WHERE Name = N'Все пользователи портала')
DECLARE @FeatureCode NVARCHAR(50) = 'CompleteCardLockout'
DECLARE @FeatureId UNIQUEIDENTIFIER = (SELECT Id FROM dbo.Feature WHERE Code = @FeatureCode)
 
IF NOT EXISTs (SELECT * FROM dbo.AdminUnitFeatureState WHERE FeatureId = @FeatureId AND FeatureState = 1 AND SysAdminUnitId = @AllSSPUsersId)
BEGIN
    INSERT INTO dbo.AdminUnitFeatureState (
        CreatedById,
        SysAdminUnitId,
        FeatureState,
        FeatureId)
        VALUES (
            @SupervisorId,
            @AllSSPUsersId,
            1,
            @FeatureId
        )
END

 

Анна Журавель,

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

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

Почему в документации по ссылкам из первого поста нет ни слова, что этот механизм зависит от фичи CompleteCardLockout?

Борис Леонов,

Здравствуйте, Борис!



Мы передали данную информацию ответственным за наполнение Академии и в ближайшее время документация будет обновлена.

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

Вот как в функции вернуть не 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,

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

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

Добрый день!

Хотим установить облачное решение. Вопросы по ограничениям.

1) как инициируется перезапуск iis и redis в этом случае? для on-site версии приходилось это делать часто

2) можем ли мы из консольного приложения/сервиса обращаться к облаку и запускать процессы/выполнять crud операции без ограничений?

3) заказчик хочет хранить файлы у себя на shared папке/ftp. можно будет это организовать с облачным решением? например, там где эта папка развернуть веб сервис, вызывать из bpmonline в облаке сервис, который вернет нам stream документа и вложить, например, в письмо. или при добавлении нового документа в систему опять вызывать сервис, складывать документ в shared папку и записать ссылку на документ.

 

Нравится

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

Добрый день!

 

1) Вы можете связатся с технической поддержкой Terrasoft для разовой очистки iis и redis или попросить установить задачу и они будут перезапускаться автоматически с указанным вами интервалом. 

2) Да, запуск процессов возможен, вы можете создать свой сервис и запускать процессы через process engine service. Выполнять  crud операции вы можете через настройки интеграции с API.

3) Рекомендую вам направить это вопрос на support@terrasoft.ru для предоставления более детальной информации.

С уважением, Ангелина

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

Коллеги, здравствуйте.

Появился вопрос по поводу настройки падежей в печатных формах. 

Кто нибудь сталкивался с такой задачей? Как это возможно реализовать?

Заранее спасибо!

Нравится

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

Роман, здравствуйте!

В базовой версии такой возможности нет.

Вы можете реализовать свой собственный макрос - https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-sozdat-makr…

Либо попробовать использовать стороннее решение - https://marketplace.terrasoft.ru/app/declension-names-printable-forms-b…

И подключить к этому Machine Learning

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

Добавили в деталь файлы и ссылки ссылку на shared folder



https://community.terrasoft.ua/questions/ssylka-na-lokalnyi-fail

ссылку записываем в виде

file://192.168.127.41/Upload/Dng/40624003.txt

при нажатии на ссылку - ничего.

если скопировать ссылку и вставить в браузер - скачивается.

с ftp ссылками проблем нет

Нравится

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

Здравствуйте, Любовь

Данное поведение в большей части связано с работой самого браузера. Использование ссылок на локальные файлы будет проходить корректно только в случае использования браузера IE 11 или Chrome с отключенным плагином WebSecurity.

Показать все комментарии
Доброго времени суток.
Добавил следующий фильтр на атрибуте
attributes: {
      "OwnerGroup": {
        lookupListConfig: {
          filter: function() {
            return this.filterByUserGroup();
          }
        }
      }
    }
    
methods: {
      filterByUserGroup: function() {
        var filterGroup = this.Terrasoft.createFilterGroup();
        filterGroup.addItem(Terrasoft.createIsNotNullFilter(
          Ext.create("Terrasoft.ColumnExpression", {
            columnPath: "ParentRole"
          })
        ));
        return filterGroup;
      }
    }

OwnerGroup смотрит на объект администрирования.
Фильтр работает, все хорошо.
Но хотелось бы сделать тоже самое с помощью бизнес-правила.
Делаю следующее:

rules: {
"OwnerGroup": {
     "FiltrationByGroup": {
      "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
      //"autocomplete": true,
      //"autoClean": false,
      "baseAttributePatch": "ParentRole",
      "comparisonType": Terrasoft.ComparisonType.IS_NOT_NULL      
     }
}

Не работает и ошибок нет.
Пробовал другой вариант:

"OwnerGroup": {
     "FiltrationByGroup": {
      "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
      //"autocomplete": true,
      //"autoClean": false,
      "baseAttributePatch": "ParentRole",
      "comparisonType": Terrasoft.ComparisonType.NOT_EQUAL,
      "type": BusinessRuleModule.enums.ValueType.CONSTANT,      
      //"value": "ea43b2a0-96b6-485b-b0a9-847d7c921bb2"
      "value": null
     }
}
Тоже не работает. Если указать конкретное значение GUID для 
value, то работает. 
    

Нравится

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

Добрый день

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

"Account": {
    "AccountFilter": {
        "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
        "baseAttributePatch": "[Contact:Account:Id].[Account:Id:Account].Id",
        "comparisonType": Terrasoft.ComparisonType.IS_NULL,
        "type": BusinessRuleModule.enums.ValueType.CONSTANT,
        "value": "00000000-0000-0000-0000-000000000000"
    }
}

В итоге, вам нужно просто исправить значение для value на "00000000-0000-0000-0000-000000000000"

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

Приветы,

Учусь, читал всякое, например, https://academy.terrasoft.ru/documents/technic-sdk/7-8/rabota-s-filtram… не разобрался, подскажите плиз???

 

По смыслу нужно проверять есть ли звонки и считать сколько их

т. е. нужен Exists, Insert, Update

Как сделать запрос:

select CallCount from 

AACandCall a,

SxCandidate c

where

a.IdCand = c.Id

Нравится

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

Добрый день

Ну во-первых следует избегать декартовых произведений (* from a, b)

Во-вторых можно посмотреть как это сделано в системе, к примеру методом поиска  нужно текста среди загруженных на клиент js файлов

Далее, на community есть много статей, к примеру https://community.terrasoft.ru/articles/opisanie-osnovnyh-metodov-entityschemaquery-cast-1

Поищите на community по тексту EntitySchemaQuery

 

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