Вопрос

В разделе Активности видны только те записи, на которые у пользователя есть права и где он является ответственным. Как отключить фильтрацию по ответственному ? И где она “живёт”?

Записи другого ответственного можно было посмотреть, нажав кнопку. Заметили, что она активна только при Online режиме работы приложения. Как сделать так, что бы она стала активной и в Offline?

Ответ

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

Важно: Мы не рекомендуем отключать фильтрацию по ответственному для offline-режима. 

 

Для настройки/удаления фильтров используется схема манифеста. Статья о настройке фильтров в манифесте https://academy.terrasoft.ru/documents/technic-sdkmob/7-12/manifest-svoystva-sinhronizacii-prilozheniy

 

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

 "Remove": {
        "SyncOptions": {
            "ModelDataImportConfig": [
                {
                    "Name": "Activity",
                    "QueryFilter": null
                },
                {
                    "Name": "ActivityParticipant",
                    "QueryFilter": null
                }
            ]
        }
    }

 

Для того, что бы кнопка выбора ответственного стала активной, необходимо расширить класс Terrasoft.configuration.controller.ActivityGridPage, а именно метод initializeOwnerButton. Пример:

initializeOwnerButton: function() {
   this.callParent(arguments);
   if (!Terrasoft.ApplicationUtils.isOnlineMode()) {
      var view = this.getView();
      var ownerButton = view.getOwnerButton();
      ownerButton.on("tap", this.onOwnerButtonTap, this);
   }
}

 

Нравится

Поделиться

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

Вопрос

При синхронизации из-за присутсвия спец.символов, либо из-за длинного названия файла не проходит синхронизация

Необходимо сменить название (имя) файла чтобы он отображался

Ответ

Для настройки отображения имени файла необходимо внести следующие изменения в манифесте(пример в разделе Активности на детали ActivityFile): установить флаг UseRecordIdAsFileName в true для  бинарной колонки Data. Таким образом, имена файлов будут формироваться на основании ID записи.

"SyncOptions": {
    "ModelDataImportConfig": [
        {
            "Name": "ActivityFile",
            "SyncColumns": [
                "Id",
                "Name",
                {
                    "Name": "Data",
                    "UseRecordIdAsFileName": true
                },
                "Activity",
                "Type"
            ]
        }
    ]
},

 

Нравится

Поделиться

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

Вопрос

Обязательность поля "Организация" проставлена на объекте контакта "На уровне приложения".

В мобильном приложении:

- Создаем новый контакт

- Заполняем поле "Организация" (Созданную раннее в веб-версии)

- Сохраняем

- Выполняем синхронизацию

- Выпадает ошибка 



Call Stack:

Contact(9d6652ba-5062-45d2-a7f2-1fb6c3ba1978) at Wed May 16 2018 11:13:07 GMT+0300 (MSK). Error text: Type: Terrasoft.ODataRequiredColumnsEmptyValuesException

Message: Поле Организация является обязательным для заполнения

AdditionalInfo: {"position":0,"error":{"code":"3","message":{"value":"Поле Организация является обязательным для заполнения"},"innererror":{"message":"Поле Организация является обязательным для заполнения","type":"Terrasoft.Core.Entities.RequiredColumnsEmptyValuesException","stacktrace":"  в Terrasoft.Core.Entities.Entity.ValidateRequiredColumns()\r\n  в Terrasoft.Core.Entities.Entity.InternalSave(Boolean validateRequired, Boolean setColumnDefValue)\r\n  в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue)\r\n  в Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n  в Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()","internalexception":null}}}



Если убрать обязательность  - все работает корректно.

Ответ

Обяснение на примере.

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

Как обходное решение можем предложить сделать обязательно на уровне карточки с помощью бизнес-правила.

Пример. Создаете:

Terrasoft.sdk.Model.addBusinessRule('Contact', {
    ruleType: Terrasoft.RuleTypes.Requirement,
    triggeredByColumns: ['Name']
});

Затем добавить в манифест необходимого модуля в секцию ModelExtensions.

Пример реализации можете посмотреть в схеме "MobileActivityModelConfig".

Нравится

Поделиться

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

Симптомы

Во время синхронизации происходит ошибка:

Элемент с идентификатором "90a3e9f6-........................-7c4aadb41f28" не найден

Причина

Таблица SysLookup не используется в десктопных версиях 7.5 и 7.6, но используется в мобильном приложении ниже версии 7.7.1

В таблице SysLookup есть записи которые ссылаются на несуществующие схемы, например такие UID'ы:

90A3E9F6-12D4-45B5-9122-7C4AADB41F28

A85932A3-30A5-49D7-9627-7F749A055AB7

