Как скопировать файлы XPO из-под контроля версий ... частичный код работает, странная проблема - PullRequest
1 голос
/ 27 января 2012

Я начал обновлять наши слои до Roll Up 7, пока мы еще работали в другой среде с включенной TFS. У нас была, скажем, версия 1850, и к тому времени, когда я закончил, мы были в 1900 году. Поэтому цель состоит в том, чтобы объединить 50 различных регистраций в законченную среду RU7. Каждая регистрация может содержать много разных объектов, и каждый объект где-то хранится в TFS как XPO.

Мой код работает на 90%, но проблема возникает при копировании файлов из временного каталога. Когда я смотрю в каталог temp, там нет файлов, но каким-то образом они могут быть доступны.

static void Job33(Args _args)
{
    #File
    SysVersionControlSystem sysVersionControlSystem = versioncontrol.parmSysVersionControlSystem();
    SysVersionControlTmpItem    contents;
    SysVersionControlTmpChange  change;
    SysVersionControlTmpChange  changes;
    int i;
    SysVersionControlTmpItem contentsAddition;
    SysVersionControlTmpItem contentsItem;
    str                         writePath;
    Set       permissionSet = new Set(Types::Class);
    str                         fileName;
    int                         n;
    ;

    change = versioncontrol.getChangesHistory();

    // BP deviation documented
    changes.setTmp();
    changes.checkRecord(false);
    changes.setTmpData(change);

    while select changes
        order by changes.ChangeNumber asc
        where changes.ChangeNumber > 1850
    {
        writePath = @'C:\TEMP\' + int2str(changes.ChangeNumber) + @'\';

        contentsAddition = versioncontrol.getChangeNumberContents(changes.ChangeNumber);

        n = 0;
        while select contentsAddition
        {
            // HOW DOES THIS LINE ACCESS THE FILE BUT MY METHOD CAN NOT??
            contentsAddition.viewFile();
            //?????????????


            // Write to appropriate directory
            if(!WinAPI::pathExists(writePath))
                WinAPI::createDirectory(writePath);

            n++;

            fileName = int2str(changes.ChangeNumber) + '_' + int2str(n) + '.xpo';

            if (WinAPI::fileExists(contentsAddition.fileName(), false))
            {
                // Write to appropriate directory
                if(!WinAPI::pathExists(writePath))
                    WinAPI::createDirectory(writePath);

                WinAPI::copyFile(contentsAddition.fileName(), writePath + fileName, true);
                info(strfmt("|%1|%2|", contentsAddition.fileName(), writePath + fileName));
            }
        }

        info(strfmt("%1", changes.ChangeNumber));
    }
}

Ответы [ 2 ]

1 голос
/ 27 января 2012

В Classes \ SysVersionControlFilebasedBackEndTfs есть сборка .Net, которая используется.Я смог использовать это, чтобы извлечь то, что мне нужно, смешанное с верхним кодом.После того, как я использовал это ... мой код сверху начал работать как-то странно ??

Каким-то образом произошла блокировка файла в папке, в которую я скопировал TO, что просто не позволило мне удалить его, пока я не закрыл AX... ничего страшного, но он предполагает, что есть метод tfsProxy.close () или что-то, что я должен был вызвать.

Microsoft.Dynamics.Morphx.TeamFoundationServer.Proxy tfsProxy = new Microsoft.Dynamics.Morphx.TeamFoundationServer.Proxy();
;

tfsProxy.DownloadFile(contentsAddition.InternalFilename, changes.ChangeNumber, writePath + fileName);
0 голосов
/ 27 января 2012

То есть вы пытаетесь просто получить объекты, которые были изменены, чтобы вы могли импортировать их в новую среду RU7?Почему бы не сделать это непосредственно в Visual Studio?Вы можете получить XPO оттуда, основываясь на истории изменений, с тех пор как вы начали обновление RU7.

Кроме того, вы должны использовать для этого ветвления.Было бы легко просто ветвить новый код таким способом.Что-то, что вы должны смотреть в будущее.

...