Добрый день. Вопрос в том, что нужно на 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 

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;

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

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

В датасете по умолчанию дата хранится в расширенном виде.
Задача: записать в переменную дату без времени.

Если в переменной только дата, можно привести к формату dd.mm.yyyy следующим образом:

ExtractDateAsStr(new Date(Dataset.ValAsDateTime('Date'))).getVarDate);

Если дата должна выводиться в строке:

DateToStr(Dataset.ValAsDateTime('Date'));

Нравится

Поделиться

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

Пример на эту тему :
Задача : Как в скрипте получить дату в виде XXXX-XX-XX XX:XX:XX из поля даты в датасете

Пример кода:

var theDate = new Date(Date.parse(Dataset.ValAsDateTime('Date')))
MessageBox( theDate.getFullYear() + "-" + (theDate.getMonth()+ 1) + "-" + theDate.getDate() + " "+theDate.getHours() + ":" + theDate.getMinutes() + ":" + theDate.getSeconds() );

где Date - поле с датасета

Результат работы : 2011-6-27 12:45:0

При выводе таким способом в строку даты, минуты и часы до 10 (0-9) выводятся без ноля.

Например:

theDate = new Date();
theDate.setMinutes(09);
 
Log.Write(1, theDate.getMinutes(09));

Результат: 9

Можно ли как-то это побороть без парсинга?

Метод getMinutes не имеет параметров, его стоит вызывать просто theDate.getMinutes(). И он возвращает число.

Чтобы получить строку с нулём, можно обернуть функцией:

function AddZero(number) {
	return (number < 10) ? '0' + number : number;
}
 
theDate = new Date();
theDate.setMinutes(9);
 
Log.Write(1, AddZero(theDate.getMinutes()));
Показать все комментарии

Рассмотрим задачу: необходимо реализовать множественный выбор, а именно, данные записываются из окна MultiSelectData в поле Lookup в виде строки String через запятую. Затем при открытии окна MultiSelectData - эти данные из строки отображаются в окне в виде списка StringList.

Наиболее правильным решением поставленной Вами задачи будет следующий алгоритм:

1) Создать 2 поля с типом строка, в которой необходим множественный выбор, в одном хранить IDs (ExtraOfferingIDs), в другом Имена (ExtraOfferingName).

2) В окне редактирования записи создать управляющий элемент (контрол) с типом LookupControl, например edtExtraOfferingName.

3) При инициализации окна (например, функция Initialize), необходимо считывать данные из Датасета и записывать их в созданный управляющий элемент, например:

edtExtraOfferingName.Value = Dataset.Values('ExtraOfferingIDs');
edtExtraOfferingName.Text = Dataset.ValAsStr('ExtraOfferingName');

4) На событии управляющего элемента OnPrepareSelectWindow необходимо этому окну передавать следующие атрибуты – KeyValues, DisplayFieldValues:
Self.Attributes('KeyValues') = Dataset.Values('ExtraOfferingIDs');
Self.Attributes('DisplayFieldValues') = Dataset.ValAsStr('ExtraOfferingName');

5) В окне MultiSelectData хранятся значения типа StringList (список). Следовательно, заполнение Вашего окна полученными значениями предусматривает предварительного создания функции, которая будет преобразовывать строку (с несколькими данными, приписанных например через запятую) в список. Иначе в окно MultiSelectData Вы не сможете поместить никаких значений.
В том случае если подобной функции Вы не реализовывали, то ниже высылаю Вам пример подобной функции. Реализовать необходимую Вам функцию Вы можете по аналогии с предоставленным примером:

function CreateStringListByCommaString(CommaString) {
var StringsList = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.split(',');
for (var i in StringDataArray) {
var StrData = StringDataArray[i];
StringsList.Add(StrData);
}
}
return StringsList;
}

6) На событии OnNotify необходимо обработать полученные из wnd_MultiSelectData значения, и записать их в таблицу. Примерный программный код приведен ниже:

eyValues = Sender.Attributes('KeyValues');
KeyValuesStr = KeyValues.CommaText;
DisplayFieldValues = Sender.Attributes('DisplayFieldValues');
DisplayFieldValuesStr = DisplayFieldValues.CommaText;
Dataset.Values('ExtraOfferingIDs') = KeyValuesStr;
Dataset.Values('ExtraOfferingName') = DisplayFieldValuesStr;
edtExtraOfferingName.Text = DisplayFieldValuesStr;

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

Для преобразования строки (набора нескольких значений через запятую) в список, предлагаю следующий пример:

function CreateStringListByCommaString(CommaString) {
var StringsList = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.split(',');
for (var i in StringDataArray) {
var StrData = StringDataArray[i];
StringsList.Add(StrData);
}
}
return StringsList;
}

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

Подскажите пожалуйста можно ли этот StringsList отобразить в визуальном компоненте?

Можно отобразить его свойства Text и CommaText.

Немного не так, в коде выше напутаны названия переменных, нужно писать так

var CommaString = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.CommaText.split(',');
...

Пример:

function btnOKOnClick(Control) {
var my = GetAttribute(Control.ParentWindow, 'nn');		
 
if (my != null) {
var StringDataArray = my.CommaText.split(',');
for (var i in StringDataArray) {
MessageBox(StringDataArray[i]);
} 
}
 
 
}
 
function Main() {
	var Window = Services.GetNewItemByUSI('wnd_Testing');
	Window.IsDesigning = false;
	Window.Prepare();
	Window.Show();
}
 
function wnd_TestingOnPrepare(Window) {
var arr =  System.CreateObject('TSObjectLibrary.StringsList');
arr.Add('1');
arr.Add('2');
SetAttribute(Window, 'nn', arr);
}
Показать все комментарии