Gael's profileGael Duhamel - SharePoin...PhotosBlogListsMore Tools Help

Gael Duhamel - SharePoint et Commerce Server [MVP]

Blog sur les technologies Microsoft SharePoint et Commerce Server
December 01

[Commerce Server] Créer des rapports simples et efficaces grâce à PowerPivot (aka Gemini)

Dans un de mes précédents post, j’ai expliqué comment mettre en place la solution analytics de Commerce Server, et je pense qu’il a dû y avoir de la déception chez certains (qui a dit tous?) d’entre vous!

Même si les cubes fournis peuvent être un bon point de départ, le process d’import est lui complètement obsolète et s’apparente plus à une boite noire où il est quasi impossible d’y “tunner” (comprendre?) quelque chose (je laisse sous silence les rapports qui sont eux plus que périmé)…

Bref, vous l’aurez compris, il est temps que la team Commerce Server se penche sur cette fonctionnalité pour lui donner un bon coup de peinture!

En attendant, que faire?:

  • Développez de nouveaux rapports sur la base des cubes/process import
    • Avantage:
      • Pas de cube à développer, on ne part pas de 0 
      • En fonction de vos besoins peu de temps de développement pour ajouter quelques informations
    • Inconvénient
      • Espérer que le process d’import se passe bien et corresponde à vos besoins
      • Long travail de redesign des rapports si vous souhaitez un layout plus moderne
      • La structure des cubes ne correspond pas forcément à votre besoin
      • Nécessite une intervention de l’IT pour toutes adaptations
  • Développez vos propres cubes
    • Avantage
      • Vous collez à vos besoins
    • Inconvénient
      • Nécessite une intervention de l’IT pour toutes modifications/évolutions
      • Temps de mise en place pouvant être assez long
  • Ne rien faire
    • :)

Dans tous les cas, un passage par l’IT s’avère obligatoire et vous n’avez pas forcément la patience d’attendre pour exploiter votre site internet?

Bonjour et bienvenue à Gemini, pardon Power Pivot :)

Power Pivot est le nouvel outil développé par Microsoft pour faciliter et vulgariser la BI sur le poste de travail (rien que çà). Il se présente sous la forme d’un add-in pour Excel 2010 (attention ne fonctionne qu’avec la version d’office 2010):

Je me suis donc amusé à le tester sur un site Commerce Server d’un de mes clients et j’avoue que je suis sidéré par sa facilité de prise en main et la rapidité d’exécution.

L’ajout de source de données se fait via un onglet dédié et comme toujours dans office, la manipulation est largement facilitée et guidée:

image

image   image  image  image  image  image

Et voilà, en 5 minutes montre en main, j’ai importé une base transactions de Commerce Server de 2Go dans un fichier Excel! Et cerise sur le gâteau, le fichier fait à peine 40mo! Pour les sceptiques:

image image

Grâce à la structure relationnel et multi dimensionnel de Power Pivot, je vais pouvoir créer simplement et rapidement des tableaux croisés dynamiques ou graphiques en quelques minutes. Prenons par exemple une représentation graphique du nombre de commande par jour

  • Tout d’abord, spécifier qu’on veut un graphique

image 

  • Ensuite, on ajoute en valeur le nombre de tracking number et en axis la date de création

image

  • Pas vraiment lisible je vous l’accorde :) En effet, la colonne created contient la date et l’heure! Pour regrouper par mois, il nous faut donc une colonne ne contenant que le mois et l’année du champ '”created”. Pour cela, rien de plus facile! Il nous suffit de créer une nouvelle colonne dans notre onglet “Purchase Orders” en utilisant le langage DAX  (qui est très proche du langage de formule d’Excel): RIGHT("0" &MONTH([Created]),2) &"/" &year([Created])

image

  • On rafraichit la source et notre nouvelle colonne est maintenant disponible. Résultat:

image

Facile non :)

Vous comprenez qu’il est donc très simple de mettre en place des dashboards puissant grâce au couplage PowertPivot (pour les data) et Excel (pour le formatage), exemple:

image

 

Pour plus d’informations:

November 27

[Commerce Server] Bienvenue chez Mathon : Mathon, ustensiles de cuisine et accessoires de cuisine

Je suis intervenu, avec mon collègue Anoir, sur le site e-Commerce de la société Mathon afin de leur apporter notre expertise autour des solutions Commerce Server et du développement .Net.

En effet, victime de son succès, le site connaissait de temps en temps des problèmes de performances et surtout de capacité à prendre un gros nombre d’utilisateurs dans une faible période de temps (comme par exemple lors de l’envoi d’une newsletter ou du début de la période des soldes).

Notre intervention s’est donc surtout portée sur l’optimisation du code .Net (mise en place d’un caching puissant, optimisation des controles .Net utilisés, …) ainsi que sur les bonnes pratiques d’utilisation du framework de Commerce Server (comme systématiser le CatalogItemConfiguration).

Le site est maintenant très fluide et près à recevoir vos nombreuses commandes :). A vos cartes bleues!

Je vous invite par la même à suivre le blog de Cyril, qui est un réel passionné des technologies Microsoft :)

image 

[Commerce Server] Secretaire ou Assistante de direction, Kalligo est l'outil en ligne fait pour vous

La team Commerce Server d’Altima est heureuse de vous annoncer la naissance du portail des secrétaires et assistantes de direction répondant au doux nom de Kalligo. A vos cartes bleues!

image

November 10

[IIS] Découvrez le module de réécriture d’URL d’IIS7

Les différentes VPC ou templates de site distribués par l’équipe Commerce Server ne disposent pas par défaut d’une réécriture d’url. Et c’est actuellement la meilleure excuse que j’ai trouvé pour vous présenter le nouveau module de réécriture intégré à IIS: URL Rewrite Module :).

L’installation de ce module est très simple, vous pouvez le faire soit via un exécutable soit avec le nouvel auto installeur “Microsoft Web Plateform Installer”. Une fois installé, une nouvelle icone est présente dans votre IIS manager sous la section IIS:

image

Ce module vous propose plusieurs actions:

  • Création manuelle d’une règle de réécriture
  • Création assisté à partir d’une url brute (j’en connais qui vont adorer)
  • Le connu url map (url statique de votre site)
  • Le blocage

Commençons par la création assistée

=> Là je suis sûr de faire mouche auprès de nombreuses personnes réfractaire à l’expression régulière :)

Prenez simplement votre url brut du style: http://adventureworks.spgael.poc/Pages/Category.aspx?cat=Adventure Works Catalog&category=Boots et collez la dans le premier textbox. Là le module va vous générez une liste de template puis sur la sélection d’un des templates, votre expression régulière se génère automatiquement! Je vous avais dit que je ferais mouche :)

image image image

Résultat:

image image

Passons maintenant à la méthode manuelle

Ici, pas question de se passer de nos bonnes vieilles expressions régulières. Tout est maitrisé et vous pouvez ainsi coller aux besoins de vos clients. Dans cet exemple, je vais réécrire: http://adventureworks.spgael.poc/Pages/Product.aspx?category=Boots&cat=Adventure Works Catalog&id=AW074-04 en http://adventureworks.spgael.poc/Pages/Adventure%20Works%20Catalog/Boots/PID-AW074-04.aspx. Pour cela, je rentre mon expression régulière et chose “cool”, je peux la tester et vérifier que la génération de mes paramètres est correcte (notez ici que les paramètres sont à récupérer via {R:x} ou x et la place du paramètre dans la collection). Vous pouvez ensuite paramétrer les différentes conditions à vérifier (ex si vous souhaitez vérifier que ce n’est pas un fichier)

image  image image

Résultat:

image image

Les url mappings

