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

 

 

Доброго времени суток коллеги. Я столкнулся с проблемой у меня есть функция:

 

 calculateBalance: function() {
                var amount = this.get("UsrBudgetSales");
                if (!amount) {
                    amount = 0;
                }
                var paymentAmount = this.get("UsrFacticallySum");
                if (!paymentAmount) {
                    paymentAmount = 0;
                }
                var result = amount - paymentAmount;
                this.set("UsrEqualsBudget", result);
 
            }

Она сразу же ставит значение в поле, а нужно чтобы при нажатии на кнопку "Вычислить" вызывалась функция и присваивался значение в колонку "Остаток бюджета": 

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

Не могу сделать проверку тут,

	onPageClick: function(SetHelloAttribute, calculateBalance) {
                // if(какая-то проверка) {
                    this.calculateBalance();
               // }
 

Как я понял свойство set сразу же устанавливает значение в поле. А в methodName она вызывается? 

  dependencies: [
                    {
                        columns: ["UsrBudgetSales", "UsrFacticallySum"],
                        methodName: "calculateBalance"
                    }

Буду благодарен разъяснение. Так как недавно начал изучать Creatio, мог ошибиться в общей логике. Спасибо

Нравится

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

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

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

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

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

Алла Савельева, Все сработало. Благодарю

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

Кейс:

Есть объект контрагенты (стандартный)

Есть объект Чаты. Одно из полей объекта - контрагент. С одним контрагентом может быть заведено несколько чатов (из разных источников)

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

Есть таблица Просмотры недвижимости, которая связывает между собой контрагентов и Недвижимость.

 

Задача:

вывести на карточку недвижимости список чатов со всеми контрагентами, которые хотят посмотреть данную недвижимость.



Можете подсказать, как построить такую деталь?

Нравится

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

На карточку недвижимости вывести деталь по объекту чаты. В описании детали указать свою функцию в значении filterMethod(пример можно найти в AccountPageV2).

В фильтре указать равенство

[Просмотры недвижимости:Контрагент:Контрагент].Недвижимость = 

Id текущей записи недвижимости (this.get('Id"))

 

https://academy.terrasoft.ru/docs/7-17/developer/front-end_development/…

На карточку недвижимости вывести деталь по объекту чаты. В описании детали указать свою функцию в значении filterMethod(пример можно найти в AccountPageV2).

В фильтре указать равенство

[Просмотры недвижимости:Контрагент:Контрагент].Недвижимость = 

Id текущей записи недвижимости (this.get('Id"))

 

https://academy.terrasoft.ru/docs/7-17/developer/front-end_development/…

Спасибо! Все получилось.

Полозюков Евгений Петрович,

Здравствуйте! а доступ к этой статье только у сертифицированных разработчиков?

Лидия, структура и содержимое справки недавно менялись, теперь см. эту статью.

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

Вот как это выглядит сейчас:

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

Вот как надо чтобы выгляделоИзображение удалено.

Нравится

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

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

Непонятно зачем это поле выводить в реестре детали. Просто не выводите.

Если нужно чтобы пользователь видел есть ли сообщение в записи или нет, я бы добавил дополнительное булево поле "Есть сообщение" и внутреннем процессе объекта его бы заполнял при изменении значения Сообщение. И поле Есть сообщение вывел бы в реестр детали.

Полозюков Евгений Петрович,

Так хочет заказчик. Так может можно все таки как то обрезать это все при отображении?

Атамогланов Гусейн,

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

А у вас точно нет Terrasoft.ContentType.LONG_TEXT? Обычно с ним так отображается.



Если поле не для редактирования, то в процессе копируйте в другое поле краткое содержание текста

Владимир Соколов,

 

Terrasoft.ContentType.LONG_TEXT я его как раз убрал.

Владимир Соколов пишет:

Если поле не для редактирования, то в процессе копируйте в другое поле краткое содержание текста

То есть? Создать еще одно поле в объект?

 

Мишустин Василий пишет:

То есть? Создать еще одно поле в объект?

Да. Вряд ли это поле надо редактировать прямо в реестре, уж очень оно большое. Потому сделать поле, и в процессе (прямо в объекте или отдельно) его заполнять, обрезая до нужного количества символов (а может, даже убирая тэги, например) 

 

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

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

Пытаюсь перенести раздел без пакета кусками. Сущности типа "Объект" перенеслись. А сущности типа "Клиентский модуль" хоть и сообщают что перенеслись в списке в управлении конфигурацией не появляются. И в мастере настройки рабочих мест раздел не виден. Что сделал не так?

 

Вот список на сервере источнике.

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

 

Вот список на сервере приемники

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

Нравится

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

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

Есть одно но. Нельзя просто так перенести раздел "кусками". Дело в том, что чтобы работал раздел, нужны еще элементы привязки данных - записей в таблицах для связывания объектов и схем. Без них раздел не заработает

Для пробы сделал раздел без ссылок на другие разделы или справочники. Это имелось ввиду?

 

Или что-то другое имелось ввиду?

Рашид Еркиналиев,

Нет, не совсем.

Посмотрите эту тему https://community.terrasoft.ru/questions/poryadok-sozdaniya-razdela-vru…

Правильно ли я понял:

1. Чтобы перенести раздел частями надо еще в базе сделать нужные апдейты. (для чего тогда нужна такая выгрузка объектов раздела?)

2. Корректно раздел с сервера на сервер можно перенести только в составе пакета, механизма для корректного переноса раздела (без ручного вмешательства в БД) не существует

Перенос изменений системами осуществляется с помощью выгрузки пакетов и их установки на другую систему это для продуктивной и тестовой сред.

Между средами разработки изменения переносятся с помощью свн.

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

Рашид, проще говоря, новый раздел состоит из совокупности схем (объекты, скрипты, иногда DCM) и записей в служебных таблицах с перечнями разделов, деталей, справочников и прочего. Конечно, схемы — тоже записи в таблицах, но и не только, поэтому с ними никто так не работает.

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

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

Спасибо, Александр, примерно понятно.

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

1)Мне нужно взять ответ функции SetHelloAttribute() и назначить в поле UsrTypeSale. Не могу понять реализацию, так как недавно начал изучать данный продукт. Буду признателен за помощь.

 

 

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

Нравится

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

Ислам. судя по приведенному фрагменту, эта функция не возвращает значения, но в процессе работы заполняет атрибут HelloAttribute. Вы можете её изменить, чтобы она писала сразу в нужное Вам поле UsrTypeSales, а затем просто запустить в нужном месте, либо же оставить функцию без изменений и в Вашей функции calculateBalance сначала вызывать её, а затем копировать из атрибута в поле.

А где у "SetHelloAttribute" return?

Александр Тыра,

Нет. Я копирую пример из документации. 

Ислам. судя по приведенному фрагменту, эта функция не возвращает значения, но в процессе работы заполняет атрибут HelloAttribute. Вы можете её изменить, чтобы она писала сразу в нужное Вам поле UsrTypeSales, а затем просто запустить в нужном месте, либо же оставить функцию без изменений и в Вашей функции calculateBalance сначала вызывать её, а затем копировать из атрибута в поле.

Зверев Александр,

Спасибо, решил вопрос.

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

Добрый день! Появилась необходимость создать бизнес процессы через POST-запросы. 

Используя мануал для DataServise , написал кейс такого вида: 

 

 data = {
    "columnValues": {
        "items": {
            "Account": {
                "expressionType": 2,
                "parameter": {
                    "dataValueType": 10,
                    "value": "f3f8f781-3c5b-4ecb-89ef-5c1ed4da12ga"
                },
            },
 
            "Category": {
                "expressionType": 2,
                "parameter": {
                    "dataValueType": 10,
                    "value": "1c0bc159-150a-e111-a31b-f2g4hd04c01d"
                },
            },
....
            "operationType": 1,
            "rootSchemaName": "Case"
     },
    },
}

Но при post запросе вида: 

 

h = requests.post("
https://bpm-test.ru/0/dataservice/json/Reply/InsertQuery
", headers=headers, cookies=p.cookies, data=json.dumps(data))

Появляется ошибка :



 

{'responseStatus': {'ErrorCode': 'ArgumentNullOrEmptyException', 'Message': 'Значение аргумента "name" не может быть пустым', 'Errors': []}, 'rowsAffected': -1, 'nextPrcElReady': False, 'success': False}

С чем это может быть связано? если поле name даже не присутствует 

Нравится

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

Дмитрий, уточните, Вы спрашиваете о запуске процесса или о создании записи в каком-то разделе (в Вашем примере — Case)?

Если интересует именно первое, нужно использовать не DataService, а ProcessEngineService. Как его запускать в POST, см. тему.

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

Подскажите, пожалуйста, есть возможность создания печатных форм в Linux?

Плагин для LibreOffice или FreeOffice

Нравится

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

Насколько помню создание печатных форм Word поддерживается только на .Net Framework. Плагинов для Linux нет. Т.е. разработать форму можно только в среде Windows

Алексей Следь,

спасибо :(

Обычно печатные формы можно отредактировать и вовсе без плагина, скачав, изменив вручную и загрузив файл в веб-интерфейсе. Другое дело, что файлы, изменённые не в Word, а в сторонних редакторах, могут иметь отличия в формате и макросы не факт, что обработаются корректно. Нужно тестировать работоспособность.

Идею по Вашей потребности завёл.

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

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

Нравится

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

Вы хотите добавлять в систему извне?

Это можно сделать или через OData отправкой PUT, либо разработкой своего веб-сервиса, подобного стандартному FileApiService, который используется для наполнения из браузера детали файлов.

Первый вариант обсуждался тут и тут, по работе с FileApiService см. темы.

В обоих случаях вначале нужно авторизироваться, получить нужные куки.

Как работать с веб-сервисами в Node JS, лучше спросить на их форумах.

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

Подскажите, как перенести отчет через привязку данных в приложении Excel reports builder. Создал пакет, который зависит от этого пакета, пытаюсь привязать запись раздела и получаю ошибку. Если попытаться привязать данные SysSchema, то тоже получаю ошибки с зависимостями.

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

Нравится

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

Павел,

 

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

 

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

Лазоренко Ирина, зависимость в кастомный пакет добавлена, отчет был создан на основе представления (sysSchema как раз ссылается на объект представления, которое лежит в моем пакете)

Павел,

 

я правильно понимаю, что пакет, в котором добавляете привязки данных, зависит от двух пакетов IntExcelReport и пакета, где добавлено представление?

Данные пытался добавить в тот же пакет, где представление.

Павел,

 

кейс понятен. Попробуем воспроизвести на базовом продукте, по результатам сообщу.

Павел, добрый день!

 

ваш кейс воспроизвелся на базовом продукте. В связи с тем, что в разделе добавлена колонка, в которой указывается объект Creatio, возможности привязать данные по этой колонке нет, используя базовые механизмы привязки данных. Исключите колонку IntEntitySchemaName из списка колонок привязки и после установки пакета с настройками отчета заполните эту колонку вручную (через бп или скрипт). 

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

Здравствуйте, подскажите пожалуйста, осталась ли возможность вернуть старый конфигуратор в версии 7.17.1.1363 ? 

В новом конфигураторе напрочь отсутствует локализация :(

Нравится

20 комментариев
Лучший ответ
DECLARE @sysSettingsCode varchar(max) = 'OldUI';
DECLARE @sysSettingsBooleanValue bit = 1;
DECLARE @sysSettingsId uniqueidentifier;
 
IF NOT EXISTS (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode)
BEGIN
  INSERT INTO SysSettings (Name, Code, ValueTypeName, IsCacheable) VALUES (@sysSettingsCode, @sysSettingsCode, 'Boolean', 1);
END
 
SET @sysSettingsId = (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode);
 
IF NOT EXISTS (SELECT Id FROM SysSettingsValue WITH (NOLOCK) WHERE SysSettingsId = @sysSettingsId)
BEGIN
  INSERT INTO SysSettingsValue (SysSettingsId, SysAdminUnitId, BooleanValue, Position) VALUES (@sysSettingsId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, 2147483647);
END
ELSE
BEGIN
  UPDATE SysSettingsValue SET BooleanValue = @sysSettingsBooleanValue WHERE SysSettingsId = @sysSettingsId
END

 

скопировать бинари Terrasoft.UI.WebControls и Terrasoft.UI.OldConfiguration из WebApp/Compatibility/OldUI в bin и WebApp/bin

включить сист. настройку OldUI - скрипт выше

скомпилировать конфигурацию

а по пути /0/WorkspaceExplorerModule.aspx перекидывает на новый "дизайн" ?



P.S  7.17.1 еще не пробовал.

Адаменко Александр,по такому пути выдает 500ю ошибку сервера

Добрый день! Попробуйте дописать "/dev_old", чтобы вышло таким образом: yoursite/0/dev_old

можно добавить кнопку в браузере. закладки. 
в адресе указать 

javascript:window.open("../ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_c02e0ec6f36b14108882485b39c5f8dd_045063c98180e011afbc00155d04320c_7c0581929880e011afbc00155d04320c");

нажимать на кнопку, когда активная любая страница Creatio

Дарья Сошина, 500я ошибка сервера, все так же как и с WorkspaceExplorer.aspx

yura.makarchuk, 500я ошибка... :(

Стратонов Олександр, на 7.17.0 точно работает (

Эх. Даа... Новый конфигуратор наводит только тоску. Один только поиск по схеме чего стоит)))))

Может кто-нибудь ещё знает, как можно попробовать достучаться?)

на 7.17.1 полностью отключили поддержку старого интерфейса конфигуратора. Но у нас пошли проблемы при работе нового конфигуратора и SVN. Конфигуратор не проверял перед коммитом последняя ли версия пакета и стирал чужие коммиты. Поэтому техподдержка для активации старого интерфейса дала мне скрипт по активации фичи OldUI. Так же надо скопировать dll из WebApp/Compatibility/OldUI в bin и WebApp/bin. после перекомпиляции по пути yoursite/0/dev_old будет старый конфигуратор.

уже все вычитанные способы перепробовал, не получается

в новом конфигураторе все еще сырое, особенно редактор кода с его поиском, да и поиск по схеме не сладкий...

 

Алексей Следь,

Поделитесь скриптом и инструкцией. У нас та же проблема на 7.17.1.

Алексей Следь, поделитесь, пожалуйста

 

DECLARE @sysSettingsCode varchar(max) = 'OldUI';
DECLARE @sysSettingsBooleanValue bit = 1;
DECLARE @sysSettingsId uniqueidentifier;
 
IF NOT EXISTS (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode)
BEGIN
  INSERT INTO SysSettings (Name, Code, ValueTypeName, IsCacheable) VALUES (@sysSettingsCode, @sysSettingsCode, 'Boolean', 1);
END
 
SET @sysSettingsId = (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode);
 
IF NOT EXISTS (SELECT Id FROM SysSettingsValue WITH (NOLOCK) WHERE SysSettingsId = @sysSettingsId)
BEGIN
  INSERT INTO SysSettingsValue (SysSettingsId, SysAdminUnitId, BooleanValue, Position) VALUES (@sysSettingsId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, 2147483647);
END
ELSE
BEGIN
  UPDATE SysSettingsValue SET BooleanValue = @sysSettingsBooleanValue WHERE SysSettingsId = @sysSettingsId
END

 

скопировать бинари Terrasoft.UI.WebControls и Terrasoft.UI.OldConfiguration из WebApp/Compatibility/OldUI в bin и WebApp/bin

включить сист. настройку OldUI - скрипт выше

скомпилировать конфигурацию

Алексей Следь, спасибо большое

У всех норм работает? У меня ошибка появилась.

Дамиан Викторович, да, работает

не забудьте скомпилироваться 

Хотел бы, да не могу зайти в конфигуратор.

Дамиан Викторович,

А вы системную настройку добавили? у меня ошибку сервер выдавал после копирования бинарников и до добавления настройки.

Переписал SQL-script с удалением и созданием настройки. Не помогло.

-- ------------------------------------------------------------------------------------------------------------------------
-- Включить конфигуратор версии 7.16.
-- 1. Скопировать файлы из ..\Terrasoft.WebApp\Compatibility\OldUI\ в ..\Terrasoft.WebApp\bin\
-- Terrasoft.UI.OldConfiguration.dll, Terrasoft.UI.OldConfiguration.xml, Terrasoft.UI.WebControls.dll, Terrasoft.UI.WebControls.xml
-- 2. ВыполнитьSQL-script (включить системную настройку OldUI)
-- 3. Скомпилировать конфигурацию
-- ------------------------------------------------------------------------------------------------------------------------
declare @deleteSetting bit = 1  -- Удалить настройку
-- ------------------------------------------------------------------------------------------------------------------------
set nocount on
-- Удалить настройку.
if (@deleteSetting = 1) begin
	declare @idSearch uniqueidentifier = (select [SysSettingsValue].[Id] 
	from [SysSettings] 
	inner join [SysSettingsValue] on [SysSettings].[Id]=[SysSettingsValue].[SysSettingsId]
	where [SysSettings].[Code] = 'OldUI')
	delete from [SysSettingsValue] where [Id] = @idSearch
	delete from [SysSettings] where [Name] = 'OldUI'
	print N'[-] Выполнено удаление настройки "OldUI"'
end
-- ------------------------------------------------------------------------------------------------------------------------
-- Создать настройку.
declare @code varchar(max) = 'OldUI'
declare @value bit = 1
declare @id uniqueidentifier
 if not exists (select [Id] from [SysSettings] where [Code] = @code)
begin
	insert into [SysSettings] ([Name], [Code], [ValueTypeName], [IsCacheable]) values (@code, @code, 'boolean', 1)
end
set @id = (select [Id] from [SysSettings] where [Code] = @code)
if not exists (select [Id] from [SysSettingsValue] where [SysSettingsId] = @id)
begin
	insert into [SysSettingsValue] ([SysSettingsId], [SysAdminUnitId], [BooleanValue], [Position]) 
	values (@id, 'a29a3ba5-4b0d-de11-9a51-005056c00008', 1, 2147483647)
	print N'[+] Выполнено создание настройки "OldUI"'
end
else
begin
	update [SysSettingsValue] set [BooleanValue] = @value where [SysSettingsId] = @id
	print N'[*] Выполнено обновление настройки "OldUI"'
end
-- ------------------------------------------------------------------------------------------------------------------------
-- Показать настройку.
select 
	 [SysSettings].[Name] [SysSettings_Name]
	,[SysSettings].[Code] [SysSettings_Code]
	,[SysSettings].[ValueTypeName] [SysSettings_ValueTypeName]
	,[SysSettings].[IsCacheable] [SysSettings_IsCacheable]
	,[SysAdminUnit].[Name] [SysAdminUnit_Name]
	,[SysSettingsValue].[Id] [SysSettingsValue_Id]
	,[SysSettingsValue].[BooleanValue] [SysSettingsValue_BooleanValue]
	,[SysSettingsValue].[Position] [SysSettingsValue_Position]
from [SysSettings]
inner join [SysSettingsValue] on [SysSettings].[Id]=[SysSettingsValue].[SysSettingsId]
inner join [SysAdminUnit] on [SysSettingsValue].[SysAdminUnitId]=[SysAdminUnit].[Id]
where [SysSettings].[Name] = 'OldUI'
print N'[*] Выполнено показ настройки "OldUI"'
-- ------------------------------------------------------------------------------------------------------------------------
set nocount off

 

Здравствуйте, подскажите пожалуйста, осталась ли возможность вернуть старый конфигуратор в версии 7.17.1.1363 ? 

Даже если сейчас есть обходные пути включения старого интерфейса, рано или поздно его отключат полностью. 

В новом конфигураторе напрочь отсутствует локализация :( 

А что именно не так в новом?

Локализация, например, названий полей задаётся тут:

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