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

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

Объекты #

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

ОбъектОписание
DatabaseБаза данных.
App (Application)Приложение almaGRID.
Err (Error)Обработчик ошибок.
LogЛогирование операций.
ObjectsХранилище объектов базы данных. В моделях объекты являются дугами графа.
TagsДерево тегов базы данных. В моделях теги являются узлами графа.

Классы #

КлассОписание
ObjОбъект базы данных. Объекты в моделях являются дугами графа или используются для хранения в базе данных информации, необходимой для расчетов и построения моделей.
ObjCollectionКоллекция объектов базы данных.
ListУниверсальная коллекция элементов.
DictionaryУниверсальная коллекция пар «ключ» — «значение».

Логи 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 не работает с двухбайтными кодировками символов, при передаче названий тегов и текстовых значений объектов из строк, заданных в скрипте, используйте
App.ScriptEncoding "Default"
  • При использовании методов, принимающих в модель данные из файлов, необходимо, чтобы файлы данных были в кодировке UTF-8.

Использование 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.

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

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