vendredi 14 décembre 2012

How to activate custom action based on SharePoint Right

This javascript function is a helper to enable or disable custom action for SharePoint 2010 based on ContentTypeID, Permissions and number of selected element.

You can call this function in the CommandUIHandler EnabledScript attribute

Create a custom action for Ribbon :

  <CustomAction Id="Ribbon.AlertPerso"
              RegistrationType="ContentType"
                 RegistrationId="0x0101002D02DF72FAFB4EAB9446F92337C759AE01"
              Location="CommandUI.Ribbon" Title="Alert Perso">
    <CommandUIExtension>
      <CommandUIDefinitions>
        <CommandUIDefinition Location="Ribbon.Documents.Manage.Controls._children">
          <Button Id="Ribbon.CreerAlerter.Button"
                  LabelText="Créer une alerte personnalisée"
                  TemplateAlias="o2"
                  Image16by16="/_layouts/images/avertir16.png"
                  Image32by32="/_layouts/images/avertir32.png"
                  Sequence="08"
                  Command="AlerteCommandeDoc" />
        </CommandUIDefinition>
      </CommandUIDefinitions>
      <CommandUIHandlers>
        <CommandUIHandler Command="AlerteCommandeDoc"
                          CommandAction="javascript:window.location='votre page cible."
<!-- Replace the first attribute by you content type id, the second one with the SPPermission needed, and the thrid with the number of element that have to be selected (list of sharepoint permission kind : http://msdn.microsoft.com/en-us/library/ee556747(v=office.14).aspx) -->            EnabledScript="javascript:ActiveTypeContenuDroit('0x0101002D02DF72FAFB4EAB9446F92337C759AE01',SP.PermissionKind.,1);"/>
      </CommandUIHandlers>
    </CommandUIExtension>
  </CustomAction>
</Elements>




Ajout de la fonction dans core.js :

//Id of SP.ListItem
var ItemSelectedID;
//Content Type ID
var ItemSelectedContentType;
//SP.ListItem
var ItemSelectedItem;
//Right on the item.
var ItemSelectedRight;

//Check if the custom action is enabled

//ContenuID : Content Type Id that the item must match.
//Permission : Permissions needed, if null the custom action will be enabled.
function ActiveTypeContenuDroit(ContenuID, Permission, TypeAction) {
    var result = false;
    var selectedItems = SP.ListOperation.Selection.getSelectedItems();
    var countItems = CountDictionary(selectedItems);

    //when the action is available for all items.
    if (TypeAction == 0 && countItems == TypeAction) {
        result = true;
    } else {
        //when the action is available when only one item is selected.
        if (countItems == TypeAction && TypeAction == 1) {
            //when the objet is not defined
            if (this.ItemSelectedID == null) {
                var listGuid = SP.ListOperation.Selection.getSelectedList();
                ItemSelectedID = selectedItems[0]['id'];
                ListItemContentTypePermission(this.ItemSelectedID, listGuid);
            }
            //when the charged item is not previous item that was charged
            else if (this.ItemSelectedID != selectedItems[0]['id']) {
                this.ItemSelectedID = selectedItems[0]['id'];
                var listGuid = SP.ListOperation.Selection.getSelectedList();
                ListItemContentTypePermission(this.ItemSelectedID, listGuid);
            }
            //compare with the content type id parameter
            else if (this.ItemSelectedContentType != null) {
                if (ItemSelectedContentType.toString().indexOf(ContenuID.toString()) != -1) {
                    //Check rigth on the object.
                    if (Permission != null && ItemSelectedRight != null) {
                        if (ItemSelectedRight == null) {
                            alert("ItemSelectedRight null");
                        }
                        else {
                            //Check rigth on the object.
                            var permettre = ItemSelectedRight.has(Permission);
                            if (permettre) {
                                { result = true; }
                            }
                        }
                    }
                    else {
                        result = true;
                    }
                }
            }
        }
        else {
            //when more than one selected value is possible
            if (TypeAction > 1) {
                    // .. action when two item selected.
                alert("not defined ActiveTypeContenuDroit " + TypeAction);
                result = false;
            }
        }
    }
    return result;
}

//Initialize SP.ListItem and get the property  Title  ContentTypeId EffectiveBasePermissions
function ListItemContentTypePermission(ItemId, listGuid) {
    var clientContext = new SP.ClientContext();
    var web = clientContext.get_web();
    var lists = web.get_lists();
    var list = lists.getById(listGuid);
    ItemSelectedItem = list.getItemById(ItemId);
    clientContext.load(ItemSelectedItem, 'Title', 'ContentTypeId', 'EffectiveBasePermissions');
    clientContext.executeQueryAsync(onListItemContentTypePermission, failedListItemContentTypePermission);
}

//Get the needed property.
function onListItemContentTypePermission(sender, args) {
    ItemSelectedRight = ItemSelectedItem.get_effectiveBasePermissions();
    ItemSelectedContentType = ItemSelectedItem.get_item('ContentTypeId');
    RefreshCommandUI();
}

function failedListItemContentTypePermission(sender, args) {
    alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace());
}