Rien de sorcier ici, les url mapping ne sont pas les choses les plus complexes à gérer :)

Le blocage d’url

La non plus rien de bien compliqué, si ce n’est que comme pour l’url mapping, vous êtes en mode assisté :)

Le web.config

Rendez-vous maintenant dans le web.config et vous verrez les règles créer apparaitre dans la section system.webServer/rewrite

<system.webServer>
    <rewrite>
        <rules>
            <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                <match url="^Pages/Category/([^/]+)/([^/]+)/?$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="Pages/Category.aspx?cat={R:1}&amp;category={R:2}" />
            </rule>
            <rule name="Product Url" stopProcessing="true">
                <match url="^Pages/([_0-9a-z- ]+)/([_0-9a-z- ]+)/PID-([_0-9a-z- ]+)\.aspx" />
                <action type="Rewrite" url="Pages/Product.aspx?category={R:2}&amp;cat={R:1}&amp;id={R:3}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Voilà, donc de quoi rendre vos chers référenceurs heureux (coucou Renaud) et plus d’excuses à ne pas le mettre en place lors de vos démos ou sur les sites live (si, si il y a encore des gens qui ne réécrivent pas les urls).

Technorati Tags: ,,,
November 06

[Commerce Server 2009] La dernière CTP de Commerce Server 2009 R2 est disponible

Récemment, la team Commerce Server a publié la dernière CTP de Commerce Server 2009 R2.  Comme vous vous en doutez, je me suis empressé de l’installer pour découvrir les nouvelles features et les partager avec vous.

Tout d’abord, vous pouvez dire adieu à vos vieux processeurs 32 bits puisque Commerce Server 2009 R2 ne tournera que sur du 64bits! Idem pour vos windows 2003 ou SQL 2005. La R2 ne supporte que Windows 2008 (R2 ou non) et SQL Server 2008 (R2 ou non).

Mon premier retour est plus que positif! De nombreux points ont été considérablement amélioré. Commençons par l’installation où tout a été repensé. Nous avons maintenant beaucoup plus de souplesse sur la sélection des composants à installer:

image image image

Sur la configuration de Commerce Server, un effort a aussi été fait pour vous guider au mieux. 2 choses à dire ici:

  • Pour le moment, seule la configuration de base est activée. L’option avancée viendra dans une future version
  • Il y a un bug si vous souhaitez utiliser un serveur SQL distant. Pour le moment, seul une installation en mode SQL locale fonctionne via l’outil. Pour contourner le problème, il vous faut lancer vous même la configuration via une ligne de commande et un fichier XML.
C:\Program Files (x86)\Microsoft Commerce Server 9.0>CSConfigWizard.exe /s ConfigLaunch.xml
<Configuration>
  <SQL ID="CommerceAdminDB">
    <Server>RemoteSQLServer</Server>
    <Database>MSCS_Admin</Database>
    <WindowsSecurity>yes</WindowsSecurity>
  </SQL>
  <SQL ID="DirectMailerDB">
    <Server>RemoteSQLServer</Server>
    <Database>DirectMailer</Database>
    <WindowsSecurity>yes</WindowsSecurity>
  </SQL>
  <NTService ID="DirectMailerService">
    <UserName>CSService</UserName>
    <Domain>SPGAEL</Domain>
    <Password>password</Password>
  </NTService>
  <VirtualDirectory ID="Publishing" Create="False" />
  <NTService ID="StagingService">
    <UserName>CSService</UserName>
    <Domain>SPGAEL</Domain>
    <Password>password</Password>
  </NTService>
</Configuration>

Concernant la mise en place du template Storefront, rien de particulier à dire pour les habitués de Commerce Server:

  • Méthode manuelle:
    • Unpup
    • Gestion de la sécurité et des utilisateurs
    • Configuration des webservices
    • Deployer les solutions SharePoint
  • Méthode assistée:
    • %commerce_server_root%\SharePointServices\Site\SharePointCommerceServicesConfiguration.exe
      • j’ai eu pas mal de problèmes avec le SharePointCommerceServicesConfiguration dans la version de Commerce Server 2009, qui m’ont fait privilegié la méthode déploiement/configuration manuelle. Sur la R2, le process a été amélioré car j’ai tenté plusieurs déploiement qui ceux sont tous déroulés avec succès :) Encore un bon point pour la R2

Notez au passage, que layout du site n’a pas beaucoup évolué mais propose quelques trucs sympa comme la configuration des catalogues utilisés/channel

image

Attention de nombreuses assemblies ont été modifiées. Consultez bien la documentation de la R2 qui explique cela en détail! Ne vous étonnez donc pas des effets de bord lors des déploiements de votre environnement Commerce Server 2009.

Technorati Tags: ,,
October 26

[Commerce Server] ProductConfiguration / CategoryConfiguration ou les oubliés de Commerce Server

Ces derniers temps, j’ai été sollicité sur des problématiques d’expertise Commerce Server qui m’ont permis de me rendre compte que 2 classes fondamentales pour tous développements Commerce Server étaient totalement méconnue, j’ai nommé:

Ces deux classes héritent toutes de la classe Microsoft.CommerceServer.Catalog.CatalogItemConfiguration, et elles sont utilisées pour ne charger que les éléments que vous avez besoin d’utiliser. En effet, il n’est pas rare lorsque vous souhaitez afficher une liste de produits, de ne vouloir afficher que certaines propriétés du produit sans avoir à utiliser ses variants, ses catégories parentes, etc., etc....

D’ailleurs, si vous jetez un œil sur l’API via Reflector, vous vous apercevez que la classe CategoryConfiguration ou ProductConfiguration est instanciée si vous n’en spécifiez aucune (ie, le framework choisit pour vous les choses à charger):

image image

Pour illustrer l’importance de ces classes, prenons l’exemple de la récupération d’un produit ou nous n’avons besoin d’afficher que son prix et son descriptif:

  • Sans ProductConfiguration:
Product product = catalogCtx.GetProduct("Adventure Works Catalog", "AW029-03");
Console.WriteLine("Pid: " + product.ProductId + " - " + product.DisplayName + " - " + product.ListPrice);

Grâce au SQL Profiler, nous pouvons récupérer les appels SQL Server et se rendre compte qu’ici 2 procédures stockées sont appelées:

exec dbo.ctlg_GetProductProperties
     @BCName=N'Adventure Works Catalog'
    ,@fVirtualCatalog=0
    ,@oid=30
    ,@ProductUID_tmp=N'ProductCode'
    ,@VariantUID_tmp=N'VariantCode'
    ,@catalogname=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@eJoinType=-1
    ,@TargetTableName=N''
    ,@SourceJoinKey=N''
    ,@TargetJoinKey=N''
    ,@Columns_tmp=N'P.BaseCatalogName,CategoryName,P.oid,DefinitionName,IsSearchable,cy_list_price,UseCategoryPricing,i_ClassType,CatalogName,ProductId,OrigProductId,VariantId,OrigVariantId,PrimaryParentCategory,DisplayName,Timestamp,OriginalPrice,LastModified,ParentOId'
    ,@EnableInventory=1
    ,@InventoryServerName=NULL
    ,@InventoryDatabaseName=NULL
    ,@FilterOutOfStockProducts=0
    ,@FilterBackOrderableProducts=0
    ,@filterPreorderedSkus=0
    ,@UseThresholdAsFloor=1
    ,@TreatmissingAsOutOfStock=0
    ,@StockHandling=0

