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

Стоит задача обновить стенд (с этим всё ясно) + сменить продукт с SalesEnterprise на SalesEnterprise_Marketing_ServiceEnterprise.

Попробовал в лоб, вписал в поле "Product" файла downloader.json заданный задачей продукт. Updater.exe выдаёт на такое: "You are using an invalid build type. You need to obtain SalesEnterprise..."

 

Смена продукта "на лету" вообще возможна? Может кто сталкивался? Как решается данный вопрос?

Нравится

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

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

Здравствуйте, Сергей!

Чтобы обновиться на бандл, необходимо и достаточно только установить в конфиге утилиты обновления значение Feature-SkipProductValidation  в true:

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

Скрипты выполнены успешно, однако после обновления выдает ошибку:

Exception Message: Не удалось загрузить тип System.Collections.Generic.List`1[[Terrasoft.Core.LicHelper+SysLicPackageInfo, Terrasoft.Core, Version=7.4.0.2924, Culture=neutral, PublicKeyToken=edaadfbc3b0bb879]], необходимый для десериализации. Exception Type: System.Runtime.Serialization.SerializationException Exception Source: mscorlib Exception Stack Trace: в System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder holder, Boolean bObjectFullyComplete) в System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder holder) в System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder) в System.Runtime.Serialization.ObjectManager.DoFixups() в System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в Terrasoft.Redis.BaseRedisStore.Deserialize(Byte[] data) в Terrasoft.Redis.BaseRedisStore.GetValue(String key) в Terrasoft.Core.UserConnection.get_LicHelper()

 

Не могу определить последовательность действий для исправления

Нравится

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

Обратитесь в службу техподдержки террасофт

Судя по тому, что сначала неудачно обновлялись на 7.5, а теперь на 7.4.1, дело может быть именно в неверном порядке обновления. Если нужно обновить на несколько версий, накатывать нужно последовательно.

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

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

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

Проблема с обновлением. Все сделано по инструкции, структура БД обновилась, но компиляция не происходит из-за этих ошибок. Обновление с 7.4.0 до 7.4.1 прошло без проблем. Был запрошен список дистрибутивов для bpm'online sales. Прислали список для Salse Enterprise (может быть важная информация). Как возможно решить данную проблему?

Нравится

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

Paul_lgb,

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

e подробности смотри тут

https://academy.terrasoft.ua/documents/technic-sdk/7-13/parametry-works…

Те тебе нужно

1) настроить консоль (добавить в конфиг консоли параметры подключения к твоей БД и тд)

2) выполнить RegenerateSchemaSources 

Надеюсь вы тренеруетесь на тестовом стенде?Попробуйте сгенерировать исходные коды и перекомпилировать конфигурацию (компилировать все)

Если не поможет то обращайтесьв тех поддержку

Григорий Чех,

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

Paul_lgb,

На версиях 7,5-7,6 активно менялась структура пакетов. Проверьте, от всех ли необходимых пакетов у вас есть зависимости. Обратите внимание на Счета, документы, договоры, если где-то используются.

Для входа в конфигурацию добавьте WorkspaceExplorerModule.aspx по примеру:

http://localhost:999/0/WorkspaceExplorerModule.aspx

Paul_lgb,

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

e подробности смотри тут

https://academy.terrasoft.ua/documents/technic-sdk/7-13/parametry-works…

Те тебе нужно

1) настроить консоль (добавить в конфиг консоли параметры подключения к твоей БД и тд)

2) выполнить RegenerateSchemaSources 

Сообщение «Ссылка на объект не указывает на экземпляр объекта.
   в Terrasoft.Core.Packages.PackageStorage.AnalyzeHierarchy()»
 может быть связано с зацикливанием пакетов. Это, например, когда у пакета указан родительский (он от него зависит), а у родительского указан как  родительский его дочерний. Второй вариант — это, возможно, создали замещающую схему, а потом исходную удалили.

Григорий Чех,

К сожалению, генерация и компиляция выполняются с ошибками

Исправьте ошибки, а потом компилируйте.

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

var accountUpdate = new Update(UserConnection, "Account")
                        .Set("IndustryId", Column.Parameter(IndustryIdParameter))
                        .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

Если есть такой запрос и значение параметра IndustryIdParameter равно null, то выдаст ошибку так как в базу пойдет запрос не со значением null, a c Guid.Empty.

Каким образом можно решить эту задачу?

И ещё интересует возможно ли использование в этой конструкции сложных условий в Where, речь идет о запросе вида:

update Account
set
    IndustryId = @P4
where CountryId = @P1
    and (IndustryId = @P2
        or IndustryId = @P3)

Нравится

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

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

null 

if (IndustryIdParameter != Guid.Empty) {
  var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()
}

А для конструкции получается просто
 

var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("CountryId").IsEqual(Column.Parameter(CountryParameter))
   .And("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter1))
   .Or("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter2));

 

new Update(UserConnection, "ActivityCorrespondence")
.Set("ActivityId", Column.Const(null))
.Where("ActivityId").IsEqual(Column.Parameter(activityId))
.Execute(dbExecutor);

 

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

Ага, а если нужно проверить 5 параметров, то в пору делать switch с перебором всех возможных комбинаций. 

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

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

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

Интересует возможность прямо в Update запилить эту проверку.

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

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

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

 

Алла, что не так в написании в нужном месте одного и того же текста «Column.Const(null)»? Если не знаешь, будет там null или значение, можно написать в С# в месте формирования Update блок if(){}else{} и проверять значение переменной. Update можно формировать по частям, дописывая к нему строки от начала к концу. И запускать, когда готов.

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

Тогда делайте через тернарный оператор "?" и получите то же условие но в одну строку

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

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

Алла Савельева,
Примерно так:

var accountUpdate = new Update(UserConnection, "Account")
.Set("IndustryId", Column.Const(IndustryIdParameter != Guid.Empty ? IndustryIdParameter.ToString() : null))
.Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

 

Алла, примерно:

 .Set("IndustryId", ((IndustryIdParameter!=Guid.Empty)?Column.Parameter(IndustryIdParameter):Column.Const(null)))

 

А еще лучше будет расширить метод Set, чтобы сразу проверять на Guid.Empty
 

public static Update Set(this Update update, string column, Guid value)
        {
            return value == Guid.Empty
                ? update.Set(column, Column.Parameter(null))
                : update.Set(column, Column.Parameter(value));
        }

И весь вызов станет еще компактнее
 

.Set("IndustryId", YourGuid);

 

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

Тернарный оператор ! 

Григорий Чех пишет:

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

Тернарный оператор ! 

 Точно! Поправил, спасибо)

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

Например, есть запрос на sql такого вида:

declare @DocumentTypeId uniqueidentifier
declare @InvoiceTypeId uniqueidentifier

update I
set
    I.TypeId = @InvoiceTypeId
from Invoice I
    join Document D on D.Id = I.DocumentId
where D.TypeId = @DocumentTypeId

Можно ли его реализовать с помощью класса Update на C#?

Нравится

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

Добрый день.

Попробуйте такой код

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

Здравствуйте! Пытался обновить верcию bpm'online bank customer jorney, с 7.11.0 до 7.11.1 (Oracle), после обновления попытался скомпилировать приложение, и в результате возник вот такой вот перечень ошибок, в результате чего могли возникнуть эти ошибки?

Нравится

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

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

Пришлите, пожалуйста, логи приложения за время обновления, по умолчанию хранятся по пути:C:\Windows\Temp\BPMonline\Site_Х.

Так же хочу уточнить, не было ли ошибок, при компиляции до обновления ? 

Maksym Naumovets,

До обновления ошибок не было, вот log 

https://yadi.sk/i/wpnUGfK23TKEiq

 

Александр, судя по логам, у вас не до конца отработал сценарий обновления.

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

Попробуйте повторно выполнить обновление.

Maksym Naumovets,

"Utility finished working." разве не говорит о том, что утилита завершила свою работу?

Александр, говорит. Но не говорит что все было выполнено успешно.

Произошла ошибка и утилита завершила работу.

Посмотрел выполненные шаги, нет генерации исходных кодов, компиляции и остальных что я описал.

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

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

Добрый день!

После недавнего обновления Win10 (KB4056892), в Terrasoft 3.4.0.130 перестал отображаться пользователь в верхней части окна, отсутствуют напоминания и при переходе во вкладку Сделки появляется ошибка(та, что на скриншоте). Возможно кто-то сталкивался? Если обновление удалить все работает.

Нравится

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

Этот сбой возникает на Windows 10 после прихода обновления KB4074588, которое ломает в Terrasoft пользовательские настройки. А этот раздел одну из них при открытии проверяет, как и механизм напоминаний.

Для восстановления нормальной работы нужно либо удалить из Windows это обновление KB4074588, либо запускать Terrasoft к компьютеров не под Windows 10. В руководстве администратора Terrasoft 3.4.0 указаны как поддерживаемые Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 и Windows 7.

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

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

Большое спасибо

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

Собираюсь использовать службу DataService с клиентской части, так как совсем не разбираюсь в С#. Но в документации для чтения и добавления примеры для JS есть, а для удаления и обновления записей -
нет. Прошу помощи: буду очень признателен за пример удаления и обновления записи через DataService на из клиентской части)

Нравится

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

Для обновления ищите по конфигурации слова "Terrasoft.UpdateQuery"
примеров множество, вот из OpportunityManagementEndOfStagePreconfiguredPage:

var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: "Activity"
});
updateQuery.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "Id", activityId));
updateQuery.setParameterValue("Status",
		ConfigurationConstants.Activity.Status.Cancel,
		this.Terrasoft.DataValueType.LOOKUP);
updateQuery.execute(function() {
	this.loadActivities();
}, this);

Удаление по словам "Terrasoft.DeleteQuery", примеров так же очень много, вот из DocumentRelationshipDetailV2:

var deleteQuery = this.Ext.create("Terrasoft.DeleteQuery", {
	rootSchemaName: "DocumentRelationship"
});
var masterRecordId = this.get("MasterRecordId");
var filters = this.getDeleteRelationFilters(masterRecordId, selectedRows);
deleteQuery.filters.add("DocumentsFilter", filters);
deleteQuery.execute(function() {
	this.hideBodyMask();
	this.deselectRows();
	this.reloadGridData();
}, this);

"Максим Шевченко" написал:

Для обновления ищите по конфигурации слова "Terrasoft.UpdateQuery"
примеров множество, вот из OpportunityManagementEndOfStagePreconfiguredPage:

var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
        rootSchemaName: "Activity"
});
updateQuery.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
                Terrasoft.ComparisonType.EQUAL, "Id", activityId));
updateQuery.setParameterValue("Status",
                ConfigurationConstants.Activity.Status.Cancel,
                this.Terrasoft.DataValueType.LOOKUP);
updateQuery.execute(function() {
        this.loadActivities();
}, this);

Удаление по словам "Terrasoft.DeleteQuery", примеров так же очень много, вот из DocumentRelationshipDetailV2:

var deleteQuery = this.Ext.create("Terrasoft.DeleteQuery", {
        rootSchemaName: "DocumentRelationship"
});
var masterRecordId = this.get("MasterRecordId");
var filters = this.getDeleteRelationFilters(masterRecordId, selectedRows);
deleteQuery.filters.add("DocumentsFilter", filters);
deleteQuery.execute(function() {
        this.hideBodyMask();
        this.deselectRows();
        this.reloadGridData();
}, this);


Большое спасибо!

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

Как обновить приложение с версии 7.8.2 на с 7.8.3

Не могу найти документацию.

Нравится

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

Добрый день, Максим!

Документацию по обновлению системы Вы найдете по ссылке:
https://academy.terrasoft.ru/documents/instrukciya-po-obnovleniyu-bpmon…

За необходимым дистрибутивом Вам необходимо обратиться в службу поддержки:
support@terrasoft.ru

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

Коллеги, приветствую.

Есть определенный интерес поизучать классы Select, Insert, Update, EntitySchemaQuery и подробнее
разобраться, как с ними работать.

Чтобы это было проще и быстрее мне бы хотелось иметь возможность работать с ними из MS Visual Studio.

Например, запрос из статьи Использование EntitySchemaQuery для построения запросов к базе данных:

// Создание экземпляра запроса, добавление в запрос колонок и источника данных.
Select selectQuery = new Select(UserConnection)
                    .Column("Id")
                    .Column("Name")
                    .From("Contact");
// Выполнение запроса к базе данных и получение результирующего набора данных.
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
    using (IDataReader reader = selectQuery.ExecuteReader(dbExecutor))
    {
        while (reader.Read())
        {
            // Обработка результатов запроса.
        }
    }
}

Собственно, вопрос в конфигурировании класса UserConnection, как его использовать "вне платформы", не в режиме отладки?

Например, в методе Main:

static void Main(string[] args)
{
}

В элементе "Задание- сценарий" я могу получить его таким образом:

var userConnection = Get("UserConnection");

В Web- сервисе WCF:

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Здравствуйте.
Если сайт у вас развернуть on-site, то есть, поднят на своем IIS сервере:
Тогда у вас есть возможность написать свой, к примеру, веб-сервис, или даже скрипт-сценарий, и пользуясь статьей по отладке,
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ServerCode…
ставить точки останова, и изучать поведение серверного ESQ.
Здесь главное, что бы код был частью системы, поэтому его и нужно писать как часть системы (веб-сервис, бизнес-процесс, и.т.д.), а не сторонние dll,exe,итд.
С автономной программы этого сделать не получится.

Если же сайт on-demand, то есть, развернут как http://имя-сайта.bpmonline.com/
То такой возможности у Вас нет, и со стороннего процесса (программы), Вы никак не обратитесь к ядру системы.
Из сторонних программ написанных Вами в Visual Studio, Вы можете разве что обратится к уже написанным веб-сервисам в рамках структуры сайта, либо же по протоколу OData,
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.1/WorkWithBp… что, конечно же, совсем не запросы ESQ.

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

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