Добрый день! 

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

Нравится

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

Я по этому поводу нашел всего одну статью 
https://community.terrasoft.ru/articles/dvuhfaktornaa-autentifikacia-v-…

 

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

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

При создании активности в шаге кейса, мне надо чтобы активность была обработана ответственным в заявке этого раздела. Но при попытке изменить с текущего пользователя на ответственного в заявке ничего не происходит. Тоесть, я кликаю на "Колонка текущей записи" текущего пользователя на  колонку основной записи и не появляется всплывающее окно с выбором колонки основной записи. В чем может быть проблема?

Спасибо.

Нравится

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

Похоже на баг.

Попробуйте прописать в формулу руками.

 

[#Основная запись.Ответственный#]

 

Где Ответственный - название (заголовок) вашего поля.

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

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

Был ли у кого-то опыт размещения данного раздела на карточке? 

 

Нравится

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

Добрый день.

 

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

Пользовательских средств для реализации фильтра по умолчанию нет в коробке. Только разработкой.

 

Необходимо переопределить initQueryFilters
initQueryFilters: function(esq) {
                    this.callParent(arguments);
                    esq.filters.add("ConnectionType",
                            Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "ConnectionType",1));
                    }

 

Подобные вопросы рассматривались на портале, ссылки ниже:

https://community.creatio.com/questions/how-filter-section-list-records…

https://community.terrasoft.ru/questions/kak-predustanovit-uslovie-v-fi…

https://community.terrasoft.ru/questions/vidimost-sotrudnikov-v-kontakt…

https://community.creatio.com/questions/default-filter-section

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

Вы можете подсмотреть реализацию тут:
DocListInConditionPageV2
Там увидите подключение контейнера FilterProperties, в который подгружается FilterEditModule

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

Коллеги, используем решение на windows, хотел протестировать studio на платформе linux+postgres, есть прямая ссылка на дистрибутив?

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

Нравится

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

Добрый день,

 

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

 

 

С уважением,
Кучер Виталина
Оператор
Группа компаний Terrasoft

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

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

 

".. происходит на карточке активности фильтрация поля "Результат" по полю "Категория"

Категория: Визирование, Запрос мнений, подписание, ознакомление

Результат соответственно к категории по порядку:

  • Согласовано
  • Не согласовано
  • Согласовано с учетом замечаний
  • Завершено ввиду прекращения процесса согласования

 

  • Согласовано
  • Не согласовано
  • Согласовано с учетом замечаний
  • Завершено ввиду прекращения процесса согласования

 

  • Подписан
  • Не подписан

 

  • Ознакомлен

Нравится

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

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

 

Для добавления фильтрации поля "Результат" по полю "Категория"на странице редактирования первым делом в системе необходимо добавить соответствующие  справочники и вывести на страницу редактирования справочные поля в мастере раздела:
1. Добавить поле Категория со ссылкой на справочник Категории:

1. Добавить поле Результат со ссылкой на справочник Результат:


Детальнее в статье описан процесс:https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/250/sozdat_novyy_spravochnik
Далее необходимо в объекте справочника "Результат" добавить справочное поле связи "Категорией". В поле Категория в справочнике Результат нужно указать зависимость между двумя значениями. То есть задать какой Результат относиться к определённой Категории.
Добавление поля в объект справочника "Результат" можно провести через управления конфигурации:
1. Перейдите в раздел "Управления конфигурацией".
2. Найдите созданный объект "Результат" в пакете Custom.

3. Откройте объект.
4. Добавьте справочное поле на объект "Категория" и сохраните изменения.

5. Опубликуйте объект и дождитесь полного завершения процесса публикации.

Далее перейдите в справочник "Результат" и укажите зависимость полей от необходимой темы ( если потребуется добавьте колонку в список для отображения в меню "Настройка колонок").

Когда условие зависимости настроено вы можете переходить к настройке правила для фильтрации Результата относительно указанной Категории. Для этого вы можете воспользоваться функциональностью бизнес-правил. Детальнее описано по ссылке:https://academy.terrasoft.ru/docs/user/kastomizacija_no_code/nastrojka_biznes_logiki/nastroyka_biznes_logiki/nastroit_filtraciyu_znacheniy_v_spravochnom_pole
Пример,

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

Добрый день!

При развертывании стенда Creatio верси 7.17.3.1377_ServiceEnterprise_Softkey_PostgreSQL_ENU

