Android

 

Обязательные требования

Icon

  • Компьютер под управлением Windows;
  • На компьютере должен быть установлен Chrome браузер;
  • Мобильное устройство под управлением Android.

 

 

  1. Скачать Vysor chrome extension для браузера Chrome
  2. Подключить мобильное устройство к ПК или ноутбуку
  3. Запустить Vysor

    Изображение удалено.
  4.  В списке доступных устройств выбрать ваше устройство и нажать кнопку "View"

    Изображение удалено.
  5. Выполнится установка приложения Vysor на Ваше устройство и откроется окно в котором будет демонстрироватся экран устройства

 

iOS

 

Обязательные требования

Icon

  • Компьютер под управлением MacOS;
  • Мобильное устройство под управлением iOS.

 

  1. Подключить мобильное устройство к компьютеру под управлением MacOS
  2. На компьютере запустить приложение QuickTime Player
  3. Выбрать "New Movie Recording" 

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

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

 

Нравится

Поделиться

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

Вопрос:

У меня в работе есть однотипные задачи, при выполнении которых, я задаю вопросы клиенту (скрипт). Я хотел бы, чтобы этот скрипт отображался во всех активностях определенной категории (когда такая активность создается по БП) в примечании к активности (закладка файлы и примечания). А когда активность завершается я хотел бы скопировать этот текст в лид, с которым эта активность связана.

Я не знаю как сделать две вещи:

- как задать исходный текст, который должен помещаться в поле Примечание к активности (это таблица в формате Word)

- как потом скопировать этот текст в тоже поле, но в лиде

Ответ:

Для сохранения таблицы необходимо её корректно указать с помощью HTML форматирования.

Для решения пользовательскими средствами можно сделать следующее:

1. Скопировать всю таблицу из Word файла в примечания одной записи Контакта (скажем, контакт1).

2. Создать процесс из двух элементов:

- Читать данные, Контакт, где id = id записи из первого пункта.

- Автогенерируемая страница, добавить текстовое поле, заполнить его значением Читать данные контакта.Заметки

3. Запустить процесс, в открывшейся странице скопировать текстовое значение (в нем будет HTML форматированое наполнение)

4. Создать системную настройку, условно, "Заметка по умолчанию", тип = Строка неограниченной длины, в поле "Значение по умолчнаию" вставить скопированный со страницы текст, сохранить сис настройку.

5. В рамках процесса заполнять поле Заметки значением из созданной системной настройки "Заметка по умолчанию".

Нравится

Поделиться

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

Симптомы

Тип: Terrasoft.SyncException%0D%0AСообщение: Unable to connect to server