CCF7D813-FC83-47AD-BE61-8F3B3B98A54F

E0AA5FA2-0910-478D-943B-E9C2579AD7B4

Решение

Выполнить скрипт

UPDATE [SysLookup]
SET IsSimple = 0
WHERE IsSimple = 1
AND NOT EXISTS (select 1 from SysSchema ss WHERE ss.[UId] = SysEntitySchemaUId)

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

Некоторые версия BPMonline 7.6

Версия мобильного приложения ниже 7.7.0

Нравится

Поделиться

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

Симптомы

В мобильном приложении при переходе в один из разделов происходит ошибка:

Тип: Terrasoft.SourceCodeException

Сообщение: TypeError: undefined is not an object (evaluating 'Terrasoft.sdk.RecordPage.getColumns(model, columnSetName).

get(columnName).columnOriginalConfig')

Дополнительная информация:

Script: file:///private/var/mobile/Containers/Bundle/Application/4C00C070-499C-4318-9653-8938B2A3B608/bpm'online.app/www/Common/Terrasoft.Mobile.Combined.js%0D%0A%09Line: 7698"

Причина

Пользователь удалил базовую колонку через дизайнер

Решение

1) В конфигурации создаем новый "модуль" с именем UsrMobileOverrideUtilities

добавляем в него такой текст: 

Ext.define("Terrasoft.sdk.RecordPage.Override", {
    override: "Terrasoft.sdk.RecordPage",
    configureColumn: function(model, columnSetName, columnName, columnConfig) {
        if (!Terrasoft.sdk.RecordPage.getColumns(model, columnSetName).get(columnName)) {
            return;
        }
        this.callParent(arguments);
    }
});

2) Меняем пользовательский манифест обычно он называется UsrMobileApplicationManifestCustom

добавляем в него такой блок:

"CustomSchemas": [
    "UsrMobileOverrideUtilities"
],

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

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

Нравится

Поделиться

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

Вопрос

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

1. Можно ли использовать для детали filterMethod, как в основной версии, или каким-либо образом использовать произвольный фильтр, а не только по колонке родительской страницы?

2. Как отключить возможность добавлять, удалять и редактировать записи детали, в зависимости от значений на родительской странице?

Ответ

1. Для деталей можно указывать фильтры, используя метод configure() соотв. sdk-класса:

Terrasoft.sdk.Details.configure("Contact", "ActivityDetailV2StandartDetail", {
   filters: Ext.create("Terrasoft.Filter", {
      type: Terrasoft.FilterTypes.Group,
      subfilters: [
         Ext.create("Terrasoft.Filter", {
            compareType: Terrasoft.ComparisonTypes.NotEqual,
            property: "Type",
            value: Terrasoft.GUID.ActivityTypeEmail
         })
      ]
   })
});

2. В целом, изменение режима работы детали делается так:

Terrasoft.sdk.Details.setChangeModes("Contact", "ActivityDetailV2StandartDetail", [Terrasoft.ChangeModes.Read]);

Но если нужно менять режим работы от условия, то для этого в контроллерах страниц есть метод getChangeModes(). Т.е. в контроллерах соотв. страниц (грида, просмотра, редактирования) нужно расширить этот метод:

getChangeModeOperations: function() {
   var detailConfig = this.getDetailConfig();
   if (detailConfig) {
      var parentRecord = detailConfig.parentRecord;
      if (parentRecord.get("IsNonActualEmail") === false) {
         return {
            canCreate: false,
            canUpdate: false,
            canDelete: false
         };
      }
   }
   return this.callParent(arguments);
}

 

Нравится

Поделиться

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

Симптомы

1) Проэкспортированные файлы в десктопе имеют 0 размер

2) В логе ошибок синхронизации есть такой текст:

Ошибка HTTP 405.0 - Method Not Allowed

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

Причина

Неправильные настройки IIS

Решение

В web.config вносим изменения:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

Нравится

Поделиться

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

Добрый день!

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

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

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

Нравится

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

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

 

Ниже приблизительный алгоритм реализации (возможно необходимо будет его доработать): 

Создаем новую схему UsrAccountBillingInfoModuleConfig, подключаем ее в манифесте

там пишем: 

Terrasoft.sdk.Actions.add("AccountBillingInfo", {

    name: "MyActionName",

    title: "MyLocalizibleTitle",

    isVisibleInGrid: true,

    isDisplayTitle: true,

    iconCls: "cf-action-my-icon",

    position: 3,

    actionClassName: "Terrasoft.configuration.MyAction",

});

 

AccountBillingInfo - имя модели, которая используется в детали

isVisibleInGrid - означает, будет ли действие показываться в реестре

