Есть необходимость перенести данные справочника Tax , включая id,на препрод

Я спросил как это правильно сделать, и мне посоветовали создать замещающий объект, но при попытке публикации пишет , что Элемент с именем "Tax" не найден

Для исправления ошибки, пробовал советы из этой темы  https://community.terrasoft.ru/questions/oshibka-sokhraneniya-element-n…

А именно генерацию исходных кодов, просто вылетает страница с ошибкой

А при компиляции всего, вылетает Элемент с именем "Tax" не найден

Нравится

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

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

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

Если второе, то нужно не создавать объект или замещающий объект вручную, а переносить с сайта-источника готовую схему (или путём выгрузки в md-файл, или через SVN, или пакетами).

Объект Tax — стандартный, у Вас в нём есть какие-то доработки?

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

Всем привет!

 

Есть БП довольно простой. Изображение удалено.

До таймера все работает как положено, а после таймера ничего не происходит.

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

Нравится

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

Михаил, причины могут быть различными.

Например,  если есть большое количество процессов, которые используют таймер (и, следовательно, планировщик), то может быть, сейчас очередь планировщика перегружена, что и могло вызвать проблемы с зависанием процессов. В таком случае нужно увеличить threadCount во внешнем Web.config с 5, например, до 10. Стандартно там:

<add key="quartz.threadPool.threadCount" value="5" />

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

Михаил, подскажите, пожалуйста, удалось ли решить проблему.

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

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

Привет всем!

 

Столкнулся с проблемкой. 

В Sales есть страница Document:

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

 

Если выбрать файл, кликнуть на троеточие около attachments, то появится контекстное меню, где можно выбрать Change Properties

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

Тогда откроется детали файла.

Здесь мне надо добавить еще одно поле в виде выпадающего списка, но инструмента и никаких кнопок для этого нет.

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

Нравится

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

Добрый день.

Вам нужно вручную заместить код этой карточки и в секции diff написать insert для своего поля.

Через мастер раздела не получится по простому.

Кисловский Михаил Андреевич пишет:

Добрый день.

Вам нужно вручную заместить код этой карточки и в секции diff написать insert для своего поля.

Через мастер раздела не получится по простому.

А как найти эту карточку?

И можно где-нибудь посмотреть пример? Я не нашел в документации.

 

Кисловский Михаил Андреевич,

А как найти эту карточку?

И можно где-нибудь посмотреть пример? Я не нашел в документации.

Michael Tkachev,

добрый день! просмотрите в FileDetailV2

Нигрескул Алексей,

Мне бы пример какой-нибудь. Надо добавить кнопку с выпадающим меню. Меню берется из Lookup-а.

Михаил, если имеете в виду окно, которое открывается по этому пункту меню (с полями «название» и «описание»), то это схема LinkPageV2.

Но карточка общая для файлов всех разделов, а объекты в каждом свои («Файл и ссылка контакта» и др.), то есть, если нужно добавить там справочное поле только для раздела документов, нужно не только добавить поле в объект, но и сделать свою карточку на основе LinkPageV2 с этим полем, а также предусмотреть, чтобы она открывалась вместо стандартной, что прописано в вышеупомянутой Алексеем FileDetailV2. Получается, для конкретного раздела будут свои аналоги и FileDetailV2, и LinkPageV2.

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

Есть запрос в базу данных, по ответу поддержки "классы EntitySchemaQuery, Select, Insert, Update, Delete это СУБД-независимое API ", исходя из этого был использован InsertSelect. На PostgreSQL запрос отрабатывает отлично, но в Oracle выдает ошибку при использовании TOP в запросе.

Код запроса:

Query selectQuery = new Select(UserConnection)
    .Top(numberCountForNumberPool)
    .Column(Column.Parameter(request))
    .Column(Column.Parameter(currentUserContactId))
    .Column(Column.Parameter(currentUserContactId))
    .Column("KtSimManagementInitialPoolNumbers", "KtIccid")
    .Column("KtSimManagementInitialPoolNumbers", "KtImsi")
    .Column("KtSimManagementInitialPoolNumbers", "KtMsisdn")
    .Column("KtSimManagementInitialPoolNumbers", "KtName")
    .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<Guid>(city.Name)))
    .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<string>(note.Name)))
    .Column(Column.Parameter(DateTime.UtcNow.Date))
    .Column(Column.Parameter(DateTime.UtcNow.Date
        .AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
            "DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))
    .From("KtSimManagementInitialPoolNumbers")
    .OrderByAsc("KtSimManagementInitialPoolNumbers", "KtName")
    .Join(JoinType.LeftOuter, "KtJasperFullNumberPool")
    .On("KtSimManagementInitialPoolNumbers", "KtName")
    .IsEqual("KtJasperFullNumberPool", "KtName")
    .Where("KtJasperFullNumberPool", "KtName")
    .IsNull()
    .And("KtSimManagementInitialPoolNumbers", "KtMarketCodeId")
    .IsEqual(Column.Parameter(cityForMarketCode));
 
InsertSelect insertSelectQuery = new InsertSelect(UserConnection)
    .Into("KtJasperFullNumberPool")
    .Set("KtRequestId", "ModifiedById", "CreatedById", "KtIccid", "KtImsi", "KtMsisdn", "KtName", "KtCityId", "KtNote", "KtReserveDate", "KtReserveToDate")
    .FromSelect(selectQuery);
int numberCountInserted = insertSelectQuery.Execute();

Подскажите, есть ли возможность использовать в Select для Oracle - TOP для выборки необходимого количества записей в запросе?

Нравится

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

Проверил, на запросе с Top, OrderByAsc,  Join, On, IsEqual, Where отрабатывает нормально. А если добавить колонки с числом и датой из параметра, получим такую же ошибку, как у Вас. Но если, как я выше предложил, дописать «.As», она исчезнет:

			var query = new Select(UserConnection)
				.Top(2)
				.Column("Contact", "Dear")
    			.Column(Column.Parameter("test")).As("SomeString")
    			.Column(Column.Parameter(DateTime.UtcNow.Date)).As("SomeDate")
				.From("Contact")
				.OrderByAsc("Contact", "Dear")
		    	.Join(JoinType.LeftOuter, "Account")
    			.On("Contact", "AccountId")		
				.IsEqual("Account", "Id")
    			.Where("Account", "AnnualRevenueId")
    			.IsNull()				;
var text =  query.GetSqlText();

Код генерируется:

SELECT  "Dear", "SomeString",   "SomeDate"FROM (SELECT  "Contact"."Dear",       :P1 "SomeString",       :P2 "SomeDate"FROM      "название_базы"."Contact""название_базы"."Account"WHERE      ("Account"."AnnualRevenueId" IS NULL)   AND "Contact"."AccountId" = "Account"."Id"(+)ORDER BY   "Contact"."Dear" ASC NULLS FIRST)WHERE  (ROWNUM &lt;= 2)

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

Александр, какая именно выдаётся ошибка? Только в Insert Select или просто в Select с Top тоже?

Если перед последней строчкой считать insertSelectQuery.GetSqlText(), что там будет?

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

 в Select тоже, пишет что "

Terrasoft.Common.NullOrEmptyException: Псевдоним колонки запроса не может быть пустым

   в Terrasoft.Core.DB.DBEngine.BuildSelectColumnAliasesSqlText(StringBuilder sb, QueryColumnExpressionCollection columnExpressions)

   в Terrasoft.DB.Oracle.OracleEngine.BuildSelectQuerySqlText(StringBuilder sb, Select select)

   в Terrasoft.Core.DB.DBEngine.BuildQuerySqlText(StringBuilder sb, Select selectQuery)

   в Terrasoft.Core.DB.DBEngine.GetQuerySqlText(Select selectQuery)

   в Terrasoft.Core.DB.Select.GetSqlText()

   в Terrasoft.Configuration.KtReserveNumbersService.ReserveNumbers(Guid request)

   в SyncInvokeReserveNumbers(Object , Object[] , Object[] )

   в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)

   в Terrasoft.Web.Common.ServiceModel.ThreadContextInitializer.Invoke(Object instance, Object[] inputs, Object[]& outputs)

   в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)

"

Проверил без TOP - такой ошибки нет

А если без этой колонки?

    .Column(Column.Parameter(DateTime.UtcNow.Date
        .AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection,
            "DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1)))

Или с ней, но сразу после после дописать псевдоним:

.As("MyColumnName")

Она самая подозрительная, но если дело не в ней, проверьте и предыдущие.

Зверев Александр, Проверил - при закоментировании колонок разницы нет, но заметил закономерность:

1) если использовать Top без OrderByAsc и Join (ну вчесте с его on, IsEqual, Where) - тогда работает

2) если использовать OrderByAsc или Join (ну вчесте с его on, IsEqual, Where) без Top - тогда работает