Probable causes:
- Could not connect to internet
- Server unavailable
- Incorrect server address%0D%0A%0D%0AТип: Terrasoft.ServerException%0D%0AСообщение: Запрос на сервер вернул ошибку%0D%0AДополнительная информация: %0D%0A%09{"request":{"id":1,"xhr":{"statusText":"","status":0,"response":"","responseType":"","responseXML":null,"responseText":"","upload":{"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror":null,"onabort":null},"withCredentials":false,"readyState":0,"timeout":0,"onreadystatechange":null,"ontimeout":null,"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror":null,"onabort":null},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie","X-Requested-With":"XMLHttpRequest"},"options":{"url":"https://xxxxxx.xxxxx.xxxxx/0/Services/ProfileService.asmx/Logout","method":"POST","jsonData":{"customData":"","doLogout":"true"},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"disableCaching":false,"scope":{"initialConfig":{"url":"https://xxxxxx.xxxxx.xxxxx/0/Services/ProfileService.asmx/Logout","method":"POST","jsonData":{"customData":"","doLogout":"true"},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"disableCaching":false},"performanceCounter":{"startDate":"2015-05-25T15:54:03.446Z"}}},"async":true,"timedout":true},"requestId":1,"status":0,"statusText":"communication failure","timedout":true}%0D%0A%0D%0A 

Причина

  1. Отсутствие интернета
  2. Неверно прописан адрес сайта
  3. Сайт был недоступен

Решение

Убедиться, что все условия для подключения выполняются и повторно войти в систему.

Нравится

Поделиться

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

Вопрос

Стоит задача вывода пользователю результата выборки. Выборку делаю с помощью esq запросов, помещаю в коллекцию. Далее пытаюсь отрисовать в разделе свой GRID (по аналогии с "datagrid" в basesection) и направить в него коллекцию. Однако созданный грид не появляется. Есть ли примеры/инструкции по работе с данным элементом и вообще с таким кейсом как "вывод данных, полученных в результате esq запросов, на страницу" ?

Ответ

Инструкций по гридам нет, но достаточно много написано в комментариях к атрибутам самого контрола грида, исходный код которого в неcжатом виде лежит тут:

*путь_к_сайту*\Terrasoft.WebApp\Resources\ui\Terrasoft\controls\grid\grid.js

Так же достаточно примеров использования Вы найдете поискав по кодам конфигурации строку «Terrasoft.ViewItemType.GRID».

В качестве примера вот схема, в которой создается небольшой esq запрос, и его результат выводится в гриде:

define("UsrContactType3Page", ["UsrContactType3PageResources", "GeneralDetails"],
    function (resources, GeneralDetails) {
        return {
            entitySchemaName: "Contact",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            attributes: {
                "TestCollection": {
                    dataValueType: this.Terrasoft.DataValueType.COLLECTION,
                    value: this.Ext.create("Terrasoft.BaseViewModelCollection")
                },
                IsGridEmpty: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: true
                },
            },
            methods: {
                init: function () {
                    this.callParent(arguments);
                },
                onEntityInitialized: function () {
                    this.callParent(arguments);
 
                    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                        rootSchemaName: "Account"
                    });
                    esq.addColumn("Name");
                    esq.addColumn("Phone");
                    esq.addColumn("City");
 
                    var collection = this.get("TestCollection");
                    esq.getEntityCollection(function (response) {
                        var entities = response.collection;
                        if (entities.getCount() > 0) {
                            this.set("IsGridEmpty", false);
                            collection.loadAll(entities);
                        }
                    }, this);
 
                }
            },
            rules: {},
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "name": "TestContainer",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values": {
                        "itemType": this.Terrasoft.ViewItemType.CONTAINER,
                        "layout": {"column": 0, "row": 0, "colSpan": 34},
                        "items": []
                    }
                },
                {
                    "operation": "insert",
                    "name": "TestDataGrid",
                    "parentName": "TestContainer",
                    "propertyName": "items",
                    "values": {
                        "itemType": this.Terrasoft.ViewItemType.GRID,
                        "type": this.Terrasoft.GridType.LISTED,
                        "collection": {"bindTo": "TestCollection"},
                        "isEmpty": {"bindTo": "IsGridEmpty"},
                        "captionsConfig": [{
                            cols: 10,
                            name: "Имя"
                        },
                            {
                                cols: 10,
                                name: "Телефон"
                            },
                            {
                                cols: 4,
                                name: "Город"
                            }
                        ],
                        "columnsConfig": [
 
                            {
                                "cols": 10,
                                "key": [
                                    {
                                        "name": {"bindTo": "Name"},
                                        "caption": "Name"
                                    }
                                ]
                            },
                            {
                                "cols": 10,
                                "key": [
                                    {
                                        "name": {"bindTo": "Phone"},
                                        "caption": "Phone"
                                    }
                                ]
                            },
                            {
                                "cols": 4,
                                "key": [
                                    {
                                        "name": {"bindTo": "City"},
                                        "caption": "City"
                                    }
                                ]
                            }
                        ]
                    }
                }
            ]/**SCHEMA_DIFF*/,
            userCode: {}
        };
    }
);

Результат:

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

Нравится

Поделиться

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

Вопрос

Здравствуйте, при попытке установить тип карточки для которой должна отображаться печатная форма "Торг -12", установить признак "Отображать на карточке" в false или удалить эту ПФ из карточки пропадает кнопка "Печать". При этом созданная копия этой ПФ работает нормально, но скрыть старую запись не удаётся. Даже при попытке сделать это через базу пропадает кнопка "Печать" с карточки.

Раздел "Склад", ПФ должна отображаться только для записей с типом "Расход", но отображается либо для всех, либо кнопка "Печать" отсутствует вовсе, хотя в ней есть ещё и другие ПФ.

Ответ

Здравствуйте, уточню, что речь идет об отображении кнопки печати в комбинированном режиме (когда слева еще доступен суженный, или свернутый реестр, а справа открыта карточка редактирования).

Проблема в том, что в текущей реализации установка атрибута «IsCardPrintButtonVisible» в «BaseSectionV2» выполняется единожды при инициализации реестра, когда еще не известно на какой строке установлена активность, и в этот момент для определения видимости анализируются только печатные формы с галочкой для отображения в карточке, доступные для всех типов.

А у Вас как можно видеть по скриншоту

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

для отображения во всех типах, доступна только одна печатная форма «Торг-12», от того, когда вы её скрываете, кнопка отображения комбинированного режима скрывалась.

Конечно, данное поведение будет пересмотрено в последующих версиях.

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

define("BtcStoreSection", ["GridUtilitiesV2", "ProductSalesUtils", "MenuUtilities"],
function(GridUtilitiesV2, ProductSalesUtils, MenuUtilities) {
    return {
        entitySchemaName: "BtcStore",
        contextHelpId: "1001",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        attributes: {
            "CombinedModePrintButtonVisible": {dataValueType: Terrasoft.DataValueType.BOOLEAN}
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "name": "CombinedModePrintButton",
                "parentName": "CombinedModeActionButtonsCardRightContainer",
                "propertyName": "items",
                "index": 0,
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.PrintButtonCaption"},
                    "classes": {"wrapperClass": ["actions-button-margin-right"]},
                    "controlConfig": {"menu": {"items": {"bindTo": "CardPrintMenuItems"}}},
                    "visible": {"bindTo": "CombinedModePrintButtonVisible"}
                }
            },
            {
                "operation": "merge",
                "name": "CombinedModeViewOptionsButton",
                "parentName": "CombinedModeActionButtonsCardRightContainer",
                "propertyName": "items",
                "index": 1,
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.ViewOptionsButtonCaption"},
                    "menu": {"items": {"bindTo": "CombinedModeViewOptionsButtonMenuItems"}},
                    "visible": {"bindTo": "getCombinedModeViewOptionsButtonVisible"}
                }
            }
        ]/**SCHEMA_DIFF*/,
        messages: {
        },
        methods: {
            setCombinedModePrintButtonVisible: function(activeRow, cardPrintMenuItems) {
                this.set("CombinedModePrintButtonVisible", this.getCardPrintButtonVisible());
            },
            onCardRendered: function() {
                this.callParent(arguments);
                this.setCombinedModePrintButtonVisible();
            }
        }
    };
});

 

Нравится

Поделиться

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

Вопрос

Как добавить карточку редактирования в этот справочник? Сейчас справочник редактируется с помощью редактируемого реестра. В карточку редактирования надо добавить деталь как в справочнике «Источник лида»

Ответ

Самый простой способ создания страницы редактирования, это создать на основе обхъекта справочника мастером деталей, деталь, и там, в этом мастере, на закладке "страница", скофигурировать внешний вид для будущей страницы редактирования, сохранить деталь, почистить кеш браузера и перезайти на сайт. После чего данная кнопка у справочника появится, т.к. ей будет куда вести (на страницу редактирования).

Либо создать по аналогии как в справочнике «Источник лида» (см. Схему «LeadSourcePageV2»).

Либо же попробовать вручную (см. приближенный пример, который по необходимо «дебажить»):

  • Создаем схему модели представления карточки, наследуемся от «BaseModulePageV2» вводя ее имя заголовка в поле «родительский объект», в разных конфигурациях может быть переведена по-разному, в нашем примере это «Страница активности V2».
  • Заполняем ее нужными полями, в нашем примере только Name, а объект в нашем примере называется «UsrAccStage»:
define("UsrAccStagePageV2", ["AccountPageV2Resources""GeneralDetails"],
    function(resources, GeneralDetails) {
        return {
            entitySchemaName: "UsrAccStage",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "name": "Name",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values": {
                        "bindTo": "Name",
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12
                        }
                    }
                }
            ]/**SCHEMA_DIFF*/,
            attributes: {},
            methods: {},
            rules: {},
            userCode: {}
        };
    });

Далее нашей целью является зарегистрировать связь страницы редактирования в базе данных в таблице «SysModuleEdit» через развязочную таблицу «SysModuleEntity» с сущностью объекта, в котором хранится информация. В нашем случае «UsrAccStage». Листинг SQL приводим ниже:

SELECT * FROM SysSchema Where Name = 'UsrAccStagePageV2'
-- UId карточки редактирования = 064A98B5-E6FE-47E7-B9A6-499561BD1347
SELECT * FROM SysSchema Where Name = 'UsrAccStage'
-- колонка UId объекта = E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329
-- проверяем развязочную таблицу
SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'
-- если нет там записи, добавляем:
INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES ('E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329')
-- проверяем развязочную таблицу
SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'
-- берем от туда Id = 671F61D8-2E72-47A4-95C7-D67E2C8B723F
INSERT INTO SysModuleEdit (SysModuleEntityId, CardSchemaUId, ActionKindCaption,
ActionKindName, PageCaption) VALUES ('671F61D8-2E72-47A4-95C7-D67E2C8B723F''064A98B5-E6FE-47E7-B9A6-499561BD1347''Добавить нашу сущность','UsrAccStage','Стадия контрагента')
SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = '671F61D8-2E72-47A4-95C7-D67E2C8B723F'

В итоге, наш справочник можно открывать страницей редактирования:

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

 

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

 

Нравится

Поделиться

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

Вопрос

Существует ли в 7.9 способ "подкрасить" строку в мобильном реестре

Ответ

Стили (css) можно менять в конфигурации. Для этого нужно использовать метод Terrasoft.writeStyles. Предположительно, пример можно подсмотреть в MobileActivityGridPageV2.

Нравится

Поделиться

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

Вопрос

Как подписаться на событие нажатия какой-то клавиши, чтобы при нажатии выполнить определенное действие?

Ответ

Подписку можно выполнить на любой Ext компонент, с помощью Ext.util.KeyMap 

Например так:

onEntityInitialized: function() {
   this.callParent(arguments);
 
   var map = new Ext.util.KeyMap({
      target: "AccountPageV2CodeTextEdit-el",
      key: Ext.EventObject.ENTER,
      fn: this.myHandler,
      scope: this
   });
},
myHandler: function() {
   alert("ENTER");
},

 

Нравится

Поделиться

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

Вопрос

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

Подскажите, пожалуйста, как это сделать на текущей версии.

Ответ

Вам необходимо в секции SyncOptions изменить два параметра (во втором указывается количество "пачки"):

 

"SyncOptions": {
    "UseSkipToken": true,
    "ImportPageSize": 1000,
},

 

Нравится

Поделиться

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

Кейс

I added a contact and an event in the iPad version und synchronized. Then I opened the iPhone version and synchronized.

But the new data is not shown in the iPhone version.

Я добавил контакт и событие в версии на iPad и выполнил синхронизацию. Затем я открыл версию на iPhone и синхронизировал ее.

Но новые данные не отображаются на iPhone.

Цель

Данные между несколькими мобильными приложениями синхронизируются должным образом.

Необходимые условия

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

Выполнение

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

 

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

Такой эффект может быть вызван различными настройками времени на мобильных устройствах.

Нравится

Поделиться

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