Доброго времени суток. Прошу помочь! Как мы можем сделать ссылку к определенному модулю и к id(ид динамический)?

diff: [

{

     "operation": "insert",

     "parentName": "cticoming",

     "propertyName": "items",

     "values": {

              "itemsType": Terrasoft.ViewItemType.BUTTON,

              "style": Terrasoft.controls.ButtonEnums.style.GREEN,

              "click": {bindTo: "Caseclcik"},

              "markerValue": "Caseclick",

              "visible": {"bindTo", "casevisible"}

     }

}]

Нравится

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

Добрый день, Нурлан!

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

https://academy.creatio.com/docs/developer/interface_elements/record_page/button/overview#case-1916

Если еще остались вопросы - обращайтесь!

С уважением, Ангелина!

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

Добрый день!

 

Я зашла в настройку отчетов и добавила новый отчет в раздел Контрагенты, но он не появился на странице. Как это исправить?

Нравится

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

Добрый день!

 

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

Да, все заполнено.  Нужно ли самостоятельно добавлять кнопку "Печать" в дизайнере?

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

Добавляю страницу в "Дизайнер системы", на подобии "Настройка цвета панели разделов". После создания модуля и указании на него ссылки, при нажатии на кнопку жалуется что нет сообщения зарегистрированного. У страницы других тут же, нет его в коде так же, видимо берет из подключенного модуля, но в зависимостях нечего такого нет. Может регистрация модуля нужна где-то?

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

Нравится

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

Александр, добрый день!

Попробуйте подключить само сообщение в схеме:

messages: {
			"ChangeHeaderCaption": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			},

 

Дима Вовченко,

Пробовал, не помогло.

Помогло добавление и удаление пакет "UIv2" в зависимости (думаю тут любой бы пакет помог). Видимо баг какой-то в 7.18.0 версии

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

Please tell me how to add new custom item to "profile user button" menu? 

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

Нравится

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

Hi,

You will need to extend MainHeaderSchema module and add your custom container and button inside the container there.

Please study the base implementation of the MainHeaderSchema to see how the "System designer" button is added for example realisations  of schema MainHeaderSchema in packages OmnichannelMessaging and NUI. You coud override method loadProfileButtonMenu.

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

Как убрать DCM и ActionDashboard из страницы редактирования продажи?

Нравится

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

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

 

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

Подобные вопросы уже встречались здесь, например этот

 

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

Добрый день!

Есть объект "Заявка", в нём поле "Анкета", мне нужно на страницу редактирования раздела заявки (вроде так называется, наследуется от BaseModulePageV2 ( NUI )) вывести поля анкеты.

Что я сделал: добавил в код страницы редактирования заявки и раздела заявки кусок:

dataModels: /**SCHEMA_DATA_MODELS*/{

                "AppQ": {

                    "entitySchemaName": "ApplicationQuestionnaire",

                    "primaryColumnValue": {

                        "bindTo": "ApplicationQuestionnaire"

                    }

                }

            }/**SCHEMA_DATA_MODELS*/,

 

В diff'е страницы редактирования заявки прописал несколько полей по типу:

{

                    "operation": "insert",

                    "name": "TscAppFilingMethod",

                    "values": {

                        "bindTo": "AppQ.AppFilingMethod",

                        "layout": {

                            "column": 0,

                            "row": 0,

                            "colSpan": 12,

                            "rowSpan": 1

                        },

                        "enabled": false

                    },

                    "parentName": "AppQInfoGroupGridLayout",

                    "propertyName": "items"

                }

Дальше происходит следующее:

  1. Если на страницу редактирования заходить напрямую по url, поля отображаются.
  2. Если заходить на страницу из раздела, то поля не отображаются пока не обновишь страницу. После обновления страницы поля есть, и даже если закрыть страницу редактирования и заново в неё войти из раздела, поля остаются, до момента пока не очистишь кэш браузера.

Когда поля не отображаются в консоль выводится следующее сообщение:

Заголовок для подписи "AppFilingMethod" не был найден.

Невозможно найти колонку по конфигурации: "{"bindTo":"AppQ.AppFilingMethod","layout":{"colSpan":12,"rowSpan":1,"column":0,"row":0},"enabled":false,"name":"AppFilingMethod"}" .

Отображаются эти ошибки как на странице раздела, так и на странице редактирования.

Нужно как-то проинициализировать AppQ на странице раздела или я не прав? Подскажите, пожалуйста. 

Использовать запросы и выводить виртуальные поля очень не хочется.

Нравится

4 комментария
Лучший ответ

eduard-t,

Добрый день.



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



Вы можете попробовать реализовать свой модуль на примере базового AccountProfileSchema в карточке контакта. Думаю это решит Вашу бизнес задачу. 

Или же придется использовать запросы. Например, можно решить так:

 

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:

attributes: {



    "AlternativeMobilePhone": {

        dataValueType: this.Terrasoft.DataValueType.TEXT,

        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

        caption: "Alternative mobile phone",

        value: null

    },

            

2.    Выводим его на странице в секции дифов:



{

    "operation": "insert",

    "name": "AlternativeMobilePhone",

    "values": {

        "layout": {

            "colSpan": 12,

            "rowSpan": 1,

            "column": 0,

            "row": 2,

            "layoutName": "ContactTab"

        },

        "bindTo": "AlternativeMobilePhone"

    },

    "parentName": "ContactTab",

    "propertyName": "items",

    "index": 4

},

            

3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:



getContactInfo: function() {

    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

        rootSchemaName: "Contact"

    });



    esq.addColumn("Phone");



    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(

        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));

    esq.getEntityCollection(function(result) {

        if (result.success) {

            var collection = result.collection;

            if (collection && collection.collection.items.length > 0) {

                var item = collection.collection.items[0];



                this.set("AlternativeMobilePhone", item.get("Phone"));



            }

        }

    }.bind(this));

},

            

4.    При инициализации карточки вызываем этот метод:



onEntityInitialized: function() {

    this.callParent(arguments);

    this.getContactInfo();

},



5.    Для случаев изменения контакта в рантайме, делаем подписку на его изменение и вызов этого же метода получения нужной информации, делается это в блоке атрибутов:



"AnyName": {

    "value": false,

    "dataValueType": Terrasoft.DataValueType.BOOLEAN,

    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

    "dependencies": [

        {

            "columns": ["Contact"],

            "methodName": "getContactInfo"

        }

    ]

},

Добрый день. 



Попробуйте добавить в values свойство caption и указать конкретное название:

"layout": {

                            "column": 0,

                            "row": 0,

                            "colSpan": 12,

                            "rowSpan": 1,

                           "caption":"MyCaption"

                        }



После этого ошибка должна уйти. Или же проверьте есть ли заголовок данной колонки в объекте. 

Mykhailo Storozhuk,

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

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

Обновляю страницу, и всё подтягивается:

Как сделать, чтобы подтягивалось без обновления страницы?

eduard-t,

Добрый день.



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



Вы можете попробовать реализовать свой модуль на примере базового AccountProfileSchema в карточке контакта. Думаю это решит Вашу бизнес задачу. 

Или же придется использовать запросы. Например, можно решить так:

 

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:

attributes: {



    "AlternativeMobilePhone": {

        dataValueType: this.Terrasoft.DataValueType.TEXT,

        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

        caption: "Alternative mobile phone",

        value: null

    },

            

2.    Выводим его на странице в секции дифов:



{

    "operation": "insert",

    "name": "AlternativeMobilePhone",

    "values": {

        "layout": {

            "colSpan": 12,

            "rowSpan": 1,

            "column": 0,

            "row": 2,

            "layoutName": "ContactTab"

        },

        "bindTo": "AlternativeMobilePhone"

    },

    "parentName": "ContactTab",

    "propertyName": "items",

    "index": 4

},

            

3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:



getContactInfo: function() {

    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

        rootSchemaName: "Contact"

    });



    esq.addColumn("Phone");



    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(

        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));

    esq.getEntityCollection(function(result) {

        if (result.success) {

            var collection = result.collection;

            if (collection && collection.collection.items.length > 0) {

                var item = collection.collection.items[0];



                this.set("AlternativeMobilePhone", item.get("Phone"));



            }

        }

    }.bind(this));

},

            

4.    При инициализации карточки вызываем этот метод:



onEntityInitialized: function() {

    this.callParent(arguments);

    this.getContactInfo();

},



5.    Для случаев изменения контакта в рантайме, делаем подписку на его изменение и вызов этого же метода получения нужной информации, делается это в блоке атрибутов:



"AnyName": {

    "value": false,

    "dataValueType": Terrasoft.DataValueType.BOOLEAN,

    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

    "dependencies": [

        {

            "columns": ["Contact"],

            "methodName": "getContactInfo"

        }

    ]

},

Mykhailo Storozhuk,

Большое спасибо! Не знал про существование ProfileSchema, это как раз то, что нужно.

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

Добрый день!

Есть запрос, Terrasoft.Core.DB.Select, вот кусок:

                    .Distinct().Column("bslc", "Id").As("LinkId")

                    .Column("bslc", "Code").As("Code")

                    .Column("cardProfile", "TextValue").As("Name")

                    .Column("priority", "IntegerValue")

При попытке выполнить, ругается на выделенную строку, так как тип колонки NCLOB (Oracle.DataAccess.Client.OracleException: 'ORA-00932: inconsistent datatypes: expected - got NCLOB').

Если выполнять этот запрос из БД, то так:

                    SELECT DISTINCT

                        "bslc"."Id" "Id",

                        "bslc"."Code" "Code",

                        TO_CHAR("cardProfile"."TextValue") "Name",

                        "priority"."IntegerValue"

не ругается.

Можно ли в Terrasoft.Core.DB.Select использовать TO_CHAR() и как это сделать?

Нравится

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

Добрый день.



Нет, нельзя. В системе не предусмотрено данной реализации. 



Для приведения к определенному типу Вы можете использовать cast'ы. Более подробно описано в документации на академии. 

Например, тут

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

Всем доброго времени суток!

Стоит задача отправлять логи в RabbitMQ

Установил библиотеку Nlog.RabbitMQ.Target в файлы nlog.config и nlog.config.targets добавил необходимые настройки:

nlog.config:

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="false" >
	<include file="nlog.targets.config" />
	<extensions>		
		<add assembly="Nlog.RabbitMQ.Target" />
	</extensions>
<rules>
<logger name="*" minlevel="Debug" writeTo="RabbitMQTarget" />
	</rules>

nlog.config.targets:

<variable name="rmqHost" value="rabbithost" />
	<variable name="rmqUser" value="logger" />
	<variable name="rmqPassword" value="logger" />
	<variable name="rmqvHost" value="logs" />
	<variable name="rmqPort" value="5672" />
<targets async="true">
  ...................................................
<target name="RabbitMQTarget"
            xsi:type="RabbitMQ"
            appid="NLog.RabbitMQ.DemoApp"
            correlationId=""
            messageType=""
            topic="DemoApp.Logging"
            username="${rmqUser}"
            password="${rmqPassword}"
            hostname="${rmqHost}"
            exchange="logs"
            exchangeType="topic"
            routingKey="logs"
            messageSource="nlog://${machinename}/${logger}"
            DeliveryMode="NonPersistent"
            port="{rmqPort}"
            vhost="${rmqvHost}"
            useJSON ="true" >
		  <field key="threadid" layout="${threadid}" />
		  <field key="machinename" layout="${machinename}" />
 
</targets>

Но почему то коннекта к Rabbit нет

 

Создал проект web API

добавил эти же настройки - коннект есть логи в очередь уходят.

