tag:blogger.com,1999:blog-274699312024-03-08T04:19:43.670+02:00Non-Stop BizTalk®A Microsoft®-Technolgies Veteran BlogYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.comBlogger56125tag:blogger.com,1999:blog-27469931.post-46572225774621606152009-03-18T13:48:00.003+02:002009-03-18T13:53:45.078+02:00Error creating a Data Source from the Planning Administration ConsoleHi and welcome to another post from Non-Stop BizTalk!<br /><br />I was trying to create a Data Source to AdventureWorksDW in the Planning Administration Console, PerformancePoint Server 2007. Got the following error message: <span style="color:#cc0000;">You do not have the required permissions to connect to the specified database (Error code: PerformancePoint_225000183) Connection to database AdventureWorksDW on server local failed. <span style="color: rgb(0, 0, 0);">This was caused by collaction settings in SQL Server 2005 for this database. The complete description of the problem problem and the solution are available <a href="http://social.technet.microsoft.com/Forums/en-US/ppsplanning/thread/aee86f0f-8f54-46e4-ab60-9f8929caf6cd">here</a>.<br /><br />Cheers,<br />Yousef<br /></span></span>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-19665546324698361882009-03-08T14:42:00.002+02:002009-03-08T14:45:34.583+02:00Would ARR help solve my problem?Hello and welcome to another post from Non-Stop BizTalk!<br /><br />Posted the following in the official IIS forum:<br /><br />Hi,<br /><br />I have the following scenario:<br /><br />I have 3 VLANs, or say 3 network segments. VLAN1 is the clients segment; VLAN2 has SharePoint Server, with a website that utilizes the PageViewer web part. This PageViewer is used to display websites hosted on Servers at VLAN3 (applications segment). Users from VLAN1 are prohibited to access the applications at VLAN3 directly; they have to do it via SharePoint's PageViewer); so when a users browses an application from the pageViewer at SharePoint he gets an access denied message for the contents in the viewer (since the PageViewer is merely an iFrame control -- URL holder). I am wondering if I can user the ARR module from IIS 7.0 to route the requests from VLAN1 to VLAN3 as if they were initiated from VLAN2 (SharePoint)..<br /><br />Appreciating your help,<br /><br />Yousef<br /><br /><span style="font-style: italic;">And got the following reply:</span><br /><br /><span style="color: rgb(0, 0, 153);">Sure, if you install ARR on machine which has 2 nics, one on vlan1 and the other on vlan3, it could accept requests for pages you want to allow from vlan1 and forward them to vlan3 - you would also need to update the links on your sharepoint pageviewer (or your dns entries in vlan1) to point to the ARR server. Note that while you can configure ARR to be an http forward proxy, you cannot use it as an https forward proxy.</span><br /><br /><span style="color: rgb(0, 0, 153);">Anil Ruia</span><br /><span style="color: rgb(0, 0, 153);">Senior Software Design Engineer</span><br /><span style="color: rgb(0, 0, 153);">IIS Core Server</span>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-44070751496528414892009-02-24T17:29:00.002+02:002009-02-24T17:40:30.582+02:00Lenovo ThinkPad R500 shuts down unexpectedlyHello and welcome to another post from Non-Stop Biztalk,<br /><br /> Got a brand new Lenovo ThinkPad R500 a couple of days ago. The laptop, equipped with Microsoft Windows XP SP3 kept shutting down unexpectedly. Apparently, this problem was caused by one of the windows services. First, I adjusted the recovery settings on each of the following services to be on failure, <span style="font-weight: bold;">Restart the Service</span>: for RPC, DCOM Server Process Launcher, COM+ System Application and COM+ Event System. The problem disappeared and a couple of days later on it came back to strike once again. Afterward, I applied the fix provided in this <a href="http://msmvps.com/blogs/athif/pages/68059.aspx">post</a>. Now, it seems that everything is working properly.<br /><br />YousefYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-27625676387307065082008-12-24T14:19:00.002+02:002008-12-24T14:36:35.102+02:00Confront the Brutal Facts<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW7bU_SvT6D2Sw7vQw9IqQ19W4EiS8WFVreOUrWr50tndaVWYxTXvJrB8oYFWrAvrFhe7484nP2WMh-8U4dR7kV7ebRL-4LUCIjWT2teM5hM9DZ75Pf_XuOAKthqAEmw4iuiwa/s1600-h/Stockdale.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW7bU_SvT6D2Sw7vQw9IqQ19W4EiS8WFVreOUrWr50tndaVWYxTXvJrB8oYFWrAvrFhe7484nP2WMh-8U4dR7kV7ebRL-4LUCIjWT2teM5hM9DZ75Pf_XuOAKthqAEmw4iuiwa/s320/Stockdale.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5283333419841936818" /></a><br /><span class="Apple-style-span" style="font-weight: bold; line-height: 16px; "><span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-size: small;">Check out: </span></span><a href="http://www.jimcollins.com/lab/brutalFacts/index.html"><span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-size: small;">Good To Great</span></span></a><span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-size: small;"> and </span></span><a href="http://en.wikipedia.org/wiki/James_Stockdale"><span class="Apple-style-span" style="font-family: arial;"><span class="Apple-style-span" style="font-size: small;">James Stockdale</span></span></a></span><div><span class="Apple-style-span" style="font-size:10px;"><span class="Apple-style-span" style=" font-weight: bold; line-height: 16px;font-family:arial;font-size:13px;"><span class="Apple-style-span" style="font-size: small;">Cheers</span><br /></span></span><div><span class="Apple-style-span" style=" font-weight: bold; line-height: 16px;font-family:Verdana;font-size:11px;"><br /></span></div><div><span class="Apple-style-span" style=" font-weight: bold; line-height: 16px;font-family:Verdana;font-size:11px;"><br /></span></div></div>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-69026231891610597412008-11-18T13:39:00.000+02:002008-11-18T13:42:58.178+02:00Microsoft and BPM: A Technology Overview - Whitepaper<span class="Apple-style-span" style="font-size:medium;">A very useful whitepaper by </span><span style="letter-spacing: -0.25pt; "><span class="Apple-style-span" style="font-size:medium;">Chappell & Associates, available <a href="http://download.microsoft.com/download/e/1/f/e1f30631-482e-43b5-a69f-036e31df0c81/Whitepaper%20-%20Microsoft%20and%20BPM%20-%20Technical.doc">here</a></span></span><div><br /></div><div>Enjoy,</div><div>Yousef</div>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-27855330630845481202008-10-30T10:06:00.003+02:002008-10-30T10:22:20.862+02:00Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))<span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size:small;">Hi and welcome to another post from Non-Stop BizTalk!</span></span><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size:small;">Had a virus or a trojan a couple of days ago on my Windows Server 2003 test machine. After I performed a scan-clean procedure, I luanched BIDS (Business Intelligence Development Studio) to work with the Adventure Works Cube Project sample. When I tried to browse the Adventure Works.cube, the browser failed to load and the exception </span></span><span class="Apple-style-span" style="white-space: pre; "><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size:small;">Invalid class string </span></span></span></div><div><span class="Apple-style-span" style="white-space: pre; "><span class="Apple-style-span" style="font-family:arial;"><span class="Apple-style-span" style="font-size:small;">(Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING)) was thrown.</span></span></span></div><div><span class="Apple-style-span" style=" white-space: pre;font-family:arial;"><span class="Apple-style-span" style="font-size:small;">I followed the steps available <span class="Apple-style-span" style=" ;font-family:Arial;"><a href="https://forums.microsoft.com/Forums/ShowPost.aspx?PostID=3577857&SiteID=1">here</a>, which is re-installing the </span></span></span></div><div><span class="Apple-style-span" style=" white-space: pre;font-family:arial;"><span class="Apple-style-span" style="font-size:small;"><span class="Apple-style-span" style=" ;font-family:Arial;">Microsoft Office 2003 Web Components, and this solved my problem.</span></span></span></div><div><span class="Apple-style-span" style=" white-space: pre; font-family:Arial;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style=" white-space: pre;font-family:arial;"><span class="Apple-style-span" style=" ;font-family:Arial;"><span class="Apple-style-span" style="font-size:small;">Cheers </span></span></span></div>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-55056136605410996612008-10-26T16:09:00.000+02:002008-10-26T16:11:10.964+02:00Foundations of SQL Server for Business Intelligence<iframe src="http://rcm.amazon.com/e/cm?t=nonstobiz-20&o=1&p=8&l=as1&asins=1590598342&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-55351251212547291172008-10-22T14:12:00.000+02:002008-10-22T14:25:05.228+02:00Failed to load application [DBName] due to incompatible versions. Please upgrade the application to version 3.0.3917.0.Hi,<br /><br />When you apply SP1 for PerformancePoint Server 2007 you need to upgrade your application databases, for them to work properly with the upgrade, or otherwise, you will keep getting the error message in the event viewer <em>"Failed to load application [DBName] due to incompatible versions. Please upgrade the application to version 3.0.3917.0." </em>and the applications created prior to the upgrade won't show up in the Planning Admin. Console.<em> </em>To upgrade the application databses run the Planning Server Configuration Wizard, then select Upgrade Databases in the step Add/Remove Services as the following screenshot ilustrates:<br /><br /><img id="BLOGGER_PHOTO_ID_5259951474749781906" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh36brWU5G7w8OYA9n03igjA19qbb9G3LqE67f5Cz1nPixU-0vM-fK4ew6Q6zn9XC8PufxnVLo1GwKJilDHyBVT3X_xQgSW7Eyr2VOpbJrcy1rEpiaTobDZETugWM4Axbrre8dy/s320/PPS-UpgradeDBsStep1.JPG" border="0" /><br /><br /><br /><br />In the next step "Upgrade Databases" select Upgrade Application Databases and proceed with the configuration procedure.<br /><p><br /><img id="BLOGGER_PHOTO_ID_5259952270204094770" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz_8_dBRNPF18VtngDkxk7MEHJHi8Uzz8-s5VJsDNorwV3d83cZQaH2YB7eSwl6VpyZ3lHqkWYcV2weoiBtvhyphenhyphenRxjADzwgBlLhnb8WD4QmNXcnRKsFNtIU76EHrZCrrB9AUrUZ/s320/PPS-UpgradeDBsStep2.JPG" border="0" /> </p><p>I hope this was useful!</p><br />YousefYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-33448151759753411262008-09-28T14:12:00.002+03:002008-09-28T14:19:57.046+03:00Planning Business Modeler: You cannot access this server because you don't have the appropriate permissionHi again and welcome to another post from Non-Stop BizTalk,<br /><br />When you try to login to your Planning Server from the Planning Business Modeler you receive the error message "You cannot access this server because you dont have the appropriate permission". Dont panic! Even if you're a Global Admin on your planning server, you have to be granted a User Admin role on one of the planning apps in your server in order to be able to login to it. This MS KB article has more info on this error message: <a href="http://support.microsoft.com/kb/941750">http://support.microsoft.com/kb/941750</a><br /><br />Happy PPS,<br />YousefYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-67317866988492504732008-09-16T13:32:00.000+03:002008-09-16T13:34:50.313+03:00PerformancePoint Server 2007<p align="center"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDvDejoSjx0ElfC0ckritLX6fZ2TyuQeVpUIhehKK78mBpydx0bkPqwfY3xd2vJk9WvpP-XuyVmoJnJ2LJqg6dC2AXCWuFrUvnqTfaF7t_jteq2xbvSVbRFUl8qs-j45oBaIF9/s1600-h/1.jpg"><img id="BLOGGER_PHOTO_ID_5246565593611643154" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDvDejoSjx0ElfC0ckritLX6fZ2TyuQeVpUIhehKK78mBpydx0bkPqwfY3xd2vJk9WvpP-XuyVmoJnJ2LJqg6dC2AXCWuFrUvnqTfaF7t_jteq2xbvSVbRFUl8qs-j45oBaIF9/s320/1.jpg" border="0" /></a><br /></p><br /><p></p>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-13040137811733342992008-09-15T16:30:00.002+03:002008-09-15T16:38:13.707+03:00Error Restoring PDW sample data cube in PPS 2007Hi and welcome to another post from Non-Stop Biztalk,<br /><br />I was trying to restore the data cube PDW.abf for the Monitoring Server sample available with the Microsoft PerformacnePoint Server 2007 and got the error message <em>The level '[1-08]' object was not found in the cube when the string, [Time].[Week].[1-08], was parsed. (Microsoft.AnalysisServices)</em>. Apparently, this cube has some inconsistencies and the PPS 2007 Team has a replacement for this cube available at <a href="http://blogs.msdn.com/performancepoint/archive/2008/01/03/error-restoring-pdw-sample-data-cube-in-2008.aspx">http://blogs.msdn.com/performancepoint/archive/2008/01/03/error-restoring-pdw-sample-data-cube-in-2008.aspx</a>. Replace the abf file at [SystemDrive]:\Program Files\Microsoft Office PerformancePoint Server\3.0\Samples with the downloaded one and then try to restore and everything should work properly.<br /><br />Cheers,Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-76535355127340450122008-08-19T13:46:00.000+03:002008-08-19T13:49:20.744+03:00Inspiration Starts Somewhere.<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkKFYBdtL12M_460pYLJXj36PrF8Df32N4-saHwky1qsjLhumCpTKW8RI2UB9wtVvYiDOa9Cla4W94iaAYOumy8pLp4kwwvsBIkMzQPeRKtQQgaWeIQ49n0Z3gsPQpZsFcVE-o/s1600-h/VSExpress.JPG"><img id="BLOGGER_PHOTO_ID_5236178945939253810" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkKFYBdtL12M_460pYLJXj36PrF8Df32N4-saHwky1qsjLhumCpTKW8RI2UB9wtVvYiDOa9Cla4W94iaAYOumy8pLp4kwwvsBIkMzQPeRKtQQgaWeIQ49n0Z3gsPQpZsFcVE-o/s320/VSExpress.JPG" border="0" /></a><br /><br/><br />Microsoft Visual Studio Express EditionsYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-33235193458141838782008-08-18T16:55:00.000+03:002008-08-18T16:58:44.356+03:00Stumbling on Happiness<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGwsmMyGd6qdHzajvuRCTtQw5tJRVFEkhau8yKcVbbSVxetW4fFl2sbYZqSSf37VApyA0i5-F464ZY1Imraa6cEnCSviz28MVTTQhO7SnxNAbFc6QE0TvRryJJUk3EdVnGFP0M/s1600-h/41S1T2AT2KL__SS500_.jpg"><img style="cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGwsmMyGd6qdHzajvuRCTtQw5tJRVFEkhau8yKcVbbSVxetW4fFl2sbYZqSSf37VApyA0i5-F464ZY1Imraa6cEnCSviz28MVTTQhO7SnxNAbFc6QE0TvRryJJUk3EdVnGFP0M/s320/41S1T2AT2KL__SS500_.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5235856683885162626" /></a><br />"If you have even the slightest curiosity about the human condition, you ought to read it. Trust me" --MALCOM GLADWELL, AUTHOR OF <em>BLINK </em><br /><br />Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-21722341537165017552008-07-21T13:21:00.001+03:002008-07-21T13:45:44.982+03:00Installing Team Foundation Server 2005Finally, I managed to install Microsoft Team Foundation Server - A Single-Server Installation. And guess what? It was a hell of a nightmare! So, in this post, I am gonna summarize the steps necessary to achieve a successful Single-Server installation (deployment). First, have a hard copy of the latest TFS 2005 installation guide from <a href="http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=E54BF6FF-026B-43A4-ADE4-A690388F310E&displaylang=en">here</a>.<br />Second, stick to the steps in this installation guide and DO NOT deviate from the installation walk-thru in this guide; I repeat, stick to this guide, or you'll end up trouble-shooting a thousand problems.<br />Third, after installing SQL Server 2005 (according to the installtion steps in the guide), you need to configure the Reporting Services as mentioned in Robbe D. Morris's guide, available <a href="http://www.eggheadcafe.com/articles/team_foundation_server.asp">here</a>. Fourth, DO NOT configure SharePoint Services 2.0 with SP2 After installing it; TFS will do this for you once you install it.<br />Fifth, you need to have the permission <strong>Log on locally</strong> for the other 2 domain accounts you will use when installing TFS (specifically, the TFS services account and the Reporting Services account) on the target installation server. To do this, open Start > All Programs > Administrative Tools > Local Security Policy. From the navigation tree on the left side pane, select Local Policies > User Rights Assignments and select <strong>Allow log on locally</strong> from the list on the right and assign the 2 accounts this permission.<br />Sixth, make sure to restart the target installation machine whenever you're asked to in the installation guide.<br />Finally, STICK TO THE STEPS listed in the installation guide available from <a href="http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=E54BF6FF-026B-43A4-ADE4-A690388F310E&displaylang=en">here</a><br /><br />Good luck!<br />YousefYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-60468765902592147202008-06-25T14:31:00.001+03:002008-12-10T20:27:11.372+02:00I Love www.CodingHorror.com<a href="http://www.codinghorror.com/"><img id="BLOGGER_PHOTO_ID_5215780483084655298" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlK_xkAEGlbPS1-IHAbXUxYWUwAckiDLKrvB7kJNDp1AyGv5g5P6euBXluRQhYsau-yEyDCIT-XEf_1A6G_7RPHlqzFWjShwO-gp8o0aXt1oB2pUucNpDGa0lZJWHyzOC4rJxZ/s320/CropperCapture%5B1%5D.jpg" border="0" /></a>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-26591014308793520902008-06-23T09:49:00.000+03:002008-06-23T09:51:17.547+03:00Business for the Tech. Guy, my list on Amazon's ListmaniaThe list author says: "A list of must-read business books for the technical guy." <a href="http://www.amazon.com/Business-nbsp-for-nbsp-the-nbsp-Tech-nbsp-Guy/lm/R1M8VAK5QYWCC7/ref=cm_srch_res_rpli_alt_1"> Here</a>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-31070427921411869852008-06-22T10:39:00.000+03:002008-06-22T10:47:47.284+03:00BizTalkServer2006R2_Capabilities.docI've just downloaded this document (titled, BizTalk Server 2006 R2 Capabilities) from the BizTalk server website (the post title points to the link on the BT website), and it's proved very useful. Although I consider myself an immersed BT developer, sometimes I just forget about certain BT terms or ideas; so, this document comes handy as a quick reference to almost every term and concept in Microsoft's hot BT Server.<br /><br />P.S. the page also contains a BT capabilities PDF poster.<br /><br />YousefYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-56558546774284787782008-06-10T15:11:00.000+03:002008-12-10T20:27:11.558+02:00Persuasion: The Art of Influencing People<p>Persuasion: The Art of Influencing People is a master piece! Although rated 2.5/5 stars on Amazon, I assure you that this book is a page-turner and must-read. By reading this book, you'll master these tiny techniques that make a difference for an effective, yet efficient communication; I was dazzled by the wealth of information available in it. The thing I liked the most about the book is that it combines information from both the fields of psycology and business. Absolutely recommended!</p><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3hyphenhyphen7ee0uRn_KcXiWWHEqhqT-WHjejzQGXWjUoEj9AsAna5t0PME8rDmi9Cx2BB3-IfvQkYNL0GeEC_u4eBi0yjzcP7kpRQ8CIwnsi1-q1M_4PF-hc90zzhzyxMvBXmkm3d6_v/s1600-h/41gDSrO92UL__SS500_.jpg"><img id="BLOGGER_PHOTO_ID_5210226301985293234" style="CURSOR: hand" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3hyphenhyphen7ee0uRn_KcXiWWHEqhqT-WHjejzQGXWjUoEj9AsAna5t0PME8rDmi9Cx2BB3-IfvQkYNL0GeEC_u4eBi0yjzcP7kpRQ8CIwnsi1-q1M_4PF-hc90zzhzyxMvBXmkm3d6_v/s320/41gDSrO92UL__SS500_.jpg" border="0" /></a>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com2tag:blogger.com,1999:blog-27469931.post-21631219350989902142008-04-15T01:13:00.000+03:002008-04-15T01:14:47.233+03:00Exploring the Singleton Design Pattern<a href="http://msdn2.microsoft.com/en-us/library/ms954629.aspx">http://msdn2.microsoft.com/en-us/library/ms954629.aspx</a> Nice I like!Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-76565302689352185642008-02-29T01:31:00.000+02:002008-12-10T20:27:11.751+02:00Agile Estimating and PlanningAgile Estimating and Planning Rocks: A Revolution<br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQJKyZrzgfA1EFEWePs5LfDMpgrzdIDS9y7LFfQo6Sq5qPNyyJWlMh00qPdIjz4__AR9VzhNrJgMclvbhuIxFL1W82fY5VitbntSp7VrFsBBnIK2u-8N44bllborsZ6ulFQfXx/s1600-h/51PpRabtJ2L._SS500_.jpg"><img id="BLOGGER_PHOTO_ID_5172178459148778466" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQJKyZrzgfA1EFEWePs5LfDMpgrzdIDS9y7LFfQo6Sq5qPNyyJWlMh00qPdIjz4__AR9VzhNrJgMclvbhuIxFL1W82fY5VitbntSp7VrFsBBnIK2u-8N44bllborsZ6ulFQfXx/s320/51PpRabtJ2L._SS500_.jpg" border="0" /></a>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-82189114945589652982007-11-09T21:44:00.000+02:002007-11-09T21:47:33.943+02:00Visual Studio 2008<span style="font-size:85%;">Earlier this year Visual Studio celebrated its tenth anniversary. As we move towards releasing Visual Studio 2008, let’s take a moment to reflect on the product's evolution.<br /><br />The first release of Visual Studio in 1997 featured separate IDEs (that required their own installation) for Visual C++, Visual Basic, J++, and a tool known as InterDev. Visual Studio 6.0 was a dramatic improvement that marked the birth of Visual Basic 6 and embodied the idea of a set of unified services across all languages.<br /><br />With Visual Studio .NET 2002 and Visual Studio .NET 2003, this vision was realized with the .NET Framework. For the first time an individual developer could write an application in the language of their choosing while taking advantage of a common set of tools including designers, drag and drop controls, and IntelliSense. Along with the increase of individual developer productivity was an increase in the size and complexity of development projects and teams.<br /><br />Visual Studio 2005 was born to help developers in teams of any size increase collaboration and reduce development complexity. With each progressive release, Microsoft has reaffirmed its commitment to empowering the developer by creating a dialogue with the community to help incorporate feedback and improve the product. Visual Studio 2008 is no exception. With your help we are prepared to deliver on the commitment to make every software project successful on the Microsoft platform.<br /><br /></span><a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"><span style="font-size:85%;">Download Visual Studio 2008 Beta 2</span></a><span style="font-size:85%;"> today and help make this release the best ever!<br /></span><br /><span style="font-size:85%;">[Courtesy of Microsoft Corporation]<br /><br /></span><span style="font-size:85%;"></span>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-85423945749806007512007-11-04T14:50:00.000+02:002007-11-04T14:57:39.611+02:00Visual Studio 2005 Web Deployment ProjectsHello and welcome to another post from Non-Stop BizTalk!<br /><br /> I was trying to create a web setup project using VS .NET 2005, and there I faced a problem: When you add a web setup project and try to add project output from a web project to the installer, you have one option: to add the Content Files from the web project. This will include every file type in your installer, including *.cs files (I don't think that you'd like to include them). Solution: If you need a decent web setup project, install the web deploymnet project add-in for VS 2005: http://msdn2.microsoft.com/en-us/asp.net/aa336619.aspxYousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-54002138239405058422007-11-02T19:41:00.001+02:002008-06-10T16:40:49.702+03:00The World is FlatI believe that The World is Flat "A Brief History of the Twenty-First Century" should be a must-read for every IT professional. This is awesome and insightful!<br /><br /><br /><p align="center"><br /><img alt="The World is Flat" src="http://www.thomaslfriedman.com/images/worldisflatcovmed.jpg" /></p>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-42357273141436697672007-10-13T00:13:00.000+02:002007-11-02T19:57:11.282+02:00Head First Design PatternsThis is so good! Just read on: <a href="http://www.oreilly.com/catalog/hfdesignpat/">http://www.oreilly.com/catalog/hfdesignpat/</a><br /><br /><p align="center"><br /><img src="http://www.oreilly.com/catalog/covers/9780596007126_thumb.gif" alt="Head First Design Patterns"></p>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com0tag:blogger.com,1999:blog-27469931.post-86789426122980040892007-08-02T23:46:00.000+03:002007-08-03T00:36:34.303+03:00Smart O/R Mapper<span style="font-size:78%;">Smart O/R Mapper (with System.Reflection and Microsoft.Practices.EnterpriseLibrary.Caching)</span><br /><span style="font-size:78%;">Download code <em><a href="http://www.box.net/shared/s641n1uraq">here</a></em></span><br /><br /><span style="font-size:85%;">I've combined some ideas from DotNetNuke's CBO (I think this stands for Business Objects Creator or something like this..) and from an MSDN article on custom attributes (Can't remember the link to it), to develop whatI call a smart and agile O/R mapper. I will walk through the several parts of the solution:<br /><br />First, I will develop a custom attribute with the name ColumnName. This custom attribute , with its AttributeUsage attribute set to AttributeTargets.Property will be used to mark public properties in my business entity class. Let's see how I will mark them: suppose that I have some database table named "Product" with three columns: ProductID, ProductName and ProductPrice, and a business class that will correspond to a row in the Products table as follows:<br /><br /><span style="font-family:courier new;">public class Product </span><br /><span style="font-family:courier new;">{ </span><br /><span style="font-family:courier new;">private string _id;</span><br /><span style="font-family:courier new;">private string _name; </span><br /></span><span style="font-size:85%;"><span style="font-family:courier new;">private decimal _price;<br /><br />public string ID </span><br /><span style="font-family:courier new;">{ </span><br /><span style="font-family:courier new;">get { return _id; }</span><br /><span style="font-family:courier new;">set { _id = value; }</span><br /></span><span style="font-size:85%;"><span style="font-family:courier new;">}<br />public string Name </span><br /><span style="font-family:courier new;">{ </span><br /><span style="font-family:courier new;">get { return _name; } </span><br /><span style="font-family:courier new;">set { _name = value; } </span><br /></span><span style="font-size:85%;"><span style="font-family:courier new;">}<br />public decimal Price</span><br /><span style="font-family:courier new;">{ </span><br /><span style="font-family:courier new;">get { return _price; } </span><br /><span style="font-family:courier new;">set { _price = value; } </span><br /></span><span style="font-size:85%;"><span style="font-family:courier new;">}<br />}</span><br /><br />In a typical situation, your run through the tedious job, again and again, which is the translation of your data object (holding product records) into a Product object (or Products collection). Using conventional code, you would do this:<br /><br /><br /><br /></span><p><span style="font-size:85%;">using (SqlConnection objConn = new SqlConnection(connectionString))<br />{ </span></p><p><span style="font-size:85%;">SqlCommand cmd = new SqlCommand("SELECT ProductID, ProductName, ProductPrice FROM Products");<br />cmd.Connection = objConn;<br />objConn.Open();<br />IDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);<br />Product p = null;<br />if (reader.Read())<br />{<br />p = new Product();<br />p.ID = (string) reader["ProductID"];<br />p.Name = (string)reader["ProductName"];<br />p.Price = (decimal)reader["ProductPrice"];<br /><br />} }<br />return p;</span></p><p><span style="font-size:85%;">Let's do it in a smart and agile way! As I said, First, I developed a custom attribute as follows:<br /><br /></span></p><p><span style="font-size:85%;">namespace MyAttributesNameSpace{ /// <summary><br />/// Indicates that a class property corresponds to a table field in a database /// </summary><br />[AttributeUsage(AttributeTargets.Property , AllowMultiple = false)]<br />class ColumnName : Attribute<br />{ public readonly string Name;<br /><br />/// <summary>/// Initializes a new instance of the ColumnName class. /// </summary><br />/// <param name="name">Column name</param><br />public ColumnName(string name) { Name = name; } }}</span></p><p><span style="font-size:85%;"></span></p><span style="font-size:85%;">I will use this attribute to mark a class property as corresponding to a column in Products table. The Product class becomes as follows after applying the attribute<br />public class Product<br />{<br />private string _id;<br />private string _name;<br />private decimal _price;<br />[ColumnName("ProductID")]<br />public string ID<br />{<br />get { return _id; }<br />set { _id = value; }<br />}<br /><br />[ColumnName("ProductName")]<br />public string Name<br />{<br />get { return _name; }<br />set { _name = value; }<br />}<br /><br />[ColumnName("ProductPrice")]<br />public decimal Price<br />{<br />get { return _price; }<br />set { _price = value; }<br />}<br />}<br /><br /><br /></span><p><span style="font-size:85%;">Now, the mapper class: This mapper will be used to create an instance of the desired business class at runtime (this enbales us to handle a variety of business classes at once using generic code) </span></p><p><span style="font-size:85%;">First I will create a method called FillObject as the following:<br />public static object FillObject(IDataReader dataReader, Type classType) </span></p><p><br /><span style="font-size:85%;">{<br />// Create and object based on the type supplied<br />object businessObject = Activator.CreateInstance(classType);<br />// Get class properties (we need to populate) from data reader<br />ArrayList classProperties = GetPropertyInfo(classType);<br /><br />// Get class property attributes<br />ColumnName[] classColumns = GetPropertiesAttributes(classProperties);<br />// Get object column ordinals (accessing a column using an ordinal is faster! So, get the ordinals)<br />int[] columnOrdinals = GetOrdinals(classType,classColumns, dataReader);<br /><br /><br />// Loop through properties and set<br />for (int propertyCount = 0; propertyCount <></span></p><p><span style="font-size:85%;">{ // if the ordinal is -1, then no column found on table </span></p><p><span style="font-size:85%;">if (columnOrdinals[propertyCount] == -1) </span></p><p><span style="font-size:85%;">{ </span></p><p><span style="font-size:85%;">throw new ApplicationException(Messages.ColumnNotFoundOnReader); }</span></p><p><span style="font-size:85%;">// Pretty complex, ha? </span></p><p><span style="font-size:85%;">// Get each property, and set its value from the corresponding field on data reader</span></p><p><span style="font-size:85%;">// But before you set the value, cast the value to the property type </span></p><p><span style="font-size:85%;">((PropertyInfo)classProperties[propertyCount]).SetValue(businessObject, CastToAppropriatePropertyType(((PropertyInfo)classProperties[propertyCount]).PropertyType, dataReader[columnOrdinals[propertyCount]]), null); } return businessObject; }</span></p><p><span style="font-size:85%;">Second, method GetPropertyInfo gets the class properties. Note that we need to get a handle on the properties, in order to populate them.<br />private static ArrayList GetPropertyInfo(Type classType) { </span></p><p><span style="font-size:85%;">string classPropertiesCacheKey = string.Concat(classType.FullName, "Properties"); CacheManager myCache = CacheFactory.GetCacheManager();<br />// Reflection is expensive! get the properties from cache, if available. </span></p><p><span style="font-size:85%;">ArrayList objProperties = (ArrayList) symphonyCMCache.GetData(classPropertiesCacheKey);<br /><br />if (objProperties == null)<br />{ objProperties = new ArrayList();<br /><br />foreach (PropertyInfo propertyInfo in classType.GetProperties())<br />{<br />objProperties.Add(propertyInfo);<br />}<br /><br />myCache.Add(classPropertiesCacheKey,objProperties);<br />}<br /><br />return objProperties;<br />}</span></p><span style="font-size:85%;">Third, get the column name (represented by the ColumnName attribute) that corresponds to each property<br />private static ColumnName[] GetPropertiesAttributes(ArrayList properties)<br />{<br />ColumnName[] tableColumns = new ColumnName[properties.Count];<br />for (int i = 0; i <><br />{ PropertyInfo property = (PropertyInfo)properties[i];<br />// ColumnName is the only attribute on property (so get it using index 0)<br />tableColumns[i] = (ColumnName)property.GetCustomAttributes(typeof(ColumnName), false)[0];<br />}<br />//return tableColumns;<br />return tableColumns;<br />}<br />After we obtained the columns corresponding to the properties, we will get these columns ordinals<br /><br />private static int[] GetOrdinals(Type classType,ColumnName [] columns, IDataReader dataReader)<br />{<br />string classOrdinalsCacheKey = string.Concat(classType.FullName, "Ordinals");<br />CacheManager myCache = CacheFactory.GetCacheManager();<br />// Why get ordinals each time? cache ordinals for better performance<br />int[] arrOrdinals = (int[])myCache.GetData(classOrdinalsCacheKey);<br />if (arrOrdinals == null) {<br />if (dataReader != null) {<br />arrOrdinals = new int[columns.Length];<br />for (int column = 0; column <><br />{ arrOrdinals[column] = -1;<br />try<br />{<br />arrOrdinals[column] = dataReader.GetOrdinal(columns[column].ColumnName);<br />}<br />catch (Exception ex)<br />{ // property does not exist in datareader }<br />} }<br />// Cache class ordinals<br />myCache.Add(classOrdinalsCacheKey, arrOrdinals);<br />}<br />return arrOrdinals;<br />}<br />Fifth, we will loop through the properties, and set them (see function FillObject code).<br />And last, call the mapper to create an object from a data reader:<br />using (SqlConnection conn = new SqlConnection(_connectionString))<br />{ SqlCommand cmd = new SqlCommand("SELECT * FROM Products");<br />cmd.Connection = conn;<br />conn.Open();<br />SqlDataReader reader = cmd.ExecuteReader();<br />while (reader.Read())<br />{<br />Product p = (Product)DataAccessHelper.FillObject(reader, typeof(Product));<br />productsCollection.Add(product);<br />}<br />Hope you will enjoy it as I did! Cheers<br /></span><span style="font-size:85%;"><span style="font-size:85%;"><span style="font-size:78%;">*[If you think that you have valuable feedback to improve the contents of this blog, please leave it as a comment here]</span><br /><br /><br /></span></span><span style="font-size:85%;"><span style="font-size:85%;"></span></span><span style="font-size:85%;"><span style="font-size:85%;"></span></span>Yousef Omarhttp://www.blogger.com/profile/18325420402170559733noreply@blogger.com1