Вопрос

Клиент не может войти в систему(Элемент с идентификатором "" не найден)

Ответ

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

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

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

Нравится

Поделиться

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

Вопрос

Каким образом возможно создавать связанные поля?

Например при изменении состояния документа должны появляться дополнительные поля.

Ответ

В bpm'online нет понятия связанных полей. Описанную Вами задачу возможно решить с использованием свойства visible для полей. Данное свойство может быть привязано как к булевому атрибуту, так и к методу, возвращающему булевый тип. Свойство visible проверяется как при загрузке карточки, так и при любом изменении модели.

Пример скрытия справочного поля по значению текстового поля:

1) Объявление полей в секции diff:

{
    "operation": "insert",
    "name": "myEnum",
    "values": {
        visible : {
                bindTo: "isEnumVisble"
        },
        "caption": "myEnum",
        "dataValueType": 11,
        "bindTo": "myEnum",
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 3
        },
        "controlConfig": {
            "className": "Terrasoft.ComboBoxEdit",
            "list": {
                "bindTo": "myList"
            },
            "change": {
                "bindTo": "onMyValueChange"
            },
            "prepareList": {
                "bindTo": "prepareMyList"
            }
        }
    },
    "parentName": "ContactGeneralInfoBlock",
    "propertyName": "items",
    "index": 5
},
{
    "operation": "insert",
    "name": "UsrSTRING",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactGeneralInfoBlock"
        },
        "labelConfig": {},
        "enabled": true,
        "bindTo": "UsrSTRING"
    },
    "parentName": "ContactGeneralInfoBlock",
    "propertyName": "items",
    "index": 6
},

в данном коде интерес представляет только фрагмент:

visible : {
    bindTo: "isEnumVisble"
},

2) Сам метод:

isEnumVisble: function() {
    return this.get("UsrSTRING") === "Hello";
},

В данном примере поле "myEnum" будет отображено только если в поле "UsrSTRING" добавлен текст Hello c последующей сменой фокуса. Связывание с атрибутом происходит таким же образом, только в bindTo указывается не имя метода, а имя атрибута.

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

Нравится

Поделиться

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

Симптомы

Баг-репорт:

Type: Terrasoft.SourceCodeException

Message: TypeError: null is not an object (evaluating 'lookupModel.PrimaryColumnName')

AdditionalInfo: Script: file:///var/containers/Bundle/Application/xxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxx/BPMonlineMobile.app/www/appV2/Common/Terrasoft.Mobile.Combined.js%0D%0A%09Line: 12183 Stack trace:

Terrasoft.core#showUncaughtException@file:///var/containers/Bundle/Application/xxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxx/BPMonlineMobile.app/www/appV2/Common/Terrasoft.Mobile.Combined.js:2821:38

Terrasoft.core#onWindowError@file:///var/containers/Bundle/Application/xxxxxx-xxxx-xxxxx-xxxxx-xxxxxxxx/BPMonlineMobile.app/www/appV2/Common/Terrasoft.Mobile.Combined.js:2463:39

Причина

1. В мастере мобильного приложения не отображена первичная колонка для отображения.

2. В объекте (например, "Account") нет колонки первичной для отображения. 

Решение

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

Нравится

Поделиться

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

Вопрос

Подскажите, как поставить "Россия" при выборе из справочника (не выпадающий список) страны, первой по списку.

Ответ

Необходимо создать замещающий объект Country (Страна), добавить туда целочисленную колонку UsrSort (Приоритет) со значением по умолчанию «0».

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

Текст скрипта:

UPDATE Country SET UsrSort = 0 WHERE Name = 'Россия'
 
DECLARE @sort INT
DECLARE @id uniqueidentifier
DECLARE @getid CURSOR
 
SET @sort = 1
SET @getid = CURSOR FOR
SELECT Country.Id FROM Country
WHERE Name Not In ('Россия')
ORDER BY Name
 
OPEN @getid
FETCH NEXT
FROM @getid INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE Country SET UsrSort = @sort WHERE Id = @id
    SET @sort = @sort + 1
    FETCH NEXT
    FROM @getid INTO @id
END
 
CLOSE @getid
DEALLOCATE @getid

Далее эту колонку можно вывести в реестр выбора справочника через «Вид», «Настроить колонки» и отсортировать по ней через «Вид», «Сортировка».

Нравится

Поделиться

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

Вопрос

Мы пытаемся оптимизировать время синхронизации мобильного приложения (оффлайн) и как один из шагов - оптимизации изображений.

Подскажите, каким образом можно выставлять целевой размер фотографий (к примеру 1280 х 800). К примеру в Apache Cordova такая возможность есть.

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

Ответ

В приложении мы уже оптимизируем.