SharePoint Client Side Object Model (CSOM)

Un petit coup de chapeau pour ce très bon post qui trait du CSOM dans SharePoint 2010, SharePoint 2007, SharePoint 2013.

Et notamment sur la récupération du SP.ClientContext< ainsi que le fonctionnement des executeQueryAsync

http://blog.aptillon.com/2012/09/25/the-sharepoint-javascript-object-modelresources-and-real-world-examples/

vendredi 23 novembre 2012

Soirée Intel et Microsft autour de Windows 8

Microsoft et Intel organisent une soirée au RedLigth ce jeudi 29 Novembre, cette soirée sera dédié aux ultrabooks ainsi qu'au développement d'application Windows 8 "AppTouch"

Des experts Microsoft et Intel seront là pour assurer le show et des stands de démo seront aussi présents pour essayer les dernières technos.

( cocktail / bière / pizza à volonté ) 

Programme de la soirée :

19h30 : Accueil des participants au Red Light & cocktails

19h45 :  Présentation de la Intel Developer Zone
Découvrez la gestion du tactile sous Windows 8 et les APIs natives/C#/HTML vous permettant d’en tirer partie L'accent sera mis sur le développement d'applications pour Ultrabook. 

20h :Guideline de User Interface sur Ultrabook
Formation technique au touch et aux outils de design d'interface pour Ultrabook. Guidelines sur le UI/UX sur Ultrabook.

20h45: Rencontre avec les Sensors
Découvrez toutes les API de Sensors qui sont mises à dispositon des développeurs.

21h30 : Drinks et Pizzas et Démos
Pendant toutes la soirée, vous pourrez profiter d'un espace démo et de coachs qui seront présents pour vous conseiller et répondre à toutes vos questions. 

Le récap de l'événement est ici : 
http://www.meetup.com/Intel-Technologies-Meetup/events/92504522/


Et l'inscription sur le site de intel :
http://applabintel.eventbrite.com/

mardi 20 novembre 2012

The HTTP service located is too busy / Le service HTTP est trop occupé



Pour provisionner un service trop occupé dans SharePoint 2010, exécuter les commande suivantes :

$sts = Get-SPServiceApplication | ?{$_ -match "nom du service"}  
$sts.Status
$sts.Provision()


Erreur sharepoint lié :
An exception occurred when trying to issue security token: Le service HTTP situé sur ../SecurityTokenServiceApplication/securitytoken.svc/actas est trop occupé.
Exception occured while connecting to WCF endpoint: System.ServiceModel.ServerTooBusyException


mardi 23 octobre 2012

Deactivate "I like" and "Notes" on ListItem for Sharepoint 2010 Ribbon / Désactiver les "J'aime ca" et "Notes" sur SharePoint 2010

Il suffit de désactiver la feature de ferme correspondante avec le code suivant :

Disable-SPFeature -id "756D8A58-4E24-4288-B981-65DC93F9C4E5" -force

Hide top navigation bar for Sharepoint 2010 / Cacher le ruban et la barre de navigation supérieur via code depuis la masterPage


Il ne faut pas oublier de passer les différents div en "runat='server'" pour que le code marche.

private void HideShowElement(bool value)
    {
        if(value) // Administrateur
    {    
    Control haut  = this.FindControl("msWwpselectlink");
//((HtmlControl)haut).Width="0px";
  ((HtmlControl)haut).Attributes.Add("style","display:block;");

Control hautLien  = this.FindControl("topNavgationBar");
  ((HtmlControl)hautLien).Attributes.Add("style","display:block;");


    Control crt = this.FindControl("PanelAdminLeft");
    if(crt!= null)
    {
    crt.Visible = true;
                //Supprime le css pour aligner à gauche.
                Control content = this.FindControl("MSO_ContentTable");
                if(content != null){
                ((HtmlControl)content).Attributes.Add("class","s4-ca s4-ca-dlgNoRibbon");}
    }
    }
    else  // Non administrateur
    {
    Control haut  = this.FindControl("msWwpselectlink");
// haut.Visible = false;
  ((HtmlControl)haut).Attributes.Add("style","display:none;");
  Control hautLien  = this.FindControl("topNavgationBar");
  ((HtmlControl)hautLien).Attributes.Add("style","display:none;");


    Control crt = this.FindControl("PanelAdminLeft");
    if(crt!= null)
    {
    crt.Visible = false;
                //Supprime le css pour aligner à gauche.
                Control content = this.FindControl("MSO_ContentTable");
                if(content != null){
                ((HtmlControl)content).Attributes.Remove("class");}
            }
    }
    }

