tag:blogger.com,1999:blog-90823200684608182732024-03-28T05:23:11.023+05:30My Dev TalksHasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.comBlogger57125tag:blogger.com,1999:blog-9082320068460818273.post-33558831587232196542022-11-10T19:33:00.000+05:302022-11-10T19:33:18.387+05:30Configure the Windows Firewall to Allow SQL Server Access<b style="background-color: #fefdfa; color: #333333; font-family: Cantarell; font-size: 16px;">Problem:</b><span style="background-color: #fefdfa; color: #333333; font-family: "cantarell"; font-size: 16px;"> A warning message is displayed in SQL Sever 2014 Setup "Install Rules" step.</span><br />
<span style="background-color: #fefdfa; color: #333333; font-family: "cantarell"; font-size: 16px;"><br /></span>
<span style="color: #333333; font-family: "cantarell";"><span style="background-color: #fefdfa;">Rule "Windows Firewall" generated a warning</span></span><br />
<span style="color: #333333; font-family: "cantarell";">The Windows firewall is enabled. Make sure the appropriate ports are open to enable remote access</span><span style="background-color: #fefdfa; color: #333333; font-family: "cantarell";">. See the rules' documentation at <a href="http://go.microsoft.com/fwlink/?LinkId=94001">http://go.microsoft.com/fwlink/?LinkId=94001</a> for information about ports to open for each feature. </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOJ6gdzICjP7rMVsFeYxsUf7mXexWz1EiCzvauzEBLKnQzsJr3F0E22kN10ScwGwV075P5VGGPErNKSpohgHoknzABOuhMUpmRYy9RJyRRMD5F5DBuI94bISJ41Y0QGbulcHzofGHgkw/s1600/sqlserver2014setupruleswarning.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="481" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOJ6gdzICjP7rMVsFeYxsUf7mXexWz1EiCzvauzEBLKnQzsJr3F0E22kN10ScwGwV075P5VGGPErNKSpohgHoknzABOuhMUpmRYy9RJyRRMD5F5DBuI94bISJ41Y0QGbulcHzofGHgkw/s640/sqlserver2014setupruleswarning.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrMfDRPPCd2CTPCGIYECo3TSt8y2RV9vl9sRPRRPkAy23esUzsSbPdU8mLGrIe6B-C_-O77L8NuGtDwU8iWv3n6ADrjJuxCHQUGj2NB5Jo9Y6ccLtkmgGXW7Ch62jTixt12kkIC0JZEA/s1600/sqlserver2014setupruleswarningmessage.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrMfDRPPCd2CTPCGIYECo3TSt8y2RV9vl9sRPRRPkAy23esUzsSbPdU8mLGrIe6B-C_-O77L8NuGtDwU8iWv3n6ADrjJuxCHQUGj2NB5Jo9Y6ccLtkmgGXW7Ch62jTixt12kkIC0JZEA/s400/sqlserver2014setupruleswarningmessage.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br style="background-color: #fefdfa; color: #333333; font-family: Cantarell; font-size: 16px;" />
<br style="background-color: #fefdfa; color: #333333; font-family: Cantarell; font-size: 16px;" />
<b style="background-color: #fefdfa; color: #333333; font-family: Cantarell; font-size: 16px;">Solution:</b><span style="background-color: #fefdfa;"><span style="color: #333333; font-family: "cantarell";"> Needs to open up relevant ports in the Windows firewall. In addition, some other parameters must be set depending on the components installed, the setup scenario, and the version of the SQL server.</span></span><br />
<br />
<span style="color: #333333; font-family: "cantarell";"><a href="https://msdn.microsoft.com/en-us/library/cc646023(v=sql.105).aspx">SQL Server 2008 R2 Specific Instructions</a></span><br />
<a href="https://msdn.microsoft.com/en-us/library/cc646023(v=sql.120).aspx">SQL Server 2014 Specific Instructions</a><br />
<a href="https://msdn.microsoft.com/en-us/library/cc646023(v=sql.130).aspx"><span style="color: #333333; font-family: "cantarell";">SQL Server 2016 </span>Specific Instructions</a><br />
<br style="background-color: #fefdfa; color: #333333; font-family: Cantarell;" />
<b style="background-color: #fefdfa; color: #333333; font-family: Cantarell; font-size: 16px;">Steps: </b><span style="background-color: #fefdfa; color: #333333; font-family: "cantarell"; font-size: 16px;">To pass the Installation Rules step of the SQL server 2014 setup, open up port 1433.</span><br />
<span style="background-color: #fefdfa; color: #333333; font-family: "cantarell"; font-size: 16px;"><br /></span>
<span style="background-color: #fefdfa; color: #333333; font-family: "cantarell"; font-size: 16px;"> </span><span style="color: #333333; font-family: "cantarell";"> 1. Go To Windows Firewall</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQku81xBotPo0Mx79fCWvONm7XtD8fYfVsv6akk5JPJ5IZh4x4ddnxwOQtKOrcOSm7YSVVZHdy1Mr_IUwFJvyo29UhFshskevH9ovDyjg_FmqKms_9V3KlZv_eund_-BcwWpMjMX2Iyw/s1600/windowsFirewall.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQku81xBotPo0Mx79fCWvONm7XtD8fYfVsv6akk5JPJ5IZh4x4ddnxwOQtKOrcOSm7YSVVZHdy1Mr_IUwFJvyo29UhFshskevH9ovDyjg_FmqKms_9V3KlZv_eund_-BcwWpMjMX2Iyw/s640/windowsFirewall.png" width="640" /></a></div>
<span style="color: #333333; font-family: "cantarell";"><br /></span>
<span style="color: #333333; font-family: "cantarell";"><br /></span>
<span style="color: #333333; font-family: "cantarell";">Then click on <b>Advanced Settings</b> in the Allowed Apps window.</span><br />
<span style="color: #333333; font-family: "cantarell";"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_gbv9Ku81VkJefvPlKc5tTcEs6dFlFdqD54N66Bn1iCKTCoGKjxnNzLxWS279hHIRwBGxCRwGtraFDrkWNBmf1MgTPhuOGcKr4a4sEzPnDBTTBG-BpgU1NhoHzRlzV8OmHKGmONJGYw/s1600/windowsFirewallchangesettings.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_gbv9Ku81VkJefvPlKc5tTcEs6dFlFdqD54N66Bn1iCKTCoGKjxnNzLxWS279hHIRwBGxCRwGtraFDrkWNBmf1MgTPhuOGcKr4a4sEzPnDBTTBG-BpgU1NhoHzRlzV8OmHKGmONJGYw/s640/windowsFirewallchangesettings.png" width="640" /></a></div>
<span style="color: #333333; font-family: "cantarell";"><br /></span>
<span style="color: #333333; font-family: "cantarell";">Click on <b>Allow another App..</b></span><br />
<span style="color: #333333; font-family: "cantarell";"><b><br /></b></span>Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-59246327338410049232022-11-10T18:28:00.004+05:302022-11-10T19:13:57.243+05:30Create a basic Virtual Machine using Azure CLI<!--HTML generated using hilite.me-->
<div>First, create a resource group</div><div><br /></div><div style="text-align: left;"><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><div style="line-height: 16.25px; margin-bottom: 0px; margin-top: 0px; text-align: left;">> <span style="font-family: courier;">az group create \<br /></span><span style="font-family: courier;"> --name MyResourceGroup \<br /></span><span style="font-family: courier;"> --location CentralUS \<br /></span><span style="font-family: courier;"> --tags MyTag </span></div></div><div><br /></div></div><div style="text-align: left;">Then create the VM and provide the resource group created in the above step</div><div><br /></div>
<div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; text-align: left; width: auto;"><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">> az vm create \<br /></span><span style="font-family: courier;">--name MyFirstVM \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--resource-group </span><span style="font-family: courier;">MyResourceGroup \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--image Win2016Datacenter \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--admin-username Hasitha \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--admin-password Password*1234 \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--size Standard_D2ads_v5 \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--public-ip-sku basic \</span></p><p style="line-height: 125%; margin: 0px;"><span style="font-family: courier;">--os-disk-size-gb 128 </span></p></div>
<div style="text-align: left;"><br /></div><div style="text-align: left;"> </div>Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-36945610195187744662022-10-18T08:59:00.003+05:302022-11-10T19:37:25.520+05:30Troubleshooting MSI Installer <!--HTML generated using hilite.me--><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;">msiexec /i my_installer.msi /l*v install.log</pre></div>
<div><br /></div><div>
This will create an install.log file on the same folder and should include more detailed info about what went wrong.
</div>Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-87327496589550135722020-11-04T15:52:00.001+05:302020-11-04T15:52:56.284+05:30C# Convert Time Zone Value<!--HTML generated using hilite.me--><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;"> DateTime nzTime = <span style="color: blue;">new</span> DateTime(System.DateTime.Now.Year, System.DateTime.Now.Month,
System.DateTime.Now.Day,
System.DateTime.Now.Hour,
System.DateTime.Now.Minute,
System.DateTime.Now.Second);
<span style="color: #2b91af;">string</span> lkZoneId = <span style="color: #a31515;">"Sri Lanka Standard Time"</span>;
Console.WriteLine(<span style="border: 1px solid rgb(255, 0, 0);">$</span><span style="color: #a31515;">"The date and time value for {lkZoneId} : </span></pre><pre style="line-height: 125%; margin: 0px;"><span style="color: #a31515;"><span> </span><span> </span><span> </span><span> </span>{TimeZoneInfo.ConvertTimeBySystemTimeZoneId(nzTime, lkZoneId)}"</span>);
</pre></div>
Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-67540404829403937492020-10-08T08:46:00.002+05:302020-10-08T08:46:37.522+05:30Text to Speech using Google TTS APIs<!--HTML generated using hilite.me--><div style="background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 125%; margin: 0px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Google.Cloud.TextToSpeech.V1</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.IO</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Linq</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Threading</span>;
<span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">QuickStart</span>
{
<span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Program</span>
{
<span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Main</span>(<span style="color: #333399; font-weight: bold;">string</span>[] args)
{
<span style="color: #888888;">// Check whether the environment variable exists.</span>
<span style="color: #333399; font-weight: bold;">var</span> <span style="color: #008800; font-weight: bold;">value</span> = Environment.GetEnvironmentVariable(<span style="background-color: #fff0f0;">@"GOOGLE_APPLICATION_CREDENTIALS"</span>);
<span style="color: #888888;">// If necessary, create it.</span>
<span style="color: #008800; font-weight: bold;">if</span> (<span style="color: #008800; font-weight: bold;">value</span> == <span style="color: #008800; font-weight: bold;">null</span>)
{
Environment.SetEnvironmentVariable(<span style="background-color: #fff0f0;">"GOOGLE_APPLICATION_CREDENTIALS"</span>, <span style="background-color: #fff0f0;">@"C:\Google\My First Project-22f4c7c8ac46.json"</span>);
<span style="color: #888888;">// Now retrieve it.</span>
<span style="color: #008800; font-weight: bold;">value</span> = Environment.GetEnvironmentVariable(<span style="background-color: #fff0f0;">"GOOGLE_APPLICATION_CREDENTIALS"</span>);
}
GetListOfVoices();
<span style="color: #888888;">// Instantiate a client</span>
TextToSpeechClient client = TextToSpeechClient.Create();
<span style="color: #888888;">// Set the text input to be synthesized.</span>
SynthesisInput input = <span style="color: #008800; font-weight: bold;">new</span> SynthesisInput
{
Text = <span style="background-color: #fff0f0;">"hi!!!!...... it's a nice day"</span>
};
<span style="color: #888888;">// Build the voice request, select the language code ("en-US"),</span>
<span style="color: #888888;">// and the SSML voice gender ("neutral").</span>
VoiceSelectionParams voice = <span style="color: #008800; font-weight: bold;">new</span> VoiceSelectionParams
{
LanguageCode = <span style="background-color: #fff0f0;">"en-IN"</span>,
SsmlGender = SsmlVoiceGender.Male,
Name = <span style="background-color: #fff0f0;">"en-IN-Wavenet-C"</span>
};
<span style="color: #888888;">// Select the type of audio file you want returned.</span>
AudioConfig config = <span style="color: #008800; font-weight: bold;">new</span> AudioConfig
{
AudioEncoding = AudioEncoding.Linear16
};
<span style="color: #888888;">// Perform the Text-to-Speech request, passing the text input</span>
<span style="color: #888888;">// with the selected voice parameters and audio file type</span>
<span style="color: #333399; font-weight: bold;">var</span> response = client.SynthesizeSpeech(<span style="color: #008800; font-weight: bold;">new</span> SynthesizeSpeechRequest
{
Input = input,
Voice = voice,
AudioConfig = config,
});
<span style="color: #888888;">// Write the binary AudioContent of the response to an Wave file.</span>
<span style="color: #333399; font-weight: bold;">string</span> outPutFile = <span style="background-color: #fff0f0;">@"C:\Google\ItsaNiceDay.wav"</span>;
<span style="color: #008800; font-weight: bold;">using</span> (Stream output = File.Create(outPutFile))
{
response.AudioContent.WriteTo(output);
Console.WriteLine(<span style="background-color: #ffaaaa; color: red;">$</span><span style="background-color: #fff0f0;">"Audio content written to file '{outPutFile}'"</span>);
}
<span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">Thread</span>(() => {
System.Media.SoundPlayer player = <span style="color: #008800; font-weight: bold;">new</span> System.Media.SoundPlayer(outPutFile);
player.Play();
}).Start();
Console.ReadLine();
}
<span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">GetListOfVoices</span>()
{
<span style="color: #888888;">// Create client</span>
TextToSpeechClient textToSpeechClient = TextToSpeechClient.Create();
<span style="color: #888888;">// Initialize request argument(s)</span>
ListVoicesRequest request = <span style="color: #008800; font-weight: bold;">new</span> ListVoicesRequest { LanguageCode = <span style="background-color: #fff0f0;">""</span>, };
<span style="color: #888888;">// Make the request</span>
<span style="color: #333399; font-weight: bold;">var</span> response = textToSpeechClient.ListVoices(request);
Console.WriteLine(<span style="background-color: #fff0f0;">"List of voices supported"</span>);
response.Voices.ToList().ForEach( v => Console.WriteLine(<span style="background-color: #ffaaaa; color: red;">$</span><span style="background-color: #fff0f0;">"Name:{v.Name} Gender:{v.SsmlGender}, LanguageCodes:{v.LanguageCodes}"</span>));
}
}
}
</pre></div>
Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-59115581109772840702020-09-24T07:47:00.004+05:302020-11-04T15:54:28.208+05:30Search for a Value in a given SQL Database <!-- HTML generated using hilite.me --><div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%">USE <MyDatabase>
<span style="color: #0000ff">DECLARE</span> @SearchStr NVARCHAR(100)
<span style="color: #0000ff">SET</span> @SearchStr = <span style="color: #a31515">'Text I want to Search'</span>
<span style="color: #0000ff">CREATE</span> <span style="color: #0000ff">TABLE</span> #results
(
columnname NVARCHAR(370),
columnvalue NVARCHAR(3630)
)
<span style="color: #0000ff">SET</span> nocount <span style="color: #0000ff">ON</span>
<span style="color: #0000ff">DECLARE</span> @TableName NVARCHAR(256),
@ColumnName NVARCHAR(128),
@SearchStr2 NVARCHAR(110)
<span style="color: #0000ff">SET</span> @TableName = <span style="color: #a31515">''</span>
<span style="color: #0000ff">SET</span> @SearchStr2 = Quotename(<span style="color: #a31515">'%'</span> + @SearchStr + <span style="color: #a31515">'%'</span>, <span style="color: #a31515">''''</span>)
WHILE @TableName <span style="color: #0000ff">IS</span> <span style="color: #0000ff">NOT</span> <span style="color: #0000ff">NULL</span>
<span style="color: #0000ff">BEGIN</span>
<span style="color: #0000ff">SET</span> @ColumnName = <span style="color: #a31515">''</span>
<span style="color: #0000ff">SET</span> @TableName = (<span style="color: #0000ff">SELECT</span> <span style="color: #0000ff">Min</span>(Quotename(table_schema) + <span style="color: #a31515">'.'</span>
+ Quotename(<span style="color: #0000ff">table_name</span>))
<span style="color: #0000ff">FROM</span> information_schema.tables
<span style="color: #0000ff">WHERE</span> table_type = <span style="color: #a31515">'BASE TABLE'</span>
<span style="color: #0000ff">AND</span> Quotename(table_schema) + <span style="color: #a31515">'.'</span>
+ Quotename(<span style="color: #0000ff">table_name</span>) > @TableName
<span style="color: #0000ff">AND</span> Objectproperty(Object_id(Quotename(
table_schema
) +
<span style="color: #a31515">'.'</span>
+ Quotename(
<span style="color: #0000ff">table_name</span>
)),
<span style="color: #a31515">'IsMSShipped'</span>) =
0)
WHILE ( @TableName <span style="color: #0000ff">IS</span> <span style="color: #0000ff">NOT</span> <span style="color: #0000ff">NULL</span> )
<span style="color: #0000ff">AND</span> ( @ColumnName <span style="color: #0000ff">IS</span> <span style="color: #0000ff">NOT</span> <span style="color: #0000ff">NULL</span> )
<span style="color: #0000ff">BEGIN</span>
<span style="color: #0000ff">SET</span> @ColumnName = (<span style="color: #0000ff">SELECT</span> <span style="color: #0000ff">Min</span>(Quotename(<span style="color: #0000ff">column_name</span>))
<span style="color: #0000ff">FROM</span> information_schema.columns
<span style="color: #0000ff">WHERE</span> table_schema = Parsename(@TableName, 2)
<span style="color: #0000ff">AND</span> <span style="color: #0000ff">table_name</span> = Parsename(@TableName, 1)
<span style="color: #0000ff">AND</span> data_type <span style="color: #0000ff">IN</span> ( <span style="color: #a31515">'char'</span>, <span style="color: #a31515">'varchar'</span>,
<span style="color: #a31515">'nchar'</span>,
<span style="color: #a31515">'nvarchar'</span>,
<span style="color: #a31515">'int'</span>, <span style="color: #a31515">'decimal'</span> )
<span style="color: #0000ff">AND</span> Quotename(<span style="color: #0000ff">column_name</span>) > @ColumnName)
IF @ColumnName <span style="color: #0000ff">IS</span> <span style="color: #0000ff">NOT</span> <span style="color: #0000ff">NULL</span>
<span style="color: #0000ff">BEGIN</span>
<span style="color: #0000ff">INSERT</span> <span style="color: #0000ff">INTO</span> #results
<span style="color: #0000ff">EXEC</span> ( <span style="color: #a31515">'SELECT '''</span> + @TableName + <span style="color: #a31515">'.'</span> + @ColumnName +
<span style="color: #a31515">''', LEFT('</span> +
@ColumnName
+ <span style="color: #a31515">', 3630) FROM '</span> + @TableName + <span style="color: #a31515">' (NOLOCK) '</span> + <span style="color: #a31515">' WHERE '</span> +
@ColumnName +
<span style="color: #a31515">' LIKE '</span> + @SearchStr2 )
<span style="color: #0000ff">END</span>
<span style="color: #0000ff">END</span>
<span style="color: #0000ff">END</span>
<span style="color: #0000ff">SELECT</span> columnname,
columnvalue
<span style="color: #0000ff">FROM</span> #results
<span style="color: #0000ff">DROP</span> <span style="color: #0000ff">TABLE</span> #results
</pre></div>
Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-50083485815275886032020-08-23T04:02:00.007+05:302020-08-23T07:28:53.600+05:30Creating first Blazor app with Experimental Mobile Blazor Bindings and Blazor Hybrid templates<p> MSDN Article as of mid of 2020: <a href="https://docs.microsoft.com/en-us/mobile-blazor-bindings/get-started">https://docs.microsoft.com/en-us/mobile-blazor-bindings/get-started</a></p><p>I have noticed that installing the project templates is slightly different from what is mentioned in the above article.</p><h3 style="text-align: left;">Using <b>mobileblazorbindings template</b></h3><div><b><br /></b></div><div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 16.25px;"><span style="color: #0000cc;">dotnet new mobileblazorbindings -o MyMobileBlazorApp</span></pre></div><div style="text-align: center;"><br /></div><p><img alt="" height="167" src="data:image/png;base64,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" width="862" /></p><p><br /></p><h3>Using blazorhybrid template</h3><div><br /></div><div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 16.25px;"><span style="color: #0000cc;">dotnet new blazorhybrid -o MyHybridApp</span></pre></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><img alt="" height="170" src="data:image/png;base64,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" width="865" /></div><div style="text-align: center;"><br /></div><div style="text-align: left;"><br /></div><h2 style="text-align: left;"><span style="font-size: medium;">Preview - Windows App</span></h2><div style="text-align: left;"><img alt="" height="389" src="data:image/png;base64,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FNAK16YLVx+qrD9YqrVwmIcAAQIECBAgQIAAAQIECBAgQIBAREABrYBWQHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7uB17uBe/SotXCYhwABAgQIECBAgAABAgQIECBAgEBEQAGtgLYDuqMMRBYFYwgQIECAAAECBAgQIECAAAECBAjUEsgF9A9/87sHXwxkoO0M1Fo4zEOAAAECBAgQIECAAAECBAgQIEAgIqCAVrz74KGjDEQWBWMIECBAgAABAgQIECBAgAABAgQI1BJQQHdUPtrd3Pbu5sj1rbVwmIcAAQIECBAgQIAAAQIECBAgQIBARKAooN81/PA3+2IgAy1nILIoGEOAAAECBAgQIECAAAECBAgQIECgloACWunug4eOMlBr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAArqj8rHlnb3OLbZzPbIoGEOAAAECBAgQIECAAAECBAgQIECgloACWgFtB3RHGai1cJiHAAECBAgQIECAAAECBAgQIECAQERgKaDf+K7hh30xkIGmMxBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEsgF9D/6o3vGnwxkIG2M1Br4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAlrx7oOHjjIQWRSMIUCAAAECBAgQIECAAAECBAgQIFBLQAHdUflod3Pbu5sj17fWwmEeAgQIECBAgAABAgQIECBAgAABAhEBBbQC2g7ojjIQWRSMIUCAAAECBAgQIECAAAECBAgQIFBLQAHdUfkY2SFrTNu7pGstHOYhQIAAAQIECBAgQIAAAQIECBAgEBFQQCug7YDuKAORRcEYAgQIECBAgAABAgQIECBAgAABArUEFNAdlY92N7e9uzlyfWstHOYhQIAAAQIECBAgQIAAAQIECBAgEBHIBfRb3/iuwRcDGWg7A5FFwRgCBAgQIECAAAECBAgQIECAAAECtQSKAvpXhre+0RcDGWg5A7UWDvMQIECAAAECBAgQIECAAAECBAgQiAgooJXuPnjoKAORRcEYAgQIECBAgAABAgQIECBAgAABArUEFNAdlY8t7+x1brGd67UWDvMQIECAAAECBAgQIECAAAECBAgQiAgsBfQbfmV4qy8GMtB0BiKLgjEECBAgQIAAAQIECBAgQIAAAQIEagkooBWuTReuPlRZf7BUa+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAa2A7igDkUXBGAIECBAgQIAAAQIECBAgQIAAAQK1BHIB/SNv+JXBFwMZaDsDtRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFe8+eOgoA5FFwRgCBAgQIECAAAECBAgQIECAAAECtQQU0B2Vj3Y3t727OXJ9ay0c5iFAgAABAgQIECBAgAABAgQIECAQEVBAK6DtgO4oA5FFwRgCBAgQIECAAAECBAgQIECAAAECtQQU0B2Vj5Edssa0vUu61sJhHgIECBAgQIAAAQIECBAgQIAAAQIRAQW0AtoO6I4yEFkUjCFAgAABAgQIECBAgAABAgQIECBQS6AooN85/MgbfDGQgZYzUGvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWunug4eOMhBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEsgF9A/+oZ3Dr4YyEDbGai1cJiHAAECBAgQIECAAAECBAgQIECAQERgKaC/6Z3Dj/piIANNZyCyKBhDgAABAgQIECBAgAABAgQIECBAoJaAAlrh2nTh6kOV9QdLtRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdAK6I4yEFkUjCFAgAABAgQIECBAgAABAgQIECBQS0AB3VH5aDfwejdwjx61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECATnI6jAAAIABJREFUAAECBAgQIECAAIFaAgrojsrHHnf8Ouf1ru9aC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEcgH9Y9/0zsEXAxloOwORRcEYAgQIECBAgAABAgQIECBAgAABArUEFNCKdx88dJSBWguHeQgQIECAAAECBAgQIECAAAECBAhEBBTQHZWPdje3vbs5cn0ji4IxBAgQIECAAAECBAgQIECAAAECBGoJFAX0O4Yf+yZfDGSg5QzUWjjMQ4AAAQIECBAgQIAAAQIECBAgQCAioIBWuvvgoaMMRBYFYwgQIECAAAECBAgQIECAAAECBAjUElBAd1Q+tryz17nFdq7XWjjMQ4AAAQIECBAgQIAAAQIECBAgQCAisBTQr3/H8GO+GMhA0xmILArGECBAgAABAgQIECBAgAABAgQIEKgloIBWuDZduPpQZf3BUq2FwzwECBAgQIAAAQIECBAgQIAAAQIEIgK5gP7Xr3/H4IuBDLSdgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIKaMW7Dx46ykCthcM8BAgQIECAAAECBAgQIECAAAECBCICCuiOyke7m9ve3Ry5vpFFwRgCBAgQIECAAAECBAgQIECAAAECtQQU0ApoO6A7ykCthcM8BAgQIECAAAECBAgQIECAAAECBCICCuiOysfIDllj2t4lHVkUjCFAgAABAgQIECBAgAABAgQIECBQS0ABrYC2A7qjDNRaOMxDgAABAgQIECBAgAABAgQIECBAICKggO6ofLS7ue3dzZHrG1kUjCFAgAABAgQIECBAgAABAgQIECBQSyAX0D/++ncMvhjIQNsZqLVwmIcAAQIECBAgQIAAAQIECBAgQIBARKAooH95+PHX+2IgAy1nILIoGEOAAAECBAgQIECAAAECBAgQIECgloACWunug4eOMlBr4TAPAQIECBAgQIAAAQIECBAgQIAAgYjAUkB/4y8PP+6LgQw0nYHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCmiFa9OFqw9V1h8s1Vo4zEOAAAECBAgQIECAAAECBAgQIEAgIqCAVkAroDvKQGRRMIYAAQIECBAgQIAAAQIECBAgQIBALQEFdEflo93A693APXrUWjjMQ4AAAQIECBAgQIAAAQIECBAgQCAioIBWQNsB3VEGIouCMQQIECBAgAABAgQIECBAgAABAgRqCeQC+ie+8ZcHXwxkoO0M1Fo4zEOAAAECBAgQIECAAAECBAgQIEAgIqCAVrz74KGjDEQWBWMIECBAgAABAgQIECBAgAABAgQI1BJQQHdUPtrd3Pbu5sj1rbVwmIcAAQIECBAgQIAAAQIECBAgQIBAREABrYC2A7qjDEQWBWMIECBAgAABAgQIECBAgAABAgQI1BJQQHdUPkZ2yBrT9i7pWguHeQgQIECAAAECBAgQIECAAAECBAhEBIoC+peGn/hGXwxkoOUMRBYFYwgQIECAAAECBAgQIECAAAECBAjUElBAK9198NBRBmotHOYhQIAAAQIECBAgQIAAAQIECBAgEBHIBfS/+YZfGnwxkIG2MxBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEtAAa1498FDRxmotXCYhwABAgQIECBAgAABAgQIECBAgEBEQAHdUflod3Pbu5sj1zeyKBhDgAABAgQIECBAgAABAgQIECBAoJaAAloBbQd0RxmotXCYhwABAgQIECBAgAABAgQIECBAgEBEQAHdUfkY2SFrTNu7pCOLgjEECBAgQIAAAQIECBAgQIAAAQIEagkooBXQdkB3lIFaC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEFNAdlY92N7e9uzlyfSOLgjEECBAgQIAAAQIECBAgQIAAAQIEagnkAvonv+GXBl8MZKDtDNRaOMxDgAABAgQIECBAgAABAgQIECBAICKggFa8++ChowxEFgVjCBAgQIAAAQIECBAgQIAAAQIECNQSUEB3VD7a3dz27ubI9a21cJiHAAECBAgQIECAAAECBAgQIECAQESgKKDfPvzkN/hiIAMtZyCyKBhDgAABAgQIECBAgAABAgQIECBAoJaAAlrp7oOHjjJQa+EwDwECBAgQIECAAAECBAgQIECAAIGIwFJAv+7tw0/6YiADTWcgsigYQ4AAAQIECBAgQIAAAQIECBAgQKCWgAJa4dp04epDlfUHS7UWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQCuiOMhBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEsgF9A/9bq3D74YyEDbGai1cJiHAAECBAgQIECAAAECBAgQIECAQERAAa1498FDRxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAjkAvqnX/f2wRcDGWg7A5FFwRgCBAgQIECAAAECBAgQIECAAAECtQSKAvoXh59+nS8GMtByBmotHOYhQIAAAQIECBAgQIAAAQIECBAgEBFYCuiv/8Xhp30xkIGmMxBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEtAAa1wbbpw9aHK+oOlWguHeQgQIECAAAECBAgQIECAAAECBAhEBBTQCmgFdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tBt4vRu4R49aC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEFNAKaDugO8pAZFEwhgABAgQIECBAgAABAgQIECBAgEAtAQV0R+Vjjzt+nfN613ethcM8BAgQIECAAAECBAgQIECAAAECBCICuYD+ma//xcEXAxloOwORRcEYAgQIECBAgAABAgQIECBAgAABArUEFNCKdx88dJSBWguHeQgQIECAAAECBAgQIECAAAECBAhEBBTQHZWPdje3vbs5cn0ji4IxBAgQIECAAAECBAgQIECAAAECBGoJKKAV0HZAd5SBWguHeQgQIECAAAECBAgQIECAAAECBAhEBBTQHZWPkR2yxrS9SzqyKBhDgAABAgQIECBAgAABAgQIECBAoJZAUUA/NvzM1/tiIAMtZ6DWwmEeAgQIECBAgAABAgQIECBAgAABAhGBpYD+useGn/HFQAaazkBkUTCGAAECBAgQIECAAAECBAgQIECAQC2BXED/2697bPDFQAbazkCthcM8BAgQIECAAAECBAgQIECAAAECBCICCmjFuw8eOspAZFEwhgABAgQIECBAgAABAgQIECBAgEAtAQV0R+Wj3c1t726OXN9aC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEFNAKaDugO8pAZFEwhgABAgQIECBAgAABAgQIECBAgEAtAQV0R+VjZIesMW3vkq61cJiHAAECBAgQIECAAAECBAgQIECAQERAAa2AtgO6owxEFgVjCBAgQIAAAQIECBAgQIAAAQIECNQSUEB3VD7a3dz27ubI9a21cJiHAAECBAgQIECAAAECBAgQIECAQERAAa2AtgO6owxEFgVjCBAgQIAAAQIECBAgQIAAAQIECNQSyAX0o1/32OCLgQy0nYFaC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEFNCKdx88dJSByKJgDAECBAgQIECAAAECBAgQIECAAIFaAksB/bW/MDzqi4EMNJ2BWguHeQgQIECAAAECBAgQIECAAAECBAhEBBTQCtemC1cfqqw/WIosCsYQIECAAAECBAgQIECAAAECBAgQqCWggFZAK6A7ykCthcM8BAgQIECAAAECBAgQIECAAAECBCICCuiOyke7gde7gXv0iCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCAVkDbAd1RBmotHOYhQIAAAQIECBAgQIAAAQIECBAgEBHIBfS/+9pfGHwxkIG2MxBZFIwhQIAAAQIECBAgQIAAAQIECBAgUEtAAa1498FDRxmotXCYhwABAgQIECBAgAABAgQIECBAgEBEQAHdUflod3Pbu5sj1zeyKBhDgAABAgQIECBAgAABAgQIECBAoJaAAloBbQd0RxmotXCYhwABAgQIECBAgAABAgQIECBAgEBEQAHdUfkY2SFrTNu7pCOLgjEECBAgQIAAAQIECBAgQIAAAQIEagkooBXQdkB3lIFaC4d5CBAgQIAAAQIECBAgQIAAAQIECEQEFNAdlY92N7e9uzlyfSOLgjEECBAgQIAAAQIECBAgQIAAAQIEagnkAvrff+0vDL4YyEDbGai1cJiHAAECBAgQIECAAAECBAgQIECAQERAAa1498FDRxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgAAajrVqAAAE0klEQVSBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHy0u7nt3c2R61tr4TAPAQIECBAgQIAAAQIECBAgQIAAgYiAAloBbQd0RxmILArGECBAgAABAgQIECBAgAABAgQIEKgloIDuqHyM7JA1pu1d0rUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOyke7m9ve3Ry5vrUWDvMQIECAAAECBAgQIECAAAECBAgQiAgooBXQdkB3lIHIomAMAQIECBAgQIAAAQIECBAgQIAAgVoCCuiOysfIDllj2t4lXWvhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofLS7ue3dzZHrW2vhMA8BAgQIECBAgAABAgQIECBAgACBiIACWgFtB3RHGYgsCsYQIECAAAECBAgQIECAAAECBAgQqCWggO6ofIzskDWm7V3StRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7KR7ub297dHLm+tRYO8xAgQIAAAQIECBAgQIAAAQIECBCICCigFdB2QHeUgciiYAwBAgQIECBAgAABAgQIECBAgACBWgIK6I7Kx8gOWWPa3iVda+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8tLu57d3Nketba+EwDwECBAgQIECAAAECBAgQIECAAIGIgAJaAW0HdEcZiCwKxhAgQIAAAQIECBAgQIAAAQIECBCoJaCA7qh8jOyQNabtXdK1Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojspHu5vb3t0cub61Fg7zECBAgAABAgQIECBAgAABAgQIEIgIKKAV0HZAd5SByKJgDAECBAgQIECAAAECBAgQIECAAIFaAgrojsrHyA5ZY9reJV1r4TAPAQIECBAgQIAAAQIECBAgQIAAgYhALqDH3/hiIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyUDMD/x+7TZwQnmSb6wAAAABJRU5ErkJggg==" width="738" /></div><div style="text-align: center;"><br /></div><div style="text-align: center;"><br /></div>Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-536439130461289072020-08-22T06:18:00.001+05:302020-08-22T06:18:05.656+05:30SQL Script to clean all non system database Objects<div style="background: rgb(255, 255, 255); border: solid gray; font-family: "times new roman"; overflow: auto; padding: 0.2em 0.6em; width: auto;"><pre style="line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><br /></pre><pre style="line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><pre style="color: #333333; line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><span style="color: #008800; font-weight: bold;">USE</span> [<My Database>]</pre><pre style="color: #333333; line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><br /></pre></pre><pre style="line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><span face="" style="font-family: "courier new";"><pre style="color: #333333; line-height: 16.25px; margin-bottom: 0px; margin-top: 0px;"><span style="color: #888888;">/* Drop all non-system stored procs */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'P'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
WHILE @name <span style="color: #008800; font-weight: bold;">is</span> <span style="color: #008800; font-weight: bold;">not</span> <span style="color: #008800; font-weight: bold;">null</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'DROP PROCEDURE [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped Procedure: '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'P'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">AND</span> [name] > @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span>
<span style="color: #888888;">/* Drop all views */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'V'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
WHILE @name <span style="color: #008800; font-weight: bold;">IS</span> <span style="color: #008800; font-weight: bold;">NOT</span> <span style="color: #008800; font-weight: bold;">NULL</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'DROP VIEW [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped View: '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'V'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">AND</span> [name] > @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span>
<span style="color: #888888;">/* Drop all functions */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] <span style="color: #008800; font-weight: bold;">IN</span> (N<span style="background-color: #fff0f0;">'FN'</span>, N<span style="background-color: #fff0f0;">'IF'</span>, N<span style="background-color: #fff0f0;">'TF'</span>, N<span style="background-color: #fff0f0;">'FS'</span>, N<span style="background-color: #fff0f0;">'FT'</span>) <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
WHILE @name <span style="color: #008800; font-weight: bold;">IS</span> <span style="color: #008800; font-weight: bold;">NOT</span> <span style="color: #008800; font-weight: bold;">NULL</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'DROP FUNCTION [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped Function: '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] <span style="color: #008800; font-weight: bold;">IN</span> (N<span style="background-color: #fff0f0;">'FN'</span>, N<span style="background-color: #fff0f0;">'IF'</span>, N<span style="background-color: #fff0f0;">'TF'</span>, N<span style="background-color: #fff0f0;">'FS'</span>, N<span style="background-color: #fff0f0;">'FT'</span>) <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">AND</span> [name] > @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span>
<span style="color: #888888;">/* Drop all Foreign Key constraints */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'FOREIGN KEY'</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span>)
WHILE @name <span style="color: #008800; font-weight: bold;">is</span> <span style="color: #008800; font-weight: bold;">not</span> <span style="color: #008800; font-weight: bold;">null</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">constraint</span> = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'FOREIGN KEY'</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> = @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span>)
WHILE @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #008800; font-weight: bold;">IS</span> <span style="color: #008800; font-weight: bold;">NOT</span> <span style="color: #008800; font-weight: bold;">NULL</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'ALTER TABLE [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">'] DROP CONSTRAINT ['</span> + RTRIM(@<span style="color: #008800; font-weight: bold;">constraint</span>) +<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped FK Constraint: '</span> + @<span style="color: #008800; font-weight: bold;">constraint</span> + <span style="background-color: #fff0f0;">' on '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">constraint</span> = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'FOREIGN KEY'</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <> @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> = @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span>)
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'FOREIGN KEY'</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span>)
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span>
<span style="color: #888888;">/* Drop all Primary Key constraints */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'PRIMARY KEY'</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span>)
WHILE @name <span style="color: #008800; font-weight: bold;">IS</span> <span style="color: #008800; font-weight: bold;">NOT</span> <span style="color: #008800; font-weight: bold;">NULL</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">constraint</span> = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'PRIMARY KEY'</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> = @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span>)
WHILE @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #008800; font-weight: bold;">is</span> <span style="color: #008800; font-weight: bold;">not</span> <span style="color: #008800; font-weight: bold;">null</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'ALTER TABLE [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">'] DROP CONSTRAINT ['</span> + RTRIM(@<span style="color: #008800; font-weight: bold;">constraint</span>)+<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped PK Constraint: '</span> + @<span style="color: #008800; font-weight: bold;">constraint</span> + <span style="background-color: #fff0f0;">' on '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">constraint</span> = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'PRIMARY KEY'</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span> <> @<span style="color: #008800; font-weight: bold;">constraint</span> <span style="color: #008800; font-weight: bold;">AND</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> = @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">CONSTRAINT_NAME</span>)
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span> <span style="color: #008800; font-weight: bold;">FROM</span> INFORMATION_SCHEMA.TABLE_CONSTRAINTS <span style="color: #008800; font-weight: bold;">WHERE</span> <span style="color: #008800; font-weight: bold;">constraint_catalog</span>=DB_NAME() <span style="color: #008800; font-weight: bold;">AND</span> CONSTRAINT_TYPE = <span style="background-color: #fff0f0;">'PRIMARY KEY'</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> <span style="color: #008800; font-weight: bold;">TABLE_NAME</span>)
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span>
<span style="color: #888888;">/* Drop all tables */</span>
<span style="color: #008800; font-weight: bold;">DECLARE</span> @name <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">128</span>)
<span style="color: #008800; font-weight: bold;">DECLARE</span> @<span style="color: #008800; font-weight: bold;">SQL</span> <span style="color: #007020;">VARCHAR</span>(<span style="color: #0000dd; font-weight: bold;">254</span>)
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'U'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
WHILE @name <span style="color: #008800; font-weight: bold;">IS</span> <span style="color: #008800; font-weight: bold;">NOT</span> <span style="color: #008800; font-weight: bold;">NULL</span>
<span style="color: #008800; font-weight: bold;">BEGIN</span>
<span style="color: #008800; font-weight: bold;">SELECT</span> @<span style="color: #008800; font-weight: bold;">SQL</span> = <span style="background-color: #fff0f0;">'DROP TABLE [dbo].['</span> + RTRIM(@name) +<span style="background-color: #fff0f0;">']'</span>
<span style="color: #008800; font-weight: bold;">EXEC</span> (@<span style="color: #008800; font-weight: bold;">SQL</span>)
PRINT <span style="background-color: #fff0f0;">'Dropped Table: '</span> + @name
<span style="color: #008800; font-weight: bold;">SELECT</span> @name = (<span style="color: #008800; font-weight: bold;">SELECT</span> TOP <span style="color: #0000dd; font-weight: bold;">1</span> [name] <span style="color: #008800; font-weight: bold;">FROM</span> sysobjects <span style="color: #008800; font-weight: bold;">WHERE</span> [<span style="color: #008800; font-weight: bold;">type</span>] = <span style="background-color: #fff0f0;">'U'</span> <span style="color: #008800; font-weight: bold;">AND</span> category = <span style="color: #0000dd; font-weight: bold;">0</span> <span style="color: #008800; font-weight: bold;">AND</span> [name] > @name <span style="color: #008800; font-weight: bold;">ORDER</span> <span style="color: #008800; font-weight: bold;">BY</span> [name])
<span style="color: #008800; font-weight: bold;">END</span>
<span style="color: #008800; font-weight: bold;">GO</span></pre>
</span>
</pre></div><p> </p><p><span style="color: var(--black-400); font-family: inherit; font-size: 13px; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; white-space: inherit;"><br /></span></p><p><span style="color: var(--black-400); font-family: inherit; font-size: 13px; font-style: inherit; font-variant-caps: inherit; font-variant-ligatures: inherit; font-weight: inherit; white-space: inherit;"><br /></span></p><p><br /></p>Hasithahttp://www.blogger.com/profile/12768387567188536731noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-54174328859992498232020-07-28T02:36:00.004+05:302022-11-10T19:35:56.789+05:30What is the difference between asynchronous programming and multi-threading?This misunderstanding is extremely common. Many people are taught that multithreading and asynchrony are the same things, but they are not.<br />
<br />
An analogy usually helps. You are cooking in a restaurant. An order comes in for eggs and toast.<br />
<ul>
<li><b>Synchronous</b>: you cook the eggs, then you cook the toast.</li>
<li><b>Asynchronous, single-threaded</b>: you start the eggs cooking and set a timer. You start the toast cooking and set a timer. While they are both cooking, you clean the kitchen. When the timers go off, you take the eggs off the heat and the toast out of the toaster and serve them.</li>
<li><b>Asynchronous, multithreaded</b>: you hire two more cooks, one to cook eggs and one to cook toast. Now you have the problem of coordinating the cooks so that they do not conflict with each other in the kitchen when sharing resources. And you have to pay for them.</li>
</ul>
<br />
Now, does it make sense that multithreading is only one kind of synchrony?<br />
<br />
<b>Threading is about workers; asynchrony is about tasks</b>. In multithreaded workflows, you assign tasks to workers. In asynchronous single-threaded workflows, you have a graph of tasks where some tasks depend on the results of others; as each task completes it invokes the code that schedules the next task that can run, given the results of the just-completed task. But you (hopefully) only need one worker to perform all the tasks, not one worker per task.<br />
<br />
It will help to realize that many tasks are not processor-bound. For processor-bound tasks, it makes sense to hire as many workers (threads) as there are processors, assign one task to each worker, assign one processor to each worker, and have each processor do the job of nothing else but compute the result as quickly as possible. But for tasks that are not waiting on a processor, you don't need to assign a worker at all. You just wait for the message to arrive that the result is available and do something else while you're waiting. When that message arrives, then you can schedule the continuation of the completed task as the next thing on your to-do list to check off.<br />
<br />
So let's look at Jon's example in more detail. What happens?<br />
<ul>
<li>Someone invokes DisplayWebSiteLength. Who? We don't care.</li>
<li>It sets a label, creates a client, and asks the client to fetch something. The client returns an object representing the task of fetching something. That task is in progress.</li>
<li>Is it in progress on another thread? Probably not. Read <a href="https://blog.stephencleary.com/2013/11/there-is-no-thread.html">Stephen's article</a> on why there is no thread.</li>
<li>Now we await the task. What happens? We check to see if the task has been completed between the time we created it, and we awaited it. If yes, then we fetch the result and keep running. Let's suppose it has not been completed. We sign up the remainder of this method as the continuation of that task and return.</li>
<li>Now control has returned to the caller. What does it do? Whatever it wants.</li>
<li>Now suppose the task completes. How did it do that? Maybe it was running on another thread, or maybe the caller that we just returned to allowed it to run to completion on the current thread. Regardless, we now have a completed task.</li>
<li>The completed task asks the correct thread -- again, likely the only thread -- to run the continuation of the task.</li>
<li>Control passes immediately back into the method we just left at the point of the await. Now there is a result available so we can assign text and run the rest of the method.</li>
</ul>
<br />
It's just like in my analogy. Someone asks you for a document. You send away in the mail for the document and keep on doing other work. When it arrives in the mail you are signalled, and when you feel like it, you do the rest of the workflow -- open the envelope, pay the delivery fees, whatever. You don't need to hire another worker to do all that for you.<br />
<br />
Answered by: <a href="https://stackoverflow.com/users/88656/eric-lippert" style="background-color: white; border: 0px; box-sizing: inherit; cursor: pointer; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline;">Eric Lippert</a> on <a href="https://stackoverflow.com/questions/34680985/what-is-the-difference-between-asynchronous-programming-and-multithreading">StackOverflow</a><br />
<br />
Code sample :<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 850px;"><span style="font-family: "courier new" , "courier" , monospace;">class Program
{
static void Main(string[] args)
{
using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource())
{
Console.CancelKeyPress += (s, e) =>
{
e.Cancel = true;
Console.WriteLine("Stopped by user");
cancellationTokenSource.Cancel(true);
};
try
{
MainAsync(cancellationTokenSource).GetAwaiter().GetResult();
}
catch (OperationCanceledException)
{
Console.WriteLine("Operation has been cancelled by the user.");
Console.ReadLine();
}
}
}</span>}</pre>
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 850px;"><span style="font-family: "courier new" , "courier" , monospace;"> private static async Task MainAsync(CancellationTokenSource cancellationTokenSource)
{
Console.WriteLine("Exercise 1 :");
var tasks = new List<Task>();
var resourceList = new string[] { "resourceA", "resourceB", "resourceC" };
IEnumerable<Task<string>> getLengthTask =
from resorce in resourceList
select GetResourceContentAsync(resorce, cancellationTokenSource.Token);
Console.WriteLine("Press CTRL+C at anytime to Cancel");
Console.WriteLine("Getting data from remote server...");
var content = await Task.WhenAll(getLengthTask.ToArray());
Console.WriteLine($"Total Content Length : {content.ToList().Sum(c => c.Length)}");
Console.ReadLine();
}
private static async Task<string> GetResourceContentAsync(string resourceId, CancellationToken token)
{
HttpClient client = new HttpClient();
Console.WriteLine($"Value has been requested from '{resourceId}'");
var responseMessage = await client.GetAsync($"https://localhost:44345/api/{resourceId}", token);
Console.WriteLine($"Response has been received from '{resourceId}'");
return await responseMessage.Content.ReadAsStringAsync();
}</span></pre>
<br />
<br />Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-16393844176798014092018-05-03T05:32:00.004+05:302018-05-03T05:32:51.868+05:30Get a list of all index & index columns in SQL Server<br />
<div style="background: rgb(255, 255, 255); border: solid gray; font-family: "times new roman"; font-style: normal; letter-spacing: normal; overflow: auto; padding: 0.2em 0.6em; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; width: auto; word-spacing: 0px;">
<pre style="line-height: 16.25px; margin: 0px;"><span style="font-family: "courier new";"><span style="color: blue;">SELECT</span> <span style="color: maroon;">TableName</span> <span style="color: silver;">=</span> <span style="color: maroon;">t</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span><span style="color: silver;">,</span><span style="font-size: large;">
</span></span><span style="font-family: "courier new";"> <span style="color: maroon;">IndexName</span> <span style="color: silver;">=</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span><span style="color: silver;">,</span>
<span style="color: maroon;">IndexId</span> <span style="color: silver;">=</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">index_id</span><span style="color: silver;">,</span>
<span style="color: maroon;">ColumnId</span> <span style="color: silver;">=</span> <span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">index_column_id</span><span style="color: silver;">,</span>
<span style="color: maroon;">ColumnName</span> <span style="color: silver;">=</span> <span style="color: maroon;">col</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span><span style="color: silver;">,</span>
<span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: silver;">*</span><span style="color: silver;">,</span>
<span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: silver;">*</span><span style="color: silver;">,</span>
<span style="color: maroon;">col</span><span style="color: silver;">.</span><span style="color: silver;">*</span>
<span style="color: blue;">FROM</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">indexes</span> <span style="color: maroon;">ind</span>
<span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">index_columns</span> <span style="color: maroon;">ic</span>
<span style="color: blue;">ON</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">index_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">index_id</span>
<span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">columns</span> <span style="color: maroon;">col</span>
<span style="color: blue;">ON</span> <span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">col</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">column_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">col</span><span style="color: silver;">.</span><span style="color: maroon;">column_id</span>
<span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">tables</span> <span style="color: maroon;">t</span>
<span style="color: blue;">ON</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span> <span style="color: silver;">=</span> <span style="color: maroon;">t</span><span style="color: silver;">.</span><span style="color: maroon;">object_id</span>
<span style="color: blue;">WHERE</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">is_primary_key</span> <span style="color: silver;">=</span> <span style="color: black;">0</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">is_unique</span> <span style="color: silver;">=</span> <span style="color: black;">0</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">is_unique_constraint</span> <span style="color: silver;">=</span> <span style="color: black;">0</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">t</span><span style="color: silver;">.</span><span style="color: maroon;">is_ms_shipped</span> <span style="color: silver;">=</span> <span style="color: black;">0</span>
<span style="color: blue;">AND</span> <span style="color: maroon;">t</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span> <span style="color: silver;">=</span> <span style="color: red;">'Order' </span><span style="color: green;"><i>-- Replace with the table name that you want to check</i></span>
<span style="color: blue;">ORDER</span> <span style="color: blue;">BY</span> <span style="color: maroon;">t</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span><span style="color: silver;">, </span><span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: maroon;">index_id</span><span style="color: silver;">, </span><span style="color: maroon;">ind</span><span style="color: silver;">.</span><span style="color: blue;">NAME</span><span style="color: silver;">, </span><span style="color: maroon;">ic</span><span style="color: silver;">.</span><span style="color: maroon;">index_column_id</span><span style="color: silver;">;</span>
</span>
</pre>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSLXHAI2BU93jl4jO9n76PqNcRnX_vh9qH8sCUp_BYgQTPIG4CSyfolZ5FwxxJc-hB_hlUjNgGrHUmUunfIt2jYghFENerzR5q6RWADtTiZFP6m8bwngvqeLqBTXkFVC19Q9Kc4rO0NQ/s1600/ListAllIndexes.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="348" data-original-width="896" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSLXHAI2BU93jl4jO9n76PqNcRnX_vh9qH8sCUp_BYgQTPIG4CSyfolZ5FwxxJc-hB_hlUjNgGrHUmUunfIt2jYghFENerzR5q6RWADtTiZFP6m8bwngvqeLqBTXkFVC19Q9Kc4rO0NQ/s640/ListAllIndexes.PNG" width="640" /></a></div>
<br />Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-64699397183764902142017-10-02T05:18:00.003+05:302022-11-10T19:34:36.513+05:30Re-publish Web App to Azure from Visual Studio 2017<div dir="ltr" style="text-align: left;" trbidi="on">
It's easy to download the published profile from the Azure portal if your application has already been published. Here is how you can download the publishing profile from the Azure portal and use that to publish your application from Visual Studio.<br />
<br />
1. log in to the Azure dashboard and open-up the App service that you want to publish your application.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtuyPQ6iusud4NCDfREYHKjRH1nWax5kdEx4AmeW0Ao_9gxrHBqLbsAwPYwtiKEmGu9iATGtZvNNJK1LjZ0y9iQvj1hTUqE2LaEUy6-k1UHwQXCIrc-czpe1RyFE53PvBOzcKuwHFaQA/s1600/Azure+dashboard.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="1004" height="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtuyPQ6iusud4NCDfREYHKjRH1nWax5kdEx4AmeW0Ao_9gxrHBqLbsAwPYwtiKEmGu9iATGtZvNNJK1LjZ0y9iQvj1hTUqE2LaEUy6-k1UHwQXCIrc-czpe1RyFE53PvBOzcKuwHFaQA/s640/Azure+dashboard.png" width="640" /></a></div>
<br />
2. Download the publish profile.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisC9kiE_Q_zVq82UqsU076KdbBy6tU_p-2581MCs_1vIj8NFKDnL2xaCyKcOGUhSLxn2A9tg2D0FJZrX95BmDGqwrOlvI59ifwS55ahjLtM0zSPYAE8VYN1GPSdf2Xs_EaZaVdYU_UiA/s1600/Azure+dashboard2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="322" data-original-width="960" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisC9kiE_Q_zVq82UqsU076KdbBy6tU_p-2581MCs_1vIj8NFKDnL2xaCyKcOGUhSLxn2A9tg2D0FJZrX95BmDGqwrOlvI59ifwS55ahjLtM0zSPYAE8VYN1GPSdf2Xs_EaZaVdYU_UiA/s640/Azure+dashboard2.png" width="640" /></a></div>
<br />
3. Go to your Web application in Visual Studio and get the Publishing wizard.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx1jzTvynoTvq3kbIP_S0bMGBmBoCMeM2H3NgSehLUSIlfFG86SDx75fxBqFmCqnKcWNi73cUbCYv7HXjBCFbG7s7INrkBzeMG_f1f5aAIkpt7HMlqwAUN2dppCk-t_O8YtomVWTd_bg/s1600/PublishWizard.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="321" data-original-width="768" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx1jzTvynoTvq3kbIP_S0bMGBmBoCMeM2H3NgSehLUSIlfFG86SDx75fxBqFmCqnKcWNi73cUbCYv7HXjBCFbG7s7INrkBzeMG_f1f5aAIkpt7HMlqwAUN2dppCk-t_O8YtomVWTd_bg/s640/PublishWizard.PNG" width="640" /></a></div>
4. Select <b>Import Profile</b> and click on <b>Publish</b>. You will be prompted to select the Imported Publish Setting File.<br />
<br />
If you are connected with the Azure Subscription, you can use the server explorer panel to access the published files in case you need to alter any file contents without login into Kudu services.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7esK-CeW8X837EgVj6z3QDAkwAIaueORyeoziDgRPSjpafWi_EnrMGbZ7zyqqIZ63mih73akx5dP8NxPm3o2Rwimphg3wHu0VfHEDNgwOAuTTqeYvgReh_UZWbaMX7M38g9DAZvgAcQ/s1600/ServerExplorer.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="227" data-original-width="400" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7esK-CeW8X837EgVj6z3QDAkwAIaueORyeoziDgRPSjpafWi_EnrMGbZ7zyqqIZ63mih73akx5dP8NxPm3o2Rwimphg3wHu0VfHEDNgwOAuTTqeYvgReh_UZWbaMX7M38g9DAZvgAcQ/s640/ServerExplorer.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-80480227126572396512017-06-02T07:37:00.003+05:302022-11-10T19:33:46.623+05:30View all Foreign Key Relationships in the Database<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://www.blogger.com/blogger.g?blogID=9082320068460818273" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>I've found some good directions from stack-overflow. Combining a few solutions, I could get the result that I wanted.<br />
<br />
Query 1 :<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<span style="font-family: "courier new"; font-size: x-small;">
<span style="color: blue;">SELECT</span> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">constraint_name</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ForeignKey</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">KF</span><span style="color: silver;">.</span><span style="color: maroon;">table_name</span> <span style="color: blue;">AS</span> <span style="color: maroon;">TableName</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">KF</span><span style="color: silver;">.</span><span style="color: maroon;">column_name</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ColumnName</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">KP</span><span style="color: silver;">.</span><span style="color: maroon;">table_name</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ReferenceTableName</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">KP</span><span style="color: silver;">.</span><span style="color: maroon;">column_name</span> <span style="color: maroon;">PK_Column</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">match_option</span> <span style="color: maroon;">MatchOption</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">update_rule</span> <span style="color: maroon;">UpdateRule</span><span style="color: silver;">,</span>
<br /> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">delete_rule</span> <span style="color: maroon;">DeleteRule</span>
<br /><span style="color: blue;">FROM</span> <span style="color: maroon;">information_schema</span><span style="color: silver;">.</span><span style="color: maroon;">referential_constraints</span> <span style="color: maroon;">RC</span>
<br /> <span style="color: blue;">JOIN</span> <span style="color: maroon;">information_schema</span><span style="color: silver;">.</span><span style="color: maroon;">key_column_usage</span> <span style="color: maroon;">KF</span>
<br /> <span style="color: blue;">ON</span> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">constraint_name</span> <span style="color: silver;">=</span> <span style="color: maroon;">KF</span><span style="color: silver;">.</span><span style="color: maroon;">constraint_name</span>
<br /> <span style="color: blue;">JOIN</span> <span style="color: maroon;">information_schema</span><span style="color: silver;">.</span><span style="color: maroon;">key_column_usage</span> <span style="color: maroon;">KP</span>
<br /> <span style="color: blue;">ON</span> <span style="color: maroon;">RC</span><span style="color: silver;">.</span><span style="color: maroon;">unique_constraint_name</span> <span style="color: silver;">=</span> <span style="color: maroon;">KP</span><span style="color: silver;">.</span><span style="color: maroon;">constraint_name</span>
</span>
</div>
<a href="https://www.blogger.com/blogger.g?blogID=9082320068460818273" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://www.blogger.com/blogger.g?blogID=9082320068460818273" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyaSFcnciYpL1xux8f3DmWPG32TriqLYUEIDWiqVI7tDGd1iGjsR0Y28Mqo72-dpTuSnpmdx5DVWy-U49pduempVBnB6uL_INIp0MIHk5guYejyfjZLCTJMCu0GnKXzGWhZo7E6dpjoQ/s1600/query1.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="922" height="69" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyaSFcnciYpL1xux8f3DmWPG32TriqLYUEIDWiqVI7tDGd1iGjsR0Y28Mqo72-dpTuSnpmdx5DVWy-U49pduempVBnB6uL_INIp0MIHk5guYejyfjZLCTJMCu0GnKXzGWhZo7E6dpjoQ/s640/query1.PNG" width="640" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Query 2 :<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<div>
<span style="font-size: 10pt;"><span style="font-family: Courier New, Courier, monospace;">
<span style="color: blue;">SELECT</span> <span style="color: maroon;">f</span><span style="color: silver;">.</span><span style="color: blue;">name</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ForeignKey</span><span style="color: silver;">,</span>
<br /> <span style="color: magenta;"><i>OBJECT_NAME</i></span><span style="color: maroon;">(</span><span style="color: maroon;">f</span><span style="color: silver;">.</span><span style="color: maroon;">parent_object_id</span><span style="color: maroon;">)</span> <span style="color: blue;">AS</span> <span style="color: maroon;">TableName</span><span style="color: silver;">,</span>
<br /> <span style="color: #ff0080;"><b>COL_NAME</b></span><span style="color: maroon;">(</span><span style="color: maroon;">fc</span><span style="color: silver;">.</span><span style="color: maroon;">parent_object_id</span><span style="color: silver;">,</span> <span style="color: maroon;">fc</span><span style="color: silver;">.</span><span style="color: maroon;">parent_column_id</span><span style="color: maroon;">)</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ColumnName</span><span style="color: silver;">,</span>
<br /> <span style="color: magenta;"><i>OBJECT_NAME</i></span> <span style="color: maroon;">(</span><span style="color: maroon;">f</span><span style="color: silver;">.</span><span style="color: maroon;">referenced_object_id</span><span style="color: maroon;">)</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ReferenceTableName</span><span style="color: silver;">,</span>
<br /> <span style="color: #ff0080;"><b>COL_NAME</b></span><span style="color: maroon;">(</span><span style="color: maroon;">fc</span><span style="color: silver;">.</span><span style="color: maroon;">referenced_object_id</span><span style="color: silver;">,</span> <span style="color: maroon;">fc</span><span style="color: silver;">.</span><span style="color: maroon;">referenced_column_id</span><span style="color: maroon;">)</span> <span style="color: blue;">AS</span> <span style="color: maroon;">ReferenceColumnName</span>
<br /><span style="color: blue;">FROM</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">foreign_keys</span> <span style="color: blue;">AS</span> <span style="color: maroon;">f</span>
<br /><span style="color: blue;">INNER</span> <span style="color: blue;">JOIN</span> <span style="color: maroon;">sys</span><span style="color: silver;">.</span><span style="color: maroon;">foreign_key_columns</span> <span style="color: blue;">AS</span> <span style="color: maroon;">fc</span>
<br /> <span style="color: blue;">ON</span> <span style="color: maroon;">f</span><span style="color: silver;">.</span><span style="color: maroon;">OBJECT_ID</span> <span style="color: silver;">=</span> <span style="color: maroon;">fc</span><span style="color: silver;">.</span><span style="color: maroon;">constraint_object_id</span></span>
</span></div>
</div>
<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtEtMSO5Zh3QMQRqptDvZJlh0XCJH1XPZ7UdCr09ZggvpGCriGSH7PM_Vz3Q0YxZRklokL9uwFszP9OvnSxipgYy5i0gdhRUeNkPUq1bP__eSVZ04adYvCcv9l4XSd1u7ku7y1Zrq4Tw/s1600/Query2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="748" height="99" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtEtMSO5Zh3QMQRqptDvZJlh0XCJH1XPZ7UdCr09ZggvpGCriGSH7PM_Vz3Q0YxZRklokL9uwFszP9OvnSxipgYy5i0gdhRUeNkPUq1bP__eSVZ04adYvCcv9l4XSd1u7ku7y1Zrq4Tw/s640/Query2.PNG" width="640" /></a></div>
<br /></div>
</div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-25503651225607445182017-01-27T00:41:00.003+05:302022-11-10T19:32:08.771+05:30Exclude files from getting compiled in Visual Studio Project Depending on the Platform Configuration<div dir="ltr" style="text-align: left;" trbidi="on">
I had to include and maintain some SAP Business One system forms captured from each SAP Business One version (9.0, 9.1, and 9.2) for an SAP Business One Add-on Visual Studio project. Of course, I've tried with placing them in separate folders, but during the compilation of the source code, I've got this build error.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgACMYWmqu6Q3Z8X1vFSJ441hUc6OiCYAlkpl5Is5CXuI8j5DJQL_Mafu2O-PRyJY4pce9MscCqBDnDvZ-33hP6qCoXhYs_ZeE_K0L32IaNMOdynz7f3m-qYjls3a1UtWsSl5yK7_zNrQ/s1600/image.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgACMYWmqu6Q3Z8X1vFSJ441hUc6OiCYAlkpl5Is5CXuI8j5DJQL_Mafu2O-PRyJY4pce9MscCqBDnDvZ-33hP6qCoXhYs_ZeE_K0L32IaNMOdynz7f3m-qYjls3a1UtWsSl5yK7_zNrQ/s400/image.png" width="400" /></a></div>
<br />
<br />
So, I thought of an out-of-the-box solution that could help me to compile my add-on project with only the source code files that are related to the SAP version and bit version. This was the summary of the R&D work that I did.<br />
<br />
<b>Problem : </b>How can I explicitly exclude/include source code files in Visual Studio, depend on the Solution Configuration or Solution Platform.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXZTaLo2Q5gjwtIxsM8wHvWeQTLO_3mD-SMxoq79d0CYaB7bVigoVBIy3ulGlS1qt6c2wNR9CgBiXZ1S6YSz8n23tV2gpl29G41LtWKr4NyORAy3o7PnLOtxm6lgOw97puvZS8rzFEw/s1600/SolutionPlatform.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXZTaLo2Q5gjwtIxsM8wHvWeQTLO_3mD-SMxoq79d0CYaB7bVigoVBIy3ulGlS1qt6c2wNR9CgBiXZ1S6YSz8n23tV2gpl29G41LtWKr4NyORAy3o7PnLOtxm6lgOw97puvZS8rzFEw/s640/SolutionPlatform.png" width="640" /></a></div>
<br />
<b>Directions :</b><br />
I've created a sample visual studio solution and added two empty classes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8Kmw-pUoFsh7Td3UL2-QfGFnxO7UuYMSd3sHyHj6ODevYdt_Rmd5URFwGv6JW57QtoTytBlvgLmSG9r91UxcwIbyXSMdtA0Jh9M4ojlJtTS9DygouYvOPH8viv2MPWxxVyM2z5_xfg/s1600/Sample+Solution.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8Kmw-pUoFsh7Td3UL2-QfGFnxO7UuYMSd3sHyHj6ODevYdt_Rmd5URFwGv6JW57QtoTytBlvgLmSG9r91UxcwIbyXSMdtA0Jh9M4ojlJtTS9DygouYvOPH8viv2MPWxxVyM2z5_xfg/s1600/Sample+Solution.PNG" /></a></div>
<br />
Then I've opened up the ConsoleApplication1 project file using a text editor.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt4Taz3k4KuMAfid3dfYp3q2IoIS9v6dKNjpv13UTDKGFsAeUYBAhMr3zAOy0HHE4AzygbuP74lR4TjmtPozMBt_4CUkvvRSXsU9s9lQGFNxzf8mLbj2aGdOqTULktgjpOD-oYxmEHtg/s1600/ProjectSource.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt4Taz3k4KuMAfid3dfYp3q2IoIS9v6dKNjpv13UTDKGFsAeUYBAhMr3zAOy0HHE4AzygbuP74lR4TjmtPozMBt_4CUkvvRSXsU9s9lQGFNxzf8mLbj2aGdOqTULktgjpOD-oYxmEHtg/s400/ProjectSource.PNG" width="400" /></a></div>
<br />
Then Noticed the usage of the Condition element and moved my Class1.cs and Class2.cs in to two separate item groups as below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKWjvs2bQo_fgvG_o9MVKMTQw6BgrdvuxkW0lYpfiWd6XtZmo-JvxXgwR8sl9TGLMl8LL7Oi6c-eEO6jELqDS7dr9FtuMnRZGKbtKYgowR3O2RG7LnZMwgl5EgDEKevq4wUKRh64ZTeA/s1600/ProjectSource2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKWjvs2bQo_fgvG_o9MVKMTQw6BgrdvuxkW0lYpfiWd6XtZmo-JvxXgwR8sl9TGLMl8LL7Oi6c-eEO6jELqDS7dr9FtuMnRZGKbtKYgowR3O2RG7LnZMwgl5EgDEKevq4wUKRh64ZTeA/s400/ProjectSource2.PNG" width="400" /></a></div>
<br />
<br />
Now, When I switch the value to 32bit from the Solution platform, only Class1 is getting attached to the compiler.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQ0-1pY70kIHWeeVF_6kj5XUmNu6O60h0yM-TI6ZD68BkIqQmCfg4_Mc9l60pvu3kEILAYUqA7zK-poFd2bu-t_TZyZV_2nvTgebUXyfMn33owDy50rpTnlU3XpaUQ1h85AytFkAIew/s1600/Class1.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQ0-1pY70kIHWeeVF_6kj5XUmNu6O60h0yM-TI6ZD68BkIqQmCfg4_Mc9l60pvu3kEILAYUqA7zK-poFd2bu-t_TZyZV_2nvTgebUXyfMn33owDy50rpTnlU3XpaUQ1h85AytFkAIew/s320/Class1.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Similarly, for 64bit, I only get Class2.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKmOKbGI6QhjlvkZ0W5Z_9uL9_vY8_7EcVHJPyFvU1tlLIspHyvPFBWSBqyJ2vjtdPrkZB-SmX1hFhQe5k3zAfavj9D5L483uQSiyqjI3a6JQgl3RYFweVEAa14S2QR3MuW-kOhxmyaw/s1600/Class2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKmOKbGI6QhjlvkZ0W5Z_9uL9_vY8_7EcVHJPyFvU1tlLIspHyvPFBWSBqyJ2vjtdPrkZB-SmX1hFhQe5k3zAfavj9D5L483uQSiyqjI3a6JQgl3RYFweVEAa14S2QR3MuW-kOhxmyaw/s320/Class2.PNG" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
Since both Class1 and Class2 coexist in the solution at any time, this workaround will definitely help to get rid of build automation-related work, even if it's hard to maintain.<br />
<br />
<br />
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-45542374136354482702016-12-02T23:14:00.003+05:302022-11-10T19:31:10.198+05:30Entity Framework Code First with Repository Pattern<div style="text-align: justify;">
<b style="background-color: #fefdfa; color: #333333; font-family: cantarell; font-size: 16px;">Problem</b>: Need to develop a back-end (Data Layer and Business Logic Layer) of a data-driven application with less effort. Both layers must be able to unit test.</div>
<br />
<div style="text-align: justify;">
<b style="background-color: #fefdfa; color: #333333; font-family: cantarell; font-size: 16px;">Solution: </b><span style="background-color: #fefdfa;"><span style="color: #333333; font-family: cantarell;">Implement data model using Entity Framework with code first approach and implement Data access layer using generic repository pattern. On top of that, implement a unit of work pattern to create an abstraction layer in between the data access layer and the business logic layer.</span></span></div>
<span style="background-color: #fefdfa;"><span style="color: #333333; font-family: cantarell;"><br /></span></span><b style="background-color: #fefdfa; color: #333333; font-family: cantarell; font-size: 16px;">Sample Code : </b><br />
<div style="text-align: justify;">
<span style="color: #333333; font-family: cantarell;"><span style="background-color: #fefdfa;">Two class library-type projects have been added to the solution, One project contains the entity classes and the other project contains the model (Project reference has been added from the Entity project to the Model project). A code-first entity model is added to the model project and code-first entity classes are created in the entity project.</span></span></div>
<span style="color: #333333; font-family: cantarell;"><span style="background-color: #fefdfa;"><br /></span></span><span style="color: #333333; font-family: cantarell;"><span style="background-color: #fefdfa;">Ex: Sample code first entity class</span></span><br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.ComponentModel.DataAnnotations.Schema</span>;
<span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Entities</span>
{
<span style="color: #0000cc;"> [Table("Customers")]</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Customer</span>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">Guid Id { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }</span></pre>
<pre style="line-height: 16.25px;"><span style="color: #0066bb; font-weight: bold;"> <span style="color: #008800; font-weight: bold;">public</span><span style="color: black; font-weight: normal;"> </span><span style="color: #0066bb; font-weight: bold;">string Name { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }</span></span></pre>
<pre style="line-height: 16.25px;"> }
}
</pre>
</div>
<span style="color: #333333; font-family: cantarell;"><span style="background-color: #fefdfa;"><br /></span></span>Sample Model class :<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Model</span>
{
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Entities</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Data.Entity</span>;
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Context</span> : DbContext
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">Context</span>() : <span style="color: #008800; font-weight: bold;">base</span>(<span style="background-color: #fff0f0;">"name=DataModel"</span>)
{
}
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> DbSet<Customer> Customers { <span style="color: #008800; font-weight: bold;">get</span>; <span style="color: #008800; font-weight: bold;">set</span>; }
}
}
</pre>
</div>
<br />
<div style="text-align: justify;">
A generic interface class <span style="font-family: "courier new", courier, monospace;">IGenericRepository<T></span> containing the CRUD operations that are common to all the entities in the model is added to the Model project.</div>
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Linq</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Linq.Expressions</span>;
<span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Model</span>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">interface</span> IGenericRepository<T> <span style="color: #008800; font-weight: bold;">where</span> T : <span style="color: #008800; font-weight: bold;">class</span>
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, <span style="color: #333399; font-weight: bold;">bool</span>>> predicate);
<span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Add</span>(T entity);
<span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Delete</span>(T entity);
<span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Edit</span>(T entity);</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Save</span>();
}
}
</pre>
</div>
<br />
Then <span style="font-family: "courier new", courier, monospace;">IGenericRepository<T></span> interface is implemented in a generic abstract class,<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Data.Entity</span>;
<span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Linq</span>;</pre>
<pre style="line-height: 16.25px;">u<span style="color: #008800; font-weight: bold;">sing</span> <span style="color: #0e84b5; font-weight: bold;">System.Linq.Expressions</span>;</pre>
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Model</span>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">abstract</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">GenericRepository</span><C, T> :
IGenericRepository<T> <span style="color: #008800; font-weight: bold;">where</span> T : <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">where</span> C : DbContext, <span style="color: #008800; font-weight: bold;">new</span>()
{
<span style="color: #008800; font-weight: bold;">private</span> C entities = <span style="color: #008800; font-weight: bold;">new</span> C();</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> C Context
{
<span> </span><span style="color: #008800; font-weight: bold;">get</span> { <span style="color: #008800; font-weight: bold;">return</span> entities; }
<span> </span><span style="color: #008800; font-weight: bold;">set</span> { entities = <span style="color: #008800; font-weight: bold;">value</span>; }
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> IQueryable<T> GetAll()
{
IQueryable<T> query = entities.Set<T>();
<span> </span><span style="color: #008800; font-weight: bold;">return</span> query;
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> IQueryable<T> FindBy(Expression<Func<T, <span style="color: #333399; font-weight: bold;">bool</span>>> predicate)
{
IQueryable<T> query = entities.Set<T>().Where(predicate);
<span> </span><span style="color: #008800; font-weight: bold;">return</span> query;
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Add</span>(T entity)
{
entities.Set<T>().Add(entity);
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Delete</span>(T entity)
{
entities.Entry(entity).State = EntityState.Deleted;
entities.Set<T>().Remove(entity);
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Edit</span>(T entity)
{
entities.Entry(entity).State = EntityState.Modified;
}</pre><pre style="line-height: 16.25px;"> <span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">virtual</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Save</span>()
{
entities.SaveChanges();
}
}
}
</pre>
</div>
<br />
Then, made some concrete repository classes implementing the abstract<span style="font-family: "courier new", courier, monospace; font-size: x-small;"> </span><span style="font-family: "courier new", courier, monospace;">GenericRepository.</span><br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Entities</span>;
<span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Model.Repositories</span>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">CustomerRepository</span> : GenericRepository<Context, Customer>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Foo</span>(Guid Id){}</pre>
<pre style="line-height: 16.25px;"> }<pre style="line-height: 16.25px;">}</pre>
</pre>
</div>
<br />
Now I'm able to do all the CRUD operations + any concrete implementation.<br />
<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #0000cc;">[TestMethod]</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">SomeTestMethod</span>()
{</pre><pre style="line-height: 16.25px;"><span> // Dependancy inject C</span>ustomerRepository and ItemRepository</pre><pre style="line-height: 16.25px;"> <span> </span>Context myDbContext = <span style="color: #008800; font-weight: bold;">new</span> Context();
CustomerRepository _customerRepository= <span style="color: #008800; font-weight: bold;">new</span> CustomerRepository(myDbContext);</pre><pre style="line-height: 16.25px;"> <span style="color: #333399; font-weight: bold;">var</span> cust = <span style="color: #008800; font-weight: bold;">new</span> Customer() { Id = Guid.NewGuid(), Name = <span style="background-color: #fff0f0;">"My Customer"</span> };
_customerRepository.Add(cust);
_customerRepository.Foo();</pre>
<pre style="line-height: 16.25px;"> _customerRepository.Save();<br />
<span style="color: #888888;">//Some Other Repo</span></pre><pre style="line-height: 16.25px;"> SomeOtherRepository _otherRepository = <span style="color: #008800; font-weight: bold;">new</span> SomeOtherRepository (myDbContext);</pre><pre style="line-height: 16.25px;"> _otherRepository .Foo(cust.Id);<br /> _otherRepository .Save();<br />}
</pre>
</div>
<br />
<div style="text-align: justify;">
So the problem arises here when you have several repository classes, all of them will maintain their own instance of the Context class, which could result in data inconsistency, So usually the context object parsing is implemented at the Unit of Work classes, but it's better to make the default constructor of the Concrete Repository classes to private and implement an overloaded constructor, which accepts the Context. Also, <span style="font-family: "courier new", courier, monospace;">Save()</span> method has been removed from both <span style="font-family: "courier new", courier, monospace;">IGenericRepository </span>interface and <span style="font-family: "courier new", courier, monospace;">GenericRepository </span>abstract class.</div><div style="text-align: justify;"><br /></div>
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #008800; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Entities</span>;
<span style="color: #008800; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">MyDevTalks.Model.Repositories</span>
{
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">CustomerRepository</span> : GenericRepository<Context, Customer>
{
<span style="color: #008800; font-weight: bold;">private</span> <span style="color: #0066bb; font-weight: bold;">CustomerRepository</span>() { }
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">CustomerRepository</span>(Context model)
{
<span style="color: #008800; font-weight: bold;">base</span>.Context = model;
}
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Foo</span>() { }
}
}
</pre>
</div>
<br />
Accordingly, my test method should be altered as below. So the context is shared in between the repositories used in a single unit, in other words, a Unit of Work. <br />
<br />
<div style="background: rgb(255, 255, 255); border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 16.25px;"><span style="color: #0000cc;">[TestMethod]</span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">SomeTestMethod</span>()
{
Context myDbContext = <span style="color: #008800; font-weight: bold;">new</span> Context();
CustomerRepository custRep = <span style="color: #008800; font-weight: bold;">new</span> CustomerRepository(myDbContext);
custRep.Add(<span style="color: #008800; font-weight: bold;">new</span> Entities.Customer() { Id = Guid.NewGuid(), Name = <span style="background-color: #fff0f0;">"My Customer"</span> });
custRep.Foo();
<span style="color: #888888;">//Some Other Repo</span>
SomeOtherRepository othrtRepo = <span style="color: #008800; font-weight: bold;">new</span> SomeOtherRepository (myDbContext);
othrtRepo.Foo(custRep.Id);</pre>
<pre style="line-height: 16.25px;"> myDbContext.SaveChanges();
}
</pre>
</div>
<div style="text-align: center;">
<br /></div>
<br />Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-82285562552045094442016-11-29T17:20:00.001+05:302022-11-10T19:30:12.405+05:30How to apply client side endpoint configuration as an extra Parameter in SANA admin panel? Sana provides a mechanism to specify the WCF client-side endpoint configuration as an extra parameter, if you need to override the default configuration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh32lP1MhQI3muehYCtaEfgzQUtEhLfO4hY1vvUcUjDF2eHaIu_J3sR2kDaFRO0b_7KDtkLVvgkAgO8j0ai4YMQ7I7bj9J2FLJZWfqGWZuqgCauyYWvRjc24Kry6AFfJpYnKBkM1ejKWg/s1600/sanaadmin.PNG" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh32lP1MhQI3muehYCtaEfgzQUtEhLfO4hY1vvUcUjDF2eHaIu_J3sR2kDaFRO0b_7KDtkLVvgkAgO8j0ai4YMQ7I7bj9J2FLJZWfqGWZuqgCauyYWvRjc24Kry6AFfJpYnKBkM1ejKWg/s640/sanaadmin.PNG" width="640" /></a></div>
<br />
You can only specify either the web service URL or Extra Parameters. For this case, remove the web service URL and put the below parameter as an Extra Parameter.<br />
<br />
<div style="text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace;">endpointconfigurationname=X</span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Then define custom client-side configurations within the <span style="font-family: "courier new" , "courier" , monospace;"><system.servicemodel> </span><span style="font-family: inherit;">section </span>of the web.config file of the Sana web store application.</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYm3dXUDB6la0XISfX2J98JXUbNVIXa_BWXhbSOZN0TqEVQmpug6HS7_bANVnZUsWfnZOC2HoIRoUq_XBLQHEhwwlPlpUqiHRkzG7W1oh2BmBK8thyVWLRmkBPEa6DyDIxtIkv-Lz5QA/s1600/xml.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYm3dXUDB6la0XISfX2J98JXUbNVIXa_BWXhbSOZN0TqEVQmpug6HS7_bANVnZUsWfnZOC2HoIRoUq_XBLQHEhwwlPlpUqiHRkzG7W1oh2BmBK8thyVWLRmkBPEa6DyDIxtIkv-Lz5QA/s640/xml.PNG" width="640" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-69324813660856265462016-10-27T01:17:00.004+05:302022-11-10T19:29:38.579+05:30Which Loop Runs Faster in NET?<b>Problem: </b>Which Looping structure runs faster?<br />
<br />
<b>Selected Looping Structures :</b><br />
<br />
<ul>
<li>While Loop</li>
<li>Do-While Loop</li>
<li>For Loop</li>
<li>Lamda For-Each Loop</li>
<li>Parallel For Loop</li>
<li>Parallel For-Each Loop</li>
</ul>
<br />
<ul></ul>
<b>Test Code : </b>(Console Application)<br />
<br />
Main Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; line-height: 14px; overflow: auto; padding: 5px; width: 95%;"><span style="font-family: "courier new" , "courier" , monospace;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "courier new" , "courier" , monospace;">static void Main(string[] args)
{</span>
<span style="font-family: "courier new" , "courier" , monospace;"> int[] someData = new int[] {465,545,674,354 };
Stopwatch timer = new Stopwatch();
timer.Start();
ProcessUsingWhileLoop(someData);
timer.Stop();
Console.WriteLine("Process Using While Loop :" + timer.ElapsedMilliseconds);
timer.Reset();
timer.Start();
ProcessUsingDoWhileLoop(someData);
timer.Stop();
Console.WriteLine("Process Using Do-While Loop :" + timer.ElapsedMilliseconds);
timer.Reset();
timer.Start();
ProcessUsingForLoop(someData);
timer.Stop();
Console.WriteLine("Process Using For Loop :"+timer.ElapsedMilliseconds);
timer.Reset();
timer.Start();
ProcessUsingLamdaForEachLoop(someData);
timer.Stop();
Console.WriteLine("Process Using Lamda ForEach Loop :" + timer.ElapsedMilliseconds);
timer.Reset();
timer.Start();
ProcessUsingParallelForLoop(someData);
timer.Stop();
Console.WriteLine("Process Using Parallel For Loop :" + timer.ElapsedMilliseconds);
timer.Reset();
timer.Start();
ProcessUsingParallelForEachLoop(someData);
timer.Stop();
Console.WriteLine("Process Using Parallel ForEach Loop :" + timer.ElapsedMilliseconds);
timer.Reset();
Console.ReadLine();
}</span></code></span></pre>
<br />
ProcessUsingWhileLoop Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; line-height: 14px; overflow: auto; padding: 5px; width: 95%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingWhileLoop(int[] data)
{
int n = 0;
while ( n < data.Length)
{
System.Threading.Thread.Sleep(data[n]);
n++;
}
}</span>
</code></pre>
<br />
ProcessUsingDoWhileLoop Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; line-height: 14px; overflow: auto; padding: 5px; width: 95%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingDoWhileLoop(int[] data)
{
int n = 0;
do
{
System.Threading.Thread.Sleep(data[n]);
n++;
}
while (n < data.Length);
}</span>
</code></pre>
<br />
ProcessUsingForLoop Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 620.344px;"><code style="overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingForLoop(int[] data)
{
for (int n = 0; n < data.Length; n++ )
{
System.Threading.Thread.Sleep(data[n]);
}
}</span><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace; font-size: 12px;">
</span></span></code></pre>
<br />
ProcessUsingLamdaForEachLoop Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 620.344px;"><code style="overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingLamdaForEachLoop(int[] data)
{
data.ToList().ForEach(
n => System.Threading.Thread.Sleep(n));
}</span><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace; font-size: 12px;">
</span></span></code></pre>
<br />
ProcessUsingParallelForLoop Method :<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 620.344px;"><code style="overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingLamdaForEachLoop(int[] data)
{
Parallel.For(0, data.Length,
n =>
{
System.Threading.Thread.Sleep(data[n]);
});
}</span><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace; font-size: 12px;">
</span></span></code></pre>
<br />
ProcessUsingParallelForEachLoop Method :
<br />
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); line-height: 14px; overflow: auto; padding: 5px; width: 620.344px;"><code style="overflow-wrap: normal; word-wrap: normal;"><code style="overflow-wrap: normal; word-wrap: normal;"><span style="font-family: "andale mono" , "lucida console" , "monaco" , "fixed" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">static void ProcessUsingParallelForEachLoop(int[] data)
{
Parallel.ForEach(data,
n =>
{
System.Threading.Thread.Sleep(data[n]);
});
}</span>
</span></code></code></pre>
<br />
<br />
<b>Results :</b><br />
(built-in Debug Mode and run from Visual Studio)<br />
<br />
Process Using While Loop: 2039<br />
Process Using Do-While Loop: 2041<br />
Process Using For Loop: 2064<br />
Process Using Lamda ForEach Loop: 2074<br />
Process Using Parallel For Loop: 984<br />
Process Using Parallel ForEach Loop: 870<br />
<br />
(built-in Release Mode ran from executable)<br />
Process Using While Loop: 2046<br />
Process Using Do-While Loop: 2040<br />
Process Using For Loop: 2039<br />
Process Using Lamda ForEach Loop: 2046<br />
Process Using Parallel For Loop: 838<br />
Process Using Parallel ForEach Loop: 837<br />
<br />
<br />
<b>Conclusion :</b><br />
Based on the data collected, below is the list of the fastest looping structure to a slower one.<br />
<ol>
<li>Parallel ForEach Loop</li>
<li>Parallel For Loop</li>
<li>For Loop</li>
<li>While Loop</li>
<li>Do-While Loop</li>
<li>Lamda ForEach</li>
</ol>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-46889763591480084842016-10-26T11:02:00.002+05:302022-11-10T19:28:51.568+05:30SAP Business One : Add more Demo DBs of Different Countries<b>Problem:</b> How to Add more Demo DBs of Different Countries for testing purposes?<br />
<br />
<b>Solution:</b> Need to install additional databases from the SAP Business One Server setup manually.<br />
<br />
<b>Steps :</b><br />
1. Locate the Setup file in your SAP Business One installation folder.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8vBu2UCscqG_gBgUQNfVy9sbnv-KNfCxAccZVjKKZIdZmkuE2xLe9j533wHshXv_R2ERmgodXMPAe3qBRoEg9ae-LWYQll86o5Cx3QEduQPy4g89l7Wi0BDvB-A4wlzx7EKFjT63VLA/s1600/1.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8vBu2UCscqG_gBgUQNfVy9sbnv-KNfCxAccZVjKKZIdZmkuE2xLe9j533wHshXv_R2ERmgodXMPAe3qBRoEg9ae-LWYQll86o5Cx3QEduQPy4g89l7Wi0BDvB-A4wlzx7EKFjT63VLA/s320/1.PNG" width="320" /></a></div>
<br />
2. Select Modify, as you have already install at least one or more demo databases.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-oXPssMldRALZfsL9FwW3PQ-ZmsZM1FAKW21mTgF2DmKjf2UE-oyoIIFsUCSy1TGIXFSMTDLFvct95m5i-m0KK803s4ETLF8jz4yl-G6EjELJZsEKmkgXHmhaLY2yu_PbW1NyOcanNA/s1600/2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-oXPssMldRALZfsL9FwW3PQ-ZmsZM1FAKW21mTgF2DmKjf2UE-oyoIIFsUCSy1TGIXFSMTDLFvct95m5i-m0KK803s4ETLF8jz4yl-G6EjELJZsEKmkgXHmhaLY2yu_PbW1NyOcanNA/s320/2.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
3. Select the Country you want.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3U5vY5UWIMM7sCx1th1RuzFVfkE39X4jPNeGDi_LIdNwBiT2VTvdk9wrClvJAckWNRCJ1OfdwpZSchXBNTRAeY0VrTRkrpUuCH_Rs7RWDUj4wPCyyTCsIAF2aMMV1LbQNhgvQALv43A/s1600/3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3U5vY5UWIMM7sCx1th1RuzFVfkE39X4jPNeGDi_LIdNwBiT2VTvdk9wrClvJAckWNRCJ1OfdwpZSchXBNTRAeY0VrTRkrpUuCH_Rs7RWDUj4wPCyyTCsIAF2aMMV1LbQNhgvQALv43A/s320/3.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
4. Select the database server type.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm8I9okCt2A0YkeG_XSxXGEGgnXydlIseMlUBh47Dn_h-2_WRJqQvW4tUnrpBdtkMCdNyozBsDSYh59KSzJvPW2HmxeDvzW9lZBi6rsjP0YY1b1wcfq94z1H90L_Kp5KJ5olXemnMJhA/s1600/4.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm8I9okCt2A0YkeG_XSxXGEGgnXydlIseMlUBh47Dn_h-2_WRJqQvW4tUnrpBdtkMCdNyozBsDSYh59KSzJvPW2HmxeDvzW9lZBi6rsjP0YY1b1wcfq94z1H90L_Kp5KJ5olXemnMJhA/s320/4.PNG" width="320" /></a></div>
<br />
5. Provide database credentials to create the database.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs0eLO-y5pN54BsS_5sye7hoxoBYxI4Oicp_-0_684KstRku-8406B2QbLoSuFEdDWlabNhFQDM1nfNlSPJgJQ9D_PKAI_p9bpnauZE8dnLbpGxM0qCkOM9idtHPWBWl-X6HwHOsezaA/s1600/5.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs0eLO-y5pN54BsS_5sye7hoxoBYxI4Oicp_-0_684KstRku-8406B2QbLoSuFEdDWlabNhFQDM1nfNlSPJgJQ9D_PKAI_p9bpnauZE8dnLbpGxM0qCkOM9idtHPWBWl-X6HwHOsezaA/s320/5.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-69510794886451375942016-10-12T00:14:00.003+05:302022-11-10T19:28:33.650+05:30NET Enterprise Services : COM, DCOM and COM+ Services<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
It All begins with <b>COM :</b><br />
<b><br /></b>
<span style="text-align: justify;">Microsoft COM (Component Object Model) technology in the Microsoft Windows family of Operating Systems enables software components to communicate. COM is used by developers to create reusable software components, link components together to build applications, and take advantage of Windows services. COM objects can be created with a variety of programming languages. Object-oriented languages, such as C++, provide programming mechanisms that simplify the implementation of COM objects. The family of COM technologies includes COM+, Distributed COM (DCOM) and ActiveX® Controls.</span><br />
<div style="text-align: justify;">
<br />
<br /></div>
<div style="text-align: justify;">
So What is<b> COM+</b>?<br />
<br /></div>
<div style="text-align: justify;">
COM+ is the name of the COM-based services and technologies first released in Windows 2000. COM+ brought together the technology of COM components and the application host of Microsoft Transaction Server (MTS). COM+ automatically handles programming tasks such as resource pooling, disconnected applications, event publication, and subscription and distributed transactions.</div>
<div style="text-align: justify;">
<br />
<br /></div>
<div style="text-align: justify;">
COM+ and <b>DCOM</b><br />
<b><br /></b></div>
<div style="text-align: justify;">
In order for Microsoft to provide developers with support for distributed transactions, resource pooling, disconnected applications, event publication and subscription, better memory and processor (thread) management, as well as to position Windows as an alternative to other enterprise-level operating systems, Microsoft introduced a technology called Microsoft Transaction Server (MTS) on Windows NT 4. With Windows 2000, that significant extension to COM was incorporated into the operating system (as opposed to the series of external tools provided by MTS) and renamed COM+.<br />
<br />
At the same time, Microsoft de-emphasized DCOM as a separate entity. Components that made use of COM+ services were handled more directly by the added layer of COM+, in particular by operating system support for interception. In the first release of MTS, the interception was tacked on - installing an MTS component would modify the Windows Registry to call the MTS software, and not the component directly. Windows 2000 also revised the Component Services control panel application used to configure COM+ components.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Sources : <a href="https://msdn.microsoft.com/en-us/library/ms973847.aspx">MSDN</a>, <a href="https://msdn.microsoft.com/en-us/library/bb985615.aspx">MSDN Library</a>, <a href="https://en.wikipedia.org/wiki/Component_Object_Model#COM.2B_and_DCOM">Wikipedia</a></div>
</div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-91796726368716764772016-08-02T09:12:00.004+05:302022-11-10T19:28:07.151+05:30-8006 : Resource error in SAP Business One<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Suddenly I received with (-8006) from the DI API. This was my request sent and the response received.<br />
<br />
Request :<br />
<div style="background: rgb(255, 255, 255); border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0px;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16</pre>
</td><td><pre style="line-height: 125%; margin: 0px;"><span style="color: #557799;"><?xml version=\"1.0\" encoding=\"UTF-16\"?></span>
<span style="color: #007700;"><env:Envelope</span> <span style="color: #0000cc;">xmlns:env=</span><span style="background-color: #fff0f0;">\"http://schemas.xmlsoap.org/soap/envelope/\"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><env:Body></span>
<span style="color: #007700;"><dis:Login</span> <span style="color: #0000cc;">xmlns:dis=</span><span style="background-color: #fff0f0;">\"http://www.sap.com/SBO/DIS\"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><DatabaseServer></span>xxxx<span style="color: #007700;"></DatabaseServer></span>
<span style="color: #007700;"><DatabaseName></span>SBODEMOUS<span style="color: #007700;"></DatabaseName></span>
<span style="color: #007700;"><DatabaseType></span>dst_MSSQL2012<span style="color: #007700;"></DatabaseType></span>
<span style="color: #007700;"><DatabaseUsername></span>xx<span style="color: #007700;"></DatabaseUsername></span>
<span style="color: #007700;"><DatabasePassword></span>xxxxxxx<span style="color: #007700;"></DatabasePassword></span>
<span style="color: #007700;"><CompanyUsername></span>manager<span style="color: #007700;"></CompanyUsername></span>
<span style="color: #007700;"><CompanyPassword></span>manager<span style="color: #007700;"></CompanyPassword></span>
<span style="color: #007700;"><Language></span>ln_English<span style="color: #007700;"></Language></span>
<span style="color: #007700;"><LicenseServer></span>xxxxx<span style="color: #007700;"></LicenseServer></span>
<span style="color: #007700;"></dis:Login></span>
<span style="color: #007700;"></env:Body></span>
<span style="color: #007700;"></env:Envelope></span>
</pre>
</td></tr>
</tbody></table>
</div>
<br />
Response :<br />
<div style="background: rgb(255, 255, 255); border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0px;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19</pre>
</td><td><pre style="line-height: 125%; margin: 0px;"> <span style="color: #557799;"><?xml version="1.0" ?></span>
<span style="color: #007700;"><env:Envelope</span> <span style="color: #0000cc;">xmlns:env=</span><span style="background-color: #fff0f0;">"http://www.w3.org/2003/05/soap-envelope"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><env:Body></span>
<span style="color: #007700;"><env:Fault></span>
<span style="color: #007700;"><env:Code></span>
<span style="color: #007700;"><env:Value></span>env:Receiver<span style="color: #007700;"></env:Value></span>
<span style="color: #007700;"><env:Subcode></span>
<span style="color: #007700;"><env:Value></span>-8006<span style="color: #007700;"></env:Value></span>
<span style="color: #007700;"></env:Subcode></span>
<span style="color: #007700;"></env:Code></span>
<span style="color: #007700;"><env:Reason></span>
<span style="color: #007700;"><env:Text</span> <span style="color: #0000cc;">xml:lang=</span><span style="background-color: #fff0f0;">"en"</span><span style="color: #007700;">></span>Resource error<span style="color: #007700;"></env:Text></span>
<span style="color: #007700;"></env:Reason></span>
<span style="color: #007700;"><env:Detail></span>
<span style="color: #007700;"><Command></span>Login<span style="color: #007700;"></Command></span>
<span style="color: #007700;"></env:Detail></span>
<span style="color: #007700;"></env:Fault></span>
<span style="color: #007700;"></env:Body></span>
<span style="color: #007700;"></env:Envelope></span>
</pre>
</td></tr>
</tbody></table>
</div>
</div>
<br />
<div style="text-align: left;">
When I look for a solution in <a href="http://scn.sap.com/thread/811625">SAP community</a>, Many experts have advised to remove the SM_OBS_DLL folder from the temporary folder, stop the SBO DI Server from SAP Business One Service Manager and then reinstall the DI API. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I did the first step of removing the SM_OBS_DLL folder from my %temp% path. Then I restarted my workstation and checked whether all my services are running normally or not. Especially the SQL server instance. The real reason was my SQL server service had not been started with the startup. So the DI server cannot access the database.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So I prepared a batch file to start/stop the SQL and SAP-related services, which might also rescue you in such situations.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Stop Services.bat : </div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">net stop MSSQLSERVER</span></div>
<span style="font-family: "courier new" , "courier" , monospace;">net stop TAO_NT_Naming_Service</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net stop SLD</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net stop B1LicenseService</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net stop SBODI_Server</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net stop SBOWFDataAccess</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net stop SBOWorkflowEngine</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">@PAUSE</span><br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
Start Services.bat :<br />
<span style="font-family: "courier new" , "courier" , monospace;">net </span><span style="font-family: "courier new" , "courier" , monospace;">start </span><span style="font-family: "courier new" , "courier" , monospace;">MSSQLSERVER</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start TAO_NT_Naming_Service</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start SLD</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start B1LicenseService</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start SBODI_Server</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start SBOWFDataAccess</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">net start SBOWorkflowEngine</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">@PAUSE</span><br />
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
</div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com1tag:blogger.com,1999:blog-9082320068460818273.post-16656538895410264142016-08-01T14:46:00.004+05:302022-11-10T19:27:14.047+05:30Install SAP Business One License<div dir="ltr" style="text-align: left;" trbidi="on">
To generate a licence file for SAP Business one, you are required to submit the below details.<br />
<br />
- SAP Business One version and the Patch Level<br />
If you are not sure about what SAP Business One version level you have installed or updated patch level, Go to About -> About SAP Business One.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTkVqfkm7b60aenRAwPFy06ToTBn-dc_Gu8FwOfbde3nt78Mq5uV0bLX6Tjt-BLo_vMzsfUKXZ1aTq75B6TcI2LdZwOYCJECNCYbR8NZETVfHNxO4N3GAOeY2i-PjdwZocjhpQ3LY2aQ/s1600/aboutSap.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTkVqfkm7b60aenRAwPFy06ToTBn-dc_Gu8FwOfbde3nt78Mq5uV0bLX6Tjt-BLo_vMzsfUKXZ1aTq75B6TcI2LdZwOYCJECNCYbR8NZETVfHNxO4N3GAOeY2i-PjdwZocjhpQ3LY2aQ/s400/aboutSap.png" width="400" /></a></div>
If your license is expired, you will not be able to access any of the screens.<br />
<br />
- Hardware key<br />
You can retrieve it from SAP Business One Service Manager as below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfyzcayhF-CPcqrQRjy9JnGdYXafJoT4G_9jLVsM-8H1l2z4Vd9Q4hgtvJ2ZrCFiVUHWoLg5LqIW66CGxWHt0rkXud6wenyEuyQkqvFTb6DBk4Ge-QpcwqPXpXZkxAH1SEC4971S0VVA/s1600/licensemanager.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfyzcayhF-CPcqrQRjy9JnGdYXafJoT4G_9jLVsM-8H1l2z4Vd9Q4hgtvJ2ZrCFiVUHWoLg5LqIW66CGxWHt0rkXud6wenyEuyQkqvFTb6DBk4Ge-QpcwqPXpXZkxAH1SEC4971S0VVA/s320/licensemanager.png" width="320" /></a></div>
<br />
Click on Settings :<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudrf1x3ShTQASytMGbOTGV7Yp1f2yItN8-UDM7nkPbEH77cqG0TuXMP7AYo6FNq4x34agKERHlbesSJynQdMi8JrhRXTSaps1obRVwS1Vzal4BLWPHxKbdH9TlnZS8p7P7ZIo3s-3ig/s1600/HardwareKey.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudrf1x3ShTQASytMGbOTGV7Yp1f2yItN8-UDM7nkPbEH77cqG0TuXMP7AYo6FNq4x34agKERHlbesSJynQdMi8JrhRXTSaps1obRVwS1Vzal4BLWPHxKbdH9TlnZS8p7P7ZIo3s-3ig/s400/HardwareKey.png" width="293" /></a></div>
<br />
When you got the valid license use the General Settings of the License Manager (above the window) to apply the license key. Browse the license file and click on "Import License File".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwLmEwyIcPNvnDE89wcRY1dIps4T0NtQ6KCo_tBXoXpFUeGZgUS9o_d66X105nd_mXJuAo41SYaClLSQO9jQGv-x-KbF87CpBlqNY7Fkl0bTWYuBp4vQtibbTWW1h13K8edYQSjxQ7vQ/s1600/importli.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwLmEwyIcPNvnDE89wcRY1dIps4T0NtQ6KCo_tBXoXpFUeGZgUS9o_d66X105nd_mXJuAo41SYaClLSQO9jQGv-x-KbF87CpBlqNY7Fkl0bTWYuBp4vQtibbTWW1h13K8edYQSjxQ7vQ/s400/importli.png" width="293" /></a></div>
<br />
<br />
Then open up SAP Business One with the Manager user (or using an account that has user management privileges) and go to Administration > Licence Administration. Select the user account that you need to assign permissions to (in my case it was 'Manager') and select the required license type to apply for the licence.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Um3Oj-MT8eQQpOOWWiGjH3r2tgzkISMZW4Nc5QtVcYbV7cKDzaCfGNQLTI8BUPFNX7AAWEYl5XncUUO29TL_7L4ZVRcW8JAb5fz3STWEJ2B1DLpp8SW7ZVwvedAcaWc5hWHd47w-Cg/s1600/licenseAdministration.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Um3Oj-MT8eQQpOOWWiGjH3r2tgzkISMZW4Nc5QtVcYbV7cKDzaCfGNQLTI8BUPFNX7AAWEYl5XncUUO29TL_7L4ZVRcW8JAb5fz3STWEJ2B1DLpp8SW7ZVwvedAcaWc5hWHd47w-Cg/s400/licenseAdministration.png" width="400" /></a></div>
<br />
Click on Update to finish the process.<br />
<br />
<br />
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com1tag:blogger.com,1999:blog-9082320068460818273.post-76629797737342756512016-07-20T11:16:00.004+05:302022-11-10T19:26:04.422+05:30WCF Error The ExtendedProtectionPolicy.PolicyEnforcement values do not match<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<b>Error Message :</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b>==============</b></div>
<span style="font-family: inherit; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div style="color: black; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: right; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
</div>
<div style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); height: auto; margin: 0px; overflow: auto; padding: 0px; text-align: left; text-indent: 0px; width: 847.205px;">
<code style="overflow-wrap: normal; word-wrap: normal;"><span style="font-family: inherit;"><span style="background-color: transparent; white-space: normal;"><span style="color: #cc0000; font-style: normal; font-variant: normal;">The extended protection settings configured on IIS do not match the settings configured on the transport. The ExtendedProtectionPolicy.PolicyEnforcement values do not match. IIS has a value of Never while the WCF Transport has a value of Always.</span></span> </span></code></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="color: black; margin-left: 1em; margin-right: 1em;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglsno8D4hOnko0oajnSTQGCXoLJXSkccpDOywL0LR2TbB4gvTKUgv1xLRqmW9p-4aVlw9cVNzRc_dBEKU6SBHANVHGeJswuRXZOvwYclVxkQDDMt0do2b9Gy5lMGQYxN_mdto50lhaiw/s1600/WCF+on+IIS.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglsno8D4hOnko0oajnSTQGCXoLJXSkccpDOywL0LR2TbB4gvTKUgv1xLRqmW9p-4aVlw9cVNzRc_dBEKU6SBHANVHGeJswuRXZOvwYclVxkQDDMt0do2b9Gy5lMGQYxN_mdto50lhaiw/s640/WCF+on+IIS.png" width="640" /></a></span></div>
<br />
<br />
<b>Binding Configuration Used:</b><br />
<span style="font-size: large;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"><bindings></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <netTcpBinding></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <binding name="mynet" sendTimeout="00:00:05" portSharingEnabled="true"></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <security mode="None" /></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </binding></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </netTcpBinding></span><span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"><basicHttpBinding></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <binding name="myBinding" maxReceivedMessageSize="2147483647"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <security mode="TransportCredentialOnly"></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <transport clientCredentialType="Windows"></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> <extendedProtectionPolicy policyEnforcement="Always"/></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </transport></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </security></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </binding></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"> </basicHttpBinding></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: medium;"></bindings></span><br />
<div>
<br /></div>
<div>
<b>Solution : Set site policy enforcement :</b><br />
<b>===============================</b></div>
<div>
<b><br /></b></div>
1. Go to IIS and then to your hosted service listed under Sites.<br />
2. Then go to "Authentication" in the IIS section group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirRAjYxMue2Heb4Lb7pXVVHHaGRzG6SQIDkuGMwnpHr246nLcned_Zg_eLiB-PxVp7ndff8PXy6ZAPWNA773zaaKJ4uRGmPBda8kRdM8BDVhxyJD2NsnOGu6kzT3Ag_1YyGdfo_I23Xg/s1600/IIS+Authentication.PNG" style="margin-left: 1em; margin-right: 1em;"><span style="color: black;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirRAjYxMue2Heb4Lb7pXVVHHaGRzG6SQIDkuGMwnpHr246nLcned_Zg_eLiB-PxVp7ndff8PXy6ZAPWNA773zaaKJ4uRGmPBda8kRdM8BDVhxyJD2NsnOGu6kzT3Ag_1YyGdfo_I23Xg/s640/IIS+Authentication.PNG" width="601" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
3. Enable Windows Authentication.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6EgSvarfrDF5H43XkaIaCWqpx-Nk0Cre9sKH32yLjJqK1xTl7sDzIdKYjQl07BiDdb_QoSgdqv5Lud-8vdFpAOpS8P1I67TkuU3nWzlkKQmwNhJrLiU_Nqbjq7fQJUUkM0DKW4eiCcQ/s1600/Should+be+changed+as.PNG" style="margin-left: 1em; margin-right: 1em;"><span style="color: black;"><img border="0" height="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6EgSvarfrDF5H43XkaIaCWqpx-Nk0Cre9sKH32yLjJqK1xTl7sDzIdKYjQl07BiDdb_QoSgdqv5Lud-8vdFpAOpS8P1I67TkuU3nWzlkKQmwNhJrLiU_Nqbjq7fQJUUkM0DKW4eiCcQ/s640/Should+be+changed+as.PNG" width="640" /></span></a></div>
4. Select Windows Authentication and click on Advanced Settings from Action panel.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9cjlWQHhqTfADYomVe7K4w6g_Q-_MxbXpdkiK1ypZywC-MRm576ys8sDx2yLdTaULuU0taP_EcKu5Bxb46JcWl2XfuSE4KwcjJNF_v24YIuqCQqiIZc5FsB8ocEcfXEykXMIk8j8BBw/s1600/Advanced+Settings+Extended+Protection.PNG" style="margin-left: 1em; margin-right: 1em;"><span style="color: black;"><img border="0" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9cjlWQHhqTfADYomVe7K4w6g_Q-_MxbXpdkiK1ypZywC-MRm576ys8sDx2yLdTaULuU0taP_EcKu5Bxb46JcWl2XfuSE4KwcjJNF_v24YIuqCQqiIZc5FsB8ocEcfXEykXMIk8j8BBw/s640/Advanced+Settings+Extended+Protection.PNG" width="640" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
5. Then set the extended protection to "Required" and click OK.<br />
6. Now recheck the service URL.<br />
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-43727115521538776352016-07-19T17:23:00.004+05:302022-11-10T19:25:41.032+05:30Remote Debugging a WCF Service<div dir="ltr" style="text-align: left;" trbidi="on">
I've recently needed to remotely debug a WCF service hosted in a Test (QA) environment, as the described issue was not reproducible in my local workstation. After having read the <a href="https://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx">MSDN</a>, and referring to some Youtube materials, I could configure the remote debugging tools.<br />
<br />
First, you need to download the matching remote debugging tools set to your Visual Studio version.<br />
<br />
Latest version for VS 2015 : <a href="https://www.visualstudio.com/downloads/download-visual-studio-vs#d-remote-tools">Remote Tools for Visual Studio 2015 Update 3</a><br />
Latest version for VS 2013 : <a href="https://www.microsoft.com/en-in/download/details.aspx?id=44918">Remote Tools for Microsoft Visual Studio 2013 Update 4</a><br />
<div>
<br /></div>
<div>
You have to download and install the matching bit version (x86/x64) package on the <u>remote server where your service is hosted</u> (not in the PC where the source code and Visual Studio is installed) . When the setup is completed, you might be asked to restart the server. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf7I2xFf6dIGT3uPVCEOm0BC9AySU1_5bfojAwPQvvQ615quZmEOuoAEHWNXwCOV6R04PUkqS-gFoxEH-WAZtimxZvTRcXhmy8X6axXowUyiPG-XM-cHZ9cW334CCl1SyeDLBX6b1m9A/s1600/rt4vs2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf7I2xFf6dIGT3uPVCEOm0BC9AySU1_5bfojAwPQvvQ615quZmEOuoAEHWNXwCOV6R04PUkqS-gFoxEH-WAZtimxZvTRcXhmy8X6axXowUyiPG-XM-cHZ9cW334CCl1SyeDLBX6b1m9A/s320/rt4vs2013.png" width="320" /></a></div>
<br />
<br />
You will get this icon into your desktop.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1TBZEEt3YZZg4XmiHbq4-xVBf0KsVFCjbbl_IqQ_nQHPFMW8FpYKb9RqMTTYpLMBX9p8tDFVwZrVPwEh2jeNWxe2jktHFgYAeSxXpytXiK72BWU6_Z7uF1ddac2nzo3FmXg8VZavJCw/s1600/rdicon.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1TBZEEt3YZZg4XmiHbq4-xVBf0KsVFCjbbl_IqQ_nQHPFMW8FpYKb9RqMTTYpLMBX9p8tDFVwZrVPwEh2jeNWxe2jktHFgYAeSxXpytXiK72BWU6_Z7uF1ddac2nzo3FmXg8VZavJCw/s1600/rdicon.PNG" /></a></div>
<br />
<br />
Then run this with Administrative privileges (<i>Run As Administrator</i>).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW7ym2NHlhgk7rN2MkawMgTpSrMRCR5YNIDQpcK1ynldoYrQpUd2jnA31uYQrAuZtvG_y6vEejJYHv-n0Yky7Ipe4lJvpwWuLBIafSoBFeS4LMd4Pp8Vl6961HANd_5Hayb30IWQLluQ/s1600/vsremotedbmonitor.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW7ym2NHlhgk7rN2MkawMgTpSrMRCR5YNIDQpcK1ynldoYrQpUd2jnA31uYQrAuZtvG_y6vEejJYHv-n0Yky7Ipe4lJvpwWuLBIafSoBFeS4LMd4Pp8Vl6961HANd_5Hayb30IWQLluQ/s640/vsremotedbmonitor.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now go to Tools => Options Set the Authentication mode to "No Authentication" and check the "Allow any user to debug". and click on OK. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Vg4-53bTjlvwy2AlEFTqLGp5dx6AJO2YwDQaIik3L3HG1Cit6uzg0dGOHiHnCQ7ZDdCSaQPYIapmb0nt1Xzv13iBG0q7K94VMMH62QPtKEygZmZPI4P0vrwo9d12SgUg3wzETLo46w/s1600/vsremotedbmonitoroption.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Vg4-53bTjlvwy2AlEFTqLGp5dx6AJO2YwDQaIik3L3HG1Cit6uzg0dGOHiHnCQ7ZDdCSaQPYIapmb0nt1Xzv13iBG0q7K94VMMH62QPtKEygZmZPI4P0vrwo9d12SgUg3wzETLo46w/s400/vsremotedbmonitoroption.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If your port 4018 is blocked, you have to open the port from the Windows firewall. Before switching back to the workstation pc, you have to copy the <a href="https://msdn.microsoft.com/en-us/library/ms241613.aspx">pdb files</a> which match the application build version currently running in the remote server. If you have control of the remote server, my advice is to rebuild your application in debug mode and copy the build assemblies along with the pdb files into the remote server. If you do so, you will have more information and control while you are debugging the code.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now switch back to your workstation PC where you have the Visual Studio and the source code.</div>
<div class="separator" style="clear: both; text-align: left;">
Open up your project (if you haven't) Go to Visual Studio options and uncheck Enable Just My Code option.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix_bNPXmS2nHFUX2hy8aKpbeMz63ETugXhDn7PprWqa28COIhQ2R1DGRdNRM3utsqAiHU3QUNOX8vpfydUfSoJ_mon2gzDCIsdoEJMXTphyphenhyphenzjhUPOEklApPKWtSfvMuemMqWAp4Ks-Yw/s1600/options.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix_bNPXmS2nHFUX2hy8aKpbeMz63ETugXhDn7PprWqa28COIhQ2R1DGRdNRM3utsqAiHU3QUNOX8vpfydUfSoJ_mon2gzDCIsdoEJMXTphyphenhyphenzjhUPOEklApPKWtSfvMuemMqWAp4Ks-Yw/s640/options.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you need to debug the referenced libraries, you can configure the Symbols and cache them to a local folder to speed up your next debugging session.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRgC9MjeGcMR0w-M1hBH-B9ape4dejZNqhESDIV62xtRQCril-YTK-ytWsbd7M3oSw7hyphenhyphenta8echUGsRNBpqpEtYVIs2aVVD_y6I6HgqCG4PNnBPZBks5-F-VWef1r7K8i_VChREJprSg/s1600/symbolcache.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRgC9MjeGcMR0w-M1hBH-B9ape4dejZNqhESDIV62xtRQCril-YTK-ytWsbd7M3oSw7hyphenhyphenta8echUGsRNBpqpEtYVIs2aVVD_y6I6HgqCG4PNnBPZBks5-F-VWef1r7K8i_VChREJprSg/s640/symbolcache.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now go to <b>Debug > Attach to Process </b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgld_YDUX0CNYw-v-ttt-1zR_k7zwERi4b_JrsClWY560b8LLZTto8E_YooXR0VE8ugsBls7wbM2qIC4HxemFzfgLST7tWdsFj7eimjXToQSkdCe7aUj51rf_ic_eVuQSRr0D0iyJrViQ/s1600/attachtoprocess.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgld_YDUX0CNYw-v-ttt-1zR_k7zwERi4b_JrsClWY560b8LLZTto8E_YooXR0VE8ugsBls7wbM2qIC4HxemFzfgLST7tWdsFj7eimjXToQSkdCe7aUj51rf_ic_eVuQSRr0D0iyJrViQ/s640/attachtoprocess.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Then select "<b>Remote</b>" from Transport drop down, and click on "<b>Find...</b>"</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhf1GTy6ldN31LqR331CydIxdPnGPS3QdqdzEBkRKKRrsgw7z5sHJA1AuUvBntfyoh91HkR8UloxnPn1wCEAfgqSANoZmHBQVebUxnXGuiaJUwuSo5uwENekuANO76NPaPsoNJlgSSQA/s1600/remoteconnection.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhf1GTy6ldN31LqR331CydIxdPnGPS3QdqdzEBkRKKRrsgw7z5sHJA1AuUvBntfyoh91HkR8UloxnPn1wCEAfgqSANoZmHBQVebUxnXGuiaJUwuSo5uwENekuANO76NPaPsoNJlgSSQA/s400/remoteconnection.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Your remote server details will be shown if your remote server is on the same subnet as your workstation. If your remote server is outside your subnet you have to type the full hostname along with the remote debugging port (Ex: MyRemoteServer.mydomain.com:4018) and you have to make sure the firewall on this server allows TCP traffic to the specific port.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
When you select the remote host, you will get the list of running processes on the remote server. Make sure you have clicked "Show processes from all users".</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8KntHKPGGlvI5_liEMQzH6uDMgyMvyArQcvsGkMOql0lphrxVkwDAEci8uPTP6TWQwxxBABJiACpdP_g2xCn-6qqNzsVmQq8LexYkH5WOdJIomLpmZ6UthUymG6wmzhyphenhyphenb-F6s85b4Ig/s1600/attchedtoProcess.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8KntHKPGGlvI5_liEMQzH6uDMgyMvyArQcvsGkMOql0lphrxVkwDAEci8uPTP6TWQwxxBABJiACpdP_g2xCn-6qqNzsVmQq8LexYkH5WOdJIomLpmZ6UthUymG6wmzhyphenhyphenb-F6s85b4Ig/s640/attchedtoProcess.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Select <b style="font-style: italic;">w3wp.exe </b>process and click on <b>Attach</b>. If multiple instances of the w3wp process are shown, you can pick the correct one by referring to the username column. if it is not shown, you have to access the service URL from your browser/WCF test client or directly from the remote server IIS to activate the service. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now you can place your breakpoint on your code and run your application. You will be able to debug line by line with variable values. (Note: Variable values might not appear if you haven't copied the pdb files into your server location or pointed at the Symbol file (.pdb) location).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
</div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-15961249099624305922016-02-29T16:22:00.004+05:302022-11-10T19:23:56.560+05:30Set Always run as Admin permanently for any Program<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; border: 0px; clear: both; color: #222426; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;">
In any Microsoft Windows version (including XP and Later), you have to right-click on the executable file (exe) and select "Troubleshoot compatibility".</div>
<ol style="background-color: white; border: 0px; color: #222426; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px 0px 1em 30px; padding: 0px;">
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">Select "Troubleshoot program"</li>
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">check "The program requires additional permissions"</li>
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">Click "Next", click "Test the program..."</li>
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">Wait for the program to launch</li>
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">click "Next"</li>
<li style="border: 0px; margin: 0px 0px 0.5em; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">select "Yes, save these settings for this program"</li>
<li style="border: 0px; margin: 0px; overflow-wrap: break-word; padding: 0px; word-wrap: break-word;">click "Close"</li>
</ol>
<div>
<span face="arial, helvetica neue, helvetica, sans-serif" style="color: #222426;"><span style="font-size: 15px; line-height: 19.5px;">After doing this, No matter how many shortcuts you create for your program, those will be executed with Admin privileges if your current login has administrator privileges for your local environment, if not you will be prompted to enter the admin credentials. </span></span></div>
</div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-11601239088344769072016-02-24T20:00:00.001+05:302022-11-10T19:23:30.698+05:30Configure WCF for IIS on Windows 8<div dir="ltr" style="text-align: left;" trbidi="on">
I have encountered with this issue when I was trying to deploy a WCF service on a fresh Windows 8.1 machine.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjkIjtXggwiza8i8xLtfvGbkw_DkRR6zJEJfwjVm_RSe5yE8KyNyJi9UaSUjpZ88xWxxJWBFhPnoZbkrY7A2aU4YY6i_ISEOYbM9rOHHsg9uH1oXWPmW-KuLrNRW_zelCITpzK1m_O-A/s1600/1.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjkIjtXggwiza8i8xLtfvGbkw_DkRR6zJEJfwjVm_RSe5yE8KyNyJi9UaSUjpZ88xWxxJWBFhPnoZbkrY7A2aU4YY6i_ISEOYbM9rOHHsg9uH1oXWPmW-KuLrNRW_zelCITpzK1m_O-A/s640/1.PNG" width="640" /></a></div>
<br />
My next action was to try registering ASP.Net applications for IIS using ASP.Net IIS Registration tool (<span style="font-family: "courier new" , "courier" , monospace;">aspnet_regiis -i</span>) as all the IIS default components have been already installed and functioning. <br />
<br />
I've installed the below options in .Net Framework 4.5 Advanced Services from the Windows Features (as described in this <a href="http://blogs.msdn.com/b/writingdata_services/archive/2012/03/15/running-wcf-data-services-on-windows-8-consumer-preview-part-1.aspx">msdn blog</a>) and my WCF service got up and running.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnCN8FZxUMRaorm62bF5B7GkRoDvsH7lLaG1-BlP6SC899RabZwI7_EXFHNrZE-u_wk745pKb84XogMJgntV5qKu5tUsQ7vbKeuo3AYWpMvFuUmFv4WqMz9PyC1VNLO0hA8JzTZDOwGA/s1600/2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnCN8FZxUMRaorm62bF5B7GkRoDvsH7lLaG1-BlP6SC899RabZwI7_EXFHNrZE-u_wk745pKb84XogMJgntV5qKu5tUsQ7vbKeuo3AYWpMvFuUmFv4WqMz9PyC1VNLO0hA8JzTZDOwGA/s320/2.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you are a console lover, you can use these commands in command prompt to enable the HTTP Activation.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Ref : <a href="http://stackoverflow.com/questions/11460142/cannot-serve-wcf-services-in-iis-on-windows-8">Stack Overflow Post</a></div>
<pre class="default prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">C</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">:</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">\> DISM </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Online</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;"> </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Enable</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Feature</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;"> </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">FeatureName</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">:</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">WCF</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">HTTP</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Activation</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">
C</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">:</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">\> DISM </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Online</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;"> </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Enable</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Feature</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;"> </span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">/</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">FeatureName</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">:</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">WCF</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="pln" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">HTTP</span><span class="pun" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">-</span><span class="typ" style="border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin: 0px; padding: 0px;">Activation45</span></code></pre>
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com0tag:blogger.com,1999:blog-9082320068460818273.post-92131531012323448052016-02-22T12:44:00.004+05:302022-11-10T19:23:05.699+05:30First SAP Business One Add-On Project on Visual Studio 2013 using SAPBusinessOneSDK<div dir="ltr" style="text-align: left;" trbidi="on">
In this post, I'm going to explain how I created my first SAP Business One Add-On Project using Visual Studio 2013.<br />
<br />
Before progressing ahead you must verify the prerequisites mentioned in this <a href="http://scn.sap.com/docs/DOC-41725" target="_blank">SAP Community Page</a>.<br />
<br />
After you have installed the SAP Business One studio, make a search in the start menu.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtsGj1wpTbv1XUondRoVObHBblo5H-gPo7OwY9ik1trnt6jjnbauM9hPT81gwE4GQFRAtfi7j-80n8ThpIUkWhH266cuy2GYlgFLDPOB8p0zVK0k7oFG9QOygspUHp9L9Vkhy1_aTcww/s1600/Start+Menu+Search.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtsGj1wpTbv1XUondRoVObHBblo5H-gPo7OwY9ik1trnt6jjnbauM9hPT81gwE4GQFRAtfi7j-80n8ThpIUkWhH266cuy2GYlgFLDPOB8p0zVK0k7oFG9QOygspUHp9L9Vkhy1_aTcww/s1600/Start+Menu+Search.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
- SAP Business One Studio (32-bit), is the SAP in-build IDE provided for Add-on development.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPTDPUjX5m5k1oGwfBFja8Hs0jTNukIzMBuXmXbyAd7SJeBULxtKMDg9m3BSog8o53kxL9e_VwXzYDsWtXw7V0M-05JP9_FgdlPs-MCgthP4OnOmY03Ofg8OsC1mMoMGyrK4B5Q6oq_A/s1600/SAP+Business+Studio.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPTDPUjX5m5k1oGwfBFja8Hs0jTNukIzMBuXmXbyAd7SJeBULxtKMDg9m3BSog8o53kxL9e_VwXzYDsWtXw7V0M-05JP9_FgdlPs-MCgthP4OnOmY03Ofg8OsC1mMoMGyrK4B5Q6oq_A/s320/SAP+Business+Studio.png" width="320" /></a></div>
<br />
- SAP Business One Studio for Microsoft Visual Studio 2013 opens up the visual studio 2013<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTOvooTJDKANbFBEqEXfgQ5bCWqPayanD4NdE6sA54TVFpsQxfDYDRAQfNrm1xlLwdbA-EQk5C7cf60xKMHijAWDfe-5avj4Gz4l3lTwOy8bnddmnolPVp_koVZaqrEmTv84dIKQNcw/s1600/SAP+Project+Types+on+VS2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTOvooTJDKANbFBEqEXfgQ5bCWqPayanD4NdE6sA54TVFpsQxfDYDRAQfNrm1xlLwdbA-EQk5C7cf60xKMHijAWDfe-5avj4Gz4l3lTwOy8bnddmnolPVp_koVZaqrEmTv84dIKQNcw/s640/SAP+Project+Types+on+VS2013.png" width="640" /></a></div>
<br />
If you want to create the add-on from a Package generated by the "SAP Business One Studio" go ahead with the "SAP Business One Add-On Project From B1s File" project type and Visual Studio will prompt you to browse your '<span style="font-family: "courier new" , "courier" , monospace;">b1s</span>' file.<br />
<br />
Select "SAP Business One Add-On Project", and you will get an SAP Business One to look and feel form as below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOEIqwtZMvSE1u-y_BPijTTskom8U5Hwk72Ac02umyaGgGkH4byws8gF34s3FHYEpbaqiVeVQTjSCpyp0wTdMI9D1EZQsviEfrG6iDkotQVq4OiudtIDlaVpkzRU8jraXjE4NKDcvXuQ/s1600/Hello+SAP+B1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOEIqwtZMvSE1u-y_BPijTTskom8U5Hwk72Ac02umyaGgGkH4byws8gF34s3FHYEpbaqiVeVQTjSCpyp0wTdMI9D1EZQsviEfrG6iDkotQVq4OiudtIDlaVpkzRU8jraXjE4NKDcvXuQ/s1600/Hello+SAP+B1.png" /></a></div>
<br />
When you start debugging the project you will be hit with the below exception.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3ahH8A3EoWgcOQUM6AUMoEerNrsL_w-Sx45d4JzBV9h3JWrBI40NbqPy_25NZ4yU9kslVWsKznBNzUj6xuUWQnC5OveKPO5KxsRviCxSiKsoKNH7ELTdSAhB866Wsu-XKFBG3o08Bg/s1600/Exception+on+First+Run.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3ahH8A3EoWgcOQUM6AUMoEerNrsL_w-Sx45d4JzBV9h3JWrBI40NbqPy_25NZ4yU9kslVWsKznBNzUj6xuUWQnC5OveKPO5KxsRviCxSiKsoKNH7ELTdSAhB866Wsu-XKFBG3o08Bg/s640/Exception+on+First+Run.PNG" width="640" /></a></div>
<br />
<br />
The reason was I haven't opened up the SAP Business One Client (32-bit) before starting the debugging process.<br />
<br />
I have updated the Title property of Form1 as "Hello Sap B1" and pressed F5.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0zn5st39ov-y9bEiU5YEvwKn5LxqU0Nwb8hXTFXSWS-Oojsa0MwGBPZz52N6XSaWWtG-OcxjZR-FbrpCHA7YmY5ZoNaJLresmVJAvcGDF_HHmdh710amnWckLzUF6I1geCjHKp-YlQ/s1600/Addon+on+SAP+B1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="427" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH0zn5st39ov-y9bEiU5YEvwKn5LxqU0Nwb8hXTFXSWS-Oojsa0MwGBPZz52N6XSaWWtG-OcxjZR-FbrpCHA7YmY5ZoNaJLresmVJAvcGDF_HHmdh710amnWckLzUF6I1geCjHKp-YlQ/s640/Addon+on+SAP+B1.png" width="640" /></a></div>
<br />
1- My add-on is listed under the Modules of the Main Menu.<br />
2- Form1 will be visible when you click on Hello_SAP_B1.<br />
3-When Form1 is clicked, you could see your form inside the SAP Business One.<br />
<br />
Then open the <span style="font-family: "courier new" , "courier" , monospace;">Menu.cs</span> file, according to my understanding the code in this file controls how the add-on is shown in the SAP Business One Client.<br />
<br />
I've done a few changes in the <span style="font-family: "courier new" , "courier" , monospace;">Menu.cs</span> file with the intention of observing how it behaves.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhF3G3BUZs5z66cfN3Yyp_B6g5QXD7n0juBdBIXNAMxcMgTPK7KN3GlaBqF2MbLXvzKDqKgHv7ULtCn9HsA_6Gpe7pUr11_fQx64JBC-6pJR1opPcc3P1aa_K9LfC70Cqk3CYUjdP00A/s1600/Menu+cs.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="617" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhF3G3BUZs5z66cfN3Yyp_B6g5QXD7n0juBdBIXNAMxcMgTPK7KN3GlaBqF2MbLXvzKDqKgHv7ULtCn9HsA_6Gpe7pUr11_fQx64JBC-6pJR1opPcc3P1aa_K9LfC70Cqk3CYUjdP00A/s640/Menu+cs.png" width="640" /></a></div>
I've changed the name of the package (removed underscore signs), added an extra code block to check and remove if my add-on it is listed in the Main Menu, and changed the display name of my form.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5-L10zmK6pPQjIB0qmznvXmTBsQXP8DL2Cg0w9Z_vIqMJo3QecJyqpd_8moTYDJTw4TeHAdd53BlF5FrzL-3BQagwwz6vsqVV1ThauH6W4R1BiGhDRLbC6IPBFN4GlcunlPVO6f56w/s1600/Menu+cs+code+change+reflects.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5-L10zmK6pPQjIB0qmznvXmTBsQXP8DL2Cg0w9Z_vIqMJo3QecJyqpd_8moTYDJTw4TeHAdd53BlF5FrzL-3BQagwwz6vsqVV1ThauH6W4R1BiGhDRLbC6IPBFN4GlcunlPVO6f56w/s640/Menu+cs+code+change+reflects.png" width="640" /></a></div>
<br />
I've got the exact result that I wanted. Then I renamed Form1.b1f in the solution as "HelloB1.b1f" and set the same value for Unique ID. (Note::this change is indicated in the Menu.cs file code change by a red arrow).<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">oCreationPackage.UniqueID = <span style="color: red;">"Hello_SAP_B1.HelloB1"</span>;</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
If you debug the project at this stage your form will be listed in the main menu but will not be popped out. Luckily I could find out what was the reason by observing the <span style="font-family: "courier new" , "courier" , monospace;">HelloB1.b1f.cs</span> file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo0UyLEToy5M8A6elp9eGvqePu9y2HXBoOSZBbqtsdlQanXwWi-6rfQuR2RU8k288SIMr0hLRUtatL963vs4gIoKenJOhFRDUJNCYLNWdnk0eOKtiHDGPjNl23w_TZhpNS9hftr0V8nw/s1600/Form+Rename.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo0UyLEToy5M8A6elp9eGvqePu9y2HXBoOSZBbqtsdlQanXwWi-6rfQuR2RU8k288SIMr0hLRUtatL963vs4gIoKenJOhFRDUJNCYLNWdnk0eOKtiHDGPjNl23w_TZhpNS9hftr0V8nw/s1600/Form+Rename.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Even I have renamed the Form from Solution Explorer, which has not renamed the name of the behind class and certain annotation properties. So I've altered "Form1" with "HelloB1", as a result, you even will get two compilation issues in <span style="font-family: "courier new" , "courier" , monospace;">SBO_Application_MenuEvent </span><span style="font-family: inherit;">of Menu.cs class.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">After doing the below amendments, I could see my form inside the SAP Business One.</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3KBwys8_d_HdWVyuwbDoHo_1vRRCu7xnyz6v6bNhQU1TEVaDRp8c5FqQMJ6nxsabPZKAmAVKe710-uNnLREJuOyS5avmIhWkzCmMmjqbyHXILA2YiQjgAz_4Cm4K3GI-8l4Oo6dZ_qA/s1600/Menu+Event.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3KBwys8_d_HdWVyuwbDoHo_1vRRCu7xnyz6v6bNhQU1TEVaDRp8c5FqQMJ6nxsabPZKAmAVKe710-uNnLREJuOyS5avmIhWkzCmMmjqbyHXILA2YiQjgAz_4Cm4K3GI-8l4Oo6dZ_qA/s640/Menu+Event.png" width="640" /></a></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">These are the first few experiences that I had with the SAP Business One add-on development, and I </span>believe this post will be informative for all the people who start it for the first time.<br />
<br />
I'm pretty sure these PDFs will save a few days of your life.<br />
<a href="https://www.mepa.ch/images/Documentation/B1_90_WorkWithStudioSuite.pdf" target="_blank"><br /></a>
<a href="https://www.mepa.ch/images/Documentation/B1_90_WorkWithStudioSuite.pdf" target="_blank">How to Guide SAP Business One 9.0</a><br />
<br />
<a href="https://andresnaranjo.files.wordpress.com/2010/09/tb1300_en_col92.pdf" target="_blank">SAP Business One – SoftwareDevelopment Kit (SDK)</a><br />
<a href="https://www.blogger.com/goog_1365926977"><br /></a>
<a href="https://www.mepa.ch/images/Documentation/">Web site of Mepa-Data AG</a><br />
<br /></div>
Hasitha Haththellahttp://www.blogger.com/profile/11953466909004813752noreply@blogger.com13