Вопрос

Пользователь создает визит в мобильном приложении, синхронизируется. Удаляет визит в веб версии.

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

Возможно ли выполнять синхронизацию (чтобы удалялясь записи, уже удаленные в веб-версии) без сброса кэша?

Ответ

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



Если вы хотите, чтобы удаление происходило, то для нужных вам моделей, например, модели Активности, нужно включить дополнительную опцию в манифесте "IsAdministratedByRights": true. 



Например: 

{
   "SyncOptions": {
      "ModelDataImportConfig": [
         {
            "Name": "Activity",
            "IsAdministratedByRights": true
         }
      ]
   }
}

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

Нравится

Поделиться

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

Вопрос

При вставке элемента RICH_TEXT, его панель выглядит следующим образом:

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

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

Ответ

Возможно, в Вашей конфигурации переопределены некоторые базовые стили, в частности, стили класса .t-btn-image.

Нравится

Поделиться

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

Вопрос

Не работает поиск по контактам если вводить фамилия и имя в порядке, отличном от сохраненного в базу.

Ответ

Поиск по полю «ФИО» контакта происходит по правилам сравнения строк. Если Вы поменяете местами фамилию и имя, в итоге получится совсем другая строка, которую система просто не сможет идентифицировать как изначальный контакт. Кроме того, в зависимости от порядка указания фамилии, имени и отчества контакта в поле «ФИО» и определённых системных настроек происходит автоматическое заполнение полей контакта, соответствующих отдельно фамилии, имени и отчеству.

Если Вы не уверены, в каком именно порядке указаны фамилия и имя контакта, Вы можете в поле поиска оставить только фамилию или только имя, добавив перед ним знак «%». В этом случае система будет искать все строки, которые не только начинаются, но и содержат указанное значение. Например, если указать в поле поиска значение «%Евгений», система отобразит и контакт «Мирный Евгений», и контакт «Евгений Мирный» (в том случае, если такие контакты есть в базе данных).

Можно выбрать в качестве параметра поиска поле «Фамилия» или «Имя».

Нравится

Поделиться

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

Вопрос

При коммите одного из пакетов решения BPMonline выводится на экран ошибка «The server is busy. Please try again later».

При коммите других пакетов ошибка не воспроизводится.

Ответ

Для пакета, на котором воспроизводится ошибка необходимо зайти на сервер SVN, например через TortoisSVN или Repo-Browser. Снять блокировку с файла CommitLocker. Независимо от того, под кем он заблокирован. Причина такого состояния блокировки связанна с ошибкой, произошедшей в одном из предыдущих сеансов фиксации пакета в SVN.

 

Нравится

Поделиться

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

Вопрос

Как добавить маску загрузки на деталь "Взаимосвязи" раздела "Контрагенты" (версия 7.7.0) в режиме отображения диаграммы?

Ответ

Для добавления маски загрузки на деталь "Взаимосвязи" раздела "Контрагенты" при отображении диаграммы взаимосвязей необходимо создать замещающий клиентский модуль для схемы AccountRelationshipDetailV2, в который вставить такой код:

define("AccountRelationshipDetailV2", [], function() {
    return {
        methods: {
            loadRelationship: function() {
                this.set("MaskId", Terrasoft.Mask.show({
                    selector: "#RelationshipTabContainer"
                }));
                this.callParent(arguments);
            },
 
            relationshipDiagramServiceCallback: function(response) {
                this.callParent(arguments);
                Terrasoft.Mask.hide(this.get("MaskId"));
            }
        },
 
        diff: /**SCHEMA_DIFF*/ []/**SCHEMA_DIFF*/
    };
});

После этого сохранить схему и перезагрузить страницу приложения с очисткой кеша.

Нравится

Поделиться

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

Вопрос

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

Ответ

Создать кастомную схему (Исходный код) (например, "MobileUtilitiesCustom")

/* Скрытие раздела "Итоги" */
 
Terrasoft.ApplicationUtils.initializeSystemData({
    success: function() {
        Terrasoft.ApplicationConfig.moduleGroups.get("sales").modules.splice(0, 1);
    }
});

В манифесте мобильного приложения (например, "UsrMobileApplicationManifestCustomMobile") указать кастомную схему

{
    "CustomSchemas": [
        "MobileUtilitiesCustom"
    ]
}

 

Нравится

Поделиться

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

Вопрос