Hide button in sharepoint 2010 Ribbon / Cacher les boutons du ruban SharePoint 2010


Feature à appliquer sur un type de contenu / template de liste par exemple.

Il suffit ensuite de spécifier la localisation du bouton.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <CustomAction Id="HideCustomActionDocumentSource"
                Location="CommandUI.Ribbon"
                RegistrationType="ContentType"
                RegistrationId="0x0101002D02DF72FAFB4EAB9446F92337C759AE01">
    <CommandUIExtension>
      <CommandUIDefinitions>
        <CommandUIDefinition Location="Ribbon.Library.ViewFormat.Standard" />
        <CommandUIDefinition Location="Ribbon.Library.ViewFormat.Datasheet" />

        <CommandUIDefinition Location="Ribbon.Library.Datasheet.NewRow" />
        <CommandUIDefinition Location="Ribbon.Library.Datasheet.ShowTaskPane" />
        <CommandUIDefinition Location="Ribbon.Library.Datasheet.ShowTotals" />
        <CommandUIDefinition Location="Ribbon.Library.Datasheet.RefreshData" />

        <CommandUIDefinition Location="Ribbon.Library.CustomViews.CreateView" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.ModifyView" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.CreateColumn" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.NavigateUp" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.CurrentView" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.DisplayView" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.PreviousPage" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.CurrentPage" />
        <CommandUIDefinition Location="Ribbon.Library.CustomViews.NextPage" />

        <CommandUIDefinition Location="Ribbon.Library.Share.AlertMe" />
        <CommandUIDefinition Location="Ribbon.Library.Share.ViewRSSFeed" />

        <CommandUIDefinition Location="Ribbon.Library.Actions.TakeOfflineToClient" />
        <CommandUIDefinition Location="Ribbon.Library.Actions.ConnectToClient" />
        <CommandUIDefinition Location="Ribbon.Library.Actions.ExportToSpreadsheet" />
        <CommandUIDefinition Location="Ribbon.Library.Actions.OpenWithExplorer" />
        <CommandUIDefinition Location="Ribbon.Library.Actions.AllMeetings" />

        <CommandUIDefinition Location="Ribbon.Library.CustomizeLibrary.AddButton" />
        <CommandUIDefinition Location="Ribbon.Library.CustomizeLibrary.EditList" />
        <CommandUIDefinition Location="Ribbon.Library.CustomizeLibrary.EditDefaultForms" />

        <CommandUIDefinition Location="Ribbon.Library.Settings.ManageWorkflows" />
        <CommandUIDefinition Location="Ribbon.Library.Settings.LibraryPermissions" />

        <CommandUIDefinition Location="Ribbon.Documents.New.NewFolder" />
        <CommandUIDefinition Location="Ribbon.ListItem.New.NewFolder" />
     
        <CommandUIDefinition Location="Ribbon.Documents.New.NewDocument" />
        <CommandUIDefinition Location="Ribbon.Documents.EditCheckout.CheckOut" />
        <CommandUIDefinition Location="Ribbon.Documents.EditCheckout.CheckIn" />
        <CommandUIDefinition Location="Ribbon.Documents.EditCheckout.DiscardCheckOut" />
 
        <CommandUIDefinition Location="Ribbon.Documents.Manage.ManagePermissions" />

        <CommandUIDefinition Location="Ribbon.Documents.Share.EmailItemLink" />
        <CommandUIDefinition Location="Ribbon.Documents.Share.AlertMe" />

        <CommandUIDefinition Location="Ribbon.Documents.Copies.SendTo" />
        <CommandUIDefinition Location="Ribbon.Documents.Copies.ManageCopies" />
        <CommandUIDefinition Location="Ribbon.Documents.Copies.GoToSourceItem" />
   
        <CommandUIDefinition Location="Ribbon.Documents.Workflow.ViewWorkflows" />
        <CommandUIDefinition Location="Ribbon.Documents.Workflow.Publish" />
        <CommandUIDefinition Location="Ribbon.Documents.Workflow.Unpublish" />
        <CommandUIDefinition Location="Ribbon.Documents.Workflow.Moderate" />
        <CommandUIDefinition Location="Ribbon.Documents.Workflow.CancelApproval" />
   
        <CommandUIDefinition Location="Ribbon.Documents.FormActions.RepairItems" />
        <CommandUIDefinition Location="Ribbon.Documents.FormActions.RepairAllItems" />
        <CommandUIDefinition Location="Ribbon.Documents.FormActions.MergeDocuments" />
      </CommandUIDefinitions>
    </CommandUIExtension>
  </CustomAction>
