Günü Sözü

"Hiçbir şey bilmeyen cahildir, ama bilip de susan ahlaksızdır. " Bertolt Brecht.
"İyilik yapabildiğim zaman mutlu olurum; ama en büyük mutluluk yapılan bir haksızlığı düzeltmektir." Tolstoy

1 Ocak 2019 Salı

Export all shared projects, Projelerin dışarı aktarımı xpo

Ax 2012 r3, x++ 
paylaşılan projelerin xpo olarak dışarı aktarımı.

Export all shared projects
Following code exports all projects in the Shared node. For each run it creates a new folder and then the projects are individually exported to xpo.
 
static void ExportAllProjects(Args _args)  
{  
 ProjectNode      sharedProject = Infolog.projectRootNode().AOTfindChild("Shared");  
 TreeNodeIterator   treeIterator;  
 TreeNode        childNode;  
 str           folderPath = @"C:\\AXProjects\\";  
 str           folderName;  
 System.DateTime    dateTime = DateTimeUtil::newDateTime(systemDateGet(), timeNow());  

 void exportProject(TreeNode _projectNode)  
 {  
  FileIoPermission   perm;  
  str           exportFileName;  

  if(_projectNode != null)  
  {  
   exportFileName = folderPath + folderName + "\\" + _projectNode.AOTname() + ".xpo";  
   perm = new FileIoPermission(exportFileName, "W");  
   perm.assert();  
   _projectNode.treeNodeExport(exportFileName);  
   CodeAccessPermission::revertAssert();  
  }  
 }  

 folderName = dateTime.ToString("yyyyMMdd_HHmmss");  

 if(sharedProject)  
 {  
  treeIterator = sharedProject.AOTiterator();  

  if(treeIterator)  
  {  
   if(!WinAPI::pathExists(folderPath + folderName))  
   {  
    info(strFmt('Creating the folder %1', folderPath + folderName));  
    WinAPI::createDirectoryPath(folderPath + folderName);  
   }  

   childNode = treeIterator.next();  
   while (childNode)  
   {  
    info(strFmt('Exporting %1', childNode.AOTname()));  
    exportProject(childNode);  

    childNode = treeIterator.next();  
   }  
  }  

  sharedProject.treeNodeRelease();  
 }  
}  

veya

static void WIK_ExportLayer(Args _args)
{
    #define.ModelToExport1("ISV Model")
    #define.ModelToExport2("USR Model")
    #define.ExportDestination(@"C:\Temp\")
    #AOTExport
    boolean     currentLayerOnly = true;
 
    void exportModel(ModelName _modelName)
    {
        ProjectNode             project;
        SysModelCreateProject   createProject   = SysModelCreateProject::construct();
        ProjectName             projectName     = strReplace(_modelName, ' ', '_') + '_All';
        SysModel                model;
        SysModelManifest        modelManifest;
        SysModelElement         modelElement;
        SysModelElementData     modelElementData;
        SysLabelFileExport      label           = SysLabelFileExport::construct();
 
        select firstOnly Model, RecId from modelManifest
            where modelManifest.Name == _modelName
            join Layer from model
                where modelManifest.Model   == model.RecId
                    && model.Layer          == currentAOLayer();
 
        createProject.parmModelId(modelManifest.RecId);
        createProject.parmProjectName(projectName);
 
        if (createProject.parmModelId())
        {
            // Export model metadata and source
            createProject.run();
            project = SysTreeNode::getPrivateProject().AOTfindChild(projectName);
            project.treeNodeExport(#ExportDestination + projectName + '.xpo', currentLayerOnly ? #export | #expLayer : #export);
 
            // Export label files and languages
            while select modelElement
                where modelElement.ElementType  == UtilElementType::LabelFileLanguage
                exists join modelElementData
                    where modelElementData.ModelId  == modelManifest.Model
                        && modelElement.RecId       == modelElementData.ModelElement
            {
                label.parmTreenode(TreeNode::findNode(SysTreeNode::modelElement2Path(modelElement)));
                label.parmPath(#ExportDestination);
                label.run();
            }
 
            // Export project definitions
            while select modelElement
                where modelElement.ElementType  == UtilElementType::SharedProject
                exists join modelElementData
                    where modelElementData.ModelId  == modelManifest.Model
                        && modelElement.RecId       == modelElementData.ModelElement
            {
                project = TreeNode::findNode(SysTreeNode::modelElement2Path(modelElement));
                if (!WinAPI::folderExists(#ExportDestination + 'Projects'))
                {
                    WinAPI::createDirectory(#ExportDestination + 'Projects');
                }
                project.treeNodeExport(#ExportDestination + @'Projects\' + enum2str(currentAOLayer()) + modelElement.Name + '.xpo', currentLayerOnly ? #export | #expProjectOnly | #expLayer : #export | #expProjectOnly);
            }
        }
        else
        {
            error(strFmt('Layer %1 does not have model %2', strUpr(enum2str(currentAOLayer())), _modelName));
        }
    }
 
    exportModel(#ModelToExport1);
    exportModel(#ModelToExport2);
}