Добрый день!

Возник такой вопрос, если пользователь добавил к примеру к себе в аккаунт фотографию, данная фотография находится в БД, каким образом можно скачать фотографию через c# на локальную машину с удаленного сервера? 



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



На сайте помимио экспорта в excel файлы текста нашел только экспорт настроек(css, js ..), есть ли такая возможность скачать информацию вообще? 

Нравится

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

В базе они хранятся в таблицах вроде ContactFile, AccountFile и т.д.

Скачать можно точно так же, как это делает браузер по нажатию пользователя: послать GET на адрес вроде:

http://адрес_сайта/0/rest/FileService/GetFile/e9eafee9-c4e4-4793-ad0a-003bd2c6a9b4/935b6ecb-3509-4c8a-bc7e-03ab0661da24

Тут первый GUID — ID схемы ContactFile (видно в URL, если её открыть в дизайнере), второй — ID записи в таблице.

В ответ придёт сам файл.

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

 

В базе они хранятся в таблицах вроде ContactFile, AccountFile и т.д.

Скачать можно точно так же, как это делает браузер по нажатию пользователя: послать GET на адрес вроде:

http://адрес_сайта/0/rest/FileService/GetFile/e9eafee9-c4e4-4793-ad0a-003bd2c6a9b4/935b6ecb-3509-4c8a-bc7e-03ab0661da24

Тут первый GUID — ID схемы ContactFile (видно в URL, если её открыть в дизайнере), второй — ID записи в таблице.

В ответ придёт сам файл.

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

 

Александр, большое спасибо! 

В данном случае "rest/FileService/GetFile" это имеющийся сервис у bpm или собственный сервис? 

engineer7 пишет:

это имеющийся сервис у bpm

Да. Это базовый сервис работы с файлами. 

Также, если надо будет дёргать картинки из профилей контактов/контрагентов, то придётся лезть в местную "помойку" с изображениями:

[адрес сайта]/img/entity/hash/SysImage/Data/[id записи из SysImage]

Данила, понял Вас, большое спасибо!

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

Добрый день, коллеги, поделитесь решением вопроса:

  1. Создал справочник 
  2. Создал модуль унаследованный от "Конфигурационный раздел базового справочника ( UIv2 )"
  3. Удалил унаследованный грид, и определил грид "зебра".
  4. Добавил фильтр по датам, по аналогии как в активностях

Вопрос: подскажите, метод добавления расширенного фильтра, по аналогии как и в разделах?

Нравится

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

Тут похожий вопрос решается созданием страницы, унаследованной от страницы раздела с некоторыми доработками.

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

Добрый день!

В процессе обновления с версии 7.10.0 на версию 7.10.1 произошла ошибка:

Executing SQL Script: tsp_CreateClusteredPrimaryKeyIndexes.sql

ERROR:An exception occurred while executing a Transact-SQL statement or batch.

   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)

   at bpmOnlineUpdaterCLI.ScenarioStepInvokeSQL.ExecuteSqlScript(String connectionString, String query)

   at bpmOnlineUpdaterCLI.ScenarioStepInvokeSQL.Execute()

   at bpmOnlineUpdaterCLI.UpdateScenario.ExecuteAllSteps()

 

В папке с логами (Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Log) по этой ошибке ничено нет.

 

При повторном запуске обновления (бд не откатывалась) обновление завершилось.

Насколько критично что происходила эта ошибка, если оставалось выполниться запросам

Executing SQL Script: DropOldViews.sql

Executing SQL Script DropOldViews.sql completed successful

Нравится

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

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

Направьте на support@bpmonline.com все логи обновления <app>\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Log

И результат выполненного скрипта на стороне БД после неуспешного обновления <app>\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\InstallPackages\Scenario\CreateClusteredPrimaryKeyIndexes.sql

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

Добрый день, коллеги. 

Имеется стандартный справочник с кастомной страницей реестра. 

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

Подскажите метод реализации.

 

Нравится

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

А можете перефразировать, что именно вы хотите? Не могу понять, что вы хотите сделать

Наверное лучше я опишу все свои действия, что бы лучше понять мою цель:

1. Создал вьюху на SQL

2. Создал объект в БПМ с именем точь-в-точь как и в п.1

3. Накидал столбцов в объекте из п.2 точь-в-точь как и в п.1

4. В свойствах объекта из п.2 ("ВСЕ") поставил птЫчку "Представление в базе данных"

5. Получил справочник в BPM с наполнением данных из вьюхи п.1. Страница отображения справочника - базовая, а значит с возможностью редактировать поля и с отображением всех кнопок типа "Добавить"

6. Решил сделать "по-феншую" - создал свою страницу с параметром "Родительский объект" = "Конфигурационный раздел базового справочника (UIv2)"

7. Удалил кнопку "Добавить"

8. Определил цвет отображения кнопки "Закрыть" - "Terrasoft.controls.ButtonEnums.style.BLUE"

9. Удалил унаследованный DataGrid

10. Определил свой DataGrid

    {

        "operation": "insert",

        "name": "DataGrid",

        "parentName": "DataGridContainer",

        "propertyName": "items",

        "values": {

            "itemType": Terrasoft.ViewItemType.GRID,

            "listedZebra": true,

            "activeRow": {"bindTo": "ActiveRow"},

            "collection": {"bindTo": "GridData"},

            "isEmpty": {"bindTo": "IsGridEmpty"},

            "isLoading": {"bindTo": "IsGridLoading"},

            "primaryColumnName": "Id",

            "sortColumn": {"bindTo": "sortColumn"},

            "sortColumnDirection": {"bindTo": "GridSortDirection"},

            "sortColumnIndex": {"bindTo": "SortColumnIndex"},

            "needLoadData": {"bindTo": "needLoadData"}

        }

    }

Суть вопроса: данная страница имеет Фильтр с одной возможностью "Добавить условие". 

Интересует возможность добавления "Перейти в расширенный режим" или отображение фильтра по датам, как это реализовано в разделе "Активности".

Пытался в п.6. "Родительский объект" = "Базовая схема раздела (NUI)" - получаю необходимый результат, но сама страница некорректно себя ведет при отображении данных. Видимо там много чему нужен "remove", 

однако недостаточно информации чему именно...

Терещенко Алексей,

Попробуйте добавить фильтры как в Активности:

			init: function() {
				this.callParent(arguments);
				this.initFixedFiltersConfig();
			},
			initFixedFiltersConfig: function() {
				var fixedFilterConfig = {
					entitySchema: this.entitySchema,
					filters: [
						{
							name: "PeriodFilter",
							caption: this.get("Resources.Strings.PeriodFilterCaption"),
							dataValueType: this.Terrasoft.DataValueType.DATE,
							startDate: {
								columnName: "UsrDate", //Поле по которому хотите сделать фильтр дат
								defValue: this.Terrasoft.startOfWeek(new Date())
							},
							dueDate: {
								columnName: "UsrDate", //Поле по которому хотите сделать фильтр дат
								defValue: this.Terrasoft.endOfWeek(new Date())
							}
						}
					]
				};
				this.set("FixedFilterConfig", fixedFilterConfig);
			},

 

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

Подскажите в какую часть кода необходимо добавить данный код? в 

methods?

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

Отлично!!! Спасибо большое! Получилось!

И все таки - возможность добавления "Перейти в расширенный режим" - актуально. Может знает кто как это реализовать?

Тут похожий вопрос решается созданием страницы, унаследованной от страницы раздела с некоторыми доработками. И при открытии лукапа показывает окно раздела, на который он ссылался.

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

Добрый день!

На странице настройки синхронизации с LDAP одно из обязательных полей [Уникальный идентификатор пользователя]. По умолчанию заполняется значением ObjectSid. У меня возник вопрос: значения данного атрибута из AD хранятся где-нибудь в системе BPM Online? Если да, то в каком объекте и в каком поле. Насколько я понял, данные о пользователе AD хранятся в системе в объекте LDAPElement.

