API almaGRID • Графовые модели

Объектная модель #

Объекты #

Объекты API almaGRID создаются автоматически при запуске приложения almaGRID.

ОбъектОписание
app Приложение almaGRID.
databaseБаза данных.
err Обработчик ошибок.
logЛогирование операций.
objectsХранилище объектов базы данных. В моделях объекты являются дугами графа. Также в объектах хранятся значения элементов графа (дуг, узлов) и данные, необходимые для работы модели.
rndГенераторы случайных чисел, с заданным распределением вероятности. Используются в моделях с нечеткой логикой и для стохастического моделирования.
tagsДерево тегов базы данных. В моделях теги являются узлами графа.

Классы #

КлассОписание
AttribАтрибут.
AttribCollectionКоллекция атрибутов, которая наследуется следующими классами ChainItem, Chain, GraphItem, Graph — то есть объекты этих классов имеют свойства и методы класса AttribCollection.
ChainКоллекция цепочек (путей на графе).
ChainItemЭлемент цепочки (пути на графе). Узел или дуга.
ChainCollectionКоллекция цепочек (путей на графе).
DictionaryИменованный список. Универсальная коллекция пар «Ключ» — «Значение».
GraphПредставление графа.
GraphItemЭлемент графа — узел или дуга.
ListСписок. Универсальная коллекция элементов.
ObjОбъект базы данных. Объекты в моделях являются дугами графа или используются для хранения в базе данных информации, необходимой для расчетов и построения моделей.
OperatorЭлемент графа — узел или дуга.
ObjCollectionКоллекция объектов базы данных.
SeriesРяд. Последовательность значений.
TagSetНабор тегов.

Инструменты #

КлассОписание
MonteCarloИнструмент стохастического моделирования методом Монте-Карло. Используется для моделей с нечеткой логикой, для вероятностных вычислений на графах.
NelderMeadИнструмент поиска решения методом Нелдера-Мида. Инструмент нелинейной оптимизации. Используется в эвристических алгоритмах и методах машинного обучения.

Типы данных #

Простые типы данных #

ТипОписание
BooleanTrue или False
StringСтрока
IntegerЦелое число в диапазоне от -2’147’483’648 до 2’147’483’647
DoubleЧисло в диапазоне от -1.79769313486232e308 до 1.79769313486232e308

Типы классов и инструментов #

Типы данных, описываемые классами и инструментами.

Экземпляры создаются

При присваивании значений экземплярам переменных с типом классов и инструментов в VBScript и VBA необходимо использовать оператор Set.

Тип данных «Variant» #

Variant — это специальный тип данных, который может содержать любой вид данных или «Nothing» («Null»).

Если Variant содержит простой тип данных, то в переменной Variant хранится само значение.

Если Variant содержит экземпляр класса или инструмента, то в переменной Variant хранится ссылка на этот экземпляр.

Логи almaGRID #

Лог ядра almaGRID #

Расположение лога работы ядра almaGRID: [Документы пользователя]\almaGRID\almaGRID.log.

Этот лог перезаписывается в начале каждой сессии работы с almaGRID

  • при выполнении входа пользователя «almaGRID» — «Начать работу»,
  • при вызове Database.AprjOpen API almaGRID.

Лог API almaGRID #

Расположение лога работы ядра almaGRID: [Документы пользователя]\almaGRID\ag_yyyy-MM-dd.log. Где yyyy-текущий год, MM-месяц и dd-день.

Этот лог дополняется по мере выполнения функций API.

Использование скриптовых хостов для вызовов API almaGRID #

VBScript #

Справочник по VBScript — www.spravkaweb.ru/vbscript.

  • VBScript не работает с двухбайтными кодировками символов, при передаче названий тегов и текстовых значений объектов из строк, заданных в скрипте, используйте
ag.app.Set "ScriptEncoding", "Default"
  • При использовании методов, принимающих в модель данные из файлов, необходимо, чтобы файлы данных были в кодировке UTF-8.