Ниже приведен код, который есть в базовой версии:

Terrasoft.Camera.captureFromCamera({
            quality: 70,//в процентах
            size: 1280,//по максимальной стороне
            success: function() {},
            failure: function() {},
            scope: this
        });

Ниже приведен пример как можно изменить качество: 

Terrasoft.sdk.RecordPage.configureColumn("Opportunity", "opportunityFilesDetail", "Data", {
    quality: 50
});

Общая информация по настройке мобильного приложения есть на SDK - https://academy.terrasoft.ru/documents/technic-sdk/7-11/stranica-redaktirovaniya-s-ukazannym-naborom-kolonok

Нравится

Поделиться

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

Вопрос

Делаю ESQ с rootSchemaName: "X". Как мне узнать, какое свойство этого объекта является его текстовым представлением (значение колонки, указанной в скриншоте)?

Изображение удалено.На некоторые запросы, написанные не мной приходит ответ. В ответе объекты и у объектов есть свойство displayValue, вот мне нужно такое же.

Пример кода

var select = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: dimensionItem.get("SysSchemaName")
});
 
select.getEntityCollection(function(response) {
    if (response.success) {
        var collection = response.collection;
        if (collection && collection.getCount() > 0) {
 
        }
    }
})

Ответ

Для получения через esq значений колонки помеченной в объекте как Displayed name, Вам необходимо воспользоваться методом esq esq.addMacrosColumn().

Пример кода:

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: 'UsrTestObj'
});
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "displayValue");
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "value");
esq.getEntityCollection(function(result) {
    if (result.success) {
        debugger;
    }
}, this);

В результате получаем коллекцию из значений колонок Id и колонки помеченной как Displayed value из таблицы UsrTestObj.

Нравится

Поделиться

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

Симптомы

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

Причина

Не заполнена деталь "Карьера". 

Решение

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

Нравится

Поделиться

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

Выполнить sql запрос:

IF OBJECT_ID('tempdb..#TableList') IS NOT NULL
BEGIN
    DROP TABLE [#TableList]
END
CREATE TABLE [#TableList] ([Name] nvarchar(255) NOT NULL);
IF OBJECT_ID('tempdb..#SchemaDataList') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaDataList]
END
CREATE TABLE [#SchemaDataList] ([Id] UNIQUEIDENTIFIER, [UId] UNIQUEIDENTIFIER);
IF OBJECT_ID('tempdb..#SchemaDataListForRecords') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaDataListForRecords]
END
CREATE TABLE [#SchemaDataListForRecords] ([Id] UNIQUEIDENTIFIER, [UId] UNIQUEIDENTIFIER);
IF OBJECT_ID('tempdb..#SchemaUIdForRecordDefRightList') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaUIdForRecordDefRightList]
END
CREATE TABLE [#SchemaUIdForRecordDefRightList] ([UId] UNIQUEIDENTIFIER, [Name] NVARCHAR(500), [ExtendParent] BIT);
INSERT INTO [#TableList] ([Name]) VALUES
('PortalMessage'),
('CaseMessageHistory')/*указать название своих объектов, на которые раздаем права*/
 
INSERT INTO [#SchemaDataList] ([Id], [UId])
SELECT [ss].[Id], [ss].[UId] from [dbo].[SysSchema] [ss]
    left join [dbo].[SysPackage] [sp] on [ss].[SysPackageId] = [sp].[Id]
    left join [dbo].[SysWorkspace] [sw] on [sp].[SysWorkspaceId] = [sw].[Id]
    where [sw].[Id] = (select Id from SysWorkspace where IsDefault = '1')
    and [ss].[Name] in (select [Name] COLLATE Cyrillic_General_CI_AI from [#TableList])
INSERT INTO [#SchemaDataListForRecords] ([Id], [UId])
SELECT [ss].[Id], [ss].[UId] from [dbo].[SysSchema] [ss]
    left join [dbo].[SysPackage] [sp] on [ss].[SysPackageId] = [sp].[Id]
    left join [dbo].[SysWorkspace] [sw] on [sp].[SysWorkspaceId] = [sw].[Id]
    where [sw].[Id] = (select Id from SysWorkspace where IsDefault = '1')
    and [ss].[ExtendParent] = 0
    and [ss].[Name] in (select [Name] COLLATE Cyrillic_General_CI_AI from [#TableList] WHERE [Name] NOT IN ('SocialChannel', 'CaseTag', 'CaseInTag', 'KnowledgeBaseTagV2', 'KnowledgeBaseInTagV2'))
INSERT INTO [#SchemaUIdForRecordDefRightList] ([UId], [Name], [ExtendParent])
SELECT [ss].[UId], [ss].[Name], [ss].[ExtendParent]from [dbo].[SysSchema] [ss]
    left join [dbo].[SysPackage] [sp] on [ss].[SysPackageId] = [sp].[Id]
    left join [dbo].[SysWorkspace] [sw] on [sp].[SysWorkspaceId] = [sw].[Id]
    where [sw].[Id] = (select Id from SysWorkspace where IsDefault = '1')
    and [ss].[Name] in ('KnowledgeBase', 'ServiceItem', 'SocialChannel', 'SysDashboard', 'Case', 'CaseInTag', 'KnowledgeBaseInTagV2')
DECLARE @Supervisor uniqueidentifier = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
DECLARE @AllPortalUsersId uniqueidentifier = '720B771C-E7A7-4F31-9CFB-52CD21C3739F'
DECLARE @AllSystemUsersId uniqueidentifier = 'A29A3BA5-4B0D-DE11-9A51-005056C00008'
--AdministratedByOperations
delete SysSchemaProperty
    where SysSchemaId in (select [Id] from [#SchemaDataList]) and Name = 'AdministratedByOperations'
insert into [dbo].[SysSchemaProperty] ([Id], [CreatedById], [Name], [Value], [SysSchemaId])
    select newid(), @Supervisor, 'AdministratedByOperations', 'True', [Id] from [#SchemaDataList]
--AdministratedByColumns
delete SysSchemaProperty
    where SysSchemaId in (select [Id] from [#SchemaDataList]) and Name = 'AdministratedByColumns'
insert into [dbo].[SysSchemaProperty] ([Id], [CreatedById], [Name], [Value], [SysSchemaId])
    select newid(),@Supervisor, 'AdministratedByColumns', 'False', [Id] from [#SchemaDataList]
--AdministratedByRecords
delete SysSchemaProperty
    where SysSchemaId in (select [Id] from [#SchemaDataListForRecords]) and Name = 'AdministratedByRecords'
insert into [dbo].[SysSchemaProperty] ([Id], [CreatedById], [Name], [Value], [SysSchemaId])
    select newid(), @Supervisor, 'AdministratedByRecords', 'False', [Id] from [#SchemaDataListForRecords]
--SchemaOperationRight
delete SysEntitySchemaOperationRight
    where SubjectSchemaUId in (select [UId] from [#SchemaDataList])
insert into [dbo].[SysEntitySchemaOperationRight] ([Id], [CreatedById], [SysAdminUnitId], [CanRead], [CanAppend], [CanEdit], [Position], [SubjectSchemaUId])
    select newId(), @Supervisor, @AllPortalUsersId, 1, 0, 0, 0, [UId] from [#SchemaDataList]
insert into [dbo].[SysEntitySchemaOperationRight] ([Id], [CreatedById], [SysAdminUnitId], [CanRead], [CanAppend], [CanEdit], [CanDelete], [Position], [SubjectSchemaUId])
    select newId(), @Supervisor, @AllSystemUsersId, 1, 1, 1, 1, 1, [UId] from [#SchemaDataList]
--SysSSPEntitySchemaAccessList
delete SysSSPEntitySchemaAccessList
    where EntitySchemaUId in (select [UId] from [#SchemaDataList])
insert into [dbo].[SysSSPEntitySchemaAccessList] ([Id], [CreatedById], [EntitySchemaUId])
    select newId(), @Supervisor, [UId] from [#SchemaDataList]
--SysEntitySchemaRecordDefRight (Права на существующие записи)
delete SysEntitySchemaRecordDefRight
    where GranteeSysAdminUnitId = @AllPortalUsersId and SubjectSchemaUId in (select [UId] from [#SchemaUIdForRecordDefRightList] where Name <> 'Case' )
insert into SysEntitySchemaRecordDefRight (CreatedById, SubjectSchemaUId, AuthorSysAdminUnitId, GranteeSysAdminUnitId, Position, Operation, RightLevel)
    select @Supervisor, [UId], @AllSystemUsersId, @AllPortalUsersId, '0', '0', '1' from [#SchemaUIdForRecordDefRightList] where Name <> 'Case'
declare @CaseUId uniqueidentifier = (select top 1 [UId] from [#SchemaUIdForRecordDefRightList] where Name = 'Case'
    and [ExtendParent] = 0)
delete SysEntitySchemaRecordDefRight
    where SubjectSchemaUId = @CaseUId
    and AuthorSysAdminUnitId = @AllPortalUsersId
insert into SysEntitySchemaRecordDefRight (CreatedById, SubjectSchemaUId, AuthorSysAdminUnitId, GranteeSysAdminUnitId, Position, Operation, RightLevel)
    values( @Supervisor, @CaseUId , @AllPortalUsersId, @AllSystemUsersId,  '0', '0', '1' )
 
insert into SysEntitySchemaRecordDefRight (CreatedById, SubjectSchemaUId, AuthorSysAdminUnitId, GranteeSysAdminUnitId, Position, Operation, RightLevel)
    values( @Supervisor, @CaseUId , @AllPortalUsersId, @AllSystemUsersId,  '0', '1', '1' )
IF OBJECT_ID('tempdb..#TableList') IS NOT NULL
BEGIN
    DROP TABLE [#TableList]
END
IF OBJECT_ID('tempdb..#SchemaDataList') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaDataList]
END
IF OBJECT_ID('tempdb..#SchemaDataListForRecords') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaDataListForRecords]
END
IF OBJECT_ID('tempdb..#SchemaUIdForRecordDefRightList') IS NOT NULL
BEGIN
    DROP TABLE [#SchemaUIdForRecordDefRightList]
END

 

Нравится

Поделиться

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

Вопрос

В предыдущих версиях у нас автоматически проставлялись напоминания в активностях (для автора и ответственного).

Сейчас такого нет.

Ответ

Данный функционал можно реализовать расширением существующих методов в схеме страницы редактирования активности:

methods: {
   setRemindCustom: function() {
      if (this.get("StartDate")) {
         var remindToOwnerDate = this.get("StartDate");
         remindToOwnerDate = Ext.Date.add(remindToOwnerDate, Ext.Date.MINUTE, -15);
 
         var remindToAuthorDate = this.get("StartDate");
         remindToAuthorDate = Ext.Date.add(remindToAuthorDate, Ext.Date.MINUTE, -15);
 
         this.set("RemindToOwner", true);
         this.set("RemindToAuthor", true);
         this.set("RemindToOwnerDate", remindToOwnerDate);
         this.set("RemindToAuthorDate", remindToAuthorDate);
      }
   },
   onStartDateChanged: function() {
      this.callParent(arguments);
      this.setRemindCustom();
   },
   onEntityInitialized: function() {
      this.callParent(arguments);
      if (this.isAddMode() || this.isCopyMode()) {
         if (this.get("StartDate")) {
            this.setRemindCustom();
         }
      }
   }
},

 

Нравится

Поделиться

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

Симптомы

Медленная работа детали "Взаимосвязи" раздела "Контрагенты" (режим графического отображения)

Причина

Внутренняя реализация компонента diagram.js и механизма отображения элементов детали (RelationshipDiagramViewModel).

Решение

В версии 7.7.0 реализация компонента diagram.js существенно оптимизирована. Для переноса функционала на версию 7.6 можно загрузить в пакет Custom модуль из файла UsrDiagram.md, который полностью переопределяет базовый класс "Terrasoft.Diagram", а также добавить в конфигурацию замещающий клиентский модуль для детали AccountRelationshipDetailV2, в котором добавить связь с модулем UsrDiagram и переопределения некоторых методов из вью-модели диаграммы.

Пример кода:

define("AccountRelationshipDetailV2", ["UsrDiagram"], function() {
		return {
			methods: {
				getMinLevel: function(accounts) {
					return accounts[0].level;
				},
 
				getMaxLevel: function(accounts) {
					return accounts[accounts.length - 1].level;
				},
 
				buildDiagramNodes: function(accounts) {
					this.clearAllDiagramNodes();
					var nodes = this.get("Nodes");
					var accountConfigs = {};
					accounts.forEach(function(account) {
						accountConfigs[account.id] = this.getNodeConfig(account);
					}, this);
					nodes.loadAll(accountConfigs);
					this.createNodeConnections(accounts);
				},
 
				createNodeConnections: function(accounts) {
					var nodes = this.get("Nodes");
					var connectionConfigs = {};
					var maxLevel = this.getMaxLevel(accounts);
					var filteredAccounts = accounts.filter(function(item) {
						return item.level < maxLevel;
					});
					filteredAccounts.forEach(function(account) {
						account.children.forEach(function(child) {
							connectionConfigs[account.id + "/" + child.id] = this.getConnectionConfig(child, account);
						}, this);
					}, this);
					nodes.loadAll(connectionConfigs);
				}
			},
 
			diff: /**SCHEMA_DIFF*/ []/**SCHEMA_DIFF*/
		};
	}
);

Для версий 7.7.0-7.8.0 достаточно переопределить методы вью-модели.

В следующих версиях планируются дополнительные работы по оптимизации данной детали.

Необходимые условия и возможные ограничения

При обновлении с версии 7.6.0 на 7.7.0 и выше, описанную выше схему UsrDiagram и ссылки на неё необходимо удалить.

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

Нравится

Поделиться

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