Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Ответить
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение EMZ » 03 ноя 2019, 23:12

Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта? Не хочется напрямую к базе MSSQL обращаться...
Получить атрибуты я могу, а как установить значение атрибута? Не нашёл в документации что-то...
Вот так получаю:
часть кода:
$response2 = $webservice.GetMeasurePointListExtended(32)
foreach ($mp in $response2.MeasurePointList)
{
foreach ($attr in $mp.Attributes)
{
Write-Host $attr.AttributeCode ":" $attr.AttributeValue
}
}
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6894
Зарегистрирован: 02 мар 2016, 05:45

Re: Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение Иван Славный » 05 ноя 2019, 03:45

Вы используете Веб-сервис доступа к данным, который почему то называете LersFramework. Это неправильно!

С помощью Веб-сервиса невозможно изменять данные. Как следует из его названия, он только предоставляет доступ к данным. Также хочу отметить, что данный Веб-сервис уже устаревает и для новых приложений, основанных на веб, мы настоятельно рекомендуем использовать REST API.

Непосредственно из LersFramework можно задать значение атрибута. Пожалуйста, руководствуйтесь документацией LersFramework.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение EMZ » 05 ноя 2019, 16:48

Я вас понял, спасибо.
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение EMZ » 06 ноя 2019, 08:40

Тему пока не закрывайте, уточню неясные моменты. Разбираюсь с LersFramework и PowerShell. К серверу подключился, список точек получил с атрибутами. Дальше пока читаю...
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение EMZ » 07 ноя 2019, 22:31

В принципе я разобрался, даже работает. Приведу здесь код, может кому поможет. Если что не так делаю, поправьте, пожалуйста. Это мой первый опыт использования LersFramework. Ещё планирую из файла Excel данные для новых атрибутов брать.

Код: Выделить всё

#Requires -Version 3.0
[system.reflection.assembly]::LoadWithPartialName("Lers.Core") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Lers.System") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Lers.Utils") | Out-Null
$srvLers = New-Object Lers.LersServer
$pswd = [Lers.Networking.SecureStringHelper]::ConvertToSecureString("password")
$authInfo = New-Object Lers.Networking.BasicAuthenticationInfo("login", $pswd)
$srvLers.Connect("server", 10000, $authInfo) | Out-Null
$mpArr = $srvLers.MeasurePoints.GetList('Regular', 'Attributes')
if ($mpArr.Length -le 0)
{
	Write-Host 'Список точек учета пуст'
	exit
}
foreach ($mp in $mpArr)
{
#выбираем только точки теплоснабжения
	if ($mp.systemtype -ne 'Heat') { Continue }
#просматриваем все атрибуты по точке учета и находим нужный
	foreach ($key_attr in $mp.Attributes.Keys)
	{
                     if ($key_attr -eq "needed_key")		
                     {
			Write-Host $key_attr ":" $mp.Attributes[$key_attr]
			#Записываем новое значение 
			$mp.Attributes[$key_attr] = "new_value"
          		}
	}
	#Сохраняем точку учёта
	if ($mp.Attributes.IsModified)
	{
		$saveOptions = New-Object Lers.Core.MeasurePoint+SaveMeasurePointOptions
		$saveOptions.Force = $true 
		$mp.SaveAsync($saveOptions)	| Out-Null
	}
}

#Отключаемся от сервера
$srvLers.Disconnect(200)
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Как с помощью Lers.Framework и PowerShell изменить значение атрибута точки учёта?

Сообщение EMZ » 14 ноя 2019, 19:27

Есть такой нюанс: если нужно изменять значения нескольких атрибутов точки учёта в цикле по всем атрибутам, то при попытке взять для сравнения следующий атрибут (при изменении какого-либо предыдущего), ругается на то, что не может получить список, т.к. атрибуты изменены(или как-то так) и изменяет только один - первый подходящий по условию - атрибут. Поэтому сначала я в цикле формирую массивы новых ключей и атрибутов, а потом - в другом цикле - вношу изменения в атрибуты и после циклов сохраняю точку учёта.
Ответить