3) если использовать Top с OrderByAsc или Join (ну вчесте с его on, IsEqual, Where) - тогда не работает, ошибка

Проверил, на запросе с Top, OrderByAsc,  Join, On, IsEqual, Where отрабатывает нормально. А если добавить колонки с числом и датой из параметра, получим такую же ошибку, как у Вас. Но если, как я выше предложил, дописать «.As», она исчезнет:

			var query = new Select(UserConnection)
				.Top(2)
				.Column("Contact", "Dear")
    			.Column(Column.Parameter("test")).As("SomeString")
    			.Column(Column.Parameter(DateTime.UtcNow.Date)).As("SomeDate")
				.From("Contact")
				.OrderByAsc("Contact", "Dear")
		    	.Join(JoinType.LeftOuter, "Account")
    			.On("Contact", "AccountId")		
				.IsEqual("Account", "Id")
    			.Where("Account", "AnnualRevenueId")
    			.IsNull()				;
var text =  query.GetSqlText();

Код генерируется:

SELECT  "Dear", "SomeString",   "SomeDate"FROM (SELECT  "Contact"."Dear",       :P1 "SomeString",       :P2 "SomeDate"FROM      "название_базы"."Contact""название_базы"."Account"WHERE      ("Account"."AnnualRevenueId" IS NULL)   AND "Contact"."AccountId" = "Account"."Id"(+)ORDER BY   "Contact"."Dear" ASC NULLS FIRST)WHERE  (ROWNUM &lt;= 2)

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

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

 да, именно Ваша рекомендация с .As("SomeString") помогла когда прописал данный алиас во все колонки где используется "Column.Parameter". Так же в поддержке ответили. Не понял только почему в PostgreSQL это работает без алиаса, а в Oracle без него не так. Но видимо это специфика запросов СУБД, главное что с алиасом работает и там, и там.

Спасибо за помощь!

Передал информацию об этой особенности для освещения в академии.

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

В первом бизнес-процессе в элементе Задание-сценарий вызываю другой бизнес-процесс.

Во втором бизнес-процессе выполняется логика и заполняются два исходящих параметра. 

Как вычитать эти два параметр в первом бизнес-процессе

 var manager = context.UserConnection.ProcessSchemaManager;
 var processSchema = manager.GetInstanceByName("Второй процесс");
 var process = processSchema.CreateProcess(context.UserConnection);
 process.Execute(context.UserConnection);
       
 if (process.Status == Terrasoft.Core.Process.ProcessStatus.Done)
 {
        parameter1 = //вычитать параметр 1 второго процесса
        parameter2 = //вычитать параметр 2 второго процесса
  }

Прошу подсказать как можно вычитать параметры.

Спасибо.

Нравится

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

Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:

scr_process_creation_designer_conditional_formula.png

Для получения:

var parametr1 = Get<Тип данных параметра>

("Код параметра");

 

Для присвоения:

Set("Код параметра", parametr1);

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

 

Сергей, если поискать, в SynchronizeWithGoogleModuleProcess есть пример такого получения параметров:

public virtual void LaunchProcess() {
	var entityManager = UserConnection.EntitySchemaManager;
	var manager = UserConnection.ProcessSchemaManager;
	var processSchema =  (ProcessSchema)manager.FindInstanceByUId(IntegrationProcessId);
	if (processSchema == null) {
		return;
	}
	var moduleProcess = processSchema.CreateProcess(UserConnection);
	moduleProcess.Execute(UserConnection);
	var syncGContactProcessUId = new Guid("2e4ae0af-2b8a-446f-bd58-7a66e3848de2");
	var syncGCalendarProcessUId = new Guid("0eceffe6-2795-439f-b915-118580947959");
	if (IntegrationProcessId == syncGContactProcessUId ||
		IntegrationProcessId == syncGCalendarProcessUId) {
		SyncProcessResult = (string)moduleProcess.GetPropertyValue("SyncResult");
	}
}

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

Ведь на момент выполнения функции Execute код скрипта продолжает выполняться, а дочерний БП ещё даже не запустился, process.Status не будет равен Terrasoft.Core.Process.ProcessStatus.Done.

Александр, именно. Нужно получить параметры с вызываемого процесса.

 

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

Сразу после запуска точно нельзя, он ведь ещё не отработал. А если делать средствами БП, в одном элементе запустить подпроцесс, далее элементе «Формула» или в условии перехода обратиться к его параметру, как тут:

scr_process_creation_designer_conditional_formula.png

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

Придётся менять архитектуру логики.

Александр, спасибо за отклик. 

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

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

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

Всем привет!

 

https://academy.terrasoft.ru/documents/technic-sdk/7-15/sozdanie-anonimnogo-veb-servisa

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

Все работает прекрасно. По крайней мере я смогу получить DocumentFile.

Кто-нибудь знает, а если и покажет пример до добавлению, обновлению и удалению подобных объектов?

Нравится

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

{Получение одной записи}

var statusSchema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var newStatus = statusSchema.CreateEntity(UserConnection);

newStatus.FetchFromDB("Name", "4. Completed");

var item = newStatus.GetTypedColumnValue<Guid>("Id");

 

{Изменение}

var schema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var communication = schema.CreateEntity(UserConnection);

communication.FetchFromDB("Name", city);

communication.SetColumnValue("CommunicationTypeId", Guid.Parse(typeId));

communication.SetColumnValue("AccountId", primaryEntityId);

communication.SetColumnValue("Number", number);

communication.Save();

 

{Добавление}

var schema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var communication = schema.CreateEntity(UserConnection);

communication.SetDefColumnValues();

communication.SetColumnValue("CommunicationTypeId", Guid.Parse(typeId));

communication.SetColumnValue("AccountId", primaryEntityId);

communication.SetColumnValue("Number", number);

communication.Save();

 

{Удаление}

EntitySchema accountSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");

Entity accountEntity = accountSchema.CreateEntity(UserConnection);

if (accountEntity.FetchFromDB("Name", accountName)) {

    accountEntity.Delete();

}

 

{{Получение колейции c применением фильтра}}

var result = 0.0;

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "OpportunityProductInterest");

string quantity = esq.AddColumn("Quantity").Name;

IEntitySchemaQueryFilterItem opportunityIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Opportunity.Account", accountId);

IEntitySchemaQueryFilterItem typesTariffServiceIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Product.PsTypesTariffServices", typesTariffServiceId);

esq.Filters.Add(opportunityIdFilter);

esq.Filters.Add(typesTariffServiceIdFilter);

var entities = esq.GetEntityCollection(UserConnection);

if (entities.Count > 0)

{

    result = entities[0].GetTypedColumnValue<int>(quantity);

}

return result;

{{Изменение колейции c применением фильтра}}

var result = "blabla";

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "OpportunityProductInterest");

esq.AddAllSchemaColumns();

string quantity = esq.AddColumn("Quantity").Name;

IEntitySchemaQueryFilterItem opportunityIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Opportunity.Account", accountId);

IEntitySchemaQueryFilterItem typesTariffServiceIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Product.PsTypesTariffServices", typesTariffServiceId);

esq.Filters.Add(opportunityIdFilter);

esq.Filters.Add(typesTariffServiceIdFilter);

var entities = esq.GetEntityCollection(UserConnection);

if (entities.Count > 0)

{

    foreach(var item in entities)

    {

        item.SetColumnValue("KtRequestId", result);

    }

}

Михаил, для добавления файлов используют FileApiService, примеры работы с ним см. тут. Вы хотите сделать такой же, но анонимный?

 

Что Вы имеете в виду под добавлением, обновлением и удалением объектов? Речь о файлах?

Александр,

Меня интересует API что бы можно было работать через C#.

{Получение одной записи}

var statusSchema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var newStatus = statusSchema.CreateEntity(UserConnection);

newStatus.FetchFromDB("Name", "4. Completed");

var item = newStatus.GetTypedColumnValue<Guid>("Id");

 

{Изменение}

var schema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var communication = schema.CreateEntity(UserConnection);

communication.FetchFromDB("Name", city);

communication.SetColumnValue("CommunicationTypeId", Guid.Parse(typeId));

communication.SetColumnValue("AccountId", primaryEntityId);

communication.SetColumnValue("Number", number);

communication.Save();

 

{Добавление}

var schema = UserConnection.EntitySchemaManager.GetInstanceByName("OrderStatus");

var communication = schema.CreateEntity(UserConnection);

communication.SetDefColumnValues();

communication.SetColumnValue("CommunicationTypeId", Guid.Parse(typeId));

communication.SetColumnValue("AccountId", primaryEntityId);

communication.SetColumnValue("Number", number);

communication.Save();

 

{Удаление}

EntitySchema accountSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");

