Archives Catégorie: InfoPath 2007 // Forms Server

Succès rapide: Lecture de XML InfoPath directement d'un SPListItem dans SharePoint

J'ai été travailler sur un projet où j'ai besoin d'extraire les pièces jointes d'un formulaire InfoPath. Il y a quelques bonnes ressources pour l'analyse des formulaires InfoPath (qui sont juste des fichiers XML, C'est en fait assez facile).

Alors que j'ai mise en place du projet, J'ai commencé en téléchargeant un formulaire InfoPath et l'enregistrer sur mon disque dur. Mon code c# lisait directement à partir de cette instance. Cependant, les formulaires InfoPath sont vraiment vivant à l'intérieur d'une bibliothèque de formulaires SharePoint. J'ai fait une petite moitié cœur recherche pour savoir comment la lire directement à partir de la bibliothèque et presque abandonné, auquel cas j'aurais sauvé la forme dans un répertoire temporaire local et le lire a partir de là. Cependant, Il n'y a pas besoin d'aller à travers les cerceaux comme vous pouvez le lire directement à partir de la bibliothèque. Ce petit extrait de code illustre comment:

/// Slideshows de classe définition ici, y compris:
privé SPFile mySharePointFile; /* Partie d'un SPList */
// Plus de code va ici et à l'intérieur d'une méthode de la classe, nous avons:
XmlTextReader textReader;
textReader = Nouveau XmlTextReader(mySharePointFile.OpenBinaryStream());

textReader.WhitespaceHandling = WhitespaceHandling.Aucun;

textReader.Read();

// Si le nœud a la valeur

tout en (textReader.Read())
{

... et ainsi de suite et ainsi de suite...

Ils clé bit ci-dessus est que nous pouvons lire directement via le OpenBinaryStream InfoPath() appel de méthode sur le SPFile comme un paramètre au constructeur sur XmlTextReader. Il fonctionne très bien.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati:

Extraire les pièces jointes par programmation de formulaires InfoPath (Y compris leurs noms!)

J'ai une solution d'entrée de frais pour les clients qui s'appuie sur InfoPath et workflow. À un moment donné au cours du processus d'approbation, J'ai besoin de générer un courriel a tous que de bonnes données InfoPath, ainsi que les pièces jointes se sorte que (soupir) quelqu'un peut prendre que les données et il cryptophonie manuellement dans une application de base de données Oracle.

Il n'est pas très difficile à obtenir à ou d'analyser le formulaire InfoPath. Je ne savais pas comment gérer les pièces jointes, Cependant. Après une heure ou deux de fouiller les Internets (une éternité!) J'ai trouvé cet article: http://support.microsoft.com/kb/892730

Il fournit un code de pratique pour extraire la pièce jointe d'un nœud sous la forme. (Vous devez toujours trouver le nœud et tout le reste, mais c'est juste l'analyse XML).

Je sais que la pièce jointe est codé en base64 et je suis allé à l'origine sur le chemin de tout extraire les données base64, décoder et enregistrer. Cependant, J'ai rapidement réalisé que je ne savais comment obtenir le nom du fichier lui-même, jusqu'à ce que j'ai trouvé l'article susmentionné.

J'avais effectivement conclu que très tôt, mais j'ai été rebuté par sa double personnalité. D'une part, l'article * dit * c'est bon pour InfoPath 2007. Encore, le code et les instructions sont tout à propos de Visual Studio 2003 et des références à InfoPath 2003.

Ligne de fond, le code de l'article fourni fonctionne bien pour moi (pour l'instant). Je peux obtenir mon formulaire InfoPath, Je peux analyser ce, Je peux trouver et décoder la pièce jointe et je sais pas son nom. Ce qui on peut demander de la vie?

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati: ,,

Si tu t'inquiètes que votre environnement SharePoint peut être un peu malsaine, Permettez-moi d'aide vous fixer que avec un bilan de santé.

Gestion de groupes d'approbation avec InfoPath dans un environnement de FBA

J'ai un processus d'approbation des frais que j'ai besoin de mettre en œuvre à l'aide d'InfoPath dans une authentification des formulaires basés (FBA) environnement à l'aide de forms services (InfoPath sur le Web).

