MOUSSE: Mise à jour d'une liste personnalisée

Il y a beaucoup de bons exemples de mise à jour de listes personnalisées via le SDK. Voici encore un autre.

Problème commercial: Formulaire InfoPath a été conçu pour que les demandes d'achat permet aux utilisateurs de s'inscrire en ligne. Réquisition de PO numéros devraient être séquence traditionnelle basée à valeurs entières et calculé automatiquement.

Solution d'affaires: Créer une liste personnalisée de mousse contenant deux colonnes: "ControlField" et « ControlValue ». La colonne valeur contient le prochain numéro de demande d'achat. Notez que le générique "contrôle" convention de nommage fournit pour les champs de contrôle futur qui peuvent être utilisés selon les besoins.

Solution technique: Créer un service web accédé par le client InfoPath. Le service web retourne en arrière le prochain numéro de réquisition d'achat et met à jour la valeur de la liste.

Leçons apprises:

  • Lors de l'ajout de ce service web comme une source de données au formulaire InfoPath, J'ai jugé nécessaire de convertir en une udc et la stocker dans une bibliothèque de connexions de données.
  • Je l'ai trouvé aussi nécessaire pour activer le script inter-domaines via l'administration centrale services // gestion des applications // configuration de serveur de formulaire.
  • La première fois la forme a essayé d'accéder au service web, Il faut du temps et à l'occasion, Il serait temps. J'ai bidouillé avec les paramètres de configuration de serveur de formulaire d'élargir les paramètres de délai d'attente et qui semblent aider.

Le code:

à l'aide de Système;
à l'aide de System.Web;
à l'aide de System.Web.Services;
à l'aide de System.Web.Services.Protocols;
à l'aide de Microsoft.SharePoint;
à l'aide de System.Configuration;

[WebService(Namespace = « http://www.Conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public classe PoService : System.Web.Services.WebService
{
public PoService () {

//Décommentez la ligne suivante si vous utilisez des composants conçus
//InitializeComponent();
}

/// <Résumé>
/// Obtenir le numéro suivant dans la liste numéro de contrôle sharepoint po.
/// Incrémenter le numéro de PO dans cette liste.
/// </Résumé>
/// <retourne></retourne>
[WebMethod]
public chaîne GetNextPoNumber()
{
chaîne SpPoControlSiteName; // Nom du site MOSS réel qui héberge la liste de contrôle de PO.
chaîne SpPoControlListName; // Nom de la liste réelle de MOSS qui contient le contrôle de Po.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

chaîne nextPoReqNumber = "xyzzy";

à l'aide de (SPSite site = Nouveau SPSite(SpPoControlSiteName))
{
à l'aide de (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Listes[SpPoControlListName];

foreach (SPItem controlItem dans currentList.Items)
{

Si (((chaîne)controlItem["ControlField"]).Est égal à("NextPoNumber"))
{
nextPoReqNumber = (chaîne)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Convert.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}

} // Localisation, lire et mettre à jour le nombre de PO dans la liste.


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

retour nextPoReqNumber;

}
}

Une réflexion sur "MOUSSE: Mise à jour d'une liste personnalisée

  1. KSP a écrit:
    Bonjour Paul,
    Nous avons une situation similaire à ce que tu mentionnes mais le problème est que je veux utiliser ce servie web sur un serveur de balance de charge.C'est pourquoi,Comment gérer les demandes d'accès concurrentiel dans ce cas ou comment pour effectuer la demande de nouveau attendre et qu'une demande doivent mettre à jour le numéro de la liste jusqu'alors toutes les autres demandes devraient être en Qué.S'il vous plaît faites le moi savoir comment y parvenir.
    Merci d'avance.
    Réponse

Laisser une réponse

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *