我需要将所有MS Dynamics NAV开发代码保存在TFS中,目前我以FOB / TXT格式导出NAV对象并将这些代码添加到TFS。但我无法利用TFS的优势,如版本控制,签到,签出流程等,因此开发团队和QA团队之间无法管理。
由于MS Dynamics NAV将其代码保存在SQL数据库中,我只能选择导出对象并手动添加TFS。
专家们,请告诉我如何在TFS中管理这些,就像我们管理Visual Studio项目一样。
由于 基肖尔马布
答案 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仍有效。
但我必须说这不是一个非常方便的解决方案,它缺乏源代码管理的一些重要功能。
您还可以查看第三方解决方案,例如ToIncreaseSolutions和ifacto