declare @p15 int
set @p15=3
exec dbo.ctlg_GetProductVariantProperties
    @fVirtualCatalog=0
    ,@catalogname=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@ProductID=N'AW029-03'
    ,@VariantID=N''
    ,@eJoinType=-1
    ,@TargetTableName=N''
    ,@SourceJoinKey=N''
    ,@TargetJoinKey=N''
    ,@BuiltInColumnsToReturn=N'BaseCatalogName,CategoryName,OrigCategoryName,P.oid,DefinitionName,IsSearchable,cy_list_price,UseCategoryPricing,i_ClassType,P.CatalogName,ProductId,OrigProductId,VariantId,OrigVariantId,PrimaryParentCategory,DisplayName,Timestamp,OriginalPrice,LastModified,rank,ParentOId'
    ,@OrderBy=N'[Rank]'
    ,@StartingRec=1
    ,@NumRecords=2147483646
    ,@SortAscending=1
    ,@RecordCount=@p15 output
    ,@ProductOID=30
    ,@EnableInventory=1
    ,@InventoryServerName=default
    ,@InventoryDatabaseName=default
    ,@FilterOutOfStockProducts=0
    ,@FilterBackOrderableProducts=0
    ,@FilterPreorderedSkus=0
    ,@UseThresholdAsFloor=1
    ,@TreatmissingAsOutOfStock=0
    ,@StockHandling=0
    ,@VariantUID=N'VariantCode'
select @p15
  • Via un ProductConfiguration:
ProductConfiguration pdtConf = new ProductConfiguration();
pdtConf.InventoryOptions = new Microsoft.CommerceServer.Inventory.InventoryOptions();
pdtConf.InventoryOptions.FilterBackorderableSkus = false;
pdtConf.InventoryOptions.FilterOutOfStockSkus = false;
pdtConf.InventoryOptions.FilterPreorderableSkus = false;
pdtConf.LoadAncestorCategories = false;
pdtConf.LoadCanonicalCategories = false;
pdtConf.LoadParentCategories = false;
pdtConf.LoadRelatedCategories = false;
pdtConf.LoadRelatedProducts = false;
pdtConf.LoadVariants = false;
Product product = catalogCtx.GetProduct("Adventure Works Catalog", "AW029-03", "en-US", pdtConf);
Console.WriteLine("Pid: " + product.ProductId + " - " + product.DisplayName + " - " + product.ListPrice);

Cette fois-ci nous pouvons constater qu’une seule procédure stockée est appelée (car nous ne remontons pas les variants):

exec dbo.ctlg_GetProductProperties
     @BCName=N'Adventure Works Catalog'
    ,@fVirtualCatalog=0
    ,@oid=30
    ,@ProductUID_tmp=N'ProductCode'
    ,@VariantUID_tmp=N'VariantCode'
    ,@catalogname=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@eJoinType=-1
    ,@TargetTableName=N''
    ,@SourceJoinKey=N''
    ,@TargetJoinKey=N''
    ,@Columns_tmp=N'P.BaseCatalogName,CategoryName,P.oid,DefinitionName,IsSearchable,cy_list_price,UseCategoryPricing,i_ClassType,CatalogName,ProductId,OrigProductId,VariantId,OrigVariantId,PrimaryParentCategory,DisplayName,Timestamp,OriginalPrice,LastModified,ParentOId'
    ,@EnableInventory=1
    ,@InventoryServerName=NULL
    ,@InventoryDatabaseName=NULL
    ,@FilterOutOfStockProducts=0
    ,@FilterBackOrderableProducts=0
    ,@filterPreorderedSkus=0
    ,@UseThresholdAsFloor=1
    ,@TreatmissingAsOutOfStock=0
    ,@StockHandling=0

En apparence , le ProductConfiguration nous a permi d’éviter l’appel à la procédure stockée qui nous remontait les variants. Mais jetez un oeil du côté des statistiques SQL pour vous apercevoir qu’il y a bien plus que cela:

  • Sans ProductConfiguration

    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'InventoryCatalogMap'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'InventoryCatalogMap'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CtlInv__Variants1__for_spid__60'. Scan count 0, logical reads 7, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 3, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogHierarchy'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 3, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CtlInv__Variants1__for_spid__60'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

  • Avec ProductConfiguration

    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'InventoryCatalogMap'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Adventure Works Catalog_CatalogProducts'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Impressionnant non? :) 3 fois moins d’exécution côté SQL :)

Attaquons nous maintenant à la catégorie. C’est là ou les résultats sont les plus impressionnant (si si :))

  • Sans CategoryConfiguration
Category category = catalogCtx.GetCategory("Adventure Works Catalog", "Tents");
Console.WriteLine("Cid: " + category .Name+ " - " + category .DisplayName);
Côté SQL, nous constatons que 3 procédures stockées sont appelées :
exec dbo.ctlg_GetCategoryProperties
     @BCName=N'Adventure Works Catalog'
    ,@oid=3
    ,@catalogname=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@Columns_tmp=N'BaseCatalogName,CategoryName,OrigCategoryName,oid,DefinitionName,IsSearchable,cy_list_price,UseCategoryPricing,i_ClassType,CatalogName,ProductId,OrigProductId,VariantId,OrigVariantId,PrimaryParentCategory,DisplayName,Timestamp,OriginalPrice,LastModified,ParentOId'
    ,@fVirtualCatalog=0

declare @p13 int
set @p13=4
exec dbo.ctlg_GetProductsForCategory
     @CatalogName=N'Adventure Works Catalog'
    ,@language=N'en-US'
    ,@BCName=N'Adventure Works Catalog'
    ,@CategoryOid=3
    ,@ClassType=12
    ,@StartingRecord=1
    ,@NumRecords=500
    ,@OrderBy=N'[Rank]'
    ,@eJoinType=-1
    ,@TargetTableName=N''
    ,@SourceJoinKey=N''
    ,@TargetJoinKey=N''
    ,@RecordCount=@p13 output
    ,@PropertiesToReturn=N'*'
    ,@SortAscending=1
    ,@EnableInventory=1
    ,@InventoryServerName=NULL
    ,@InventoryDatabaseName=NULL
    ,@FilterOutOfStockProducts=0
    ,@FilterBackOrderableProducts=0
    ,@FilterPreOrderableProducts=0
    ,@UseThresholdAsFloor=1
    ,@TreatmissingAsOutOfStock=0
    ,@StockHandling=0
    ,@InventoryPropertiesToReturn=N'*'
    ,@fVirtualCatalog=0
select @p13

declare @p10 int
set @p10=0
exec dbo.ctlg_GetChildCategories
     @CatalogName=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@BCName=N'Adventure Works Catalog'
    ,@oid=3
    ,@StartingRec=1
    ,@NumRecords=500
    ,@PropertiesToReturn=N'*'
    ,@OrderBy=N'[Rank]'
    ,@SortAscending=1
    ,@RecordCount=@p10 output
    ,@fVirtualCatalog=0
select @p10
  • Avec un CategoryConfiguration: 
CategoryConfiguration catConf = new CategoryConfiguration();
catConf.InventoryOptions = new Microsoft.CommerceServer.Inventory.InventoryOptions();
catConf.InventoryOptions.FilterBackorderableSkus = false;
catConf.InventoryOptions.FilterOutOfStockSkus = false;
catConf.InventoryOptions.FilterPreorderableSkus = false;
catConf.LoadAncestorCategories = false;
catConf.LoadCanonicalCategories = false;
catConf.LoadParentCategories = false;
catConf.LoadRelatedCategories = false;
catConf.LoadRelatedProducts = false;
Category category = catalogCtx.GetCategory("Adventure Works Catalog", "Tents", "en-US", catConf);
Console.WriteLine("Cid: " + category .Name+ " - " + category .DisplayName);

Côté base de données, plus qu’un seul appel à une procédure stockée:

exec dbo.ctlg_GetCategoryProperties
     @BCName=N'Adventure Works Catalog'
    ,@oid=3
    ,@catalogname=N'Adventure Works Catalog'
    ,@Language=N'en-US'
    ,@Columns_tmp=N'BaseCatalogName,CategoryName,OrigCategoryName,oid,DefinitionName,IsSearchable,cy_list_price,UseCategoryPricing,i_ClassType,CatalogName,ProductId,OrigProductId,VariantId,OrigVariantId,PrimaryParentCategory,DisplayName,Timestamp,OriginalPrice,LastModified,ParentOId'
    ,@fVirtualCatalog=0

Grâce à la classe CategoryConfiguration correctement configurée, on a évité 2 exécutions de procédure stockée, mais vu côté statistique SQL c’est impressionnant! Jugé plutôt:

  • Sans CategoryConfiguration

Table 'Adventure Works Catalog_CatalogProducts'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogProducts'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__FirstLevelProducts__for_spid__59'. Scan count 0, logical reads 27, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogProducts'. Scan count 4, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogHierarchy'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'InventoryCatalogMap'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__SecondLevelProducts__for_spid__59'. Scan count 0, logical reads 18, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__FirstLevelProducts__for_spid__59'. Scan count 5, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogProducts'. Scan count 4, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__SecondLevelProducts__for_spid__59'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__ChildCategories__for_spid__59'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogProducts'. Scan count 4, logical reads 8, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogHierarchy'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CtlInv__ChildCategories__for_spid__59'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

  • Avec CategoryConfiguration

Table 'Adventure Works Catalog_CatalogProducts'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'CatalogDefinitionPropertyList'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_en-US_Catalog'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Adventure Works Catalog_CatalogProducts'. Scan count 0, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Quasiment 5 fois moins d’exécution SQL, pour un même résultat!!!!

Vous comprennez donc maintenant pourquoi il est très important de spécifier un CatalogItemConfiguration: il peut changer drastiquement les performances de votre site e-Commerce (et ceci même si vous utilisez le cache).

Pour ma part, si vous ne savez pas à l’avance quoi loader (c’est rarement le cas… j’espère ;)), je vous recommande plutôt d’opter pour du lazy loading, c’est à dire de configurer au minima (en gros je mets toutes les options à false) mon GetProduct ou GetCategory et laisse l’API charger les objets dont j’ai besoin.

Pour terminer, j’ai mis un petit graphique illustrant mes propos ou je me suis amusé à boucler 50 fois sur une récupération de Produit via un getProduct avec différentes options (pour info le cache était activé):

En bleu:

ctx.RefreshCache(); //refresh the catalogue cache system
for (int i = 0; i < 50; i++)
{
     chrono.Start();
     foreach (String pId in Constants.PRODUCTS)
     {
          Product p = ctx.GetProduct(Constants.CATALOGNAME, pId, "en-US");
     }
     chrono.Stop();
     long spent = chrono.ElapsedMilliseconds;
     chrono.Reset();
}

En rouge:

ctx.RefreshCache(); //refresh the catalogue cache system
ProductConfiguration pdtConf = new ProductConfiguration();
pdtConf.InventoryOptions = new Microsoft.CommerceServer.Inventory.InventoryOptions();
pdtConf.InventoryOptions.FilterBackorderableSkus = true;
pdtConf.InventoryOptions.FilterOutOfStockSkus = true;
pdtConf.InventoryOptions.FilterPreorderableSkus = true;
pdtConf.InventoryOptions.PropertiesToReturn = propertiesToReturn;

pdtConf.LoadAncestorCategories = true;
pdtConf.LoadCanonicalCategories = true;
pdtConf.LoadParentCategories = true;
pdtConf.LoadRelatedCategories = true;
pdtConf.LoadRelatedProducts = true;
pdtConf.LoadVariants = true;
pdtConf.ParentPropertiesToReturn = "*";
pdtConf.Variants.SearchOptions = new CatalogSearchOptions();
pdtConf.Variants.SearchOptions.PropertiesToReturn = "*";
for (int i = 0; i < 50; i++)
{
     chrono.Start();
     foreach (String pId in Constants.PRODUCTS)
     {
          Product p = ctx.GetProduct(Constants.CATALOGNAME, pId, "en-US", pdtConf);
     }
     chrono.Stop();
     long spent = chrono.ElapsedMilliseconds;
     chrono.Reset();
}

En vert:

ctx.RefreshCache(); //refresh the catalogue cache system
ProductConfiguration pdtConf = new ProductConfiguration();
pdtConf.InventoryOptions = new Microsoft.CommerceServer.Inventory.InventoryOptions();
pdtConf.InventoryOptions.FilterBackorderableSkus = false;
pdtConf.InventoryOptions.FilterOutOfStockSkus = false;
pdtConf.InventoryOptions.FilterPreorderableSkus = false;
pdtConf.InventoryOptions.PropertiesToReturn = propertiesToReturn;
pdtConf.LoadAncestorCategories = false;
pdtConf.LoadCanonicalCategories = false;
pdtConf.LoadParentCategories = false;
pdtConf.LoadRelatedCategories = false;
pdtConf.LoadRelatedProducts = false;
pdtConf.LoadVariants = false;
pdtConf.ParentPropertiesToReturn = "*";
pdtConf.Variants.SearchOptions = new CatalogSearchOptions();
pdtConf.Variants.SearchOptions.PropertiesToReturn = "*";

for (int i = 0; i < 50; i++)
{
     chrono.Start();
     foreach (String pId in Constants.PRODUCTS)
     {
          Product p = ctx.GetProduct(Constants.CATALOGNAME, pId, "en-US", pdtConf);
     }
     chrono.Stop();
     long spent = chrono.ElapsedMilliseconds;
     chrono.Reset();
}
image 

[Commerce Server] Trier les propriétés Commerce Server selon des ordres de tri différents

Pour faire suite à une discussion sur le forum Commerce Server: How could i sort by property1 ASC and property2 DESC in a catalog search?, je me suis aperçu qu’une fonctionnalité de base de Commerce Server était mal comprise.

En effet, il n’est pas rare sur une liste de produits (ou de catégorie) de vouloir trier le résultat sur plusieurs critères et dans des sens différents tout en gardant la fonctionnalité de paging du CatalogSearch.

Ravi proposait pour solutionner cela d’utiliser un dataview. Le problème est que le dataview ne peut trier que sur le résultat de la recherche! Quid donc si vous avez plusieurs pages? Sans compter les piètres performances d’un dataview.

Pour solutionner cela, il suffit simplement de mettre le nom de votre propriété entre crochet [] puis de coller à la suite l’ordre du tri ex:

CatalogSearch catalogSearch = catalogContext.GetCatalogSearch();
catalogSearch.CatalogNames = "MyCatalog";
catalogSearch.SearchOptions.ClassTypes = CatalogClassTypes.ProductFamilyClass;
catalogSearch.SearchOptions.PropertiesToReturn = "ProductId, cy_list_price";
catalogSearch.CategoriesClause = "CategoryName = 'CatId";
catalogSearch.SqlWhereClause = "Display = 'OK'";
catalogSearch.SearchOptions.SortProperty = "[ProductId]ASC, [cy_list_price]DESC";

Attention, il est important qu’il n’y ait pas d’espace entre le crochet fermant et l’ordre de tri.

Pour info, notre expert en développement Commerce Server, Anoir, avait déjà écrit un article à ce sujet: Recherche d’un produit avec plusieurs colonnes de tris différenciés sur le blog d’Altima.

October 24

[TechEd 2009] Rencontrez les experts Commerce Server

image