</Elements>


Liste complète
http://msdn.microsoft.com/en-us/library/ee537543.aspx



mercredi 17 octobre 2012

Pré-commande tablette Surface

Microsoft vient d'ouvrir la pré-commande pour la tablette surface, le stock serait de 3/4 millions pour le lancement.

Voici un récapitulatif des tarifs proposés :






Soit :
- Version 64GB avec la Touch Cover : 694€
- Version 32GB avec la Touch Cover : 589€
- Version 32GB sans la Touch Cover : 489€


http://www.microsoftstore.com/store/mseea/fr_FR/pdp/productID.257922600

vendredi 28 septembre 2012

Les teasers Windows Phone 8

HTCS 8S et HTCS 8X
<iframe width="560" height="315" src="http://www.youtube.com/embed/xapZwpLwUHI?list=PLGDJwi4NxPcjXfIapzhGFyA11Kopnx-VU&amp;hl=fr_FR" frameborder="0" allowfullscreen></iframe>

Nokia Lumia 820
<iframe width="560" height="315" src="http://www.youtube.com/embed/eBrfVp_olps" frameborder="0" allowfullscreen></iframe>


Nokia Lumia 920
<iframe width="560" height="315" src="http://www.youtube.com/embed/aYisb9p4ncA" frameborder="0" allowfullscreen></iframe>
http://youtu.be/aYisb9p4ncA

Samsung ATIV S
<iframe width="560" height="315" src="http://www.youtube.com/embed/PnabGFVlyqI" frameborder="0" allowfullscreen></iframe>

Un core Duo 1,8GHz pour la tablette Windows 8 d'entrée de gamme

C'est officialisé par Intel, le processeur équipant les premières version Windows RT sera un SoC (système on a chip), au programme :
-un core Duo 1,8Ghz
-une puce graphique PowerVR SGX permettant notamment l'affichage de vidéo full HD 1080p.

Tout ceci laisse présager un prix d'entrée avoisinant les 600$.

jeudi 20 septembre 2012

Welcome to the cloud

L'offre de Microsoft tient toujours concernant les 3 mois gratuits d'accès au Cloud (avec bien sûre quelques fonctionnalités bridés)

Mais cela suffit à vous faire une première idée de la puissance offerte par ce nouveau service.

Après vous être inscrit sur le site suivant https://www.windowsazure.com/fr-fr/pricing/free-trial/

Vous aurez accès à la magnifique page de gestion de votre Cloud :




