При обновлении из свн начала возникать ошибка:

При работе с хранилищем произошла ошибка

Failed to run the WC DB work queue associated with '\NwsMain', work item 1808 (file-install descriptor.json 1 0 1 1)

SvnErrorCode: SVN_ERR_WC_BAD_ADM_LOG

RootCause: ������� �� ������� ����� ��������� ����.

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

Как можно решить эту проблему?

Нравится

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

а задача - что бы из SVN выполнялась установка без ошибок или чтобы в принципе установить пакет в среду?

Скорее всего проблема связана с авторизацией. Ваша сохраненная авторизация по умолчанию хранится в папке C:\Windows\Temp, а файлики оттуда иногда пропадают. Попробуйте изменить параметры sourceControlAuthPath и defPackagesWorkingCopyPath в ConnectionStrings на пути,откуда данные точно не пропадут (например папку с самим стендом). Пример:

 

<add name="defPackagesWorkingCopyPath" connectionString="C:\inetpub\wwwroot\bpmOnline\Terrasoft.WebApp\Terrasoft.Configuration\Pkg" /> 
 
<add name="sourceControlAuthPath" connectionString="C:\inetpub\wwwroot\bpmOnline\Terrasoft.WebApp\svn" />

(Папку svn для параметра sourceControlAuthPath нужно создать)

После чего переавторизуйтесь в хранилище через конфигурацию. Должно помочь.

Дмитрий А.,

Нет, авторизация проходит успешно. Восстановление отдельных схем тоже. 

Решил проблему самостоятельно. Нужно было найти локальную базу свн для этого пакета и очистить таблицу WORK_QUEUE. База находится по пути c:\Windows\Temp\<номер сайта>\<пользователь IIS>\Default\TerrasoftPackages\<Пакет>\.svn\wc.db

После этого обновление прошло успешно.

Самый простой способ удалить папку с названием пакета и заново запустить обновление из хранилища.

Путь:

С:\Windows\Temp\&lt;SiteNumber&gt;\&lt;UserName&gt;\Default\TerrasoftPackages\&lt;PackageName&gt;

 

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

Доброго времени суток, в общем проблема такая. Необходимо отправить на веб сервер данные в формате xml, на сколько я понял из документации элемент "Вызвать веб сервер" отправляет Json запросы  а не XML. Возможно ли отправить запрос в веб сервер в формате XML из элемента "Задание сценарии" или лучше каким нибудь другим ходом пойти? Буду признателен за советы , а желательно с  примером)  

Нравится

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

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

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

Есть ли в версиях bpm online выше чем 7.12 открывать разделы и другие элементы на новой вкладке ? 

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

 

Нравится

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

Сразу открыть в новой вкладке можно через стартовую страницу (IntroPage) - на Вашем скриншоте справа.

Либо же открывать в текущей вкладке, а потом дублировать текущую.

Алла, со стартовой тоже нельзя, попробуй.

Как вариант, можно открыть каждый раздел и добавить в «Избранное» на панель закладок:

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

Спасибо !

