04.09.2006, 21:41 | #1 |
Участник
|
Программный импорт xpo
Кто-нибудь пытался выполнить пограммно импорт xpo-шника?
Есть какие-нибудь еще варианты, кроме использования класса SysImportElements и формы SysImportDialog? В справке есть ссылка на метод xInfo::import, но самого метода я не нашел... И если кроме SysImportElements других вариантов нет, то как при импорте заставить его не запрашивать подтверждение на импорт уже существующего объекта с таким именем? (игра с флагом в функции InfoLog.ImportElements и его значениями из AotExport ничего не дала). |
|
05.09.2006, 06:06 | #2 |
Модератор
|
Нет аксы под рукой пишу, потому что в форуме это уже пробегало, поищите поиском. Там был еще как получить список проектов. А там есть метод export.
С Уважением, Георгий |
|
05.09.2006, 09:44 | #3 |
Участник
|
Взято отсюда
X++: // Import _node from WorkingCopy file void import(TreeNode _node, FilePath fileName=this.pathFor(_node)) { SysImportElements import=new SysImportElements(); boolean examinedFile=false; ; Assert::it(VCS_WorkingCopy::isDirectExportable(_node)); if (!examinedFile) { import.newFile(fileName); } //import.bulidImportLabelLanguageSet(languageTree); import.parmAddToProject( false); //import.parmDeleteSubNodes(deleteSubNodes.allowEdit() && deleteSubNodes.value()); import.parmDeleteSubNodes(true); //import.parmImportWithIds( importWithIds.allowEdit() && importWithIds.value()); import.parmImportWithIds(false); //import.parmOverrideLocks( overrideLocks.allowEdit() && overrideLocks.value()); import.parmOverrideLocks( false); // import.parmImportLabels((importActionRbtn.selection() == SysAotImportAction::Label || // importActionRbtn.selection() == SysAotImportAction::ElementAndLabel)); import.parmImportLabels(false); import.parmImportAot(true); //import.parmLabelModuleId(labelModuleId.text()); import.import(); } |
|
|
За это сообщение автора поблагодарили: SolNik (1). |
05.09.2006, 09:46 | #4 |
Участник
|
С экспортом то все просто - у TreeNode есть метод treeNodeExport, который делает то, что нужно. А вот с импортом сложнее - найти изолированный класс или метод не удалось. Есть только класс SysImportElements, логика которого тесно переплетена со связанным с ним диалогом SysImportDialog...На форуме тоже ничего путного найти не удалось...
|
|
05.09.2006, 10:13 | #5 |
Участник
|
Спасибо belugin - это то, что нужно...правда остается вопрос: какие флаги нужно передавать методу infolog.importelements, чтобы не вызывался запрос на подтверждение перезаписи существующего объекта?
|
|
05.09.2006, 10:29 | #6 |
Участник
|
\Classes\SysImportElements\import:
X++: if (importAot)
{
flag = #impQueryOverwrite; так X++: if (importAot) { if(queryOverwrite) flag = #impQueryOverwrite; |
|
05.09.2006, 10:48 | #7 |
Участник
|
Да я этот флаг нарыл, но его НЕустановка на моем SP1 на появление диалога никак не влияет ...
|
|
|
За это сообщение автора поблагодарили: kashperuk (2). |
05.09.2006, 10:52 | #8 |
Участник
|
...и на SP4 кстати тоже.
|
|
05.09.2006, 11:14 | #9 |
Administrator
|
Цитата:
Сообщение от SolNik
В справке есть ссылка на метод xInfo::import, но самого метода я не нашел...
По сути - класс SysImportElements есть механизм использования этих трех методов. Поэтому на мой взгляд не имеет смысл ковыряться с методами. Лучше пользоваться классом SysImportElements (или на базе него сделать свой / отнаследовать свой и т.д.). Код, который привел belugin базируется как раз на SysImportElements
__________________
Возможно сделать все. Вопрос времени |
|
15.09.2006, 13:16 | #10 |
Участник
|
flag = #impQueryOverwrite;
Кто-нибудь флажок этот поборол? В макросе AOTExport есть вот эти три строки: Код: #define.impNeverOverwrite(0x0010) // Do not overwrite elements #define.impQueryOverwrite(0x0020) // Display a dialog asking if you want to override or not #define.impGetCompareNode(0x0040) // Import into node not in tree Если же поставить последний флаг (64), то диалога нет - но при этом же ничего не импортируется (этот флаг используется при построении дерева при сравнении объекта из файла и из приложения). Как быть? |
|
29.09.2006, 12:17 | #11 |
Developer
|
Цитата:
Для того чтобы не выдавался запрос на подтверждение, можно в метод xinfo.importElement(int _id, int _utilfiletype, UtilElementType _utiltype, str _name, int _fileposition, int _Flag) подставить _Flag = #impReImporting (использовать с осторожностью! ). Применительно к классу SysImportElements - можно, например, в методе import() вместо Код: importOk = this.importElements(exportId, #impOk); Код: importOk = this.importElements(exportId, #impOk | #impReImporting); Последний раз редактировалось vallys; 29.09.2006 в 12:20. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
02.10.2006, 13:03 | #12 |
Участник
|
Решение, конечно, ерундовое, но оно единственное, когда у меня все правильно заработало:
класс Box, метод yesAllNoAllCancel, в начале метода вставить код: if (_title == 'Import') return DialogButton::YesToAll;
__________________
И почему никто меня не любит? Да, я надоедливый |
|
02.10.2006, 13:06 | #13 |
Участник
|
Цитата:
Чем это чревато? На что наткнулись при использовании? |
|
02.10.2006, 14:53 | #14 |
Developer
|
Цитата:
Приношу свои извинения. Последний раз редактировалось vallys; 02.10.2006 в 15:22. |
|
|
|