Подскажите что делаю не так, может есть какие то нюансы?

Благодарю.

Нравится

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

Нигрескул Алексей, добрый день!

Связка RabbitMQ с логами не тестировалась. 

Возможно стоит подключать RabbitMQ через файл ConnectionStrings.config, параметр messageBroker.

Пример настройки указан этой статье (для PostgreSQL):

https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/windows_net…

Sorotiuk Anna,

здравствуйте! Нет, в библиотеке Nlog.RabbitMQ.Target уже реализовано подключение к Rabbit, настройки подключения передаются через файл NLog.config

Sorotiuk Anna,

подскажите какая версия библиотеки NLog используется в Creatio 7.18.3

Нигрескул Алексей, добрый день!

Для версии 7.18.3 версия библиотеки Nlog - 4.6.5

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

Добрый день

После установки пакета Printable forms setup for Creatio (https://marketplace.terrasoft.ru/app/reports-setup-creatio) перестал работать стенд

Уже и Redis чистил и Исходники генерил, но при компиляции выдает ошибку  Зависимый пакет "NavReportMaster" не найден

Уже не знаю как восстановить работу стенда

Нравится

6 комментариев

либо что-то не доставилось, либо просмотри зависимости в новых пакетах, нет ли там NavReportMaster. мб мусорные зависимости от пакетов разработки остались

Варфоломеев Данила,

Как их можно удалить?

Иван Ратников,

 

Попробуйте восстановить базу данных из резервной копии.

Алла Савельева,

если б это было возможно...

Иван Ратников пишет:

Вам нужно разблокировать пакет через SQL запрос, затем зайти в свойства пакета и убрать зависимость пакета.

Про зависимости пакетов можете почитать здесь:

https://academy.terrasoft.ru/docs/7-17/developer/development_tools/pack…

Скрипт для разблокировки пакета:

 UPDATE "SysPackage" SET "InstallType" = 0, "IsChanged" = 1, "IsLocked" = 1 WHERE "Name" = 'NamePackage';

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

Для начала нужно понять, в каком пакете осталась зависимость от NavReportMaster. Это можно выяснить скриптом:

 

SELECT sp2.Name FROM SysPackageDependency

LEFT JOIN SysPackage sp1 ON sp1.Id = SysPackageId

LEFT JOIN SysPackage sp2 ON sp2.Id = DependOnPackageId

WHERE sp1.Name = 'NavReportMaster'

 

Скрипт выведет имена всех пакетов, которые зависят от NavReportMaster. Далее уже можно воспользоваться рекомендацией выше от Павла, по разблокировке пакета и удалению зависимости. Хотя пакет может быть и не заблокирован, тогда можно будет просто зайти в свойства и удалить зависимость.

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

Добрый день! Есть большой интерпретируемый БП, в котором есть элемент вызова другого интерпретируемого процесса. Вот кусок:

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

А вот данные из таблицы "SysProcessElementLog":

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

Почему между БП и элементом добавления данных постоянно образовывается пауза в +-42 секунды? Как её убрать? Сам вызываемый процесс небольшой.

Паузы есть после каждого элемента вызова БП (паузы разные, где-то 2 секунды, где-то 10, а где-то и больше минуты, в зависимости от процессов и соседних элементов), возникают они уже после того как отработал БП. Есть ощущение, что это какая-то кривая сериализация (выполнился за 3 секунды, думает 42 сек). 7.15

Раньше, при использовании компилируемых процессов, такого не было.

Нравится

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

Добрый вечер, Эдуард.

Такая пауза вполне может быть вызвана тем, что чтобы запустить процесс движёк делает много вещей для его запуска, таких как копирование переданных параметров, инициализация собственных параметров под-процесса, запись в журнал и прочее.

Возможно, какой-то из запросов тормозит, это можно узнать посмотрев сколько времени выполняются запросы к БД через профайлер в момент запуска под-процесса.

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

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