AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.04.2017, 20:13   #1  
Blog bot is offline
Blog bot
Участник
 
25,617 / 848 (80) +++++++
Регистрация: 28.10.2006
stoneridgesoftware: Version Control in Dynamics AX: Ensure that code changes are being made in model tied to version control
Источник: https://stoneridgesoftware.com/versi...rsion-control/
==============

Recently we ran into an issue where code changes were made in a model that was not tied to version control. When it came time to create a new build these changes weren’t included when the version control sync was executed. We had to take the time to move all of this code from one model to another and restart the build process. After this situation occurred a couple of times I decided to try to find a solution to help prevent this.

What I did was make a change to the class SysVersionControlSystem. This addition takes the version control folders from the XML definition file and compares them to the current model when AX is opened. If the current model doesn’t match a folder tied to version control it will return an error stating to change the model before making code changes. If this message does come up it is best to change the startup model in Tools – Options in the development tab. This is a pretty simple solution but could end up saving a lot of time if code changes are ever made in the incorrect model. It will also catch if a developer opens AX in a layer that is not tied to version control. Code screen shots are below.

NOTE: This was tested using Team Foundation Server. I did not test with Source depot or Visual SourceSafe but think it should work with them. I don’t think this would work with MorphX VCS since it uses AX database tables and doesn’t have a local repository folder.

Code review:
Created new method called ssi_ValidateCurrentModel. In method createModelsMap added call to new method (shown in first screenshot at end of method)

private void createModelsMap(){ MapEnumerator mapEnumerator; Filename modelFile; FilePath modelFilePath; FilePath modelFolder; SysVersionControlModelFile controllableModelFile; SysVersionControlSyncParameters syncParm; int line; boolean fileExists; mapEnumerator = modelFolders.getEnumerator(); models = new Map(Types::Integer, Types::Class); aldLocations = new Map(Types::Integer, Types::String); // Iterate the folders while (mapEnumerator.moveNext()) { modelFolder = mapEnumerator.currentKey(); modelFilePath = strFmt(@'%1\%2', this.parmFolder(), modelFolder); modelFile = strFmt(@'%1\%2', modelFilePath, #ModelFileNameWithExtension); fileExists = System.IO.File::Exists(modelFile); // Read the model.xml file in each folder if (!fileExists) { // In case the file is in the VCS but not locally, force sync it line = infologLine(); syncParm = SysVersionControlSyncParameters::construct(); syncParm.parmSilent(true); syncParm.parmForce(true); controllableModelFile = SysVersionControlModelFile::construct(); controllableModelFile.parmModelFolder(modelFile); this.commandSynchronize(controllableModelFile, syncParm); infolog.clear(line); fileExists = System.IO.File::Exists(modelFile); // Give warning if it still does not exists after a sync. if (!fileExists) { warning(strFmt("@SYS327410", modelFilePath)); } } if (fileExists) { controllableModelFile = SysVersionControlModelFile::construct(); controllableModelFile.fromFile(modelFile); this.addModelFolder(controllableModelFile); if (aldLocationsFromXML.exists(modelFolder)) { aldLocations.insert(controllableModelFile.parmModelId(), aldLocationsFromXML.lookup(modelFolder)); } } // BEGIN Version Control Model Check - 02/17/2017 - SSI EDM this.ssi_ValidateCurrentModel(); // END Version Control Model Check - 02/17/2017 - SSI EDM }}/// /// method that checks if startup model is tied to version control/// /// /// Version Control enhancements - 02/17/2017 - SSI EDM/// private void ssi_ValidateCurrentModel(){ // NOTE: below logic was tested with TFS. it should work with any version control that has a repository folder. // Visual SourceSafe and Source depot were not tested. boolean tfsModel = false; modelName tfsModelName; FilePath modelFolder; MapEnumerator mapEnumerator; ModelName modelName; int currentModelId; // get current model id and set mapEnumerator currentModelId = xInfo::getCurrentModelId(); mapEnumerator = modelFolders.getEnumerator(); // remove spaces in folder name if any exists modelName = strRem(SysModelStore::modelId2Name(currentModelId), " "); // loop through version control folders while (mapEnumerator.moveNext()) { modelFolder = mapEnumerator.currentKey(); // remove spaces in folder name in case it was named with spaces in version control tfsModelName = strRem(modelFolder, " "); // compare current model name to version control model if (modelName == modelFolder) { // current model is tied to version control, exit loop tfsModel = true; break; } } // display error message if current model is not tied to version control if (!tfsModel) { //TODO: create label for message Error(strFmt("Current Model %1 is not tied to TFS. Change model to %2 before making code changes", modelName, modelFolder)); }}



Источник: https://stoneridgesoftware.com/versi...rsion-control/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stoneridgesoftware: Moving Code Using Dynamics AX Temp Schema Blog bot DAX Blogs 0 03.03.2017 02:17
stoneridgesoftware: TFS Code Repository and Dynamics AX Blog bot DAX Blogs 0 16.06.2016 16:11
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
german_nav_developer: Buildnummern-Übersicht Microsoft Dynamics NAV 2009 SP1 Blog bot Dynamics CRM: Blogs 0 11.06.2010 16:33
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:02.