После нажатия кнопки "Компилировать" получаю ошибку
"Errors occurred while compiling configuration. See logs for more details"

 

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

 

В логах по адресу C:\Windows\Temp\Creatio\IT4IT MVP 2\0\Log\2021_07_16
ошибка не обнаружена.

Установлены соответствующие компоненты 

microsoft .NET CORE SDK 3.1.301
microsoft .NET FrameWork 4.7.2 SDK

Настройка проведа по инструкции.

Ошибка как в данном посте https://community.creatio.com/questions/error-compilation

Нравится

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

Дмитрий,

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

 

https://dotnet.microsoft.com/download/thank-you/net472-developer-pack

https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.402-windows-x64-installer

https://support.microsoft.com/en-us/help/4054531/microsoft-net-framework-4-7-2-web-installer-for-windows

Олег Нефедьев,

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

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

Добрый день

Возникла сложность в переносах строк из поля Notes при печати отчета в FastReport.

так выглядит в приложении

Так выглядит в БД, если делать выбор в текст

Обратываю в FastReport

Cell24.Text = ((String)Report.GetColumnValue("EPMAccountChk.EPMNotes"))
.Replace("<div>","")
.Replace("</div>","")
.Replace("strong","b")
.Replace("em","i");

Сама ячейка имеет значение свойства TextRenderType = HtmlParagraph

Получаю на выходе

В принципе как в БД, не придраться, Но не так как на экране.

Если отключить мои замены и свойство TextRenderType перевести в Default, то вообще получаю полное соответсвие БД

Если свойство TextRenderType оставить равным HtmlParagraph, и не делать замен, то получим:

Если свойство TextRenderType сделать равным HtmlTags, и не делать замен, то получим:

Вопрос. Как сделать отображение как на экране в приложении? Как избавится от лишних переносов?

Нравится

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

Вам нужно удалить спец символы это перенос строки и каретку, как правило они обозначаются одним из следующих способов:
\n\r - C#
CHAR(10) и CHAR(13) - SQL
#10#13 - делфи если память не изменяет.

Посмотрите, что у вас в fastreport используется и добавить replace спец символа в ваш код 

Литвинко Павел,

Это первое, что пробовал. Забыл написать об этом.

Ура! Нашел. Метод, "если не можешь найти что делать - пробуй все подряд" работает))

Начал заменять подряд все комбинации "\n\r", "\r\n", "\n", "\r". Нашел.  Это не \n\r как ожидалось, а просто \n. после первой и второй стоки \n\n, в конце просто \n. В итоге делаю следующее:

Cell24.Text = ((String)Report.GetColumnValue("EPMAccountChk.EPMNotes"))
	.Replace("<div>","")
	.Replace("</div>","")
	.Replace("strong","b")
	.Replace("em","i")
	.Replace("\n\n","<br>")
	.Replace("\n","");

и свойство TextRenderType = HtmlParagraph

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

После добавления в Конфигурации колонки (целое число) в объект с именем UsrMinTicketPrice в пакете Custom система не хочет сохраняться. Пишет:

Не удалось обновить структуру для схем:

UsrRating, UsrRating, UsrRating, UsrRating, UsrRating

Нравится

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

Возникла проблема с вызовом веб-сервиса из студии.  Возвращает ошибку 404. Пример сервиса:

 namespace Terrasoft.Configuration
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.ServiceModel.Activation;
    using Terrasoft.Core.DB;
    using Terrasoft.Web.Common;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UpsertContactService : BaseService
    {
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string GetTransformValue(string inputParam)
        {
            // Изменение значения входящего параметра.
            var result = inputParam + " changed!";
            return result;
        }
    }
}

Пример вызова:

HttpWebResponse authresponse = (HttpWebResponse)authRequest.GetResponse();
            var myRequest = HttpWebRequest.Create("https://мой сайт/0/ServiceModel/UpsertContactService.svc/GetTransformValue") as HttpWebRequest;
 
            myRequest.Method = "POST";
            myRequest.ContentType = "application/json";
            foreach (Cookie Cook in authresponse.Cookies)
            {
                myRequest.Headers.Add(Cook.Name, Cook.Value);
            }
            myRequest.CookieContainer = bpmCookieContainer;
 
            using (var requestStream = myRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requestStream))
                {
                    writer.Write(@"111");
                }
            }
            using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII))
                {
                    string s = reader.ReadToEnd();
                    Console.WriteLine(s);
                }
            }