Особенность VBScript — скобки при вызове методов #

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

VBScript

MySub 1, "one", Var1 		'вызов процедуры
MySub(1, "one", Var1) 		'ошибка
Call MySub(1, "one", Var1)	'корректно, т.к. используется ключевое слово Call
MyFunc "Hello"				'вызов функции, как процедуры
result = MyFunc "Hello"		'ошибка
result = MyFunc("Hello")    'вызов функции и использование возвращаемого значения
MySub (1*5)+2, (Var1) 		'вызов процедуры с передачей вргументов "по значению" (ByVal), даже если в MySub указана передача "по ссылке" (ByRef)
MySub (1)					'корректно

JScript (JavaScript) #

JavaScript и JScript — это разные названия для одного и того же языка. Причина, по которой названия разные, заключалась в том, чтобы обойти проблемы с товарными знаками.

Справочник по Jscript — www.spravkaweb.ru/jscript.

Следует учитывать, что JavaScript является чувствительным к регистру символов.

PowerShell #

Справочник по PowerShell- learn.microsoft.com/ru-ru/powershell.

  • Для выполнения скриптов необходимо предоставить консоли PowerShell прав администратора
  • При использовании методов, принимающих в модель данные из файлов, необходимо, чтобы файлы данных были в кодировке UTF-8.

Пример скрипта #

VBScript

'создаем объект Excel.Application
Dim objExcel
Set objExcel = CreateObject("Excel.Application")

'ожидаем готовности приложения Excel
Do While not (objExcel.Ready And objExcel.Interactive) : objExcel.DoEvents: Loop
objExcel.Calculate
do while objExcel.CalculationState <> 0: objExcel.DoEvents: Loop

'запрещаем отображение приложения Excel - необходимо для вызова API almaGRID из внешних приложений
objExcel.Application.Visible = false

'создаем объект WScript.Shell
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

'определяем папку в которой запущен скрипт (расположение папки можно задать явно)
'в полном пути файла - должны быть только латинские буквы
Dim ScriptDir
ScriptDir = WshShell.CurrentDirectory

'указываем файл, в которм будет сфомирован отчет и создаем его объекты
ExcecFilePath = ScriptDir & "\Example3-1.xlsm"
Dim objWorkbook
Set objWorkbook = objExcel.Workbooks.Open(ExcecFilePath)
Dim objSheet 
set objSheet = objWorkbook.Sheets(1)

'объявляем объект API almaGRID
Dim AGaddIn
Dim AG

'создаем объект API almaGRID и ожидаем готовности приложения almaGRID
Err.Clear 
On Error Resume Next
Err.Number = 1
isReady = false
Do until Err.Number = 0 and isReady
	objExcel.DoEvents
	Wscript.sleep 200
	Set AGaddIn = objExcel.COMAddIns("almaGRID.almaGRID")
	Set AG = AGaddIn.Object
	Err.Clear
	isReady = AG.App.IsReady
Loop
On Error GoTo 0

'подключаемся к базе данных almaGRID как пользователь "Administrator", с паролем "111" с использованием языка модели "Russian"
if AG.Err.ErrorCode = 0 then
	AG.Database.AprjOpen ScriptDir & "\test.aprj", "Administrator", "111", "Russian"
end if

if AG.Err.ErrorCode = 0 then
	AG.App.ScriptEncoding "Default"
end if

'в родительском узле дерева тегов "s1sb3ec4a89dca34036a83e0961c89f56d3s" создаем новый тег с названием "НовыйТег" с ID="fa124"
if AG.Err.ErrorCode = 0 then
	id1 = AG.Tags.AddTag("НовыйТег", "fa124", "s1sb3ec4a89dca34036a83e0961c89f56d3s")
	'для созданного тега создаем два дочерних тега 
	id = AG.Tags.AddTag("Tag27", "fa125", "s1sb3ec4a89dca34036a83e0961c89f56d3s" & id1 & "s" )
	id = AG.Tags.AddTag("Tag28", "fa126", "s1sb3ec4a89dca34036a83e0961c89f56d3s" & id1 & "s" )
