14.03.2008, 14:27 | #1 |
Участник
|
Программные вызовы checkin, checkout
В качестве VersionControl - VSS. Хотелось бы програмно обработать некоторые таблицы из группы, следовательно необходимо предварительно сделать чек-аут, внести изменения, а потом сделать чекин, что бы изменения сохранились.
Вот простенький джобик, которым пробую зачекаутить какойто обьект: X++: static void Job8(Args _args) { VersionControl Vc; TreeNode tn; UtilElements ueTable; ; Vc=new VersionControl(); select firstonly ueTable where ueTable.recordType==UtilElementType::Class && ueTable.name=="SomeClass"; tn=xUtilElements::getNodeInTree(ueTable); Vc.checkOut(tn); } UPD: скорее всего, что бы работать с любой VersionControl системой надо выполнять работу на верхнем уровне - SysVersionControlAddin. Ща проверю эту гипотезу.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 14.03.2008 в 16:59. |
|
14.03.2008, 18:08 | #2 |
Участник
|
Всё, кажеццо разобрался, теперь надо копать в глубь.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 14.03.2008 в 18:13. |
|
14.03.2008, 18:35 | #3 |
Участник
|
А поделиться? Как именно получилось?
__________________
С уважением, Dozer |
|
14.03.2008, 19:18 | #4 |
Участник
|
В общем, центральный во всей вершин контрол системе Аксапты - SystemVersionControlSystem класс. Система напрямую работает только с ним. Сам он как таковой реализации прямых комманд вершин-контроловских не содержит. Ну конечно они не пустые эти методы, иначе класс можно было бы смело делать интерфейсом, но реализация там только косвенная(Думаю, что разработчики не сделали класс абстрактным, только что б не обращаясь через класс конкретной вершин-контроловской системы, например VSS, получать доступ к таковому через общий класс.) В общем, он обеспечивает интерфейс для классов конкретных систем, например: SystemVersionControlSystemSourceSafe экстендит SystemVersionControlSystem. У ystemVersionControlSystem соответственно конечно же есть метод construct, в котором и решаеццо, экземпляр какого наследника создавать. Воть, ещё пару слов о методах класса SystemVersionControlSystem. ключевыми для собсна контроллинга являются те, которые начинаются с префикса: "command" в качестве параметра принимают обьек класса, который имплементирует интерфейс SysVersionControllable. Например, таким обьектом может быть обьект типа SysTreeNode. Ну вот, скажем, ежели надобно зачекаутить Нужный нам класс какой-нить, а имя класса допустим вычесляется динмически, то выглядеть это может так:
X++: TreeNode tn; UtilElements ueTable; Args args; ; select firstonly ueTable where ueTable.recordType==UtilElementType::Class && ueTable.name==My_class_name; tn=xUtilElements::getNodeInTree(ueTable); versioncontrol.init(); versioncontrol.parmSysVersionControlSystem().commandCheckIn(SysTreeNode::newTreeNode(tn)); //parmSysVersionControlSystem() метод versioncontrol класса возвращает класс текущей вершин-контрол системы. З.З.Ы И всё бы хорошо, но без выскакивающих инфологов и форм не обойтись, если юзать непосредственно методы SysVersionControlSystem класса. Вот она плата за универсальность(з.ы ну если конечно не править сам класс, сделать это можно и без ущерба, но всё-равно не хочеццо). Если же затачивацца под конкретную вершин-контрол систему, универсальность можно запить водой, и то не знаю(не смотрел ещё) можно ли без инфологов и форм на чек-аут и чек-ин обойтись. Первая мысль, может и глупая, которая пришла, просто закрывать окна и инфологи с помощью WinApi, правда я пока не знаю как)) Если кто разовьет мысль, буду благодарен!
__________________
Axapta has seduced me deadly! |
|