Et la possibilité de pouvoir créer des sites par milliers (une dizaine pour la version d'essai en fait !) tel que celui-ci :

http://larry-angama.azurewebsites.net/



Ou des bases de données pour vos applications ainsi que des services mobiles pour les développement Windows Phone 7/8 et Windows 8 bien entendu !!

Prochainement un tuto accès développement sur les premières applications Windows 8 hébergé sur le Cloud  !



Pour plus d'info sur la souscription à l'essai gratuit :
http://blogs.msdn.com/b/windowsazurefrance/archive/2012/08/29/tuto-comment-souscrire-gratuitement-224-windows-azure.aspx

vendredi 14 septembre 2012

Comment cacher les actions dans un site SharePoint grâce au Javascript(Session, Site, Liste, Bibliothèques de documents)


L'utilisation du JavaScript est un moyen efficace et peut coûteux en développement pour cacher les différentes actions qui peuvent apparaître sur une page SharePoint.

 


Il est en effet possible grâce à une simple fonction Javascript insérable dans la masterpage, de cacher les différentes actions :
  • Mes paramètres
  • Se connecter en tant qu'utilisateur différent
  • Demander l'accès
  • Se déconnecter
  • Personnaliser cette page
  • Créer
  • Modifier la page
  • Paramètres du site
  • Nouvel élément
  • M'avertir
  • Créer une colonne
  • Créer un affichage
  • Paramètres - Liste
  • Tous les éléments
  • Modifier cet affichage
  • Créer un affichage
  • Télécharger un document
  • Télécharger plusieurs documents  
  • Modifier dans la feuille de données
  • Ouvrir avec l'Explorateur Windows
  • Exporter vers une feuille de calcul
  • Afficher le flux RSS

La fonction javascript est la suivante :

<script type="text/javascript" language="javascript">
function cacherActionPortail()
{
var menuItem;
var menuItemName;
var menuItemIndex=-1;
var menuItemNames=new Array("Mes paramètres",
 "Se connecter en tant qu'utilisateur différent",
 "Demander l'accès",'se déconnecter','Personnaliser cette page','Créer'
 ,"Modifier la page","Paramètres du site","Nouvel élément",
 "M'avertir","Créer une colonne","Créer un affichage",
 "Paramètres - Liste","Tous les éléments",
 "Modifier cet affichage","Créer un affichage",
 "Télécharger un document","Télécharger plusieurs documents","Modifier dans la feuille de données",
 "Ouvrir avec l'Explorateur Windows","undefined","Exporter vers une feuille de calcul","Afficher le flux RSS");

var menuItems = new Array("PersonalInformation",
 "LoginAsDifferentUser","RequestAccess",
 "Logout","PersonalizePage",
 "MenuItem_Create","MenuItem_EditPage",
 "MenuItem_Settings","New0","SubsribeButton",
 "AddColumn","AddView",
 "ListSettings","DefaultView","ModifyView",
 "CreateView","Upload",
 "MultipleUpload","EditInGridButton","OpenInExplorer","OfflineButton",
          "ExportToSpreadsheet","ViewRSS");

var allMenuItems = document.getElementsByTagName('ie:menuitem');

for(var i = 0; i < cacherActionPortail .arguments.length; i++ )
{
menuItemName= cacherActionPortail .arguments[i].toLowerCase();
for (j=0; j < menuItemNames.length; j++)
{
if(menuItemNames[j].toLowerCase()==menuItemName)
{
menuItemIndex = j;
break;
}
}

menuItem=menuItems[menuItemIndex];

for (var l = 0; l < allMenuItems.length; l++)
{
if(menuItemName.indexOf(":")!=-1)
{
menuItemName = menuItemName.split(":")[1];
}
if (allMenuItems[l].id.indexOf(menuItem)!=-1
       && allMenuItems[l].text.toLowerCase() == menuItemName)
{
// For FireFox Compatibility
var parentNodeOfMenuItem = allMenuItems[l].parentNode;
parentNodeOfMenuItem.removeChild(allMenuItems[l]);
break;
}
}
}
}
</script>

Ainsi que l'appel de la fonction depuis le 'Page_Load' de la master page :

protected void Page_Load(object sender, EventArgs e)
{       

   Page.ClientScript.RegisterStartupScript(this.GetType(), "click","cacherActionPortail (\"Afficher le flux RSS\",\"Modifier dans la feuille de données\",\"Exporter vers une feuille de calcul\");", true);
}




jeudi 13 septembre 2012

Le cloud monte et montera encore.

Selon les analystes le chiffre d'affaire généré par les solutions Cloud telles que les applications ou le stockage atteindra 100 milliards de dollars d'ici à 2016 (IDC).

Les dépenses Cloud de cette année sont estimées à 40 milliards de dollars, ce marché devrait donc selon les analystes progresser de 150% d'ici à 4 ans.

mercredi 12 septembre 2012

Le windows 8 store va bon train

Plus proche de ses développeurs et partenaires qu'aucun autre Microsoft dévoile quelques chiffres sur l'état du Windows Store.

En efffet ce ne sont pas moins de 1000 applications qui sont déjà ' Windows 8 Ready' pour le lancement prévu le 26 Octobre.

Le marketplace windows est maintenant ouvert aux développeurs de 120 pays, toujours dans le but d'inciter et de promouvoir cette nouvelle plateforme de ventes et de partages.

L’éditeur annonce ainsi que les membres de son programme MSDN disposeront gratuitement pendant un an d’un compte développeur pour Windows Store. Même chose pour les membres des programmes DreamSpark et BizSpark.

mardi 11 septembre 2012

Supprimer les actions sur les documents Excel 'Afficher dans un navigateur web'' et 'Instantané dans Excel'

Si ces deux actions ne vous sont pas utiles et gêne la compréhension des utilisateurs vous pouvez les désactiver avec la commande suivante :

 

stsadm.exe -o deactivatefeature -force -id E4E6A041-BC5B-45cb-BEAB-885A27079F74

Cette fonctionnalités est installée au niveau de votre SPFarm.

Le fichier feature.xml se trouve à l'adresse suivante de votre serveur frontal Sharepoint 2007 :

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\FEATURES\ExcelServer



SPWeb.Groups et SPWeb.SiteGroups


Il existe une différence entre ces deux collections de groupes Sharepoint qui est de taille.

En effet SPWeb.Groups ne retourne que les groupes ayant au moins un niveau d'autorisation associé tandis que SPWeb.SiteGroups renvoi tout les groupes de votre SPWeb.

Une différence de taille si vous utilisez un groupe uniquement à des fins hiérarchique.

Préférez donc utiliser SPWeb.SiteGroups plutôt que SPWeb.Groups.

Et voici une exemple de fonction permettant de récupérer les adresses email de tout les utilisateurs d'un groupe:


public string GetEmailForUserInGroupe(string groupName)
{
     string userMail = string.Empty;
     SPSecurity.RunWithElevatedPrivileges(delegate()
     {
            using (SPSite site = SPContext.Current.Site)
            {
                site.AllowUnsafeUpdates = true;
                using (SPWeb web = site.OpenWeb())
                {
                    web.AllowUnsafeUpdates = true;
                    SPGroupCollection groupColl = web.SiteGroups;
                    int count = groupColl.Count;
                    for (int i = 0; i < count && string.IsNullOrEmpty(userMail); i++)
                    {
                        if (groupColl[i].Name.Equals(groupName))
                        {
                            SPUserCollection userColl = groupColl[i].Users;
                            foreach (SPUser us in userColl)
                            {
                                if (!string.IsNullOrEmpty(us.Email))
                                {
                                    userMail = string.Concat(userMail, us.Email, ';');
                                }
                            }
                        }
                    }
                    web.AllowUnsafeUpdates = false;
                }
                site.AllowUnsafeUpdates = false;
            }
        });
        return userMail;
}    



mardi 7 août 2012

Lancement de l'office store 2013

http://www.zdnet.fr/39774970/

Microsoft fait encore parler de son marketplace à destination des applications office mais aussi sharepoint.

Nul doute que ce nouveau media de publication permettra aux entreprises de se faire connaître par le biais des extensions/add-on qu'elles proposeront via le marketplace office 2013.

vendredi 29 juin 2012

Nokia Lumia 900 la bête de course !

A tout ceux qui doute encore Windows Phone 7 et du peu de choix disponible, voici LE test proposé par Business Mobile concernant le Nokia Lumia 900.


Dernier née de la gamme Lumia celui-ci propose toujours plus de puissance, il pousse encore plus loin l'ergonomie et fait de ce téléphone l'un des plus intuitif du marché.


La tablette, le marché d'aujourd'hui et de demain ?

Avec un marché qui s’agrandit un peu plus chaque jour, les tablettes vont devenir une composante majeur dans le marché de l'informatique de demain.

Ainsi qui de l'Ipad, Surface ou Androïd aura la part du Lion ?

D'après une enquête réalisé par Online PublisherAssociation  un peu moins de la moitié des utilisateurs d'internet Américain auront adoptés la tablette comme support d'ici au premier trimestre 2013.

Avec l'arrivée de Windows 8 et de la tablette Surface, un nouveau marché d'application verra le jour et il faudra proposer aux utilisateurs toujours plus d'outil et de contenu multimédia.


jeudi 28 juin 2012

Les ingénieurs informatique et l'emploi

Voici un article posté par le site ZDNet concernant l'emploi des ingénieurs en système d'information et notamment la comparaison de salaire par rapport aux autres ingénieurs ainsi que le taux de chomage (3,5% cette année)

Pareillement cette article fait part de la baisse du chômage chez les informaticiens qui tend donc à stagner à 25,400 personnes

mercredi 27 juin 2012

Windows 8 Release Preview


La sortie du nouvelle OS de Microsoft Windows 8 se rapproche un peu plus chaque jour  (3ème trimestre 2012), et avec elle voici la sortie de la version Release Preview permettant à tout un chacun de tester les nouvelles fonctionnalités de cette nouvelle mouture.

Je vous invite donc si ce n'est déjà fait à visualiser ce teaser made in Microsoft, qui mets Windows 8 au coeur de l'univers tablette avec Surface, Laptop et Desktop.

La partie download se passe par ici. 

En terme de développement logiciel ce sont les langages :
- Javascript
- C# et VB
- C++

Qui vous ouvriront les portes du MarketPlace Microsoft, le tout développé grâce à Visual Studio 2012

Visuel Windows 8

lundi 25 juin 2012

Installation de l'icone Pdf et indexation des contenu PDF

Tutoriel pour l'installation de iFilter ainsi que l'ajout de l'icone PDF:
  1. Télécharger l'icone depuis le site : http://www.adobe.com/misc/linking.html#pdficon
  2. Ajouter les icones au répertoire : C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES
  3. Modifier le fichier DOCICON.XML situé dans le dossier C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\
  4. Ajouter l'entrée suivante au fichier : <Mapping Key="pdf" Value="pdficon_small.png"/>
  5. Effectuer un redémarrage du serveur web : IISRESET
Intrégration des fichiers PDF à la recherche:
Télécharger et installer:

Des nouvelles de la tablette sur Windows 8

Ce n'est pas une surprise pour les personnes qui ont suivi les différentes phases de béta du nouvelle OS Windows 8.

Les premières images et les premiers modèles de tablette Windows 8 commencent à se faire connaître, c'est ainsi que Microsoft à présenté ce lundi 18 Juin lors d'une conférence sa première tablette ainsi qu'une vidéo.



Plus loin avec la tablette Windows 8, article du Figaro
La guerre est déclaré entre Microsoft et Apple, article du Figaro

Création Business Connectivity Service (BCS) pour SharePoint Server 2010


Présentation

Le but de ce développement est de permettre d’avoir une vue synthétique sur les utilisateurs des plannings fournit par Microsoft Project Server via SharePoint.

En effet, les données sont stockés dans la base de données SQL Server et donc uniquement accessible via requête SQL.

Ce développement va permettre d’afficher les informations relatives à la saisie des plannings par les utilisateurs via une liste SharePoint.

Plusieurs étapes sont nécessaires à cette réalisation :
  1.  Créer une vue des données à partir de la BDD SQL Server et nécessaire à la liste SharePoint
  2. Créer une entrée dans la Secure Store Service, qui va permettre au service SharePoint de stocker les informations relatives à la connexion avec le serveur de BDD.
  3. Créer un Type de contenu externe via un BCS (Business Connectivity Services) permettant de récupérer les données externes à la base de contenu SharePoint
  4. Attribuer les droits utilisateurs sur le type de contenu
  5. Créer une liste externe qui permettra d’afficher le type de contenu externe crée précédemment.
Rendu final de la liste externe cree via bcs sharepoint 2010
Rendu final de la liste externe cree via bcs sharepoint 2010

Création de la vue

Avec un utilisateur ayant suffisamment de droit sur la base donnée MSProject, se connecter et exécuter le script :


CREATE VIEW [dbo].[V_UTILISATEUR_WITH_DAY_LAST_PUBLISHED_TIMESHEET] AS
   (SELECT res.res_uid as id_utilisateur,
       res.res_name as nom_utilisateur,
       res.WRES_ACCOUNT as account_utilisateur,
       res.wres_email as email_utilisateur,
       max(act.MOD_DATE) as date_last_published,
       DATEDIFF(day,max(act.MOD_DATE),SYSDATETIME()) as nombre_jour_derniere_saisie
       FROM
    [ProjectServer_Published_project_portfolio].[dbo].[MSP_RESOURCES] res,
      [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEETS ts,
      [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEET_LINES line,
      [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEET_ACTUALS act
      WHERE res.WRES_ACCOUNT IS NOT NULL
      AND res.RES_UID = ts.RES_UID AND ts.TS_UID = line.TS_UID
      AND line.TS_LINE_UID = act.TS_LINE_UID
      group by res.res_uid, res.RES_NAME, res.wres_email, res.wres_account)
      UNION
      (
      SELECT res.res_uid as id_utilisateur,
       res.res_name as nom_utilisateur,
       res.WRES_ACCOUNT as account_utilisateur,
       res.wres_email as email_utilisateur,
       null as date_last_published,
       null as nombre_jour_derniere_saisie
       FROM [ProjectServer_Published_project_portfolio].[dbo].[MSP_RESOURCES] res
       WHERE res.WRES_ACCOUNT IS NOT NULL AND
       res.res_uid not in
         (SELECT distinct res.res_uid  FROM
                  [ProjectServer_Published_project_portfolio].[dbo].[MSP_RESOURCES] res,
                  [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEETS ts,
                  [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEET_LINES line,
                  [ProjectServer_Published_project_portfolio].[dbo].MSP_TIMESHEET_ACTUALS act
                  WHERE res.WRES_ACCOUNT IS NOT NULL
                  AND res.RES_UID = ts.RES_UID
                  AND ts.TS_UID = line.TS_UID
                  AND line.TS_LINE_UID = act.TS_LINE_UID) );


Une fois la requête exécutée la vue nouvellement crée apparaitra dans la liste des vues disponible après rafraichissement de la liste.

Création de la Vue Sql Server 2008 sur base de donnees Microsoft Server Project
Création de la Vue Sql Server 2008 sur base de donnees Microsoft Server Project

Création du secure store service

Se rendre dans la console d’administration SharePoint 
 
Puis dans  Application Management - > Manage Service Applications

Et sélectionner le service « Secure Store Service »

Secure store service Sharepoint 2010
Secure store service Sharepoint 2010
Il faut ensuite créer une nouvelle entrée et fournir les informations demandés en respectant bien le « Target Application Type » à « Group ».

Configuration du Secure Store Application pour Sharepoint 2010
Configuration du Secure Store Application pour Sharepoint 2010
 
L’authentification avec SQL Server se fait avec des identifiants Windows il n’est donc pas la peine de changer les champs dans l’écran suivant.

Login credentials pour authentification windows
Login credentials pour authentification windows
 
L’écran suivant permet de spécifier qui pourra administrer et qui sera membres de cette nouvelle entrée.

Attribution des droits sur le secure store service sharepoint 2010
Attribution des droits sur le secure store service sharepoint 2010
 
Ceci fait il ne reste plus qu’à fournir les identifiant de connexion via l’icône de la page principale.

Identifiants de connexion à sql server 2008
Identifiants de connexion à sql server 2008
 
Un temps d’attente pour que le Secure Store Application est nécessaire pour que celui-ci soit pris en compte par le serveur SQL Server (environ 1h, peut dépendre de votre configuration réseau/serveur).

Création du BCS

Grâce à SharePoint Designer, ouvrir le site concerné par la création du type de contenu externe.
Création via Sharepoint 2010 designer du type de contenu externe (external content type)
Création via Sharepoint 2010 designer du type de contenu externe
Et créer le nouveau type de contenu externe : 

Creation of external content types with sharepoint designer 2010
Creation of external content types with sharepoint designer 2010
 
Saisir le nom du nouveau type de contenu et cliquez sur « External System »:
Configuration external content type
 Configuration external content type
 
Ajoutez une connexion, et choisir « SQL Server », puis saisir le nom du serveur, le nom de la base de données, et le nom de l’ID de la Secure Store Application crée précédemment.
database server database name secure store application id
Provide the different informations for Secure Store Application configuration
 
Il suffit ensuite de sélectionner la vue dans l’explorateur d’objet de la base de données et d’ajouter les opérations de lecture d’item et de liste.

creation des operations ne read item operation new read list operation
Création des opérations ,new read item operation, new read list operation
Input parameters configuration new read item operation bcs sharepoint 2010
 Input parameters configuration new read item operation bcs sharepoint 2010

Création de la liste externe

Une fois le type de contenu externe il ne reste plus qu’a créé la liste externe.
creation liste externe external list BDC model
Création de la liste externe à partir du type de contenu externe

Attribution des droits sur le type de contenu

Un réglage au niveau des permissions sur le type de contenu est nécessaire pour permettre aux utilisateurs de consulter la liste.
Se rendre dans la console d’administration SharePoint
Et se rendre dans  Application Management - > Manage Service Applications
Business data connectivity service
Business data connectivity service
 
Sélectionnez le type de contenu nouvellement crée puis cliquez sur le bouton « Set Object Permissions »
Set object permissions on BDC business data connectivity metadata store
Set object permissions on BDC business data connectivity metadata store

Rendu de la liste externe

La liste externe ainsi crée est disponible sur le site et propose la même interface de gestion au niveau droits, vues et paramétrage qu’une liste SharePoint.
Rendu final de la liste externe cree via bcs sharepoint 2010
Rendu final de la liste externe cree via bcs sharepoint 2010


Plus loin avec les Business Connectivity Service (BCS) :  What's New: Business Connectivity Services (BCS) in SharePoint Server 2010
Plus loin avec les type de contenu externe (external content type) : What Are External Content Types?
Plus loin avec Business Data Connectivity (BDC) : Service BDC (Business Data Connectivity)
Plus loin avec le Secure Store Service Application : Configuring the Secure Store Service 
Téléchargement : Microsoft SharePoint Designer 2010