Хотелось бы, чтобы такая возможность появилась в дальнейшем, крайне неудобно что такой возможности нет :(

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

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

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

Связано с тем, что ссылки сделаны не обычным  A HREF, а программно отрабатывают при помощи JS-логики.

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

Добрый день! 

Есть Запрос(Лид) и Документ в нём (модуль PT Docs). В карточке запроса используется поле Формат ТП (справочник). В документе есть поле, которое также ссылается на этот же справочник и называется абсолютно также.

Можно ли без средств программирования сделать так, чтобы при создании документа в запросе ,  поле Формат ТП в Документе заполнялось аналогично ранее выбранного значения в Запросе (Лиде)?

Нравится

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

Добрый день!

Без программирования не получится(

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

Подробные примеры смотрите в постах на эту тему здесь и здесь.

Добрый день!

Без программирования не получится(

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

Подробные примеры смотрите в постах на эту тему здесь и здесь.

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

Зверев Александр, Спасибо, попробую в крайнем случае. Хотелось бы реализовать именно при создании документа, поскольку система позволяет не сохранять карточку документа и пользователь её может просто закрыть, не сохраняя, и поле останется не заполненным.

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

а если никогда ранее не занимался разработкой в BPM , это реальная задача (по силам) ? С чего лучше начать?

LilyG,

Думаю, что реальная.

Для начала ознакомьтесь с примерами по ссылкам, приведенным выше.

Если будут вопросы, ищите ответы либо на Академии, либо на community. Если не найдете нужный ответ, всегда сможете задать вопрос здесь wink

LilyG пишет:

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

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

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

Вы пробовали создавать документы в PT Docs ? Карточка документа создается и сохраняется, даже если не нажать кнопку сохранить. Этой лазейкой успешно пользуются сотрудники, чтобы не заполнять обязательные поля. Проверка обязательных полей например, происходит при нажатии на кнопку сохранить. А если не хочешь их заполнять - просто закрываешь карточку документа и всё.. Сохраняется с пустыми обязательными полями. 

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

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

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

У нас 1с через Odata передает данные о заказе, включая поле Дата (Date)

На сервере часовой пояс киевский, у супервизора тоже киевский, в bpm в системной настройке киевский.

1-ка забирает дату и нормально себе записывает, но когда передает обратно заказ при изменении, дата записывается в бпм и пользователь видит дату + 3 часа сверху.

Знаю, что время в bpm хранится в UTC и когда из 1с приходит дата она записывается в это поле и пользователь видет + 3 часа.

Например создал заказ в бпм. Дата 9 утра. (если sql запрос сделать в базу) там 6 утра. Все ок, пользователь видит 9. Ушло в 1с, там заказ провели и возвращают в бпм. Уходит из 1с тоже 9 утра. Пришел в бпм, смотрим запросом в базу, там стало 9 утра, а пользователь видит 12 часов уже, т.е + 3 часа.

Как правильно передать запрос. Пробовали так:

{

    "AccountId": "590eb789-2b6d-4257-838f-917003ffce43",

    "CHOurCompanyId": "3d5d64dd-450f-4d70-a722-ee95caa2a5b3",

    "StatusId": "40de86ee-274d-4098-9b92-9ebdcf83d4fc",

    "CHVATTop": "false",

    "Date": "2019-06-04T12:05:12+TZ",

    "Number": "УТХ00013754",

    "Amount": "391",

    "OpId1C": "41d319dd-86a4-11e9-8102-e36315b16de3"

выдает ошибку - Cannot convert a primitive value to the expected type 'Edm.DateTime'. See the inner exception for more details.



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

Нравится

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

«+TZ» — это не прямо так нужно писать, а указать нужный пояс. Например,«2018-01-31T08:24:49+03:00». Подробнее по работе с датой см. в этой теме.

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

Википедия гласит:

Следует помнить, что время по UTC не переводится ни зимой, ни летом. Поэтому для тех мест, где есть переход на летнее время, меняется смещение относительно UTC.

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

т.е в запрос при переходе на зимнее надо менять с +03:00 на +02:00?

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

Можно на стороне 1С перед передачей даты вычислять текущее значение смещения.

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

При создании лида по OData пришит ответ 412 "Не совместимы тип". Доступ на обьект дан, при запросы на получения данных но ID лида ответ приходит

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

 

Нравится

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

Александр Тыра,

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

Добрый день!

Убедитесь, что ожидается запрос в Json. Т.е. в заголовках есть: Content-Type:application/json;odata=verbose

Сидоров Александр В., отправляю и принимаю json, ответ такой же - 415

Александр Тыра,

Попробуйте именно 

Content-Type:application/json;odata=verbose

Сидоров Александр В., Прошло, формат приляно, но теперь ругается на ключ в таблице "Города". При этом Id верный, скопировал с самой базы

Александр Тыра,

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

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

Всем добрый день. Версия 7.12.

Подскажите, а есть ли какой-нибудь аналог такой конструкции:

esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "PrimaryDisplayColumnValue");

на бекенде, для указания в коде задания-сценария бизнес-процесса?

Т.е. получение значения строковой колонки, имеющей отметку как "Отображаемая" при условии, что мы не знаем кода этой колонки?

Нравится

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

Добрый день!

У Entity есть поле PrimaryDisplayColumnValue

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

var esqLookup = new EntitySchemaQuery(UserConnection.EntitySchemaManager, objectId);
var idLookup = esqLookup.AddColumn("Id"); //Id
//var idLookupName = esqLookup.GetPrimaryDisplayColumn();
var lookup= esqLookup.GetEntity(UserConnection, new Guid(guidCode.ToString()));
 
var lookupId = lookup.GetTypedColumnValue&lt;Guid&gt;(idLookup.Name);
var lookupName = lookup.PrimaryDisplayColumnValue;

И получаю в lookupName пустоту. При этом значение id вытаскивается верное.

Можно при помощи GetPrimaryDisplayColumnName:

entitySchemaQuery = new EntitySchemaQuery(typeSchema);
var typePrimaryColumnName = entitySchemaQuery.AddColumn(typeSchema.GetPrimaryColumnName()).Name;
var typeDisplayColumnName = entitySchemaQuery.AddColumn(typeSchema.GetPrimaryDisplayColumnName()).Name;

 

Смородинов Денис,

А Entity Вы получаете?

Попробуйте таким образом:

EntitySchema entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(entityName);
Entity entity = entitySchema.GetEntity(userConnection, idValue);
var primaryColumnValue = entity.PrimaryColumnValue;
var primaryDisplayColumnValue = entity.PrimaryDisplayColumnValue;

 

Зверев Александр пишет:

typeSchema

А можно уточнить вопрос? typeSchema - это то, что у меня в скобках ?

var esqLookup = new EntitySchemaQuery(UserConnection.EntitySchemaManager, objectId);

У ESQ есть несколько разных конструкторов. В моём примере typeSchema — переменная типа EntitySchema. Получить схему по названию можно так:

var manager = UserConnection.EntitySchemaManager;
var schema = manager.GetInstanceByName("Dashboard");

 

Смородинов Денис,

А у вашего объекта установлена колонка для отображения?

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

Здравствуйте, уважаемое сообщество!

В базе имеется много Контрагентов внесённых вручную, сделали интеграцию Контрагентов из 1С при помощи 1С Коннектора, естественно появились дубли

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

Вопрос, как повлиять на то какой объект оставить в системе во время объединения дублей, а какой удалить?

Проверяю следующим запросом к базе:

select * from Account where name = 'Высший Вкус ООО (ВВ)';
select * from SmrSyncHistory where localid in (select id from Account where name = 'Высший Вкус ООО (ВВ)');

 

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

До объединения:

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

 

После объединения:

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

 

Нравится

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

Gorbunov Alexander, Если акция разовая, то можно сделать апдейт даты в таблице на какую-то более старую.

Пока в стандартном механизме платформы нет выбора золотой записи.

В случае использования 1C Connector вы можете сразу настроить признак [Использовать для дедупликации] по полю Название, чтобы дубли вообще не создавались. Подробнее -https://samarasoft.com/docs/1c-connector/integration-setting-bpmonline/fields-mapping/

В стандартном механизме в качестве золотой берётся первое значение в коллекции. В схеме DeduplicationMergeHandler функция MergeEntityDublicates начинается так:

public void MergeEntityDublicates(string schemaName, int groupId, List&lt;Guid&gt; duplicateRecordIds, Dictionary&lt;string, string&gt; resolvedConflicts) {
	EntitySchema entitySchema = _userConnection.EntitySchemaManager.GetInstanceByName(schemaName);
	EntityCollection duplicates = GetEntityDublicates(schemaName, duplicateRecordIds);
	Entity goldenEntity = duplicates.FirstOrDefault();
	if (goldenEntity == null) {
		return;
	}
	duplicates.RemoveFirst();
	duplicateRecordIds.Remove(goldenEntity.PrimaryColumnValue);
	if (duplicates.Count == 0) {
		return;
	}

А коллекция отсортирована по дате создания, старые вначале:

public EntityCollection GetEntityDublicates(string schemaName, List&lt;Guid&gt; ids, List&lt;string&gt; columns = null) {
	EntitySchema schema = _userConnection.EntitySchemaManager
		.GetInstanceByName(schemaName);
	var esq = new EntitySchemaQuery(schema);
	if (columns == null) {
		esq.AddAllSchemaColumns();
	} else {
		esq.PrimaryQueryColumn.IsAlwaysSelect = true;
		if (!columns.Contains("CreatedOn")) {
			esq.AddColumn("CreatedOn");
		}
		foreach (string columnName in columns) {
			esq.AddColumn(columnName);
		}
	}
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
		esq.RootSchema.PrimaryColumn.Name, ids.Cast&lt;object&gt;()));
	EntityCollection entityCollection = esq.GetEntityCollection(_userConnection);
	entityCollection.Order("CreatedOn", OrderDirection.Ascending);
	return entityCollection;
}

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

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

Спасибо за советы, только сейчас пролучилось вернуться к этому кейсу

Я так понимаю что включать признак дедупликации в Коннекторе уже поздно, ну или чистить записи и проводить интеграцию заново

Хочу попробовать сделать по совету Зверева Александра, но не могу найти статью или ответы на комьюнити как правильно замещать "Исходный код", я так понял надо просто поменять Ascending на Descending.

Gorbunov Alexander, Если акция разовая, то можно сделать апдейт даты в таблице на какую-то более старую.

Трефилов Павел Сергеевич,

ОМАЙГАДБЛ... всё гениальное просто, спасибо, попробую ))))))))

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

