Posted at 03:05 PM | Permalink | Comments (0) | TrackBack (0)
I have found that I needed to delete custom SObject records in bulk on the Force.com platform. If you are like me, you have done it before and just need to remember what is the best way to do it again. You also wished you documented it so that you do not have to dig around. In addition, if you are like me you want to make sure it is as efficient as possible. Some people might not like how I have implemented this and would provide suggestions to make it better. I welcome that, but if you do not have a clue how to do it, I hope to help. First, make sure you have a reference to the Salesforce API in your C# project. If you do not know how to do that, then send me a comment to add that post. I use the standard web reference in my .NET 3.5 windows application. It points to a local copy of the WSDL I generated from the force.com platform. Next, I made my own Salesforce Data Service class that handles the login and initialization of the SFBinding object that would allow me to make SOAP calls to the platform and handle the much needed action
Please note, I have decided to take advantage of the System.Linq and Microsoft.Practices.EnterpriseLibrary.ExceptionHandling namespaces in my code snippet. Make sure you have references to them when attempting to test this on your own. Thanks.
1: private SforceService SalesforceBinding
2: {
3: get
4: {
5: if ( _SfBinding == null || _SfBinding.SessionHeaderValue == null || _lastSForceLoginTime == null )
6: {
7: Login();
8: }
9: System.TimeSpan timeDif = System.DateTime.Now - _lastSForceLoginTime;
10: if ( timeDif.TotalMinutes > 30 )
11: {
12: Login();
13: }
14: return _SfBinding;
15: }
16: }
1: internal void DeleteExistingNodes()
2: {
3: QueryResult qr = this.SalesforceBinding.queryAll( "select Id from MyCustomObject__c where isdeleted=false" );
4: if ( qr.done )
5: {
6: if ( qr.size > 0 )
7: {
8:
9: var tsIds = (from q in qr.records
10: select q.Id).ToArray();
11:
12: int iRecordCount = 200;
13: DeleteResult[] ds = null;
14: for ( int t = 0 ; t < (System.Math.Abs(tsIds.Length/200)+1) ; t++)
15: {
16: if (t==0)
17: ds = this.SalesforceBinding.delete( tsIds.Take( iRecordCount ).ToArray() );
18: else
19: ds = this.SalesforceBinding.delete( tsIds.Skip((iRecordCount*t)).Take( iRecordCount ).ToArray() );
20:
21: if ( ds is DeleteResult[] )
22: {
23: for ( int i = 0 ; i < ds.Length ; i++ )
24: {
25: if ( !ds[ i ].success )
26: {
27: foreach ( Error err in ds[ i ].errors )
28: {
29: ExceptionPolicy.HandleException( new SalesforceException( err.message ) , "Global Policy" );
30: }
31: }
32: }
33: }
34: }
35: }
36: }
37: }
Posted at 10:51 AM in Salesforce.com | Permalink | Comments (0) | TrackBack (0)
I wanted to create a blog post to remind myself how to create an Apex callout in Salesforce.com but in eClipse. I won’t get into the specifics from a step by step standpoint, but just wanted to highlight a couple things. The first is how to create a service, the second is how to create a custom data contract, the third is how to create an enumeration and expose it and lastly how to create service methods that returns a parameter. You can learn more from the Apex Developer documentation, but just thought it would be useful to show a working Apex Callout with out the details. Just remember that when you push this into your test instance of Salesforce or your sandbox, that you add test methods to test every aspect of your web service. The test coverage should be at 100% before pushing out to the production instance. That is the only way you can verify the stability of the web service.
global class VehicleService
{
//<summary>
//Created By: James Henry
//Created Date: 04/22/2011
//Name: Vehicle
//Type: Web Service Data Contract
//Description: Defines the customized automobile base class as Data Contract object
//</summary>
global class Vehicle
{
webservice int Id {get; set;}
webservice string Model {get; set;}
webservice string Type {get;set;}
webservice int Year {get; set;}
webservice int NumberOfWheels {get; set;}
webservice boolean HasDoors {get; set;}
webservice boolean HasWindows {get; set;}
webservice boolean HasTransmission {get; set;}
webservice boolean HasEngine {get; set;}
webservice SteerType SteeringType {get; set;}
}
//**********************************/
//<summary>
//Created By: James Henry
//Created Date: 04/22/2011
//Name: VehicleTypeEnum
//Type: Enmeration
//Description:
//</summary>
global enum VehicleTypeEnum
{
Automobile,
Bicycle,
Bus,
Van,
Tricycle,
Motorcycle,
Truck,
Coach
}
//**********************************/
//**********************************
//<summary>
//Created By: James Henry
//Created Date: 04/22/2011
//Name: updateVehicle
//Type: Web Service Method
//Description: Exposes a webmethod to capture Vehicle settings
//</summary>
webservice static boolean updateVehicle(Vehicle data)
{
//TODO: Perform DML functionality here.
return (data == null);
}
//**********************************
//<summary>
//Created By: James Henry
//Created Date: 04/22/2011
//Name: getVehicleInformation
//Type: Web Service Method
//Description:
//</summary>
webservice static Vehicle getVehicleInformation(VehicleTypeEnum vehicleType)
{
//TODO: Perform DML functionality here.
return [select * from Vehicle_Information__c c where c.Type = : vehicleType.trim() and c.IsDeleted = false and order by c.LastModifiedDate desc limit 1];
}
}
Posted at 04:19 PM | Permalink | Comments (0) | TrackBack (0)
I have been doing Salesforce.com (SFDC) application development for some time and the one thing I do know is that there are
some things that you just have to do over and over again. One of them is connecting to SFDC and ensuring a connection based
on a session identifier. To save some time, I thought about writing this as a blog post to save me some time in the future. I hope
you find it useful.
public static class SFDCManager
{
#region "Member Fields"
/// <summary>
/// SFDC Proxy
/// </summary>
private static SforceService _SfBinding;
#endregion
#region "Private Member Methods"
/// <summary>
/// Login Member Method
/// </summary>
/// <returns></returns>
private static bool Login()
{
if ( string.IsNullOrEmpty( SfUserName ) )
SfUserName = Properties.Settings.Default.SFUserName;
if ( string.IsNullOrEmpty( SfPassword ) )
SfPassword = Properties.Settings.Default.SFPassword;
bool bReturn = false;
int timeout = 9000000;
if ( _SfBinding == null )
{
_SfBinding = null;
_SfBinding = new SforceService();
_SfBinding.Timeout = timeout;
}
try
{
_SfBinding.AssignmentRuleHeaderValue = new AssignmentRuleHeader();
_SfBinding.AssignmentRuleHeaderValue.useDefaultRule = true;
LoginResult loginResult = _SfBinding.login( SfUserName , SfPassword );
_SfBinding.SessionHeaderValue = null;
_SfBinding.SessionHeaderValue = new SessionHeader();
_SfBinding.SessionHeaderValue.sessionId = loginResult.sessionId;
_SfBinding.Url = loginResult.serverUrl;
bReturn = true;
}
catch
{
//TODO: You should handle this exception
throw;
}
return bReturn;
}
#endregion
#region "Member Property"
/// <summary>
/// SFDC Connection UserName Property
/// </summary>
public static string SfUserName
{
get;
set;
}
/// <summary>
/// SFDC Connection Password Property
/// </summary>
public static string SfPassword
{
get;
set;
}
#endregion
}
Posted at 05:42 PM in Salesforce.com | Permalink | Comments (0) | TrackBack (0)
If you're like me you probably need to constantly have either a reference book or site to remember differing SQL syntax. There are just too many to remember. I needed to search how to format a datetime field in a database table. I figured it might be a good idea to blog this so that I can use it as a reference in the future.
| Standard Date Formats | |||
| Date Format | Standard | SQL Statement | Sample Output |
| Mon DD YYYY HH:MIAM (or PM) |
Default | SELECT CONVERT(VARCHAR(20), GETDATE(), 100) | Jan 1 2005 1:29PM |
| MM/DD/YY | USA | SELECT CONVERT(VARCHAR(8), GETDATE(), 1) AS [MM/DD/YY] | 11/23/98 |
| MM/DD/YYYY | USA | SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS [MM/DD/YYYY] | 11/23/1998 |
| YY.MM.DD | ANSI | SELECT CONVERT(VARCHAR(8), GETDATE(), 2) AS [YY.MM.DD] | 72.01.01 |
| YYYY.MM.DD | ANSI | SELECT CONVERT(VARCHAR(10), GETDATE(), 102) AS [YYYY.MM.DD] | 1972.01.01 |
| DD/MM/YY | British/French | SELECT CONVERT(VARCHAR(8), GETDATE(), 3) AS [DD/MM/YY] | 19/02/72 |
| DD/MM/YYYY | British/French | SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY] | 19/02/1972 |
| DD.MM.YY | German | SELECT CONVERT(VARCHAR(8), GETDATE(), 4) AS [DD.MM.YY] | 25.12.05 |
| DD.MM.YYYY | German | SELECT CONVERT(VARCHAR(10), GETDATE(), 104) AS [DD.MM.YYYY] | 25.12.2005 |
| DD-MM-YY | Italian | SELECT CONVERT(VARCHAR(8), GETDATE(), 5) AS [DD-MM-YY] | 24-01-98 |
| DD-MM-YYYY | Italian | SELECT CONVERT(VARCHAR(10), GETDATE(), 105) AS [DD-MM-YYYY] | 24-01-1998 |
| DD Mon YY | - | SELECT CONVERT(VARCHAR(9), GETDATE(), 6) AS [DD MON YY] | 04 Jul 06 |
| DD Mon YYYY | - | SELECT CONVERT(VARCHAR(11), GETDATE(), 106) AS [DD MON YYYY] | 04 Jul 2006 |
| Mon DD, YY | - | SELECT CONVERT(VARCHAR(10), GETDATE(), 7) AS [Mon DD, YY] | Jan 24, 98 |
| Mon DD, YYYY | - | SELECT CONVERT(VARCHAR(12), GETDATE(), 107) AS [Mon DD, YYYY] | Jan 24, 1998 |
| HH:MM:SS | - | SELECT CONVERT(VARCHAR(8), GETDATE(), 108) | 03:24:53 |
| Mon DD YYYY HH:MI:SS:MMMAM (or PM) | Default + milliseconds |
SELECT CONVERT(VARCHAR(26), GETDATE(), 109) | Apr 28 2006 12:32:29:253PM |
| MM-DD-YY | USA | SELECT CONVERT(VARCHAR(8), GETDATE(), 10) AS [MM-DD-YY] | 01-01-06 |
| MM-DD-YYYY | USA | SELECT CONVERT(VARCHAR(10), GETDATE(), 110) AS [MM-DD-YYYY] | 01-01-2006 |
| YY/MM/DD | - | SELECT CONVERT(VARCHAR(8), GETDATE(), 11) AS [YY/MM/DD] | 98/11/23 |
| YYYY/MM/DD | - | SELECT CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD] | 1998/11/23 |
| YYMMDD | ISO | SELECT CONVERT(VARCHAR(6), GETDATE(), 12) AS [YYMMDD] | 980124 |
| YYYYMMDD | ISO | SELECT CONVERT(VARCHAR(8), GETDATE(), 112) AS [YYYYMMDD] | 19980124 |
| DD Mon YYYY HH:MM:SS:MMM(24h) | Europe default + milliseconds | SELECT CONVERT(VARCHAR(24), GETDATE(), 113) | 28 Apr 2006 00:34:55:190 |
| HH:MI:SS:MMM(24H) | - | SELECT CONVERT(VARCHAR(12), GETDATE(), 114) AS [HH:MI:SS:MMM(24H)] | 11:34:23:013 |
| YYYY-MM-DD HH:MI:SS(24h) | ODBC Canonical | SELECT CONVERT(VARCHAR(19), GETDATE(), 120) | 1972-01-01 13:42:24 |
| YYYY-MM-DD HH:MI:SS.MMM(24h) | ODBC Canonical (with milliseconds) |
SELECT CONVERT(VARCHAR(23), GETDATE(), 121) | 1972-02-19 06:35:24.489 |
| YYYY-MM-DDTHH:MM:SS:MMM | ISO8601 | SELECT CONVERT(VARCHAR(23), GETDATE(), 126) | 1998-11-23T11:25:43:250 |
| DD Mon YYYY HH:MI:SS:MMMAM | Kuwaiti | SELECT CONVERT(VARCHAR(26), GETDATE(), 130) | 28 Apr 2006 12:39:32:429AM |
| DD/MM/YYYY HH:MI:SS:MMMAM | Kuwaiti | SELECT CONVERT(VARCHAR(25), GETDATE(), 131) | 28/04/2006 12:39:32:429AM |
Here are some other helpful date format syntax
| Extended Date Formats | ||
| Date Format | SQL Statement | Sample Output |
| YY-MM-DD |
SELECT SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 120), 3, 8) AS [YY-MM-DD]
SELECT REPLACE(CONVERT(VARCHAR(8), GETDATE(), 11), '/', '-') AS [YY-MM-DD]
|
99-01-24 |
| YYYY-MM-DD |
SELECT CONVERT(VARCHAR(10), GETDATE(), 120) AS [YYYY-MM-DD]
SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 111), '/', '-') AS [YYYY-MM-DD]
|
1999-01-24 |
| MM/YY | SELECT RIGHT(CONVERT(VARCHAR(8), GETDATE(), 3), 5) AS [MM/YY] SELECT SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 3), 4, 5) AS [MM/YY] |
08/99 |
| MM/YYYY | SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 103), 7) AS [MM/YYYY] | 12/2005 |
| YY/MM | SELECT CONVERT(VARCHAR(5), GETDATE(), 11) AS [YY/MM] | 99/08 |
| YYYY/MM | SELECT CONVERT(VARCHAR(7), GETDATE(), 111) AS [YYYY/MM] | 2005/12 |
| Month DD, YYYY | SELECT DATENAME(MM, GETDATE()) + RIGHT(CONVERT(VARCHAR(12), GETDATE(), 107), 9) AS [Month DD, YYYY] | July 04, 2006 |
| Mon YYYY | SELECT SUBSTRING(CONVERT(VARCHAR(11), GETDATE(), 113), 4, 8) AS [Mon YYYY] | Apr 2006 |
| Month YYYY | SELECT DATENAME(MM, GETDATE()) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [Month YYYY] | February 2006 |
| DD Month | SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) AS [DD Month] | 11 September |
| Month DD | SELECT DATENAME(MM, GETDATE()) + ' ' + CAST(DAY(GETDATE()) AS VARCHAR(2)) AS [Month DD] | September 11 |
| DD Month YY | SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) + ' ' + RIGHT(CAST(YEAR(GETDATE()) AS VARCHAR(4)), 2) AS [DD Month YY] | 19 February 72 |
| DD Month YYYY | SELECT CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + DATENAME(MM, GETDATE()) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [DD Month YYYY] | 11 September 2002 |
| MM-YY | SELECT RIGHT(CONVERT(VARCHAR(8), GETDATE(), 5), 5) AS [MM-YY] SELECT SUBSTRING(CONVERT(VARCHAR(8), GETDATE(), 5), 4, 5) AS [MM-YY] |
12/92 |
| MM-YYYY | SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 105), 7) AS [MM-YYYY] | 05-2006 |
| YY-MM | SELECT RIGHT(CONVERT(VARCHAR(7), GETDATE(), 120), 5) AS [YY-MM] SELECT SUBSTRING(CONVERT(VARCHAR(10), GETDATE(), 120), 3, 5) AS [YY-MM] |
92/12 |
| YYYY-MM | SELECT CONVERT(VARCHAR(7), GETDATE(), 120) AS [YYYY-MM] | 2006-05 |
| MMDDYY | SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '') AS [MMDDYY] | 122506 |
| MMDDYYYY | SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 101), '/', '') AS [MMDDYYYY] | 12252006 |
| DDMMYY | SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 3), '/', '') AS [DDMMYY] | 240702 |
| DDMMYYYY | SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '') AS [DDMMYYYY] | 24072002 |
| Mon-YY | SELECT REPLACE(RIGHT(CONVERT(VARCHAR(9), GETDATE(), 6), 6), ' ', '-') AS [Mon-YY] | Sep-02 |
| Mon-YYYY | SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-') AS [Mon-YYYY] | Sep-2002 |
| DD-Mon-YY | SELECT REPLACE(CONVERT(VARCHAR(9), GETDATE(), 6), ' ', '-') AS [DD-Mon-YY] | 25-Dec-05 |
| DD-Mon-YYYY | SELECT REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') AS [DD-Mon-YYYY] | 25-Dec-2005 |
Posted at 02:47 PM in T-SQL | Permalink | Comments (0) | TrackBack (0)
If you're like me you want to create services based on Service Oriented Architecture (SOA) so that you can decouple your applications from the underlying repository. The beauty of doing this is the ability to move the application to a new server environment or relocate an existing server (either physically or virtually – based on IP) to any place in the public or private cloud. The below picture depicts the benefits of SOA.
|
Before: |
After: A Services-Oriented Architecture (SOA) delivers the data needed for business process activities as an integrated service. Users no longer have to log into multiple systems, search for relevant data, and integrate the results manually. The information appears as a single application, delivered on a single screen, all with a single login. |
With the above in mind, it is natural to desire to decouple access to the underlying repository from your business application. SQL Endpoints in SQL Server 2005 provides SOA enthusiasts the capability to expose database stored procedures and functions as a web service with the below code snippet.
use [master]
GO
IF EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'my_sql_endpoint')
DROP ENDPOINT [my_sql_endpoint]
GO
CREATE ENDPOINT [my_sql_endpoint]
AUTHORIZATION [sa]
STATE=STARTED
AS HTTP (PATH=N'/sql/training', PORTS = (CLEAR), AUTHENTICATION = (NTLM, KERBEROS, INTEGRATED), SITE=N'*', CLEAR_PORT = 5487, COMPRESSION=DISABLED)
FOR SOAP (
WEBMETHOD 'GetSqlInfo'
(name='master.dbo.xp_msver',
SCHEMA=STANDARD),
WEBMETHOD 'DayAsNumber'
(name='master.sys.fn_MSdayasnumber'),
WSDL = DEFAULT,
SCHEMA = STANDARD,
DATABASE = 'master',
NAMESPACE = 'http://tempUri.org/'
);
GO
This is great so far, but I just found an ugly error that I think can be of some help. If you followed any blog post about reserving the SQL namespace prior to the creation of a SQL Endpoint you probably ran into an issue based on the following scenario. You reserved the SQL Endpoint namespace, and then decided to change it to something else and for some reason weren't able to create a new SQL Endpoint.
You now get weird errors like the user does not have permissions to register an endpoint. The best undocumented thing you can do is completely remove the reserved namespace. But how you ask, it is below. You will need to ensure the HTTP service is running using "net start HTTP" or "net start HTTP SSL" in a command line window on the Windows Server Operating System if it is not already started. Then run the below highlighted keyword with the appropriate SQL Endpoint web address in order to successfully add or remove your endpoint. FYI, if you want to remove an existing reserved namespace you must specify the exact address of the previous namespace.
Also, if you want to check on the status of your reserved namespace in HTTP.sys you have to use the HttpCfg.exe utility in a command prompt. The HttpCfg.exe is part of the Windows Server support tools. So to Query HTTP.sys go to a command prompt and type in "httpcfg query urlacl".
Here are some other things you shoul know about SQL 2005 Endpoints
To manage HTTP endpoints, you use CREATE ENDPOINT, ALTER ENDPOINT and DROP ENDPOINT, but you must have the required permissions to create, modify, or drop an endpoint.
When you execute CREATE ENDPOINT to create an endpoint, SQL Server 2005 runs the statement and registers the endpoint with the HTTP.SYS. Depending on the context in which the endpoint statement is specified, SQL Server 2005 impersonates the caller as follows:
If you execute the statement in the context of a Windows account, SQL Server 2005 impersonates the caller to register the endpoint with HTTP.SYS.
If you execute the statement in the context of a SQL Server account, for example, sa or some other SQL Server login, SQL Server 2005 impersonates the caller by using the SQL Service account, specified when SQL Server is installed, to register the endpoint with HTTP.SYS.
Posted at 02:42 PM in SQL Server 2005 | Permalink | Comments (0) | TrackBack (0)
I have been doing all my development and deployment on VMWare's virtual machines hosted on clustered ESX servers for over two years now and has found it to be very stable. VMware has proven itself to be a formidable player in the virtualization space that is at the heart of the public cloud. Terremark, a leading global provider of IT infrastructure services delivered on the industries most robust and advanced operations platform. Leveraging purpose-built datacenters in the United States, Europe and Latin America and access to massive and diverse network connectivity from more than 160 global carriers announced a convergence with VMware to provide vCloud Express (https://vcloudexpress.terremark.com). This is the Infrastructure as a Service (IaaS) opportunity that Terremark is tapping into to allow small to large businesses have data center infrastructure for coffee cup prices. I highly recommend this solution over Amazon EC2 any day.
Posted at 11:46 AM in Cloud Computing | Permalink | Comments (0) | TrackBack (0)
Have you heard about Windows Azure? I am sure you have if you subscribe to MSDN magazine, have gone to PDC events, developed .NET applications on the Microsoft platform, or talked with Microsoft Partners about their thoughts on this platform. It promises to be the service in the cloud for what we call cloud computing. The "cloud" or "cloud computing" simply is a large (massive) data center that contains many server computers that are accessible via a standard internet connection. This data center hosts applications available to all through a subscription. Cloud computing drove some well-known business terminology like Infrastructure as a service (IaaS), Platform as a service (PaaS) and the most common Software as a Service (SaaS).
Some of the major players in this space are Salesforce.com (CRM, Force.com, AppExchange), Microsoft Online Services (CRM, Exchange Online, Office Live Meeting, Office 14, Office Communications Online, SharePoint Online), Amazon web services (Amazon DevPlay, SimpleDB), Google Services (Google Apps) and Zoho (productivity & collaboration applications). When reviewing what the offerings are all about I can only denote one thing. The service offerings essentially provides users or companies the ability to store their intellectual properties (content) on the provider's scalable servers and are accessible through an internet connection. This gives the provider a larger profit margin and the customer a lower operating cost. That lower operating cost achieve the flexibility and hassle free Information Technology (IT) overhead of buying, maintaining and integrating with third-party applications.
So, how do we leverage this platform? Well the above vendors want their developer community to build cost effective applications that will attract end-customers. Developers are in a unique position to create applications that they can charge for and that their end-customers can use without the concern of maintaining a server infrastructure environment. In addition, they are not as concerned about the marketing of their service offerings because they have the branding of the above players to do all the marketing work for them.
So is Windows Azure the best platform for .NET professionals. Absolutely! That is because the platform allows .NET professional developers to create rich applications using well-known tools and publish them on servers they do not need to license and maintain. The only issue is when Windows Azure will get off the beta label and into wide scale availability. Microsoft is touting the end of 2009. We will see if that holds true. Otherwise, Salesforce.com here I come!
Posted at 01:22 PM in Azure | Permalink | Comments (2) | TrackBack (0)
I received comments about my previous post on Nhibernate for .NET. One commenter placed a link to a blog article that brought out a great syntactical example that depicts the true difference between Nhibernate and Linq. Thanks for the reference. I would recommend everyone viewing the blog at http://tanveerbadar.wordpress.com/2007/10/14/linqentity-framework-vs-nhibernate. Let me know what you think.
Posted at 10:39 AM | Permalink | Comments (1) | TrackBack (0)
I was reviewing the many hits my blog has received over the past number of months and found that a number of users were coming from techtarget.com. When I researched it further, I noticed that the hits were coming from an article titled SharePoint 2007 Learning Guide. The author compiled a number of articles and links to help one get up and running with SharePoint 2007. I highly recommend the article. Let me know what you think.
Posted at 08:25 PM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
Click on the below URL to download the service pack. For those of you who have done this before; remember that you need to install the service pack for Windows SharePoint Services v3 first before installing it for Microsoft Office SharePoint Server 2007. With that said, go at it!
Microsoft Office SharePoint Server 2007 – Service Pack 1 Download --- (Read about the service pack)
Windows SharePoint Server v3 – Service Pack 1 Download --- (Read about the service pack)
Posted at 09:26 AM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
Some of you are thinking. Great! The Microsoft Office Developers Conference is coming. What classes should I take? Well, I don't know what to say for you, but for me, I am taking the below classes. Maybe that will give you some ideas!
Note: The below tracks are abstracts from the track owners respective blogs.
Continue reading "ODC 2008 - What session I am taking... " »
Posted at 03:32 PM in SharePoint 2007 | Permalink | Comments (2) | TrackBack (0)
I wanted to say thanks to all who have visited my blog over the years. I have not been able to keep up due to increasing demand on internal projects related to SharePoint customization and integrations. However, I have not forgotten to update it. I will do my best to post at least once every two weeks.
On a different note…are you going to attend the Microsoft Office Developers Conference 2008 in San Jose, California? If not, then consider it. If you didn't know, well, now you do. I will definitely be there. I believe with the releases of Windows Server 2008, Visual Studio 2008, .NET Framework 3.5, SilverLight 1.0, and SQL Server 2008 we have what is made up to be an incredible year of feverish learning and implementing.
The Office Developers Conference will undoubtedly help you determine if some of the new capabilities that have been released will require you to integrate or use any one of the new products to obtain its full potential. I could guarantee that it will – that is unless you are hoping to integrate new with old. I would guess that is about 85% of what application development teams in most medium to large firms do, so how about you?
My firm is taking full advantage of Microsoft Office SharePoint Server 2007 for its intranet and extranet capabilities. We are excited to see how we could make it do more for us with all of our projects. We have also implemented the Scrum methodology of the Agile Framework to quickly deliver services to the business. With it, we look at new offerings and where it makes sense we integrate them into the project. It makes for sets of great projects. I am excited to see that with the upcoming service pack for MOSS 2007 coming out on 12/11/2007 we are going to be able to make our SharePoint web parts be AJAX driven. We have done our best with this capability already, but we have much to do to increase the user experience as we ensure proper and efficient functionality.
So, what are you looking forward to with the upcoming product releases? Also, what do you want me to blog about? Feel free to let me know. I will definitely prioritize it and respond appropriately.
Take care,
James
Posted at 02:48 PM | Permalink | Comments (0) | TrackBack (0)
Click on the link below to an article titled "A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies" by Microsoft. It depicts why WCF is better than ASMX web services. It is a great read for all developers looking to build web services for internal systems.
Posted at 01:54 PM in .NET Development | Permalink | Comments (1) | TrackBack (0)
Todd Klindt posted an unknown STSADM command that you can use to change the max capacity of a site template. The command you need is:
STSADM –o setproperty –pn max-template-document-size –pv 524288000
The –pv value is the value, in Bytes, that you wish to set the limit to. The maximum value that can be set is 500 MB or 524288000 Bytes.
Note: STSADM will crunch away at this command for a while so be patient and PLEASE do NOT terminate STSADM midstream!
Posted at 01:20 PM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
I am a big fan of Hewlett Packard notebook and server products. Maybe it is my bias with Compaq servers, now folded into HP. It is just my strong opinion that I will justify in a blog entry. Regardless, visit the Microsoft Office SharePoint Server 2007 hardware-sizing tool at http://h71019.www7.hp.com/ActiveAnswers/cache/70675-0-0-0-121.html.
Posted at 09:19 AM in SharePoint 2007 | Permalink | Comments (1) | TrackBack (0)
Calling all SharePoint enthusiasts…Microsoft released an updated version of the Microsoft Office SharePoint Server 2007 (MOSS 2007) and Windows SharePoint Services 3.0 (WSS v3) SDKs. This is exciting because many features in SharePoint '07 are easy to program against, but hard to determine because of a lack of sufficient documentation. I know this from experience with the many SharePoint '07 projects I had. In addition, Microsoft released a Business Data Catalog editor two days ago. Who knows, it may be better than the BDC Meta-Man. Below is the link to download the BDC editor.
Click on the below links to obtain the updated SDKs.
Click on the below link to obtain the BDC Editor
Posted at 08:53 AM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
I have been working on a project that integrates existing line of business systems together to provide customers with a single point of entry into the organization through the default website. Providing customers with targeted information is obviously a benefit to the customer. Each customer that is able to access a corporate site and easily retrieve pertinent information to them not only makes them a happy customer, but a customer that will sell your services to potential customers. Therefore, making the customer happy at first point of entry is obviously critical to an organizations success.
As the Senior Solutions Developer at my firm, I have to think about performance, interoperability, scalability, integration, and business requirements. It is an exciting position and requires quick thinking with lots of research. Currently, I am working on building Windows Communication Foundation (WCF) based services to integrate with our internal line of business systems and web controls in Microsoft SharePoint Server 2007 (MOSS 2007). It would allow the customer to access the targeted information expressed above. Whenever one thinks about integration, database access is never that far behind. Most usually requires it and it certainly is the case with me, thus the reason for my current blog post.
While creating the data access layer in WCF I was forced to think about how to develop the layer that would subscribe to best practices and provide for both Agile Software Development and Rapid Application Development without compromising quality of code. A fellow Senior Solutions Developer told me about the open-source NHibernate, which provides an ORM solution to building the data access layer. He told me that many J2EE developers integrated with this solution offering. I became very interested and so I started researching why NHibernate is better than the Microsoft Enterprise Library 3.1 Data Access Block published by Microsoft in May 2007. The result was quite stunning.
The Enterprise Library Data Access Block is great for quick access to the underlying data source and provides the required levels of abstraction; however, it fails in building stored procedures that models a normalized relational database that is something the developer would need to create. The typical Select, Insert, Update, Delete stored procedures are usually required for this type of model. I have found it shocking. NHibernate not only provides the appropriate levels of abstraction that conforms to best practices, but it also handles what the Enterprise Library lacks, the capability to dynamically build SQL that performs the required actions to normalized databases. NHibernate is a data access layer that can truly build high quality code that accesses the data access layer. It provides us with what we need and best of all…it is free and available from the open-source community. Visit NHibernate at www.hibernate.org or access the NHibernate Best Practices page on the code project website (http://www.codeproject.com/aspnet/NHibernateBestPractices.asp). 
Posted at 06:26 PM in .NET Development | Permalink | Comments (9) | TrackBack (0)
I came across an interesting blog article from a fellow blogger named Michael Van Cleave. He mentioned how to disable "My Sites" and "My Links" in MOSS 2007. I thought that it would be good to re-specify how to do this in MOSS 2007. The directions are below. Thanks Mike.
In order to turn off or disable the "My Site" or "My Links" functionality you need to be a SharePoint Administrator. Then follow the steps below.
Posted at 07:26 PM in SharePoint 2007 | Permalink | Comments (9) | TrackBack (0)
Tech-Ed released a customer presence for both attendees and non-attendees in Orlando, FL. The two major highlights of the site are the content management capabilities based in SharePoint 2007 and the WPF/E with XAML capabilities of Microsoft SilverLight. The power of the two presents a slick user-friendly site for all. Visit the virtual Tech-Ed by going to www.virtualteched.com.

Posted at 12:11 PM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
Microsoft released templates to support roles within an organization. I believe that this is a great first step at addressing the critical need to have a "My Site" that is personalized and consistent with your role within the organization. I often review my "My Site" and think how I can make this functionally work for my role but had to succumb to manipulating it to support my way of working. Review the list of templates below. Maybe you can obtain some ideas to create site templates for users in your organization.
Available Role-Based Site Templates
Posted at 10:05 AM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
I remember when I was at Bentley College, working at the Academic Technology Center with a number of smart Computer Information System majors, when I thought that the web experience should be richer than it is today. We built academic course sites for professors and some built sites of their own. We used traditional HTML and JavaScript in notepad and ran these websites on the UNIX platform. Some of us used more elaborate IDE's like ColdFusion to develop on the Windows platform. Over the years, I have moved on to building dynamic web pages using the Microsoft ASP page model then using ASP.NET on the Windows platform. This allowed me to focus my efforts on developing software on a platform that I knew everyone was eventually going to use. With the advent of the .NET Framework 2.0, web developers were looking at how to build even richer content for companies and the upcoming web 2.0 users. Microsoft released the .NET Framework 3.0 and with it, a powerful framework called the Windows Presentation Foundation. This foundation uses XAML, windows controls, and partial class technology to build rich windows applications.
The Windows Presentation Foundation now has a following of developers. These developers were waiting for the release of the foundation for the web. Microsoft released several Community Technology Previews (CTPs) of the codenamed WPF/E for these developers. Microsoft launched WPF/E earlier this month in Las Vegas. The foundation is now branded as Microsoft Silverlight. Microsoft Silverlight promises cross-browser, cross-platform user experiences. It also separates designers from developers with the release of Microsoft Expression studio for designers and the well-known Visual Studio for developers. The cross-browser/platform promise comes by the install of a downloadable plug-in that you can be sure to see in your upcoming Windows updates.
Now it is up to web developers to take full advantage of the foundation and its capabilities. Building rich web experiences will no longer be limited to the .NET Frameworks availability on a web server or on an Apple Computer. Rich web experiences will only be limited to the current version of a browser and its capability to run the Silverlight plug-in. I can see that the next version of SharePoint will take full advantage of Microsoft Silverlight. It will give advertising companies the edge they need to deliver messages to potential customers that is appealing and interactive.
To find out more about Microsoft Silverlight visit http://www.microsoft.com/silverlight. For more FAQs, visit http://www.microsoft.com/silverlight/asp/faq.aspx. For resources on how to get started now, click on any of the links below.
Developers
Silverlight Software Development Kit (SDK) CTP (Feb. 2007)
Silverlight CTP Sample Pack (Feb. 2007)
http://www.telerik.com/products/silverlight/overview.aspx
Designers
Expression Studio (Free evaluation is available for download)
Posted at 11:01 PM in .NET Development | Permalink | Comments (0) | TrackBack (0)
Hawaiian Airlines built their public facing website on the Microsoft Office SharePoint Server 2007 (MOSS 2007) platform. They leveraged the web content management features inherent to Microsoft Content Management Server 2002 and now consolidated in MOSS 2007 to make this happen. I think this is a great case study for how SharePoint can be the software package solution for a corporate intranet, extranet, and internet-facing site.
Read the article here.
Posted at 02:27 PM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
I have worked with Microsoft SharePoint 2003 and 2007 quite extensively. That is from development, installation, configuration, and capacity planning perspectives. I have been fortunate enough to go to many Microsoft partner training events and learned allot of how Microsoft uses SharePoint as their intranet internally. I have been asked by clients, "What is the proper way to deploy SharePoint?", "Does Microsoft use SharePoint for their internal projects or as their intranet?", "How did Microsoft deploy it across the WAN?", and "Do you think Microsoft SharePoint 2007 can scale?". My answer was always "Yes" along with some supporting detail.
Some could not believe it, Microsoft using their own product, but to me it makes perfect sense. They are a big corporation, if they make it work internally they can find all the bugs and problems first hand. They can answer most of the questions before their customers bring them up. So, I appreciate Microsoft for doing that.
Here is how Microsoft has it deployed globally. They have three SharePoint Server farms deployed globally where each server farm has its own indexing server, about 130-140,000 site collections, and a master indexing server in Redmond that indexes all three server farms. They have the best deployment of security trimmed search results across their global deployment of SharePoint. Security trimmed search results simply mean that if a user issues a query for content, they will only view content that their credentials will give them access to. This feature set makes Microsoft search in SharePoint very attractive to enterprise search customers.
So, let me tell you what are the regions where they have SharePoint deployed. The three regional SharePoint Server farms are: MEA (Middle-east/Africa) based out of Dublin, Asia/South Pacfic based out of Singapore, and the Americas (North and South) based out of Redmond, WA.
As a treat, I figured I would give you the opportunity, to hear for your yourself, how Microsoft is using SharePoint Server 2007 internally from program managers of the Microsoft Information Technology (MSIT) group. Click on the play button below to view the streaming video.
Office SharePoint Server at Microsoft: 12 TeraBytes of data and counting
Posted at 07:44 PM in SharePoint 2007 | Permalink | Comments (0) | TrackBack (0)
I wholeheartedly believe in building Windows Communication Foundation (WCF) based web services that follows industry patterns & practices. That is why I believe if you are looking to build WCF based service interfaces, it is with strong consideration that you visit the Web Service Software Factory web page located within the Microsoft Patterns and Practices Development web site. In addition, I recommend that you download the following pieces of software where Visual Studio.NET 2005 is installed.
I would also recommend reviewing the MSDN Architecture Webcast: Web Services Security Patterns (Level 300) video. The introduction of the video tells you why the Service Factory was built and demonstrates the guidance automation experience in Visual Studio. Toward the end of the webcast, there is a demonstration that applies security to a WCF service using the latest release of the Service Factory.
I also recommend reviewing some community sites related to WCF. I have listed some below.
Posted at 10:28 AM in .NET Development | Permalink | Comments (0) | TrackBack (0)
I had a client that wanted to redirect traffic from HTTP to HTTPS. Internet Information Services (IIS) 6.0 allows web site administrators to redirect traffic from one port to another; however, this would not solve the problem completely. SharePoint 2007 is no longer tightly bound to IIS. Administrators can now specify "Alternate access mappings" to a SharePoint web application. So to solve the problem completely one would have to create a SharePoint web application and site collection on port 443, then extend the SharePoint web application on port 80, then go to IIS and perform the following on each web server in a server farm:
Posted at 04:18 PM in SharePoint 2007 | Permalink | Comments (4) | TrackBack (0)