Вопрос

Необходимо вывести дашборды на плазму, но все они не помещаются. Как добавить автоматическую прокрутку страницы?

Ответ

Можно создать свой «виджет» в котором описать всю необходимую логику на языке javascript. Инициировать ее в методе init() виджета. Потом добавить его на страницу виджетов.

Для этого необходимо:

1) В конфигурации  создать модуль (не указывать родительский) - например UsrDashboardHelper.

2) Сохранить модуль и перезагрузить приложение.

3) Выбрать виджет в режиме редактирования отчетности.

Пример простого виджета, который каждые 5 секунд автоматически прокручивает страницу отчетов вверх и вниз:

define("UsrDashboardHelper", ["ext-base", "terrasoft", "sandbox"], function(Ext, Terrasoft, sandbox) {
  var getView = function() {
    var config = {
      id: "UsrDashboardHelper",
      selectors: {
        wrapEl: "#UsrDashboardHelper"
      },
      items: []
    };
    return Ext.create("Terrasoft.Container", config);
  };
  return {
    timerId: 0,
    flag: 0,
    myTimer: function() {
      console.log("tik.");
      if (this.flag === 0) {
       window.scrollTo(0,800);
       this.flag = 1;
      } else {
       window.scrollTo(0,0);
       this.flag = 0;
      }
    },
    init: function() {
      console.log("UsrDashboardHelper init in: " + sandbox.id);
      this.timerId = setInterval(this.myTimer, 5000);
    },
    render: function(renderTo) {
      var view = getView();
      view.render(renderTo);
    },
    destroy: function() {
      console.log("UsrDashboardHelper is offline.");
      clearInterval(this.timerId);
    }
  };
});

 

Нравится

Поделиться

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

Вопрос

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

Ответ

Первыми действиями должны быть очистка 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 комментариев
Показать все комментарии

Вопрос

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

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

Ответ

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

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 комментариев
Показать все комментарии