Как управлять кодами MS Dynamics NAV C/AL в TFS с управлением версиями

Мне нужно сохранить все коды разработки MS Dynamics NAV в TFS, в настоящее время я экспортирую объекты NAV в формат FOB/TXT и добавляю их в TFS. Но я не могу использовать преимущества TFS, такие как управление версиями, процесс регистрации, проверки и т. д., поэтому это неуправляемо между командой разработчиков и командой контроля качества.

Поскольку MS Dynamics NAV хранит свои коды в базе данных SQL, у меня есть только возможность экспортировать объекты и вручную добавлять их в TFS.

Эксперты, пожалуйста, посоветуйте мне, как я могу управлять всем этим в TFS, как мы управляем проектами Visual Studio.

Спасибо, Кишор.


person kishorebarik    schedule 11.02.2014    source источник
comment
Какую версию Nav вы используете?   -  person Mak Sim    schedule 13.02.2014


Ответы (3)


На данный момент в Dynamics NAV нет встроенных опций для управления исходным кодом (какой замечательной была бы интеграция с Git!), если только вы не экспортируете текстовые файлы вручную...

Однако есть некоторые платные разработки, такие как Диспетчер объектов, которые интегрируются с TFS и VSS. У них есть концепция проектов, которые, как мне кажется, сопоставляются с филиалами и так далее. У IDYN есть пробная версия, поэтому, возможно, стоит сначала загрузить ее и попробовать, так как для 2013 года она все еще немного шаткая.

person Jake Edwards    schedule 12.02.2014
comment
Спасибо ShadowXVII, спасибо за совет. Я проверю и обновлю здесь результат. - person kishorebarik; 14.02.2014
comment
Привет @shadpwXvii, возможно ли запросить данные из веб-сервиса в NAV? - person Pritam; 06.05.2016
comment
Привет @Pritam, да, но я бы рекомендовал создать новый, более конкретный вопрос. Это не связано с веб-сервисами NAV. - person Jake Edwards; 07.05.2016

Я немного новичок в разработке 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"

Я также нашел другой вопрос, который показывает, как получить этот текст из таблицы метаданных объекта. В этой статье есть пример кода похоже, что он может преобразовать BLOB-объекты в таблице метаданных в текст. Написав сценарий и убедившись, что он работает, я пока придерживаюсь этого сценария. Как нуб, я не удивлюсь, если вскоре найду гораздо более эффективное решение.

person Cedar Bristol    schedule 08.04.2016

Некоторое время мы использовали плагин Visual Studio. Он работал для VS2008 и NAV до версии 5. Он позволял импортировать и экспортировать код из/в Nav, нажимая кнопки в VS, а также регистрировать вход/выход.

Надеюсь, эта ссылка все еще работает.

Но я должен сказать, что это было не совсем удобное решение, и в нем отсутствовали некоторые важные функции для управления исходным кодом.

Вы также можете ознакомиться со сторонними решениями, такими как ToIncreaseSolutions и ifacto

person Mak Sim    schedule 13.02.2014
comment
Спасибо, Мак, я проверю предоставленные вами ссылки, а затем отвечу с результатом. - person kishorebarik; 14.02.2014