Вопрос

Как добавить ссылку на свой сайт в панели разделов?

Ответ

1) Cоздать новый раздел.

2) В схеме страницы нового раздела (например, UsrNewSection) добавить метод в секцию методов:

methods: {
init: function() {
      window.location.replace("http://stackoverflow.com");
   }
},

 

Нравится

Поделиться

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

Вообще, публикация таких Q&A - это прям отличная идея! В недрах службы поддержки явно накопилась куча полезной информации по интересным запросам в целом.

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

Отредактировать нужно первые 2 строчки, и блок Methods{}. Необходимо добавить определение ["ProcessModuleUtilities"], function(ProcessModuleUtilities),

Если  в function() уже есть что-то, то в скобки через запятую добавляем ProcessModuleUtilities, получится: function(smth, smth, smth, ProcessModuleUtilities).

Аналогично с параметрами: define("FinApplicationSection", ["smth", "smth", "ProcessModuleUtilities"], function(smth, smth, ProcessModuleUtilities)

define("FinApplicationPage", ["FinApplicationPageResources", "GeneralDetails", "ProcessModuleUtilities"],
function(resources, GeneralDetails, ProcessModuleUtilities) {
    return {
        entitySchemaName: 'FinApplication',
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
        attributes: {},
        methods: {
            getActions: function() {//расширяем метод для коллекции кнопок действий
                var actionMenuItems = this.callParent(arguments);
                actionMenuItems.addItem(this.getActionsMenuItem({ //добавляем разделитель
                    Type: "Terrasoft.MenuSeparator",
                    Caption: ""
                }));
                actionMenuItems.addItem(this.getActionsMenuItem({//добавляем кнопку
                    "Caption": "Назначить экспертизы",//текст кнопки
                    "Tag": "runProcess",//имя метода, который запустит процесс, см. ниже
                    "Enabled": {"bindTo": "canEntityBeOperated"}//делать кнопку неактивной, если запись еще не создана
                }));
                return actionMenuItems;
            },
            runProcess: function() {// метод запуска процесса
                var activeRow = this.get("Id");// получаем id текцщей записи
                var config = {
                        sysProcessName: "UsrMyProcess",//имя процесса (то что латиницей с Usr...)
                        parameters: {
                                RecordId: activeRow//левое выражение = имя параметра процесса (по которому будем работать в процессе), правое = переменная, куда на 4 строчки выше мы зашили Id текущей записи
                        }
                };
                ProcessModuleUtilities.executeProcess(config);
            }
        },
        rules: {},
        userCode: {}
    };
});

 

Нравится

Поделиться

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

Вопрос

Как из детали Адреса получить что-то со страницы контрагента. Например, вызывать какую-то функцию или узнать  что в том или ином поле (например, название) или узнать состояние поля (enabled)?

Ответ

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

Например, Вы можете в реализации метода init() кода детали выполнить подписку на сообщение ReloadDetail примерно так:

this.methods.init = function() {
 ...
 this.sandbox.subscribe("ReloadDetail", function(customArgs) {
 // выполнение действий с аргументами функции
 }, [this.sandbox.id]);
}

Дальше в коде родительской карточки по какому-либо действию можно выполнить публикацию этого сообщения:

this.methods.myAction = function() {
 Terrasoft.each(this.entitySchemaInfo.details, function(detailInfo) {
 if (detailInfo.name === "addresses") {
 sandbox.publish("ReloadDetail", this, [detailInfo.moduleId]);
 }
 }, this);
}

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

Сообщение ReloadDetail создавать не нужно, оно уже есть в базовых модулях карточки и детали.

Очень желательно до этого момента уже получить значения необходимых условий, так как после выполнения getCustomItemView() управление передаётся в модуль базовой детали (DetailModule), в котором уже выполняется привязка модели к представлению и рендеринг детали.

Нравится

Поделиться

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

Вопрос

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

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

Ответ

Вам необходимо заместить метод getCellControlsConfig из схемы ConfigurationGridUtilities. За функционал отображение справочного поля как ссылочного отвечает строка config.showValueAsLink = false; которая в базовой реализации всегда устанавливается в false

Нравится

Поделиться

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

Вопрос

Есть некий объект – положим, контрагент, у которого есть параметр 1, параметр 2, параметр 3. У этого объекта есть деталь, в которой отображаются записи этого же типа объекта, например, контрагенты, у которых выполняется условие «параметр 1 + параметр 2 соответствуют основной записи», «параметр 2 + параметр 3 соответствуют основной записи», «параметр 1 + параметр 3 соответствуют основной записи». В детали можно фильтровать по нескольким колонкам. Но вот как сделать UNION, т.е. «просуммировать» несколько таких независимых наборов фильтров?

Ответ

Для сложной фильтрации используйте класс filterGroup (можно реализовать фильтры любой сложности).

Пример реализации можно увидеть в схеме AccountPageV2 (пакет UIv2) – фильтр  emailDetailFilter .

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

Необходимо реализовать пользовательский метод, который будет содержать «filterGroup» (например, «emailDetailFilter») и затем этот метод добавить необходимой сущности.

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

filterGroup имеет по умолчанию условие «И». Если необходимо использовать условие «ИЛИ», то необходимо добавить свойство

filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR

Пример изображен ниже

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

 

Нравится

Поделиться

0 комментариев
Показать все комментарии
Публикация

Вопрос

Добрый день.

В 7.8 неправильно отрабатывает деталь в детали.

Ответ

[Id] родителя не переходит из детали в деталь если не указан useRelationship.

При объявлении второй детали в детале, укажите "useRelationship": true

"UsrDetail2": {
    "schemaName": "UsrSchema2Detail",
    "entitySchemaName": "UsrDetail2",
    "filter": {
        "detailColumn": "UsrDetail1",
        "masterColumn": "Id"
    },
    "useRelationship": true
}

В колонку связи второй детали, которая указана в detailColumn, установится значение из карточки родителя (первой детали), из колонки, которая указана в masterColumn. При этом типы этих колонок должны совпадать.

Не забудьте во второй детали настроить колонки. По умолчанию в детали в детали, не будет выведена ни одна колонка.

Нравится

Поделиться

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

Симптомы

Type: Terrasoft.SourceCodeException

Message: SyntaxError: Unexpected identifier 'Invoices'. Expected '}' to end a object literal.

Additional information:

Script: file:///var/mobile/Containers/Data/Application/5971FB51-E199-46E3-8004-22E3199C246B/Documents/BPMonline700/AppStructure/rev_1/src/UsrInvoicesType.js?hash=c033cb8c-ace4-4766-b865-88fc6882274f%0D%0A%09Line: 8 

Причина

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

Решение

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

На данный момент обходным решением является следующее:

  1. зайти в конфигурацию;
  2.  открыть схему UsrInvoicesType;
  3. Поменять ей кепшн так, чтоб в нем не было двойных кавычек

 например так: Section object type 'Invoices'

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

Права администратора

Нравится

Поделиться

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

Вопрос

В мобильном приложении я вижу только 1 продажу. Она создана Supervisor'ом, почему я не вижу остальные продажи?

Ответ

В продукте bpmonline sales omnichannel для раздела продаж у нас используется следующая базовая логика:

1) При синхронизации с мобильного устройства на него загружаются только те продажи, у которых ответственным является текущий пользователь.

