Wednesday, January 21, 2009

Problems with Infopath forms over Internet & ISA Servers

Yesterday, one of my client sent me a request that they published our workflow solution built over InfoPath 2007 Form services and WWF over internet and suddenly discovered that users could not access or submit the form using FQDN.

Their users were accessing SharePoint sites and InfoPath form in one of following different ways:

Via the Intranet: http://intranet
Via the Extranet: http://extranet.ourcompany.com
Via the ISA Server: https://interet.ourcompany.com
The form is set to full trust, published from InfoPath as a site content type and deployed as Administrator-approval required form (browser compatible) and then activated through Central Administration. It was activated at http://intranet.

At that time, I enabled SharePoint logging and started drilling into log files where I came to know that for some odd reason InfoPath form was submitting the data to the internal URL which was http://intranet. Strange!!!

The following error message was generated on submitting the form (also for ISA server users):

The form cannot be submitted to the Web server either because your computer is offline or because the host server is currently unavailable. If this problem persists, contact your network administrator.

On closing the form users were then redirected to http://intranet (the URL that the form is published to in InfoPath) which of course they could not access.

The following post seemed exactly the same as our scenario:
http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/111e0764-8342-4fb0-8d19-68d5a75ed45a/.

So, we added a Link Translation rule in the ISA Server to replace the FQDN InternalDomain with ExternalDomain (Without http://)

Eg:

https://internet.ourcompany.com

internet.ourcompany.com
The form is now working correctly for all users.

Thursday, September 18, 2008

You cannot upload files that are larger than 28 MB on a Windows Server 2008-based computer that is running Windows SharePoint Services 3.0

In the morning, I was asked to upload a file of 110 MB in our picture/vedio library. When I tried to do it after chainging the maximum file size in Central Administration, I started getting following symptoms:

  • Single File Upload via Document Library -- Nothing happens, you get a 404 page.

  • Multiple File Upload via Document Library -- It seems to upload the file but then after the page refreshes, the file is nowhere to be found.

  • Single or Multiple File Upload/Copy/Paste using open with Windows Explorer -- The file begins uploading but then towards the end you get the following error:
    Could not find this item
    This is no longer located in C:\filepath. Verify the item’s location and try again.

To resolve the above error, go to web.config of your web application and add following tags at the end of web.config:

<system.webserver>

<security>

<requestfiltering>

<requestlimits maxallowedcontentlength="file size in bytes">

</requestfiltering>

</security>

</SYSTEM.WEBSERVER>

Wednesday, September 17, 2008

Errors after installing Infrastructure update for MOSS 2007

During last month, I applied Infrastructure udate of SharePoint 2007 in my development envrionment and everything was working like a charm. So I decided to apply the same fix in my production environment this week.

Here I will like to mention one thing. I started this project as migration one where we were supposed to migrate MOSS 2007 + Windows 2003 environment to MOSS 2007 SP1 + Windows 2008 environment. So it was basically a restored farm.

After applying the Infrastructure upgrade, I started facing the issues:

"The resource object with key 'S2SearchAdminDashboard_Title' was not found" for Search Administration site

and

"The resource object with key 'S2LeftNav_Administration' was not found" for other search links.

After searching a while on Google, I was able to find the solution. Solution is quite simple. Sort all files within App_GlobalResources folder based on the date in the development environment where everything was working fine. Copy files which were modified on 3/25/2008. These will be the most new ones. Copy them over to the SSP virtual directory of your troubling farm within the same App_GlobalResources folder. These files are:

searchadmin.en-us.resx
SearchAdmin.resx
sps.en-US.resx
and sps.resx

Then if you will try, you will get the following error:

Could not find the sitemap node with URL '/SearchAdministration.aspx'.

Now this time, copy layouts.sitemap file which will be the most latest modified file within _app_bin folder from the development environment to production environment. As soon as that was copied over, the search administration page appeared fine.

Tuesday, August 05, 2008

Talking about Develop on SharePoint webcast series

Quote

Develop on SharePoint webcast series

In this 10-part series, you will receive practical technical information from Robert Bogue and Andrew Connell, Microsoft SharePoint Most Valuable Professionals (MVPs), covering 10 fundamental developer topics on SharePoint Products and Technologies via Live Meeting Webcast.

20-May-08 ... Introduction to SharePoint for .NET Developers: Web Parts. Register
21-May-08 ... Introduction to SharePoint for .NET Developers: Data Lists. Register
27-May-08 ... Introduction to SharePoint for .NET Developers: Silverlight and SharePoint. Register
28-May-08 ... Introduction to SharePoint for .NET Developers: Using Event Handlers. Register
03-Jun-08 ... Introduction to SharePoint for .NET Developers: Page Branding. Register
04-Jun-08 ... Introduction to SharePoint for .NET Developers: Workflows. Register
10-Jun-08 ... Introduction to SharePoint for .NET Developers: Web Services. Register
11-Jun-08 ... Introduction to SharePoint for .NET Developers: Page Navigation. Register
17-Jun-08 ... Introduction to SharePoint for .NET Developers: User Management. Register
18-Jun-08 ... Introduction to SharePoint for .NET Developers: Custom Content Types. Register

Creating MOSS 2007 Theme


  1. On the SharePoint server go to the Themes folder e.g. c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Themes
  2. Make a copy one of the existing theme folders and its contents rename it e.g. MyTheme.
  3. Rename the .INF file within the MyTheme folder to MyTheme.INF
  4. Edit MyTheme.INF.

    1. At the info section, Change the title, to MyTheme. Change codepage, e.g 22200, replacing the code page will fixing error “A theme with the name “MyTheme 1011″ and version already exists on the server.”
    2. In the titles section, rename the names to your new name. this section is to present the name in the different language.

  5. Provide an image to give a preview of your theme. This image should be placed in C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES. E.g. tmbMyTheme.gif
  6. Modify the c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Layouts\1033\SPTHEMES.xml to include a reference to the new MyTheme theme

    <Templates>
    <TemplateID>MyTheme</TemplateID>
    <DisplayName> MyTheme </DisplayName>
    <Description> MyTheme has a white background with blue control areas and orange highlights.</Description>
    <Thumbnail>images/tmbMyTheme.gif</Thumbnail>
    <Preview>images/ tmbMyTheme.gif</Preview>
    </Templates>

  7. Modify the CSS within MyTheme folder to personalize your theme.
  8. Run iisreset from the command prompt
  9. Apply the new theme to a “test site”,.

Impersonation in SharePoint 2007 OM

Whenever you are developing anything for SharePoint 2007 and that piece of code needs to perform some admin tasks which are not possible with the current user context, you are left with no other option but to impersonate.

Impersonation within SharePoint 2003 was not so easy. Although you can find the helper class easily on Internet but still you need to add that class to your solution and perform few calls which sometimes becomes quite irritating. It was a common issue with SharePoint 2003.

Thankfully, that issue has been addressed in SharePoint 2007 and now we have impersonation as part of SharePoint OM. It is as easy as calling a delegate. If you are familier with anonymous methods, you can get the idea from the following piece of code that how easy it is to elevate user's rights within SharePoint 2007.

SPWeb web = SPContext.Current.Web;
SPUser user = web.CurrentUser;

// the calling user

// Uses the SHAREPOINT\system creds with the SPUser's identity reference of user SPSecurity.RunWithElevatedPrivileges(delegate() {

web.AllowUnsafeUpdates = true;
SPList theList = web.Lists[listName];
SPListItem record = theList.Items.Add();
record["User"] = user;
// calling user
record.Update();
web.AllowUnsafeUpdates = false;

});