Terrasoft.configuration.MyAction - имя класса кастомного действия (нужно создать свой новый класс. Пример можно глянуть тут Terrasoft.configuration.OpenPortalMessagePublisherPageAction)

cf-action-my-icon - название CSS стиля, который добавится к элементу иконки, на вкладке less можно будет иконку для него прописать

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

Симптомы

При синхронизации/входе в раздел мобильного приложения у клиента возникает ошибка вида:

Тип: Terrasoft.SourceCodeException 

Сообщение: Uncaught TypeError: Cannot read property 'ColumnConfigs' of null 

Дополнительная информация: 

        Script: file:///android_asset/www/Common/Terrasoft.Mobile.Combined.js%0D%0A%09Line: 19048 

Calls sequence: 

    at Ext.define.showException (file:///android_asset/www/Common/Terrasoft.Mobile.Combined.js:33105:41

    at Ext.define.showUncaughtException (file:///android_asset/www/Common/Terrasoft.Mobile.Combined.js:1965:25

    at window.onerror (file:///android_asset/www/Common/Terrasoft.Mobile.Combined.js:1666:20)

Причина

Дублирование схем в манифесте

Решение

Вариант 1

Нужно в базовой схеме MobileApplicationManifest пакета Mobile изменить строчку

…
Models: {
    …
    Activity: {
        …
        RequiredModels: [
            'Contact''ActivityType''ActivityStatus',
            'ActivityResult''ActivityCategory''ActivityPriority', 'Contact', 
            'Account''Opportunity''Lead''ActivityParticipantRole',
            'ActivityParticipant''ActivityCategoryResultEntry''ActivityCorrespondence''Activity'

Убрать дублирующееся значение «Contact»

Вариант 2

Обновить мобильное приложение на более свежую версию

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

Версия BPMonline 7.1.0 - 7.5.0

Версия мобильного приложения:

   Android 7.6.2. - 7.6.3.

   iOS 7.6.2

Нравится

Поделиться

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

Симптомы

Тип: Terrasoft.ODataSecurityException%0D%0AСообщение: Недостаточно прав для изменения записи в объекте "Activity"%0D%0AДополнительная информация: %0D%0A%09{"error":{"code":"5","message":{"lang":"","value":"Недостаточно прав для изменения записи в объекте \"Activity\""},"innererror":{"message":"Недостаточно прав для изменения записи в объекте \"Activity\"","type":"System.Security.SecurityException","stacktrace":"   в Terrasoft.Core.Entities.Entity.UpdateInDB(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n   в Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()\r\n   в System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)\r\n   в System.Data.Services.DataService`1.HandleRequest()"}}}%0D%0A%0D%0A

Тип: Terrasoft.ODataSecurityException%0D%0AСообщение: Недостаточно прав для изменения записи в объекте "Activity"%0D%0AДополнительная информация: %0D%0A%09{"error":{"code":"5","message":{"lang":"","value":"Недостаточно прав для изменения записи в объекте \"Activity\""},"innererror":{"message":"Недостаточно прав для изменения записи в объекте \"Activity\"","type":"System.Security.SecurityException","stacktrace":"   в Terrasoft.Core.Entities.Entity.UpdateInDB(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n   в Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()\r\n   в System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)\r\n   в System.Data.Services.DataService`1.HandleRequest()"}}}%0D%0A%0D%0A

Тип: Terrasoft.ODataSecurityException%0D%0AСообщение: Недостаточно прав для изменения записи в объекте "Activity"%0D%0AДополнительная информация: %0D%0A%09{"error":{"code":"5","message":{"lang":"","value":"Недостаточно прав для изменения записи в объекте \"Activity\""},"innererror":{"message":"Недостаточно прав для изменения записи в объекте \"Activity\"","type":"System.Security.SecurityException","stacktrace":"   в Terrasoft.Core.Entities.Entity.UpdateInDB(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)\r\n   в Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n   в Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()\r\n   в System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)\r\n   в System.Data.Services.DataService`1.HandleRequest()"}}}%0D%0A%0D%0A

Причина

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

Решение

Для решения задачи следует:

1. Если пользователь раннее не был добавлен в конфигурацию, то необходимо перейти в меню “Управление конфигурацией”, “Администрирование: Доступ к объектам”, деталь “Доступ к записям по умолчанию: Изменение” и добавить пользователя\роль;

2. Выполнить действие “Актуализировать организационную структуру” (Рис. 1, пункт 1);

3. Раздать права доступа на объекты мобильного приложения ” (Рис. 1, пункт 2);

4. Выполнить повторную синхронизацию с мобильного устройства.   

 Изображение удалено.

Рис. 1

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

Доступ в систему под учетной записью пользователя с правами администратора.

Нравится

Поделиться

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