如何使用版本控制在 TFS 中管理 MS 动态导航 C/AL 代码



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

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

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

谢谢基肖尔

此时,

Dynamics NAV 中没有任何用于源代码控制的本机选项(Git 集成将是多么神奇!),除非您手动导出文本文件......

但是,有一些付费开发(例如对象管理器)确实与TFS和VSS集成。他们有一个项目的概念,我相信映射到分支等等。IDYN 有一个试用版,所以可能值得下载它并先尝试一下,因为它在 2013 年仍然有点不稳定。

我有点喜欢 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 NAV71RoleTailored Client - CU25finsql.exe"
   $args = "command=exportobjects, file=$filepath, servername=$svr, database=$db, ntauthentication=yes, logfile=`"$destexportlog-$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 "$destFolderTables"
CheckExists "$destFolderCodeUnits"
CheckExists "$destFolderPages"
CheckExists "$destFolderReports"
CheckExists "$destFolderXMLPorts"
CheckExists "$destFolderMenuSuites"
CheckExists "$destFolderQuerys"
# 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 "$destFolderclock.txt"

我还发现了另一个问题,它显示了如何从对象元数据表中获取该文本。 本文包含的示例代码看起来像可以将元数据表中的 blob 转换为文本。 编写脚本并验证它是否有效后,到目前为止我一直坚持使用脚本。 作为一个菜鸟,如果我很快找到更有效的解决方案,我不会太惊讶。

一段时间

以来,我们一直使用Visual Studio插件。它适用于VS2008和NAV直到版本5。它允许通过按VS中的按钮以及签入/签出来从/导出导航代码。

我希望这个链接仍然有效。

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

您还可以查看第三方解决方案,如ToIncreaseSolutions和ifacto。

最新更新