Entity accountEntity = accountSchema.CreateEntity(UserConnection);

if (accountEntity.FetchFromDB("Name", accountName)) {

    accountEntity.Delete();

}

 

{{Получение колейции c применением фильтра}}

var result = 0.0;

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "OpportunityProductInterest");

string quantity = esq.AddColumn("Quantity").Name;

IEntitySchemaQueryFilterItem opportunityIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Opportunity.Account", accountId);

IEntitySchemaQueryFilterItem typesTariffServiceIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Product.PsTypesTariffServices", typesTariffServiceId);

esq.Filters.Add(opportunityIdFilter);

esq.Filters.Add(typesTariffServiceIdFilter);

var entities = esq.GetEntityCollection(UserConnection);

if (entities.Count > 0)

{

    result = entities[0].GetTypedColumnValue<int>(quantity);

}

return result;

{{Изменение колейции c применением фильтра}}

var result = "blabla";

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "OpportunityProductInterest");

esq.AddAllSchemaColumns();

string quantity = esq.AddColumn("Quantity").Name;

IEntitySchemaQueryFilterItem opportunityIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Opportunity.Account", accountId);

IEntitySchemaQueryFilterItem typesTariffServiceIdFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Product.PsTypesTariffServices", typesTariffServiceId);

esq.Filters.Add(opportunityIdFilter);

esq.Filters.Add(typesTariffServiceIdFilter);

var entities = esq.GetEntityCollection(UserConnection);

if (entities.Count > 0)

{

    foreach(var item in entities)

    {

        item.SetColumnValue("KtRequestId", result);

    }

}

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

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

Как я могу передать строковый спец символ вместе с ссылкой?

Добрый день, когда передаю строку вида, которая содержит ссылку

xmlns:xs= \"http://www.w3.org/2001/XMLSchema\"

то на выходе я получаю \"www.w3.org/2001/XMLSchema", без последнего символа \, с строками отличными от данной все работает нормально

Вот последняя версия , с которой я пытаюсь произвести замену

historyContactInfo = historyContactInfo.Replace(@"\r\n", string.Empty).Replace(@"\", string.Empty).Replace("\"",@" \" +"\"");

 

Пробуя подобное на .net Framework все формируется нормально

Также я пробовал делать замену с помощью символа &quot, все равно не пропускает

Нравится

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

Опишите более подробно, что делаете, что хотели и что вышло.

В системе серверный код компилируется под тот же  .net Framework или .net Core компилятором от Microsoft, отличий быть не должно.

 

Как работать с этим символом, см. тут:

The backslash ("\") character is a special escape character used to indicate other special characters such as new lines (\n), tabs (\t), or quotation marks (\"). If you want to include a backslash character itself, you need two backslashes or use the @ verbatim string: "\\Tasks" or @"\Tasks".

Read the MSDN documentation/C# Specification which discusses the characters that are escaped using the backslash character and the use of the verbatim string literal.

Generally speaking, most C# .NET developers tend to favour using the @ verbatim strings when building file/folder paths since it saves them from having to write double backslashes all the time and they can directly copy/paste the path, so I would suggest that you get in the habit of doing the same.

 

 

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

Добрый день. Вопрос в том, что нужно на back-end аутентифицироваться с паролем, который находится в системной настройке с типом зашифрованная строка. Т.е. какой-то правильный decrypt 

Нравится

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

Здравствуйте! Воспользуйтесь данной конструкцией - https://prnt.sc/vdvss9

Как видно на скрине возвращаемое значение - 123456

хотя в системной настройке оно зашифровано - https://prnt.sc/vdvtrg

как и в БД - https://prnt.sc/vdvuni

Здравствуйте! Воспользуйтесь данной конструкцией - https://prnt.sc/vdvss9

Как видно на скрине возвращаемое значение - 123456

хотя в системной настройке оно зашифровано - https://prnt.sc/vdvtrg

как и в БД - https://prnt.sc/vdvuni

А как можно получить такую зашифрованую строку в бизнес-процессе без применения "Задания-сценарий"?

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

добрый день! В БП система не даст Вам сохранить данное значение в параметр -

https://prnt.sc/vg0fwn

Если Вам необходимо использовать авторизацию в стороннем web-сервисе и то создайте, заранее, в разделе Web сервис, выбрать метод аутентификации Basic и добавить в него пароль - https://prnt.sc/vg0ji6

и в бп использовать уже элемент "Вызвать веб-сервис" - https://prnt.sc/vg0k4o, в данном контексте можно так использовать пароль в зашифрованном виде, иначе только через задание сценарий. Подробнее о работе с элементом "Вызвать веб-сервис" описано в данной статье

Нигрескул Алексей,

у меня JWT авторизация, так что получение токена я реализовал отдельным элементом процесса, и к нему как раз системная настройка с паролем. Реализовал через задание-сценарий, но думал есть более красивый способ. Видимо реализую еще один элемент процесса "Получение зашифрованной настройки" с выбором настройки и на выходе разшифрованный текст, будет наверно удобнее

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

добрый день! Т.е. данный токен нужно передавать в Json-объекте, верно? В таком случае создаете веб сервис без авторизации, создаете метод POST делаете тело передаваемого объекта и в нем уже можно указать нашу зашифрованную переменную - 

https://prnt.sc/vgm9dg&nbsp;

https://prnt.sc/vgm9t6

Наверное Вы это искали?

 

Нигрескул Алексей,

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

var client = new RestClient(urlForToken);
client.Timeout = -1;
var request = new RestRequest(urlMethod, Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Accept",
  "text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8");
request.AddParameter("username", login);
request.AddParameter("password", password);
IRestResponse response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK)
{
	Token = response.Content;
}
StatusCode = (int)response.StatusCode;

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

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

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

 

