Welcome
Minimize

20060610_150x150.jpg

If you've made it here, we are interested in something in common. This site is dedicated to the things that call my attention and that I want to share. It's personal but not private so go ahead and post a comment in the blog. Opinions and links are very welcome. ¡Enjoy Your Stay!

 Categories
Minimize
There are no categories in this blog.
 Recientes
Minimize
 Dunadan's Blog
Minimize
Author: Néstor Sánchez (EN) Created: Friday, April 27, 2007 1:37 PM RssIcon
Something happens everyday. Everyday something's worth remembering.
Posted By Néstor Sánchez on Thursday, July 09, 2009 10:23 PM

After learning Silverlight 3 was going to be launched on July 10 I got ready to install it on my dev machine. I went to the official website and was greeted with this message:

image

Right below that there was a System Requirements link and after following it I saw a chart that did not show support for IE8 in Windows 7 (I forgot to take a screenshot). I quickly sent a tweet (@hooligannes) the info and got replies from two people who didn’t have any problems, so I decided to dive in. Here’s what happened.

Failed Runtime Installation
A short while after pressing on the Click to Install button, I was shown a message that said that I could not install Silverlight without updating my development tools first. My guess is that users without a dev environment with Silverlight tools will not see this. I can’t validate though. It is too bad that a link to the dev tools is not provided in that screen. That could definitely be improved.

Silverlight Tools Installation
A few clicks later I was on the downloads page for the Silverlight 3 Tools For Visual Studio 2008 SP1

image

The installer informed that it would prepare the download, get the runtime, clean the installation, uninstall the Silverlight 2 Tools, update Visual Studio, install the SDK and then install the tools. The screens of the installation progress follow:

image

image

image

clip_image001

clip_image002

clip_image003

clip_image004

 

image

Naively, I did this install with IE open. I was still on the Silverlight home page, after pressing on the Click To Install button again I was surprised at the failure message. It said that I already had the runtime. Of course, closing the browser and reopening it did the trick and I could see the site like this.

image

 

For those who will just need to install the runtime, the screens below show what will happen (Except for the “Finished” screen, which I did not capture):

image

image

 

image

Posted By Néstor Sánchez on Thursday, May 21, 2009 6:18 PM

Touching too many pieces at once almost always causes errors and that became evident when I began to see the error of this post’s title. My VS2008 install was missing the asp.net templates and I could not understand why -later on I realized it was because I had not selected a component during the original install-, and tried several suggestions like running devenv.exe /installvstemplates from the command prompt and resetting VS settings in the Import and Export Settings menu.

Long story short, those brought more problems. I just needed to add the component, but now the VS installer would not run. Avoiding a longer delay I attempted to work on an existing project, but then I could not load the Controls Toolbox without facing three more errors now related to SQL components. Running the SQL Repair halted mentioning a VS problem.

I was doomed. OK, I am being dramatic, but it was a drag!

I decided to re-install VS. And what do you know, I couldn’t run the installer. A forced unsinstall was required now. A short search and Aaron Stebner’s blog post came to the rescue.

After uninstalling VS, I re-installed it, ran SP1 and repaired SQL. I am safe again, so I thought I’d save someone else the effort of finding VS Product GUID and post the command to uninstall Visual Studio Team System 2008.

msiexec /x {80C06CCD-7D07-3DB6-86CD-B57B3F0614D8}

If you have a different version, you’ll need to find it. Just read Aaron’s post and follow the steps to get the msiinv tool and obtain a list of installed applications according to msi.

Note: this is not always what you need to do. It was my last resource, so use it when the re-installation of templates does not work, and causes Packages registration to go awry.

Posted By Néstor Sánchez on Tuesday, May 19, 2009 11:45 PM

If you are like me and try to be environmentally friendly by not burning DVDs unless it’s really necessary, and you prefer to install apps from ISO images, be prepared for this one about VS 2010.

Like many programs that may need to run additional tasks after the first install pass,  VS2010 setup will continue after reboot. Make sure you set your ISO reading software to remount the image on the virtual drive after the reboot, it’ll save you from a surprise when the installer can’t find the necessary files to continue.

Posted By Néstor Sánchez on Tuesday, May 19, 2009 11:40 PM

Si eres como yo que trato de ser amigable con el ambiente al evitar crear copias en DVD a menos que sea realmente necesario y te lanzas a instalar programas desde copias ISO, entonces toma nota de lo que pasa con Visual Studio 2010.

Como muchos programas que requieren correr tareas adicionales despuñes de la primera pasada del instalador, el programa de setup de VS2010 necesita continuar después del reinicio. Asegúrate de que tu programa de lectura de ISO este configurado para volver a montar la imagen cuando el sistema operativo vuelva, te ahorrará una sorpresa cuando el instalador necesite encontrar archivos que necesita para continuar su siguiente etapa.

Posted By Néstor Sánchez on Monday, May 18, 2009 10:02 PM

I wrote a quick post about a problem that is easy to solve, but can be tricky to realize at first. Read the post at DotnetNuke.com.

Posted By Néstor Sánchez on Monday, May 18, 2009 9:59 PM

I just wrote another post in the DNN Blog. I’ve resolved to keep linking to the DNN posts here to bring more exposure to what I am doing lately. You can read about my first encounter with the 5.1.0 version here.

Posted By Néstor Sánchez on Saturday, May 16, 2009 10:44 PM

I needed to create a report in a DNN website to obtain the Total billable hours for a single case in Dynamics CRM. All my previous DotNetNuke modules for CRM had been done in VS2005, which lead me to miss a detail. I published the post at my DotNetNuke blog

Posted By Néstor Sánchez on Saturday, May 16, 2009 9:08 PM

Last week, I noticed Dynamics CRM had become slower and my DB had grown too large for the amount of real records I expected it to have. After some investigation I realized it was a combination of things.

The symptoms of a problem
There were way too many Matchcode Update records with a Waiting status. The normal System Jobs report can’t show more than 250 records at once and I had gone through several pages already. This simple SQL query showed that there were more than 100.000 records.

Select COUNT(*) As TotalWaitingTasks from dbo.AsyncOperationBase where StatusCode=10

This was going to take a long time to solve. (It took me about 8 hours to have the DB back to a normal size, because its server is not specially powerful).

I found several posts that suggested changing the status, the posts offered code to do it programmatically, but due to the number of records I’d have to modify them to be able to do it in chunks, avoiding a prolonged database lockout. The console utilities were too involved and after doing some investigation I realized that the fields I needed to change were two in a single table. Another simple SQL Query took care of it in a few hours.

Update dbo.AsyncOperationBase
Set StatusCode = 32, StateCode = 3
where OperationType = 12 and StatusCode=10

The OperationType value is for MatchCode Update, later on I found a few other workflows, so I just changed this the corresponding value. The value of 10 in StateCode is for “Waiting” and setting it to 3 is equivalent to “Completed”

I could’ve wrapped this one to do it chunks, but the day was over and nobody would be using the DB until the next day so I left it running.

Day 2
Early next day the update had finished. All System Jobs involved had been canceled. Next steps, delete the records and then shrink the DB.

However before I set out to delete them I needed to find the cause while the data was still there. Another simple query was needed:

Select Top 5 [Message] from dbo.AsyncOperationBase where StateCode = 3

I just get the first five, because obviously the result set would be way to big. In the field the reason was clear, it was a communication problem. The Message field showed an error stack trace:

System.Net.WebException: The request failed with HTTP status 400: Bad Request.
     at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, _ 
WebResponse response, Stream responseStream, Boolean asyncCall)
     at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
     at Microsoft.Crm.SdkTypeProxy.CrmService.RetrieveMultiple(QueryBase query)
     at Microsoft.Crm.Asynchronous.SdkTypeProxyCrmServiceWrapper.RetrieveMultiple(QueryBase query)
     at Microsoft.Crm.Asynchronous.UpdateContractStatesOperation.ExpireContracts()
     at Microsoft.Crm.Asynchronous.UpdateContractStatesOperation.InternalExecute(AsyncEvent asyncEvent)
     at Microsoft.Crm.Asynchronous.AsyncOperationCommand.Execute(AsyncEvent asyncEvent)
     at Microsoft.Crm.Asynchronous.AsyncHostHandler.Handle(AsyncEvent asyncEvent)
     at Microsoft.Crm.Asynchronous.QueueManager.PoolHandler.ProcessAsyncEvent(AsyncEvent asyncEvent)

 

 

A quick look around and I found that this was due to an incorrect value for AsyncSdkRootDomain in the DeploymentProperties  table. Yet another simple query.

SELECT [ColumnName],[NVarCharColumn]
  FROM [MSCRM_CONFIG].[dbo].[DeploymentProperties]
  Where [ColumnName] = 'AsyncSdkRootDomain' 

The value in this field has to be like where “server” matches the name of the host where Dynamics CRM is installed, and port the port used when installing it. The standard default port is 5555. Therefor, for a host called BIGSERVER with a standard install it would be “BIGSERVER:5555”.

