Добрый день.

Что за зверь такой этот multipart?

Помогите правильно выставить веб сервис в Creatio и написать запрос в Постмане. Надо одним запросом передать описание объекта для его создания и файл. Все что нашел это https://academy.terrasoft.ua/docs/7-17/developer/integrations_and_api/d… но я понимаю что тут идет речь о создании запроса в среде Creatio.

Нравится

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

Александр, 

про multipart вот пара ссылок:

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

https://docs.microsoft.com/ru-ru/exchange/troubleshoot/administration/multipart-mixed-mime-message-format

Creatio просто поддерживает его

 

Про передачу в одном запросе. Вы можете использовать все, что предоставляет вам .net. Как простой пример - это метод по приему POST запроса с параметрами. Часть параметров - информация о файле, а один - сам файл (тип параметра Stream)

Спасибо, Артем.

Также пытаюсь выгрузить в одном запросе информацию о файле и сам файл, получил ошибку "500System.ServiceModel.ServiceActivationException"

Отдельно FileService/GetFile работает, а как получить изнутри файл и упаковать в один запрос с информацией о файле? Делаю по аналогии с внешним запросом, ответ преобразую в BLOB, из него получаю stream а дальше конвертирую в Base64.

var url = "http://localhost:82/0/rest/FileService/GetFile/2eebaeaa-5ebb-8942-0a65-0c5987ab8508/2eeca28b-3553-4195-adef-ae70c56e46ca";
				var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
				httpWebRequest.ContentType = "application/json";
				httpWebRequest.Method = "GET";
 
				using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
				{
					streamWriter.Flush();
					streamWriter.Close();
				}
 
				var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
				using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
				{
					string contents = streamReader.ReadToEnd();
                    byte[] byteArray = Encoding.UTF8.GetBytes(contents);
					MemoryStream stream = new MemoryStream(byteArray);
                    result = stream;					
				}

в запрос втавляю так

byte[] byteArray = Encoding.UTF8.GetBytes("");
MemoryStream newfilestream = new MemoryStream(byteArray);                    
GetFile(newfilestream);
takemessage.file = Convert.ToBase64String(newfilestream.ToArray());

 

А если по-сути, то при попытке прописать тип параметра Stream получил ошибку

The type or namespace name 'stream' could not be found (are you missing a using directive or an assembly reference?)

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

Добрый день.

Мне надо создать эндпоинт для загрузки файлов. Есть FileApiService, он работает, но очень громоздкий по количеству параметров которые надо передавать вместе с файлом. Пытаюсь создать свой класс, в котором принять только файл и Id экземпляра объекта, а дальше уже считать размер и заполнять другие параметры для передачи в FileApiService, но не могу понять как передать файл, в переменную какого типа.

Нравится

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

Добрый день.

Александр, вам нужно использовать stream

Спасибо.

Вот я и пытаюсь сделать stream но не знаю как правильно

Вот здесь https://academy.terrasoft.ua/docs/7-17/developer/integrations_and_api/d… вроде как написан пример ПОЛУЧЕНИЯ ДАННЫХ а идет пример отправки из вне (Постман, например)



 

Пожалуйста, если не сложно, как правильно принять stream и создать веб-сервис? Можно передать stream в JSON?

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

Для передачи фото в JSON, нужно конвертировать его в Base64.

Mykhailo Storozhuk,

Спасибо.

Конвертировал фото на 

https://www.base64-image.de/

Теперь возникает ошибка 

"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "

Вот код как пытаюсь сделать

