Ax 2012

Delete connection between not existing worker and existing user

Which stops you from assigning worker to the user ( this happens usually after migrations of data or something similar)

 

static void DelConBetweenNotExistWorkerandUser(Args _args)
{
    DirPersonUser         dirPersonUser;
    UserInfo                   userInfo;
    int                             counter;
    while select forUpdate dirPersonUser notExists join UserInfo
        where DirPersonUser.User == userinfo.id
    {
        info ( DirPerson::find(dirPersonUser.PersonParty).Name);
        dirPersonUser.delete();
    }
    info(int2str(counter));

}

Ax 2012

How to check weather all customers have nameAlias defined

I think one of the easier methods would be to run  this job, which will show number of all customers, and customer with Name Alias defined.

static void AmountOfCustomersWithNAmeAlias(Args _args)
{
    CustTable custtable;
    int counter1, counter2;

    while select CustTable
    {
        counter1++;
        if (CustTable.nameAlias())
        {
            counter2++;
        }
    }
   info (strFmt(“Counter1 %1, counter2 %2”,counter1, counter2));
}

Ax 2012

Check with Regexp if company name follows certain pattern

In my case I was looking for 2 U letters anywhere in the name or the short name of the company.

static void Job107(Args _args)
{
    TextBuffer companyShort = new TextBuffer();
    TextBuffer companyName = new TextBuffer();

    companyShort.setText(curext());
    companyShort.regularExpressions(true);
    companyName.setText(CompanyInfo::find().Name);
    companyName.regularExpressions(true);
    if (companyName.find(‘u.*u’) ||companyShort.find(‘u.*u’))
    {
        info(‘^.^’);
    }
}

Nice links to check regexp stuff : http://www.zytrax.com/tech/web/regex.htm 

And online editor to check if you were right: https://regex101.com/

Ax 2012

generating method (with specific code) from X++ code

So the issue was that I was supposed to create bunch of methods ( like parm) , when I knew the table fields, and where they had really similar code.

Instead doing that manually I have created a following job. Hope it helps 🙂

static void aka_createDetermineMethods(Args _args)
{
     TreeNode tnclass, tntable,tnfield;
     MemberFunction tnMethod;
     str name;
     str code = "protected %1 %2()\n"+
                "{\n"+
                "//overwritten in sub classes\n"+
                " return '%3';\n"+
                "}";

     tnClass = TreeNode::findNode(@"\Classes\[class to add methods]");
     tntable = TreeNode::findNode(@"\Data Dictionary\Tables\CustTable\Fields");
     tnfield = tntable.AOTfirstChild();

    while (tnfield)
    {
         name = "parm"+tnfield.treeNodeName();
         tnMethod = tnClass.AOTfindChild(name);
        if (!tnMethod)
        {
            tnMethod = tnClass.AOTadd(name);
            info(tnfield.treeNodeName());
        }
        tnMethod.AOTsetSource(strFmt(code, tnfield.AOTgetProperty("ExtendedDataType"), name,name));
        tnfield = tnfield.AOTnextSibling();
   }
}
Ax 2012

Debugging on server is impossible, but yet is required

If you have faced the similar situation using Microsoft Dynamics AX, do not worry as there are few solutions that may help you. Sometimes there are even less time consuming than the debugging in server itself.

One of the most favourite ones is to enter all data in the file, and than be able to trace necessary data. you Can find example below

 AsciiIo file;
 FileName fileName;
 FileIoPermission perm;
 container conTextLine;


 fileName = @"\\c:\temp\sometext.txt";

perm = new FileIoPermission(fileName, 'W');

perm.assert();

file = new AsciiIo(fileName, 'W');

//super smart code that needs debuggin
 file.writeRaw("Super  secret value to export");
//some other code

file.finalize();
 file = null;