Je serais présent du 9 au 13 novembre 2009 à Berlin pour les tech-ed EMEA. Durant cette semaine, vous pourrez me rencontrer ainsi que l’équipe Commerce Server aux Technical Learning Center (TLC). Le TLC est l’endroit où vous pourrez rencontrer les experts de toutes les technologies Microsoft, mais aussi de pouvoir “jouer” et dérouler les démos produits.

Durant ces tech-ed, une session Commerce Server est au programme. Elle aura lieu le 10 novembre 2009 (pour plus d’information: Build Custom E-Commerce Solutions Faster and Easier with Microsoft Commerce Server 2009 (OFS06-IS)

En espérant vous y croiser nombreux :)

October 09

[Windows 2008] Configurez facilement votre serveur Windows 2008 Core

Je suis tombé sur un outil vraiment très très très pratique: Core Configuration for Windows 2008 - Smart-X

Pour l’utiliser, il vous faut copier le msi sur votre serveur core et l’executer

image image image

Un petit reboot et zou vous allez pouvoir en un clic (ou deux) configurer votre réseau, ajouter un AD etc., etc.

image image image  image

N’en déplaise aux puristes de la ligne de commande, mais c’est diablement pratique ;)

Seul petit bémol, cet outil n’est disponible qu’en mode non commercial, ie pas sur vos serveurs de production…

Bon amusement

August 15

[Outlook] Au secours, mon répertoire Inbox (boîte de réception) a disparu!

Suite à une panne électrique, mon portable s’est fermé brutalement et au reboot de la machine je me suis retrouvé avec un Outlook sans boite de réception.

Outlook 2010 - Inbox/Boite de réception cachée/disparue

J’ai instinctivement lancé le scanost croyant à une corruption de mes données.

ost scan

Première réaction: “Ouf, ma boite de réception est toujours présente ainsi que l’ensemble de mes sous répertoires” smile_regular

Deuxième réaction à la fin du scan qui s’est correctement déroulé: “Cool, marche plutôt pas mal cet outil de maintenance”smile_shades

Sauf que… au redémarrage de mon Outlook toujours pas de “Inbox / Boîte de réception”… Damned! smile_sad

J’ai donc lancé quelques requêtes sur bing afin de trouver un palliatif. Après les 5 premières pages qui me proposent une tartine d’outils payant qui me promettent la une, je suis tombé sur un projet codeplex: MFC Mapi

Ce projet nous permet tout simplement d’éditer et visualiser les informations MAPI utilisées par les API:

“MFCMAPI uses Microsoft's published APIs to provide access to MAPI stores through a graphical user interface. Its purpose is to facilitate investigation of Exchange and Outlook issues and to provide developers with a canonical sample for MAPI development.”

Après quelques recherche sur cet outil, je me suis rendu compte que mon répertoire “Inbox / Boîte de réception” avait l’attribut caché à vrai… Voici donc ci-dessous la méthode pour faire réapparaître notre boite de réception:

  • Ouvrir MFC Mapi
  • Dans le menu du haut, ouvrir “Session” puis sélectionné “Logon and display store table”
  • Sélectionnez votre profil Outlook
  • Double cliquez sur votre Mailbox
  • Sur la nouvelle fenêtre, étendez “Root –Mailbox” –> “IPM_SUBTREE” –> “Inbox”
  • Dans la partie droite, cliquez droit sur PR_ATTR_HIDDEN puis “Edit Property”
  • Décochez la case “Boolean”
  • Fermez les 2 fenêtre de MFC Mapi puis redémarrez Outlook

image image image image image image

Et  voilà ma “Inbox / Boîte de réception” de retour!

image 

Grand merci à l’équipe de ce projet codeplex.

Mots clés Technorati : ,,,
August 02

[Commerce Server] Le Data Warehouse & les analytics reports

Commerce Server offre dans sa version entreprise une suite analytics basée sur un Data Warehouse made by Commerce Server.

Dans ce post, je vais donc m’atteler à vous expliquer comment paramétrer tout cela et vous donner un aperçu des différents rapports.

Avant de démarrer votre installation, il vous faut avoir configurer et installer:

  • SQL Server Analysis Services (SSAS)
  • SQL Server Reporting Services (SSRS)
  • SQL Server Integration Services (SSIS)

Puis vérifié ces pré requis:

Nous allons donc maintenant “dépuper” le fichier de ressource du Data Warehouse (le fichier se trouve sur %commerce_server_root%\Pup Packages\DW.pup). Cette ressource va créer la base de données qui servira de référentiel pour notre cube.

Attention: si vous installez votre Data Warehouse dans une autre langue que l’anglais vous devez impérativement modifier le fichier %commerce_server_root%\Data\CommerceOlap.xmla à la ligne 9679, en remplaçant le texte “Everyone” par “Tout le monde” pour les francophones.

<Roles>
  <Role>
    <ID>All Users</ID>
    <Name>All Users</Name>
    <Members>
      <Member>
        <Name _loc="locData">EveryoneTout le monde</Name>
      </Member>
    </Members>
  </Role>
</Roles>

Commerce Server - Add Data Warehouse ressourece: Commerce Server Manager Commerce Server - Add Data Warehouse ressourece: Open DW.Pup Commerce Server - Add Data Warehouse ressourece: Select the Data Warehouse ressource Commerce Server - Add Data Warehouse ressourece: Use a new ressource Commerce Server - Add Data Warehouse ressourece: Confirm the parameter Commerce Server - Add Data Warehouse ressourece: rocking ;) Commerce Server - Add Data Warehouse ressourece: give a name to the ressource Commerce Server - Add Data Warehouse ressourece: still rocking Commerce Server - Add Data Warehouse ressourece: yeah Commerce Server - Add Data Warehouse ressourece: confirmation Commerce Server - Add Data Warehouse ressourece: Proof :)

Une fois la structure du Data Warehouse et les cubes mis en place, nous allons installer les rapports. Pour cela, ouvrez le Command Prompt de Commerce Server, et tapez “ReportInstaller.exe”:

Commerce Server - Import de reports: Open the shell Commerce Server - Import de reports: run the program

Sur la boite de dialogue, renseignez les champs et testez les en cliquant sur “Test Connection”. Si tout est ok, cliquez sur “Install Reports”

Commerce Server - Import de reports: set the report Commerce Server - Import de reports: report server Commerce Server - Import de reports: list of reports

Il est maintenant temps de configurer les différentes permissions pour le compte DTSImport pour nos bases de données:

  • MSDB
    • db_datareader, db_dtsadmin, db_dtsltduser , db_dtsoperator
  • <nomDuSiteCommerceServer>_DataWarehouse
    • db_datareader, db_datawriter, db_owner, db_ddladmin
  • <nomDuSiteCommerceServer>_marketing
    • db_datareader
  • <nomDuSiteCommerceServer>_marketing_lists
    • db_datareader
  • <nomDuSiteCommerceServer>_productcatalog
    • db_datareader
  • <nomDuSiteCommerceServer>_profiles
    • db_datareader, Profile_Schema_Reader
  • <nomDuSiteCommerceServer>_transactionconfig
    • db_datareader
  • <nomDuSiteCommerceServer>_transactions
    • db_datareader

Ajoutez ensuite cet utilisateur au groupe administrateur de votre serveur SSIS/SSAS.

Pour terminer l’installation, nous devons importer les DTS à la mode 2000. Pour cela, il nous faut lancer le Data Warehouse Import Wizard. Il n’est pas nécessaire de lancer l’import des données dans ce wizard car il peut-être fais ensuite.

Sauvegardez les donc dans la base de données SQL Server:

Commerce Server - Import dts wizard: Open Commerce Server - Import dts wizard Commerce Server - Import dts wizard: select a Commerce Site Commerce Server - Import dts wizard: Commerce Server - Import dts wizard Commerce Server - Import dts wizard Commerce Server - Import dts wizard Commerce Server - Import dts wizard

Pour ouvrir et exécuter le DTS, rendez-vous dans le serveur SQL: SSMS > Gestion > Existant > DTS

Commerce Server - Import the data Commerce Server - Import the data Commerce Server - Import the data

Dernière étape, la génération des cubes. Pour cela, il suffit d’ouvrir le SQL Server Business Intelligence Development Studio:

image image

Et traiter l’ensemble des cubes et dimensions:

image image image

That’s it’s that’s all! Vous pouvez maintenant contempler vos chefs d’œuvres :)

Commerce Server Report: Product Sales

Commerce Server Report: Customer Sales

Commerce Server Report: Order Events

image

Si vous souhaitez changer la zone horaire ou le jour de démarrage de la semaine dans vos rapports, il suffit de vous rendre dans les propriétés du DW des ressources globales:

Commerce Server Data Warehouse: Set the local time 

Pour aller un peu plus loin, je vous conseille la lecture de ces articles qui vous aideront à bien comprendre le pourquoi/comment de l’analytics made by Commerce Server:

Technorati Tags: - - -

August 01

[Commerce Server] Problème avec la planification de Commerce Server Staging

J’ai découvert un petit bug, lors de la mise en place de la planification d’un projet “Business Data” avec Commerce Server Staging (CSS). Ce bug se déclenche lors de la création par CSS de la tâche planifiée windows.

Pour planifier mon projet de staging, j’ai utilisé la mmc de CSS:

Commerce Server Staging - Planification d'un projet

Une fois cet écran validé, CSS va automatiquement créer (ou mettre à jour), une tâche planifiée windows:

Planificateur de tâches

Le problème est que sur cette création ou modification de la planification, les paramètres de bases de la tâches sont incorrect. si vous éditez la tâche planifiée, vous verrez que l’appel au programme est incorrect:

Propriété d'une tâche planifiée

L’appel au programme n’est pas entouré de guillemet (“). Ce qui fait que la tâche va essayer d’exécuter “c:\program” avec comme argument “Files (x86)\Microsoft Commerce Server 2007\Staging\Bin\CSS.exe”...

Pour remédier à cela, il vous suffit donc tout simplement de mettre les guillemets smile_regular, soit:

c:\program Files (x86)\Microsoft Commerce Server 2007\Staging\Bin\CSS.exe

Pour terminer et pour information, votre tâche va automatiquement s’exécuter sous le compte par défaut du CSS. si vous souhaitez le modifier, vous devez le faire dans la configuration de votre tâche planifiée. Dans les 2 cas, vérifiez que votre compte à les privilèges d’ouvrir une session en tant que tâche.

Statégie de sécurité locale 

Attention: Sur l’événement de création ou modification, la tâche est recréée complètement. Pensez donc à bien vérifier la configuration de votre tâche planifiée à chaque modification de la planification de votre projet.

Technorati Tags: - - -

July 24

[Windows x64] Erreur d’enregistrement d’un objet COM

Dans le cadre d’un projet e-Commerce, nous avons du déployer une API de paiement sur notre plateforme windows 2008 en 64bits. Lors de la mise en place de cette API, nous avons du faire face à cette erreur: System.Runtime.InteropServices.COMException (0x80040154)

image Après plusieurs investigations autour des objets COM, nous nous sommes aperçu que ce problème venait d’un paramètre de IIS sur notre pool d’application. En effet, vous pouvez dire à votre application pool d’activer ou non les applications en 32 bits. Or dans notre cas, notre API était en 32 bits et l’application pool configurée pour le refuser… CQFD smile_embaressed 

image

Voila notre application e-Commerce prête à accepter les paiements (c’est la moindre des choses vous me direz ;))

image

Mon petit doigt me dit que l’on ne doit pas être les seuls à avoir “galérer” sur ça…

Technorati Tags: - -

July 01

Je suis MVP Commerce Server :)

J’ai reçu cet après midi un email de la part de Microsoft m’annonçant ma nomination au programme MVP. C’est donc un grand plaisir pour moi et une belle récompense pour le travail effectué. A moi, donc de continuer à travailler pour pouvoir rédiger un autre post de ce type dans 1 an.

Je tiens aussi à remercier les membres de la team Commerce Server d’ ainsi que nos différents clients sans qui tout cela n’aurait pas été possible smile_regular

May 14

[Commerce Server / SharePoint] For my english speaking readers

I’m now publishing my blog post in English on the IT Creme website.

See you there! :)

image

[Commerce Server] Camaieu boutique – Prêt à porter féminin et vêtement mode en ligne

La team Commerce Server d’Altima est heureuse de vous annoncer la sortie du nouveau site eCommerce de Camaieu.

A vos cartes bleues smile_regular

clip_image002

Technorati Tags: - - - -

May 01

[SharePoint / Commerce Server 2009] Le template pack est sortie!

La team Commerce Server vient de mettre à disposition de la communauté un site template pour leur Commerce Site. Vous pouvez télécharger celui-ci à cette adresse: Microsoft Commerce Server 2009 Template Pack (Contemporary Site).

Installation

Que du banal dans cette étape: suivant, suivant, …. terminé!

Configuration Générale

image  image  image

image image  image

image

Configuration de la publicité

image  image  image  image  image  image 

image  image  image

image  image  image

image  image

Exécutez ce script pour associer les droits nécessaires à vos comptes services:

 

Configuration du canal

Ouvrez le site créer.

image  image  image 

image  image  image

Résultat

That’s it, that’s all, vous voilà avec un magnifique site de e-Commerce sous SharePoint

image

image

5-1-2009 4-00-58 AM

5-1-2009 4-20-01 AM

April 27

[SharePoint / Commerce Server 2009] Configuration / Installation d’un environnement de développement SharePoint / Commerce Server 2009

Dans cet article, je vais vous décrire la procédure à suivre pour installer et configurer votre environnement de développement Commerce Server2009 / SharePoint 2007.

Architecture Physique et logicielle