Мобильное приложение. Как добавить кнопку "Добавить" в справочное поле у которого нет своего раздела

Ответ

Согласно базовой логике мобильного приложения добавлять новые значения в справочных полях можно только в том случае если для этого поля есть раздел со страницей редактирования (например, поле «Ответственный» и раздел «Контакты»). Для реализации необходимо добавлять отдельную страницу редактирования и необходимые для работы колонки. 

Для реализации необходимо следующее:

Terrasoft.LastLoadedPageData = {
    controllerName: "Terrasoft.configuration.UsrnomberoflidEditPageController",
    viewXClass: "Terrasoft.configuration.UsrnomberoflidEditPageView"
};
 
Ext.define("Terrasoft.configuration.view.UsrnomberoflidEditPage", {
    extend: "Terrasoft.view.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.UsrnomberoflidEditPageView",
    config: {
        id: "UsrnomberoflidEditPage"
    }
});
 
Ext.define("Terrasoft.configuration.controller.UsrnomberoflidEditPage", {
    extend: "Terrasoft.controller.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.UsrnomberoflidEditPageController",
    statics: {
        Model: Usrnomberoflid
    },
    config: {
        refs: {
            view: "#UsrnomberoflidEditPage"
        }
    }
});
  • создать схему, где прописать колонки, которые мы хотим отображать на странице (например, название схемы UsrMobileUsrnomberoflidModuleConfig (настройка колонок в новой странице)):
Terrasoft.sdk.GridPage.setPrimaryColumn("Usrnomberoflid", "Name");
Terrasoft.sdk.RecordPage.addColumnSet("Usrnomberoflid", 
    {
        name: "primaryColumnSet",
        isPrimary: true
    }, 
    [
        {
            name: "Name"
        }
    ]);
Terrasoft.sdk.RecordPage.addColumn("Usrnomberoflid", {
    name: "CreatedOn"
}, "primaryColumnSet");
  • и подключить эти схемы в манифест. например, «UsrMobileApplicationManifestOpportunities»:
"Usrnomberoflid": {
    "Edit": "UsrnomberoflidEditPage",
    "RequiredModels": [
        "Usrnomberoflid"
    ],
    "PagesExtensions": [
        "UsrMobileUsrnomberoflidModuleConfig"
    ]
},

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

Наглядные скриншоты:

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

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

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

 

Нравится

Поделиться

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

Вопрос

Не работает поле с изображением для детали, по инструкции http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/AddPictureField.html

Ответ

Данная инструкция релевантна для схемы страницы, для детали необходимо добавить метод:

getSchemaImageUrl: function(primaryImageColumnValue) {
        if (!primaryImageColumnValue) {
            return null;
        }
        var imageConfig = {
            source: Terrasoft.ImageSources.SYS_IMAGE,
            params: {
                primaryColumnValue: primaryImageColumnValue.value
            }
        };
        return Terrasoft.ImageUrlBuilder.getUrl(imageConfig);
},

 

Нравится

Поделиться

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

Вопрос

Требуется добавить на деталь "Средства связи" тип средства связи "LinkedIn". То есть добавлять не средство связи "Web" и вставлять ссылку на профиль контакта в LinkedIn, а добавлять также ссылку, но имеющую название "LInkedIn".

Ответ

1. В справочнике [Типы средств связи], добавляем новое средство, называем к примеру «LinkedIn», тип коммуникаций добавляем «Web».

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

2. На записи LinkedIn нажимаем «Изменить» и в адресе открывшегося окна ищем recordId, записываем его, он пригодится дальше.

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

3. В конфигурации заместить схему CommunicationUtils, скопировав из оригинала весь код. В зависимости так же, как и в оригинале добавить ConfigurationConstants.

4. В замещенной схеме, дорабатываем метод isWebType() блоком проверки на recordId записанный выше, и при истинности проверки, возвращаем true.

function isWebType(communicationType) {
    if (!communicationType) {
        return false;
    }
 
    if (communicationType === "5e4025d7-84cf-43ce-9a90-64a966c34853") {
        return true; /*LinkedIn*/
    }
 
    communicationType = communicationType.value || communicationType;
    return ConfigurationConstants.CommunicationTypes.Web.indexOf(communicationType) !== -1;
}

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

Нравится

Поделиться

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

Вопрос

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

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

Ответ

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

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

 

Нравится

Поделиться

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