Это сделано для экономии памяти и уменьшения времени синхронизации

2) В мобильном приложении в разделе «Продажи» данные также фильтруются еще по условию Стадия продажи.Конечная = ЛОЖЬ

Это сделано для удобства – пользователь видит в одном списке все свои не завершённые задачи.

(если поле стадия пустое, то такая продажа также не попадет в этот реестр)

При этом все такие продажи хранятся в базе мобильного приложения и к ним можно перейти из других разделов, например, из «Активностей» посмотреть связанную продажу

Нравится

Поделиться

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

Вопрос

В контрагентах некорректно отображается Полнота наполнения (вместо % - тысячи). Для решения порекомендовали пересохранить каждую запись (это действительно помогает), но у нас больше 5000 контрагентов – пересохранять каждого совсем не вариант.

Ответ

Запись обновляется при открытии карточки в следствии вызова метода GetRecordCompleteness() сервиса CompletenessService.

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

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
esq.addColumn("Id");
esq.getEntityCollection(function(result) {
   var items = null;
   if (result.success) {
      items = result.collection;
      document.testResult = items;
      console.log("testResult added");
   }
}, this);

После чего вызовем метод сервиса для каждой записи, это займет какое-то время.

document.iter = 0;
document.myLoop = function() {
    var item = document.testResult.collection.items[document.iter];
    setTimeout(function () {  
      // ---------
      console.log(item.values.Id);
      var config = {
       recordId: item.values.Id,
       schemaName: "Account"
      };
      require(["ServiceHelper"], function(ServiceHelper) {
       ServiceHelper.callService("CompletenessService",
        "GetRecordCompleteness",
         function(response) {
         },
         config,
       this);
      });
      // ---------   
      document.iter++;                  
      if (document.iter < document.testResult.collection.items.length) {         
         document.myLoop();            
      }                       
   }, 1000)
};
document.myLoop();

 

Нравится

Поделиться

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

Задача

Скрыть кнопку [добавить] в детали

Решение

Скрытие кнопки можно реализовать следующим образом:

В схеме детали, в разделе diff, добавить следующее:

{
    "operation": "remove",
    "name": "addRecordButton"
}

 

Нравится

Поделиться

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

    {

                "operation": "remove",

                "name": "AddRecordButton"

            }

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