Коллеги, добрый день! 



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



Хочется использовать для этого Базу знаний, но работать в ней с текстами и графикой совершенно не удобно.



Подскажите, может быть есть какие-то дополнения или другие способы, которые могут расширить функционал БЗ? Особенно интересует возможность работы с текстами в HTML (форматирование текста, размер картинки и тд).

Нравится

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

Андрей, добрый день!

На данный момент на странице записи базы знаний присутствует специальное поле с HTML форматированием, которое частично поддерживает работу с текстами в HTML (можно устанавливать разные шрифты, изображения). В приложении bpm’online для реализации такого поля используется CKEditor, это сторонняя разработка. Функционал базовых возможностей данного поля реализован в ядре приложения. 

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

Одеяненко Юлия,

Здравсвуйте! А где найти это специальное поле? Не вижу его у себя в редакторе.

На счет функционала: изменения размера картинок, работа с таблицами, якоря.

Andrey Aleksandrov,

имелось в виду поле, над которым специальная панель со шрифтами, списками, расположением текста и т. п. (на скриншоте в рамочке - 

http://prntscr.com/k0bv1u).

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

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

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

Добрый день.

Мы обновились на тестовой платформе до версии bpmonline 7.12.1. Когда я захотел обновить на тестовой платформе пакет своей разработки из SVN, то получил сообщение об ошибке " Невозможно установить пакет "InhouseDeNovoSharepoint" версии "1.0.0.1", так как зависимый пакет "SalesEnterpriseSoftkey_RUS" версии "7.8.0" не найден ни в одном из хранилищ системы контроля версий". Я посмотрел и, действительно, после обновления на тестовой платформе пропал пакет SalesEnterpriseSoftkey_RUS 7.8.0. Вместо него появился пакет SalesEnterpriseSoftkey_ENU 7.8.0. Скажите, это было как-то некорректно выполнено обновление на тестовой платформе или это ожидаемое поведение на версии 7.12.1? Заранее спасибо за ответ.

Нравится

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

Игорь, попробуйте установить пакет из svn на версию 7.12.0, а только потом обновите(уже с установленным пакетом). Нам такое помогло.

Добрый день, Игорь.

Есть два варианта решения проблемы с привязкой:

1. Для устранения ошибки в дескрипторе пакета "descriptor.json" необходимо изменить "SalesEnterpriseSoftkey_RUS" на "SalesEnterpriseSoftkey_Obsolete".

2. Необходимо обновить среду разработки до версии 7.12.0, после чего закоммитить в svn конкретный пакет, чтобы пакет SalesEnterpriseSoftkey_RUS переименовался в SalesEnterpriseSoftkey_ENU. После этого на облако удаётся подтянуть изменения из SVN.

Сидоров Александр Валерьевич,

 большое спасибо за Ваш ответ.

Антон Малий,

большое спасибо за Ваш ответ.

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

Добрый день, стоит задача вывести/встроить в карточку Звонка Клиента, аудио плеер для проигрывания аудио записи звонка разговора. На данном этапе в карточке звонка есть поле где указанно ссылка местоположения записи, и если пройти по данной ссылке то начинается автоматическое скачивание аудио фаила на компьютер и далее можно прослушать разговор с клиентом. Формат аудио фаила - *.mp4. Прикрепляю фото карточки звонка, отметил строку с ссылкой.

Запись звонка выполняется сторонним сервисом установленным на мобильном телефоне, на  Андроид , который (сервис) интегрирован с bpm online, и далее Сервис (сторонний) после завершения Звонка на мобильном телефоне, генерирует данную ссылку - место хранения аудио фаила (на облачном хранилище), и в итоге передает ее в bpm online.

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

Тестируем вариант вывести Аудио плеер по средством HTML в BPM, но пока не получилось, пробовали вот так (может кто подправит или добавит):

{

    "operation": "insert",

    "parentName": "Header",

    "name": "AudioPlayer",

    "propertyName": "items",

    "values": {

        "itemType": Terrasoft.ViewItemType.CONTAINER,

        "generator": function() {

            return {

                "selectors": {

                    "wrapEl": "#AudioPlayer",

                    "iframeEl": "id_AudioPlayer"

                },

                "className": "Terrasoft.HtmlControl",

                "html": "
                "src=\"\" type=\"audio/mp4\" />"

            };

        },

        "layout": {

            "colSpan": 12,

            "rowSpan": 1,

            "column": 0,

            "row": 0

        }

    }

}

generateAudioPlayer: function(audioUrl) {

    if (audioUrl.length >= 12) {

        var audioSource = document.querySelector("Source");

        if (audioSource) {

            audioSource.src = audioUrl;

            var audioBlock = document.querySelector("audio");

            audioBlock.style = "style=\"display:block;\"";

        }

    }

}

onEntityInitialized: function() {

    this.callParent(arguments);

 

    var callAudioUrl = ""; //Ссылка на файл звонка

    this.generateAudioPlayer(callAudioUrl);

}

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

Нравится

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

Можно сделать кнопку. Пример реализации в ContactPageV2:

define("ContactPageV2", [], function() {
	return {
		entitySchemaName: "Contact",
		methods: {
			onRecordPlayerClick: function() {
				Ext.getCmp("ContactPageV2AudioPlayerComponent").play();
			},
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "PlayRecordButton",
				"parentName": "GeneralInfoTab",
				"propertyName": "items",
				"index": 0,
				"values": {
					"itemType": Terrasoft.ViewItemType.COMPONENT,
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.GREEN,
					"classes": {"textClass": ["audio-player-button"]},
					"caption": "Прослушать",
					"click": {"bindTo": "onRecordPlayerClick"},
					"layout": {
						"colSpan": 12,
						"column": 0,
						"rowSpan": 1,
						"row": 1
					}
				}
			},
			{
				"operation": "insert",
				"name": "AudioPlayer",
				"parentName": "GeneralInfoTab",
				"propertyName": "items",
				"index": 1,
				"values": {
					"itemType": Terrasoft.ViewItemType.COMPONENT,
					"className": "Terrasoft.AudioPlayer",
						"selectors": {"wrapEl": "#AudioPlayer"},
						"sourceUrl": "https://www.computerhope.com/jargon/m/example.mp3"
				}
			},
 
..............

 

Я делаю проще. 

1) В diff вписываю контейнер

{
	"operation": "insert",
	"name": "AudioContainer",
	"values": {
		"afterrerender": {
			"bindTo": "prepareCallRecord"
		},
		"afterrender": {
			"bindTo": "prepareCallRecord"
		},
		"id": "AudioContainer",
		"visible": true,
		"itemType": 7
	},
	"parentName": "CallPageGeneralBlock",
	"propertyName": "items"
}

2) После его отрисовки вставляю туда дефолтный плеер

prepareCallRecord: function() {
	//вытаскиваем url записи
	this.setPlayer(url);
},
setPlayer: function(url) {
	var element = document.createElement("audio");
	element.addEventListener("click", function(e) { e.stopPropagation(); }, false);
	element.autoplay = false;
	element.controls = true;
	element.src = url;
	element.type = "audio/mpeg";
	actionsDiv.appendChild(element);
}

 

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

Всем привет!

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

Нравится

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

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

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

По части отображения: добавить свой контейнер в фильтры.

Вот пример для добавления галочки в раздел фильтров:

{
	"operation": "insert",
	"name": "CustomContainer",
	"parentName": "LeftGridUtilsContainer",
	"propertyName": "items",
	"index": 0,
	"values": {
		"id": "CustomContainer",
		"itemType": this.Terrasoft.ViewItemType.CONTAINER,
		"items": [],
                "wrapClass": ["filters-container-wrapClass"]
	}
},
{
	"operation": "insert",
	"name": "CustomFlag",
	"parentName": "CustomContainer",
	"propertyName": "items",
	"values": {
		"caption": {
			"bindTo": "Resources.Strings.CustomFlagCaption"
		},
		"bindTo": "CustomAttribute",
		"controlConfig": {
			"className": "Terrasoft.CheckBoxEdit",
			"checkedchanged": {
				"bindTo": "onCustomFlagChanged"
			}
		}
	}
}

UPD: Точно, ещё для того, чтобы фильтр применялся после изменения фильтра в разделе необходимо в приведённом выше примере в методе onCustomFlagChanged инициировать обновление реестра (this.reloadGridData();).

Так же на момент вызова метода getFilters аттрибут CustomAttribute не изменял своего значения, поэтому был введён новый аттрибут, значение которого менялось так же в методе onCustomFlagChanged.

И, есть вероятность, что придётся помучиться со стилями для того, чтобы фильтр отображался адекватно, при необходимости могу поделиться кодом опять-таки для примера выше.

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

Всем привет. Помогите разобраться.

Есть продукт с двумя языками: RU, EN. По умолчанию RU.

Создал пакет, добавил локализацию для 2-х языков, выгрузил в пакет. Локализация для системных настроек задается в Sql-скрипте для 2-х языков.

Проблема. При установке пакета в приложение, где стоит EN язык по умолчанию,(но RU присутствует) нету заголовков для EN языка:

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

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

Если поменять язык на Ru  то все заголовки есть.

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

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

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

 

Нравится

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

А вы в "Данные" добавили ваши переводы и системные настройки?

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

Скорее всего локализации некорректно привязаны к пакету, либо не привязаны вообще. Посмотрите статью на Академии, посвященную привязке даннных: https://academy.terrasoft.ru/documents/technic-sdkmp/7-12/privyazka-dan…

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

Доброго времени суток. 

В данных прикреплены и системные настройки, и их значения + после установки данных пользовательским скриптом происходит вставка в таблицы типа: "Sys{table}Lcz". Данные с русской локализацией есть, с английской нет.

 

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

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

Добрый день, настроил интеграцию веб сервиса и сейчас настраиваю бизнес процесс по данному сервису, а именно запись всех детали по совершенным входящим и исходящим звонкам через мобильный телефон, и привязка всех этих данных к Детали Звонок в Bpm Online. 

Сам вопрос состоит в том что - все данный которые высылает веб сервис являются " Тип Данных Текст", и только в этом формате они могут попасть в bpm online. К письму прикрепляю скриншот авто генерирующей страницы данных в бизнес процессе , который показывает все данные с веб сервиса при одном запросе (то есть данные одного звонка). Без труда по бизнес процессу в Детали Звонок заполнил Данные - "Номер от" и "Номер Кому", по скольку эти поля в bpm online " строковые (текстовые) как и в веб сервисе, но к примеру:

1. Как в бизнес процессе добавить в детали Звонок, в Справочном Поле "Направление звонка", где есть варианты "Входящий" и "Исходящий", если Веб сервис выдает направление звонка в виде Тип Данных Текстового поля (строковое) в двух вариантах: "1" - это исходящий звонок и "0" - это входящий звонок. Как я понимаю это можно сделать по идее через "Условный поток"  или элемент бизнес процесса "Формула", где по видимому логика на подобие "если Направление Звонка в Веб Сервисе == "1", то далее поток идет в элемент процесса Добавить Данные в Деталь звонок и заполняем там Направление Звонка "Исходящий". К сожалению заполнив в условном потоке условие: 

[#Мои Звонки 1.napravlenie_zvonka#]=="1"  

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

2. Необходимо чтоб веб сервис вызывался каждые 3-5 секунд, чтоб синхронизировать звонки с веб сервиса, как решение нашел пока только запуск бизнес процесса через элемент "Начальное Событие Стартовый Таймер", но там минимальное значение 1 мин, то есть бизнес процесс запускается не чаще чем каждые 1 мин, как реализовать начало бизнес процесса (запрос данных с веб сервиса) каждые 3-5 секунд

3. Веб сервис выдает в текстовом формате тип данных (как и все данне) "Дату Звонка" в виде тип данных текст - набор цифр (визуально для нас), а для системы получается в виде текста (в сриншоте видно) пример:

Дата Звонка: 15218316845

Представитель веб сервиса Мои Звонки, сказал:

"по дате звонка - это дата/время в формате unix timetamp (количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года), стандартный формат для передачи дат в числе .."

Вопрос состоит в том как эти данные которые попадают в bpm online в виде Тип Данных Текст преобразовать в Тип Данных Время в формате bpm online и далее чтоб отрабатывался элемент бизнес процесса - Добавить Данные в Деталь звонок и заполнилось поле " Дата Начала", " Дата Завершения" ... где данные поля заполняются/имеют Тип Данных Дата и Время.

Спасибо

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

Нравится

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

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

Пример как решить проблему с UTC тоже ниже привел.



Запускать БП можете через крон тригер, настроив его так, как вам нужно, пример ниже.



Для пункта 2

// Создание задания для запуска процесса.
IJobDetail job = AppScheduler.CreateProcessJob("OpStateActivityInAccountProcessJob", null, "OpStateActivityInAccountProcess",
"CurrentWorkspace", "CurrentUserName");
 
// Создание Cron-триггера, соответствующего графику запуска задания.
ITrigger trigger = new CronTriggerImpl("OpStateActivityInAccountProcessTrigger", null, "0 60 * * * ?");  //Каждый час будет запускать БП OpStateActivityInAccountProcess
 
//Секунды будут выглядеть так: ("0/5 * * * * ?"), то есть каждые 5 секунд запускать
 
// Добавление задания и триггера в планировщик.
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;





Для пункт 1, 3.

Условие направления звонка можете так сделать --- if (direction.ToString() == "0")

var insert = new Insert(userConn)
     .Into("Call")
      .Set("Duration", Column.Const(Int32.Parse(duration)))
      .Set("StartDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(start_time)))
      Set("EndDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(end_time)))
                        as Insert;
insert.Execute();



А еще лучше, вместо БП которые будет каждые 5 секунд у вас делать синхронизацию, это привязаться на событие окончания звонка из сервиса Моих звонков и указать шарпный сервис, который будет принимать и обрабатывать это событие, примером если надо могу поделится, как я интегрировался с ними

 

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

Пример как решить проблему с UTC тоже ниже привел.



Запускать БП можете через крон тригер, настроив его так, как вам нужно, пример ниже.



Для пункта 2

// Создание задания для запуска процесса.
IJobDetail job = AppScheduler.CreateProcessJob("OpStateActivityInAccountProcessJob", null, "OpStateActivityInAccountProcess",
"CurrentWorkspace", "CurrentUserName");
 
// Создание Cron-триггера, соответствующего графику запуска задания.
ITrigger trigger = new CronTriggerImpl("OpStateActivityInAccountProcessTrigger", null, "0 60 * * * ?");  //Каждый час будет запускать БП OpStateActivityInAccountProcess
 
//Секунды будут выглядеть так: ("0/5 * * * * ?"), то есть каждые 5 секунд запускать
 
// Добавление задания и триггера в планировщик.
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;





Для пункт 1, 3.

Условие направления звонка можете так сделать --- if (direction.ToString() == "0")

var insert = new Insert(userConn)
     .Into("Call")
      .Set("Duration", Column.Const(Int32.Parse(duration)))
      .Set("StartDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(start_time)))
      Set("EndDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(end_time)))
                        as Insert;
insert.Execute();



А еще лучше, вместо БП которые будет каждые 5 секунд у вас делать синхронизацию, это привязаться на событие окончания звонка из сервиса Моих звонков и указать шарпный сервис, который будет принимать и обрабатывать это событие, примером если надо могу поделится, как я интегрировался с ними

 

Для пункта 1 сделал как вы сказали: --- if (direction.ToString() == "0"), все сработало отлично, Спасибо !

по остальным пунктам напишу вам личное сообщение

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

Добрый день! При переименовании справочника начали возникать ошибки, и он был удален вместе с объектом для того, чтобы добавить его ещё раз с правильной структурой и именованием. Но таблицы в базе данных остались (BpDialogEventType, SysBpDialogEventTypeLcz), и при попытке назвать справочник таким образом, система выдает ошибку.

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

Нравится

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

Попробуйте удалить таблицы напрямую из базы данных:

drop table <название таблицы>

И потом, на всякий случай, скомпилируйте приложение

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

Спасибо, Алла! Я просто побаивался удалять таблицы, думал, вдруг что-то на них завязано.

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

Куандык Акерке Кайратбеккызы,

Данная ошибка возникает из-за того, что справочник выведен в каких-то разделах. Для решения проблемы Вам необходимо:

- удалить поле в мастере раздела.

- перейти в раздел «Справочники» и удалить из него необходимый справочник.

- в дизайнере системы перейти в раздел «Управление конфигурацией», найти объект этого справочника и удалить его.

Посмотреть зависимости таблиц можно и в SQL Server Management Studio, пункт меню правой кнопки на имени таблиц. Там можно увидеть, какие другие таблицы ссылаются на этот справочник.

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

Коллеги всем доброго времени суток!

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

Например: Есть справочники Tarifs в нем есть поле Position. И в зависимости от значения Position (1,2,3...)нужно сортировать выпадающий список.

Нравится

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

Это можно сделать при формировании запроса EntitySchemaQuery.

var sortPosition = esq.addColumn("Position");

sortPosition.orderDirection = Terrasoft.OrderDirection.ASC;

Я не уверен, что правильно понял кейс, но у меня, например, есть справочное поле "Рейтинг заявки", где значения от 1 до 10. И десятка идет сразу после единицы, так как оно сортируется как текст. Я на пейдже заявки создал атрибут, где указал сортировку по нужному мне целочисленному полю UsrNumber, которое я чуть ранее добавил в этот справочник.

"UsrRate": {
    lookupListConfig: {
	    orders: [
			{
			    columnPath: "UsrNumber", 
				direction: Terrasoft.OrderDirection.ASC
			}
		]
	}
}

 

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

При входе в BPM появляется ошибка авторизации, подскажите, как это можно исправить.

Версия BPMonline 7.2 (почему-то нельзя выбрать на форуме при создании вопроса)

Чистка SysUserSession и перезапуск IIS не помогают.

Скрин прилагается.

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

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

Нравится

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

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

Нужно смотреть профиль пользователя Supervisor. Скорее всего у него был удален контакт, также стоит проверить активен ли он, в каких группах состоит и какие лицензии ему розданы. Это может сделать другой системный администратор. Если же Supervisor был единственным сисадмином - тогда это нужно проверить напрямую в БД.

Контакт присутствует. Роли и лицензии прикладываю.

Иногда бывает, что проблема сама проходит, но на данный момент ошибка всё еще воспроизводится.

 

 

 

 

 

2018-06-06 17:47:34,916 [11752] INFO OperationLogger LogUserLoginError - Отказ авторизации пользователя Supervisor. IP-адрес: ::1. Причина отказа: LicHelper не проинициализирован

2018-06-06 17:58:19,398 [6408] ERROR ..\tz-user-1 Terrasoft.WebApp.Loader.FileWebEventProvider RaiseInternal - Date: 06.06.2018 17:58:19

Date (UTC): 06.06.2018 13:58:19

Exception Message: Профиль пользователя является временным профилем.

Exception Type: System.Security.Cryptography.CryptographicException

Exception Source: mscorlib

Exception Stack Trace:

   в System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)

   в System.Security.Cryptography.Utils.get_StaticDssProvHandle()

   в System.Security.Cryptography.DSACryptoServiceProvider.ImportParameters(DSAParameters parameters)

   в System.Security.Cryptography.DSA.FromXmlString(String xmlString)

   в Terrasoft.Common.DSACryptoServiceProvider.VerifyData(String data, String signedData, String publicKey)

   в Terrasoft.Core.LicHelper.CheckLicKey(String packageName, Int32 licCount, DateTime startDate, DateTime dueDate, String licKey, String publicKey, Int32 licType, Int32 sspSchemaCount, Int32 sspAdministratedSchemaCount)

   в Terrasoft.Core.LicHelper.GetUserValidPackages(Guid userId, Boolean throwLicExceptions)

   в Terrasoft.Core.LicHelper.InitializeSysPackages()

   в Terrasoft.Core.UserConnection.get_LicHelper()

SessionID: i3z1jgifmbms21gocshfzshy

Request URL: /Lic/LicManager.aspx

Request Path: /Lic/LicManager.aspx

Request Type: GET

User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

User Host Address: ::1

User: Supervisor

Is Authenticated: True

Authentication Type: Forms

Is Secure Connection: False

 

удалось победить, создав постоянный профиль для пользователя

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

Добрый день! Столкнулся со следующей проблемой:

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

mainEntity.entityA.(...).entityN.lookupName

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

Пробовал делать следующим образом:

                var esqMainEntity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "mainEntity");

                esqMessage.AddColumn(actionEntityPath);

                var mainEntity = esqMessage.GetEntity(userConnection, mainId);

                mainEntity.SetColumnValue("mainEntity_entityA_(...)_entityN_lookupNameId", newValue);

                mainEntity.Save();

В данном случае SetColumnValue проходит, но возникает ошибка на методе Save(). Видимо, таким образом нельзя изменить значение в присоединенной таблице, а не в основной.

Пробовал обновить через update:

                    var update = new Update(userConnection, "mainEntity")

                    .Set("mainEntity.entityA.(...).entityN.lookupNameId", Column.Const(newValue))

                    .Where("Id").IsEqual(Column.Const(mainId));

                    update.Execute();

Тоже выдает ошибку (с конструкцией "mainEntity_entityA_(...)_entityN_lookupNameId" та же история).

Подскажите, пожалуйста, как мне быть. Ещё думал получить Id entityN и обновить уже этот объект, но название самого объекта может отличаться от его названия относительно корневой схемы, и это не дает мне выполнить update этого объекта.

Нравится

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

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

var manager = UserConnection.EntitySchemaManager.GetInstanceByName("Department"); //своё название конечного объекта вместо Department
var entity = manager.CreateEntity(UserConnection);
entity.FetchFromDB(depId); //id элемента/записи в бд
entity.SetColumnValue("Name", "Новый отдел"); //1 параметром идёт именно колонка из объекта. никаких путей. для лукапных колонок добавляется Id (например CreatedById)
entity.Save(false);

Также не рекомендую делать entity.Save через esq. А если и делать, то предварительно выбрать все колонки (esq.AddAllSchemaColumns). И опять же, без путей.

Update - это простой конструктор sql комманд и пути он не понимает от слова "совсем". Чтобы составить сложную конструкцию для select надо напихать кучу leftJoin.

Варфоломеев Данила,

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

WwfTask.WwfClient.WwfDepartment

В этом случае колонка WwfDepartment является ссылкой на объект Department. То есть в таком случае мне необходимо узнать имя конечной схемы, которую нужно обновить. А я не знаю как это сделать, к своему глубокому сожалению.

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