byte[] byteArray = Convert.FromBase64String(item.file);
                Stream stream = new MemoryStream(byteArray);
				var size = Convert.ToInt32(stream.Length);
				var insertActivityFile = new Terrasoft.Configuration.UsrMobileCaseMessageFile(UserConnection);
        		insertActivityFile.Id = Guid.NewGuid();
        		insertActivityFile.SetDefColumnValues();
        		insertActivityFile.Name = "Name.txt";
        		insertActivityFile.SetStreamValue("Data", stream);
        		insertActivityFile.Size = size;
        		insertActivityFile.TypeId = new Guid("529BC2F8-0EE0-DF11-971B-001D60E938C6");
        		insertActivityFile.Version = 1;
        		insertActivityFile.UsrMobileCaseMessageId = idMC;
        		insertActivityFile.Save();

 

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

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

Нравится

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

Дмитрий, здравствуйте!



С версии 7.17.1 была изменена лога уведомлений.

Ранее уведомления получал только пользователь, которого упомянули в сообщении или поставили отметку "Мне нравится".



С версии 7.17.1 если пользователь подписан на обновление ленты по записи, то он будет получать уведомления о всех комментариях в ленте - точечно можно отписаться от ленты через "Действие" на странице редактирования "Отписаться от обновлений ленты" Чтобы полностью отключить функционал в системе - достаточно деактивировать процесс "Notify of new social messages". Если нужно управлять доступностью функционала на уровне пользователей - надо добавить функциональность как фичу для нужного пользователя и выключить "NotifyOfNewSocialMessages".





P.S. Пользователь подписывается на обновлении ленты записи при любом взаимодействии с этой записью.

Дмитрий, здравствуйте!



С версии 7.17.1 была изменена лога уведомлений.

Ранее уведомления получал только пользователь, которого упомянули в сообщении или поставили отметку "Мне нравится".



С версии 7.17.1 если пользователь подписан на обновление ленты по записи, то он будет получать уведомления о всех комментариях в ленте - точечно можно отписаться от ленты через "Действие" на странице редактирования "Отписаться от обновлений ленты" Чтобы полностью отключить функционал в системе - достаточно деактивировать процесс "Notify of new social messages". Если нужно управлять доступностью функционала на уровне пользователей - надо добавить функциональность как фичу для нужного пользователя и выключить "NotifyOfNewSocialMessages".





P.S. Пользователь подписывается на обновлении ленты записи при любом взаимодействии с этой записью.

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

Добрый день!



Два вопроса по таймеру в процессах:



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



2. Можно ли задавать время запуска в системных настройках?

Нравится

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

Настройки для работы системы берутся из настроек ОС где устанавливается система и настроек часового пояса в ней. Так как в большинстве случаев администраторы ОС пренебрегают настройками часового пояса при установке системы, то я бы посоветовал обратить внимание для начала туда. А настройка часового пояса по умолчанию производится в системной настройке "Часовой пояс по умолчанию", но она все же больше сделана для настройки работы календаря и связанных с ней частей системы.

А зачем тогда настройка часового пояса в стартовом сигнале процесса Timer?

 

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

Добрый день!

Можно задавать время в формате UTC для таймера, тогда вопросов с часовыми поясами вообще не будет.

 

Подобные примеры доступны в статьях на академии: 

https://academy.terrasoft.ua/docs/user/biznes_processy/primery_nastrojk…

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

Как лучше всего сделать вход портального юзера с помощью авторизации в facebook? 

Нравится

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

Андрей, здравствуйте!



На текущей момент настроить авторизацию в системе с помощью Facebook нет возможности. Доступные способы аутентификации в приложении описаны в статье по ссылке: https://academy.terrasoft.ua/docs/user/ustanovka_i_administrirovanie/up…

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

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

Содержимое докер файла стандартное:

 

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

    apt-get -y --no-install-recommends install \

    libgdiplus \

    libc6-dev && \

    apt-get clean all && \

    rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

apt-get -y --no-install-recommends install \

libgdiplus \

libc6-dev && \

apt-get clean all && \

   rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]



P.S. dotnet 3.1 установлен, что может быть не так?



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

Нравится

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

Используем дополнение "Excel reports builder".

После перехода на версию 7.17.2 перестали загружается файлы в Excel отчёты.

Кто-нибудь сталкивался с данной проблемой, есть варианты решения?

