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

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

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

Нравится

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

на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию

attributes: {
            
            "ButtonEnabled": {
                "dataValueType": Terrasoft.DataValueType.BOOLEAN,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "value": false
            }

Вызов функции на кнопке

  onButtonClick: function(){ 
                this.SomeFunc();

Сама кнопка в DIFF            

    {
                "operation": "insert",
                "name": "Button",
                "values": {
                    "itemType": 5,
                    "caption": {
                        "bindTo": "Resources.Strings.ButtonCaption"
                    },
                    "click": {
                        "bindTo": "onButtonClick"
                    },
                    "style": "blue",
                    "enabled": {
                        "bindTo": "ButtonEnabled"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 0,
                        "row": 0,
                        "layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
                    }
                },
                "parentName": "Tab72b43268TabLabelGridLayoutfb645753",
                "propertyName": "items",
                "index": 0
            },

В LocalizableString
ButtonCaption    - Текст на кнопке

Если расположение кнопки не имеет значения, то можно использовать меню в "Действиях" 

 

			getActions: function() {
				var actionMenuItems = this.callParent(arguments);
				actionMenuItems.addItem(this.getButtonMenuItem({
					"Caption": {"bindTo": "Resources.Strings.MyButtonCaption"},
					"Click": {"bindTo": "onMyButtonClick"}
				}));
				return actionMenuItems;
			},

 

на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию

attributes: {
            
            "ButtonEnabled": {
                "dataValueType": Terrasoft.DataValueType.BOOLEAN,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "value": false
            }

Вызов функции на кнопке

  onButtonClick: function(){ 
                this.SomeFunc();

Сама кнопка в DIFF            

    {
                "operation": "insert",
                "name": "Button",
                "values": {
                    "itemType": 5,
                    "caption": {
                        "bindTo": "Resources.Strings.ButtonCaption"
                    },
                    "click": {
                        "bindTo": "onButtonClick"
                    },
                    "style": "blue",
                    "enabled": {
                        "bindTo": "ButtonEnabled"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 0,
                        "row": 0,
                        "layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
                    }
                },
                "parentName": "Tab72b43268TabLabelGridLayoutfb645753",
                "propertyName": "items",
                "index": 0
            },

В LocalizableString
ButtonCaption    - Текст на кнопке

Oleg,

Кнопка добавилась, и даже отображается в инспекторе, но при этом она  абсолютно невидима. В enabled установлено true.
В вашем коде изменил только родительский контейнер и, соответственно, layoutName. У других элементов на странице тот же родитель

Гусейн Гулиев,

В LocalizableStrings добавили? 

Oleg,

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

{
	"operation": "insert",
	"name": "Button",
	"values": {
		"itemType": 5,
		"caption": {// Правильно: "caption" :"Check out",
			"bindTo": "Check out" // неправильное использование bindTo
		},
		"click": {
			"bindTo": "onButtonClick"
		},
		"style": "blue",
		"enabled": true,
		"layout": {
			"colSpan": 8,
			"rowSpan": 1,
			"column": 16,
			"row": 6,
			"layoutName": "Tab84fbfd75TabLabelGridLayout489fb6f3"
		}
	},
	"parentName": "Tab84fbfd75TabLabelGridLayout489fb6f3",
	"propertyName": "items",
	"index": 6
},

 

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

В новой версии (7.18) в столбчатых диаграммах с накоплением отображаются нулевые значения. Причем сами секторы графика не рисуются, а вот нули в виде подписей есть. Это баг? Можно как-то исправить? Нужной настройки для этого не нашли.

Нравится

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

Неужели нет комментариев по данному вопросу :(

Добрый день, Вадим!

Спасибо за детальное описание данного кейса!

 

На основании данной информации, в департаменте разработки зарегистрирована соответствующая задача:

- На графике с признаком Stacked не отображать пустые серии.

Если серия пустая, на данный момент, отображается ноль. Если таких серий много или они находятся рядом, это мешает чтению данных.

Необходимо, чтобы пустая серия не отображалась.

 

Исправления запланированы в версии 7.18.2.

Спасибо за то, что помогаете делать наш продукт лучше!

Жмурко Сергей,

Ждем с нетерпением! Спасибо за ответ

Жмурко Сергей,

Судя по всему, не исправили в 7.18.2?

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

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

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

Например, в контрагенте я выбираю Контакт, но могу нажать Добавить. В карточке контакта, в init или как-то еще можно определить Id контрагента, из которого вызвалось добавление?

Нравится

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

При открытии карточки контрагента, класть id контрагента в кэш. В карточке контакта считать значение из кэша.

Альтернативный вариант посылать на карточку контрагента сообщение, но карточка может не ловить сообщение.

Здравствуйте. Если не ошибаюсь, sandbox.id содержит гуид

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

Добрый день, 

 

Вопрос следующий:
Объект Обращения, есть вкладка "Test", она выводиться когда на странице в поле "Направление" стоит значение "Sales". И вот, кроме "Sales" эта вкладка еще и нужна для "Transport". 

 

Где можно найти настройку, которая выводит табку "Test" для "Sales", если в бизнес-процессах такой настройки нет. Просто нет. 

Может быть табка привязана не к полю, а к диаграмме статуса?
Диаграмма статусов для "Sales" тоже особенная.

 

Памагите.

Нравится

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

Отображение вкладки можно настроить через бизнес-правила раздела. Поищите бизнес-правило и добавьте условие видимость по направлен = Sales или Направление = Transport.  Бизнес-правило может не отображаться из-за иерархии пакетов - если изменения сделаны в пакете выше, чем сейчас установлен текущий пакет. Если текущим сделать пакет Custom, то все бизнес-правила будут отображаться.

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

Ирина, из постановки вопроса неясно, речь о платформе 7.Х, более старых версиях или вообще не о продуктах Terrasoft.

Логику элементов интерфейса обычно реализуют не в бизнес-процессах или кейсах, а в JS-коде схем страниц или в бизнес-правилах, как написали в комментарии выше.

В карточке раздела обращений стандартно нет поля «Направление», его могли самостоятельно добавить.

В таком случае нужно смотреть схему этой страницы CasePage (или CasePageV2) пакета Custom, где размещаются пользовательские доработки.

Спасибо за информацию!!
Ответ оказался неожиданным, эта настройка находилась в Справочнике Service Catalog. Видно это специфическая настройка, а не стандарный функционал. 

Но, на будущее эти знания точно пригодятся. 

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

Здравствуйте. Давно думал как подойти к созданию справочника со страницей редактирования, как это реализовано в "Стадии продаж". Страницу редактирования для этого справочника я уже замучил, работает, но думаю все же нужно уже создавать новый справочник наконец.

В указанном справочнике страница редактирования "OpportunityStagePageV2", работает она понятно как, но как она вызывается не понятно.

Может у кого есть опыт с данным типом справочника?

Нравится

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

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

https://prnt.sc/vo7c2d

Если мне не изменяет память, делал так, создал деталь со страницей редактирования(через мастер раздела) и привязал ее к объекту справочника. Попробуйте так.

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

https://prnt.sc/vo7c2d

Если мне не изменяет память, делал так, создал деталь со страницей редактирования(через мастер раздела) и привязал ее к объекту справочника. Попробуйте так.

Через мастер деталей только.

Спасибо за ответы! Сам бы не за что не догадался

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

Добрый день, имеется развернутый локально Creatio. Хочу добавить лэндинг(чтобы можно было к примеру перейти на localhost/landing/index.aspx) с формой, у которой есть поле phone и данные введенные в поле будут попадать в контакты -> мобильный телефон уже к имеющемуся контакту.
Что уже сделал?
Сейчас контакт выглядит следующим образом

Как описано в документации добавил лэндинг. Сжато он выглядит так:

После чего в папке ../0/Nui/ создал папку Landing с файлом index.aspx в котором лежит следующий код:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <!--ШАГ 2-->
    <!--Эту часть необходимо скопировать из поля ШАГ 2 страницы редактирования лендинга-->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="https://webtracking-v01.bpmonline.com/JS/track-cookies.js"></script>
    <script src="https://webtracking-v01.bpmonline.com/JS/create-object.js"></script>
    <script>
 
    var config = {
        fields: {
            "Subject": "#subject-field",
            "Email": "#email-field",
            "Name": "#name-field",
            "MobilePhone": "#phone-field",
        },
        landingId: "54a57d16-e7b6-4c7d-9c38-237cfcf6512d",
        serviceUrl: "http://localhost/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectData",
        redirectUrl: "yandex.ru"
    };
 
    function createObject() {
        landing.createObjectFromLanding(config)
    }
    </script>
    <!--ШАГ 2-->
</head>
<body>
<h1>Landing web-page</h1>
<div>
    <h2>Case form</h2>
    <form action="localhost/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectData" method="POST" class="mainForm" name="landingForm" onSubmit="createObject(); return false">
        Subject:<br>
        <input type="text" name="subject" id="subject-field"><br>
        Email:<br>
        <input type="text" name="Email" id="email-field"><br>
        Name:<br>
        <input type="text" name="Name" id="name-field"><br>
        Phone:<br>
        <input type="text" name="Phone" id="phone-field"><br><br>
        <input type="submit" value="Submit">
        </font>
    </form>
</div>
</body>
</html>

Если я правильно понял для того чтобы POST запрос прошел корректно должен отработать файл GeneratedObjectWebFormService.svc. Нужно ли его создавать по документации или он является дефолтным? При попытки отправки запроса возникает 403 ошибка. Как сделать это рабочим и какие ошибки я совершил?

Нравится

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

А зачем вы пытаетесь добавить лендинг внутри того же сайта, где развёрнута система? Обычно он нужен для отдельного сайта, например, страницы регистрации на сайте компании. При таком размещении, как сделали Вы, может незалогиненного пользователя при попытке открыть эту страницу перебросить на страницу логина. А для залогиненных есть более подходящие способы, вроде БП с автогенерируемыми или преднастроенными страницами.

 

Как минимум, у Вас неправильный адрес стандартного веб-сервиса GeneratedWebFormService, к которому пытались обратиться со страницы. Поскольку он анонимный, там не нужен /0/. См. тут, как выглядит и где настраивается путь к нему.

 

Если нужно сделать отдельную страницу на сервере с этой формой, можно поднять в IIS ещё один сайт из одной HTML-страницы, где и настроить по инструкции связь с лендингом.

А зачем вы пытаетесь добавить лендинг внутри того же сайта, где развёрнута система? Обычно он нужен для отдельного сайта, например, страницы регистрации на сайте компании. При таком размещении, как сделали Вы, может незалогиненного пользователя при попытке открыть эту страницу перебросить на страницу логина. А для залогиненных есть более подходящие способы, вроде БП с автогенерируемыми или преднастроенными страницами.

 

Как минимум, у Вас неправильный адрес стандартного веб-сервиса GeneratedWebFormService, к которому пытались обратиться со страницы. Поскольку он анонимный, там не нужен /0/. См. тут, как выглядит и где настраивается путь к нему.

 

Если нужно сделать отдельную страницу на сервере с этой формой, можно поднять в IIS ещё один сайт из одной HTML-страницы, где и настроить по инструкции связь с лендингом.

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

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

Нет, дело не в этом. Посмотрите второй абзац прошлого ответа.

Зверев Александр,
исправил без /0/ теперь следующую проблему не могу побороть 

политика CORS дефолтная и выглядит так:

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

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

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

Есть страница редактирования PageEdit1 в Package1, которая наследуется от базовой в некотором пакете, также есть PageEdit2 (наследник от PageEdit1) в Package2 и PageEdit3 (наследник от PageEdit2) в Package3.

Пакеты наследуются от верхнего к нижнему в такой последовательности: Package1 -> Package2 -> Package3.

Нужно удалить PageEdit2.

Интересует последовательность действий, что нужно сгенерировать и скомпилировать, чтобы система поняла, что PageEdit3 нужно наследоваться от PageEdit1.

Нравится

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

Только удалить PageEdit2, и пересоздать PageEdit3, указав нового родителя.

А после этого нужно сгенерировать исходные схемы или скомпилировать все?

Если мы говорим о JS схемах, то нужно почистить кеш.
Если это страницы разделов, тогда нужно еще подставить UID новой страницы в таблицу SysModuleEdit. Если это страница справочника, выполненная в C#, то нужно компилироваться. Также нужно поправить таблицу Lookup, чтобы при открытии справочника открывалась новая страница, а не базовая страница редактирования значений справочника.

А вообще схемы лучше не удалять.

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

Добрый день!

Очень не удобно накидывать заново все "базовые" данные при настройке страниц Мастера (в зависимости от Типа записи). Почему нельзя было (не только колонку "Название", а ) сразу набор "базовых" данных закинуть на страницу нового Типа?

Нравится

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

И еще неудобнее copy-paste логику, программируя фильтрацию и прочие вещи для каждого типа

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

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

"Демьяник Алексей Олегович" написал:и было передано в отдел разработки.

Сказано красиво, но не ясно будет ли какой-то результат?

Мы делаем так:
1) редактируем базовую страницу в Мастере (получаем replacing page).
2) создаем пустые страницы с типами
3) меняем у созданных страниц родительский объект на страницу объекта
4) общие вещи меняем у страницы, созданной в 1-м пункте
5) уникальные вещи меняем (а вся функциональность уже есть) у страниц, созданных во 2-3 пунктах.

