Posts filed under 'Uncategorized'

SharePoint Content Deployment and Migration API

  • Using deployment and migration APIs contents may sync between different sites using deployment packages these packages may be translated before they uploaded to the target site.
  • Its move all of the list related data (permissions, pages, web Parts,…).
  • It’s Very strong if we talk about the way it gets the relative data for very item.
  • Reserve ID or create new one.
  • Supports incremental deployment. So, it can deploy new changes only.
  • Limitations:
    • Incremental export/import is supported only in the site scope.
    • In the lists the old items will not be overwritten they will duplicated. But in case of document libraries: the old items overwritten.
    • Unexpected behavior when using to transfer list from a variation site to another variation site have the same list.
    • Can’t export items from different site collections in the same operation.

Add comment May 16, 2008

My SharePoint Variations Notes

  • Features:
    • Building multilingual sites by building a site (called Label) for every language and transferring the changes from source language site to all other sites.
    • Redirecting the user to the site matching the browser language.
    • Placing a control to change the language in the top navigation bar.
    • A service is running every 20 min to propagate changes from the source language site to all other sites.
  • Limitations:
    • Transferring changes from the source language to others. So changes in any language other than the source are not reflected in other sites.
    • Pushing a new version from a page to all sites even if there is a minor change like spelling mistake.
    • One to one relationship with site collection (one variation per site collection).
    • Lists changes are transfer only when it’s contained in a new site created.
    • When creating sites using features the target sites created without localization.
    • The localization is working only when creating new sub site and the label sites.
    • List view web part references the source site list in every site it is propagated to(because it use the list ID).
    • Variation fails when trying to push a page when there is a page with the same name but with different content type in the destination site.
    • Permissions are not propagated.
    • Works only on publishing pages.
    • Can’t change default page layout.
    • Don’t support site restore.
    • Variation sites must be in the same level and their parent site must be the root of the variation.
  • Risks (from blogs):
    • Sometimes variations cause performance issues.
    • May cause an expected behavior with heavy look and feel customizations.
  • Variations in other Blogs:

Add comment May 16, 2008

Multilingual System Design: (3)Data Layer (Stored Procedures)

In this post, I will discuss the logic contained in the data layer. The data layer logic is all in stored procedures and functions.

First, Let us discuss the logic for the Languages table. The following stored procedures may be defined on the languages table:

  • AddLanguage: Add new language to the system. You must take care that this stored procedure not only adds a record in the languages table but it also adds a record for that language into all child tables.
  • DeleteLanguage: Delete language from the system. You need to remove all the records related to that language from child tables. You have to check also if it’s the default language for any user then he/she has to change it.
  • UpdateLanguage: Update the details for a language.
  • GetLanguageDetailsById: Retrieves all the language data using language ID.
  • GetAllLanguages: Retrieves all the languages supported by the system.

Then we can define a group of stored procedures on every multilingual parent-child tables:

  • AddRecord: This stored procedure is defined on the parent child records. It first adds a record in the parent table then adds its child record for a specific language and adds empty child record for each other languages. This stored procedure may use two other stored procedures or functions:
    • AddParentRecord.
    • AddChildRecord.
  • UpdateRecord: Updates a parent record and one of its related child so it needs to take a language parameter. Also, it needs another two stored procedures:
    • UpdateParentRecord.
    • UpdateChildRecord.
  • DeleteRecord: Deletes a record from parent table and all of its related child records. Again, it needs the two stored procedures:
    • DeleteParentRecord.
    • DeleteChildRecord.
  • GetRecoredByLang: Retrieves the parent record and one of its children defined using the language paramenter.
  • GetAllRecoreds: Retrieves the parent record and all of its children.

After developing these procedures for all tables, you need to move to the data access layer. In this layer, you have to make functions that allows you to connect to the database and access your tables and stored procedures. It’s so basic and straight forward so I will skip it.

Next time, I will talk about the business logic.


Add comment May 16, 2008

Multilingual System Design: (2)Data Layer (data structures)

After taking a look on the system, in this post I will describe the suggested design for the Data Layer.

In the data layer we need to have a place to store the languages included in the system. This design support dynamic number of languages even while the system is running. So, a table to store the languages is needed.