After changing the value to the correct one, and verifying that connection was successful I used a query I used this query from Microsoft Support to delete the Cancelled jobs. The query is originally intended to fix a problem with all completed jobs, which includes cancelled and successful ones. When used, some history for workflows will be lost. This was not an issue for me and I ran it with confidence.

The query also took a long time to run, but in the end it did its job. If you inspect it you will see that it appropriately does the job in steps limited to 2000 records and also uses transactions in case any errors happen.

I repeated this steps for other Testing organizations and I went to bed happy with the results of the day.

Posted By Néstor Sánchez on Tuesday, March 17, 2009 3:37 PM

I worked in broadcasting and journalism long before I got involved in technology and it is another passion of mine. While my love for DNN progressively increased, I would devour as much information as I could find. In the DNN 2.X days, most of the available information was at the asp.net forums where at first I was a lurker, then a question flooder and finally even became a moderator (I still am). I always wanted to get involved with DNN and my

Sources of information have been sprouting (and also dwindling) around. One of my favorites was Seablick’s DNN Friday, but it is lagging behind. The problem is that a set deadline for your publication will almost surely be missed when business endeavors that pay the bills get in the way. Arguably, a huge number of community members are blogging about DNN and there’s no single comprehensive resource. Fortunately, that is bound to change and to start the path I am getting my DNN paws trained again to write read and write about DotNetNuke.

As a self-trained IT/Dev pro I have learnt that setting too high a goal will only doom my commitment. Therefore I’ve made a compromise with myself. I will only publish this round up when material is enough to make it worthwhile reading. Obviously, I have chosen the easiest and most informal way to publish it. It may transmogrify into a whole new animal in time, but I am satisfied to do it in this way, for now. Without any further ado, You can find DNN Round Up #1 at the DotNetnuke Blogs.

Posted By Néstor Sánchez on Tuesday, October 23, 2007 5:55 PM

Not every organization has the luxury of having a team that includes separate DBA's, developers and IT support. I just found an article that makes it easy for those that dread the moment when restoring a DB is inevitable. Check it out here: http://www.builderau.com.au/program/sqlserver/soa/Restore-your-SQL-Server-database-using-transaction-logs/0,339028455,339282046,00.htm

Posted By Néstor Sánchez on Thursday, October 18, 2007 2:28 PM

After releasing a module, sometimes a reorganization of files is performed in the development environment. Regardless of the method used to place the files in the corect locations, some locations will still contain the original files.

For some time DNN has been able to perform a clean up (deletion) of files. This is achieved by including a text file in the PA with the version number in the  ##.##.##.txt format and it should list the paths and filenames that should be deleted.

For example to delete the MyFile.ascx file, just include its name in the .txt file. If the file is within a directory like /DesktopModules/MyModule/MySubDirectory/MyFile.ascx, remove the DesktopModules/MyModule path to obtain only a path relative to the module folder: MySubDirectory/MyFile.ascx.

Posted By Néstor Sánchez on Thursday, October 18, 2007 2:28 PM

 

 

After enabling AJAX, it's pretty easy to declaratively add an animated image using the UpdateProgress control from the Toolkit controls and an animated gif image. This post assumes you already know how to enable AJAX in your module, if not refere to this previous post.

After enabling AJAX in DNN in any of the two ways detailed in the mentioned post, add an Update panel with a Label and a button control.

<asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>

<asp:Label ID="Label1" runat="server" Text="Label">asp:Label><br /><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />ContentTemplate>asp:UpdatePanel>

Add the UpdateProgress control to your .ascx file and set the AssociatedUpdatePanel property value to the Update Panel ID of the UpdatePanel you want it to be associated  to:

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">asp:UpdateProgress>

In the Progress Template element add an Image control with its ImageUrl property value pointing to your animated image.

 <ProgressTemplate><asp:image id="updating1" Imageurl="~/DesktopModules/MyModule/Images/LoadingIcon.gif" runat="server"/>ProgressTemplate>

The final markup should look like this:

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"><ProgressTemplate><asp:image id="updating1" Imageurl="~/DesktopModules/MyModule/Images/LoadingIcon.gif" runat="server"/>ProgressTemplate>asp:UpdateProgress>

 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>

<asp:Label ID="Label1" runat="server" Text="Label">asp:Label><br /><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />ContentTemplate>asp:UpdatePanel>

The best part about working with declarative programming is that you will not need to recompile your code.