Looks like I am going. I will write more about what I will be showing/talking about closer to the date but from the list of the sessions, It is going to be a lot of fun.........
Currently rated 3.0 by 3 people
- Currently 3/5 Stars.
- 1
- 2
- 3
- 4
- 5
Today, at MIX '08 keynote speech, Ray Ozzie, our Chief Software Architect, described a path that will result in the release of the project that I have been working on for sometimes. He said
“I see MIX as the first of a number of key launch milestones. Kind of on a path, with a series of events culminating at PDC (Professional Developers Conference) this October, a path that will bring many of the key elements of our software plus services strategy from incubation to life.”
Later on, he hinted more on the type of Software+Services that may be released in upcoming months. He talked about three core principles that drive the reconceptualization of our software in order to embrace the new world of Software+Services. He called the first principle “Social or Device Mesh” and went on to say how interpersonal nature of the web will ultimately impact everything we do. Everything! < Developers listen carefully....> including a “Centralized, Web-based deployment of device-based applications”. Finally, he talked about what I personally have been working on and feel very excited about. He described it this way:
“Imagine an App Platform that's cognizant of all of your devices. Now, as it so happens, we've had a team at Microsoft working on this specific scenario for some time now, starting with the PC and focused on the question of how we might make life so much easier for individuals if we just brought together all your PCs into a seamless Mesh, for users, for developers, using the Web as a hub.”
There are good reasons that I cannot give more details, but trust me, developers are in for a big treat by having the ability to build applications on this platform…can’t wait to tell you more…
TechCrunch was quick to publish this post with some screenshots of the presentation slides.....
Currently rated 4.0 by 5 people
- Currently 4/5 Stars.
- 1
- 2
- 3
- 4
- 5
During the past few months, I have been spending a bunch of time with our Silverlight team looking at their architecture and application building experiences. I must say that I am super excited about the ability to build managed apps with Silverlight 2. The integration with Visual Studio 2008 and Expression Blend is truly making the development experience great.
There are changes in APIs since we released the Silverlight 1.1 Alpha but all the changes are for good. You will get a much more .NET feel and see a more consistent API set.
The most exciting thing for me is when we see more and more of business applications use Silverlight to deliver a truly rich user experience to business users.
Check out Scott's first look at Silverlight 2 post and walkthrough sessions.
Currently rated 3.0 by 3 people
- Currently 3/5 Stars.
- 1
- 2
- 3
- 4
- 5
Yesterday, David Treadwell, our Vice President, made an announcement explaining the progress of some of our current investments in Live Developer Platform. I know David from back in Developer Division. He is a seasoned and inspiring leader and his deep experience with .NET platform is a great tribute to Microsoft seriousness in building a true developer platform for our Live services.
Two topics stand out for me in this announcement and here is why I think developer should care about them:
1) New API Unification strategy: We have over 30 (and growing) Live services that are publicly available today. You can expect these services continue to evolve and grow to provide more customer value over time. Today, the developer experience to build applications across these services is less than the perfect unified experience that one would hope for. We are heavily investing in making these APIs more coherent and consisted. Choosing Atom Publishing Protocol(APP) as the unifying API protocol is a big step towards a better unified Live platform. However, it is very important to note that APP will not be the only protocol that we will deliver our APIs in, but it is the common denominator protocol. Some services may decide to expose more heads (SOAP, JSON, WebDav, etc) based on their developer needs and scenarios. Even if you don’t like APP, don’t get hanged up on the fact that it is APP, think broader about the whole concept of having one way to experience many services that store different interesting dimensions of user data.
2) Delegation Authentication is a critical developer feature (which got the needed investment level): As you noticed, Windows Live ID team, now officially own and support Delegation Authentication. This is a change since what we announced last year. What this means is that we haven authentication seriously and have streamlined its scenarios into our core Live Platform Identity service. Without delegation, when applications and web sites want to access data of a Live ID user, they have to run their code in the context of user and with the same permission level. This causes a security issue not always this is the case that users trust an application do do anythin with thier system. Delegation Authentication enables a user to explicitly allow a web site to access part of his/her data within in a certain period of time. I will write another post dedicated to this and explain my experience trying to build a product using Live Delegation.
Currently rated 3.5 by 2 people
- Currently 3.5/5 Stars.
- 1
- 2
- 3
- 4
- 5
During the past 8-9 months I have been working hard on what could be the first revision of the next Microsoft Software + Service Developer platform. After many, many meetings, discussions, exec reviews, prototypes, demos, etc....I finally feel that we have locked down on a super cool plan to deliver an amazing dev platform that will make the life of developers much easier when building a special class of S+S applications. Unfortunately, I cannot talk about the project publicly until later in the year where we make public annoucement of our strategy and unwrap this baby. But when we do, I will be blogging like crazy here…stay tuned….we are so close I can smell it….
Currently rated 3.0 by 1 people
- Currently 3/5 Stars.
- 1
- 2
- 3
- 4
- 5
We used this demo internally for a long time but now it has been made available to public for some time. It shows an interesting way of integrating Microsoft Virtual Earth APIs with a moving camera that is installed on a bike riding through London river Thames. While the video is playing you will see the bike location is moving on the map below. Check it out here (Select "London River Thames" from the "Rides" menu).
Currently rated 4.0 by 4 people
- Currently 4/5 Stars.
- 1
- 2
- 3
- 4
- 5
I have recently been prototyping some concept applications for Windows Live using managed code in Silverlight V1.1 Alpha and thought it would be cool, if Dynamics CRM developers could take advantage and write their client side logic in, lets say, C# rather than JavaScript. Currently, you can use CRM form events (Onload/OnSave/OnChange) to add JavaScript code to the forms. Some of the reasons why someone would do that is to create richer and more interactive user experience, implement form verification/validation or mash up data from multiple sources, without spending the cost of making a round trip to the server.
I am excited about Silverlight V1.1 and the ability to write client side code in C#, so I spent a few hours to build a simple example that shows how to extend Dynamics CRM forms business logic using Silverlight V1.1 Alpha managed code. Here is why I think anybody should care about this sample compared to what is already enabled:
- Developer experience: I personally have more fun writing in strongly typed and rich languages like C# than JavaScript.
- Performance: Silverlight runs compiled C# code on the client. JavaScript is an interpreted language and hence generally slower in performance.
- Protecting your investment: There are limited ways to protect JavaScript code since the code is viewable by the client, on the other hand, the prospects of protecting Silverlight managed assemblies is much higher (Obfuscation, MSLP, etc).
Note that all these reasons only makes sense if you are convinced that your code should run on the client and don’t want to pay the cost for making a round trip to the server for processing every function.
On to the sample…..the sample implements a very simple logic just to help better understand the architecture: if the value of a field is changed, based on some logic, set the value of another field.
Requirements
- Install Visual Studio 2008 RTM (install the trial verion for free).
- Install Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008 RTM. This tool enables you to create, view and compile Silverlight 1.1 projects in Visual Studio.
- Install Microsoft Silverlight 1.1 Alpha September Refresh Runtime on all the clients that you want to run the managed assembly on. Note that Silverlight will automatically install this on the first use so no deployment is really needed. But to get your development environment quickly setup, I suggest that you install the runtime on your dev/test machine.
- Access to a server that runs Microsoft Dynamics CRM 3.0 or 4.0 (I have tested it with CRM V4.0 RC0)
Get started
1) Build your Silverlight Assembly: First lets build a Silverlight managed assembly to be called by CRM forms. Open VS and create a new Silverlight V1.1 project (or use the one that I have already created in the attachement). VS creates some default files. Rename the files to make your project look like below image (ignore the OnChange.js file for now).
Update the HTML page of the project, CRMSilverlight.html, to look like this. It is pretty standard, all I did was to rename some of the files. This HTML page is the one that is hosting the Silverlight control and will be exposed through an IFrame on CRM form(see below).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
<title>Microsofft CRM Silverlight IFrame</title>
<script type="text/javascript" src="Silverlight.js"></script>
<script type="text/javascript" src="CRMSilverlight.html.js"></script>
<style type="text/css">
.silverlightHost { width: 100%; height: 100%; }
</style>
</head>
<body>
<div id="SilverlightControlHost" class="silverlightHost" >
<script type="text/javascript">
createSilverlight();
</script>
</body>
</html>
Add a new C# managed method to Page.xaml.cs by creating calculateRating method. This is a simple method that will be called from CRM form. This is where all the fun begins, you can write all of your client side code in C#, beautiful! The method takes an int from CRM form and returns a string reflecting how good the credit score is, simple. The Scriptable tags simply means that the class and the method are accessible from JavaScript.
namespace CRMSilverlight
{
[Scriptable]
public partial class Page : Canvas
{
//This method is Scriptable which means it can be called from HTML DOM
//Put all of your complex logic in this method. You can write all of your logic in C#
//This methods takes a credit score integer and returnes a string rating
[Scriptable]
public string calculateRating (int creditScore)
{
string creditRating;
if (creditScore <= 500)
creditRating = "Bad";
else if (creditScore >500 && creditScore <=700)
creditRating = "Good";
else
creditRating = "Excellent";
return creditRating;
}
//When the page is loaded, a new object called basic is registered
//This object is used to access methods and properties of this class
//from HTML DOM
public void FromCRMForm(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
// This class will be referenced in JavaScript using keyword "basic"
WebApplication.Current.RegisterScriptableObject("basic", this);
}
}
That is it! compile your project. It should compile with no errors and create two files in the ClientBin folder of your VS project: CRMSilverlight.dll and CRMSilverlight.pdb. You are now ready to copy the project files onto the CRM server.
2) Publish the Silverlight managed assembly on CRM server
Now you need to put the project files on IIS so they can be accessed by CRM forms. Go to the server where CRM server is installed. Open IIS manager and create a new folder, SLCRM, in CRM web application root. Copy the files that are shown below from the VS project into this folder, including the ClientBin folder and its content (it includes the Silverlight managed assembly, CRMSilverlight.dll and its pdb, CRMSilverlight.pdb). Make sure that all the files, including the dll, can be opened from your browser (i.e. IIS correctly serves all the files).
3) Add an IFrame and two custom fields to CRM Form
Choose a CRM form to host the Silverlight control. I used the Account form and added an IFrame to the bottom of the Administration tab. Note that this IFrame is only there to host the Silverlight control on the page so you can make it as small and unnoticeable as possible. Set the URL of the IFrame to the URL of the CRMSilverlight.html file that you published on the server in step 2.
Now add two attributes to the Account Business Entity: Silver_CreditScore (number) and Silver_CreditRating (string). The attributes will then show on CRM Form designer as fields. Add these fields to the Account form, Administration section. All standard CRM customization stuff.
4) Hook up CRM form events to call the Silverlight managed assembly
In CRM form designer, add the following JavaScript code to the OnChange event for Silver_CreditScore field that you earlier added to Account form. Whenever this field is changed, this event is fired.
//This is how to access the Silverlight control on the IFrame page
//IFRAME_HiddenSL is the ID of the IFrame added earlier
var control = window.frames['IFRAME_HiddenSL'].document.getElementById('SilverlightControl');
var score = crmForm.all.silver_creditscore.DataValue;
//This is how to access the calculateRating method in the Silverlight managed assembly
var rating = control.Content.basic.calculateRating(parseInt(score));
crmForm.all.silver_creditrating.DataValue = rating;
I also included this script in the VS project that is attached (in OnChange.Js file).
That is it folks. Now save and publish the Account form using CRM customization tools. Open an account form, this will load the Iframe that has the Silverlight Control on it. Set a value in Credit Score field, this will fire the OnChange event. The OnChange event will then reach into the Silverlight Control in the IFrame and call the C# calculateRating method by passing the value of the Credit Score field. The rating gets calculated in managed assembly that is running in the browser and return the result to the CRM form. The last line of the OnChange script sets the value returned from Silverlight managed assembly to the Credit Rating field. Sweet...
The VS project for this sample is here:
CRMSilverlight.zip (131.88 kb)
Currently rated 4.6 by 9 people
- Currently 4.555555/5 Stars.
- 1
- 2
- 3
- 4
- 5
Dynamics CRM has an offline client (implemented as an Outlook add-in) that allows you to manipulate CRM data while offline and automatically synchronizes that data with the CRM server when you go back online. In Dynamics CRM 4.0, we opened up our offline client APIs for developers to build offline applications and as I have said over and over, Dynamics CRM is not about CRM applications only, one can build different types of applications on top of this platform that is currently called Dynamics CRM. When Dynamics CRM Live service and offline client APIs are used together, it enables very powerful applications that seamlessly work online and offline (and occasionally connected).
I will write more about CRM 4.0 offline APIs and programming model later on but for now, CRM aside, I have a request:
Are you a web site owner who wants to enable your customers to interact with your content while offline and get the updates automatically synchronized with your service? if so, what challenges have you faced? How useful did you find the existing platforms and tools? What is missing from today’s mix that prevents you from building client-cloud (Software and Service) enabled solutions. Do you even think such solutions are interesting?
Drop me a line, I’d love to hear from you.
Currently rated 5.0 by 1 people
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5
If you have never heard of Script# (Pronounced Script Sharp) check it out. It is a C# to Javascript/Ajax compiler that allows you to write your code in C# and then convert it into Javascript. It is not really new but I bet a lot of folks haven't heard of it. It comes very handy if you have to write a lot of client side business logic in Javascript.
For me, writing in C# is much easier than writing in Javascript and I know almost 99% of developers share the this view. But often you are forced to write your code in Javascript. Yes, we have the glorious managed Silverlight but still there are times that you have to write in Javascript. Microsoft CRM form programming is one example where writing Javascript is needed (well, for now). The product that I am working on uses a lot of Script# for some of its features. It is pretty cool......
Currently rated 4.5 by 4 people
- Currently 4.5/5 Stars.
- 1
- 2
- 3
- 4
- 5
Yes we can talk about cool features and put them in a bullet pointed list over and over but nothing replaces a good visual presentation. Jason Zander has some very cool slides with screenshots of my favorite Visual Studio 2008 features. Check out his post on VSLive and the link to the presentation slides....here is my favourite screenshot....Javascript IntelliSense......
Currently rated 5.0 by 1 people
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5