Нравится

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

Используем дополнение Excel reports builder.

После перехода на версию приложения 7.17.2 перестали загружаться файлы в Excel отчёты.

Кто-нибудь уже сталкивался с данной проблемой, есть варианты решения?

Нравится

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

Добрый день!

 

Ответственная команда исправила ошибку с загрузкой файлов шаблонов. Обновленный пакет уже доступен на Creatio Marketplace.

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

Добрый день.

 

Очень нужна помощь. Сделал страничку редактирования

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

Но система нам все отображает в таком виде:

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

Как переделать на такой вид?

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

 

Меняем в браузере значения у

 .label-wrap {
    min-widht:60em;
    max-widht:60em;
}

и получаем как хочется. Теперь сделаю свой клиентский модуль и вкладке Less пишу свой класс

.usr-label-wrap {
	min-wight:60em;
	max-wight:60em;
}

Добавляю в схему

define("UsrCustomPage", ["css!UsrCustomCSS", "CommonCSSV2"], function() {

В блоке diff пишу (пробую по разному)

{
	"operation": "insert",
	"name": "UsrRisk_01",
	"values": {
		wrapClass:["usr-label-wrap"],
		"layout": {
			"colSpan": 12,
			"rowSpan": 1,
			"column": 0,
			"row": 0,
			"layoutName": "QuestionsTabLabelGridLayout"
		},
		"bindTo": "UsrRisk_01",
		"labelConfig": {
			"caption": {
				"bindTo": "Resources.Strings.UsrRisk_01_LabelCaption"
			}
		},
		"enabled": true
	},
	"parentName": "QuestionsTabLabelGridLayout",
	"propertyName": "items",
	"index": 0
},
{
	"operation": "insert",
	"name": "UsrRisk_09",
	"values": {
		classes:{
			labelClass:["usr-label-wrap"]
		},
		"layout": {
			"colSpan": 12,
			"rowSpan": 1,
			"column": 12,
			"row": 0,
			"layoutName": "QuestionsTabLabelGridLayout"
		},
		"bindTo": "UsrRisk_09",
		"labelConfig": {
			"caption": {
				"bindTo": "Resources.Strings.UsrRisk_09_LabelCaption"
			}
		},
		"enabled": true
	},
	"parentName": "QuestionsTabLabelGridLayout",
	"propertyName": "items",
	"index": 1
}

Но в итоге Ничегошеньки....

В идеале бы конечно добиться такого вида

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

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

Нравится

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

Добрый день.

 

Странно что у вас не получилось добавить свой CSS. Возможно где-то есть более приоритетный стиль от которого и берётся класс .label-wrap.

Для пробы добавил новое текстовое поле на страницу активности, прикрутил к нему css и всё получилось.

Модуль с css:

.usr-base-edit-input {
    width: 30em;
}

Замещающая модель страницы активности:

define("ActivityPageV2", ["css!UsrNewCss"], function() {
    return {
        entitySchemaName: "Activity",
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "parentName": "Header",
                "propertyName": "items",
                "name": "UsrMeetingPlace",
                "values": {
                  	wrapClass:["usr-base-edit-input"],
                    "caption": "MeetingPlace",
                    "layout": {
                        "column": 0,
                        "row": 5,
                        "colSpan": 12,
                        "rowSpan": 1
                    }
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

Возможно это вам поможет.

Заработало только после того как в модуле с CSS указал класс как 

.usr-label-wrap .label-wrap{
	min-wight:60em;
	max-wight:60em;
}

 

ну осталась проблема как запретить наезд двух надписей от checkbox друг на друга при уменьшении масштаба окна

Попробуйте добавить строчку в свой css по типу "width: XX%;"

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

Добрый день!

 

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

 

Хочу сделать логгирование, используя событийный слой. Можно ли с Entity вытянуть пользователя, что вызывает событие?

 

Спасибо!

Нравится

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