Il y a deux groupes d'approbation et le processus fonctionne comme cela:

  • Utilisateur remplit un rapport de la dépense et le soumet pour approbation.
  • Qui déclenche un courriel au premier groupe de niveau approbateur.
  • Premier approbateur niveau examine et approuve ou rejette le rapport.
  • Si elle approuve la première personne de niveau, système avertit approbateur de niveau seconde.

Du côté des choses InfoPath, J'ai différentes sections que masquer/semblent basées sur la question de savoir si l'utilisateur est membre de l'un de ces groupes d'approbation.

Dans un environnement de FBA le nom d'utilisateur() fonction retourne toujours Vierge, Malheureusement. Ce que j'ai fait est mis en place une liste personnalisée appelés « Groupes d'approbation ».

Je ne pas ajouter des colonnes supplémentaires à la liste.

Lorsque le formulaire s'ouvre, Elle a une règle comme ceci:

image

La « valeur d'un champ set » est ici:

image

C'est dire essentiellement: Requête la liste personnalisée de groupe approbation et filtre de requête en recherchant une rangée où valeur du titre = « Nordique ».

Si qui renvoie une valeur, puis l'utilisateur actuel est un membre de ce groupe. Je sais qu'il contient cette valeur, car la longueur de la chaîne est supérieure à zéro.

Boucler la boucle en sécurisant les éléments individuels dans la liste d'approbation de groupe. En cours d'exécution, Si l'utilisateur actuel n'a pas accès de sécurité appropriés à cet élément, alors la requête ne retourner, longueur de chaîne sera de zéro et maintenant vous savez l'utilisateur actuel ne fait pas partie de ce groupe. Vous pouvez utiliser ce fait comme nécessaires dans le formulaire.

Il s'agit d'une super-brève description. Je suis pressé par le temps ou je voudrais fournir plus de détails.

Je ne sais pas comment pertinent c'est que je suis dans un environnement de FBA. Cela fonctionnera probablement bien dans un environnement non-FBA, mais je peux imaginer des cas où cela s'avère utile.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati: ,

InfoPath // Une explication pour les « exception non gérée lors du rendu de formulaire System.Xml.XmlException: Fin de fichier inattendue lors de l'analyse de nom a eu lieu. “

Je travaille aujourd'hui sur une forme de InfPath et a couru contre un vieil ami, « Une exception non gérée lors du rendu de forme System.Xml.XmlException: Fin de fichier inattendue lors de l'analyse de nom a eu lieu. »

Cela m'est arrivé il y a longtemps et je ne sais pas quoi exactement je l'ai fait pour le résoudre. Honnêtement, Je pense que j'avait été transition vers un nouveau projet et qu'il n'a jamais vu un résolu (mon remplacement doit faire face à ce mal de tête). Je me souviens que c'était un diable d'un problème. J'ai passé plusieurs jours sans succès traitant. Depuis ce temps, J'ai vu cela arriver sur les forums MSDN, au moins une fois au cours de l'année dernière et n'a jamais vraiment vu une réponse pour elle.

J'ai frappé il aujourd'hui et heureusement cette fois , J'avais juste apporté une modification à la forme. J'ai soutenu ce changement et le problème a disparu. Il s'avère qu'il est possible de créer un modèle à l'aide de InfoPath Designer de telle manière qu'il génère une erreur d'analyse du côté du serveur de formulaires de la clôture.

Dans mon cas, le problème était causé par ces mesures:

  1. Ajouter un nouvel élément à une source de données comme un champ de texte.
  2. Déposez le sur le formulaire.
  3. Changer son affichage dans une liste déroulante.
  4. Raconter le menu déroulant liste pour tirer ses valeurs dans une liste personnalisée de SharePoint.

Je ne sais pas si ces mesures provoquent un problème ou peut-être, d'une certaine manière, les données de la liste elle-même sont un problème. Je vais expérimenter un peu et voir si je peux clouer downt paramètres he cela avec n'importe quel détail plus.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati:

Incorporer les Notes du développeur à l'intérieur de vos formulaires InfoPath

Je suis vivant dans le monde de formulaires InfoPath et j'avais besoin de faire l'un de ces « petits » changements sous une forme qui, Malheureusement, casse une convention d'appellation que j'ai adopté avec elle il y a deux semaines. Je me suis dit, « quelqu'un va regarder cette chose un an à partir de maintenant et de dire, « Ce que pensait Paul? Par Jove, sa convention de nommage n'a aucun sens!”

