Business connector error On EP page Deployment in Axapta

Error Description:

While deploying EP page form Ax AOT getting business connector error.

Error  “The Web Part page  was not created correctly on the site. No .NET Business Connector session could be found.”

 Session Release for Microsoft Dynamics failed.  
 No .NET Business Connector session could be found.  
 Microsoft.Dynamics.Framework.BusinessConnector.Session.Exceptions.NoKernelSessionException  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.get_AxaptaAdapter()  
   at Microsoft.Dynamics.Framework.Portal.AxWebSession.WebSessionClientRemove()  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.Release(ICacheContext context)  
 Session log on for Microsoft Dynamics failed.  
 Dynamics Adapter LogonAs failed.  
 Microsoft.Dynamics.Framework.BusinessConnector.Session.Exceptions.FatalSessionException  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.HandleException(String message, Exception exception, HandleExceptionCallback callback)  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsAdapter.LogonAs(String user, String domain, NetworkCredential bcProxyCredentials, String company, String language, String objectServer, String configuration)  
   at Microsoft.Dynamics.Framework.Portal.AxWebSession.OnLogon(IAxaptaAdapter axaptaAdapter)  
   at Microsoft.Dynamics.Framework.Portal.AxSharepointWebSession.OnLogon(IAxaptaAdapter axaptaAdapter)  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.Init(ICacheContext context)  
 Microsoft.Dynamics.BusinessConnectorNet.LogonFailedException  
   at Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(BC_PROXY_ACCOUNT_INFO* pBCProxyAccountInfo, String company, String language, String objectServer, String configuration)  
   at Microsoft.Dynamics.BusinessConnectorNet.Axapta.LogonUsingBCProxyAccount(_SEC_WINNT_AUTH_IDENTITY_W* pImpersonatedUserAccount, NetworkCredential bcProxyCredentials, String company, String language, String objectServer, String configuration)  
   at Microsoft.Dynamics.BusinessConnectorNet.Axapta.LogonAs(String user, String domain, NetworkCredential bcProxyCredentials, String company, String language, String objectServer, String configuration)  
   at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsAdapter.LogonAs(String user, String domain, NetworkCredential bcProxyCredentials, String company, String language, String objectServer, String configuration)  

Solution:
1.First thing to check is whether the business connector on your IIS machine is set up and pointing to the correct AOS.
2.Check Ax Client configuration for business connection .
3. Open Dynamics AX, Go to AOT->Classes->SysDevelopmentProxy and compile it .

4 Verify the following task.
The Business Connector proxy exists in Active Directory.
The Business Connector is a member of the dbcreator role in SQL Server.
The Business Connector proxy is a member of the Performance Monitor Users,
Power Users, IIS_WPG, and WSS_WPG Windows groups.
The IIS application pool identity for your SharePoint 80 site uses the
Business Connector proxy (see “Configure IIS for SharePoint Services and Enterprise portal”
in this white paper).
You are a member of the Admin group in Microsoft Dynamics AX and a member
of the Administrators group on the server.

5.Full compile AOT in last

6.Check for domain setting for bcproxy account.
its should be never expired password type account.

7. Install .net Framework 2.0,3.5,4.0 etc.

8.Uncheck  the Anonymous user of "IIS \ Directory Security \ Authentication and access control
"Add the BCProxy user to the local Administration group on the IIS server.
Then restart IIS and AX.


Split Email by delimiter in axapta

To Split Email by delimiter in axapta you can try below code

  #define.EmailDelimiter(",")  
   List      list;  
   str       _emailIdList;  
   container    sendList;  
   ListIterator  iterator;  
   boolean     valid;  
   ;  
   _emailIdList = "test@gmail.com,test1@gmail.com,test2@gmail.com,test3@gmail.com,test4@gmail.com";  
   valid = true;  
   list = new List(Types::String);  
   list = Global::strSplit(_emailIdList, #EmailDelimiter);  
   iterator = new ListIterator(list);  
   while(iterator.more())  
   {  
     info(strfmt("%1",iterator.value()));  
     sendList += iterator.value();  
     iterator.next();  
   }  

Strsplit used to split the email list you can try and special character to check it.

split datetime in hour minutes second in different timezone in ax 2012

This is the example to  split datetime in hour minutes second in different timezone in ax 2012.


 TransDateTime  myDateTime=DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::getSystemDateTime(),Timezone::GMTPLUS0300KUWAIT_RIYADH);  
   int       hours;  
   int       minutes;  
   int       seconds;  
   ;  
   info(datetime2str(myDateTime));  
   hours=DateTimeUtil::hour(myDateTime);  
   minutes=DateTimeUtil::minute(myDateTime);  
   seconds=DateTimeUtil::second(myDateTime);  
   info(strfmt('Hours %1 - Minutes %2 - Seconds %3',int2str(hours),int2str(minutes),int2str(seconds)));  

To get different timezone like GMT,India etc you can get from below screen.

timezone

How to get Enum value in String for Query base view in Axapta

To get Enum value in String for Query base view in Axapta 2012 you can try below code sample for your method.

Here example will return label enum value you can use for name also.

 public static server str ItemType()  
 {  
   tableName viewName = identifierStr(ViewName);  
   DictEnum dictEnum = new DictEnum(enumNum(ItemType));  
   Map enumValues = new Map(Types::String, Types::String);  
   int n;  
   for (n = 0; n < dictEnum.values(); n++)  
   {  
   enumValues.insert(int2str(dictEnum.index2Value(n)),SysComputedColumn::returnLiteral(dictEnum.index2Label(n)));  
   }  
   return SysComputedColumn::switch( SysComputedColumn::returnField(viewName,  
   identifierStr(InventTable_1),  
   fieldStr(InventTable, ItemType)),  
   enumValues, SysComputedColumn::returnLiteral(dictEnum.index2Symbol(n)));  
 }