Forum Aux Questions : solution Outlook déclarative
Dernière modification : vendredi 16 avril 2010
S’applique à : SharePoint Server 2010
Dans cet article
J’ai un scénario en lecture seule pour ma solution déclarative et les opérations de création, de mise à jour et de suppression n’ont pas beaucoup de sens. Toutefois, le type de contenu externe prend bien en charge ces opérations. Puis-je les supprimer du modèle BDC ?
Comment actualiser le cache dans une action de code ?
Quel est le format d’icône acceptable aux divers emplacements ? Quels sont les formats de fichiers acceptables et les tailles attendues ?
Comment obtenir le chargement d’un affichage personnalisé uniquement pour mon type de tâche ? L’affichage par défaut semble se réinitialiser automatiquement.
Puis-je remplacer complètement le formulaire Outlook par défaut par un formulaire InfoPath ?
Puis-je associer du code à mon Ruban dans une solution Outlook déclarative ?
Puis-je mettre à jour l’éditeur de ma solution ?
Dans une solution Outlook déclarative, comment une partie de données externes personnalisée d’une disposition peut-elle communiquer avec d’autres parties de la même disposition ?
Cette rubrique fournit des réponses à certaines questions du Forum Aux Questions sur les solutions Outlook déclaratives intermédiaires.
J’ai un scénario en lecture seule pour ma solution déclarative et les opérations de création, de mise à jour et de suppression n’ont pas beaucoup de sens. Toutefois, le type de contenu externe prend bien en charge ces opérations. Puis-je les supprimer du modèle BDC ?
Oui, vous pouvez les supprimer du modèle BDC. En outre, vous pouvez rendre le dossier Microsoft Outlook 2010 accessible en lecture seule pour une meilleure expérience utilisateur. Voici un exemple de fichier OIR.config qui montre comment rendre un dossier accessible en lecture seule.
<OutlookFolder StoreType="Solution" Name="GetBug" FolderDisplayName="Bugs Under PR" NativeType="FolderTasks" SubscriptionName="816979bb-32c7-489b-861a-3f4b61ec2c9b" FolderName="816979bb-32c7-489b-861a-3f4b61ec2c9b" CanCreate="false" CanUpdate=" false " CanDelete="false">
Comment actualiser le cache dans une action de code ?
Pour plus d’informations sur le déclenchement d’une actualisation du cache en fonction d’un certain abonnement, voir l’exemple de code suivant : Extrait de code : demande par programme d’actualisation du cache sur le client.
Quel est le format d’icône acceptable aux divers emplacements ? Quels sont les formats de fichiers acceptables et les tailles attendues ?
Les exigences relatives aux formats de fichiers et aux tailles attendues des icônes sont dictées par le schéma d’extensibilité du Ruban Outlook.
Icône de dossier : peut être au format de fichier .jpg, .bmp, .ico ou .png. Doit avoir une taille de 16x16 pixels.
Icône d’élément : ne peut être qu’au format de fichier .ico, dans n’importe quelle taille.
Bouton de Ruban : peut être au format de fichier .png, .jpg, .bmp ou .ico. Peut avoir n’importe quelle taille.
Comment obtenir le chargement d’un affichage personnalisé uniquement pour mon type de tâche ? L’affichage par défaut semble se réinitialiser automatiquement.
Spécifiez le nom de votre affichage personnalisé dans le fichier OIR.config. L’exemple suivant montre comment procéder.
<OutlookFolder Name="ContosoCustomers" FolderDisplayName="Contoso Customers" ……….>
<Views<FolderViewDefinition Name="ContosoCustomerViewName" ViewName="ContosoCustomerView" ViewType="TableView" IsDefault="true" ViewFileName="ContosoCustomerView.ovd" />
</Views>
Puis-je remplacer complètement le formulaire Outlook par défaut par un formulaire InfoPath ?
Oui, vous pouvez définir DeclarativeFormRegion + Disposition + Action pour utiliser une disposition particulière avec un formulaire Microsoft InfoPath 2010 ou une partie de données externes afin de remplacer le formulaire Outlook par défaut.
Remplacement du formulaire Outlook par défaut par un formulaire InfoPath
Définissez DeclarativeFormRegion.
<FormRegions i:type="mx:DeclarativeFormRegions" > <mx:DeclarativeFormRegion Type="Replacement" InternalName="CustomerReplaceFormRegion" ShowInspectorComposeMode="true" Name="CustomReplaceFormRegion" Title="MyCustomReplaceFormRegion"/> </FormRegions>
Définissez une action.
<CodeMethodAction MethodType="ShowRegionLayout" Name="ShowRegionLayoutAction"> <Parameters> <ConstantParameter Name="Param1" ValueType="System.String" Value="IPLayout"/> <ConstantParameter Name="Param2" ValueType="System.String" Value=" ArtistReplaceFormRegion" /> </Parameters>
Déclenchez l’action à l’ouverture de l’inspecteur.
<mx:ContextEventHandlers> <mx:ContextActivated ActionName="ShowRegionLayoutAction"/> </mx:ContextEventHandlers>
Définissez une disposition.
<Layouts xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Manifest/DeclarativeExtensions"> <Layout Name="IPLayout" LayoutFileName="IPLayout"> </Layout> </Layouts>
Créez un fichier de disposition pour définir ce qui doit être affiché dans le cadre de la disposition.
Puis-je associer du code à mon Ruban dans une solution Outlook déclarative ?
Oui. Toutefois, par défaut, dans une solution déclarative, vous ne pouvez lier votre code qu’à l’événement OnClick, événement qui est déclenché lorsque vous cliquez sur un bouton du Ruban.
Pour associer du code à l’événement OnClick
Définissez le Ruban comme indiqué dans l’exemple de fichier Ribbon.xml suivant.
<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad" loadImage="GetImage"> <ribbon> <tabs> <tab id="tabIssueID" label="Team Review" getVisible="GetVisible" tag="Solution"> <group id="IssueGroupID" label="Issue Actions" getVisible="GetVisible" tag="Context[TeamIssues.IssueGroupID]"> <button id="AllIssueButton" size="large" label="All Issues" onAction="OnAction" image="Issue.ico" getEnabled ="GetEnabled" screentip="Display All Existing Issues in Task Pane" tag="Action[TeamIssues.ListIssueAction]" />
Définissez une action dans le fichier Oir.config.
<mx:CodeMethodAction MethodType="Custom" Name ="OpenBugRibbonAction" MethodName="OpenBugMethod" QualifiedTypeName="CustomCodeActionNameSpace.CustomCodeActionClassName, CustomCodeActionAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c6b236b1e85d97a"> <mx:Parameters> <mx:ExpressionParameter Name="p1" EntityViewInstanceReference="PrimaryEntityNameInContext" Expression="BugID"/> </mx:Parameters> </mx:CodeMethodAction>
Implémentez une action de code personnalisée.
using System; using System.Text; using Microsoft.Office.BusinessApplications.Runtime.OIM; namespace CustomCodeActionNameSpace { public class CustomCodeActionCalssName { public void CustomCodeActionMethod(params object[] parameters) { //BCS Client Runtime passes in the Current Entity Instance as First parameter by default. IEntityInstance iei = parameters[0] as IEntityInstance; // Other parameters are passed in based on the configuration within oir.config. // Process the Action based on parameters. } } }
Notes
Si vous utilisez un gestionnaire de Ruban personnalisé, votre solution peut écouter les événements supplémentaires relatifs au Ruban.
Puis-je mettre à jour l’éditeur de ma solution ?
Le nom pour Éditeur provient de votre certificat. La solution doit être signée à l’aide d’un certificat émis par une autorité de certification approuvée. En raison de la limitation des outils de développement Office pour Visual Studio (voir l’article KB970682 (éventuellement en anglais)), le certificat de l’autorité de certification doit se trouver dans le magasin de certificats de l’autorité de certification racine approuvée du client.
Dans une solution Outlook déclarative, comment une partie de données externes personnalisée d’une disposition peut-elle communiquer avec d’autres parties de la même disposition ?
Appelez this.Parent.Parent pour obtenir la disposition de la partie de données externes, puis recherchez et comparez tous les enfants de cette disposition afin de trouver celle qui vous convient. Voici un extrait de code qui vous montre comment procéder.
WinFormsOBPartBase MyEDP;
ControlCollection allContainersUnderSameLayout = this.Parent.Parent.Controls;
foreach (Control container in allContainersUnderSameLayout)
{
ControlCollection allEDPsUnderSameContainer = container.Controls;
foreach (Control edp in allEDPsUnderSameContainer)
{
if (edp.Name == "MyEDPName")
{
MyEDP = edt as WinFormsOBPartBase;
break;
}
}
}