end if

if AG.Err.ErrorCode = 0 then
	'обращаемся к тегу по его id, и используем для название тега, сохраненную в переменной скрипта
	label = AG.Tags.GetLabel("b3ec4a89dca34036a83e0961c89f56d3")
	Wscript.Echo "[" & label & "]"	
	AG.App.ScriptEncoding "UTF8"
	id = AG.Tags.GetID(label)
	Wscript.Echo id
	
	'обращаемся к тегу по названию, заданному в скрипте
	AG.App.ScriptEncoding "Default"
	id = AG.Tags.GetID("Риски НИОКР")
	Wscript.Echo id
end if

'загружаем в базу данных ветвь тегов из csv-файла 
if AG.Err.ErrorCode = 0 then
    AG.App.CsvDelimiter  ";"
	AG.App.ScriptEncoding "UTF8"
'    AG.Objects.AddCsv ScriptDir & "\Test-1.csv", "Table_TagLabels"
	AG.Objects.AddCsv ScriptDir & "\Test-2.csv", "Table_TagLabels_Type"
end if

'создаем бэкап текущей базы данных, полное имя бэкапа сохраняем в "backupFileName"
if AG.Err.ErrorCode = 0 then
	backupFileName = AG.Database.AprjBackup
	Wscript.Echo backupFileName
end if

'удаляем ветвь "s1sb3ec4a89dca34036a83e0961c89f56d3sbfca689236894f0090b709da0bc3d45ds"
if AG.Err.ErrorCode = 0 then
	AG.Tags.RemoveTag "s1sb3ec4a89dca34036a83e0961c89f56d3sbfca689236894f0090b709da0bc3d45ds"
end if

'принимаем теги из файла "TagsTree-f2.csv" в модель в узел дерева тегов "s1sb3ec4a89dca34036a83e0961c89f56d3s"
if AG.Err.ErrorCode = 0 then
    AG.App.CsvDelimiter  ";"
    AG.Tags.AddCsv ScriptDir & "\TagsTree-f2.csv", "s1sb3ec4a89dca34036a83e0961c89f56d3s", "Id_Lang_Tags" 
end if

'выполняем расчет модели по шаблону "3128bdd8102c4ba59f3b3b97a81c4671" с подстановкй тегов 's000489s'->'s000490s'
if AG.Err.ErrorCode = 0 then
	AG.Tags.PatternToWorksheet "3128bdd8102c4ba59f3b3b97a81c4671", "Calc", "<prm><subst fromTag='s000489s' toTag='s000490s'></subst></prm>"
end if

'если была ошибка, то восстанавливаем базу данных из бэкапа "backupFileName"
if AG.Err.ErrorCode <> 0 then
	AG.Database.AprjRestore backupFileName
end if

'закрываем подключение к базе данных
AG.Database.Close	

'запрещаем приложению Excel запрашивать подтверждения
objExcel.DisplayAlerts = False

'сообщаем пользователю о результате работы скрипта и закрываем рабочую книгу 
if AG.Err.ErrorCode = 0 then
	Wscript.Echo "Calculation successfully completed"
  	'закрываем рабочую книгу с сохранением внесенных изменений
  	objWorkbook.Close(True) 
else
	Wscript.Echo "Calculstion error"
  	'закрываем рабочую книгу без сохранения внесенных изменений
  	objWorkbook.Close(False) 
end if

'Закрываем и освобождаем все использованные экземпляры объектов
objExcel.Quit				'Exit from Excel Application
Set objWorkbook = Nothing	'Releasing Workbook object
Set objExcel = Nothing		'Releasing Excel object
Set WshShell =  Nothing		'Releasing WshShell object

WScript.Quit

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: