Archives mensuelles: Août 2007

MOUSSE de personnalisation de la recherche de pointe — Affaire importe dans recherche avancée XSLT

Recherche avancée XSLT ne modifier très souvent, Il semble donc que je suis escalade petites collines chaque fois.

Ma nouvelle leçon est la suivante: Cas des questions lorsque vous référencez une colonne. Dans ma recherche avancée, J'ai des colonnes définies comme cela:

<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Colonnes>
<
Colonne Nom="GafTrainingInvoiceNumber" />
<
Colonne Nom="GafTrainingInvoiceLocation" />
<
Colonne Nom="WorkId"/>
<
Colonne Nom="Grade"/>
<
Colonne Nom="Titre"/>
<
Colonne Nom="Auteur"/>
<
Colonne Nom="Taille"/>
<
Colonne Nom="Chemin d'accès"/>
<
Colonne Nom="Description"/>
<
Colonne Nom="Écriture"/>
<
Colonne Nom="Nom du site"/>
<
Colonne Nom="CollapsingStatus"/>
<
Colonne Nom="HitHighlightedSummary"/>
<
Colonne Nom="HitHighlightedProperties"/>
<
Colonne Nom="ContentClass"/>
<
Colonne Nom="IsDocument"/>
<
Colonne Nom="PictureThumbnailURL"/>
</
Colonnes>
</
racine>

Le XSLT qui affiche l'emplacement de facture et numéro de facture avait été:

<p>
Numéro de facture de formation: <XSL:de la valeur Sélectionnez="GafTrainingInvoiceNumber"/>
<
br></br>
Lieu de facture de formation: <XSL:de la valeur Sélectionnez="GafTrainingInvoiceLocation"/>
</
p>

Cependant, select a référencer la propriété tout en minuscules, comme dans:

<p>
Numéro de facture de formation: <XSL:de la valeur Sélectionnez="gaftraininginvoicenumber"/>
<
br></br>
Lieu de facture de formation: <XSL:de la valeur Sélectionnez="gaftraininginvoicelocation"/>
</
p>


Jusqu'à ce que j'ai corrigé que, résultats de recherche ont montré les étiquettes (i.e. « Numéro de facture de formation ») mais aucune donnée.

MOUSSE: Fonctionnelle exemple-Type de données personnalisé

Scénario d'entreprise:

L'échelle de l'entreprise mise en œuvre de mousse pour l'entreprise de fabrication avec 30+ sites et quelques dizaines des services.

Objectif de l'entreprise:

Malgré une multitude de groupes d'entreprises (départements, emplacements, etc.), certaines données devraient être maintenues à un niveau mondial. Par exemple, une liste principale faisant autoritaire de tous les lieux physiques de l'entreprise (e.g. installations de fabrication, entrepôts, bureaux de vente) devrait être maintenue dans un emplacement central.

Problème technique:

La taxonomie de l'entreprise a été implémentée à l'aide de plusieurs collections de sites. Nous aurions aimé créer la liste faisant autoritaire des emplacements physiques dans une liste personnalisée de WSS. Puis, Quand nous avions besoin d'avoir une colonne dans un type de contenu (ou une colonne ajoutée à une bibliothèque ou une liste doc) qui contenait des sociétés / entreprises, Nous créerions une colonne à l'aide de la recherche"" type de données, pointez sur cette liste principale.

Malheureusement, types de données de recherche doit accéder à une liste de source "localement" ce qui signifie que notre liste officielle ne peut pas s'étendent de collections de sites.

Solution technique:

Mettre en œuvre un nouveau type de données personnalisé mis en œuvre sur la base de SPField et représentée comme un DropDownList dans l'interface utilisateur dont ListItems peupler de la liste principale de WSS.

Nous avons créé une nouvelle collection de site appelée "http://localhost/EnterpriseData". Il, Nous avons créé une liste personnalisée nommée « Sociétés / entreprises ». Cette liste utilise seulement le titre"standard" champ pour contenir la liste des sociétés / entreprises réelles.