Нравится

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

Добрый день, Дмитрий.

Верно, это значение хранится в таблице LDAPElement - колонка LDAPEntryId.

Антон Малий,

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

Добрый день, Дмитрий.

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

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

Добрый день!

Интересует несколько вопросов, связанных с использованием web-сервисов:

1) Доступна ли  basic авторизация  для ProcessEngineService.svc а так же для кастомных конфигурационных сервисов? 

2) И если 1- да, то как правильно передать параметры авторизации?

Использую вебсервис так:

http://site/0/ServiceModel/ProcessEngineService.svc/RunProcess



{"parameterValues":

[

{"name":"Title","value":"TestValue1"},

{"name":"Description","value":"TestValue2"},

{"name":"Action","value":"TestValue3"}

],

"schemaUId":"AF7E3F40-0EFA-431A-94AA-4DEEFFE16E59",

"schemaName":"UsrCaseIntegrationProcess"}

 

Нравится

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

С авторизацией разобрался

Появился новый вопрос - как вернуть результат выполнения процесса. Как проавильно прописать в POST запрос ResultParameterName

Бакалов Павел Вячеславович,

Убедитесь, что процесс компилируемый, потому что получить значение ResultParameterName можно только для компилируемого процесса.

Примеры запроса есть тут: https://academy.terrasoft.ru/documents/technic-sdk/7-12/web-servis-proc…

 

Tsopa,

Да, процесс компилируемый. Руководствуясь данной инструкции удалось выполнить процесс, передать параметры и получить результат используя метод GET. Но в инструкции написано, что так же можно использовать метод POST. Но у меня не вышло это сделать - процесс выполнился, но параметры в него не попали и результат соответственно не вернулся. Нет ли примеров POST запросов к методу Execute ?

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

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

Бакалов Павел Вячеславович,

POST запрос к методу Execute  не рекомендуется отправлять, поскольку  операция устарела, вместо этого стоит отправлять запрос /RunProcess.

Но если необходимо отправить POST запрос к Execute это можно сделать следующим образом: 

schemaName - эта название схемы процесса, который необходимо запустить

https://[site]/0/ServiceModel/ProcessEngineService.svc/[schemaName]/Execute

пример Header: 

Content-Type: application/json

BPMCSRF: BgsjByc16fsEZfuAr/CxDO

Cookie: BPMLOADER=vuhtzmo2wh2mxgb1amggorf2; .ASPXAUTH=FFF4F....; BPMCSRF=BgsjByc16fsEZfuAr/CxDO;

пример body: 

{}

 

как Вы решили проблему Basic авторизации?

См. тут. А вообще, базовую не рекомендуют, вот её сравнение с Cookies.

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

Добрый день!

На кастомной странице редактирования в БП разместил обычную деталь с карточкой редактирования (наследует от Базовая схема детали с реестром). На onRender карточки повесил метод updateDetails(). Однако при добавлении записи в деталь обновления не происходит. Добавленная запись отображается в гриде только после настройки колонок. Подскажите, пожалуйста, как решить проблему обновления грида детали.

Нравится

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

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

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

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

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

subscriber пробовали повесить?

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

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

Пробовал, не попадает в отладчике в метод, указанный в subscriber.

Вот код добавления детали, методы filterMethod и subscriber. Подскажите пожалуйста, возможно, есть идеи что не так. 

"DepositInFinApplicationDetail": {
	"schemaName": "snGoldDepositDetail",
	"filter": {
		"masterColumn": "Id",
		"detailColumn": "Id"
	},
	"filterMethod": "goldDetailFilter",
	"subscriber": {
		"methodName": "updateGoldDetail"
	}
},
 