Sunday, July 09, 2006

No more ISAPI Filter in SPS

All SharePoint developesl will be pleased to know that Microsoft has finally removed the ISAPI filter of SPS which sometimes becomes pain in the neck. Now all the requests will be processed by the ASP.Net ISAPI and the redirection will be controlled by HTTP Modules and Hanlders. So if you want to write your own hooks in the processing of SPS, you just have to write either handler or module. No more un-managed code.

Tuesday, July 04, 2006

Document Conversion in Office 2007

Currently I am working in Petroleum Development Oman for the implementation of Office 2007.

Here I have Office 2007, SQL and Domain Controller all installed on the same machine. While using document conversion services. I got error that failed to perform the action CE_Other. I tried all the options but failed to configure it. Finally, someone from Microsoft told me that Document Conversion services do not work on the DC. You need to use them from some other machines due to some reason. Well it is good thing that these services are not allowed to run on DC as they are working with the file system as well but it should be documented at some place.

Lets see what else will come.

Thursday, June 08, 2006

Navision Vs Axapta

Many of us who are working on Microsoft Technologies are interested in the differences between GP, Axapta and Navision. In this search I came to the following annoted by Gerrit Combrink and Rene on the Microsoft.Public.Axapta newsgroup which might be helpful:

The focus areas of both products are around Manufacturing, Distribution and Services. The main differences are with functionality and technology.

(In Axapta, all this functionality is standard. There is no standard Services functionality in Navision. Such functionality needs to be built by ISVs.)

Axapta is aimed more towards the top end Mid market to corporate customers with complex requirements, while Navision looks after the lower to middle mid market segment with less complex requirements.

(Lower meaning: about 10 concurrent users. Above 20 users: Axapta)