Авторизация проходит успешно, БП получилось запустить. Как запустить сервис и получить от него ответ?

Нравится

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

Добрый день

Виталий, в статье на академии есть ответ https://academy.terrasoft.ru/docs/developer/back-end_development/config…

 

Ответ 404 верный, т.к. у вас нет такого сервиса. Вы создаете конфигурационный сервис, который вызывается по другому url.

 

А зачем в Header добавлять значения всех кук из аутентификации? Достаточно только BPMCSRF.

Во-вторых. Вызов под каким пользователем происходит? под портальным? Если да, то надо сервис добавить в список разрешенных для портальных - \папка приложения\Terrasoft.WebApp\SspServices\SspServiceList.txt

Добавить комментарий

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

происходит под админом, сайт в облаке, через постмен тоже 404.

Вот что в браузере пишет:

Добрый день

Виталий, в статье на академии есть ответ https://academy.terrasoft.ru/docs/developer/back-end_development/config…

 

Ответ 404 верный, т.к. у вас нет такого сервиса. Вы создаете конфигурационный сервис, который вызывается по другому url.

 

Артем Гура,

Да! То что нужно! Вот рабочий код:

HttpWebResponse authresponse = (HttpWebResponse)authRequest.GetResponse();
            var myRequest = HttpWebRequest.Create("https://mysite.com/0/rest/UpsertContactService/GetTransformValue") as HttpWebRequest;
 
            myRequest.Method = "POST";
            myRequest.ContentType = "application/json";
            myRequest.Headers.Add(authresponse.Cookies["BPMCSRF"].Name, authresponse.Cookies["BPMCSRF"].Value);
            myRequest.CookieContainer = bpmCookieContainer;
 
            using (var requestStream = myRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requestStream))
                {
                    writer.Write(@"{""inputParam"":""Test!""}");
                }
            }
            using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII))
                {
                    string s = reader.ReadToEnd();
                    Console.WriteLine(s);
                }
            }

И еще как авторизовался, может кому нужно будет:

var authRequest = HttpWebRequest.Create(@"https://mysite.com/ServiceModel/AuthService.svc/Login") as HttpWebRequest;
            authRequest.Method = "POST";
            authRequest.ContentType = "application/json";
            var bpmCookieContainer = new CookieContainer();
            authRequest.CookieContainer = bpmCookieContainer;
            using (var requestStream = authRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requestStream))
                {
                    writer.Write(@"{
                                ""UserName"":""Supervisor"",
                                ""UserPassword"":""Supervisor"",
                                ""SolutionName"":""TSBpm"",
                                ""TimeZoneOffset"":-120,
                                ""Language"":""Ru-ru""
                                }");
                }
            }

 

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

Доброго дня!

 

Из-за нестандартной логики по заполнению полей по умолчанию при добавлении записей в деталь приходится вызывать мини-форму вручную. При этом не происходит обновление грида -- запись появляется на детали только после обновления страницы. 

 

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

 

Исходный код прилагаю.

addRecord: function(typeColumnValue) {
    var config = {
	    recordId: Terrasoft.GUID_EMPTY,
		operation: Terrasoft.ConfigurationEnums.CardOperation.ADD,
		entitySchemaName: "Account",
		valuePairs: this.getAddMiniPageDefaultValues(),
		miniPageSchemaName: "AccountMiniPage",
	};
    this.openMiniPage(config);
},
 
getAddMiniPageDefaultValues: function() {
    var defaultValues = [];
    defaultValues.push({
        name: "Parent", 
        value: this.get("MasterRecordId")
    });
	defaultValues.push({
	    name: "Category",
		value: "dc199b6d-e948-4598-8a12-c38ca90428d8"
	});
	return defaultValues;
}

Благодарю за ваши ответы

Нравится

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

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

У вас деталь - это один модуль, а миникарточка - другой. Единственный вариант общения между модулями - это сообщения. И да, при  работе с этой миникарточкой вы всегда будете отправлять сообщение, а вот реагировать на него будет деталь только в том случае, если этот модуль сейчас загружен в системе (фактически, если он отображается на экране)

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

 

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

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

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

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

У вас деталь - это один модуль, а миникарточка - другой. Единственный вариант общения между модулями - это сообщения. И да, при  работе с этой миникарточкой вы всегда будете отправлять сообщение, а вот реагировать на него будет деталь только в том случае, если этот модуль сейчас загружен в системе (фактически, если он отображается на экране)

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