goldDetailFilter: function() {
	var finApplication =  this.get("Id");
	var goldType = ""
	var filterGroup = new this.Terrasoft.createFilterGroup();
	filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
	filterGroup.add("DepositFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.EQUAL, "[snDepositInFinApplication:Deposit:Id].FinApplication.Id", finApplication));
	filterGroup.add("DepositTypeFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.EQUAL, "[snDepositInFinApplication:Deposit:Id].Deposit.Type.Id", this.goldTypeId));
	return filterGroup;
},
 
	updateGoldDetail: function() {
				var detailId = this.getDetailId("DepositInFinApplicationDetail");
				this.sandbox.publish("UpdateDetail", {
					reloadAll: true
				}, [detailId]);
	},

 

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

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

Александр, дополнительная логика нужна для реализации бизнес-логики.

Бизнес-логику можно реализовать и на уровне объекта, серверной логикой.

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

Добрый день.

Процесс -> Задание сценарий содержит некий код:

if (UserConnection.GetIsFeatureEnabled("EmailMessageMultiLanguage"))

{

    некий код...

}

else

{

    некий код...

}

При запуске данного процесса всегда отрабатывает ветка "else".

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

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

Нравится

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

Это Механизм отключения функциональности Feature Toggle. По ссылке написано, как менять значение пользовательскими средствами и где оно хранится в базе.

Конкретно по EmailMessageMultiLanguage на странице включения параметров нет никаких пояснений. Но, очевидно, если его включить, то тут и в других местах выполнение пойдёт по верхней ветке.

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

Спасибо, действительно пройдя по адресу [Адрес приложения]/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

попал на некую страницу добавления функциональности и возможностью вкл/выкл этой функциональности. К большому удивлению запись с кодом "EmailMessageMultiLanguage" я не обнаружил. Теперь понятно, почему отрабатывает ветка else.

У меня на тестовом сайте 7.12 Sales Enterprise она есть, выключена. Возможно, зависит от версии.

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

В замещающий модуль контрагента AccountPageV2 добавил локализованную строку.

Но я не вижу ее в разделе переводы, поиск делаю по ключу.Скрин. Локализ строка SalesHistoryTabCaption. Во всем списке не нашел свою.

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

Нравится

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

Не видит именно новые лок. строки в моем пакете, базовые есть. Текущий пакет верно установлен. В systranslation нет нужной строки.

Для обычной страницы, замещенной от базовой, лок. строки все есть.

Здравствуйте, Евгений!

Рекомендуем Вам обратиться с данным вопросом в службу технической поддержки  -  support@terrasoft.ru Для детального анализа данного кейса.

Я написал, но ответа нет. они как долго отвечают?

Попробуйте перевести в вашей схеме AccountPage, саму локализованную строку так:

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

А если перевод на французский, например?

 

Евгений В. пишет:

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

А если перевод на французский, например?

Перейдите в раздел Языки, из дизайнера системы. Добавьте а Активируйте нужный вам язык. 

Остальное по аналогии.

На примере Французского, скриншоты ниже. 

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

Сделал аналогично скринам, но поле в лок. строке на франц. не появляется.

Евгений В. пишет:

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

Сделал аналогично скринам, но поле в лок. строке на франц. не появляется.

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

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

Спасибо, появилось.

Остался вопрос, почему его нет в стандартном разделе Переводы?

Евгений В.,

Здравствуйте, Евгений!

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

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

Добрый день!

Реализовал объект залог в заявке, у которого может быть 2 типа залога: Депозит и Недвижимость. Для каждого типа создал свою деталь, в котором выводятся только записи соотв. типа. Мне нужно, чтобы при редактировании записи из детали открывалась страница с типом залога, который в детали. Создал две разные страницы для редактирования сущности.

Далее выполнил привязку в таблицах SysDetail, SysModuleEntity, SysModuleEdit.

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

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

Нравится

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

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

Либо же сделать две полностью разных детали, информация с которых хранится в двух отдельных объектах и таблицах БД.

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