Technology within Axapta also allows it to be a much stronger, more stable, higher performing competitor in a 3-tier environment as this is built into the existing architecture. You can also run a lot more concurrent users on a Axapta system than on Navision.

(Axapta's AOS technology (Axapta Object Server) provides scalability. Axapta has been tested from 1 user up to 3500 concurrent users.)



http://www.microsoft.com/BusinessSolutions/default.mspx

These are certain guidlines given by Oliver in deciding which product to use:



1. If the customer is more a technology freak -> Axapta
2. If the user need a vertical solutions -> Navision
3. If you need web services -> Axapta
4. If you have less than 30 Users -> Navision
5. If you have more than 500 Users -> run Axapta
The conclusion is that the use of Axapta or Navision is not decided on a rational basis, but on the basis emotions and sympathy for one of these products by the prospect.

Monday, January 02, 2006

Distributed Queries

Introduction

Many times we face the scenario where we have to execute some query on more than one database. One such example may be you have separate databases for each regional office and corporate office. At the end of year, you want o compile accounts and the effect of each regional office should reflect in these accounts. So you have to query each regional database but how to do this.

Well it is not so difficult. SQL server provides us system stored procedures and SQL functions that allow us to perform such operations.

Using the code

It is really easy to perform operations on different databases using distributed queries. Distributed queries provide SQL Server users with access to:
  • Distributed data stored in multiple instances of SQL Server.
  • Heterogeneous data stored in various relational and non-relational data sources accessed using an OLE DB provider.

Distributed queries can allow users to access another data source (for example, files, non-relational data sources such as Active Directory™, other SQL Servers and so on) using the security context of the Microsoft Windows account under which the SQL Server service is running. SQL Server 2000 impersonates the login appropriately for Windows NT logins; however, that is not possible for SQL Server logins.

Tables and views in external data sources can be referenced directly in SELECT, INSERT, UPDATE, and DELETE Transact-SQL statements. Because distributed queries use OLE DB as the underlying interface, distributed queries can access traditional relational DBMS systems with SQL query processors, as well as data managed by data sources of varying capabilities and sophistication. As long as the software owning the data exposes it in a tabular rowset through an OLE DB provider, the data can be used in distributed queries.

The simple way of performing a select operation against different data sources is:

Exec sp_addlinkedserver @server='Test', @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.1.254', @catalog='LuckyERP_LAL_Live'

Exec sp_serveroption 'Test', 'data access', 'true'

Exec sp_addlinkedsrvlogin 'Test', 'true'

Select * From OPENQUERY(Test, 'SELECT * FROM dbo.SalesContractHeader')

Where

@server: Is the label for the data-source that will be used to refer to it.

@srvproduct: Is the product name of the OLEDB data-source to be linked as the linked server. In case of SQL Server, you can either set it as ‘SQL Server’, in that case you can’t specify other parameters or you can leave it empty and set other parameters like catalog name and the IP address or host name of the SQL Server.

@provider: Is the name of the OLEDB provider for the data-source.

@datasrc: Is the name of the datasource as interpreted by the OLEDB provider. It can be either IP address of the server or its host name.

@catalog: Is the name of the catalog. In case of SQL Server, it is the name of the database to be linked to.

Executing sp_serveroption is optional. It is used to configure linked server. You can refer msdn for details. In our case, I enable ‘data access’ to linked server. The default behavior also allows data access to linked server. So doing this is not necessary.

Sp_addlinkedsvrlogin creates or updates a mapping between logins on the local instance of Microsoft SQL Server and remote logins on the linked server. For details refer msdn. The first parameter of this stored procedure is the local name of the remote server as specified in sp_addlinkedserver. The second parameter is @useself. A value of true specifies that SQL server authenticated logins use their own credentials to connect to remote server. In case the credentials are different then use false and specify locallogin, remote login and remote password after @useself parameter as 3rd, 4th and 5th parameters.

Using this stored procedure is also optional as default behavior is to use SQL server authenticated logins’ credentials to connect to remote server.

Now after all things are properly configured, we come to actually executing a distributed query. Will it be different than executing ordinary select or DML queries? I don’t think so. There is only a slight difference. Use OPENQUERY to execute the specified pass through query on the given linked server and here we are done with executing a distributed query.

Points of Interest

Have you notice that it is not necessary that the linked server is always SQL Server. Yup you can use any OLEDB source as the data-source in distributed queries including SQL Server, Oracle, MS-Access, ODBC data-source, File system of Indexing Service, MS-Excel Sheets and IBM DB2 Databases. Wow what a long list and you can also develop your own data-source by implementing OLEDB interface. Thanks to Microsoft SQL we are able to perform operations on heterogeneous data stored in such diversified data-sources.