Добрый день !

Есть ли возможность без программирования направлять пользователю на электронную почту уведомление (допустим по пятницам или по понедельникам)  - чтобы в теле письма была таблица со всеми лидами, созданными за прошедшую неделю (желательно кликабельные ссылки)? Как можно это реализовать ?

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

Нравится

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

Добрый день!

Выполнять в бизнес процессе, который по вашему расписанию будет отсылать Email сообщение (пример).

А вот сформировать тело сообщения с таблицей без программирования уже сложно.

Добрый день!

Выполнять в бизнес процессе, который по вашему расписанию будет отсылать Email сообщение (пример).

А вот сформировать тело сообщения с таблицей без программирования уже сложно.

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

Спасибо. Сложно= невозможно, я правильно понимаю ? А если исключить таблицу, и представить просто список ?

LilyG,

Ну да. Считать список можно стандартными блоками БП. А вот из списка сформировать текст, который потом пойдет в сообщение - уже нужен блок "Задание сценарий", а это уже программирование

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

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

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

"Status": {
		"enabledStatusByUser": {
			"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
			"property": BusinessRuleModule.enums.Property.ENABLED,
			"logical": Terrasoft.LogicalOperatorType.AND,
			"conditions": [
				{
					"comparisonType": Terrasoft.ComparisonType.EQUAL,
					"leftExpression": {
						"type": BusinessRuleModule.enums.ValueType.SYSVALUE,
						"attribute": "CURRENT_USER"
					},
					"rightExpression": {
						"type": BusinessRuleModule.enums.ValueType.CONSTANT,
						"value": "7f3b869f-34f3-4f20-ab4d-7480a5fdf647"
					}
				}
			]
		}
	}

 

Нравится

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

Добрый день!

Попробуйте такой код в условиях (conditions)

"conditions": [
	{
		"comparisonType": 3,
		"leftExpression": {
			"type": 3,
			"value": "CurrentUser",
			"dataValueType": 10
		},
		"rightExpression": {
			"type": 0,
			"value": "7f3b869f-34f3-4f20-ab4d-7480a5fdf647",
			"dataValueType": 10
		}
	}
]

 

Добрый день!

Попробуйте такой код в условиях (conditions)

"conditions": [
	{
		"comparisonType": 3,
		"leftExpression": {
			"type": 3,
			"value": "CurrentUser",
			"dataValueType": 10
		},
		"rightExpression": {
			"type": 0,
			"value": "7f3b869f-34f3-4f20-ab4d-7480a5fdf647",
			"dataValueType": 10
		}
	}
]

 

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

Спасибо, работает

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

Вы имеете ввиду настроить администрирование по колонкам?

Для доступности для редактирования полей действительно было бы уместнее использовать не бизнес-правила, а права доступа на колонки. 

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

Спасибо за совет, буду иметь ввиду

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