Пока работает, но немного стрёмно :)

"Владимир Соколов" написал:

Мы делаем так:
1) редактируем базовую страницу в Мастере (получаем replacing page).
2) создаем пустые страницы с типами
3) меняем у созданных страниц родительский объект на страницу объекта
4) общие вещи меняем у страницы, созданной в 1-м пункте
5) уникальные вещи меняем (а вся функциональность уже есть) у страниц, созданных во 2-3 пунктах.

Пока работает, но немного стрёмно :)

Один из возможных вариантов решения.

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

Могли бы вы объяснить связь между объектом и страницей, в элементе перенастроенной страницы.

Нравится

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

У одного объекта может быть несколько страниц редактирования, именно по этой причине в элементе "Страница редактирования" необходимо указывать какую именно страницу редактирования выводить пользователю.
Например, объект "Активность" имеет две страницы редактирования:

  • ActivityPageV2
  • EmailPageV2

"Демьяник Алексей Олегович" написал:

У одного объекта может быть несколько страниц редактирования, именно по этой причине в элементе "Страница редактирования" необходимо указывать какую именно страницу редактирования выводить пользователю.
Например, объект "Активность" имеет две страницы редактирования:

  • ActivityPageV2
  • EmailPageV2

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

Добрый день!

Внешний вид страниц редактирования для сотрудников компании, может быть изменен через "Мастер раздела":