In this table we have the Language ID (LangID) that stored a number uniquely indentifies the language I think using the Local ID as LangID will be better or it can be added as a new column in the table. Then we have the language name stored the name of the language written in that language so this column must have NVarChar type. Also we have Language direction identify if the language displayed in right-to-Left or left-to-write order. This information can be retrieved from the CultureInfo object so we can neglect it from the table.

Sometimes the system users table has a column that refers to the default language for the user. Some times its gained from the current culture of the operating system deployed in the user machine. I think prefer storing it in the users table.

Let us move now for the most important part of the system. How to design the database to support multilingual content? First design your database without considering its multilingual. Then, for each table has columns may contain information varying from language to another: first: leave the columns that not depending on the language in the same table then add a new table have a composed primary key (the key from the parent table and the language) and move all the columns depending on the language into that table. So in the new table the parent table primary key will be a foreign key to the parent table.

So, if we have a branches table contains: branch id, name, address, manager and telephone number. We can put the branch ID, manager and telephone in the parent table. While the child table will contains branch ID, language, name and address. Branch ID is a primary key for the parent table. In the child table, the primary key is composed from branch ID and language. Branch ID is a foreign key in the child table.

So if we have the branch data as following:

ID

English Name

Arabic Name

Manager ID

Telephone

English Address

Arabic Address

1

Cairo Branch

فرع القاهرة

200

+2022000

Cairo

القاهرة

Then we need to add a record the branch table:

ID

Manager ID

Telephone

1

200

+2022000

And two records in the branch details table:

ID

Lang

Branch Name

Branch Address

1

1025

فرع القاهرة

القاهرة

1

1033

Cairo Branch

Cairo

In the next post I will continue the talk about the data layer


Add comment May 15, 2008

Multilingual System Design: (1)Overview

A lot of multinational companies and organizations in general have audiences around the world with different languages and cultures. These organizations have an increasing need to develop their information systems targeting these audiences with their own languages. Not only the interface but also the content of the system must match the audience language.

In this series I am suggesting a design for a multilingual system. This system has a multilingual content viewed in multilingual user interface. I used this design in many systems and was very useful. Especially when in case of medium to large systems. The systems done with this design are used in RTL and LTR orientation. But this model is design for windows application. I think it needs many modifications to fit to web based applications.

This design is designed in comply with Microsoft technologies. I tried to make it generic but when it gets specific it will tends to be Microsoftian. Because I made this design to be implemented with MS SQL and .NET technologies.

Let us start with a general overview on the system. The system is consisting of four layers:

  • Database Layer.
  • Data Access Layer
  • Logic Layer.
  • User Interface Layer.

The database layer deals with the multilingual content. Not only data structures but also the basic logic that manipulating the data. Data access layer is the layer used to retrieve data from database. Logic layer is the least layer that multilingual design affects but we will see that there are some modifications need to be done in this layer to be complied with the multilingual functionality. Finally the user interface layer is used to display the multilingual content but in a multilingual interface so the forms, messages…etc that used to view and take commands from user is also multilingual.

In the next post I will start with Data Layer ISA…


Add comment May 13, 2008

From ITWorx to Elfaysaliah

I think its the time to change…

Elfaysaliah is a very huge capital in KSA owning and sharing in a large number of well-known brands in KSA and Middle-East. Their employees passed the 5,000 in 1995. It’s owning 15 company and sharing in other 5 huge companies like Shuaa Capital and Audi KSA. Four of these companies are working in IT and telecom field. I applied to join there but I thought I have no chance to be there with these experienced team from many domains. After about a month, I found that mail from business integration manager in FBTC asking me if I want to join FBTC as a senior business integration engineer. I replayed with my agreement. After some interviews, I got the offer: Associate Technical Consultant, Business Integration.

The job responsibility is to assist a team of FBTC consultants by provide technical expertise in Microsoft development technologies and follow development best practices and document required technical artifacts related to projects. There is no limit in the technologies and experiences when we talk about business integration. Oracle, SAP , Web Sphere, Microsoft Servers, a lot of DBMS’s … more and more technologies used there in FBTC.

Now I have to take the decision, leaving the family of ITWorx and the guys in CodeLab or miss this great opportunity. Really, it was so hard decision because I love this environment: ITWorx and my best friends here in Egypt. I have to take the decision in a week.