J'ai réalisé que je pouvais créer une vue sur le formulaire pour cela et ensuite, Encore une fois, s'est rendu compte que je pouvais ont fait quelque chose comme ça tout le long. J'ai ajouté une vue « Développeur Notes » dans le formulaire InfoPath comme tel:

image

J'ai configuré le formulaire afin que les utilisateurs ne peuvent pas obtenir de ce point de vue et, par conséquent, Il n'est plus visible avec le client InfoPath en mode création. Maintenant je me sens un peu inoculé contre certains futur développeur inconnue regardant mon formulaire et les mauvaises pensées de pensée à propos de moi. Ouf!

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati:

Gestion de vues InfoPath

J'ai l'impression de passer par des phases d'InfoPath où, Out of the blue, Je suis un tas de formes d'artisanat. Mes doigts apprennent comment utiliser l'outil bien et puis j'ai passer neuf mois de sécheresse et dois réapprendre partout.

Je suis au milieu d'une phase d'InfoPath et je vais créer des formulaires InfoPath avec beaucoup de vues. Une chose, que vous remarquerez probablement qu'est l'InfoPath 2007 client s'affiche dans l'ordre alphabétique vues. C'est une véritable nuisance quelques fois. Ma meilleure technique ces jours-ci est d'ajouter un numéro au nom de la vue, afin qu'elles voient toujours dans l'ordre que je veux, comme illustré ici:

image

Je souhaite que j'avais fait cela tout au long.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati:

Sevices de formulaire InfoPath, L'authentification basée sur les formulaires (FBA) et les noms de fichier uniques

J'ai été travailler sur certains formulaires InfoPath cette semaine dans la mousse dans un environnement de FBA et savant, Quand je suis allé à déployer les formulaires à un environnement de production avec un FBA zone que le nom d'utilisateur() fonction ne fonctionne pas. Je l'utilise pour générer des noms de fichiers uniques.

Puits, Cette fonction ne fonctionne pas dans un environnement de FBA (au moins, pas hors de la boîte). Et, à la réflexion, en utilisant le nom d'utilisateur dans la façon dont j'avais l'intention n'ont garanti un nom de fichier unique dans tous les cas.

Ma solution est d'utiliser le maintenant() fonction et une règle qui se déclenche lors du chargement du formulaire. J’attribue le nom de fichier de l’élément de données lorsqu’il est vide:

image

image