Пользователь должен входить в организационную роль "Системные администраторы"

Каждый сотрудник может отредактировать свою страницу персонально, нажав в нужном разделе Вид -> Настроить колонки:

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

Укажите необходимую страницу редактирования в поле "Страница" (объект будет выбран автоматически. Например, если Вы укажите ActivityPageV2 или EmailPageV2, автоматически выберется объект "Активность", но при этом пользователю будут открываться разные страницы: активность с типом "Выполнить" для ActivityPageV2, активность с типом Email - для EmailPageV2.

Добрый день,
Спасибо, но вопрос немного о другом,
где именно настраивается какую именно страницу редактирования выводить пользователю Портала или сотруднику Компании.
где определяется то, что одну карточку раздела обращения видит Портальный пользователь, а другую Сотрудник компании?

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

Добрый день, Маргарита!

Для портала и основной системы создавать раздел и карточку нужно отдельно (при условии, что они будут привязаны к одной сущности).
Для основной системы добавление осуществляется стандартными действиями. Для портала – согласно инструкции (во вложении).
Например, если нужно создать раздел и карточку для сущности Обращение (Case), то для основной системы это будут CaseSection и CasePage.
А для портала – PortalCaseSection и PortalCasePage соответственно. И все эти схемы будут связаны с сущностью Case.

Спасибо Сергей

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

Подскажите как по нажатию на кнопку открыть определенную страницу?

Нравится

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

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

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

Здравствуйте, Алекснандр.

В этой теме описан пример реализации нужного Вам функционала (открыть карточку по нажатия на кнопку).

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

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