Pour commencer, j’ai mis en place une « mini » architecture afin de séparer mon active directory de mon server front end. J’ai donc deux boites avec :

  • Commerce Server 2007 Enterprise (Attention, la version développeur n’est pas supportée par Commerce Server 2009 pour le moment)
  • Commerce Server 2009
    • Utilisateurs

      Concernant l’installation du contrôleur de domaine, il ne sert à rien d’en faire un focus particulier car il y a suffisamment d’articles de qualité traitant de ce sujet. Pour ma part, j’aime travailler avec un AD sur une deuxième machine virtuelle sous Windows 2008 Core. Si vous voulez pousser un peu sur ce sujet, je vous conseille cette excellente ressource sur la configuration de la version core de Windows 2008 : Server Core Installation Option of Windows Server 2008 Step-By-Step Guide

      Compte utilisateur à créer pour SharePoint

      MOSSfarm (Exécute le service SharePoint - doit être administrateur de la ferme)

      MOSSRunTimeUser (Application Pool pour l’application SharePoint)

      MOSSsspPool (Application Pool pour le Shared Service Provider)

      MOSSsearchService (Exécute le service de recherche de MOSS)

      WSSsearchService (Exécute le service de recherche de WSS)

      WSScontentAccess (Récupère le contenu en dehors de la ferme)

      MOSSsspService (Execute le Shared Services Provider (SSP))

      MOSSprofile (Récupère les profils dans l’AD)

      MOSSsspMySite (Exécute le SSP My Site)

      Compte utilisateur à créer pour SQL Server

      SQLservice (Exécute les services SQL)

      Compte utilisateur à créer pour Commerce Server

      CatalogWebSvc (Application Pool pour le web service catalogue)

      CSDMSvc (Exécute le service Direct Mailer)

      CSHealthMonitorSvc (Execute le service Health Monitor)

      CSStageSvc (Execute le service de Staging)

      CSStagingUser (Utilisateur du staging)

      MarketingWebSvc (Application pool pour le web service marketing)

      OrdersWebSvc (Application pool pour le web service commande)

      ProfilesWebSvc (Application pool pour le web service profil)

      SQL Server 2008

      Pour commencer, vérifiez que tous les composants requis sont bien installés. Pour cela, il vous suffit de cliquer sur l’outil de vérification :

      image  image

      Une fois les prés requis validés, vous pouvez lancer l’installation :

      image  image  image  image  image  image

      Dans mon cas, je sélectionne toutes les options car je vais mettre en place les rapports de Commerce Server. Je ferais bientôt un article la dessus.

      image  image  image  image

      Pour tous les services liés à SQL, j’utilise le même compte service. Ce n’est bien sur pas un best practices mais en environnement de développement c’est acceptable smile_regular.

      image  image

      Attention, ici il est important d’utiliser la collation SQL_Latin1_General_CP1_CI_AS

      image  image  image  image  image  image  image  image

      Voila notre SQL Server 2008 installé. Il nous reste à permettre l’utilisation des « Named pipes » par SQL.

      image

      Pensez à appliquer ensuite le service pack 1 de SQL.

      SharePoint 2007

      Pour commencer, nous allons installer Microsot Office SharePoint Server 2007 avec le SP1 :

      image  image  image  image  image  image 

      Maintenant que SharePoint est installé, nous allons configurer l’administration. Pour cela, il nous suffit de suivre les étapes du wizard :

      image  image

      Sur une première installation, nous avons à créer la ferme. Il nous faut donc cliquer sur non, je souhaite créer une nouvelle ferme :

      image

      Le compte à utiliser ici est celui que j’ai appelé MOSSfarm. Ce compte est celui qui va gérer ma ferme SharePoint.

      image

      Le compte à utiliser ici est celui que j’ai appelé MOSSfarm. Ce compte est celui qui va gérer ma ferme SharePoint.

      image

      Pour l’authentification, il n’y a pas vraiment d’importance à choisir Kerberos plutôt que NTLM. Dans un environnement de dev, j’opte pour NTLM… par facilité.

      image  image  image  image

      Avant de configurer SharePoint, nous allons appliquer les patchs dans cet ordre :

      1. Infrastructure update pour WSS
      2. Infrastructure update pour MOSS
      3. February Cumulative update pour WSS
      4. February Cumulative update pour MOSS

      Ici rien de particulier à faire si ce n’est le fameux « Suivant, suivant, terminer »J. Ces updates vont mettre à jour certains composants/fonctionnalités de SharePoint et il est très important d’exécuter le SharePoint configuration wizard après chaque mise à jour. (Je ne mets pas ici de copie d’écran car il n’y a rien à faire de particulier à part attendre smile_regular).

      Configuration

      SharePoint

      Nous allons maintenant configurer les différents rôles SharePoint.

      Email

      Ouvrez l’administration centrale SharePoint et cliquez sur l’onglet « Operations » puis « Outgoing e-mail settings ».

      image

      Sur la page « Outgoing E-Mail settings », remplissez les champs et cliquez sur le bouton « OK ».

      image

      Pour information, le service SMTP n’existe plus sous Windows 2008. Vous pouvez utiliser l’utilitaire ArGoSoft Mail Server. C’est un freeware léger et simple à utiliser et configurer.

      Recherche

      Rendez-vous sur l’interface d’administration de SharePoint. Cliquez dans le menu ou l’onglet sur « Operations » puis sur « Services on server ».

      image

      Sur la liste des services, cliquez sur le lien « Start » à la ligne « Windows SharePoint Services Search » :

      image

      On renseigne les comptes utilisateurs dédiés à la recherche :

      image

      Sur la liste des services, cliquez sur le lien « Start » à la ligne « Office SharePoint Server Search » :

      image

      Renseignez ensuite l’adresse email de contact et le compte de service :

      image

      Shared Services

      Maintenant que notre recherche est configurée, nous allons installer le Shared Service. Pour cela, dans le menu de gauche de l’application web d’administration, cliquez sur « Shared Services Administration » :

      image

      Cliquez sur « New SSP » :

      image

      Dans l’écran suivant, nous allons devoir créer deux applications web pour héberger notre SSP ainsi que l’application « My Site ». Cliquez d’abord sur « Créer une nouvelle application web » :

      image

      Nous allons donc créer l’application web pour notre SSP. Remplissez les champs nécessaires.

      image

      Nous allons maintenant créer notre application web pour notre « My Site ». Pour cela, cliquez sur le lien » créer une nouvelle application web » :

      image

      Nous allons maintenant renseigner les paramètres pour l’application web « My Site ».

      image

      Maintenant que nos deux applications web sont configurées, il nous reste a renseignez les derniers champs dont le compte qui va exécuter le service SSP :

      image 

      Notre SSP est donc maintenant créer.

      image

      Commerce Server

      Pour installer Commerce Server 2009, vous devez auparavant installer... Commerce Server 2007 ! Commerce Server 2009 étant en fait une réécriture des API très orientés .Net 3.5 (Linq, Entities,.. ). La structure de la base étant quant à elle quasi identique. Pour avoir un léger aperçu des nouvelles orientations, je vous conseille de lire cet article : What's New in Commerce Server 2009?

      Sur l’installation et la configuration de Commerce Server, vous pouvez consulter le document officiel : Microsoft Commerce Server 2009 RC Installation and Configuration Guide

      Commerce Server 2007

      image  image  image  image  image  image

      L’installation étant terminée, nous allons passer à la configuration

      image  image  image  image  image  image  image

      Une fois Commerce Server 2007 installé et configuré, vous pouvez appliquer le SP2. Attention, si vous souhaitez utiliser les clients riches de CS, il vous faut les installer avant l’application du service pack.

      Commerce Server 2009

      Installation

      image  image  image  image   image  image  image  image image

      Mise en place d’un « SharePoint Commerce Site »

      image  image  image

      image  image  image

      Maintenant que Commerce Server 2009 est installé, il nous faut configurer les droits SQL Server pour notre compte service MOSSRunTimeUser:

      Configuration

      Nous devons maintenant configurer le site Commerce Site en lui spécifiant le nom du catalogue ainsi que le canal par défaut. Pour cela, ouvrez l’application web -> site actions -> view all site content. Cliquez ensuite sur la liste « Channel configuration », déroulez le menu de l’entrée « Channel » et cliquez sur « Edit item » et renseignez la valeur : "Default". Faite de même avec l’item « DefaultCatalog » avec comme valeur: "Adventure Works Catalog".

      Votre site est donc maintenant prêt à être utilisé smile_regular

      image

      April 22

      [Commerce Server] 2 webcasts autour des possibilités/capacités de Commerce Server

      Si vous avez un peu de temps en fin de journée ce jeudi 23 avril, je vous conseille de regarder 2 webcasts sur Commerce Server.

      La première webcast sera animée par Victor Castro de Commerce Generation: Green Up Your Business Online with Virtual Gift Cards for Customer Retention and Brand Loyalty by Commerce Generation. Cette webcast expliquera comment les cartes cadeaux peuvent aider à augmenter les ventes d’un site eCommerce. Vous verrez aussi comment l’implémenter dans une solution Commerce Server.

      La deuxième webcast sera animée par la société Cactus Commerce et tournera autour de la stratégie Multi Channel de Commerce Server 2009: Cross-Channel Retail and the Mobile Experience. Vous pourrez ainsi voir les possibilités qu’offre Commerce Server 2009 dans votre stratégie mCommerce.

      CommerceServer2009

      Tags: - - - - -

      March 26

      [Commerce Server 2009] Retour sur le MIX 2009

      Le MIX 2009 a été l’occasion d’officialisé la sortie de la dernière version de Commerce Server dans sa mouture 2009. A cette occasion Jean-Yves Martineau le fondateur de Cactus Commerce et Scott Cairney son vice président ont réalisé une session passionnante sur la nouvelle génération de leur plate-forme eCommerce (visible sur le site du MIX: Creating a "Next Generation" E-Commerce Experience).

      Je profite de ce post pour promouvoir les sites et ressources officielles (toutes en anglais, pas de version française pour le moment):

       

      Picture1

      Tags:

      March 03

      [Commerce Server] Commerce Server 2009

      Ca y est! Après quelques mois de gestation, la nouvelle version de Commerce Server est disponible à la vente. Adieu donc à Mojave et bienvenue à Commerce Server 2009. La nouvelle version s’accompagne même d’un site remis à jour tant au niveau du contenu que du design: le luxe smile_regular.

      Côté licence, pas de gros changement puisqu’il est toujours disponible en version Standard et Entreprise. Les fonctionnalités restant les mêmes. Le gros du travail a été fait dans les API de Commerce Server ainsi que le couplage avec SharePoint aux travers d’une série de web part. Pour le détail des fonctionnalités: Commerce Server 2009 Features.

      Microsoft Commerce Server 2009

      Tags:

      February 26

      [SharePoint] HiSoftware & Microsoft annonce la date de la release pour la solution d’accessibilité SharePoint

      Je parlais hier de la version 1.0 d’Hi-Sofware qui était loin d’être satisfaisante pour l’accessibilité sous SharePoint et voilà qu’après de longs mois d’attente la version 2 du Control Kit a été annoncé pour le lundi 9 mars!

      C’est une très bonne nouvelle pour tous les projets internet sous la technologie SharePoint, espérons que l’attente sera à la hauteur des espérances.

      Pour lire le communiqué officiel: HiSoftware & Microsoft Announce Release Dates for SharePoint Accessibility Solutions

      Enterprise SharePoint Governance Product Map

      Tags: - - -

      February 25

      [SharePoint] Un CMS sous MOSS accessible? Yes, we can!

      Durant les 6 derniers mois de l’année 2008, j’ai travaillé sur un projet internet de gestion de contenu sous MOSS 20O7 ECM pour l’équivalent de la sécurité sociale Irlandaise: Department of Social and Family Affair. La grande ambition et le principal challenge de ce projet était d’avoir le site complètement accessible pour les non/mal voyant ou les déficients visuels comme il est convenu de les appeler maintenant.

      En effet, pour ceux ayant déjà travaillé sur ce type de sujet, la grande problématique est essentiellement dû au moteur de rendu par défaut de SharePoint qui n’est absolument pas W3C/WCAG 1.0 AA compliant.

      La première partie de mon travail, à d’abord été d’analyser les différentes solutions du marché qui peuvent permettre de rendre notre site sous MOSS accessible. Autant le dire tout de suite, il n’y a pas grand chose à se mettre sous la dent:

      La solution d’HiSoftware à travers son Accessibility Kit (gratuit) ne répondait en rien à notre problème. Il ne proposait que quelques controls adapter mais rien de vraiment conséquent (ou alors il fallait payer très cher). Quant à SPWorks, la solution a été rejeté par le client qui n’était pas persuadé de la fiabilité de cet outil. A tord me semble t’il, car le framework Alternative Rendering Framework for SharePoint (ARF) semble très puissant et simple à utiliser (il est par exemple utilisé sur la solution CKS:Enhanced Blog Edition). A mon avis, cette solution souffre surtout de ne pas être adossé à un gros éditeur. D’ailleurs, je serais curieux de connaître les retours d’expérience de cette solution. Je n’ai pas trouvé beaucoup de ressources à ce sujet.

      De ce fait, je suis donc parti sur une solution customisée complète. Pour des raisons de confidentialités, je ne peux pas vous soumettre les éléments de ma feature mais je peux vous expliquer en gros ce que j’y ai mis:

      • Des controls adapter pour modifier les web part zones et autres web part container;
      • Master pages et page layouts complètement refaite sur la base du template fournis par notre web designer Open Interface (que je recommande pour leur expertise très poussée de l’accessibilité ainsi que leur gentillesse);
      • Réécriture de certaines web part ou controls SharePoint;
      • Pour l’éditeur de texte, j’ai utilisé le RAD control de Telerik;

      Résultat des efforts, un site XHTML:

      image

      Et une belle récompense du gouvernement Irlandais avec un “eGovernment Award for accessible website”:

      image  image image

      Tags: - - - - -

      [Commerce Server] Webcast sur la nouvelle version de Commerce Server 2009

      La société Cactus va diffuser ce jeudi 26 février un webcast sur les nouvelles fonctionnalités de Commerce Server 2009.

      En voici le résumé:

      The New Microsoft® Commerce Server 2009 Product Release

      In this technical session you will get an in depth look into the new Commerce Server 2009 product release, available in Q3/FY09, and the improved capabilities to compress time to market for e-commerce sites. Learn how to use Commerce Server's next-generation e-commerce API and web parts to rapidly develop high performance, rich multi-channel e-commerce user experiences. See improvements to the programming model, improved functionality for working with the desktop and devices, and integration of Commerce Server with Microsoft Office SharePoint® Server and ASP.NET.  We’ll also cover future product roadmap.

      Ce webcast est disponible pour les partenaires. Il vous suffit donc de vous connecter au portail partenaires de Microsoft ou de cliquer directement sur ce lien.

      Commerce Server Logo

      Tags: -

      I'm back!

      Après un long silence de quasiment 8 mois, me revoilà de retour sur mon blog.

      Un gros travail sur un site ECM sous SharePoint à vampiriser l’essentiel de mon temps et étant sous NDA, je ne pouvais communiquer les choses intéressentante que j’ai pu trouver avec vous. De plus, j’ai terminé ma petite escapade Irlandaise en revenant en France. Je suis maintenant chez ou plutôt de retour pour être précis smile_regular.

      J’en ai profité pour passer quelques certifications et me voila MCTS .NET Framework 2.0 Web Applications. Prochaine étape le . Pourquoi développement Web au lieu de mon cher SharePoint? Tout simplement car Altima souhaite obtenir la mention Gold Partner Custom dev qui correspond le plus à sa cible de client sur le eCommerce.

      A très vite pour de nouvelles aventures… sur ce blog ou sur le blog de la Team Commerce Server d’Altima.

      Altima

      Tags: - - -

       
      Loading...
      Photo 1 of 1

      Gael Duhamel

      Occupation
      Location
      Liste des blogs SharePoint
      Listes des blogs Commerce Server intéressants
      Loading...

      Xbox Live GamerCard

      LithuanianJoris
      Xbox Live GamerCard
      Rep:
      3/5 stars
      Score:
      115
      Zone:
      Family
      Rayman Raving RabbidsSpider-Man™: FoFFIFA 08Burnout ParadiseSHReK the THiRD

      Mes dernieres parties

      Rayman Raving Rabbids
      Achieve:
      0/16
      Score:
      0/1000
      Spider-Man™: FoF
      Achieve:
      0/12
      Score:
      0/1000
      FIFA 08
      Achieve:
      5/49
      Score:
      55/1000
      Burnout Paradise
      Achieve:
      0/60
      Score:
      0/1250
      SHReK the THiRD
      Achieve:
      0/22
      Score:
      0/1000

      LOSC Infos

      Loading...Loading...