L’avantage de cette approche est que le nom de fichier est défini qu’une seule fois. (Je ne le montre dans la capture d'écran, mais mettre une condition sur la règle se déclenche uniquement lorsque « myFilename » est vide). J’ai utilisé pour définir le nom du fichier au niveau de la source de données. En général, Je ferais quelque chose (mauvaise) Comme ça:

image

Le problème est que si l'utilisateur a ouvre le formulaire lundi et l'utilisateur b il modifie le mardi, vous vous retrouver avec deux formes différentes car deux utilisateurs différents il a enregistré avec les noms d'utilisateur différents.

Si, comme ennuyeux comme FBA peut être en général et avec InfoPath en particulier, Il m'a fait repenser à une petite mais vraiment importants détails techniques et une approche que je n'aurais pas pu faire autrement!

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati:

Simple et rapide: Faire une formulaire InfoPath en mode lecture seule (InfoPath Forms Services dans MOSS)

Il y a un scénario commun comme ceci:

  • Utilisateur remplit un formulaire InfoPath.
  • Soumet le formulaire.
  • Processus de flux de travail longues kicks off.
  • Alors que le flux de travail est en cours d'exécution, Nous ne voulons pas n'importe qui de modifier le contenu du formulaire.

Cet exemple office.microsoft.com décrit comment créer une vue distincte de »" et marquer la vue entière en lecture seule. Il s'agit d'une approche viable mais présente l'inconvénient que vous avez effectivement créé deux versions toute de même forme et devez maintenant garder synchronisés manuellement. Si vous ajoutez un champ à l'affichage modifiable, vous devez ensuite l'ajouter à la vue non modifiables, ainsi. Au fil du temps, avec différents développeurs, Il peut y avoir certaines divergences.

Cette solution pourrait mieux fonctionner dans certains cas:

  • Ajouter un nouveau champ pour le formulaire intitulé « IsEditable ».
  • Sa valeur par défaut la valeur true.
  • Faire la promotion lors de la publication de mousse.
  • Dans le flux de travail, la valeur de IsEditble la valeur false.
  • Revenir à la forme.
  • Ajouter une règle qui "sur ouverture du formulaire", désactiver votre enregistrer bouton lorsque IsEditable a la valeur false.

L'inconvénient de cette approche est que tous les champs seront toujours modifiables sur l'écran. L'utilisateur peut obtenir une impression erronée en ce qu'ils peuvent réellement changer de contenu. Vous pouvez atténuer qu'en mettant dans un texte que le formulaire est désactivé, peut-être en grandes lettres rouges en haut de la page.

Dans un projet, J'ai créé un état de flux de travail »" point de vue. Au fur et le flux de travail, il mettrait à jour les champs statut spécifique qui avaient été promus de la forme. Lorsque l'utilisateur ouvre le formulaire, le formulaire ouvert »" règle automatiquement commuté pour que la vue et l'utilisateur avaient un statut Sommaire peu agréable.

</fin>

S'abonner à mon blog.

Commutateur optique basé sur l'ID d'utilisateur dans un formulaire InfoPath

Nous avons eu a développé un formulaire InfoPath avec plusieurs vues pour soutenir une nouvelle location / processus d'intégration. Lorsque l'entreprise embauche une nouvelle personne, le département d'informatique et d'autres groupes ont besoin de prendre des mesures (mis en place sur la paie, permettre l'accès aux applications appropriées, localiser un bureau, etc.). Nous utilisons sur la forme, mais une vision différente de la forme pour chacune de ces fonctions.

Dans cette entreprise, la plupart des personnes impliquées dans le processus de l'entreprise sont doués en informatique, alors, quand ils accèdent à la forme, leur point de vue par défaut est un menu"" Découvre avec des boutons qui orientent vers leur fonction spécifique. Cependant, Nous avions besoin de simplifier les choses pour responsable direct de la nouvelle location. Cette personne ne devrait pas voir de l'IT choses relatives. En fait, elle devrait voir juste un point de vue de la forme et n'ont même pas une option pour voir les autres vues.

Dans notre cas, que les directes compte du gestionnaire est directement lié à la forme courtoisie d'un sélecteur de contact (qui je suis toujours désireux d'appeler un "sélecteur de personnes" pour une raison quelconque).

Les étapes sont les suivantes:

1. En mode création, allez dans outils-> Options de forme :> Ouvrir et enregistrer.

2. Sélectionnez « règles ».

3. Créer une nouvelle règle dont l'action est de "passer pour afficher" et dont l'État s'appuie sur le nom d'utilisateur() fonction.

nom d'utilisateur() retourne le simple"" nom d'utilisateur sans le nom de domaine. Si je me connecte à SharePoint avec informations d'identification de « domainpagalvin », nom d'utilisateur() retourne « pagalvin ».

Le sélecteur de contact fournit trois bits des informations d'un contact. L'ID de compte"" partie est très utile pour ce scénario. La seule chose qui rend ce même un peu de challenge, c'est que le sélecteur de contacts (dans mon environnement de toute façon) retourne l'ID de domaine et d'utilisateur, comme dans "domainpagalvin". Cela nous empêche de faire une condition d'égalité directe depuis AccountID (« domainpagalvin ») n'égalera jamais le nom d'utilisateur() (« pagalvin »).

Nous pouvons contourner cela en utilisant le "contient" opérateur: AccountID contient le nom d'utilisateur().

Nous pouvons prendre davantage et pré-pend un domaine codées en dur devant le nom d'utilisateur() fonction pour obtenir notre vérification de l'égalité et à éliminer le risque d'un faux positif sur le contient l'opérateur.

Nous aurions vraiment comme basculer automatiquement l'affichage pour les autres utilisateurs fondée sur leur appartenance à un groupe AD sécurité. Par exemple, Lorsqu'un membre de la "il Analytique" groupe accède à la forme, automatiquement à la vue IT Analytique. Nous n'avions pas le temps de mettre en œuvre, mais ma première pensée est de créer un service web qui aurait une méthode comme « IsMemberOfActiveDirectorySecurityGroup », passez-lui le nom d'utilisateur() et retour retour true ou false. Quelqu'un at-il un autre, plus d'idée astucieuse? Y a-t-il n'importe quelle fonction de SharePoint, que nous pouvons tirer parti de trancher cette question d'InfoPath?

</fin>

Tags Technorati: