Вопрос

Есть ли возможность показывать дату комментария в Ленте без обозначений "сегодня, вчера, позавчера"?

Ответ

Для этого необходимо переопределить метод getCreatedOnText() модуля SocialFeedUtilities. Поскольку модули в системе bpm'online расширять нельзя (можно только полностью заместить), необходимо создать замещающий клиентский модуль в пользовательском пакете, указать в качестве родительского модуля SocialFeedUtilities, полностью скопировать текст из аналогичного модуля в пакете ESN (вкладки "Исходный код" и "LESS") и заменить текст метода getCreatedOnText на такой:

getCreatedOnText: function() {
    var cultureSetting = Terrasoft.Resources.CultureSettings;
    var value = this.get("CreatedOn");
    if (value) {
        var datePart = Ext.Date.dateFormat(value, cultureSetting.dateFormat);
        var timePart = Ext.Date.dateFormat(value, cultureSetting.timeFormat);
        return Ext.String.format("{0} {2} {1}", datePart, timePart,
            FormatUtilsResources.localizableStrings.In);
        }
    return "";
}

Также необходимо в самом начале текста исходного кода добавить зависимость модуля от FormatUtilsResources, чтобы иметь доступ к локализированной строке FormatUtilsResources.localizableStrings.In модуля FormatUtils:

define("SocialFeedUtilities", ["FormatUtilsResources", "ESNFeedUtils", "ESNFeedModuleResources", 
    "FormatUtils", "ESNConstants", "NetworkUtilities", "ModalBox", "ServiceHelper", "MaskHelper", 
    "performancecountermanager", "css!SocialFeedUtilities"],
    function(FormatUtilsResources, ESNFeedUtils, resources, FormatUtils, ESNConstants, 
        NetworkUtilities, ModalBox, ServiceHelper, MaskHelper, performanceManager) {...

 

Нравится

Поделиться

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

Вопрос

Как реализовать поиск по нескольким колонкам в разделе в мобильном приложении. Например, в разделе Контакты через поле поиска искать и по фио, и по zip-коду (существующая в объекте Contact колонка) 

Ответ

- Запустить мастер мобильного приложения

- Открыть рабочее место по умолчанию («Основное рабочее место»)

- Перейти к настройкам раздела

- Нажать «Сохранить»

- Создать ClientUnit-схему

- Добавить в нее след. код:

Terrasoft.sdk.GridPage.setSearchColumns("Contact", [“Name”, “Zip”]);

- Открыть MobileApplicationManifestDefaultWorkplace в пакете Custom

- Прописать свою схему для раздела «Контакты»:

{
    “Models”: {
        “Contact”: {
            "PagesExtensions": [
                "Имя_созданной_схемы"
            ]
        }
    }
}

 

Нравится

Поделиться

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

Вопрос

Как добавить в мобильное приложение стандартную деталь и вывести в нее специфичную колонку?

Ответ

1. Переходим в "Мастер мобильного приложения" (/0/Nui/ViewModule.aspx#SectionModuleV2/SysMobileWorkplaceSection)

2. Открываем нужное рабочее местое (по умолчанию DefaultWorkplace) нажимаем кноку ##RU=Настроить разделы;EN=Set up sections##

3. Выбираем нужный раздел, например "Контакты", и нажимаем кнопку "##RU=Настроить детали;EN=Details setup##"

4. Добавляем деталь:

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

5. Переходим в раздел "Конфигурация" (/0/WorkspaceExplorerModule.aspx)

6. Добавляем новую схему типа "Module" с именем UsrContactCareerModuleConfig

7. Пишем в ней примерно такой код:

Terrasoft.sdk.GridPage.setPrimaryColumn("ContactCareer", "JobTitle");
Terrasoft.sdk.RecordPage.addColumn("ContactCareer", {
        name: "JobTitle",
        position: 1
    }, "primaryColumnSet");
Terrasoft.sdk.RecordPage.removeColumn("ContactCareer", "Contact", "primaryColumnSet");

Где ContactCareer - имя таблицы, которая соответствует нашей детали;

      JobTitle - имя колонки, которую нужно тобразить

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

8. Подключаем данную схему в манифесте мобильного приложения MobileApplicationManifestDefaultWorkplace:

Находим блок модели ContactCareer и там в PagesExtensions добавляем наш модуль UsrContactCareerModuleConfig

Примерно так:

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

 

Нравится

Поделиться

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

Вопрос

На странице редактирования активности типа email нужно включить возможность редактирования заголовка, но она в режиме disabled и мы не видим, где это можно включить.

Ответ

Для возможности редактирования заголовка для активностей типа “email”, нужно создать “замещающий клиентский модуль” и указать родительским объектом схему  “EmailPage” из пакета NUI.

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

Скопировать в созданный модуль код из схемы “EmailPage”. И закомментировать бизнес-правило отвечающее за возможность редактирования поля “Заголовок”.

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

Сохранить и опубликовать модуль. В результате поле “Заголовок” стает редактируемым.

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

 

Нравится

Поделиться

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

Вопрос

С помощью мастера разделов был создан раздел в пакете Coustom. Есть ли способ перенести схемы данного раздела в другой пользовательский пакет? (работаем на on-demand).

Ответ

В меню [Конфигурация], вкладка [Действия] Вы можете выбрать “Экспорт в файл”. После чего, на вкладке [Пакеты] выбрать интересующий пакет и выполнить действие “Импорт из файла”.

Нравится

Поделиться

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

Симптомы

Сделал скрипт автонумерации в InvoicePageV2, работает только для контакта Zherlygin, в остальных случаях запрос присылает null. 

Данные с профайлера. 

Object {value: "b7f3b127-51be-494e-b184-58fe18c0e781", displayValue: "Кривошеева Екатерина", primaryImageValue: "00000000-0000-0000-0000-000000000000"}
 
exec sp_executesql N'
SELECT
NULL [Id],
NULL [UsrInvCounter],
NULL [PhotoId],
[Photo].[Name] [Photo.Name]
FROM
[dbo].[SysEmpty] [Contact] WITH(NOLOCK)
LEFT OUTER JOIN [dbo].[SysImage] [Photo] WITH(NOLOCK) ON ([Photo].[Id] = [Contact].[Id])
WHERE
NULL = @P1',N'@P1 uniqueidentifier',@P1='B7F3B127-51BE-494E-B184-58FE18C0E781'
 
 
 
Object {value: "410006e1-ca4e-4502-a9ec-e54d922d2c00", displayValue: "Жерлыгин Дмитрий", primaryImageValue: "00000000-0000-0000-0000-000000000000"}
 
exec sp_executesql N'
SELECT
[Contact].[Id] [Id],
[Contact].[UsrInvCounter] [UsrInvCounter],
[Contact].[PhotoId] [PhotoId],
[Photo].[Name] [Photo.Name]
FROM
[dbo].[Contact] [Contact] WITH(NOLOCK)
LEFT OUTER JOIN [dbo].[SysImage] [Photo] WITH(NOLOCK) ON ([Photo].[Id] = [Contact].[PhotoId])
WHERE
[Contact].[Id] = @P1',N'@P1 uniqueidentifier',@P1='410006E1-CA4E-4502-A9EC-E54D922D2C00'

Причина

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

Решение

Перераздать права.

Нравится

Поделиться

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

Вопрос

Как создать произвольный html виджет (widget) для Итогов.

Ответ

1. Создать модуль с кодом:

define("UsrMySimpleWidget", ["ext-base", "terrasoft", "sandbox", "BaseFiltersGenerateModule",
"UsrMySimpleWidgetResources"], function(Ext, Terrasoft, sandbox, BaseFiltersGenerateModule, resources) {
 
           function getViewModel() {
                return Ext.create("Terrasoft.BaseViewModel", {
                     entitySchema: "Activity",
                     methods: {
                           getChart: function(key) {
                                sandbox.publish("GenerateChart", key);
                           },
                           load: function() {
                           }
                     }
                });
           }
 
           function generateMainView(renderTo) {
 
                var resultConfig = Ext.create("Terrasoft.Container", {
                     id: "tableOtchetMetkiParamContainer",
                     selectors: {
                           wrapEl: "#tableOtchetMetkiParamContainer"
                     },
                     renderTo: renderTo
                });
                return resultConfig;
           }
 
           function fillDom() {
                var htmlAdded = "<div>hello world!</div>";
                Ext.get("tableOtchetMetkiParamContainer").setHTML(htmlAdded);
           }
 
           var render = function(renderTo) {
 
                var viewConfig = generateMainView(renderTo);
                var viewModel = getViewModel();
 
                fillDom();
 
                viewConfig.bind(viewModel);
                viewConfig.render(renderTo);
           };
 
           return {
                schema: "Activity",
                methods: {
 
                },
                userCode: function() {
 
                },
                init: function() {
 
                },
                filterChanged: function(filter, eOpts) {
 
                },
                render: render
           };
     }
);

2. Добавить виджет на панель Итогов и выбрать вышесозданную схему.

Нравится

Поделиться

2 комментария

подскажите пожалуйста - вы ничего не упустили? или это скелет в котором половина пропущена? При попытке сохранить модуль JS выдает кучу ошибок чуть ли не в каждой строке

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

Вопрос

В 7.7 при разработке с "useFileContent = true" изменения js-ника не подхватываются при очистке кеша. Вместо этого необходимо постоянно выполнять операцию "Зафиксировать клиентские модули в БД".

Если это не критично, можна ли настроить поведение как в 7.6?

Ответ

В версии 7.7 появился модуль «SectionBundleModule», в котором лежат коды всех схем разделов и карточек (базовых). А также «ConfigurationBootstrap» в него входят базовые схемы, необходимые для работы системы.

Если Вы введете разработку функционала в базовых и замещенных схем, то необходимо в Web.config (...\Terrasoft.WebApp\Web.config) изменить в ключе «UseIncludeDependenciesSource» изменить признак на «false» (). Это связано с тем, что в версии 7.7 разработаны «SectionBundleModule» (для работы разделов/карточек/деталей) и «ConfigurationBootstrap» (минимальный набор для отображения интерфейса) для кэширования данных и тем самым увеличить быстродействие быстродействия.

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

Нравится

Поделиться

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

Вопрос

Есть ли какой-нибудь способ сделать карточку доступной только для редактирования?

Ответ

В BasePageV2 определен метод updateButtonsVisibility().

1 способ. Переопределить его, таким образом, чтобы ShowSaveButton, было false:

this.set("ShowSaveButton", false);

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

2 способ. Необходимо выполнять проверку при сохранении. В случае соответствия необходимым условиям выполнять родительский метод либо выводить сообщение о том, что редактирование запрещено.

Нравится

Поделиться

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

Вопрос

По какому принципу работают представления в мобильном приложении? При импорте данных в оффлайн-режиме представления сохраняются в базу как обычные таблицы. В рамках задачи необходимо фильтровать поле, у которого справочником является представление. В представлении используются записи из двух разделов (Контрагенты и кастомное Строительные объекты). Выходит, что при добавлении нового контрагента в десктоп-версии он появляется в представлении, и по нему можно фильтровать. При создании нового контрагента в оффлайн-режиме мобильного приложения в представлении он появляется, очевидно, только после синхронизации, что затрудняет работу пользователя. Насколько я понимаю, в SQL-Lite есть возможность работы с представлениями. Есть ли возможность реализовать функционал представлений? Код представления в файле. Версия приложения 7.9.2 2410. Версия мобильного приложения 7.11.7.

Ответ

 

В SQLite есть возможность создавать представление. Для это нужно выполнить скрипт создания представления в конфигурационном модуле.

Для этого нужно создать сам модуль и добавить его в манифест в блок CustomSchemas

 

Пример кода:

 

var sqls = [“CREATE VIEW IF NOT EXISTS AccountView (Id, Name) AS  SELECT Id, Name FROM Account”];
Terrasoft.Sql.DBExecutor.executeSql({
   isCancelable: false,
   sqls: sqls,
   success: function() {},
   failure: function() {}
});



 

Реализовать в карточке фильтрацию по вьюхе будет довольно сложно, придется все равно писать кастомное бизнес-правило, которое будет делать запрос к view.

 

По умолчанию с представлениями на уровне SQLite мы не работаем. В этом нет смысла, т.к. представление в MSSQL или Oracle может вообще не совпадать по реализации с представленим в SQLite. Представление в мобильном приложении – это обычная таблица, следовательно с ним нужно работать соответственно.

 

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

Нравится

Поделиться

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