如何从版本控制中复制XPO文件...部分代码工作,奇怪的问题

时间:2012-01-26 20:58:11

标签: version-control axapta dynamics-ax-2009 x++

我开始将图层升级到Roll Up 7,而我们仍然在另一个打开TFS的环境中进行开发。我们说的是版本1850,当我完成时,我们是在1900年。所以我们的目标是将50个不同的签到合并到完成的RU7环境中。每个签入都可以包含许多不同的对象,每个对象都作为XPO存储在TFS中。

我的代码是90%的代码,但是在将文件复制到临时目录时会产生问题。当我查看临时目录时,文件不在那里,但不知怎的,他们可以被访问。

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 个答案:

答案 0 :(得分:1)

埋藏在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);

答案 1 :(得分:0)

因此,您试图获取已更改的对象,以便将其导入新的RU7环境中?为什么不直接在Visual Studio中执行此操作?您可以根据自RU7升级以来的变更集历史记录从那里拉出XPO。

此外,您应该使用分支。以这种方式分支新代码本来很容易。你应该考虑的未来。