Thursday 15 December 2016

Thursday 13 October 2016

Multiple builds in the same machine

Let's say you have Installed Nav 2016 with CU1 and you want to run CU10 side by side then follow the below steps:

1)Go to the below path 
C:\Program Files\Microsoft Dynamics NAV\
Create a new folder Say(90CU10)

Copy Service folder from C:\Program Files\Microsoft Dynamics NAV\90\ to 
C:\Program Files\Microsoft Dynamics NAV\90CU10\


Copy the all the files from Service Folder of Cumulative Package 10
E:\Dynamics.90.AU.CU10.46621.DVD\ServiceTier\program files\Microsoft Dynamics NAV\90\Service\
and replace the files in below path
C:\Program Files\Microsoft Dynamics NAV\90CU10\Service\


Run the Dynamics NAV 2016 Administration Shell as administrator and execute the below powershell script

Say your new instance name is (INS_90CU10)

New-Service 'MicrosoftDynamicsNAVServer$INS_90CU10' -BinaryPathName '"C:\Program Files\Microsoft Dynamics NAV\90CU10\Service\Microsoft.Dynamics.Nav.Server.exe" $INS_90CU10 /config "C:\Program Files\Microsoft Dynamics NAV\90CU10\Service\Microsoft.Dynamics.NAV.Server.exe.config"' -DependsOn 'HTTP' -Description 'Service handling requests to Microsoft Dynamics NAV application.' -DisplayName 'Microsoft Dynamics NAV Server [INS_90CU10]' -StartupType Manual



To Modify Customsetting.config file using powershell script execute the below script:

Set-NAVServerConfiguration INS_90CU10 -KeyName DatabaseServer -KeyValue PC003
Set-NAVServerConfiguration INS_90CU10 -KeyName DatabaseInstance -KeyValue SQL2014
Set-NAVServerConfiguration d -KeyName DatabaseName -KeyValue 90CU10_DEMO

Set-NAVServerConfiguration INS_90CU10 -KeyName ClientServicesPort -KeyValue 9045
netsh http add urlacl url=http://+:99046/INS_90CU10/ user= “NT AUTHORITY\NETWORK SERVICE” listen=yes delegate=no sddl=”D:(A;;GX;;;NS)”
Set-NAVServerConfiguration INS_90CU10 -KeyName SOAPServicesPort -KeyValue 9046 -FORCE
netsh http add urlacl url=http://+:9047/INS_90CU10/ user= “NT AUTHORITY\NETWORK SERVICE” listen=yes delegate=no sddl=”D:(A;;GX;;;NS)”
Set-NAVServerConfiguration INS_90CU10 -KeyName ODataServicesPort -KeyValue 9047 -FORCE
Set-NAVServerConfiguration INS_90CU10 -KeyName managementServicesPort -KeyValue 9048

Open the CustomSettings.config file from the below path
C:\Program Files\Microsoft Dynamics NAV\90CU10\Service . check configuration of Database and Port numbers

go to <add key="ServerInstance" value="InstanceName"/>

change it to

 <add key="ServerInstance" value="INS_90CU6" />





Run Services.msc and Start the Service INS_90CU10








Friday 28 August 2015



RDLC REPORTING:
·         Display fixed decimal places =FormatNumber(ROUND(SUM(Fields!Line_CBM.value),3),3)
·         DISPLAY ONLY DATE: =format(Fields!Date.Value,"dd/MM/yyyy")
·         Display data on header nav 2009 rdlc

·         Add text box in body =Fields!COMPINFO_GSTREGNO.Value and set to hidden
Then go to header add textbox =reportitems!companyGstRegNo.Value
·         If the report is going to multiple blank pages set the Top ,Left,right and bottom margin in report properties.
·         Print new line
·         Fields!customeridname.Value & vbcrlf & Fields!address1_line1.Value & vbcrlf & Fields!address1_line2.Value & vbcrlf & Fields!address1_line3.Value


Hide Dublicate values in
=iif(Fields!YourField.Value = Previous(Fields!YourField.Value), True, False)






01/01/2001 AS MONTH YEAR
=Format(CDate(Fields!A.Value), "MMMM yyyy")







SSRS - Serial number for the group column

                We were developing a report which contain a group (grouped by Product) and the group contain a detail row in it. We wanted to show Serial Number for the Products, we trying to use RowNumber function in SSRS but it didn’t come up as expected.  Finally we found the solution from Web which was written by Bilal Hani- a Microsoft Community Contributor as how to “add serial number to grouping column in SSRS Tablix”.

