tag:blogger.com,1999:blog-70615882881313440162024-03-06T04:52:29.303+00:00Explore Dynamics World With KrishhThis is all about Microsoft Dynamics AX(formerly known as Axapta). This site contains some Microsoft Dynamics AX X++ Codes for use in your day to day use as well future changes.krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.comBlogger185125tag:blogger.com,1999:blog-7061588288131344016.post-17136465215040875322022-05-23T11:56:00.006+00:002022-05-23T11:56:52.719+00:00<p><b> Create the User into ActiveDirectory</b></p><p class="MsoNormal" style="text-autospace: none;"><b><span lang="EN-US" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">static</span></b><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;"> <b><span style="color: darkblue;">void</span></b>
CreateADUSER(Args _args)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
System.DirectoryServices DirectoryServices;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
System.DirectoryServices.AccountManagement AccountManagement;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
System.DirectoryServices.AccountManagement.UserPrincipal up;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
System.DirectoryServices.AccountManagement.PrincipalContext pricipalContext;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
<b><span style="color: darkblue;">str</span></b> networkDomain=<span style="color: darkred;">"KrishhDAX"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
InteropPermission
permission;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><b><span lang="EN-US" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">try</span></b><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
permission = <b><span style="color: darkblue;">new</span></b> InteropPermission(InteropKind::CLRInterop);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
permission.assert();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
pricipalContext = <b><span style="color: darkblue;">new</span></b>
System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType::Domain,
<span style="color: darkred;">"KRISHHDAX"</span>, <span style="color: darkred;">"OU=mDK,OU=Users,OU=TestOU,DC=KrishhDAX,DC=com"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
<i><span style="color: green;">//Sometimes we need to connect to AD using
service/admin account credentials, in that case the above line of code will be
as below</span></i><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
<i><span style="color: green;">//pricipalContext = new
PrincipalContext(ContextType.Domain, "yourdomain.com",
"OU=TestOU,DC=yourdomain,DC=com","YourAdminUser","YourAdminPassword");</span></i><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up = <b><span style="color: darkblue;">new</span></b>
System.DirectoryServices.AccountManagement.UserPrincipal(pricipalContext);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_SamAccountName(<span style="color: darkred;">"krishh"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_DisplayName(<span style="color: darkred;">"krishh Reddy"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_EmailAddress(</span><span style="color: darkred; font-family: Consolas; font-size: 8.0pt;"><a href="mailto:krishh.009@VALHALLA.com"><span lang="EN-US" style="mso-ansi-language: EN-US;">krishh.009@</span></a></span><span style="color: darkred; font-family: Consolas; font-size: 10.6667px;">KRISHHDAX</span><span style="color: darkred; font-family: Consolas; font-size: 8.0pt;"><a href="mailto:krishh.009@VALHALLA.com"><span lang="EN-US" style="mso-ansi-language: EN-US;">.com</span></a></span><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_GivenName(<span style="color: darkred;">"krishh Reddy"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_UserPrincipalName(</span><span style="color: darkred; font-family: Consolas; font-size: 8.0pt;"><a href="mailto:krishh.009@de.deh.dk"><span lang="EN-US" style="mso-ansi-language: EN-US;">krishh.009@</span></a></span><span style="color: darkred; font-family: Consolas; font-size: 10.6667px;">KRISHHDAX.com</span><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_Name(<span style="color: darkred;">"Krishh"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_Surname(<span style="color: darkred;">"Reddy"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_Description(<span style="color: darkred;">"User Created for
testing"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.set_Enabled(<b><span style="color: darkblue;">True</span></b>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;"> up.SetPassword(<span style="color: darkred;">"</span><span style="color: darkred; font-size: 10.6667px;">KRISHHDAX</span><span style="color: darkred;">#"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
up.Save();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
<i><span style="color: green;">// info(strFmt("User Created
%1",up.get_DisplayName()));</span></i><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
CodeAccessPermission::revertAssert();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><b><span lang="EN-US" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">catch</span></b><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">(Exception::CLRError)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
CodeAccessPermission::revertAssert();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">
info(CLRInterop::getLastException().ToString());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US;">}<o:p></o:p></span></p>krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-78279497651896776152018-10-22T14:45:00.002+00:002018-10-22T14:45:58.717+00:00Splitting dimension into dimension columns in SQL.<div dir="ltr" style="text-align: left;" trbidi="on">
Getting dimension into splitted values<br />
<b><br /></b>
<b>For ledger dimension</b><br />
Select Dimension,MainAccount,Claims,Functions,ItemGroup,CostCenter,Market_IC,MTO,Projects,Vendor,Agreement from<br />
(<br />
select DIMENSIONATTRIBUTEVALUECOMBINATION.recid as dimension,DimensionAttribute.name,DimensionAttributeLevelValueAllView.DisplayValue from DIMENSIONATTRIBUTEVALUECOMBINATION<br />
join DimensionAttributeLevelValueAllView on DimensionAttributeLevelValueAllView.VALUECOMBINATIONRECID = DIMENSIONATTRIBUTEVALUECOMBINATION.RECID<br />
join DimensionAttribute on DIMENSIONATTRIBUTE.RecId = DimensionAttributeLevelValueAllView.DIMENSIONATTRIBUTE<br />
where DIMENSIONATTRIBUTEVALUECOMBINATION.MAINACCOUNT!=0<br />
) d<br />
PIVOT<br />
(<br />
MAX(DisplayValue)<br />
FOR Name<br />
IN (MainAccount,Claims,Functions,ItemGroup,CostCenter,Market_IC,MTO,Projects,Vendor,Agreement)<br />
)<br />
AS PivotTable<br />
<br />
<br />
<br />
<br />
<br />
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">select</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DefaultDimension<span style="color: grey;">,</span>Claims<span style="color: grey;">,</span>Functions<span style="color: grey;">,</span>ItemGroup<span style="color: grey;">,</span>CostCenter<span style="color: grey;">,</span>Market_IC<span style="color: grey;">,</span>MTO<span style="color: grey;">,</span>Projects<span style="color: grey;">,</span>Vendor<span style="color: grey;">,</span>Agreement <span style="color: blue;">from</span><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">(</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">select</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DIMENSIONATTRIBUTEVALUECOMBINATION<span style="color: grey;">.</span>recid as </span><span style="font-family: Consolas; font-size: 12.6667px;">DefaultDimension</span><span style="color: grey; font-family: Consolas; font-size: 9.5pt;">,</span><span style="font-family: Consolas; font-size: 9.5pt;">DimensionAttribute</span><span style="color: grey; font-family: Consolas; font-size: 9.5pt;">.</span><span style="font-family: Consolas; font-size: 9.5pt;">name</span><span style="color: grey; font-family: Consolas; font-size: 9.5pt;">,</span><span style="font-family: Consolas; font-size: 9.5pt;">DimensionAttributeValueSetItem</span><span style="color: grey; font-family: Consolas; font-size: 9.5pt;">.</span><span style="font-family: Consolas; font-size: 9.5pt;">DisplayValue </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">from</span><span style="font-family: Consolas; font-size: 9.5pt;">
DIMENSIONATTRIBUTEVALUECOMBINATION</span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">join</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DimensionAttributeValueSet <span style="color: blue;">on</span>
DimensionAttributeValueSet<span style="color: grey;">.</span>RecId <span style="color: grey;">=</span> DIMENSIONATTRIBUTEVALUECOMBINATION<span style="color: grey;">.</span>RECID<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">join</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DimensionAttributeValueSetItem <span style="color: blue;">on</span>
DimensionAttributeValueSetItem<span style="color: grey;">.</span>DIMENSIONATTRIBUTEVALUESET
<span style="color: grey;">=</span> DimensionAttributeValueSet<span style="color: grey;">.</span>RecID<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">join</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DimensionAttributeValue <span style="color: blue;">on</span>
DimensionAttributeValue<span style="color: grey;">.</span>RECID <span style="color: grey;">=</span> DimensionAttributeValueSetItem<span style="color: grey;">.</span>DIMENSIONATTRIBUTEVALUE<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">join</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
DimensionAttribute <span style="color: blue;">on</span> DIMENSIONATTRIBUTE<span style="color: grey;">.</span>RecId <span style="color: grey;">=</span>
DimensionAttributeValue<span style="color: grey;">.</span>DIMENSIONATTRIBUTE<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: green; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">where
DIMENSIONATTRIBUTEVALUECOMBINATION.MAINACCOUNT=0</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">)</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
d<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">PIVOT</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">(</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: magenta; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">MAX</span><span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">(</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">DisplayValue<span style="color: grey;">)</span><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">FOR</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
Name<o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">IN</span><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"> </span><span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">(</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">Claims<span style="color: grey;">,</span>Functions<span style="color: grey;">,</span>ItemGroup<span style="color: grey;">,</span>CostCenter<span style="color: grey;">,</span>Market_IC<span style="color: grey;">,</span>MTO<span style="color: grey;">,</span>Projects<span style="color: grey;">,</span>Vendor<span style="color: grey;">,</span>Agreement<span style="color: grey;">)</span><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: grey; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">)</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;"><o:p></o:p></span></div>
<div class="MsoNormal" style="text-autospace: none;">
<span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">AS</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US;">
PivotTable<o:p></o:p></span></div>
<br /></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-85720485451607559822018-08-24T09:44:00.001+00:002018-08-24T12:46:44.805+00:00Useful X++ functions<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
//Return the value from the xmlNode<br />
<b>static str getXmlNodeValue(XmlNode _node)</b><br />
{<br />
System.Text.RegularExpressions.Regex re =<br />
// BP deviation documented<br />
new System.Text.RegularExpressions.Regex('^[ \r\n\t]*((.|\n)*?)[ \r\n\t]*$');<br />
System.Text.RegularExpressions.Match m = re.Match(_node.text());<br />
str result;<br />
;<br />
<br />
result = m.Result('$1');<br />
return result;<br />
}<br />
<br />
/// <summary><br />
/// Provides a lookup of dimension values.<br />
/// </summary><br />
/// <param name="_ctrl">The control to provide a lookup for.</param><br />
/// <param name="_dimensionName">The dimension attribute to filter by.</param><br />
<b>public static client void lookupDimension(FormStringControl _ctrl, Name _dimensionName)</b><br />
{<br />
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(DimensionAttribute),_ctrl);<br />
Query query = new Query();<br />
QueryBuildDataSource queryBuildDataSource = query.addDataSource(tablenum(DimensionAttribute));<br />
<br />
sysTableLookup.addLookupfield(fieldnum(DimensionAttribute, Name));<br />
<br />
queryBuildDataSource.addRange(fieldnum(DimensionAttribute, Type)).value(queryNotValue(DimensionAttributeType::MainAccount));<br />
<br />
sysTableLookup.parmQuery(query);<br />
sysTableLookup.performFormLookup();<br />
<br />
}<br />
<br />
<br />
/// <summary><br />
/// This method has the complete source file as input and will concatenate the target path with the filename<br />
/// </summary><br />
/// <param name="_sourceFilename"><br />
/// This is the full filename including the path<br />
/// </param><br />
/// <param name="_targetPath"><br />
/// the target folder<br />
/// </param><br />
/// <returns><br />
/// It will return the target filename.<br />
/// </returns><br />
<br />
<b>static filename getTargetFilename(Filename _sourceFilename, Filepath _targetPath)</b><br />
{<br />
Filename targetFilename;<br />
;<br />
new InteropPermission(InteropKind::ClrInterop).assert();<br />
<br />
targetFilename = System.IO.Path::Combine(_targetPath, System.IO.Path::GetFileName(_sourceFilename));<br />
<br />
return targetFilename;<br />
}<br />
<br />
<br />
// Generate nodes into container.<br />
<b>static container containerFromXMLNode(XmlNode n)</b><br />
{<br />
container retval, containerToInsert;<br />
Common recordToInsert;<br />
XmlNamedNodeMap attrs;<br />
XmlNode typeAttr, element, recordNode, containerNode;<br />
int elemNo = 1;<br />
;<br />
//validate arguments before using them<br />
if (n == null)<br />
return retval;<br />
<br />
// Collect all the elements ...<br />
element = n.firstChild();<br />
if (element.name() == 'container')<br />
{<br />
element = element.firstChild();<br />
}<br />
while (element)<br />
{<br />
attrs = element.attributes();<br />
if (attrs)<br />
{<br />
typeAttr = attrs.getNamedItem('type');<br />
<br />
switch (typeAttr.nodeValue())<br />
{<br />
case 'int' :<br />
retval = conins(retval, elemNo, str2int(BisTools::getXmlNodeValue(element)));<br />
break;<br />
<br />
case 'str' :<br />
retval = conins(retval, elemNo, BisTools::getXmlNodeValue(element));<br />
break;<br />
<br />
case 'real' :<br />
retval = conins(retval, elemNo, str2num(BisTools::getXmlNodeValue(element)));<br />
break;<br />
<br />
case 'enum':<br />
retval = conins(retval, elemNo, str2int(BisTools::getXmlNodeValue(element)));<br />
break;<br />
<br />
case 'date' :<br />
retval = conins(retval, elemNo, str2date(BisTools::getXmlNodeValue(element), 321));<br />
break;<br />
<br />
case 'record' :<br />
recordNode = element.firstChild();<br />
recordToInsert = Global::recordFromXMLNode(recordNode);<br />
retval = conins(retval, elemNo, recordToInsert);<br />
break;<br />
<br />
case 'container':<br />
containerNode = element.firstChild();<br />
containerToInsert = BisTools::containerFromXMLNode(containerNode);<br />
retval = conins(retval, elemNo, containerToInsert);<br />
break;<br />
<br />
case 'blob':<br />
containerToInsert = BinData::stringToData(BisTools::getXmlNodeValue(element));<br />
retval = conins(retval, elemNo, containerToInsert);<br />
break;<br />
}<br />
}<br />
<br />
element = element.nextSibling();<br />
elemNo += 1;<br />
}<br />
<br />
return retval;<br />
}<br />
<br />
<br />
<br />
<br />
//Generate html from Record<br />
<b>static str record2html(Common record)</b><br />
{<br />
str html;<br />
DictTable dictTable = new dictTable(record.TableId);<br />
DictField dictField;<br />
fieldId fieldId;<br />
<br />
<br />
void addField2html(str fieldName, anyType fieldValue, str htmlCode, str fieldLabel)<br />
{<br />
str newValue = strFmt('%1',fieldValue);<br />
if (newValue == '')<br />
{<br />
newValue = '-';<br />
}<br />
html += strFmt('<tr><td width=30%>%3%4</td><td width=50%>%3%2</td><td width=20%>%3%1</td></tr>',fieldName, newValue , htmlCode, fieldLabel);<br />
}<br />
;<br />
html = '<html><b>Record values<table border width=100%>';<br />
addField2html('Field name','Value','<b>','Label');<br />
<br />
fieldId = dictTable.fieldNext(0);<br />
while (fieldId)<br />
{<br />
dictField = dictTable.fieldObject(fieldId);<br />
if (dictField.arraySize() == 1 && dictField.baseType() != Types::Container && dictField.baseType() != Types::BLOB)<br />
{<br />
addField2html(dictField.name(), record.(fieldId),"", dictField.label());<br />
}<br />
fieldId = dictTable.fieldNext(fieldId);<br />
}<br />
<br />
<br />
html+='</table></html>';<br />
return html;<br />
}<br />
<br />
<br />
<br />
<br />
//Generate record to Text<br />
<b>static str record2text(Common record)</b><br />
{<br />
str text;<br />
DictTable dictTable = new dictTable(record.TableId);<br />
DictField dictField;<br />
fieldId fieldId;<br />
<br />
<br />
void addField2text(str fieldName, anyType fieldValue, str fieldLabel)<br />
{<br />
str newValue = strFmt('%1',fieldValue);<br />
if (newValue == '')<br />
{<br />
newValue = '-';<br />
}<br />
text += strFmt('Field \'%1\' = \'%2\', Label: \'%3\'\n',fieldName, newValue, fieldLabel);<br />
}<br />
;<br />
text = strFmt("@BIS635", tableid2name(record.tableId));<br />
addField2text('Field name','Value', 'Label');<br />
<br />
fieldId = dictTable.fieldNext(0);<br />
while (fieldId)<br />
{<br />
dictField = dictTable.fieldObject(fieldId);<br />
if (dictField.arraySize() == 1)<br />
{<br />
addField2text(dictField.name(), record.(fieldId), dictField.label());<br />
}<br />
fieldId = dictTable.fieldNext(fieldId);<br />
}<br />
<br />
<br />
return text;<br />
}<br />
<br />
<br />
//Create the table record from xmlnode<br />
// Input is <Record table="name"> <Field:field1> value </Field:field1> ... </Record><br />
// it's the opposite from record.xml() method<br />
<b>static Common xml2record(XmlNode n, Common c = null)</b><br />
{<br />
tableId table;<br />
fieldId field;<br />
DictTable dt;<br />
DictField df;<br />
XmlNode fieldNode;<br />
str fieldName;<br />
Struct content;<br />
str tableName;<br />
Types t;<br />
<br />
//validate arguments before using them<br />
if (n == null)<br />
return null;<br />
// If we don't have an incoming buffer, one is created<br />
if (prmisdefault(c))<br />
{<br />
// Create a buffer of the correct type<br />
tableName = n.name();<br />
// tableName = n.attributes().getNamedItem('name');<br />
<br />
// Check if table node can be accessed<br />
if (tableName != '')<br />
{<br />
table = tablename2id(tableName);<br />
dt = new DictTable(table);<br />
c = dt.makeRecord();<br />
}<br />
}<br />
else<br />
{<br />
table = c.TableId;<br />
dt = new DictTable(table);<br />
}<br />
<br />
fieldNode = n.firstChild();<br />
while (fieldNode)<br />
{<br />
fieldName = fieldNode.attributes().getNamedItem('name').text();<br />
field = dt.fieldName2Id(fieldName);<br />
df = new DictField(table, field);<br />
<br />
t = df.baseType();<br />
if (t == Types::Enum) //Enums need to be treated as Integers. By defult, Enums are getting treated as a boolean and hence loosing its value.<br />
t = Types::Integer;<br />
<br />
content = BisTools::valueFromXMLNode (t, fieldNode);<br />
<br />
c.(field) = content.value('value');<br />
<br />
fieldNode = fieldNode.nextSibling();<br />
}<br />
return c;<br />
}<br />
<br />
//Get next working date from the date .<br />
<b>public static date GetNextWorkDay(date _fromDate)</b><br />
{<br />
WorkCalendarDate workCalendar;<br />
;<br />
<br />
select firstOnly TransDate from workCalendar<br />
order by TransDate ASC<br />
where workCalendar.TransDate > _fromDate<br />
&& workCalendar.WorkTimeControl == WorkTimeControl::Open;<br />
<br />
return workCalendar.TransDate;<br />
}<br />
<br />
<br />
/// <summary><br />
/// Attempts to find executatble for file type specified, and open file with it.<br />
/// </summary><br />
/// <param name="_filename"><br />
/// File name to show<br />
/// </param><br />
<b>public static client void showFile(Filename _filename)</b><br />
{<br />
str filePath, fileName, fileExt, executable;<br />
if (System.IO.File::Exists(_filename))<br />
{<br />
[filePath, filename, fileExt] = fileNameSplit(_filename);<br />
executable = WinAPI::findExecutable(_filename);<br />
if (!executable)<br />
{<br />
error(strFmt("Windows were not able to find executable for file %1", _filename));<br />
return;<br />
}<br />
if (fileExt == '.msg')<br />
WinAPI::shellExecute(strFmt('"%1"', executable),strFmt('/f "%1"', _filename),strFmt('"%1"', filePath)); // outlook requires extra parameter /f<br />
else<br />
WinAPI::shellExecute(strFmt('"%1"', executable),strFmt('"%1"', _filename),strFmt('"%1"', filePath));<br />
}<br />
else<br />
{<br />
error("File not found");<br />
}<br />
}<br />
<br />
<br />
<br />
<br />
<br />
/// <summary><br />
/// Converts enum value to enum label in language specified<br />
/// </summary><br />
/// <param name="enumId"><br />
/// Enum Id<br />
/// </param><br />
/// <param name="value"><br />
/// Enum value<br />
/// </param><br />
/// <param name="languageId"><br />
/// Language for label<br />
/// </param><br />
/// <returns><br />
/// Label of enum value in language specified<br />
/// </returns><br />
<b>public static str enum2Label(EnumId enumId, int value, LanguageId languageId = SrsReportRunUtil::getCurrentUserLangId())</b><br />
{<br />
DictEnum dictEnum;<br />
int valueIndex, valueBuf;<br />
;<br />
dictEnum = new DictEnum(enumId);<br />
if (dictEnum)<br />
{<br />
<br />
for (valueIndex = 0 ; valueIndex < dictEnum.values(); valueIndex++)<br />
{<br />
valueBuf = dictEnum.index2Value(valueIndex);<br />
if (valueBuf == value)<br />
return SysLabel::labelId2String(dictEnum.index2LabelId(valueIndex), languageId);<br />
}<br />
}<br />
return '';<br />
}<br />
<br />
<br />
/// <summary><br />
/// Converts time value into string with hours and minutes. Mostly used when generating file names<br />
/// </summary><br />
/// <param name="time"><br />
/// Time as integer<br />
/// </param><br />
/// <returns><br />
/// Time converted to string in format HHMM<br />
/// </returns><br />
<b>public static TempStr time2StrHM(int time)</b><br />
{<br />
return num2str( time div 3600 ,2,0,0,0) + num2Str0(time mod 3600 div 60,2,0,0,0);<br />
}<br />
<br />
/// <summary><br />
/// Converts any value to string. This is hardcoded conversion without using culture context<br />
/// </summary><br />
/// <param name="_value"><br />
/// The value to convert<br />
/// </param><br />
/// <returns><br />
/// Converted value as string<br />
/// </returns><br />
<b>public static str any2String(anytype _value)</b><br />
{<br />
switch(typeOf(_value))<br />
{<br />
// BP deviation documented<br />
case Types::Date: return date2str(_value, -1,-1,-1,-1,-1,-1,DateFlags::None);<br />
case Types::Time: return KrishhUtils::time2StrHM(_value);<br />
case Types::Int64, Types::Integer: return int2str(_value);<br />
case Types::Real: return strFmt('%1', _value);<br />
case Types::Enum: return strFmt('%1', _value);<br />
case Types::UtcDateTime: return DateTimeUtil::toStr(DateTimeUtil::applyTimeZoneOffset(_value, DateTimeUtil::getUserPreferredTimeZone())); // Hotfix 52<br />
default: return strFmt('%1', _value);<br />
}<br />
return "";<br />
}<br />
<br />
<br />
/// <summary><br />
/// Checks full path, and if \ is missing at the end - adds it<br />
/// </summary><br />
/// <param name="path"><br />
/// Full path to analyse<br />
/// </param><br />
/// <returns><br />
/// Full path with \ at the end<br />
/// </returns><br />
<b>public static str fixPath(str path)</b><br />
{<br />
str buf = strLRTrim(path);<br />
if (!path)<br />
return "";<br />
if (subStr(buf, strLen(buf),1) != '\\')<br />
buf = buf + '\\';<br />
return buf;<br />
}<br />
<br />
/// <summary><br />
/// Generates temporrary file with extension. Also creates file and saves it.<br />
/// </summary><br />
/// <param name="filePrefix"><br />
/// File prefix to use<br />
/// </param><br />
/// <param name="extension"><br />
/// Extension to use<br />
/// </param><br />
/// <param name="filePath"><br />
/// File path to use<br />
/// </param><br />
/// <returns><br />
/// Created temporrary file name<br />
/// </returns><br />
/// <remarks><br />
/// Creates empty file with unique name. Safe to use with multiple threads<br />
/// </remarks><br />
/// <exception cref="Exception::Error"><br />
/// When 10 attempts to create file failed<br />
/// </exception><br />
/// <exception cref="Exception::Error"><br />
/// When 10 attempts to create file failed<br />
/// </exception><br />
<b>public static str getTempFile(str filePrefix, str extension, str filePath = '')</b><br />
{<br />
#File<br />
str tmpPath;<br />
str fileName;<br />
System.IO.FileStream fileStream;<br />
boolean ok;<br />
int i;<br />
<br />
if (filePath)<br />
tmpPath = KrishhUtils::fixPath(filePath);<br />
else<br />
{<br />
new InteropPermission(InteropKind::ClrInterop).assert();<br />
tmpPath = System.IO.Path::GetTempPath();<br />
CodeAccessPermission::revertAssert();<br />
}<br />
while(!ok)<br />
{<br />
fileName = tmpPath + (filePrefix?filePrefix:filePrefix + guid2str(newGuid())) + extension; // First attempt direct<br />
new InteropPermission(InteropKind::ClrInterop).assert();<br />
while(System.IO.File::Exists(fileName))<br />
{<br />
fileName = tmpPath + filePrefix + guid2str(newGuid()) + extension;<br />
}<br />
CodeAccessPermission::revertAssert();<br />
try<br />
{<br />
i++;<br />
if (i>10)<br />
throw Exception::Error;<br />
new FileIOPermission(fileName, #IO_WRITE).assert();<br />
fileStream = System.IO.File::Create(fileName);<br />
fileStream.Dispose();<br />
CodeAccessPermission::revertAssert();<br />
ok = true;<br />
}<br />
catch (Exception::Error)<br />
{<br />
throw error("@SYS326095");<br />
}<br />
catch<br />
{<br />
exceptionTextFallThrough();<br />
CodeAccessPermission::revertAssert();<br />
}<br />
}<br />
<br />
return fileName;<br />
}<br />
<div>
<br /></div>
<br />
<br />
/// <summary><br />
/// Returns the number associated with the specified month name.<br />
/// </summary><br />
/// <param name="_monthName"><br />
/// The name of the month.<br />
/// </param><br />
/// <returns><br />
/// The number associated with the month name.<br />
/// </returns><br />
<b>public static int monthUSName2Num(str _monthName)</b><br />
{<br />
int ret;<br />
str monthName = _monthName;<br />
#Define.month1('january')<br />
#Define.jan('jan')<br />
#Define.month2('february')<br />
#Define.feb('feb')<br />
#Define.month3('march')<br />
#Define.mar('mar')<br />
#Define.month4('april')<br />
#Define.apr('apr')<br />
#Define.month5('may')<br />
#Define.month6('june')<br />
#Define.jun('jun')<br />
#Define.month7('july')<br />
#Define.jul('jul')<br />
#Define.month8('august')<br />
#Define.aug('aug')<br />
#Define.month9('september')<br />
#Define.sep('sep')<br />
#Define.month10('october')<br />
#Define.oct('oct')<br />
#Define.month11('november')<br />
#Define.nov('nov')<br />
#Define.month12('december')<br />
#Define.dec('dec');<br />
<br />
monthName = strLwr(_monthName);<br />
<br />
switch(monthName)<br />
{<br />
case #month1:<br />
case #jan:<br />
ret = 1;<br />
break;<br />
case #month2:<br />
case #feb:<br />
ret = 2;<br />
break;<br />
case #month3:<br />
case #mar:<br />
ret = 3;<br />
break;<br />
case #month4:<br />
case #apr:<br />
ret = 4;<br />
break;<br />
case #month5:<br />
ret = 5;<br />
break;<br />
case #month6:<br />
case #jun:<br />
ret = 6;<br />
break;<br />
case #month7:<br />
case #jul:<br />
ret = 7;<br />
break;<br />
case #month8:<br />
case #aug:<br />
ret = 8;<br />
break;<br />
case #month9:<br />
case #sep:<br />
ret = 9;<br />
break;<br />
case #month10:<br />
case #oct:<br />
ret = 10;<br />
break;<br />
case #month11:<br />
case #nov:<br />
ret = 11;<br />
break;<br />
case #month12:<br />
case #dec:<br />
ret = 12;<br />
break;<br />
default:<br />
ret = 0;<br />
break;<br />
}<br />
return ret;<br />
}<br />
<br />
<br /></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-31731670013164026452018-08-24T09:33:00.001+00:002018-08-24T09:33:27.467+00:00Get DimensionAttribute by providing the dimensionnumber<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
public static dimensionAttribute getDimensionByNumber(int _dimensionNumber)<br />
{<br />
RecId companyLedger = Ledger::findByLegalEntity(CompanyInfo::findDataArea(curext()).RecId).RecId;<br />
DimensionAttribute dimensionAttribute;<br />
Query query = new Query();<br />
QueryBuildDataSource qbd;<br />
QueryRun qr;<br />
;<br />
if (! _dimensionNumber)<br />
{<br />
return dimensionAttribute;<br />
}<br />
qbd = query.addDataSource(tableNum(dimensionAttribute));<br />
qbd.fields().dynamic(false);<br />
qbd.fields().addField(fieldNum(dimensionAttribute, Name));<br />
qbd.addOrderByField(fieldNum(dimensionAttribute, Name));<br />
qbd.addGroupByField(fieldNum(dimensionAttribute, Name));<br />
qbd.addRange(fieldNum(dimensionAttribute, RecId)).value(queryNotValue(DimensionAttribute::getMainAccountDimensionAttribute()));<br />
qbd = qbd.addDataSource(tableNum(dimensionHierarchyLevel));<br />
qbd.fields().dynamic(true);<br />
qbd.relations(true);<br />
<br />
qbd = qbd.addDataSource(tableNum(ledgerStructure));<br />
qbd.relations(false);<br />
qbd.addLink(fieldNum(dimensionHierarchyLevel, DimensionHierarchy), fieldNum(ledgerStructure, DimensionHierarchy));<br />
qbd.addRange(fieldNum(ledgerStructure, Ledger)).value(queryvalue(companyLedger));<br />
<br />
qr = new QueryRun(query);<br />
qr.enablePositionPaging(true);<br />
qr.addPageRange(_dimensionNumber,1);<br />
if (qr.next())<br />
{<br />
dimensionAttribute = qr.getNo(1);<br />
}<br />
return dimensionAttribute;<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-80842272655868397902018-05-30T13:04:00.001+00:002018-05-30T13:04:27.511+00:00Create Non clusterindex in Ax with include keyword.<div dir="ltr" style="text-align: left;" trbidi="on">
<strong><em><u>Create non clustered index with </u></em></strong><strong><em><u>include keyword suggestion given by query plan</u></em></strong><br />
<u><strong><em><br /></em></strong></u> Index with Included Columns<br /> You can extend the functionality of nonclustered indexes by adding nonkey columns to the leaf level of the nonclustered index. By including nonkey columns, you can create nonclustered indexes that cover more queries. This is because the nonkey columns have the following benefits:<br />• They can be data types not allowed as index key columns.<br />• They are not considered by the Database Engine when calculating the number of index key columns or index key size.<br /> An index with included nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.<br /><br /><br /><u><i><b>Issue</b></i></u><br /><br /> Whenever a synchronization is done, AX overwrites the indexes which we put through SQL<br /><br /><b><u><i>Resolution</i></u></b><br /><br /> a. Created the index via AX as a table method<br />
<br /><br />
<span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"></span></span></span><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><b>public</b></span></span></span><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> </span></span><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">static</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> </span></span><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">server</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> </span></span><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">void</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> createSqlIndexes()</span></span><br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"></span><span style="font-family: Consolas; font-size: xx-small;">{</span><br />
<span style="font-family: Consolas; font-size: xx-small;">
</span><br />
<span style="font-family: Consolas; font-size: xx-small;"> SqlStatementExecutePermission SqlStatementExecutePermission;</span><br />
<span style="font-family: Consolas; font-size: xx-small;"><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">str</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> createIndexSql;</span></span></span><br />
<br /></span><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">Connection connection=</span></span><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">new</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> Connection();<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
</span></span></span></span></span></span><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> Statement statement=connection.createStatement();</span></span></span><br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
createIndexSql=</span></span></span><br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">@"IF EXISTS(select * from sys.indexes where object_id=OBJECT_ID(N'[dbo].[InventDIM]')</span></span></span></span></span></span><br />
<br />
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"></span></span></span><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"> AND NAME=N'sonIdx' )</span></span></span><br />
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">
DROP INDEX [sonIdx] on [dbo].[InventDIM] WITH (ONLINE=OFF)</span></span></span><br />
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">
CREATE NONCLUSTERED INDEX [sonIdx] ON [dbo].[INVENTDIM] ([INVENTBATCHID],[WMSLOCATIONID],[INVENTSERIALID],[INVENTSIZEID],[INVENTCOLORID],[INVENTGTDID_RU],[INVENTPROFILEID_RU],[INVENTOWNERID_RU],[INVENTSTYLEID],[LICENSEPLATEID],[INVENTSTATUSID],[DATAAREAID],[PARTITION],[INVENTLOCATIONID],[CONFIGID],[INVENTSITEID])</span></span></span><br />
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">
INCLUDE ([INVENTDIMID])</span></span></span><br />
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">
<span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;"><span style="color: darkred; font-family: Consolas; font-size: xx-small;">WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)"</span></span></span><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">;</span></span></span></span></span><br />
<br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
</span></span><br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> SqlStatementExecutePermission=</span></span><b><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;"><span style="color: darkblue; font-family: Consolas; font-size: xx-small;">new</span></span></span></b><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> SqlStatementExecutePermission(createIndexSql);</span></span><br />
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;">
SqlStatementExecutePermission.assert();<br />
statement.executeUpdate(createIndexSql);<br />
CodeAccessPermission::revertAssert();<br />
}<br />
<br /></span></span><h4 style="text-align: left;">
Execute this code in the application class dbsynchronize method at the end of the method after standard dbsynch done. so that we will have an sql index.</h4>
<span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"><br /></span></span><br /></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-61222023270162115382017-07-17T11:14:00.003+00:002017-07-17T11:14:52.766+00:00Read xml file with namespace<div dir="ltr" style="text-align: left;" trbidi="on">
static void krishh_samplexmlread(Args _args)<br />
{<br />
XmlNode root;<br />
XmlNode book;<br />
XmlNodeList books;<br />
XmlNamespaceManager nsmgr;<br />
<br />
XmlDocument doc = new XmlDocument();<br />
int i=1;<br />
doc.Load(@"C:\Temp\book.xml");<br />
<br />
//Create an XmlNamespaceManager for resolving namespaces.<br />
nsmgr = new XmlNamespaceManager(doc.NameTable());<br />
nsmgr.AddNamespace("bk", "urn:samples");<br />
<br />
//Select the book node with the matching attribute value.<br />
<br />
<br />
root = doc.DocumentElement();<br />
<br />
books = root.selectNodes("descendant::book", nsmgr);<br />
for (i = 0; i < books.length(); i++)<br />
{<br />
book = books.item(i);<br />
info(book.selectSingleNode("bk:first-name").text());<br />
info(book.selectSingleNode("bk:last-name").text());<br />
<br />
<br />
}<br />
<br />
}<br />
<br />
//<?xml version="1.0"?><br />
//<br />
//<!-- A fragment of a book store inventory database --><br />
//<br />
//-<bookstore xmlns:bk="urn:samples"><br />
//<br />
//<br />
//-<book bk:ISBN="1-861001-57-8" publicationdate="1997" genre="novel"><br />
//<br />
//<title>Pride And Prejudice</title><br />
//<br />
//<br />
//-<author><br />
//<br />
//<first-name>Jane</first-name><br />
//<br />
//<last-name>Austen</last-name><br />
//<br />
//</author><br />
//<br />
//<price>24.95</price><br />
//<br />
//</book><br />
//<br />
//<br />
//-<book bk:ISBN="1-861002-30-1" publicationdate="1992" genre="novel"><br />
//<br />
//<title>The Handmaid's Tale</title><br />
//<br />
//<br />
//-<author><br />
//<br />
//<first-name>Margaret</first-name><br />
//<br />
//<last-name>Atwood</last-name><br />
//<br />
//</author><br />
//<br />
//<price>29.95</price><br />
//<br />
//</book><br />
//<br />
//<br />
//-<book bk:ISBN="1-861001-57-6" publicationdate="1991" genre="novel"><br />
//<br />
//<title>Emma</title><br />
//<br />
//<br />
//-<author><br />
//<br />
//<first-name>Jane</first-name><br />
//<br />
//<last-name>Austen</last-name><br />
//<br />
//</author><br />
//<br />
//<price>19.95</price><br />
//<br />
//</book><br />
<br />
<br />
//-<book bk:ISBN="1-861001-45-3" publicationdate="1982" genre="novel"><br />
//<br />
//<title>Sense and Sensibility</title><br />
//<br />
//<br />
//-<author><br />
//<br />
//<first-name>Jane</first-name><br />
//<br />
//<last-name>Austen</last-name><br />
//<br />
//</author><br />
//<br />
//<price>19.95</price><br />
//<br />
//</book><br />
//<br />
//</bookstore></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-12195770751175184162017-04-20T10:14:00.001+00:002017-04-20T10:14:19.427+00:00AX2012 Run AIF Single Message manually<div dir="ltr" style="text-align: left;" trbidi="on">
Execute single message for inbound without executing all inbound ports.<br />
<br />
<b>class Krishh_InboundParallelMsgProcessPerMsgId extends AifInboundParallelMsgProcess</b><br />
{<br />
RecId gatewayQueueRecId;<br />
DialogField dlgfRecId;<br />
AifMessageId messageId;<br />
}<br />
<br />
protected Object dialog()<br />
{<br />
DialogRunbase dialogRunbase;<br />
<br />
dialogRunbase = super();<br />
dialogRunbase.caption(AifInboundParallelMsgProcess::description());<br />
<br />
dialogRunbase.addText("Runbase framework doesnt allow Guid type fields");<br />
dialogRunbase.addText("reference field shows the gatewayqueue record");<br />
<br />
dlgfRecId = dialogRunbase.addField(extendedTypeStr(AifGatewayQueueRecId));<br />
dlgfRecId.lookupButton(2);<br />
<br />
return dialogRunbase;<br />
}<br />
<br />
public AifGatewayQueue findGatewayQueue(RecId _recId)<br />
{<br />
AifGatewayQueue aifGatewayQueue;<br />
<br />
select aifGatewayQueue<br />
where aifGatewayQueue.RecId == _recId;<br />
<br />
return aifGatewayQueue;<br />
}<br />
<br />
public boolean getFromDialog()<br />
{<br />
boolean ret;<br />
<br />
ret = super();<br />
<br />
gateWayQueueRecId = dlgfRecId.value();<br />
<br />
return ret;<br />
}<br />
<br />
public AifMessageId parmMessageId(AifMessageId _messageId = messageId)<br />
{<br />
messageId = _messageId;<br />
<br />
return messageId;<br />
}<br />
<br />
public void run()<br />
{<br />
if (gatewayQueueRecId != 0 && messageId == emptyGuid())<br />
{<br />
messageId = this.findGatewayQueue(gateWayQueueRecId).MessageId;<br />
}<br />
<br />
try<br />
{<br />
ttsBegin;<br />
<br />
if (messageId != emptyGuid())<br />
{<br />
this.runSingleMsgId(messageId);<br />
AifQueueManager::createQueueManagerData();<br />
}<br />
else<br />
{<br />
throw error ("invalid message id please enter valid messageid");<br />
}<br />
<br />
ttsCommit;<br />
}<br />
catch<br />
{<br />
throw error("process has been aborted");<br />
}<br />
}<br />
<br />
private void runSingleMsgId(AifMessageId _messageId)<br />
{<br />
AifGatewayQueue gatewayQueue;<br />
AifInboundMsgProcess inboundMsgProcess;<br />
AifResourceLockId resourceLockId;<br />
;<br />
<br />
setprefix(classstr(InboundParallelMsgProcessPerMsgId) + '-' + methodstr(Krishh_InboundParallelMsgProcessPerMsgId , run));<br />
<br />
select firstOnly gatewayQueue<br />
where gatewayQueue.MessageId == _messageId;<br />
<br />
if (gatewayQueue)<br />
{<br />
resourceLockId = AifResourceLock::lockResource(guid2str(gatewayQueue.MessageId),<br />
AifResourceType::Message,<br />
AifResourceLockType::DocumentService);<br />
<br />
// Process message only if lock is created.<br />
if(resourceLockId)<br />
{<br />
AifResourceIdMap::createMsgResourceMap(guid2str(gatewayQueue.MessageId), gatewayQueue.MessageId);<br />
<br />
// remember selected record<br />
inboundMsgProcess = new AifInboundMsgProcess(gatewayQueue.data(), resourceLockId);<br />
<br />
<br />
<br />
inboundMsgProcess.run();<br />
}<br />
}<br />
}<br />
<br />
public boolean validate(Object calledFrom = null)<br />
{<br />
boolean ret;<br />
<br />
ret = super(calledFrom);<br />
<br />
if (this.findGatewayQueue(gateWayQueueRecId).RecId == 0)<br />
{<br />
throw error("Queue not found");<br />
}<br />
<br />
return ret;<br />
}<br />
<br />
public static Krishh_InboundParallelMsgProcessPerMsgId construct()<br />
{<br />
return new Krishh_InboundParallelMsgProcessPerMsgId ();<br />
}<br />
<br />
public static void main(Args args)<br />
{<br />
Krishh_InboundParallelMsgProcessPerMsgId inboundParallelMsgProcessPerMsgId;<br />
<br />
inboundParallelMsgProcessPerMsgId = Krishh_InboundParallelMsgProcessPerMsgId ::construct();<br />
<br />
if (inboundParallelMsgProcessPerMsgId.prompt())<br />
{<br />
inboundParallelMsgProcessPerMsgId.run();<br />
}<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-27009996957241838882017-04-20T09:30:00.004+00:002017-04-20T09:30:28.867+00:00AX2012 Actiavte/Deactivate Ports using X++<div dir="ltr" style="text-align: left;" trbidi="on">
create enum 1. AIFPortActivorDeactive with Acivate,Decativate as enumvalues.<br />
2. AIF portType with inbound and Outbound as enumvalues.<br />
<br />
<b>class krishhAIFPortsUtil extends RunBaseBatch</b><br />
{<br />
Map serviceStatusMap;<br />
Map portWsdlUrlMap;<br />
AIFPortActivorDeactive portActiveorDeactive;<br />
AIFPortType aifPortType;<br />
<br />
<br />
DialogField dlgActiveorDeactive;<br />
DialogField dlgaifPortType;<br />
<br />
#define.CurrentVersion(1)<br />
#define.Version1(1)<br />
#localmacro.CurrentList<br />
portActiveorDeactive,<br />
aifPortType<br />
#endmacro<br />
}<br />
<br />
<b>private void deployInboundPort(AifInboundPort port)</b><br />
{<br />
startLengthyOperation();<br />
AifPortManager::deployPort(port.Name);<br />
this.updateServiceHostStatus();<br />
endLengthyOperation();<br />
}<br />
<br />
<b>private void deployOutboundPort(AifOutboundPort port)</b><br />
{<br />
startLengthyOperation();<br />
AifPortManager::deployPort(port.Name);<br />
endLengthyOperation();<br />
}<br />
<br />
<br />
public Object dialog()<br />
{<br />
DialogRunbase dialog = super();<br />
#resAppl<br />
;<br />
<br />
dlgActiveorDeactive=dialog.addField(enumStr(AIFPortActivorDeactive), "Activate/Deactivate");<br />
dlgaifPortType=dialog.addField(enumStr(AIFPortType), "PortType");<br />
return dialog;<br />
}<br />
<br />
public boolean getFromDialog()<br />
{<br />
;<br />
portActiveorDeactive=dlgActiveorDeactive.value();<br />
aifPortType=dlgaifPortType.value();<br />
return super();<br />
}<br />
<br />
<b>str getPortRuntimeError(AifInboundPort port)</b><br />
{<br />
str serviceTypeName, status;<br />
boolean isPortStarted = false;<br />
#Aif<br />
<br />
if (port.Deployed)<br />
{<br />
serviceTypeName = strFmt('%1.%2', #DotNetServiceNamespace, port.Name);<br />
<br />
if (!serviceStatusMap)<br />
{<br />
// If the map is null, then the IL appDomain does not exist and services are not available<br />
status = strFmt("@SYS345108");<br />
}<br />
else if (serviceStatusMap.exists(serviceTypeName))<br />
{<br />
status = serviceStatusMap.lookup(serviceTypeName);<br />
isPortStarted = strStartsWith(status, #WcfCommunicationState_Opened);<br />
}<br />
}<br />
<br />
return isPortStarted?"":status;<br />
}<br />
<br />
// BP deviation documented<br />
<b>str getPortWsdlUrl(AifInboundPort port)</b><br />
{<br />
str wsdlUrl = '';<br />
AifPortName portName;<br />
AifWcfAdapter wcfAdapter;<br />
<br />
if (port.Deployed)<br />
{<br />
portName = port.Name;<br />
<br />
if (portWsdlUrlMap.exists(portName))<br />
{<br />
wsdlUrl = portWsdlUrlMap.lookup(portName);<br />
}<br />
else<br />
{<br />
wcfAdapter = AifWcfAdapter::getWcfAdapterForPort(port);<br />
<br />
if (wcfAdapter != null)<br />
{<br />
wsdlUrl = wcfAdapter.getWsdlUrl(port.ChannelId, port.Name);<br />
}<br />
<br />
portWsdlUrlMap.insert(portName, wsdlUrl);<br />
}<br />
}<br />
<br />
return wsdlUrl;<br />
}<br />
<br />
// BP deviation documented<br />
<b>boolean isPortRunning(AifInboundPort port)</b><br />
{<br />
str serviceTypeName, status;<br />
boolean isPortStarted = false;<br />
#Aif<br />
<br />
if (port.Deployed)<br />
{<br />
serviceTypeName = strFmt('%1.%2', #DotNetServiceNamespace, port.Name);<br />
<br />
// If the map is null, then the IL appDomain does not exist and services are not available<br />
if (serviceStatusMap && serviceStatusMap.exists(serviceTypeName))<br />
{<br />
status = serviceStatusMap.lookup(serviceTypeName);<br />
isPortStarted = strStartsWith(status, #WcfCommunicationState_Opened);<br />
}<br />
}<br />
<br />
return isPortStarted;<br />
}<br />
<br />
public container pack()<br />
{<br />
return [#CurrentVersion,#CurrentList];<br />
}<br />
<br />
public boolean unpack(container packedClass)<br />
{<br />
Version version = RunBase::getVersion(packedClass);<br />
;<br />
switch (version)<br />
{<br />
case #CurrentVersion:<br />
[version,#CurrentList] = packedClass;<br />
break;<br />
default:<br />
return false;<br />
}<br />
<br />
return true;<br />
}<br />
<br />
<b>public AIFPortType parmAifPortType(AIFPortType _aifPortType = aifPortType)</b><br />
{<br />
aifPortType = _aifPortType;<br />
<br />
return aifPortType;<br />
}<br />
<br />
<b>public AIFPortActivorDeactive parmPortActiveorDeactive(AIFPortActivorDeactive _portActiveorDeactive = portActiveorDeactive)</b><br />
{<br />
portActiveorDeactive = _portActiveorDeactive;<br />
<br />
return portActiveorDeactive;<br />
}<br />
<br />
<b>public void portinit()</b><br />
{<br />
AifSetup::initialize();<br />
// Register out of the box adapters<br />
AifSetup::registerOutOfTheBoxAdapters();<br />
<br />
portWsdlUrlMap = new Map(Types::String, Types::String);<br />
}<br />
<br />
/// <summary><br />
/// Contains the code that does the actual job of the class.<br />
/// </summary><br />
<b>public void run()</b><br />
{<br />
#OCCRetryCount<br />
AifInboundPort AifInboundPort;<br />
<br />
AifOutboundPort AifOutboundPort;<br />
<br />
try<br />
{<br />
this.updateServiceHostStatus();<br />
switch (aifPortType)<br />
{<br />
case AIFPortType::Inbound:<br />
if(AIFPortActivorDeactive::Activate==portActiveorDeactive)<br />
{<br />
while select AifInboundPort //where AifInboundPort.PortCategory==AifPortCategory::Enhanced<br />
{<br />
<br />
if(this.isPortRunning(AifInboundPort))<br />
{<br />
this.portinit();<br />
this.deployInboundPort(AifInboundPort);<br />
if(this.getPortRuntimeError(AifInboundPort)!="")<br />
{<br />
info(strFmt("@krishh1896",AifInboundPort.Name,this.getPortRuntimeError(AifInboundPort)));<br />
}<br />
}<br />
}<br />
}<br />
else<br />
{<br />
while select AifInboundPort where AifInboundPort.PortCategory==AifPortCategory::Enhanced<br />
{<br />
this.portinit();<br />
this.undeployInboundPort(AifInboundPort);<br />
}<br />
}<br />
break;<br />
case AIFPortType::OutBound:<br />
if(IFPortActivorDeactive::Activate==portActiveorDeactive)<br />
{<br />
while select AifOutboundPort<br />
{<br />
this.portinit();<br />
this.deployOutboundPort(AifOutboundPort);<br />
<br />
}<br />
}<br />
else<br />
{<br />
while select AifOutboundPort<br />
{<br />
this.portinit();<br />
this.unDeployOutboundPort(AifOutboundPort);<br />
}<br />
}<br />
break;<br />
default:<br />
throw error(strfmt("@SYS12580",aifPortType));<br />
<br />
<br />
<br />
}<br />
}<br />
catch (Exception::Deadlock)<br />
{<br />
retry;<br />
}<br />
catch (Exception::UpdateConflict)<br />
{<br />
if (appl.ttsLevel() == 0)<br />
{<br />
if (xSession::currentRetryCount() >= #RetryNum)<br />
{<br />
throw Exception::UpdateConflictNotRecovered;<br />
}<br />
else<br />
{<br />
retry;<br />
}<br />
}<br />
else<br />
{<br />
throw Exception::UpdateConflict;<br />
}<br />
}<br />
<br />
}<br />
<br />
<b>private void undeployInboundPort(AifInboundPort port)</b><br />
{<br />
startLengthyOperation();<br />
AifPortManager::undeployPort(port.Name);<br />
this.updateServiceHostStatus();<br />
//this.clearPortWsdlUrl(port);<br />
endLengthyOperation();<br />
}<br />
<br />
<b>private void unDeployOutboundPort(AifOutboundPort port)</b><br />
{<br />
startLengthyOperation();<br />
AifPortManager::undeployPort(port.Name);<br />
endLengthyOperation();<br />
}<br />
<div>
<div>
<b>public void updateServiceHostStatus()</b></div>
<div>
{</div>
<div>
// If the map is null, then the IL appDomain does not exist and services are not available</div>
<div>
serviceStatusMap = appl.getServiceHostStatus();</div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<div>
static krishhAIFPortsUtil construct()</div>
<div>
{</div>
<div>
return new krishhAIFPortsUtil();</div>
<div>
}</div>
</div>
<div>
<div>
<b>public static void main(Args _args)</b></div>
<div>
{</div>
<div>
krishhAIFPortsUtil krishhAIFPortsUtil ;</div>
<div>
;</div>
<div>
krishhAIFPortsUtil = krishhAIFPortsUtil ::construct();</div>
<div>
<br /></div>
<div>
if (krishhAIFPortsUtil .prompt())</div>
<div>
krishhAIFPortsUtil .run();</div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<div>
public static void mainAutoRun(str _args)</div>
<div>
{</div>
<div>
krishhAIFPortsUtil aifPortsUtil;</div>
<div>
;</div>
<div>
aifPortsUtil = krishhAIFPortsUtil ::construct();</div>
<div>
<br /></div>
<div>
if (!_args)</div>
<div>
return;</div>
<div>
<br /></div>
<div>
switch(_args)</div>
<div>
{</div>
<div>
case('activate') :</div>
<div>
{</div>
<div>
aifPortsUtil.parmPortActiveorDeactive(AIFPortActivorDeactive::Activate);</div>
<div>
}</div>
<div>
<br /></div>
<div>
case('deactivate') :</div>
<div>
{</div>
<div>
aifPortsUtil.parmPortActiveorDeactive(AIFPortActivorDeactive::Deactivate);</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
aifPortsUtil.run();</div>
<div>
}</div>
</div>
<div>
<br /></div>
</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-35648769929402455162017-04-20T09:17:00.001+00:002017-04-20T09:17:38.461+00:00AX2012 Export ActiveDirectory Data to file.<div dir="ltr" style="text-align: left;" trbidi="on">
<b><br /></b>
<b>Created the framework class called ADReader which reads the data from ActiveDirectory of current domains in the nework that connected.</b><br />
<b><br /></b>
<b>static void krishh_ADExportToCSV(Args _args)</b><br />
{<br />
AxaptaUserManager mgr;<br />
container domainNames;<br />
int i;<br />
int domainCount;<br />
str name;<br />
System.Collections.ArrayList domains = new System.Collections.ArrayList();<br />
<br />
TextIo ioData;<br />
FileIOPermission permission;<br />
str filename = "c:\\temp\\tmotest_"+FileUtil::createFilenameTimeStamp()+".csv";<br />
<br />
ADReader adReader = new ADReader();<br />
map costcenter = new Map(types::String, types::String);<br />
str key;<br />
<br />
#File<br />
<br />
permission = new FileIOPermission(filename, #io_write);<br />
permission.assert();<br />
<br />
// Open file for writing<br />
ioData = new TextIo(filename, #io_write);<br />
<br />
// Check file open status<br />
if (!ioData)<br />
{<br />
// File '%1' could not be opened.<br />
throw error(strfmt("@SYS19312", filename));<br />
}<br />
<br />
// Set file delimiters<br />
ioData.outRecordDelimiter('\r\n');<br />
ioData.outFieldDelimiter(';');<br />
ioData.write(<br />
[<br />
"Domain"<br />
, "Company"<br />
, "Country"<br />
, "DepartmentNumber"<br />
, "EmployeeType"<br />
, "Mail"<br />
, "Manager"<br />
, "Manager_Converted"<br />
, "GivenName"<br />
, "Sn"<br />
, "TelephoneNumber"<br />
, "UserId"<br />
, "samAccountName"<br />
, "EmployeeNumber"<br />
, "EmployeeNumber_Converted"<br />
, "Disabled"<br />
, "MemberOf"<br />
, "ADGroups"<br />
]);<br />
<br />
<br />
mgr = new AxaptaUserManager();<br />
// Get the names of the domains from the kernel class<br />
domainNames = mgr.enumerateDomains('');<br />
if(domainNames)<br />
{<br />
domainCount = conLen(domainNames);<br />
// Add all the domain names to the domains combo box<br />
// dual loop to sort the domains alphabetically using the default comparator<br />
if(domainCount > 0)<br />
{<br />
domains.Clear();<br />
for(i = 0; i < domainCount; i++)<br />
{<br />
if (conPeek(domainNames, i+1) == "Krishhdax.com")<br />
{<br />
adReader.reset();<br />
adReader.parmSelectedDomainName(conPeek(domainNames, i+1));<br />
<br />
while(adReader.next())<br />
{<br />
if ( adReader.getEmployeeType() == "Employee Master Account"<br />
|| adReader.getEmployeeType() == "Consultant Master Account")<br />
{<br />
ioData.write(<br />
[<br />
adReader.parmSelectedDomainName()<br />
, adReader.getCompany()<br />
, adReader.getCountry()<br />
, adReader.getDepartmentNumber()<br />
, adReader.getEmployeeType()<br />
, adReader.getMail()<br />
, adReader.getManager()<br />
, subStr(adReader.getManager()<br />
, strfind(adReader.getManager(), "CN=", 1, strLen(adReader.getManager()))+3<br />
, strfind(adReader.getManager(), ",", strfind(adReader.getManager(), "CN=", 1, strLen(adReader.getManager())), strLen(adReader.getManager())) - strfind(adReader.getManager(), "CN=",1 , strLen(adReader.getManager())) - 3<br />
)<br />
, adReader.getGivenName()<br />
, adReader.getSn()<br />
, adReader.getTelephoneNumber()<br />
, adReader.getUserId()<br />
, adReader.getsamAccountName()<br />
, adReader.getEmployeeNumber()<br />
, subStr(adReader.getEmployeeNumber(), 4, 255)<br />
, adReader.getDisabled()<br />
, con2Str(adReader.getMemberOf())<br />
, con2Str(adReader.getADGroups())<br />
]);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
}<br />
<br />
CodeAccessPermission::revertAssert();<br />
}<br />
<br />
<br />
<br />
<br />
<b>class ADReader</b><br />
{<br />
System.DirectoryServices.DirectorySearcher directorySearcher;<br />
System.DirectoryServices.SearchResultCollection searchResultCollection;<br />
System.DirectoryServices.SearchResult searchResult;<br />
System.DirectoryServices.DirectoryEntry entry;<br />
System.DirectoryServices.PropertyValueCollection propertyValueCollection;<br />
System.DirectoryServices.SearchScope searchScope;<br />
str selectedDomainName;<br />
str prefix;<br />
str criteria;<br />
Filename filename;<br />
<br />
System.Collections.Specialized.StringCollection propertyList;<br />
System.DirectoryServices.PropertyCollection propertyCollection;<br />
int numberOfUsers, currentUserNumber;<br />
<br />
NetworkAlias networkAlias;<br />
Description company;<br />
Description department;<br />
Description title;<br />
Email mail;<br />
Name givenName;<br />
str manager, departmentNumber, telephoneNumber, userId, sn, employeeType, employeeNumber, country, samAccountName;<br />
container memberOf, adGroups;<br />
Integer userAccountControl;<br />
<br />
}<br />
<b>public container getADGroups()</b><br />
{<br />
str memberOfStr, searchStr;<br />
Counter pos, posCount;<br />
<br />
Counter posFrom, posTo, searchStrLen;<br />
<br />
<br />
if (!ADGroups)<br />
{<br />
searchStr = 'CN=';<br />
searchStrLen = strLen(searchStr);<br />
<br />
posCount = conlen(memberOf);<br />
for (Pos=1; pos<=posCount;pos++)<br />
{<br />
memberOfStr = conpeek(memberOf, pos);<br />
<br />
posTo = 0;<br />
posFrom = strScan(memberOfStr, searchStr, posTo, strLen(memberOfStr));<br />
while (posFrom)<br />
{<br />
posTo = strScan(memberOfStr, ',', posFrom, strLen(memberOfStr));<br />
ADGroups += [subStr(memberOfStr, posFrom+searchStrLen, posTo-posFrom-searchStrLen)];<br />
posFrom = strScan(memberOfStr, searchStr, posTo, strLen(memberOfStr));<br />
}<br />
}<br />
}<br />
<br />
return ADGroups;<br />
}<br />
<b>private void setSearchPropertyList(System.DirectoryServices.DirectorySearcher _directorySearcher)</b><br />
{<br />
propertyList = _directorySearcher.get_PropertiesToLoad();<br />
propertyList.Add('samaccountname');<br />
propertyList.Add('company');<br />
propertyList.Add('department');<br />
propertyList.Add('title');<br />
propertyList.Add('displayName');<br />
propertyList.Add('distinguishedName');<br />
propertyList.Add('objectClass');<br />
propertyList.Add('member');<br />
propertyList.Add('manager');<br />
propertyList.Add('mail');<br />
propertyList.Add('telephoneNumber');<br />
propertyList.Add('Userid');<br />
propertyList.Add('sn');<br />
propertyList.Add('EmployeeType');<br />
propertyList.Add('employeeNumber');<br />
propertyList.Add('c');<br />
propertyList.Add('samAccountName');<br />
}<br />
<br />
<br />
<b>public boolean next()</b><br />
{<br />
Counter pos, posCount;<br />
str memberOfStr;<br />
CLRObject clrenumerator;<br />
<br />
networkAlias = "";<br />
company = "";<br />
department = "";<br />
title = "";<br />
mail = "";<br />
givenName = "";<br />
manager = "";<br />
departmentNumber = "";<br />
telephoneNumber = "";<br />
userId = "";<br />
sn = "";<br />
employeeType = "";<br />
adGroups = conNull();<br />
memberOf = conNull();<br />
<br />
try<br />
{<br />
if (currentUserNumber == 0 && searchResultCollection == null)<br />
{<br />
prefix = 'LDAP://';<br />
searchScope = System.DirectoryServices.SearchScope::Subtree;<br />
<br />
entry = new System.DirectoryServices.DirectoryEntry(prefix+selectedDomainName);<br />
<br />
directorySearcher = new System.DirectoryServices.DirectorySearcher(entry);<br />
<br />
directorySearcher.set_PageSize(65535);<br />
directorySearcher.set_CacheResults(false);<br />
directorySearcher.set_SearchScope(searchScope);<br />
<br />
directorySearcher.set_Filter(strFmt('(&(objectClass=user)(objectCategory=person)%1(userAccountControl:1.2.840.113556.1.4.803:=512))', criteria));<br />
this.setSearchPropertyList(directorySearcher);<br />
<br />
searchResultCollection = directorySearcher.FindAll();<br />
numberOfUsers = searchResultCollection.get_Count();<br />
}<br />
<br />
do<br />
{<br />
currentUserNumber++;<br />
<br />
if (currentUserNumber > numberOfUsers)<br />
{<br />
return false;<br />
}<br />
<br />
searchResult = searchResultCollection.get_Item(currentUserNumber-1);<br />
entry = searchResult.GetDirectoryEntry();<br />
<br />
if (entry)<br />
{<br />
PropertyCollection = entry.get_Properties();<br />
}<br />
<br />
if (!PropertyCollection)<br />
{<br />
entry.Dispose();<br />
}<br />
}<br />
while (!PropertyCollection);<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('samaccountname');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
NetworkAlias = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('company');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
company = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('telephoneNumber');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
telephoneNumber = PropertyValueCollection.get_Value();<br />
telephoneNumber = telephoneNumber; //str2int(telephoneNumber)==0 ? "" : telephoneNumber;<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('department');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
department = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('departmentNumber');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
departmentNumber = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('title');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
title = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('mail');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
mail = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('givenName');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
givenName = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('Userid');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
UserId = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('EmployeeNumber');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
employeeNumber = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('sn');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
sn = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
PropertyValueCollection = propertyCollection.get_Item('EmployeeType');<br />
<br />
if (PropertyValueCollection && PropertyValueCollection.get_Count())<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
<br />
employeeType = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('manager');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
manager = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('c');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
country = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('samAccountName');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
samAccountName = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('userAccountControl');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
userAccountControl = PropertyValueCollection.get_Value();<br />
}<br />
}<br />
<br />
propertyValueCollection = PropertyCollection.get_Item('memberOf');<br />
<br />
if (PropertyValueCollection)<br />
{<br />
if (PropertyValueCollection.get_Value())<br />
{<br />
clrenumerator = PropertyValueCollection.GetEnumerator();<br />
while (clrenumerator.MoveNext())<br />
{<br />
memberOfStr = clrenumerator.get_Current();<br />
memberOf += [memberOfStr];<br />
}<br />
//posCount = PropertyValueCollection.get_Count();<br />
//for (Pos=0; pos<posCount;pos++)<br />
//{<br />
//memberOfStr = PropertyValueCollection.get_Item(pos);<br />
//memberOf += [memberOfStr];<br />
//}<br />
}<br />
}<br />
}<br />
catch (Exception::CLRError)<br />
{<br />
//SRSProxy::handleClrException(Exception::Warning);<br />
//warning(strFmt("@SYS117734"));<br />
curext();<br />
}<br />
<br />
<br />
return true;<br />
}<br />
<br />
<br />
<br />
<b>public str getCompany()</b><br />
{<br />
return company;<br />
}<br />
<b>public str getCountry()</b><br />
{<br />
return country;<br />
}<br />
<b>public str getDepartmentNumber()</b><br />
{<br />
return departmentNumber;<br />
}<br />
<br />
<b>public boolean getDisabled()</b><br />
{<br />
<br />
// Added new conditions for when a user should be seen as disabled.<br />
boolean ret;<br />
;<br />
//ACCOUNTDISABLE 0x0002 2<br />
ret = bitTest(userAccountControl, 1 << 1);<br />
<br />
if (!ret && title == 'SLUTAT')<br />
ret = true;<br />
<br />
if (!ret && (strLen(departmentNumber) > 0 && !strRem(departmentNumber,'0')) && (strLen(employeeNumber) > 0 && !strRem(employeeNumber,'0')))<br />
ret = true;<br />
<br />
return ret;<br />
<br />
}<br />
<br />
<b>public str getEmployeeNumber()</b><br />
{<br />
return employeeNumber;<br />
}<br />
<br />
<b>public str getEmployeeType()</b><br />
{<br />
return EmployeeType;<br />
}<br />
<b>public str getGivenName()</b><br />
{<br />
return givenName;<br />
}<br />
<br />
<b>public email getMail()</b><br />
{<br />
return mail;<br />
}<br />
<br />
<b>public str getManager()</b><br />
{<br />
return subStr(manager<br />
, strfind(manager, 'CN=', 1, strLen(manager))+3<br />
, strfind(manager, ',', strfind(manager, 'CN=', 1, strLen(manager)), strLen(manager)) - strfind(manager, 'CN=',1 , strLen(manager)) - 3<br />
);<br />
}<br />
<br />
<b>public container getMemberOf()</b><br />
{<br />
return memberOf;<br />
}<br />
<br />
<b>public str getSamAccountName()</b><br />
{<br />
return samAccountName;<br />
}<br />
<br />
<b>public str getSn()</b><br />
{<br />
return sn;<br />
}<br />
<br />
<b>public str getTelephoneNumber()</b><br />
{<br />
return telephoneNumber;<br />
}<br />
<br />
<b>public str getUserId()</b><br />
{<br />
return UserId;<br />
}<br />
<br />
<b>public int parmCurrentUserNumber(int _currentUserNumber = currentUserNumber)</b><br />
{<br />
<br />
currentUserNumber = _currentUserNumber;<br />
<br />
return currentUserNumber;<br />
}<br />
<br />
<b>public str parmFileName(Filename _filename = filename)</b><br />
{<br />
filename = _filename;<br />
<br />
return filename;<br />
}<br />
<br />
<b>public str parmselectedDomainName(str _selectedDomainName = selectedDomainName)</b><br />
{<br />
selectedDomainName = _selectedDomainName;<br />
<br />
return selectedDomainName;<br />
}<br />
<br />
<b>public void reset()</b><br />
{<br />
currentUserNumber = 0;<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-17226312215274433802017-04-20T09:04:00.001+00:002017-04-20T09:04:19.201+00:00AX2012 Import CostCenter Owner<div dir="ltr" style="text-align: left;" trbidi="on">
<b><br /></b>
<b>static void Krishh_ImportCostCenterOwner(Args _args)</b><br />
{<br />
#File<br />
#AviFiles<br />
#OCCRetryCount<br />
<br />
Dialog dialog = new dialog("Import cost center owners");<br />
DialogField dlgFileNameOpen, dlgFirstRowsIsHeader;<br />
Filename fileName;<br />
NoYesId firstRowIsHeader;<br />
container readcon;<br />
CommaIO file;<br />
FileIoPermission permission;<br />
SysOperationProgress progressbar = new SysOperationProgress();<br />
Counter fileRowsRead;<br />
OMOperatingUnit oMOperatingUnit;<br />
DimensionAttribute dimensionAttributeValue;<br />
HcmWorkerRecId hcmWorkerRecId;<br />
<br />
dlgFileNameOpen = dialog.addField(extendedTypeStr(FilenameOpen));<br />
dlgFirstRowsIsHeader = dialog.addField(extendedTypeStr(NoYesId), "First row is header");<br />
<br />
if (dialog.run())<br />
{<br />
fileName = dlgFileNameOpen.value();<br />
firstRowIsHeader = dlgFirstRowsIsHeader.value();<br />
<br />
if (!fileName)<br />
throw error("File name must be specified");<br />
<br />
permission = new FileIoPermission(filename,'r');<br />
permission.assert();<br />
<br />
file = new CommaIo(filename, 'r');<br />
file.inFieldDelimiter(';');<br />
<br />
if (!file)<br />
throw error(strFmt("Error opening file", fileName));<br />
<br />
progressbar.setCaption("Importing cost center owners");<br />
progressbar.setAnimation(#AviUpdate);<br />
<br />
try<br />
{<br />
ttsBegin;<br />
<br />
while (file.status() == IO_Status::OK)<br />
{<br />
readCon = file.read();<br />
fileRowsRead++;<br />
<br />
if (fileRowsRead > firstRowIsHeader && readCon && conPeek(readcon, 1))<br />
{<br />
oMOperatingUnit = OMOperatingUnit::findName(conPeek(readcon, 1), OMOperatingUnitType::OMCostCenter);<br />
<br />
if (!oMOperatingUnit)<br />
warning(strFmt("Cost center %1 not found."));<br />
else<br />
{<br />
// Find worker from user id<br />
hcmWorkerRecId = HcmWorker::userId2Worker(conPeek(readcon, 2));<br />
<br />
if (!hcmWorkerRecId)<br />
warning(strFmt("User id %1 not found as worker in AX."));<br />
else<br />
{<br />
// Find and update dimensionAttributeValue with worker as owner<br />
}<br />
<br />
}<br />
}<br />
<br />
progressbar.setText(strfmt("@SYS136776", fileRowsRead));<br />
progressbar.update();<br />
}<br />
<br />
ttsCommit;<br />
<br />
info(strFmt("%1 rows read from file", fileRowsRead));<br />
<br />
}<br />
catch (Exception::Error)<br />
{<br />
error("Error");<br />
}<br />
catch (Exception::Deadlock)<br />
{<br />
retry;<br />
}<br />
catch (Exception::UpdateConflict)<br />
{<br />
if (appl.ttsLevel() == 0)<br />
{<br />
if (xSession::currentRetryCount() >= #RetryNum)<br />
{<br />
throw Exception::UpdateConflictNotRecovered;<br />
}<br />
else<br />
{<br />
retry;<br />
}<br />
}<br />
else<br />
{<br />
throw Exception::UpdateConflict;<br />
}<br />
}<br />
}<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-43459701412157789722017-04-20T09:02:00.003+00:002017-04-20T09:02:52.967+00:00AX2012 Export Account Structures<div dir="ltr" style="text-align: left;" trbidi="on">
<b><br /></b>
<b>static void Krishh_AcctStructureExport(Args _args)</b><br />
{<br />
DimensionHierarchy dimensionHierarchy;<br />
DimensionHierarchyLevel dimensionHierarchyLevel;<br />
DimensionAttribute dimensionAttribute;<br />
DimensionConstraintNode dimensionConstraintNode;<br />
DimensionConstraintNodeCriteria dimensionConstraintNodeCriteria;<br />
FileIOPermission fileIoPermission;<br />
CommaIO csvFile;<br />
container writecon;<br />
Dialog dialog;<br />
DialogField dfFileName;<br />
FileName fileName;<br />
boolean firstRow = true;<br />
Counter countRows;<br />
#File<br />
<br />
dialog = new Dialog("Export account structure text file");<br />
dfFileName = dialog.addField(extendedTypeStr(FileNameSave));<br />
dialog.filenameLookupFilter(["CSV files", #AllFilesName+#CSV, "All files", #AllFiles]);<br />
<br />
if (dialog.run())<br />
filename = dfFileName.value();<br />
else<br />
throw error("Export cancelled");<br />
<br />
fileIoPermission = new FileIOPermission(filename ,'W');<br />
fileIoPermission.assert();<br />
<br />
csvFile = new CommaIO(filename, 'w');<br />
csvFile.outFieldDelimiter(';');<br />
<br />
while select dimensionHierarchy order by dimensionHierarchy.Name, dimensionHierarchyLevel.Level, dimensionConstraintNodeCriteria.RangeFrom, dimensionConstraintNodeCriteria.RangeTo, dimensionConstraintNodeCriteria.WildCardString<br />
where !dimensionHierarchy.IsSystemGenerated<br />
join dimensionHierarchyLevel<br />
where dimensionHierarchyLevel.DimensionHierarchy == dimensionHierarchy.RecId<br />
join dimensionAttribute<br />
where dimensionAttribute.RecId == dimensionHierarchylevel.DimensionAttribute<br />
join dimensionConstraintNode<br />
where dimensionConstraintNode.DimensionHierarchyLevel == dimensionHierarchyLevel.RecId<br />
join dimensionConstraintNodeCriteria<br />
where dimensionConstraintNodeCriteria.DimensionConstraintNode == dimensionConstraintNode.RecId<br />
{<br />
if (firstRow)<br />
{<br />
writeCon = [ "Account structure",<br />
"Level",<br />
"Dimension",<br />
"From",<br />
"To",<br />
"Wildcard"];<br />
<br />
csvFile.write(writecon);<br />
firstRow = false;<br />
}<br />
<br />
writeCon = [ dimensionHierarchy.Name,<br />
int2str(dimensionHierarchyLevel.Level),<br />
dimensionAttribute.Name,<br />
dimensionConstraintNodeCriteria.RangeFrom,<br />
dimensionConstraintNodeCriteria.RangeTo,<br />
dimensionConstraintNodeCriteria.WildCardString];<br />
<br />
csvFile.write(writecon);<br />
countRows++;<br />
}<br />
<br />
CodeAccessPermission::revertAssert();<br />
<br />
info(strFmt("%1 rows written to %2.", countRows, fileName));<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-9002706789341019072017-04-20T08:38:00.000+00:002017-04-20T08:38:02.476+00:00AX2012 finding AIF menuItems and write to file<div dir="ltr" style="text-align: left;" trbidi="on">
Traverse the Menu Node in AOT and find AIF menuItems and write to a file.<br />
<br />
static void krishh_verifyAifInMenu(Args _args)<br />
{<br />
// Dialog<br />
dialog dialog = new dialog('verifyAifInMenu');<br />
dialogField dlgFileName, dlgAction;<br />
FileName fileName;<br />
int action;<br />
container saved;<br />
<br />
// File<br />
#File<br />
TextIo ioData;<br />
FileIOPermission permission;<br />
<br />
Treenode treenode = TreeNode::findNode(@'\Menus\KrishhTest\Periodic');<br />
//Treenode treenode = TreeNode::findNode(@'\Menus\KrishhTest\Periodic');<br />
//Treenode treenode = TreeNode::findNode(@'\Menus\KrishhTest\Periodic');<br />
//Treenode treenode = TreeNode::findNode(@'\Menus\KrishhTest\Periodic');<br />
TreeNodeTraverser traverser = new TreeNodeTraverser(treenode);<br />
TreeNode node, menuTypeNode;<br />
UtilElements ue;<br />
<br />
MenuItem mi;<br />
DictClass dc;<br />
className cn, scn;<br />
<br />
<br />
Counter i,j;<br />
SysDictMethod sdm;<br />
Source s;<br />
<br />
Str1260 sLable, sClass, sMenuItem, sClassMethodName, sMethod, sAIFPort, sDirection, sEnabled, sActionAddedToPort, sFolderName;<br />
<br />
System.Text.RegularExpressions.Match regExMatch;<br />
boolean isValid;<br />
Int position, posStart, posEnd;<br />
<br />
DictTable dt;<br />
RecId recId;<br />
boolean aifFound;<br />
AifPort aifPort;<br />
<br />
AifChannel aifChannel;<br />
AifPortActionPolicy aifPortActionPolicy;<br />
AifActionId aifActionId;<br />
<br />
#Properties<br />
#AOT<br />
#AIF<br />
<br />
#localmacro.PortInfo<br />
any2str(%1)<br />
+ ","<br />
+ any2str(%2)<br />
+ ","<br />
+ any2str(%3)<br />
+ ","<br />
+ any2str(%4)<br />
+ ","<br />
+ any2str(%5)<br />
+ ","<br />
+ any2str(%6)<br />
, "Goto method", SysInfoAction_Editor::newOpen(%7)<br />
#EndMacro<br />
<br />
saved = xSysLastValue::getValue(curExt(),curUserId(),UtilElementType::Class,'verifyAifInMenu','fileName');<br />
if (saved)<br />
{<br />
fileName = conpeek(saved,1);<br />
}<br />
<br />
dlgFileName = dialog.addFieldValue(extendedTypeStr(FilenameOpen),fileName,'Filename','File to save result.');<br />
//dlgAction = dialog.addFieldValue(extendedTypeStr(NumberOf),0,'Action','1=Save, 2=Undeploy, 3=Deploy');<br />
<br />
if (dialog.run())<br />
{<br />
fileName = dlgFileName.value();<br />
saved = [fileName];<br />
xSysLastValue::putValue(saved,curExt(),curUserId(),UtilElementType::Class,'verifyAifInMenu','fileName');<br />
<br />
permission = new FileIOPermission(fileName, #io_write);<br />
permission.assert();<br />
<br />
// Open file for writing<br />
ioData = new TextIo(filename, #io_write);<br />
<br />
// Check file open status<br />
if (!ioData)<br />
{<br />
// File '%1' could not be opened.<br />
throw error(strfmt("@SYS19312", filename));<br />
}<br />
<br />
// Set file delimiters<br />
ioData.outRecordDelimiter('\r\n');<br />
ioData.outFieldDelimiter(';');<br />
<br />
ioData.write(<br />
[<br />
"Menu label"<br />
, "Menu item"<br />
, "Class"<br />
, "AIF Port"<br />
, "Direction"<br />
, "Enabled"<br />
, "Methode"<br />
, "ActionAddedToPort"<br />
, "Folder name"<br />
]);<br />
<br />
setPrefix("Services");<br />
while (traverser.next())<br />
{<br />
node = traverser.currentNode();<br />
if (node.AOTgetProperty('MenuItemName')!= '')<br />
{<br />
menuTypeNode = TreeNode::findNode(#MenuItemsPath +"\\Action\\" + findProperty(node.AOTgetProperties(),#PropertyMenuItemName));<br />
mi = traverser.currentNode();<br />
<br />
// Is menuitem object a class<br />
if (findProperty(menuTypeNode.AOTgetProperties(),#PropertyObjectType) == enum2Value(MenuItemObjectType::Class))<br />
{<br />
// Find Class<br />
if (findProperty(menuTypeNode.AOTgetProperties(),#PropertyObject) == 'SysOperationServiceController')<br />
{<br />
dc = new DictClass(className2Id(subStr(findProperty(menuTypeNode.AOTgetProperties(),#PropertyParameters), 1, strScan(findProperty(menuTypeNode.AOTgetProperties(),#PropertyParameters), '.', 1, 1000)-1)));<br />
}<br />
else<br />
{<br />
dc = new DictClass(className2Id(findProperty(menuTypeNode.AOTgetProperties(),#PropertyObject)));<br />
}<br />
<br />
sLable = mi.label();<br />
sMenuItem = #MenuItemsPath +"\\Action\\" + findProperty(node.AOTgetProperties(),#PropertyMenuItemName);//node.treeNodePath();<br />
sClass = dc.name();<br />
setPrefix(strFmt("%1, %2, %3, %4", node.treeNodePath(), sLable, sMenuItem, sClass));<br />
<br />
aifFound = false;<br />
// Find the methode in the class where AxdDocumentParameters is used<br />
for (i=1;i<=dc.objectMethodCnt()+dc.staticMethodCnt();i++)<br />
{<br />
// Instance method else Static method<br />
if (i<=dc.objectMethodCnt())<br />
{<br />
sdm = new SysDictMethod(UtilElementType::ClassInstanceMethod, dc.id(), dc.objectMethod(i));<br />
}<br />
else<br />
{<br />
sdm = new SysDictMethod(UtilElementType::ClassStaticMethod, dc.id(), dc.staticMethod(i-dc.objectMethodCnt()));<br />
}<br />
sMethod = sdm.path();<br />
s = sdm.getSource();<br />
<br />
// Find port from AxdDocumentParameters<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)AxdDocumentParameters::find\(\).krishh.{1,22}Port');<br />
isValid = regExMatch.get_Success();<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)AifSendService::submitFrom');<br />
isValid = isValid && regExMatch.get_Success();<br />
<br />
setPrefix("Port");<br />
if (isValid)<br />
{<br />
dt = new DictTable(tableNum(AxdDocumentParameters));<br />
<br />
// Get AIFPort from AxdDocumentParameters used in code<br />
for (j=1;j<=dt.fieldCnt();j++)<br />
{<br />
if (strScan(dt.fieldName(dt.fieldCnt2Id(j)), 'krishh', 1, 100) && strScan(dt.fieldName(dt.fieldCnt2Id(j)), 'Port', 1, 100))<br />
{<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)%1', dt.fieldName(dt.fieldCnt2Id(j))));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
recId = AxdDocumentParameters::find().(dt.fieldCnt2Id(j));<br />
<br />
// Find Port<br />
if (recId)<br />
{<br />
select firstOnly aifPort<br />
where aifPort.RecId == recId<br />
join aifChannel<br />
where aifChannel.ChannelId == aifPort.ChannelId;<br />
sDirection = enum2Value(aifChannel.Direction);<br />
sEnabled = enum2Value(aifChannel.Enabled);<br />
sFolderName = aifChannel.TransportAddress;<br />
aifFound = true;<br />
}<br />
<br />
if (aifFound)<br />
{<br />
// Find action<br />
sActionAddedToPort = "";<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)AifSendActionType::'));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
// Calculate position of the portaction<br />
position = regExMatch.get_Index();<br />
posStart = position+1+strLen('AifSendActionType::');<br />
posEnd = strScan(s, ')', position, strLen(s));<br />
<br />
// Convet actiontype to actionId-searchstring<br />
switch (subStr(s, posStart, posEnd-posStart))<br />
{<br />
case "SendByQuery":<br />
aifActionId = "*.find";<br />
break;<br />
case "SendByKey":<br />
aifActionId = "*.read";<br />
break;<br />
}<br />
<br />
// Find portaction<br />
while select AifPortActionPolicy<br />
where AifPortActionPolicy.ActionId like aifActionId<br />
&& AifPortActionPolicy.Port == recId<br />
{<br />
// Get the serviceclassname<br />
scn = subStr(AifPortActionPolicy.ActionId, 1, strLen(AifPortActionPolicy.ActionId) - (strLen(aifActionId)-1));<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)classnum\(%1', scn));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
// Create a portaction exm. serviceclassname.action<br />
sActionAddedToPort = scn+subStr(aifActionId, 2, strLen(aifActionId));<br />
break;<br />
}<br />
}<br />
}<br />
}<br />
<br />
// Output Port info<br />
if (sEnabled && sActionAddedToPort)<br />
{<br />
info(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
else<br />
{<br />
error(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
<br />
ioData.write(<br />
[<br />
sLable<br />
, sMenuItem<br />
, sClass<br />
, aifPort.Name<br />
, sDirection<br />
, sEnabled<br />
, sMethod<br />
, sActionAddedToPort, sFolderName<br />
]);<br />
}<br />
}<br />
}<br />
}<br />
<br />
// Find port from AifOutboundPort::find<br />
recId = 0;<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)AifSendService::submitFrom');<br />
isValid = regExMatch.get_Success();<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)AifOutboundPort::find\(');<br />
isValid = isValid && regExMatch.get_Success();<br />
<br />
if (isValid)<br />
{<br />
// Calculate position of the portClass<br />
position = regExMatch.get_Index();<br />
posStart = position+2+strLen('AifOutboundPort::find\(');<br />
posEnd = strScan(s, ');', position, strLen(s))-1;<br />
<br />
// Convet actiontype to actionId-searchstring<br />
scn = subStr(s, posStart, posEnd-posStart);<br />
<br />
// Find Port<br />
if (scn)<br />
{<br />
select firstOnly aifPort<br />
where aifPort.Name == scn<br />
join aifChannel<br />
where aifChannel.ChannelId == aifPort.ChannelId;<br />
sDirection = enum2Value(aifChannel.Direction);<br />
sEnabled = enum2Value(aifChannel.Enabled);<br />
sFolderName = aifChannel.TransportAddress;<br />
<br />
recId = aifPort.RecId;<br />
aifFound = true;<br />
}<br />
<br />
if (recId)<br />
{<br />
// Find action<br />
sActionAddedToPort = "";<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)AifSendActionType::'));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
// Calculate position of the portaction<br />
position = regExMatch.get_Index();<br />
posStart = position+1+strLen('AifSendActionType::');<br />
posEnd = strScan(s, ')', position, strLen(s));<br />
<br />
// Convet actiontype to actionId-searchstring<br />
switch (subStr(s, posStart, posEnd-posStart))<br />
{<br />
case "SendByQuery":<br />
aifActionId = "*.find";<br />
break;<br />
case "SendByKey":<br />
aifActionId = "*.read";<br />
break;<br />
}<br />
<br />
// Find portaction<br />
while select AifPortActionPolicy<br />
where AifPortActionPolicy.ActionId like aifActionId<br />
&& AifPortActionPolicy.Port == recId<br />
{<br />
// Get the serviceclassname<br />
scn = subStr(AifPortActionPolicy.ActionId, 1, strLen(AifPortActionPolicy.ActionId) - (strLen(aifActionId)-1));<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)classnum\(%1', scn));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
// Create a portaction exm. serviceclassname.action<br />
sActionAddedToPort = scn+subStr(aifActionId, 2, strLen(aifActionId));<br />
break;<br />
}<br />
}<br />
}<br />
}<br />
// Output Port info<br />
if (sEnabled && sActionAddedToPort)<br />
{<br />
info(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
else<br />
{<br />
error(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
<br />
ioData.write(<br />
[<br />
sLable<br />
, sMenuItem<br />
, sClass<br />
, aifPort.Name<br />
, sDirection<br />
, sEnabled<br />
, sMethod<br />
, sActionAddedToPort, sFolderName<br />
]);<br />
<br />
}<br />
<br />
// Find port from AifSendService::submitDefault<br />
recId = 0;<br />
sDirection = '';<br />
sEnabled = '';<br />
sFolderName = '';<br />
sActionAddedToPort = '';<br />
<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)AifSendService::submitDefault\(');<br />
isValid = regExMatch.get_Success();<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, @'(?i)classnum\(');<br />
isValid = isValid && regExMatch.get_Success();<br />
<br />
if (isValid)<br />
{<br />
// Calculate position of the portClass<br />
position = regExMatch.get_Index();<br />
posStart = position+1+strLen('classnum\(');<br />
posEnd = strScan(s, '),', position, strLen(s));<br />
<br />
// Convet actiontype to actionId-searchstring<br />
scn = subStr(s, posStart, posEnd-posStart);<br />
<br />
// Find Port<br />
if (scn)<br />
{<br />
select firstOnly AifPortActionPolicy<br />
where AifPortActionPolicy.ActionId == scn + #MethodNameSeparator + #DefaultSendByKeyAction<br />
join aifPort<br />
where aifPort.RecId == AifPortActionPolicy.Port<br />
join aifChannel<br />
where aifChannel.ChannelId == aifPort.ChannelId;<br />
sDirection = enum2Value(aifChannel.Direction);<br />
sEnabled = enum2Value(aifChannel.Enabled);<br />
sFolderName = aifChannel.TransportAddress;<br />
<br />
recId = AifPortActionPolicy.Port;<br />
aifFound = true;<br />
}<br />
<br />
if (recId)<br />
{<br />
aifActionId = "*.read";<br />
<br />
// Find portaction<br />
while select AifPortActionPolicy<br />
where AifPortActionPolicy.ActionId like aifActionId<br />
&& AifPortActionPolicy.Port == recId<br />
{<br />
// Get the serviceclassname<br />
scn = subStr(AifPortActionPolicy.ActionId, 1, strLen(AifPortActionPolicy.ActionId) - (strLen(aifActionId)-1));<br />
regExMatch = System.Text.RegularExpressions.Regex::Match(s, strFmt(@'(?i)classnum\(%1', scn));<br />
isValid = regExMatch.get_Success();<br />
if (isValid)<br />
{<br />
// Create a portaction exm. serviceclassname.action<br />
sActionAddedToPort = scn+subStr(aifActionId, 2, strLen(aifActionId));<br />
break;<br />
}<br />
}<br />
}<br />
<br />
// Output Port info<br />
if (sEnabled && sActionAddedToPort)<br />
{<br />
info(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
else<br />
{<br />
error(#PortInfo(aifPort.Name, sDirection, sEnabled, sMethod, sActionAddedToPort, sFolderName, sdm.path()));<br />
}<br />
<br />
ioData.write(<br />
[<br />
sLable<br />
, sMenuItem<br />
, sClass<br />
, aifPort.Name<br />
, sDirection<br />
, sEnabled<br />
, sMethod<br />
, sActionAddedToPort, sFolderName<br />
]);<br />
<br />
}<br />
}<br />
if (!aifFound)<br />
{<br />
info(strFmt('%1, %2, %3, %4, %5, %6, %7, %8'<br />
, sLable<br />
, sMenuItem<br />
, sClass<br />
, "Not AIF"<br />
, "No"<br />
, "No"<br />
, "No"<br />
, "No"));<br />
ioData.write(<br />
[<br />
sLable<br />
, sMenuItem<br />
, sClass<br />
, "Not AIF"<br />
, "No"<br />
, "No"<br />
, "No"<br />
, "No"<br />
]);<br />
}<br />
}<br />
}<br />
}<br />
<br />
CodeAccessPermission::revertAssert();<br />
}<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-62918921612954126492017-04-20T08:30:00.000+00:002017-04-20T08:38:23.728+00:00AX2012 Update AIF Port adresses <div dir="ltr" style="text-align: left;" trbidi="on">
When we export from one environmen to another we should update the port addresses to the new environment addresses.<br />
Like moving from config environmen to SIT, QA..etc.<br />
<br />
<br />
<b>static void krishh_UpdateAddressForPorts(Args _args)</b><br />
{<br />
AifChannel aifchannel;<br />
str fromPath, toPath;<br />
boolean Update;<br />
<br />
Dialog dialog;<br />
<br />
DialogField _from;<br />
DialogField _to;<br />
dialogField _Update<br />
;<br />
<br />
dialog = new Dialog("Move configdata");<br />
<br />
dialog.addInfoImage();<br />
dialog.addText("This job changes all paths on inbound and outbound ports!!!");<br />
<br />
dialog.addGroup("Paths");<br />
_from = dialog.addField(ExtendedTypeStr(String255), "From enviroment" , "Normally from MasterConfigData (CFG)" );<br />
_to = dialog.addField(ExtendedTypeStr(String255), "To enviroment" , "Valid enviroments are SIT, UAT, QA & PROD");<br />
dialog.addGroup("Update");<br />
_Update = dialog.addField(ExtendedTypeStr(NoYesId) , "Commit change" , "Update the changes");<br />
<br />
//InitValues<br />
_from.value("CFG");<br />
_Update.value(false);<br />
<br />
dialog.run();<br />
<br />
fromPath = _from.value();<br />
toPath = _to.value();<br />
<br />
if ((!fromPath || !toPath) || (fromPath == toPath))<br />
{<br />
return;<br />
}<br />
<br />
ttsBegin;<br />
while select forupdate aifchannel where aifchannel.Direction != AIFChannelDirection::Both<br />
{<br />
if (strScan(aifchannel.TransportAddress, fromPath, 1, 255))<br />
{<br />
aifchannel.TransportAddress=strReplace(aifchannel.transportAddress, fromPath, toPath);<br />
info(aifchannel.TransportAddress);<br />
<br />
if (_Update)<br />
aifchannel.update();<br />
}<br />
}<br />
ttsCommit;<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-14737082116687326462017-04-20T08:26:00.002+00:002017-04-20T08:26:16.519+00:00AX2012 Flush recids<div dir="ltr" style="text-align: left;" trbidi="on">
static void krishh_flushAllRecIds(Args _args)<br />
{<br />
#AviFiles<br />
<br />
Dictionary dictionary = new Dictionary();<br />
systemSequence systemseq = new systemSequence();<br />
<br />
SysDictTable dictTable;<br />
<br />
TableId tableId,LastTableId;<br />
<br />
SysOperationProgress progress;<br />
container fileContainer;<br />
<br />
int i; <br />
<br />
setPrefix("Flush all RecIds");<br />
<br />
tableId = dictionary.tableNext(0);<br />
lastTableId = dictionary.tableCnt();<br />
<br />
progress = new SysOperationProgress();<br />
progress.updateInterval(1);<br />
progress.setAnimation(#AviStopwatch);<br />
progress.setTotal(LastTableId);<br />
<br />
progress.setText(strfmt("Flushing recIds"));<br />
<br />
ttsbegin;<br />
while (tableId)<br />
{<br />
progress.incCount();<br />
<br />
dictTable = new SysDictTable(tableId);<br />
<br />
setPrefix(dictTable.name());<br />
<br />
Systemseq.suspendRecIds(tableId);<br />
Systemseq.suspendTransIds(tableId);<br />
Systemseq.flushValues(tableId);<br />
Systemseq.removeRecIdSuspension(tableId);<br />
Systemseq.removeTransIdSuspension(tableId);<br />
<br />
//info(strFmt("Tables RecId Flushed (%1)", dictTable.name()));<br />
<br />
tableId = dictionary.tableNext(tableId);<br />
}<br />
<br />
ttscommit;<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-56037277216796426182017-04-20T08:25:00.000+00:002017-04-20T08:25:09.115+00:00AX2012 get gropu dimension from financial dimension <div dir="ltr" style="text-align: left;" trbidi="on">
static void krish_findGroupDimension(Args _args)<br />
{<br />
Name _dimensionTypeName = 'COSTCENTER';<br />
DimensionValue _dimensionDisplayName = 'csttest';<br />
<br />
DimensionExt retVal;<br />
<br />
OMOperatingUnit oMOperatingUnit;<br />
DimensionAttribute dimensionAttribute;<br />
DimensionAttributeLevelValue dimensionAttributeLevelValue;<br />
DimensionAttributeValue dimensionAttributeValue;<br />
DimensionAttributeValueSetItemView dimensionAttributeValueSetItemView;<br />
;<br />
<br />
select oMOperatingUnit<br />
Join dimensionAttribute where dimensionAttribute.Name == _dimensionTypeName<br />
join dimensionAttributeValue where dimensionAttributeValue.DimensionAttribute == dimensionAttribute.RecId<br />
Join dimensionAttributeLevelValue where dimensionAttributeLevelValue.DimensionAttributeValue == dimensionAttributeValue.recid<br />
&& dimensionAttributeLevelValue.DisplayValue == _dimensionDisplayName;<br />
<br />
retVal = dimensionAttributeValue.GroupDimension;<br />
<br />
if (!retVal)<br />
{<br />
select dimensionAttribute where dimensionAttribute.Name == _dimensionTypeName<br />
Join dimensionAttributeValueSetItemView where dimensionAttributeValueSetItemView.DimensionAttribute == dimensionAttribute.RecId &&<br />
dimensionAttributeValueSetItemView.DisplayValue == _dimensionDisplayName<br />
join dimensionAttributeValue where dimensionAttributeValue.RecId == dimensionAttributeValueSetItemView.DimensionAttributeValue;<br />
<br />
retVal = dimensionAttributeValue.GroupDimension;<br />
}<br />
<br />
<br />
info(strFmt("DimensionAttribute = %1", DimensionAttribute.RecId));<br />
info(strFmt("DimensionAttributeValueSetItemView = %1", DimensionAttributeValueSetItemView.RecId));<br />
info(strFmt("%1 : %2 = %3 (%4)", _dimensionTypeName, _dimensionDisplayName, retVal, dimensionAttributeValue.RecId));<br />
<br />
<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-27889491863063965412017-04-20T08:16:00.000+00:002017-04-20T08:18:33.095+00:00AX2012 File Reader Test<div dir="ltr" style="text-align: left;" trbidi="on">
static void fileAccessTest(Args _args)<br />
{<br />
CommaIO commaIO;<br />
int row;<br />
Container c;<br />
FileIOPermission fileIOPermission;<br />
int recCountNotExist;<br />
boolean errorlog;<br />
Dialog dialog;<br />
DialogField dialogField;<br />
FilenameOpen filename;<br />
;<br />
<br />
dialog = new Dialog("Test version of File reader");<br />
<br />
dialogField = dialog.addFieldValue(extendedTypeStr(FilenameOpen), "", "File to access");<br />
<br />
if (dialog.run())<br />
filename = dialogField.value();<br />
else<br />
throw error("No filename");<br />
<br />
<br />
fileIOPermission = new FileIOPermission(filename,'r');<br />
fileIOPermission.assert();<br />
<br />
//BP Deviation documented<br />
commaIO = new CommaIO(filename, 'r');<br />
<br />
if (commaIO != null)<br />
{<br />
if (commaIO.status())<br />
{<br />
throw error("@SYS52680");<br />
}<br />
<br />
commaIO.inRecordDelimiter('\r\n');<br />
commaIO.inFieldDelimiter(',');<br />
}<br />
else<br />
{<br />
throw error("@SYS52680");<br />
}<br />
<br />
c = conNull();<br />
<br />
if (commaIO)<br />
{<br />
if (commaIO.status() == IO_Status::OK)<br />
{<br />
if (row==0)<br />
{<br />
c = commaIO.read();<br />
}<br />
info(con2Str(c));<br />
row++;<br />
c = commaIO.read();<br />
info(con2Str(c));<br />
}<br />
}<br />
}<br />
<div>
<br /></div>
</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-58238562264518479402017-04-20T08:13:00.000+00:002017-04-20T08:18:45.428+00:00AX2012 CompileCIL and Refresh Services using X++<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
static void krishh_CompileCILRefreshServices(Args _args)<br />
{<br />
#AviFiles<br />
#File<br />
<br />
#define.fileName('AxTime.txt')<br />
<br />
TextIo file;<br />
FileIoPermission permission;<br />
SysOperationProgress progress;<br />
container fileContainer;<br />
<br />
int i;<br />
<br />
Dialog dialog;<br />
<br />
DialogField dlgCompile;<br />
DialogField dlgCIL;<br />
DialogField dlgIncCIL;<br />
DialogField dlgRefreshService;<br />
<br />
int timeStarted[2];<br />
int timeAverage[4]; //1:FUllCompileTime,2:FULLCILCompileTime,3:IncrementalCILTime,4:RefreshServicesTime<br />
int timeExpected;<br />
<br />
Filename filename<br />
;<br />
<br />
void getAverageTime()<br />
{<br />
filename = WinAPI::getCurrentDirectory() + '\\' + fileName;<br />
<br />
permission = new FileIoPermission(filename, #io_read+#io_write);<br />
permission.assert();<br />
<br />
if(WinAPI::fileExists(filename))<br />
{<br />
file = new TextIo(filename, #io_read);<br />
fileContainer = file.read();<br />
timeAverage[1] = str2int(conPeek(fileContainer,1));<br />
timeAverage[2] = str2int(conPeek(fileContainer,2));<br />
timeAverage[3] = str2int(conPeek(fileContainer,3));<br />
timeAverage[4] = str2int(conPeek(fileContainer,4));<br />
file = null;<br />
}<br />
<br />
CodeAccessPermission::revertAssert();<br />
}<br />
<br />
void setAverageTime()<br />
{<br />
permission = new FileIoPermission(filename, #io_write);<br />
permission.assert();<br />
<br />
fileContainer = conNull();<br />
fileContainer = conIns(fileContainer,1,int2str(timeAverage[1]));<br />
fileContainer = conIns(fileContainer,2,int2str(timeAverage[2]));<br />
fileContainer = conIns(fileContainer,3,int2str(timeAverage[3]));<br />
fileContainer = conIns(fileContainer,4,int2str(timeAverage[4]));<br />
<br />
file = new TextIo(filename, #io_write);<br />
file.write(fileContainer);<br />
file.finalize();<br />
<br />
file = null;<br />
<br />
CodeAccessPermission::revertAssert();<br />
permission = null;<br />
}<br />
<br />
dialog = new Dialog("Compile/CIl/Refresh");<br />
<br />
dialog.addInfoImage();<br />
dialog.addText("Please select actions needed and please be aware that all are time consuming processes");<br />
<br />
dialog.addGroup("Compile application");<br />
dlgCompile = dialog.addFieldValue(extendedTypeStr(NoYesId),NoYes::No,"AOT Compile");<br />
<br />
dialog.addGroup("Compile CIL");<br />
dlgCIL = dialog.addFieldValue(extendedTypeStr(NoYesId), NoYes::No, "FULL");<br />
dlgIncCIL = dialog.addFieldValue(extendedTypeStr(NoYesId), NoYes::No, "Incemental");<br />
<br />
dialog.addGroup("Other");<br />
dlgRefreshService = dialog.addFieldValue(extendedTypeStr(NoYesId),NoYes::No,"Refresh Services");<br />
<br />
if (!dialog.run())<br />
throw error("Operation aborted");<br />
<br />
filename = #fileName;<br />
<br />
timeAverage[1] = 3600; // 60:00 min<br />
timeAverage[2] = 1800; // 30:00 min<br />
timeAverage[3] = 900; // 15:00 min<br />
timeAverage[4] = 300; // 5:00 min<br />
<br />
getAverageTime();<br />
<br />
timeExpected += dlgCompile.value() ? timeAverage[1] : 0;<br />
timeExpected += dlgCIL.value() ? timeAverage[2] : 0;<br />
timeExpected += dlgIncCIL.value() ? timeAverage[3] : 0;<br />
timeExpected += dlgRefreshService.value() ? timeAverage[4] : 0;<br />
<br />
progress = new SysOperationProgress();<br />
progress.updateInterval(0);<br />
progress.setAnimation(#AviStopwatch);<br />
<br />
progress.setTotal(1 + dlgCompile.value() + (dlgCIL.value() || dlgIncCIL.value()) + dlgRefreshService.value());<br />
<br />
timeStarted[1] = timeNow();<br />
<br />
info(strFmt("Process stared by %1",curUserId()));<br />
<br />
//Compile the application<br />
startLengthyOperation();<br />
sleep(3);<br />
<br />
//AOT Compile<br />
if (dlgCompile.value())<br />
{<br />
progress.incCount();<br />
progress.setText(strfmt("AOT Compile compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[1] + timeNow(),1,1)));<br />
<br />
//Do function<br />
timeStarted[2] = timeNow();<br />
<br />
SysCompileAll::flushClient();<br />
SysCompileAll::compile();<br />
<br />
SysCheckList::finished(classnum(SysCheckListItem_Compile));<br />
SysCheckList::finished(classnum(SysCheckListItem_CompileUpgrade));<br />
SysCheckList::finished(className2Id(classStr(SysCheckListItem_CompileServ)));<br />
SysCheckList::finished(classnum(SysCheckListItem_SysUpdateCodeCompilInit));<br />
<br />
timeAverage[1] = ((timeNow()-timeStarted[2]) + timeAverage[1])/2;<br />
info(strFmt("AOT Compile toke : %1*",time2str(timeAverage[1],1,1)));<br />
}<br />
<br />
//Incremntal CIL<br />
if (dlgIncCIL.value())<br />
{<br />
progress.incCount();<br />
progress.setText(strfmt("Incremental CIL Compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[3] + timeNow(),1,1)));<br />
<br />
//Do function<br />
timeStarted[2] = timeNow();<br />
SysCompileIL::generateIncrementalIL();<br />
<br />
timeAverage[3] = ((timeNow()-timeStarted[2]) + timeAverage[3])/2;<br />
info(strFmt("Increment CIL toke : %1*",time2str(timeAverage[3],1,1)));<br />
}<br />
//Full CIL<br />
else if (dlgCIL.value())<br />
{<br />
progress.incCount();<br />
progress.setText(strfmt("FULL CIL Compiling | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[2] + timeNow(),1,1)));<br />
<br />
//Do function<br />
timeStarted[2] = timeNow();<br />
SysCompileIL::generateIL();<br />
timeAverage[2] = ((timeNow()-timeStarted[2]) + timeAverage[2])/2;<br />
info(strFmt("FULL CIL toke : %1*",time2str(timeAverage[2],1,1)));<br />
}<br />
<br />
// Refresh services<br />
if (dlgRefreshService.value())<br />
{<br />
progress.setText(strfmt("Refresh Services | Start time : %1 ETA : %2",time2str(timeNow(),1,1),time2str(timeAverage[4] + timeNow(),1,1)));<br />
progress.incCount();<br />
<br />
timeStarted[2] = timeNow();<br />
<br />
AifServiceGenerationManager::registerServices();<br />
<br />
timeAverage[4] = ((timeNow()-timeStarted[2]) + timeAverage[4])/2;<br />
info(strFmt("Refresh Services toke : %1*",time2str(timeAverage[4],1,1)));<br />
}<br />
<br />
setAverageTime();<br />
<br />
endLengthyOperation();<br />
<br />
//Flush all<br />
sysFlushAOD::main(_args);<br />
sysFlushData::main(_args);<br />
sysFlushDictionary::main(_args);<br />
info(strFmt("*Averagetime"));<br />
info(strFmt("Total time spendt : %1",time2str(timeNow()-timeStarted[1],1,1)));<br />
}<br />
<br /></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-87139030788179988292016-12-07T13:22:00.001+00:002016-12-07T13:22:20.305+00:00Hide Query values in the dialog with select button Enabled<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<b>Scneario: we want to hide the query values that was selected by the user in query range select button.</b><br />
<br />
I created the parmmethod as below in the class Dialog,RunBaseDialogModify<br />
<br />
<br />
<b>public boolean hideQueryValuesInDialog(boolean _showValues = showValues)</b><br />
{<br />
;<br />
showValues = _showValues;<br />
<br />
return showValues;<br />
}<br />
<br />
Added the highlighted code as below in the following method of class RunBaseDialogModify<br />
<br />
<br />
<b>client public static RunBaseDialogModify newRunbaseOnClient(</b><br />
RunBase runBase,<br />
DialogRunbase dialog)<br />
{<br />
// <GEERU><br />
RunBaseDialogModify runBaseDialogModify = RunBaseDialogModify::construct(runBase.runBaseDialogModifyType_RU());<br />
// </GEERU><br />
;<br />
runBaseDialogModify.parmRunbase(runBase);<br />
runBaseDialogModify.parmDialog(dialog);<br />
<br />
/<b>/Addded by krishna</b><br />
<b> runBaseDialogModify.rsaShowQueryValuesInDialog(dialog.rsaShowQueryValuesInDialog());</b><br />
<b>//Addded by krishna</b><br />
<br />
return runBaseDialogModify;<br />
}<br />
<br />
<b>Server public static RunBaseDialogModify newRunbaseOnServer(</b><br />
RunBase runBase,<br />
DialogRunbase dialog)<br />
{<br />
// <GEERU><br />
RunBaseDialogModify runBaseDialogModify = RunBaseDialogModify::construct(runBase.runBaseDialogModifyType_RU());<br />
// </GEERU><br />
;<br />
runBaseDialogModify.parmRunbase(runBase);<br />
runBaseDialogModify.parmDialog(dialog);<br />
<b>//Addded by krishna</b><br />
<b> runBaseDialogModify.rsaShowQueryValuesInDialog(dialog.rsaShowQueryValuesInDialog());</b><br />
<b>//Addded by krishna</b><br />
return runBaseDialogModify;<br />
}<br />
<br />
// <GEERU><br />
<b>protected boolean addField(SysDictField _dictField, Set _fieldNameSet, LabelType _labelType, Range _range)</b><br />
// </GEERU><br />
{<br />
boolean ret = false;<br />
Map map;<br />
DialogField dialogField;<br />
TableId tableId;<br />
<br />
if (_dictField)<br />
{<br />
tableId = _dictField.tableid();<br />
if (_fieldNameSet.in(_dictField.name()))<br />
{<br />
if (this.existField(_dictField))<br />
{<br />
this.addRange(this.getFieldName(_dictField), _range);<br />
}<br />
}<br />
else<br />
{<br />
ret = true;<br />
<br />
if (!dialogQueryFieldsMap.exists(tableId))<br />
{<br />
dialogQueryFieldsMap.insert(tableId, new Map(Types::String, Types::String));<br />
}<br />
<br />
map = dialogQueryFieldsMap.lookup(tableId);<br />
dialogField = dialog.addField(extendedTypeStr(RunBaseRange), _labelType);<br />
<br />
dialogField.value(_range);<br />
dialogField.allowEdit(false);<br />
<br />
<b>//Addded by krishna</b><br />
// dialogField.visible(true);<br />
if(!showValues)<br />
{<br />
dialogField.visible(false);<br />
}<br />
else<br />
{<br />
dialogField.visible(true);<br />
}<br />
<b>//Addded by krishna</b><br />
<br />
map.insert(_dictField.name(), dialogField.fieldname());<br />
<br />
_fieldNameSet.add(_dictField.name());<br />
}<br />
}<br />
return ret;<br />
}<br />
<br />
<br />
In your runbasebatch class override the method as below<br />
<b>public DialogRunbase dialogInit(DialogRunbase dialog, boolean forceOnClient= false)</b><br />
{<br />
DialogRunbase ret;<br />
<b>//Addded by krishna</b><br />
<b> if (! dialog)</b><br />
<b> {</b><br />
<b> if (xGlobal::clientKind() != ClientType::Server || forceOnClient)</b><br />
<b> dialog = DialogRunbase::newOnClient(this.caption(),this);</b><br />
<b> else</b><br />
<b> dialog = DialogRunbase::newOnServer(this.caption(),this);</b><br />
<b> }</b><br />
<b> dialog.rsaShowQueryValuesInDialog(false);</b><br />
<b>//Addded by krishna</b><br />
ret = super(dialog, forceOnClient);<br />
<br />
return ret;<br />
}<br />
<br />
<br />
The above changes will hide your query range selected values in the dialog with showing select button.</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-12013224087196461852015-07-13T13:00:00.001+00:002015-07-13T13:23:39.120+00:00Ax2012 Useful functions 2<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Show viewhistory on form datasources if you have ValidaTimeState Enabled DateTime enabled on the tables of that form. </b><br />
<b>create this method in Global class so you can call whereever you want in form button click as below.</b><br />
<b><br /></b>
<b>void clicked()</b><br />
<b></b><br />
<b>{</b><br />
<b> </b> buttonHistoryClick(element, this);<br />
Super();<br />
<b>}</b><br />
<b><br /></b>
<b>static public void buttonHistoryClick(FormRun _formRun, FormButtonControl _fbc)</b><br />
<b>{</b><br />
<b> </b> void changeDataSources(ValidTimeStateAutoQuery _from, ValidTimeStateAutoQuery _to, boolean _allowDelete)<br />
{<br />
Counter dataSourceNo;<br />
FormDataSource formDataSource;<br />
<br />
for (dataSourceNo=1;_formRun.dataSourceCount()>=dataSourceNo;dataSourceNo++)<br />
{<br />
formDataSource = _formRun.dataSource(dataSourceNo) as FormDataSource;<br />
if (formDataSource.validTimeStateAutoQuery() == _from && new DictTable(formDataSource.table()).isValidTimeStateTable())<br />
{<br />
formDataSource.validTimeStateAutoQuery(_to);<br />
switch (_to)<br />
{<br />
case ValidTimeStateAutoQuery::AsOfDate:<br />
formDataSource.validTimeStateAutoQuery(ValidTimeStateAutoQuery::AsOfDate);<br />
formDataSource.query().resetValidTimeStateQueryType();<br />
formDataSource.allowDelete(_allowDelete);<br />
break;<br />
case ValidTimeStateAutoQuery::DateRange:<br />
formDataSource.validTimeStateAutoQuery(ValidTimeStateAutoQuery::DateRange);<br />
formDataSource.query().validTimeStateDateTimeRange(DateTimeUtil::minValue(), DateTimeUtil::maxValue());<br />
formDataSource.allowDelete(_allowDelete);<br />
break;<br />
}<br />
formDataSource.executeQuery();<br />
}<br />
}<br />
}<br />
<b><br /></b>
<b> </b>if (_fbc.labelText() == "@SYS110266")<br />
{<br />
changeDataSources(ValidTimeStateAutoQuery::AsOfDate, ValidTimeStateAutoQuery::DateRange, false);<br />
_fbc.text("Stop viewing History");<br />
_fbc.normalImage("10006");<br />
}<br />
else<br />
{<br />
changeDataSources(ValidTimeStateAutoQuery::DateRange, ValidTimeStateAutoQuery::AsOfDate, true);<br />
_fbc.Text("@SYS110266");<br />
_fbc.normalImage("10007");<br />
}<br />
<b></b><br />
<b>}</b><br />
<b>// this method is used to create filenameTimeStamp.</b><br />
<b><br /></b>
<b>static FileName createFilenameTimeStamp()</b><br />
<b>{</b><br />
<b> </b>FileName ret;<br />
Microsoft.Dynamics.IntegrationFramework.Adapter.FileSystem fileSystem;<br />
#Aif<br />
<br />
fileSystem = AifUtil::getClrObject(#FileSystemProgId);<br />
<br />
ret = fileSystem.GetCurrentTimestamp();<br />
<br />
return ret;<br />
<b>}</b><br />
<b><br /></b>
<b><br /></b>
<b>// This method is used to split the string, and returns the conatiner with the position defined in the parameter</b><br />
<b>public static str rsaStrSplit(str _splitString,str _splitchar,int _pos)</b><br />
<b>{</b><br />
<b> </b> List strlist=new List(Types::String);<br />
ListIterator iterator;<br />
container packedList;<br />
;<br />
strlist=strSplit(_splitString,_splitchar);<br />
iterator = new ListIterator(strlist);<br />
while(iterator.more())<br />
{<br />
packedList += iterator.value();<br />
iterator.next();<br />
}<br />
return conPeek(packedList,_pos);<br />
<b></b><br />
<b>}</b><br />
<b></b>
<b><br /></b>
<b>public static str encrypt(str _input, str _salt = '')</b><br />
{<br />
System.Security.Cryptography.SHA512Managed sha512managed = new System.Security.Cryptography.SHA512Managed();<br />
System.Text.Encoding encoding = System.Text.Encoding::get_UTF8();<br />
<br />
System.Byte[] inputBytes;<br />
System.Byte[] resultBytes;<br />
<br />
int i;<br />
str returnString;<br />
;<br />
<br />
new InteropPermission(InteropKind::ClrInterop).assert();<br />
<br />
inputBytes = encoding.GetBytes(strLwr(_salt) + _input); // Convert lower case salt + input into byte array<br />
<br />
// The input is hashed 1024 times for attack resiliency<br />
for (i = 0; i < 1024; i++)<br />
{<br />
resultBytes = resultBytes ? resultBytes : inputBytes; // First loop uses input for hashing<br />
resultBytes = sha512managed.ComputeHash(resultBytes);<br />
}<br />
<br />
returnString = System.Convert::ToBase64String(resultBytes);<br />
<br />
CodeAccessPermission::revertAssert();<br />
<br />
return returnString;<br />
}<br />
<br />
<b>private static Map fileGetList(FilePath _filePathArchive)</b><br />
<br />
{<br />
<br />
Map mapFiles;<br />
<br />
InteropPermission interopPermission = new InteropPermission(InteropKind::ClrInterop);<br />
Set interopPermissionSet = new Set(Types::Class);<br />
System.Array arrayFiles;<br />
<br />
int i;<br />
;<br />
<br />
// Granting file permission rights<br />
interopPermissionSet.add(interopPermission);<br />
CodeAccessPermission::assertMultiple(interopPermissionSet);<br />
<br />
mapFiles = new Map(Types::String, Types::String); // Key = return file | Value = archive path<br />
<br />
if (!System.IO.Directory::Exists(<b>_filePathArchive</b>))<br />
{<br />
throw error("Path doesnt exist");<br />
}<br />
<br />
arrayFiles = System.IO.Directory::GetFiles(<b>_filePathArchive</b>);<br />
<br />
// CLRInterop::getAnyTypeForObject method is used to handle difference in AX and System types (e.g. System.Int32 != int)<br />
<br />
for (i = 0; i < CLRInterop::getAnyTypeForObject(arrayFiles.get_Length()); i++)<br />
{<br />
mapFiles.insert(CLRInterop::getAnyTypeForObject(arrayFiles.GetValue(i)), <b>_filePathArchive</b>);<br />
}<br />
}<br />
<br />
// Reverting file permission rights<br />
CodeAccessPermission::revertAssert();<br />
<br />
return mapFiles;<br />
}<br />
<br />
<br />
/// <summary><br />
/// Gets the SenderID from AIF xml .<br />
/// </summary><br />
/// <param name="messagePartsXml"><br />
/// An <c>AifXml</c> value.<br />
/// </param><br />
/// <returns><br />
/// An instance of the <c>str document Namespace</c> class.<br />
/// </returns><br />
<b>public static str getSenderIDValue(AifXml messagePartsXml)</b><br />
{<br />
XmlTextReader xmlReader;<br />
str value,currentElement,pureElement;<br />
<br />
;<br />
#Aif<br />
xmlReader = XmlTextReader::newXml(messagePartsXml);<br />
while (xmlReader.Read())<br />
{<br />
switch (xmlReader.nodeType())<br />
{<br />
case XmlNodeType::Element:<br />
currentElement = xmlReader.name();<br />
break;<br />
case XmlNodeType::Text:<br />
pureElement = subStr(currentElement,strFind(currentElement,':',1,256)+1,256);<br />
switch (pureElement)<br />
{<br />
case "SenderId":<br />
{<br />
value=xmlReader.value();<br />
return value;<br />
}<br />
break;<br />
}<br />
break;<br />
}<br />
}<br />
<br />
return value;<br />
}<br />
<br />
<br /></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-63259395956502057172015-07-13T12:37:00.001+00:002015-07-13T12:37:28.761+00:00AX2012 Replacing Company element value in AIF using .net dll and QueryService<div dir="ltr" style="text-align: left;" trbidi="on">
Scenario:<br />
In AIF we have some data coming from externalSystem, which externalSystem doesnt have anyinformation to which company it should load, as ExternalSystem knows the information about coRegNum as we have to find the right company in AX by using coRegNum.<br />
Solution:<br />
so I build a .net component where we use the dll in transformation to replace the companyelement in the header to pass the file into right company.<br />
I am using QueryService which I querying the companyInfoTable with the range coRegNum and getting the right Company and replacing in the sourceXML in transfromation in headersection.<br />
<br />
sample xml section below.<br />
<br />
<ns0:Envelope xmlns:ns0="http://schemas.microsoft.com/dynamics/2011/01/documents/Message"><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:Header><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:MessageId>354bcae9-45a5-411e-953f-e2920a6c0229</ns0:MessageId><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><b><ns0:Company>123456</ns0:Company></b><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:Action>http://schemas.microsoft.com/dynamics/2008/01/services/GeneralJournalService/create</ns0:Action><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span></ns0:Header><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:Body><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:MessageParts><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><ns0:LedgerGeneralJournal xmlns:ns0="http://schemas.microsoft.com/dynamics/2008/01/documents/LedgerGeneralJournal" xmlns:st="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes"><br />
<br />
Before writing this class add serviceReference <b>QueryService from AX standardservice into your solution that will create app.config as below</b><br />
<b><br /></b>
<b><?xml version="1.0" encoding="utf-8" ?></b><br />
<b><configuration></b><br />
<b> <system.serviceModel></b><br />
<b> <bindings></b><br />
<b> <netTcpBinding></b><br />
<b> <binding name="QueryServiceEndpoint" closeTimeout="00:01:00"</b><br />
<b> openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"</b><br />
<b> transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"</b><br />
<b> hostNameComparisonMode="StrongWildcard" listenBacklog="10"</b><br />
<b> maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"</b><br />
<b> maxReceivedMessageSize="65536"></b><br />
<b> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"</b><br />
<b> maxBytesPerRead="4096" maxNameTableCharCount="16384" /></b><br />
<b> <reliableSession ordered="true" inactivityTimeout="00:10:00"</b><br />
<b> enabled="false" /></b><br />
<b> <security mode="Transport"></b><br />
<b> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /></b><br />
<b> <message clientCredentialType="Windows" /></b><br />
<b> </security></b><br />
<b> </binding></b><br />
<b> </netTcpBinding></b><br />
<b> </bindings></b><br />
<b> <client></b><br />
<b> <endpoint address="net.tcp://KrishhDax:8201/DynamicsAx/Services/QueryService"</b><br />
<b> binding="netTcpBinding" bindingConfiguration="QueryServiceEndpoint"</b><br />
<b> contract="AXQueryService.IQueryService" name="QueryServiceEndpoint"></b><br />
<b> <identity></b><br />
<b> <servicePrincipalName value="host/</b><b>KrishhDax</b><b>.adep01.nordic.rsa-ins.com" /></b><br />
<b> </identity></b><br />
<b> </endpoint></b><br />
<b> </client></b><br />
<b> </system.serviceModel></b><br />
<b></b><br />
<b></configuration></b><br />
<b><br /></b>
<b>Create a tranform class which extends from Itransform.</b><br />
<b>I am using xml.linq to read the element value in the class, so I referenced </b>System.Xml.Linq;<br />
<br />
using System;<br />
using System.IO;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using Microsoft.Dynamics.IntegrationFramework.Transform;<br />
using System.Xml;<br />
using System.Xml.Linq;<br />
using KrishhIbanToCompanyTrans.AXQueryService;<br />
using System.ServiceModel;<br />
using System.Data;<br />
using System.Net;<br />
<br />
<br />
namespace KrishhIbanToCompanyTrans<br />
{<br />
public class <b>IBANToCompanyTrans : ITransform</b><br />
{<br />
public void Transform(System.IO.Stream input, System.IO.Stream output, string config)<br />
{<br />
XDocument inputXml = XDocument.Load(input);<br />
<br />
string accStr = inputXml.Root.Descendants().Where(e => e.Name.LocalName == "Company").First().Value;<br />
<br />
string[] serviceParams = config.Split(';');<br />
<br />
if (serviceParams.Count() != 1 && serviceParams.Count() != 4)<br />
throw new ArgumentException("Invalid configuration passed. Expecting single endpoint address or endpoint address with username, password and domain, separated by ;");<br />
<br />
NetTcpBinding binding1 = new NetTcpBinding();<br />
EndpointAddress epa = new EndpointAddress(serviceParams[0]);<br />
<br />
binding1.Name = "QueryServiceEndpoint";<br />
binding1.TransactionProtocol = TransactionProtocol.OleTransactions;<br />
binding1.TransferMode = TransferMode.Streamed;<br />
binding1.Security.Mode = SecurityMode.Transport;<br />
binding1.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;<br />
binding1.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;<br />
binding1.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;<br />
binding1.Security.Message.ClientCredentialType = MessageCredentialType.Windows;<br />
binding1.ReliableSession.Enabled = false;<br />
<br />
QueryServiceClient serviceClient = new QueryServiceClient(binding1, epa);<br />
<br />
if (serviceParams.Count() == 4)<br />
{<br />
serviceClient.ClientCredentials.Windows.ClientCredential.UserName = serviceParams[1];<br />
serviceClient.ClientCredentials.Windows.ClientCredential.Password = serviceParams[2];<br />
serviceClient.ClientCredentials.Windows.ClientCredential.Domain = serviceParams[3];<br />
}<br />
<br />
QueryMetadata query = new QueryMetadata();<br />
query.DataSources = new QueryDataSourceMetadata[1];<br />
query.Name = "CompanyInfo";<br />
QueryDataSourceMetadata queryDS = new QueryDataSourceMetadata();<br />
queryDS.Name = "CompanyInfo";<br />
queryDS.Table = "CompanyInfo";<br />
queryDS.Enabled = true;<br />
query.DataSources[0] = queryDS;<br />
queryDS.DynamicFieldList = false;<br />
queryDS.Fields = new QueryDataFieldMetadata[2];<br />
QueryDataFieldMetadata fieldId = new QueryDataFieldMetadata();<br />
fieldId.FieldName = "DataArea";<br />
fieldId.SelectionField = SelectionField.Database;<br />
queryDS.Fields[0] = fieldId;<br />
QueryDataFieldMetadata fieldName = new QueryDataFieldMetadata();<br />
fieldName.FieldName = "CoRegNum";<br />
fieldName.SelectionField = SelectionField.Database;<br />
queryDS.Fields[1] = fieldName;<br />
queryDS.Ranges = new QueryDataRangeMetadata[] { new QueryDataRangeMetadata() { TableName = "CompanyInfo", FieldName = "CoRegNum", Value = accStr, Enabled = true } };<br />
<br />
Paging paging = new ValueBasedPaging() { RecordLimit = 25 };<br />
<br />
<br />
<br />
DataSet dataset = serviceClient.ExecuteQuery(query, ref paging);<br />
Console.Write(dataset.GetXml());<br />
<br />
if (dataset != null)<br />
{<br />
if (dataset.Tables.Count > 2)<br />
{<br />
if (dataset.Tables[3].Rows.Count > 0)<br />
{<br />
DataRow dr = dataset.Tables[3].Rows[0];<br />
<br />
var element = inputXml.Root.Descendants().Where(e => e.Name.LocalName == "Company").First();<br />
if (element != null)<br />
element.Value = dr["DataArea"].ToString();<br />
}<br />
}<br />
}<br />
inputXml.Save(output);<br />
<br />
}<br />
<br />
This method is used to test the above code.<br />
/*<br />
static void Main(string[] args)<br />
{<br />
IBANToCompanyTrans transformClass = new IBANToCompanyTrans();<br />
<br />
FileStream input, output;<br />
<br />
// Create the two streams to pass into the assembly. You will need to change these<br />
// to your file locations.<br />
input = new FileStream("C:\\Temp\\922\\922.xml", FileMode.Open);<br />
output = new FileStream("C:\\Temp\\922\\922_c.xml", FileMode.OpenOrCreate);<br />
<br />
string paramString = "net.tcp://hssdas115:8201/DynamicsAx/Services/QueryService";<br />
// Passes in the customers CSV file and gets back an XML file.<br />
transformClass.Transform(input, output, paramString);<br />
<br />
// Displays the XML to the console.<br />
// StreamReader sreader = new StreamReader(new FileStream("c:\\temp\\testtmpn.xml", FileMode.Open));<br />
// Console.Write(sreader.ReadToEnd());<br />
// Console.ReadLine();<br />
<br />
} */<br />
}<br />
}<br />
<br />
After building this component, go to the inboundPort and click transformation button and go to transformations and create the .net dll transformation and provide the dll and select the class in the dropdown.<br />
in Config file provide the app.config file for this transformation.<br />
<br />
<br />
<div>
<br /></div>
</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-6464417624867384182015-06-25T14:36:00.001+00:002015-06-25T14:36:23.088+00:00AIF Outbound Read ParentAXBC while processingRecord AX2012<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Scenario:</b><br />
<b><br /></b>
In AIF outbound document service Exporting Invoices information,<br />
In this document we have the customization as one table which contains the printTemplates where it stores the printTemplate information like,address,bankdetails,etc.Using this printTemplate number the external system will define which printing report they have to use.<br />
The Requirement is The Address containes all the street,country,etc. these information we have to generate from translation tables based on the language that defined in the custinvoiceJournal.<br />
<br />
so the datasource lookes like this.<br />
custinvoicejour->custinvoicetrans,custTable,etc, as well printTemplateTable also outerjoins to the custinvoicejour.<br />
<br />
<br />
I didnt find the way where I can get the parentaxbc object while processing the current record.<br />
<br />
<b>Solution:</b><br />
I thought to get parentAXBC object always for the outbound for the current AXBC record.<br />
<br />
See the Modification that I have build.<br />
<br />
<br />
1. <b>AXDBase class</b><br />
added the class variable as <b>AXInternalBase parentAXBC;</b><br />
<br />
2.<b> AxdBaseRead class</b><br />
Open method <b>serializeRecord </b>add the folllowing line of code above<b> AXbase.ProccesingRecord(common) </b>line in that method<br />
<span style="font-family: Consolas;"><b>axdBase.parmParentAxBC(_parentAxBC);</b><span style="font-size: 7.5pt;"><o:p></o:p></span></span><br />
<br />
3. <span style="font-family: Consolas;">AxdBaseGenerateXSD class</span><br />
<span style="font-family: Consolas;"> Open this class edit method <b>addDocumentProperties </b>and add one more case for classType as below, so that while serialization class object wont fail.</span><br />
<i><span style="color: green; font-family: Consolas; font-size: 7.5pt;">// added
by krishna for to check for class type also. begins<o:p></o:p></span></i><br />
<b><span style="color: darkblue; font-family: Consolas;">case</span></b><span style="font-family: Consolas;"><b> Types::Class:<o:p></o:p></b></span><br />
<b><span style="color: darkblue; font-family: Consolas;">if</span><span style="font-family: Consolas;"> (typename == </span><span style="color: darkred; font-family: Consolas;">''</span><span style="font-family: Consolas;">)<o:p></o:p></span></b><br />
<span style="font-family: Consolas;"><b>{<o:p></o:p></b></span><br />
<span style="font-family: Consolas;"><b>typename =
#xsdStringType;<o:p></o:p></b></span><br />
<span style="font-family: Consolas;"><b>typeNameSpace
= #xsdNameSpace ;<o:p></o:p></b></span><br />
<span style="font-family: Consolas;"><b>}<o:p></o:p></b></span><br />
<b><span style="color: darkblue; font-family: Consolas;">break</span></b><span style="font-family: Consolas;"><b>;</b><o:p></o:p></span><br />
<br />
<i><span style="color: green; font-family: Consolas;">// added
by</span><span style="color: green; font-family: Consolas; font-size: 7.5pt;"> krishna for to check for class type also.</span></i><br />
<i><span style="color: green; font-family: Consolas; font-size: 7.5pt;"><br /></span></i>
<span style="font-family: Consolas;"><i>Now framework was updated to get parentAXBC allways while outbound. now you can write logic whatever you want to use it.</i></span><br />
<br />
<br />
Open AXDSalesInvoice class and update the processing record with the business logic for you to handle.<br />
It this method i am verifying the current record in printTemplate then get the parent and get the languageId from that do my logic.<br />
<br />
<b><i><span style="color: darkblue; font-family: Consolas;">public</span></i><i><span style="font-family: Consolas;"> </span></i><i><span style="color: darkblue; font-family: Consolas;">void</span></i><i><span style="font-family: Consolas;">
processingRecord(Common common)</span></i></b><i><span style="color: green; font-family: Consolas;"><o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;">{<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> PrintTemplate PrintTemplate;<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> AxCustInvoiceJour
axCustInvoiceJour;<o:p></o:p></span></i><br />
<b><i><span style="font-family: Consolas;"> if</span></i></b><i><span style="font-family: Consolas;">(common.TableId == </span></i><b><i><span style="font-family: Consolas;">tableNum</span></i></b><i><span style="font-family: Consolas;">(PrintTemplate))<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> {<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> axCustInvoiceJour=this.parmParentAxBC();<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> PrintTemplate=common;<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> PrintTemplate.CompanyCountryName=LogisticsAddressCountryRegionTranslation::find(LogisticsPostalAddress::findRecId(PrintTemplate.Address).CountryRegionId,axCustInvoiceJour.parmLanguageId()).ShortName;<o:p></o:p></span></i><br />
<b><i><span style="font-family: Consolas;"> super</span></i></b><i><span style="font-family: Consolas;">(PrintTemplate);<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> }<o:p></o:p></span></i><br />
<b><i><span style="font-family: Consolas;"> else<o:p></o:p></span></i></b><br />
<i><span style="font-family: Consolas;"> {<o:p></o:p></span></i><br />
<b><i><span style="font-family: Consolas;"> super</span></i></b><i><span style="font-family: Consolas;">(common);<o:p></o:p></span></i><br />
<i><span style="font-family: Consolas;"> }<o:p></o:p></span></i><br />
<br />
<i><span style="font-family: Consolas;">}<span style="color: green;"><o:p></o:p></span></span></i><br />
<i><span style="font-family: Consolas;"><br /></span></i>
<br />
<span style="font-family: Consolas;"><b>If you guys likes this post and useful please like and share it.</b></span><br />
<span style="font-family: Consolas;"><b><br /></b></span>
<span style="font-family: Consolas; font-size: 7.5pt;"> </span></div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-31915994891242548152015-06-25T14:04:00.002+00:002015-06-25T14:04:44.109+00:00Editable Multi select lookup in Grid field AX2012<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Scneario: Multiple select Editable lookup in grid</b><br />
<br />
I created an extension of class from <b>SysLookupMultiselectGrid</b><br />
<div style="text-align: left;">
<b><span style="color: darkblue; font-family: Consolas;"><br /></span></b></div>
<div style="text-align: left;">
<span style="color: darkblue; font-family: Consolas; font-weight: bold;">class</span><span style="font-family: Consolas; font-weight: bold;"> KrisSysLookupMultiSelectGrid </span><span style="color: darkblue; font-family: Consolas; font-weight: bold;">extends</span><span style="font-family: Consolas;"><b> SysLookupMultiSelectGri</b>d<br /><o:p></o:p></span><span style="font-family: Consolas;">{</span></div>
<div style="text-align: left;">
<span style="font-family: Consolas;">#Characters</span><span style="font-family: Consolas;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Consolas;">}</span></div>
<div style="text-align: left;">
<span style="font-family: Consolas;"><br /></span></div>
<b><span style="color: darkblue; font-family: Consolas;">public</span><span style="font-family: Consolas;"> </span><span style="color: darkblue; font-family: Consolas;">void</span></b><span style="font-family: Consolas;"><b> setSelected()</b><o:p></o:p></span><br />
<span style="font-family: Consolas;">{<o:p></o:p></span><br />
<span style="font-family: Consolas;"> dictfield
dictField;<o:p></o:p></span><br />
<span style="font-family: Consolas;"> Common
currentDSRecord;<o:p></o:p></span><br />
<span style="font-family: Consolas;"> FormDataSource
formdatasource;<o:p></o:p></span><br />
<span style="font-family: Consolas;"> callingControlId.text(SysOperationHelper::convertMultiSelectedValueString (selectedId));<o:p></o:p></span><br />
<span style="font-family: Consolas;"> formdatasource
= callingControlId.dataSourceObject();<o:p></o:p></span><br />
<b><span style="color: darkblue; font-family: Consolas;"> if</span></b><span style="font-family: Consolas;">(formdatasource
&& callingControlStr.dataField())<o:p></o:p></span><br />
<span style="font-family: Consolas;"> {<o:p></o:p></span><br />
<span style="font-family: Consolas;"> dictfield = </span><b><span style="color: darkblue; font-family: Consolas;">new</span></b><span style="font-family: Consolas;">
dictfield(formdatasource.table(),callingControlStr.dataField());<o:p></o:p></span><br />
<span style="font-family: Consolas;"> currentDSRecord
= formdatasource.cursor();<o:p></o:p></span><br />
<span style="font-family: Consolas;"> currentDSRecord.(dictfield.id())
= currentDSRecord.(dictfield.id()) + SysOperationHelper::convertMultiSelectedValueString(selectedStr);<o:p></o:p></span><br />
<span style="font-family: Consolas;"> callingControlStr.update();<o:p></o:p></span><br />
<span style="font-family: Consolas;"> }<o:p></o:p></span><br />
<b><span style="color: darkblue; font-family: Consolas;"> else<o:p></o:p></span></b><br />
<span style="font-family: Consolas;"> {<o:p></o:p></span><br />
<span style="font-family: Consolas;"> callingControlStr.text(SysOperationHelper::convertMultiSelectedValueString(selectedStr));<o:p></o:p></span><br />
<span style="font-family: Consolas;"> }<o:p></o:p></span><br />
<span style="font-family: Consolas;">}</span><br />
<span style="font-family: Consolas;"><br /></span>
<b><span style="color: darkblue; font-family: Consolas;">public</span></b><span style="font-family: Consolas;"> </span><b><span style="color: darkblue; font-family: Consolas;">static</span></b><span style="font-family: Consolas;"> </span><span style="font-family: Consolas; font-weight: bold;">KrisSysLookupMultiSelectGrid</span><span style="font-family: Consolas; font-weight: bold;"> </span><span style="font-family: Consolas;">construct(FormControl _ctrlId,<o:p></o:p></span><br />
<span style="font-family: Consolas;">FormControl
_ctrlStr)<o:p></o:p></span><br />
<span style="font-family: Consolas;">{<o:p></o:p></span><br />
<span style="font-family: Consolas; font-weight: bold;">KrisSysLookupMultiSelectGrid</span><span style="font-family: Consolas; font-weight: bold;"> </span><span style="font-family: Consolas;">lookupMS;<o:p></o:p></span><br />
<span style="font-family: Consolas;">lookupMS = </span><b><span style="color: darkblue; font-family: Consolas;">new</span></b><span style="font-family: Consolas;"> </span><span style="font-family: Consolas; font-weight: bold;">KrisSysLookupMultiSelectGrid </span><span style="font-family: Consolas;">();<o:p></o:p></span><br />
<span style="font-family: Consolas;">lookupMS.parmCallingControlId(_ctrlId);<o:p></o:p></span><br />
<span style="font-family: Consolas;">lookupMS.parmCallingControlStr(_ctrlStr);<o:p></o:p></span><br />
<b><span style="color: darkblue; font-family: Consolas;">return</span></b><span style="font-family: Consolas;"> lookupMS;<o:p></o:p></span><br />
<br />
<span style="font-family: Consolas;">}<span style="font-size: 7.5pt;"><o:p></o:p></span></span><br />
<span style="font-family: Consolas;"><br /></span>
<span style="font-family: Consolas;"><br /></span>
<span style="font-family: Consolas;"><b>On form declare this class on the form level as below</b></span><br />
<span style="font-family: Consolas;"><b><br /></b></span>
<span style="font-family: Consolas; font-weight: bold;">KrisSysLookupMultiSelectGrid</span><span style="font-family: Consolas; font-weight: bold;"> </span><span style="font-family: Consolas;"><b>multiSelectGrid;</b></span><br />
<span style="font-family: Consolas;"><b><br /></b></span>
<span style="font-family: Consolas;"><b>On form Init method initiliaze this object as below</b></span><br />
<span style="font-family: Consolas;"><b>multiSelectGrid
= </b></span><span style="font-family: Consolas; font-weight: bold;">KrisSysLookupMultiSelectGrid</span><span style="font-family: Consolas; font-weight: bold;"> </span><span style="font-family: Consolas;"><b>::construct(GridResults_Value,GridResults_Value);</b><span style="font-size: 7.5pt;"><o:p></o:p></span></span><br />
<span style="font-family: Consolas;"><b><br /></b></span>
<span style="font-family: Consolas;"><b>On grid string edit field lookup method you can use this object as below</b></span><br />
<span style="font-family: Consolas;"><b><br /></b></span>
<b><span lang="EN-US" style="font-family: Consolas;">Query query = </span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">new</span><span lang="EN-US" style="font-family: Consolas;"> Query();<o:p></o:p></span></b><br />
<br />
<span lang="EN-US" style="font-family: Consolas;"><b>QueryBuildDataSource queryBuildDataSource;<o:p></o:p></b></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
<b><span lang="EN-US" style="font-family: Consolas;">queryBuildDataSource = query.addDataSource(</span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">tableNum</span><span lang="EN-US" style="font-family: Consolas;">(DimensionAttribute));<o:p></o:p></span></b><br />
<b><span lang="EN-US" style="font-family: Consolas;">queryBuildDataSource.addRange(</span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">fieldNum</span><span lang="EN-US" style="font-family: Consolas;">(DimensionAttribute,Type)).value(queryValue(DimensionAttributeType::CustomList));<o:p></o:p></span></b><br />
<b><span lang="EN-US" style="font-family: Consolas;">queryBuildDataSource.addRange(</span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">fieldNum</span><span lang="EN-US" style="font-family: Consolas;">(DimensionAttribute,Type)).value(queryValue(DimensionAttributeType::MainAccount));<o:p></o:p></span></b><br />
<b><span lang="EN-US" style="font-family: Consolas;">queryBuildDataSource.addRange(</span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">fieldNum</span><span lang="EN-US" style="font-family: Consolas;">(DimensionAttribute,Type)).value(queryValue(DimensionAttributeType::ExistingList));<o:p></o:p></span></b><br />
<b><span lang="EN-US" style="font-family: Consolas;">queryBuildDataSource.addSelectionField(</span><span lang="EN-US" style="color: darkblue; font-family: Consolas;">fieldNum</span><span lang="EN-US" style="font-family: Consolas;">(DimensionAttribute,Name));<o:p></o:p></span></b><br />
<span lang="EN-US" style="font-family: Consolas;"><b>multiSelectGrid.parmQuery(query);<o:p></o:p></b></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b>
</b></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b>multiSelectGrid.run();</b><span style="font-size: 7.5pt;"><o:p></o:p></span></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
<span lang="EN-US" style="font-family: Consolas;"><b>you can see in form as below screenshot</b></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkdnQQQdQn02Y0UMTWnZ5O2S2UB6gVWl5WN1FEOsXsKW6nzbM126lXQwTMzeFxDELeQ8FWez3L7LuX4m9BigreCOQfl-V1Jb96Cgo5cfg0YnPqudGjiIZZCuGT-rC-X4EwcPU9cOBNXHI/s1600/blog2pic1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="339" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkdnQQQdQn02Y0UMTWnZ5O2S2UB6gVWl5WN1FEOsXsKW6nzbM126lXQwTMzeFxDELeQ8FWez3L7LuX4m9BigreCOQfl-V1Jb96Cgo5cfg0YnPqudGjiIZZCuGT-rC-X4EwcPU9cOBNXHI/s640/blog2pic1.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGp6fEhsiupGrZdCvhHPjX-NUXlmKVGL6VxJaROHzLjBFho5eEyDDSkrRW25BiY_Kl5dECW_Dfc5XC5DUKpFlwoHSJwTHH7RWm6wd0UNSEA9BkMYU5KStex7CRaBXYBl5bEmV9fyaMOwE/s1600/blog2pic2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGp6fEhsiupGrZdCvhHPjX-NUXlmKVGL6VxJaROHzLjBFho5eEyDDSkrRW25BiY_Kl5dECW_Dfc5XC5DUKpFlwoHSJwTHH7RWm6wd0UNSEA9BkMYU5KStex7CRaBXYBl5bEmV9fyaMOwE/s640/blog2pic2.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span lang="EN-US" style="font-family: Consolas;"><b>Its editable and multi select lookup.</b></span><br />
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
<span lang="EN-US" style="font-family: Consolas;"><b><br /></b></span>
</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com1tag:blogger.com,1999:blog-7061588288131344016.post-39431282883186738472015-06-25T13:36:00.001+00:002015-06-25T13:37:19.987+00:00AIF Inheritance Extending AXD classes AX2012 <div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;"><br /></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">Scenario:<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;"><br /></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">I have multiple
ledgerTransaction files coming from different source systems to AX, so each
file import must have different business logic,business handlings regarding the
dimensions, type of files ex ledger,cust,bank,vend.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">I build the whole
logic in the standard AXDLEdgerGeneralService class in deserializeEntity method
with journalNames I handled, but its becoming more complex and to maintain the
functionality and growing business requirements, its getting messing in the code.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">I designed the
inheritance for AIF documents, For each inbound we can have different axdclass
with their own business logic implemented and I defined which axdclass that you
want to run on that inbound port. It became easier to maintain the code and standard
class is same as Standard.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">I thought to share
as it may be useful for lot of people.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">abstract</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8pt;"><b> <span style="color: darkblue;">class</span> AifDocument <span style="color: darkblue;">extends</span>
AfStronglyTypedDataContainer</b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="background: yellow; mso-highlight: yellow;">classId
axdClassId;</span><o:p></o:p></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AxdBase axdInstance;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AifXml documentXml;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">boolean</span></b> documentXmlExists;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">boolean</span></b> deserializeNow;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-bidi-font-weight: bold;"><b>public</b></span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"><b>
classId parmAXDClassId(classId _classId=axdClassId)</b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
axdClassId=_classId;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<span style="color: darkblue; mso-bidi-font-weight: bold;">return</span>
axdClassId;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Add field <b>ClassId </b>in table <b>AIFInboundPort
</b>which extends <b>classID </b>EDT.<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-IN">Create an Edit method in this table</span></div>
<div class="MsoNormal">
<span lang="EN-IN"><b>edit className name(boolean set, Classname value)</b></span></div>
<div class="MsoNormal">
<span lang="EN-IN">{</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> classid classID;</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> if(set)</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> {</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> classid=classname2id(value);</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> this.classid=classid;</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> }</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> else</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> {</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> value = classid2name(this.classid);</span></div>
<div class="MsoNormal">
<span lang="EN-IN"> }</span></div>
<div class="MsoNormal">
<span lang="EN-IN">}</span></div>
<div class="MsoNormal">
<span lang="EN-IN"><br /></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Create an <b>inMemmory </b>table <b>AifAxdClassLookup
</b>with the field <b>ClassName </b>of EDT Name.<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-IN">Edit the form <b>aifinboundPort </b>and add a method at element level<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN">Declare
a variable at form level as </span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">AifAxdClassLookup aifAxdClassLookup;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Add <b>AXDClass </b>string edit control on details
header group. define Datamethod <b>Name</b><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-IN"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-IN">Add <b>progress </b>control under details
header group and name it as <b>progress</b>.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Create element level method as below, we
will use this method in the lookup of the <b>AXDclass </b>string edit control.<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-IN"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">void</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b>generateAXDClassesLookupTable()</b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AXDBase componentInstance;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
Dictionary dictionary;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
SysDictClass dictClass;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">int</span></b> i;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">int</span></b> classCount;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
classId componentInterfaceId,componentInterfaceId1;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
SysTableLookup
sysTableLookup;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
dictionary = <b><span style="color: darkblue;">new</span></b>
Dictionary();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
componentInterfaceId1=<b><span style="color: darkblue;">classNum</span></b>(AxdLedgerGeneralJournal);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
classCount = dictionary.classCnt();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.rangeLo(<b><span style="color: red;">1</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.rangeHi(classCount);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.pos(<b><span style="color: red;">1</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.step(<b><span style="color: red;">1</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.visible(<b><span style="color: darkblue;">true</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">for</span></b> (i=<b><span style="color: red;">1</span></b>; i <= classCount; i++)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> progress.pos(i);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dictClass = <b><span style="color: darkblue;">new</span></b>
SysDictClass(dictionary.classCnt2Id(i));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(dictClass.isImplementing(componentInterfaceId1))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> componentInstance =
dictClass.makeObject();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> </span><span lang="EN-IN">AifAxdClassLookup</span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">.clear();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> </span><span lang="EN-IN">AifAxdClassLookup</span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">.ClassName =
dictClass.name();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> </span><span lang="EN-IN">AifAxdClassLookup</span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">.insert();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
progress.visible(<b><span style="color: darkblue;">false</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
componentLookupGenerated = <b><span style="color: darkblue;">true</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Override the lookup method of AXDClass
string edit control and add below code<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-IN"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">public</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">void</span></b> lookup()<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
SysTableLookup
tableLookup;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
Query query;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
QueryBuildDataSource
queryBuildDataSource;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b> (componentLookupGenerated
== <b><span style="color: darkblue;">false</span></b>)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
element.generateAXDClassesLookupTable();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
query = <b><span style="color: darkblue;">new</span></b> Query();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
queryBuildDataSource = query.addDataSource(<b><span style="color: darkblue;">tablenum</span></b>(AifAxdClassLookup));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup = SysTableLookup::newParameters(<b><span style="color: darkblue;">tablenum</span></b>(AifAxdClassLookup),
this);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup.addLookupfield(<b><span style="color: darkblue;">fieldnum</span></b>(AifAxdClassLookup,
ClassName));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup.parmQuery(query);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<i><span style="color: green;">//BP Deviation Documented.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup.parmTmpBuffer(AifAxdClassLookup);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup.parmUseLookupValue(<b><span style="color: darkblue;">false</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
tableLookup.performFormLookup();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-IN">Modify the service class ex:
ledgerGeneralService class in my case its ledgerGeneralJournalService<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">[AifDocumentCreateAttribute,
SysEntryPointAttribute(<b><span style="color: darkblue;">true</span></b>)]<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">public</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> AifEntityKeyList
create(LedgerGeneralJournal _ledgerGeneralJournal)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AifInboundPort aifInboundPort;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
ClassId AxdClassId;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<i><span style="color: green;">//Assign inheritance extension AXDclass for
each port defined on the inboundPort added by krishna.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<span style="color: darkblue; mso-bidi-font-weight: bold;">if</span>
(operationContext != <span style="color: darkblue; mso-bidi-font-weight: bold;">null</span>)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AxdClassId=aifInboundPort::find(operationContext.getPortName()).</span><span lang="EN-IN">ClassId</span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <span style="color: darkblue; mso-bidi-font-weight: bold;">if</span>(AxdClassId!=<span style="color: red; mso-bidi-font-weight: bold;">0</span>)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_ledgerGeneralJournal.parmAXDClassId(AxdClassId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<i><span style="color: green;">//assign inheritance extension AXDclass for
each port defined on the inboundPort added by krishna.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">return</span></b>
this.createList(_ledgerGeneralJournal);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Now we will create a class which extends
AXDclass ex: AXDLedgerGeneralJournal</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-bidi-font-weight: bold;"><b>class</b></span><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"><b>
AxdLedgerGeneralJournal_GeneralALL <span style="color: darkblue; mso-bidi-font-weight: bold;">extends</span> AxdLedgerGeneralJournal</b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">Override the queryName method and
use which query you are using for your inbound AIF<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">In my example I am using
AXDLedgerGeneralJournal<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">public</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"><b> QueryName
getQueryName()</b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">return</span></b> <b><span style="color: darkblue;">querystr</span></b>(AxdLedgerGeneralJournal);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;"><br /></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="font-family: Consolas; font-size: 8pt;">Now you can
override whatever the method you want to overiride, in my case I am overriding
deserializeentity.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="font-family: Consolas; font-size: 8pt;">This method
contains all my modification logic.<span style="color: darkblue;"><o:p></o:p></span></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8.0pt;">public</span></b><span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"><b> <span style="color: darkblue;">void</span> afterDeserializeEntity(AxInternalBase
_axbc, tableId _tableId, <span style="color: darkblue;">str</span>
_dataSourceName)</b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AxdBaseProperty axdBaseProperty = <b><span style="color: darkblue;">new</span></b>
AxdBaseProperty();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">container</span></b> dimensionValue,
axdBasePropertyContainer, dimensionValueConverted,bankDimensionContainer;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
recId
dimensionFieldRecId,bankDimensionFieldRecid;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">int</span></b> containerElementIndex = <b><span style="color: red;">1</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">int</span></b> containerLength;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">int</span></b> fieldId;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
selectableDataArea company, offsetCompany;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
BankAccountTable localBankAccountTable;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
AccountStatementRules AccountStatementRules;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
JournalNameId localJournalName;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
LogisticsPostalAddressView
locallogisticsPostalAddressView;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
LogisticsLocationParty
logisticslocationParty;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
CustTable
localCustTable;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
MappingText localMappingText=<span style="color: darkred;">""</span>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
localJournalName=<span style="color: darkred;">""</span>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
dimensionFieldRecId=<b><span style="color: red;">0</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
containerLength = <b><span style="color: darkblue;">conLen</span></b>(fieldList);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b> (containerLength == <b><span style="color: red;">0</span></b>)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">return</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b>(_tableId == <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTrans))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> ledgerJournalName =
LedgerJournalName::find(_axbc.parentAxBC().fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(ledgerJournalTable,
JournalName)));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b>(_tableId == <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTable))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> ledgerJournalName =
LedgerJournalName::find(_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(ledgerJournalTable,
JournalName)));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b>(ledgerJournalName)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> ateAccountDefinitionId =
ATEAccountDefinitionTable::findRecId(<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
ledgerJournalName.ATEAccountDefinitionTable<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> ).DefinitionId;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">if</span></b> (_tableId == <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTrans))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> company = _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, Company));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> offsetCompany = _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetCompany));<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> company = AifLookupEntry::findInternal(SystemParameters::find().LookupTableId,company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> offsetCompany =
AifLookupEntry::findInternal(SystemParameters::find().LookupTableId,offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>(LedgerJournalName::find(_axbc.parentAxBC().fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(ledgerJournalTable, JournalName))).JournalName==<span style="color: darkred;">"1234"</span>)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> company =<b><span style="color: darkblue;">curext</span></b>();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> offsetCompany =<b><span style="color: darkblue;">curext</span></b>();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(company)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, Company),
company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> company =<b><span style="color: darkblue;">curext</span></b>();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, Company),
company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(offsetCompany)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, OffsetCompany),
offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> offsetCompany =<b><span style="color: darkblue;">curext</span></b>();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, OffsetCompany),
offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">//
Validate the primary and offset companies.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> this.validateCompany(_axbc.currentRecord(),
<b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTrans), <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, Company),
company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
this.validateCompany(_axbc.currentRecord(), <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTrans),
<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetCompany), offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">do</span></b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
{<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> axdBasePropertyContainer = <b><span style="color: darkblue;">conPeek</span></b>(fieldList, containerElementIndex);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
axdBaseProperty.unpack(axdBasePropertyContainer);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> containerElementIndex++;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionValue = <b><span style="color: darkblue;">conPeek</span></b>(fieldList, containerElementIndex);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> containerElementIndex++;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> fieldId =
axdBaseProperty.parmImplementingFieldId();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">// If the
Table number and Field number match then convert the field by calling
axdDimensionUtil</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">// and set
the corresponding field through its parm method.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(_tableId == <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTable)
&&<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> fieldId == <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTable,
OffsetLedgerDimension))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">//
MultiTypeDefaultAccount requires an account type to be specified.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">//return
AxdDimensionUtil::getMultiTypeDefaultAccountId(_accountTypeEnumId,
_accountType, _dimensionValue);</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getMultiTypeDefaultAccountId(enumName2Id(<span style="color: darkred;">'LedgerJournalACType'</span>),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTable,
OffsetAccountType)),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
dimensionValue);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTable, OffsetLedgerDimension),
dimensionFieldRecId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b>
<b><span style="color: darkblue;">if</span></b> (_tableId == <b><span style="color: darkblue;">tableNum</span></b>(LedgerJournalTrans))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(fieldId == <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
LedgerDimension))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(ateAccountDefinitionId)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionValueConverted
= this.ConvertLedgerdimension_PC(<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
ExternalAccountString))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> , _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, Company))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> , _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, CurrencyCode))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> ,
LedgerJournalName::find(_axbc.parentAxBC().fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(ledgerJournalTable,
JournalName))).JournalName); <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b> (BankAccountTable::exist(<b><span style="color: darkblue;">conPeek</span></b>(dimensionValueConverted,<b><span style="color: red;">2</span></b>)))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, AccountType),
LedgerJournalACType::Bank);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,DefaultDimension),BankAccountTable::find(<b><span style="color: darkblue;">conPeek</span></b>(dimensionValueConverted,<b><span style="color: red;">2</span></b>)).DefaultDimension);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getMultiTypeAccountId(enumName2Id(<span style="color: darkred;">'LedgerJournalACType'</span>),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
AccountType)),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
dimensionValueConverted,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b> <i><span style="color: green;">//Non ATE starts</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getMultiTypeAccountId(enumName2Id(<span style="color: darkred;">'LedgerJournalACType'</span>),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
AccountType)),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionValue,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//
Else Non ATE closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, LedgerDimension),
dimensionFieldRecId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">// IF
ledgerJournalTrans ledgerDimensionClosed field is closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b>
<b><span style="color: darkblue;">if</span></b> (fieldId == <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetLedgerDimension))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">if</span></b>
(ateAccountDefinitionId)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionValueConverted =
this.ConvertLedgerdimension_PC(<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetAccountString))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> , _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, OffsetCompany))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> , _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans, CurrencyCode))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
,LedgerJournalName::find(_axbc.parentAxBC().fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(ledgerJournalTable,
JournalName))).JournalName);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getMultiTypeAccountId(enumName2Id(<span style="color: darkred;">'LedgerJournalACType'</span>),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetAccountType)),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionValueConverted,<i><span style="color: green;">//dimensionValue,</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//
ATE offset closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">else</span></b><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getMultiTypeAccountId(enumName2Id(<span style="color: darkred;">'LedgerJournalACType'</span>),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
_axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetAccountType)),<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
dimensionValue,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//ELse non
ATE offset closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetLedgerDimension), dimensionFieldRecId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//Else
if OffsetLedger dimension closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b>
<b><span style="color: darkblue;">if</span></b> (fieldId == <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
DefaultDimension))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getDimensionAttributeValueSetId(dimensionValue, company);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
DefaultDimension), dimensionFieldRecId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//Else
if Default dimension closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <b><span style="color: darkblue;">else</span></b>
<b><span style="color: darkblue;">if</span></b> (fieldId == <b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetDefaultDimension))<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> <i><span style="color: green;">//
OffsetDefaultDimension requires a Legal entity to be specified to support
intercompany transactions.</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> dimensionFieldRecId =
AxdDimensionUtil::getDimensionAttributeValueSetId(dimensionValue,
offsetCompany);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> _axbc.fieldId(<b><span style="color: darkblue;">fieldNum</span></b>(LedgerJournalTrans,
OffsetDefaultDimension), dimensionFieldRecId);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//Else
if OffsetDefault dimension closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> }<i><span style="color: green;">//IF
ledgerJournalTrans table check closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
}<i><span style="color: green;">//Do while closed</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
<b><span style="color: darkblue;">while</span></b> (containerElementIndex
< containerLength);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">
fieldList = <b><span style="color: darkblue;">conNull</span></b>();<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;">}<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-IN" style="font-family: Consolas; font-size: 8.0pt;"> </span><b><span lang="EN-IN" style="color: darkblue; font-family: Consolas; font-size: 8pt;">If you guys likes this post please share it and like this post.</span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Consolas;"><span style="font-size: 10.6666669845581px;">if you have any queries please contact and message me.</span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<br />
<div class="MsoNormal">
<br /></div>
</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-13799275421610935802015-03-09T13:25:00.000+00:002015-03-09T13:25:29.885+00:00List out elements not added to version control from project<div dir="ltr" style="text-align: left;" trbidi="on">
This job is used to list all elements not added to tfs(due to tfs) in project.<br />
<br />
<b>static void Krishh_projectElementsNotaddedtoTFS(Args _args)</b><br />
{<br />
<br />
Treenode parentNode,childnode;<br />
<br />
TreenodeIterator rootiterator;<br />
VersionControl vs;<br />
ProjectNode pln,plnproj;<br />
ProjectListNode list;<br />
<br />
;<br />
vs=new VersionControl();<br />
vs.init();<br />
<br />
parentNode = infolog.projectRootNode();<br />
list=infolog.projectRootNode().AOTfindChild("Private");<br />
<br />
rootiterator=list.AOTiterator();<br />
pln=list.AOTfindChild("Testproject");<br />
plnproj=pln.loadForInspection();<br />
rootiterator=plnproj.AOTiterator();<br />
childnode=rootiterator.next();<br />
<br />
while(childnode)<br />
{<br />
<br />
<br />
if(vs.allowCreate(childnode))<br />
{<br />
info(childnode.AOTname());<br />
}<br />
childnode=rootiterator.next();<br />
}<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com0tag:blogger.com,1999:blog-7061588288131344016.post-25051709142887634022014-12-04T09:25:00.001+00:002014-12-04T09:25:52.393+00:00Get Multiple files from Folder<div dir="ltr" style="text-align: left;" trbidi="on">
<b>static container Krishh_findMatchingFiles(</b>str _folderPath, str _filePattern = '*.*')<br />
{<br />
System.IO.DirectoryInfo directory;<br />
System.IO.FileInfo[] files;<br />
System.IO.FileInfo file;<br />
InteropPermission permission;<br />
<br />
str fileName;<br />
counter filesCount;<br />
counter loop;<br />
container mathchingFiles;<br />
;<br />
<br />
permission = new InteropPermission(InteropKind::ClrInterop);<br />
permission.assert();<br />
<br />
directory = new System.IO.DirectoryInfo(_folderPath);<br />
files = directory.GetFiles(_filePattern);<br />
filesCount = files.get_Length();<br />
<br />
for (loop = 0; loop < filesCount; loop++)<br />
{<br />
file = files.GetValue(loop);<br />
fileName = file.get_FullName();<br />
mathchingFiles = conins(mathchingFiles, conlen(mathchingFiles) + 1, fileName);<br />
}<br />
<br />
CodeAccessPermission::revertAssert();<br />
<br />
return mathchingFiles;<br />
}<br />
<br />
I placed the above method in Global class, so we can use that in your classes.<br />
Make sure your folder should have access permissions when you are running in the batch.<br />
<br />
<br />
<b>static void Krishh_fetchFiles(Args _args)</b><br />
{<br />
container files;<br />
counter loop;<br />
str fileName;<br />
;<br />
//Assign the folder path with the file pattern if you want to filter by ex *.txt or k*.txt or m*.*..etc.<br />
files = Global::Krishh_findMatchingFiles(AxdDocumentParameters::find().PaymJournalFile);<br />
<br />
for (loop = 1; loop <= conlen(files); loop++)<br />
{<br />
fileName = conpeek(files, loop);<br />
info(fileName);<br />
}<br />
<br />
<br />
}</div>
krishhDAXhttp://www.blogger.com/profile/15033137697713945322noreply@blogger.com1