如何使用版本控制在TFS中管理MS Dynamics NAV C / AL代码

时间:2014-02-11 06:22:23

标签: visual-studio-2012 tfs dynamics-nav

我需要将所有MS Dynamics NAV开发代码保存在TFS中,目前我以FOB / TXT格式导出NAV对象并将这些代码添加到TFS。但我无法利用TFS的优势,如版本控制,签到,签出流程等,因此开发团队和QA团队之间无法管理。

由于MS Dynamics NAV将其代码保存在SQL数据库中,我只能选择导出对象并手动添加TFS。

专家们,请告诉我如何在TFS中管理这些,就像我们管理Visual Studio项目一样。

由于 基肖尔马布

3 个答案:

答案 0 :(得分:1)

此时动态资产净值中没有源控制的原生选项(Git集成会有多棒!),除非您手动导出文本文件......

然而,有一些付费开发项目,例如Object Manager,它们与TFS和VSS集成在一起。他们有一个项目概念,我相信它映射到分支机构等等。 IDYN有一个试用版,所以下载它并首先试用它可能是值得的,因为它在2013年仍然有点摇摇欲坠。

答案 1 :(得分:1)

我对NAV开发有点偏执,并且无法找到一个好的现成方法来获取我有权导出的所有对象,这些对象可能是有源控制的文本文件,所以我编写了这个powershell脚本,尝试导出所有这些脚本,并在获得权限错误时继续运行。

#### change these params to point this script at a different server or different directory ####

$serverName = "server_where_nav_db_lives"
$dbname = "name_of_your_nav_db"
$destFolder = "c:\TestNavExport"
$startTime = [System.DateTime]::Now

function doExport {
   param ([string]$type, [string]$id, [string]$name, [string]$svr, [string]$db, [string]$dest)

   $cleanName = $name.replace("/", "") 
   $filepath = "`"{0}\{1}s\{2} - {3}.txt`"" -f $dest, $type, $id, $cleanName

   write-host "filepath is $filepath"

   ### change this value to use a different version of the dev environment
   $finpath = "c:\program Files (x86)\Microsoft Dynamics NAV\71\RoleTailored Client - CU25\finsql.exe"
   $args = "command=exportobjects, file=$filepath, servername=$svr, database=$db, ntauthentication=yes, logfile=`"$dest\exportlog-$type-$cleanName.txt`", filter=`"Type=$type;ID=$id`" "


   Start-Process $finpath -ArgumentList $args -Wait
}

function CheckExists {
   param ([string]$pth) 
   if (-Not [System.IO.Directory]::Exists($pth)) { md -Path $pth }
}

$qry = @"
SELECT  
   o.ID,
   o.[Name], 
   o.[Type],
   CASE o.[Type] WHEN 0 THEN 'Table' 
      WHEN 3 THEN 'Report'
      WHEN 5 THEN 'CodeUnit'
      WHEN 6 THEN 'XMLPort'
      WHEN 7 THEN 'MenuSuite'
      WHEN 8 THEN 'Page'
      WHEN 9 THEN 'Query'
      ELSE 'Other'
   END ObjType
FROM [Object]  o  
WHERE o.[Type] IN (0, 3, 5, 6, 7, 8, 9)
AND o.[ID] < 150
ORDER BY o.[ID]
"@

# make sure all the necessary directories exist
CheckExists $destFolder
CheckExists "$destFolder\Tables"
CheckExists "$destFolder\CodeUnits"
CheckExists "$destFolder\Pages"
CheckExists "$destFolder\Reports"
CheckExists "$destFolder\XMLPorts"
CheckExists "$destFolder\MenuSuites"
CheckExists "$destFolder\Querys"

# query the database for all of the objects
$connection = new-object system.Data.SqlClient.SqlConnection("Server=$serverName;Database=$dbname;Trusted_Connection=True")
$connection.Open();
$cmd = $connection.CreateCommand();
$cmd.CommandText = $qry;
$cmd.Connection = $connection;
$reader = [System.Data.SqlClient.SqlDataReader]$cmd.ExecuteReader()

while ($reader.Read()) { 
   $cid = $reader["ID"];
   $cname = $reader["Name"]
   $ctype = $reader["Type"]
   $cTypeName = $reader["ObjType"]
   write-host "exporting $cname $cid $ctypename"
   doExport $cTypeName $cid $cname $serverName $dbname $destFolder
}

$connection.Close()
$endTime = [System.DateTime]::Now
("start time {0}, end time {1}, span {2}" -f $startTime, $endTime, ($endTime - $startTime)) | out-file "$destFolder\clock.txt"

我还找到了this other question,它显示了如何从对象元数据表中获取该文本。 This article has sample code看起来可以将元数据表中的blob转换为文本。编写完脚本并验证它是否有效后,到目前为止我一直坚持使用脚本。作为一个菜鸟,如果我很快找到一个更有效的解决方案,我不会感到惊讶。

答案 2 :(得分:0)

有一段时间我们使用过Visual Studio插件。它适用于VS2008和NAV,最高版本为5。 它允许通过按下VS中的按钮以及签入/签出来从/导入代码。

我希望this link仍有效。

但我必须说这不是一个非常方便的解决方案,它缺乏源代码管理的一些重要功能。

您还可以查看第三方解决方案,例如ToIncreaseSolutionsifacto