1. Open the report properties (right click on blank area outside the layout and click properties) or (Menu-->Report-->Report Properties)
2. Click on the code pane on the left
3. In the code window enter below script
Dim Counter as integer=0
public function getGroupCounter() as Integer
 Counter=Counter+1
 return Counter
end function
4. Go to the properties of the group (based on which group you need the group serial number)
5. Click the variables tab on the left
6. Click on Add and set Name as GroupCountValue and set the expression (in the expression window) as =Code.getGroupCounter, click ok and close the window.
7. Now in the textbox where you want to display the group number, set the expression as =Variables!GroupCountValue.Value
Make 0 as blank

Iif(quantity=0,””,quantity)



Repeat Table Header on each page:

1)in the grouping pane, click on the small triangle and select "Advanced Mode" to show static members:
1.     verify that you have the properties grid turned on (in BI Development Studio use F4, in Report Builder go to the "View" tab and select "Properties")
 
2.     select the corresponding (static) item in the row group hierarchy
 
3.     in the properties grid:
- set KeepWithGroup to After
- set RepeatOnNewPage to true for repeating headers
- set FixedData to true for keeping headers visible





=======================================================================
Shared Data50000 as Object
               
Public Function GetData(Num as Integer, Group as integer) as Object
if Group = 50000 and Cstr(Choose(2, Split(Cstr(Data50000),Chr(177))))>"" then
   Return Cstr(Choose(Num, Split(Cstr(Data50000),Chr(177))))
end if
End Function

Public Function SetData(NewData as Object,Group as integer)
If Group = 50000 and NewData <> "" Then
      Data50000 = NewData
end if
End Function


In Body:(CustDet) and set to hidden
add expression
=Fields!BilltoCustomerNo_SalesHeader.Value+ chr(177) +
Fields!BilltoName_SalesHeader.Value+ chr(177)

In Header add expression
=code.SetData(reportitems!CustDet.Value, 50000)


Header Values

=code.GetData(1, 50000)
=code.GetData(2, 50000)





(Fields!GroupingField.Value = ReportItems!LastValueOfGroup.Value)





=====================================================================
RTC
======================================================================
RTC:
Add report in Page:

Add Cardpart in Card
Create a page as Cardpart and in designer after the Container add Group type indent the fields.
Make CardPart sourcetable primary key same as Card sourcetable
InCard source table on insert trigger add below code

IF NOT ins.GET("Document Type","No.") THEN
BEGIN
ins.INIT;
ins."Document Type":="Document Type";
ins."No.":="No.";
ins.INSERT;
END;





·         Make relationship between two pages (part)
User ProviderID
http://plataan.typepad.com/microsoftdynamics/2010/04/linking-parts-on-a-page-using-the-providerid-property.html








2)


Search for Salesperson is disabled.
Add a new secondary key (salesperson code) in the table

3) Nav 2009 RTC Add field in Header or Footer

Add a field in Body and give name to text box and change it to hidden

In Header or Footer add field expression as reportitems!field.Value






For Dates, the Regional and Language Options in Windows is used to select the actual format that is used. The table below shows the Fields that will be used to build the various formats. This table, incidentally, corresponds to the Regional setting for a European country/region.
Date
Format
Example
<Closing><Day,2>-<Month,2>-<Year>
0
05-04-03
<Closing><Day,2>-<Month,2>-<Year>
1
05-04-03
<Day,2><Month,2><Year><Closing>D
2
050403D
<Closing><Year>-<Month,2>-<Day,2>
3
03-04-05
<Closing><Day>. <Month Text> <Year4>
4
5. April 2003
<Closing><Day,2><Month,2><Year>
5
050403
<Closing><Year><Month,2><Day,2>
6
030405
<Day,2><Filler Character, >. <Month Text,3> <Year4>
7
5. Apr 2003
XML format
9
2003-04-05
The following table shows how these formats will change if the Regional and Language Options is set to "United States."
US Date
Format
Example
<Closing><Month,2>/<Day,2>/<Year>
0
04/05/03
<Closing><Month,2>/<Day,2>/<Year>
1
04/05/03
<Month,2><Day,2><Year><Closing>D
2
040503D
<Closing><Year>/<Month,2>/<Day,2>
3
03/04/05
<Month Text> <Closing><Day>, <Year4>
4
April 5, 2003
<Closing><Month,2><Day,2><Year>
5
040503
<Closing><Year><Month,2><Day,2>
6
030405
<Day,2><Filler Character, >. <Month Text,3> <Year4>
7
5. Apr 2003















use dotnet class Regex.
variables:
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
the code:
Match := Regex.Match('h123xxx', '\d+');  // text value = h123xxx
MESSAGE(Match.Value); // gives you 123




How to Set View Mode on Pages as Defau
...
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V

here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Function key
  WshShell.SendKeys('{F5}{F5}'); //Ctrl+Shift+E




Replace string function in Navision
ReplaceString(String:Text[250];FindWhat:Text[250];ReplaceWith:Text[250]) NewString:Text[250]

WHILE STRPOS(String,FindWhat) > 0 DO
  String := DELSTR(String,STRPOS(String,FindWhat)) + ReplaceWith +  COPYSTR(String,STRPOS(String,FindWhat) + STRLEN(FindWhat));
NewString := String;


Subform setselectionfilter:
Create a variable PurchaseLine
CurrPage . SETSELECTIONFILTER ( PurchaseLine ); 
// you can also test purposes here MESSAGE (FORMAT (PurchaseLine.COUNT)) settle. 
IF PurchaseLine . FindSet THEN BEGIN 
  REPEAT 
    
// whatever you intends test with the selected records 
  UNTIL PurchaseLine . NEXT  =  0 ; 
END ;

========================================================================
FILTER RECORDS ON PAGE

OnFindRecord(Which : Text[1024]) : Boolean
exit(find(which) and ShowThisRecord);

OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name         | DataType
ResultSteps  | Integer
then add the following code

REPEAT
  ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);

ShowThisRecord() : Boolean
g_recPH2.GET("Document Type","Document No.")
 IF g_recPH2."Assigned User ID" = USERID THEN
EXIT(TRUE)

===============================================================================



* NAV 2009 Run Report From RUN
Dynamicsnav:////runreport?report=50000

*Make relationship between two pages (part)
User ProviderID
http://plataan.typepad.com/microsoftdynamics/2010/04/linking-parts-on-a-page-using-the-providerid-property.html


RTC:
Attach report in Page:
g_recSH.GET("Document Type","No.");
CurrPage.SETSELECTIONFILTER(g_recSH);
REPORT.RUNMODAL(50000,TRUE,FALSE,g_recSH);

Or

CLEAR(g_recSIH);
g_recSIH.SETRECFILTER;

REPORT.RUNMODAL(REPORT::"Invoice",TRUE,FALSE,g_recSIH);


Add Cardpart in Card
Create a page as Cardpart and in designer after the Container add Group type indent the fields.
Make CardPart sourcetable primary key same as Card sourcetable
InCard source table on insert trigger add below code

IF NOT ins.GET("Document Type","No.") THEN
BEGIN
ins.INIT;
ins."Document Type":="Document Type";
ins."No.":="No.";
ins.INSERT;
END;


Search for Salesperson is disabled.
Add a new secondary key (salesperson code) in the table




use dotnet class Regex.
variables:
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
the code:
Match := Regex.Match('h123xxx', '\d+');  // text value = h123xxx
MESSAGE(Match.Value); // gives you 123




How to Set View Mode on Pages as Default
...
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V

here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Function key
  WshShell.SendKeys('{F5}{F5}'); //Ctrl+Shift+E









Replace string function in Navision
ReplaceString(String:Text[250];FindWhat:Text[250];ReplaceWith:Text[250]) NewString:Text[250]

WHILE STRPOS(String,FindWhat) > 0 DO
  String := DELSTR(String,STRPOS(String,FindWhat)) + ReplaceWith +  COPYSTR(String,STRPOS(String,FindWhat) + STRLEN(FindWhat));
NewString := String;


Subform setselectionfilter:
Create a variable PurchaseLine
CurrPage SETSELECTIONFILTER PurchaseLine );// you can also test purposes here MESSAGE (FORMAT (PurchaseLine.COUNT)) settle.IF PurchaseLine FindSet THEN BEGIN
  REPEAT
    
// whatever you intends test with the selected records  UNTIL PurchaseLine NEXT   0 ;END ;


FILTER RECORDS ON PAGE

OnFindRecord(Which : Text[1024]) : Boolean
exit(find(which) and ShowThisRecord);

OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name         | DataType
ResultSteps  | Integer
then add the following code

REPEAT
  ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);

ShowThisRecord() : Boolean
g_recPH2.GET("Document Type","Document No.")
 IF g_recPH2."Assigned User ID" = USERID THEN
EXIT(TRUE)