September 07, 2013

Error when accessing form “BI generation options”

Error when accessing form “BI generation options

I got a error when i click on following link
Administration > Setup > Business analysis > OLAP > BI generation options
Cannot execute the required database operation. The SQL database has issued an error and in Application event viewer on AOS server you can find following entry The database reported (session 3 (Admin)): 
[Microsoft][SQL Native Client][SQL Server]Invalid column name 'usergroup3'.. 

The SQL statement was: 
DELETE FROM [DBO].BIUDMROLES WHERE USERGROUPID IN  usergroup1,usergroup2,usergroup3)"

Possible Reason:
The problem is caused by minor bug in Classes\ SrsStatementQuery method deleteInvalidBIUdmRoles() Right now the while looks like:

while select udmRoles
{
   select userGroupInfo where userGroupInfo.Id == udmRoles.UserGroupId;
   if (!userGroupInfo)
   {
      if (strlen(list) > 0)
     {
        list += #comma;
     }
     list += udmRoles.UserGroupId;
  }
}


Suggested Solution:
while select udmRoles
{
   select userGroupInfo where userGroupInfo.Id == udmRoles.UserGroupId;
   if (!userGroupInfo)
   {
      if (strlen(list) > 0)
     {
        list += #comma;
     }
list +="'"+ udmRoles.UserGroupId+"'";
  }
}

-Harry

Method Types in Dynamics AX Classes


Method Types in Dynamics AX Classes

There are many different types of methods. Some of the more common types are
1. Static Methods
2. Main Method
3. Display Methods
4. Accessor Methods

1. Static Methods

Static methods are attached to a class. However, they do not need that class to be instantiated to execute that method. They are not within the scope of the class, so any class variables are not available in a static method.
Static methods are declared static by using the Static method modifier.
Static methods are called using the class name followed by two colons (::) and then the methods name.
The following example shows a static method declaration, and a call to that static method.

static public void myStaticMethod()
{
}
myClass::myStaticMethod()

2. Main Method

The main method is a static method that can be used to call a constuctor. It is special because its name is required to be "main". It is used by the system when the class is run directly from a menu item and it takes a parameter of type args. 
Args is a class that is used to pass parameters between objects, for instance, various parameters can be set on the properties on a menu item. When the menu item calls a class, the args class containing those property values is passed to the main method using the args parameter.

3. Display Methods

Display methods are used on forms. They are commonly created on the table, and can also be defined on the form. Display methods return a value that is displayed on the form or report. They are often used to display a calculation, or to look up a single field from another table. 
The following example shows how to display the item name on a form that displays data from a table containing the item id.

// BP Deviation documented
display itemName itemName()
{
inventTable inventTable
select name from inventTable
where inventTable.itemId == this.itemId;
return inventTable.name;
}

The first line in this code is a comment to the compiler indicating that a Best
Practice deviation is considered and evaluated as reasonable. The deviation is
because a display method is able to return any data from any table or field in the system, and so the security implications should be considered.

4. Accessor Methods

Accessor methods enable other elements to set or get the values of variables in a class and it is common that they do both. The following example accepts a value as a parameter, sets a class variable to this value and then returns the value. The parameter has a default value set to the class variable value, so if the method is called without a parameter, it returns the value of the class variable. If it is called with a value in the parameter, then the
class variable is set to this value.

public str myName(str _myName = myName)
{
myName = _myName;
return myName;
}

-Harry