Soon I made my decision I am leaving Egypt.

FBTC is an exceptional offer. First, in the salary (its really very important for me now). And it gives me a good push in the career path and experience. So, I have to leave for at least 3 years.

So… I am sorry ITWorx… I am leaving!!!


2 comments May 7, 2008

Errors in Right-to-Left SharePoint

In the languages worked left-to-right (like Arabic) its not working well. (see the photos) You will notice that the words will not have the right order.

 

Also there are some bugs in the graphics in case of right-to-left:

 


Add comment May 4, 2008

Localized Custom Properties in SharePoint Web Parts

  1. First you need to have your resource files. Place them directly under the project node. For Example add:
    1. MyResource.resx

      Add a new resource entry in the file:
          Key: category - Value: MyNewCategory
          Key: property - Value: MyNewProperty
          Key: description - Value: MyNewDescription

    2. MyResource.ar-sa.resx

      Add a new resource entry in the file:
          Key: category - Value: MyNewCategory
          Key: property - Value: MyNewProperty
          Key: description - Value: MyNewDescription
       Take care that these resources files must be embedded resources.

    Place the following attribute before the class:

    [XmlRoot(Namespace = "projectname")]

  1. Now you have to override the LoadResource function to get the data from your resource files:
  2. public
    override
    string LoadResource(string id)

    {
    ResourceManager rm = new
    ResourceManager(“projectname.MyResource”, this.GetType().Assembly);

    return rm.GetString(id);
    }
  3. Before the property you place the “ResourcesAttribute” attribute like the following
[ResourcesAttribute(
"property",
"category",
"description")]
[WebPartStorage(Storage.Shared)]
[Browsable(true)]
public string MyProp_Localized
{
   get
   {
     return _ MyProp_Localized;
   }
   set
   {
      _MyProp_Localized = value;
   }
}

To deploy this web part, use the regular procedure of deploying web part. But you must take care that you will need to deploy the every resources dlls in “..\bin\debug” subdirectory to the Global Assembly Cash (in” windows\assembly” directory). You will find a subdirectory for each culture you have in the project under this directory you will find a projectname.resources.dll file you have to deploy this file to the GAC.


Add comment May 4, 2008

Using Resources Files in SharePoint Web Parts

  1. First you need to have your resource files. Place them directly under the project node. For Example add:
    1. MyResource.resx

      Add a new resource entry in the file:

          Key: hello

          Value: Hello

    2. MyResource.ar-sa.resx

      Add a new resource entry in the file:

          Key: hello

          Value:أهلا

    Take care that these resources files must be embedded resources.

  1. In the render function add the following code:

    ResourceManager rm = new
    ResourceManager(“projectname.MyResources”,this.GetType().Assembly);

    writer.Write(rm.GetString(“hello”));

To deploy this web part, use the regular procedure of deploying web part. But you must take care that you will need to deploy the every resources dlls in “..\bin\debug” subdirectory to the Global Assembly Cash (in” windows\assembly” directory). You will find a subdirectory for each culture you have in the project under this directory you will find a projectname.resources.dll file you have to deploy this file to the GAC.


Add comment May 4, 2008

QuickTel Experience 2005

QuickTel what an Experience!!!

The people are very collaborative. The system is well controlled and flexible. I am very happy for this experience.

I got internship there while I was working for SUS. For two months, I learned the importance of software process, process automation and model driven development. I met a very experience guy “The Omar” he gave me a lot in session and in side talks. Thank you Omar.

In QuickTel I was responsible of building a diagramming tool that converts a project logic stored in a DB repository into diagrams. By the end of two months I finished a tool generates the needed diagrams using rational rose file structure.

In QuickTel, I have the first chance to see a demonstration of TeleLogic Tools and I am very grateful for that. In addition I saw new types of hardware for the first time and I saw how the hardware is designed and implemented. In addition to seeing a switch implementation which I consider it very useful experience.

I have to thank the collaborative QuickTel team (I still have a strong relations with them)

***THANK YOU GUYS***


Add comment May 3, 2008

Previous Posts


Calendar

July 2008
S S M T W T F
« May    
 1234
567891011
12131415161718
19202122232425
262728293031  

Posts by Month

Posts by Category