Пытаюсь загрузить dll на вкладке "Внешние сборки". После выбора файла вылетает ошибка

Action: Change

ControlId: FileUploadEdit

SubmitAjaxEventConfig: {"config":{"extraParams":{}}}

 

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

Прикрепленные файлы

Нравится

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

Елена, причина может быть в следующем:

Из-за системных настроек ограничивающих виды вложений (File extensions DenyList) невозможно к пакету добавить библиотеку — вместо ошибки будет просто текст «ошибка в работе приложения». В логах  при этом также ничего очевидного.

Обходное решение: в справочник «Управление файлами \ Список исключений из проверки безопасности файлов» добавить: «/FileUpload.aspx».

В 7.17 это уже решено.

Елена, причина может быть в следующем:

Из-за системных настроек ограничивающих виды вложений (File extensions DenyList) невозможно к пакету добавить библиотеку — вместо ошибки будет просто текст «ошибка в работе приложения». В логах  при этом также ничего очевидного.

Обходное решение: в справочник «Управление файлами \ Список исключений из проверки безопасности файлов» добавить: «/FileUpload.aspx».

В 7.17 это уже решено.

Надо прописать именно /FileUpload.aspx в справочнике.

Андрей, картинка не грузится. И в чём отличие от того, что написал я?

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

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

Прикрепленные файлы

Нравится

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

Добрый день.

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

Таким образом, чтобы на все поля, кроме полей средств связи (мобильный телефон, рабочий телефон и email) был доступ на чтение, а для полей средств связи на чтение и редактирование.

Нужно в объекте ContactCommunication убрать наследование прав от Contact. И уже управлять правами на ContactCommunication независимо от Contact

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

В объекте

ContactCommunication 

наследование прав от Контакта очистила, опубликовала изменения. Но при сохранении записи выходит предупреждение, что "

Недостаточно прав для изменения записи в объекте "Контакт".

" . Подскажите пожалуйста, другие варианты?! 

Добрый день.

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

Таким образом, чтобы на все поля, кроме полей средств связи (мобильный телефон, рабочий телефон и email) был доступ на чтение, а для полей средств связи на чтение и редактирование.

Интересно, а синхронизацию средств связи с полями Contact можно сделать на стороне сервера без учёта прав доступа на Contact? Так как редактирующий средства связи может иногда иметь права на редактирование самого Contact



Или, наоборот, не разрешать использовать те средства связи, которые синхронизируются с полями Contact 

Владимир Соколов пишет:

Интересно, а синхронизацию средств связи с полями Contact можно сделать на стороне сервера без учёта прав доступа на Contact?

Конечно, можно и так реализовать, но тут уже без навыков разработки не сделать.

В конечном счете, все зависит от Вашей бизнес-задачи.

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

Алла Савельева пишет:

Добрый день.

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

Таким образом, чтобы на все поля, кроме полей средств связи (мобильный телефон, рабочий телефон и email) был доступ на чтение, а для полей средств связи на чтение и редактирование.

Добрый день! Коллеги, благодарю за Ваши ответы! Добавление номеров работает  

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