Hi,
I need to create a job to add tables to version control
-
iterate through all tables
-
check if it is in USR layer
-
If the table is in USR layer, then add it to version control
Is there any way to do through x++.
Thanks in advance
Hi,
I need to create a job to add tables to version control
iterate through all tables
check if it is in USR layer
If the table is in USR layer, then add it to version control
Is there any way to do through x++.
Thanks in advance
Hello,
You can use the following job to iterate elements that are not added in version control,
static void ObjectsNotInVCS(Args _args)
{
#SysVersionControl
#AviFiles
SysVersionControlSystem vcsSys = versionControl.parmSysVersionControlSystem();
SysVersionControllable controlable;
UtilEntryLevel curLayer = currentAOLayer();
modelId curModelId = xInfo::getCurrentModelId();
SysModelElementData elemData, parentData;
SysModelElement parent, child;
TreeNode pNode, cNode;
SysOperationProgress progress;
Map treeNodePathMap = new Map(Types::String, Types::String);
MapEnumerator mapEnumerator;
setPrefix(strFmt('%1\tModel: %2',
funcName(),
SysModelStore::modelId2Name(curModelId)));
//Set options to skip cache lookup of file names
infolog.globalCache().set(#VCSCache, #NoPrompt, true);
progress = SysOperationProgress::newGeneral(#AviSearch, funcName(), -1);
startLengthyOperation();
while select RootModelElement from child
group by child.RootModelElement, elemData.ModelId
join ModelId
from elemData
where ((elemData.ModelElement == child.RecId) &&
(elemData.Layer == (curLayer + 1)) && // Layer numbers in SysModel* views are offset by +1
(elemData.ModelId == curModelId)) // Remove the following line to include all models
{
progress.incCount();
//Get lowest layer copy of parent
select firstOnly parent
order by parentData.Layer
where (parent.RecId == child.RootModelElement)
join parentData
where ((parentData.ModelElement == parent.RecId) &&
(parentData.ModelId == curModeLid));
pNode = SysTreeNode::findNodeInLayer(
parent.ElementType, parent.name, 0, parentData.Layer - 1);
if (!pNode)
{
continue;
}
progress.setText(pNode.treeNodePath());
controlable = SysTreeNode::newTreeNode(pNode);
if (!controlable)
{
continue;
}
if (vcsSys.allowCreate(controlable) &&
vcsSys.allowCheckOut(controlable) &&
!SysTreeNode::isUnwanted(pNode))
{
treeNodePathMap.insert(pNode.treeNodePath(), parentData.modifiedBy);
}
}
mapEnumerator = treeNodePathMap.getEnumerator();
while (mapEnumerator.moveNext())
{
if (mapEnumerator.currentValue() == curUserId())
{
error(strFmt('Modified by %1\t%2',
curUserId(),
mapEnumerator.currentKey()));
}
}
mapEnumerator.reset();
while (mapEnumerator.moveNext())
{
if (mapEnumerator.currentValue() != curUserId())
{
warning(strFmt('Modified by other users\t%1 (%2)',
mapEnumerator.currentKey(),
mapEnumerator.currentValue()));
}
}
endLengthyOperation();
info("Done");
}
Thanks.
Thanks for your reply.
When i compiled the job it showing syntax error.
Is it for ax 2009?
I want only the usr layer tables to be added to version control.
Try like this…
SysVersionControlSystem vcsSys;
vcsSys = versionControl.parmSysVersionControlSystem();
Hello,
Sorry my mistake. I didnt see the tag properly. However I hope the code works well with 2009 too, I dont have 2009 environment to check from my side.
It still showing syntax error…
static void ListUsrTables(Args _args)
{
UtilElements utilElements;
while select utilElements
where utilElements.utilLevel == UtilEntryLevel::usr
&& utilElements.recordType == UtilElementType::Table
{
// Do your work here
print strFmt("%1 : %2",utilElements.recordType,utilElements.name);
}
}
this shows usr layer tables, but how should i add version control to tat tables?
U tried the following code?
if(vcsSys.allowCreate(controlable))
{
//sysTreeNode is of type SysTreeNode
sysTreeNode = sysTreeNode::construct();
sysTreeNode.parmTreeNode(pNode);
if(sysTreeNode.canCreate() == true)
{
//do something if it isn’t in version control
info(strfmt("%1 %2",pNode.treeNodePath(), modelName));
vcsSys.commandAdd(controlable); //SHS add to version control
}
}
Modify the code as per your requirement
Thanks
community.dynamics.com/…/ax-2012-add-elements-to-version-control
blog.slcconsulting.us/…/
I tried using those blogs, but still i cant get the desired result…
Note: modelid isn’t available in ax 2009.
So where could i change my coding to get the output?
static void versionctrl(Args _args)
{
SysVersionControlSystem vcsSys;
SysVersionControllable controllable;
UtilElements UtilElementsLocal,parent;
TreeNode treenode;
;
vcsSys = versionControl.parmSysVersionControlSystem();
if(!vcsSys)
{
info("Version control not enabled");
return;
}
while select * from UtilElementsLocal
where UtilElementsLocal.recordType == UtilElementType::Table
&& UtilElementsLocal.utilLevel == global::currentAOLayer()
{
parent=xUtilElements::parentElement(UtilElementsLocal);
treenode=SysTreeNode::findNodeInLayer(parent.recordType, parent.name, 0, curLayer);
if(!treenode)
continue;
controllable = SysTreeNode::newTreeNode(treeNode);
if(!controllable)
continue;
if(vcsSys.allowCreate(controllable))
{
vcsSys.commandAdd(controllable);
}
}
}
I tried to do by above job, when I’m running for the first time it added the user layer tables to version control after that I did checkin to those tables manually.
Now when i tried to run the job again to add the tables, its not working correctly.
Is there any error?
Thanks in advance.
You must realize that we can’t help you if you don’t explain your problem. Please tell us what you mean by “its not working correctly” in this particular case.
Note that nothing will be added if all eligible tables have already been added.