3

I need to create a job with a for loop (I think) that goes through all available companies and checks for a specific value. I'm just not familiar with how I would get it to select each individual company.

Does anyone know the syntax for that?

Mr. Dynamic
  • 499
  • 4
  • 6
  • 11

3 Answers3

6

I use the following technique in a job:

static void CountIt(Args _args)
{
    DataArea  DataArea;

    void doIt()
    {;
        info(int2str((select Count(RecId) from CustTable).RecId));
    }

    setPrefix("Counting");
    while select DataArea where !DataArea.isVirtual
    {
        print(DataArea.Id);
        setPrefix(DataArea.Id);
        changecompany (DataArea.Id)
        {
            doIt();
        }
    }
}
Jan B. Kjeldsen
  • 17,817
  • 5
  • 32
  • 50
3

Please bear in mind to reset your table variables in the changecompany scope, otherwise you will get strange or no result at all. A colleague was to do a task as yours and he got absolutely no results for the code inside the changecompany scope. I googled and found this blogpost: http://dynamics-ax-live.blogspot.se/2011/10/what-not-to-forget-when-using.html

athell
  • 66
  • 1
2

The functionality you're looking for is called "Cross Company" data access. MSDN has a great bit of code samples here:

X++ code: http://msdn.microsoft.com/en-us/library/cc518738.aspx

Main article: http://msdn.microsoft.com/en-us/library/cc634544.aspx

Alex Kwitny
  • 11,211
  • 2
  • 49
  • 71