On suit plusieurs étapes discrètes pour créer un type de données personnalisé dans WSS. Ils sont:

  1. Définissez une classe qui hérite de SPField (On ne peut hériter d'autres domaines si nécessaire).

Voici le code pour ça:

public classe XYZZYCorporateLocationField : SPFieldText
{
public XYZZYCorporateLocationField
(SPFieldCollection champs, chaîne typeName, chaîne displayName)
: base(champs, typeName, displayName) { }

public XYZZYCorporateLocationField
(SPFieldCollection champs, chaîne displayName)
: base(champs, displayName) { }

public Substituez BaseFieldControl FieldRenderingControl
{
Télécharger
{
BaseFieldControl contrôle = Nouveau XYZZYCorporateLocationFieldControl();
contrôle. FieldName = ce.InternalName;
retour contrôle;
} //Télécharger
} // FieldRenderingControl

public Substituez chaîne GetValidatedString(objet valeur)
{
Si (ce.Obligatoire || valeur. ToString().Est égal à(Chaîne.Vide))
{
jeter Nouveau SPFieldValidationException ("Le ministère n'est pas affecté.");
}
retour base.GetValidatedString(valeur);
} // GetValidatedString

} // XYZZYCorporateLocation

  1. Définir une autre classe qui hérite du contrôle de champ de base, comme dans:

public classe XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protégé DropDownList XYZZYCorporateLocationSelector;

protégé Substituez chaîne DefaultTemplateName
{
Télécharger
{
retour "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

public Substituez objet Valeur
{
Télécharger
{
EnsureChildControls();
retour ce.SelectedValue XYZZYCorporateLocationSelector.;
} // Télécharger
ensemble
{
EnsureChildControls();
ce.XYZZYCorporateLocationSelector.SelectedValue = (chaîne)ce.ItemFieldValue;
} // ensemble
} // substituer la valeur d'objet

protégé Substituez VOID CreateChildControls()
{

Si (ce.Domaine == null || ce.ControlMode == SPControlMode.Affichage)
retour;

base.CreateChildControls();

ce.XYZZYCorporateLocationSelector =
(DropDownList)FindControl TemplateContainer.("XYZZYCorporateLocationSelector");

Si (ce.XYZZYCorporateLocationSelector == null)
jeter Nouveau Exception("ERREUR: Impossible de charger. Fichier ASCX!");

Si (!ce.Page IsPostBack.)
{

à l'aide de (SPSite site = Nouveau SPSite(« http://localhost/enterprisedata"))
{
à l'aide de (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Listes[Sociétés / entreprises""];

foreach (SPItem XYZZYCorporateLocation dans currentList.Items)
{
Si (XYZZYCorporateLocation[« Titre"] == null) continuer;

chaîne Titre;
Titre = XYZZYCorporateLocation[« Titre"].ToString();

ce.XYZZYCorporateLocationSelector.Items.Add
(Nouveau ListItem(Titre, Titre));

} // foreach

} // Using web As spweb = site.openweb()
} // en utilisant spsite site = nouvelle spsite(« http://localhost/enterprisedata")

} // Si ce n'est une publication (postback)

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Le code ci-dessus fondamentalement implémente la logique pour remplir le contrôle DropDownList avec les valeurs de la liste personnalisée de WSS, situé à http://localhost/enterprisedata et nommée « les services ».

J'ai défini les deux classes dans un fichier .cs seul, compilé et placez-le dans le global assembly cache (fort nécessaire, Bien sûr).

  1. Mettre en œuvre un modèle de contrôle (.ascx) comme le montre:

<%@ Contrôle Langue= "C#" Hérite="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, Culture = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Toujours" %>
<%
@ S'inscrire TagPrefix= wssawc"" Namespace="Microsoft.SharePoint.WebControls" Assemblée="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ S'inscrire TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assemblée="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= XYZZYCorporateLocationFieldControl"" runat= « server »>
<Modèle>
<ASP:DropDownList ID= XYZZYCorporateLocationSelector"" runat= "serveur" />
</Modèle>
</
SharePoint:RenderingTemplate>

Ce qui précède est enregistré en c:\programme filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. Enfin, Nous créons un fichier XML pour enregistrer dans le... 12XML répertoire. Il s'agit de CAML qui définit notre type de données personnalisé et pour mon exemple, ressemble à ceci:

<?XML Version="1.0" codage="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Champ Nom="TypeName">CorporateLocations</Champ>
<
Champ Nom="ParentType">Texte</Champ>
<
Champ Nom="TypeDisplayName">Sociétés / entreprises</Champ>
<
Champ Nom="TypeShortDescription">Toutes les sociétés XYZZY / y compris les installations de fabrication ou d'autres.</Champ>
<
Champ Nom="UserCreatable">VRAI</Champ>
<
Champ Nom="ShowInListCreate">VRAI</Champ>
<
Champ Nom="ShowInDocumentLibraryCreate">VRAI</Champ>
<
Champ Nom="ShowInSurveyCreate">VRAI</Champ>
<
Champ Nom="ShowInColumnTemplateCreate">VRAI</Champ>
<
Champ Nom="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = b0b19e85410990c4</Champ>
<
RenderPattern Nom="DisplayPattern">
<
Commutateur>
<
Expr>
<
Colonne />
</
Expr>

<Affaire Valeur=""/>

<Par défaut>
<
HTML>
<![CDATA[
<span style = "color:Red"><b>]]>
</
HTML>

<
Colonne SubColumnNumber="0" HTMLEncode="VRAI"/>

<HTML><![CDATA[</b></travée>]]></HTML>

</
Par défaut>
</
Commutateur>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Ce fichier XML ajoute le type de données personnalisé à la "bibliothèque WSS" et il matches contre le GAC a l'Assemblée.

Après avoir déménagé tous ces bits en place, iisreset sur le serveur et il devrait démarrer tous fonctionne bien.

WSS: Technique permettant de créer des définitions de champ CAML.

Catégorie supplémentaire: CAML

Ici ya une grande annonce par un camarade nommé craig"" une technique pour trouver des définitions de CAML pour les types de contenu de champ basés sur vraies définitions provenant d'un site.

Son affectation dit tout. En bref:

  1. Créer un type de contenu.
  2. Associez-le à une liste.
  3. Ouvert vers le haut de la liste avec SharePoint Designer.
  4. Exporter vers un « package web personnel ».
  5. Renommez un .cab.
  6. Extrait du manifeste.
  7. Trouver votre type de contenu et le CAML associé.

WSS: Mesures sommaires pour permettre utile caractéristiques/éléments/etc.. IntelliSense dans VS 2005

Catégories supplémentaires: Visual Studio 2005

Pour activer intellisense utile pour les caractéristiques, éléments, etc dans visual studio 2005:

  1. Accéder à un serveur WSS.
  2. Accédez à "c:\programme filescommon filesmicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Ouvrez l'Explorateur windows une autre pointant vers: « C:\Program FilesMicrosoft Visual Studio 8XmlSchemas"
  4. Copiez les fichiers suivants à partir du serveur WSS à votre VS 2005 Répertoire de schémas:
    1. WSS.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Redémarrez VS 2005
  6. Ajoutez un nouveau fichier XML à un projet.
  7. Cliquez dans le corps du fichier XML.
  8. Dans le volet Propriétés, Cliquez sur les schémas"" et choisir "wss.xsd" Parmi les choix. (Il n'est pas nécessaire de sélectionner d'autre xsd car ils sont référencés depuis wss.xsd).

IntelliSense est maintenant activé pour que le document XML.

Voir ici Pour plus d'informations sur ce sujet et pour obtenir des instructions sur la façon d'associer automatiquement WSS intellisense avec n'importe quel fichier XML.

Examen WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Développement d'applications

J'ai pris et passé le test mentionné ci-dessus ce matin. J'ai trouvé l'examen difficile et justes.

Il y a un manque relatif d'informations sur cet examen sur le web. Je ne sais pas pourquoi.

Je n'obtiendrai évidemment dans les détails sur l'examen que j'ai pris, mais je pense que je peux dire ce qui suit:

  1. Faire confiance à ce lien: http://www.microsoft.com/learning/exams/70-541.mspx.

    Il énumère ce que vous devez savoir pour réussir l'examen et il est, OMI, très précis.

  2. Le lien recommande aussi Inside Microsoft Windows SharePoint Services 3.0 par Ted Pattison & Daniel Larson. Ce livre couvre presque tous les sujets qui traite de l'essai. Je trouve qu'il est grand en elle-même et au-delà la préparation de l'examen simple. Il fournit des exemples de grandes et vraiment m'a fait penser à des choses nouvelles et intéressantes à essayer. Si vous souhaitez ignorer quelques morceaux dans le livre, juste croiser TOC du livre avec les éléments dans le lien d'en haut.
  3. Rien ne vaut une expérience pratique réelle. Si vous avez le temps et l'intérêt, suivre les exemples dans le livre et puis expérimenter avec eux. Vous aurez ont plus de facilité à l'examen ainsi que vraiment apprendre programmation d'applications de WSS.

</fin>S'abonner à mon blog!

MOUSSE / InfoPath Forms Server (InfoPath 2007) performance dans la liste déroulante

Catégorie supplémentaire: InfoPath

Résumé: Un InfoPath 2007 formulaire déployé sur un serveur MOSS fournit une liste déroulante des vendeurs liée à une liste personnalisée de MOSS. Lorsque vous sélectionnez un fournisseur, règles assigner des valeurs de champ à une poignée de champs de texte tels que le nom de représentant des ventes, adresse, ville, État, zip et téléphone. Performance est horrible. Nous remarquons que la performance s'aggrave (dans un mode non linéaire) pour chaque champ supplémentaire, nous mettons à jour cette façon. C'est-à-dire, Si nous avons juste mettre à jour le nom de représentant des ventes, Il faut [x] laps de temps. Si nous mettons à jour représentant des ventes, adresse1, adresse2, ville, État, zip, Il faut 10 fois plus longtemps.

Solution: Écrire un service web (exemple de code se trouvent ici) qui est passé au nom de la vendeuse et elle retourne retour les détails du vendeur. Puis, assigner les champs de cette manière. Même si cela semble trop lente, Il n'y n'avait aucun différence perceptible dans les performances lorsque nous avons attribué 1 champ versus 8 champs. En prime, les utilisateurs obtiennent une cool "communiquant avec le serveur" Cylon effet pendant qu'ils attendent pour le formulaire d'invoquer et de consommer le service résultats.

MOUSSE: Exception s'est produite. (Exception de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

MISE À JOUR: Nous avons déterminé jamais la cause de ce problème et il jamais surface encore une fois.

Nous remarquons que soudainement au cours de la mise en oeuvre d'un site de développement, deux utilisateurs ne peuvent accéder à une collection de sites. Ces comptes peuvent s'authentifier sur le site principal, mais lorsque vous essayez d'accéder à une collection de sites particulière, avoir juste un écran vide. Aucune erreur ne s'affichée, juste une page blanche vierge.

Nous connecter en tant qu'un administrateur de collection de site et essayez d'ajouter un de ces utilisateurs comme un administrateur de site et cette fois, à appuyer sur « OK », Nous obtenons ce message:

Exception s'est produite. (Exception de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Nous avons passé quelques temps cette recherche et malheureusement, n'aboutir à rien d'utile. Il y a certains messages dans le journal de diagnostic, mais il était difficile de les corréler exactement cette question.

En fin de compte, Nous avons supprimer de la collection de sites et recréé et qu'il résolu.

Si je figure ce que cela causé dans l'avenir, Je vais mettre à jour ce post.