Come sappiamo in ax 2012 il sorgente di una classe viene mostrato "spezzettato" per singolo metodo cioè:
Mentre in D365 il sorgente è contenuto in un'unica schermata. Dobbiamo quindi aprire ciascun metodo ed incollarlo in Visual Studio.
Se la classe contiene molti metodi l'operazione può risultare pesante.
Il job prende come input il nome della classe e produce un unico file .txt con tutti i metodi, pronti per essere incollati in Visual studio:
static void LIL_Ax2012To365ClassesSourceCode(Args _args)
{
SysDictClass dictClass;
SysDictMethod dictMethod;
int i;
Source Source;
TextIo textIo;
Set methodsSet;
SetEnumerator methodsSetEnum;
str filePath;
ClassId classId;
str addSpaceToNewLineRegex;
container conFilter = ["TXT", "*.txt"];
#File
#xppTexts
classId = classNum(Tutorial_RunbaseBatch);
dictClass = new SysDictClass(classId);
for (i=1;i<=dictClass.objectMethodCnt();i++)
{
dictMethod = new SysDictMethod(UtilElementType::ClassInstanceMethod, dictClass.id(), dictClass.objectMethod(i));
if(dictMethod.name() == identifierStr(classDeclaration))
{
Source += dictMethod.getSource() + #newline;
Source = strRem(Source, "}");
}
}
methodsSet = dictClass.methods(true,true,false);
methodsSetEnum = methodsSet.getEnumerator();
methodsSetEnum.reset();
while(methodsSetEnum.moveNext())
{
dictMethod = methodsSetEnum.current();
Source += dictMethod.getSource();
Source += #newline + #newline;
}
source += "}";
filePath = WinAPI::getSaveFileName(
0,
conFilter,
"",
"@SYS56237",
".txt",
dictClass.name());
textIo = new TextIo(filePath, #IO_WRITE);
textIo.write(Source);
}