Chak mwa Achiv: Jiyè 2007

BAB PANYÒL: Effectuées par lis personnalisés Et retounen filtrage done pou InfoPath

Biznis Scénario:

Bay yon metòd sa aux utilisateurs pou antre précis acha bons rapidement.

Pwoblèm biznis:

Kliyan la fè biznis ak plizyè santèn fournisseurs.

Fournisseurs sont "jan de" espesifik. Sa vle di yon machann vann ekipman konpitè (par. Dell) ou biwo ekipman (par. Staples).

Ki jan nou pèmèt fin utilisateurs ki kreye acha bons chwazi yon machann valab?

Solisyon biznis:

Différence fournisseurs nan sistèm via "jan de".

Pèmèt moun pou yo chwazi "jan de" de pwodwi Et donk bay yon ansanm filtrage de fournisseurs apwopriye.

Solisyon teknik:

Yon fòm InfoPath ki te fèt aux utilisateurs pou antre sou liy achte demandes.

De InfoPath te chwazi lis kontwole chwazi machann. Premye, moun kap itilize li an, sélectionne yon "acha tip". Sa limites yon dezyèm lis chwazi pou genyen sèlman fournisseurs ki vann pou sa jan akizisyon de. Sa se yon klasik en ane ke yo bliye-desann.

Fournisseurs yo sere nan yon bab PANYÒL lis personnalisé ak personnalisé colonnes pou machann attributs tankou non, adrès Et sitou "jan de".

Implement, yon sèvis entènèt pou yon kliyan InfoPath an pou pran sa une à personnalisé machann lis, retounen sèlman fournisseurs asòti yon fournis "jan de".

Envoke sèvis entènèt la via fòm InfoPath.

Leson Appris:

  • Premye, li sanble nesesè pou ale wout sa a. Mwen ta pwefere fè filtrage tout nan InfoPath, pa kreye yon sit sèvis fonctionnalités isit la. Sepandan, sèvè fòmilè yo pa bay kapasite filtraj mande l la. Nou kapab mete yon regleman sou yon "jan de" lis chwazi nan fòm pou asye de re-louvri la requête machann, Men, nou pa ka pran l' pou travay correctement. Se pou sa, li te fèt pou aplike pou sèvis entènèt la.
  • Sa se yon klasik "en chwazi lis" pwoblèm nan InfoPath a formulaires sèvè monde Et genyen anpil bon ekzanp yo la pou kapab eksplike kijan pou rezoud sa.
  • Yon valè vid pou yon kolòn machann lis nan pa retounen yon vid chaîne lè référencé kon sa: initItem["Machann non"]. Alaplas de, li retounen yon Nil.

Kèk lòt nòt:

  • M retounen nan yon tableau[] de fournisseurs paske mwen te gen kèk difikilte pou retounen yon ArrayList. InfoPath te se sou zafè sa Et mwen pa t gen tan ou an pant pou batay sou li. Sa a, Men wi, mete yon fo fwontyè sou an total kantite ke ti machann kap. Li tou forcé m' bezwen aplike jiskisi yon bòdu() metòd sou etalaj a paske mwen rayi lide pou retounen nan do 100 a nan fournisseurs Nil. InfoPath pa swen, Men, li te nagged ban mwen. (Ankò, sa a te vin pi fasil pase goumen InfoPath sou ArrayLists).
  • Mwen te aplike yon GetSpecificVendorByName() fonksyon osi byen, ki ka intéressant.

Kòd la:

itilize Sistèm;
itilize System.Web;
itilize System.Web.Services;
itilize System.Web.Services.Protocols;
itilize Microsoft.SharePoint;
itilize System.Configuration;

/// <rezime>
///
Sèvis machann: Bay machann ki gen rapò ak sèvis ki jòdi a consommée pa yon fòm kliyan an infopath.
///
/// Istwa:
/// ——–
/// 07/24/07: Inisyal codage, Paul J. Gavin de Conchango.
///
/// </rezime>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
piblik klas VendorService : System.Web.Services.WebService
{

/// <rezime>
/// Repwezante yon machann nan yon lis sharepoint repòtaj ki toujou kenbe pa MSUSA.
/// </rezime>
piblik klas Machann
{
piblik Machann() { }

piblik Machann(SPItem initItem)
{
Si (! (initItem["Machann non"] == null)) VendorName = initItem["Machann non"].ToString();
Si (! (initItem["Adrese 1"] == null)) VendorAddress1 = initItem["Adrese 1"].ToString();
Si (! (initItem["Adrese 2"] == null)) VendorAddress2 = initItem["Adrese 2"].ToString();
Si (! (initItem["Vil"] == null)) VendorCity = initItem["Vil"].ToString();
Si (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Si (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Si (! (initItem["Eta"] == null)) VendorState = initItem["Eta"].ToString();
Si (! (initItem["Postal"] == null)) VendorZip = initItem["Postal"].ToString();
Si (!(initItem["Fakse"] == null)) VendorFax = initItem["Fakse"].ToString();
Si (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Inik Didantite toujou kenbe via bab PANYÒL.
}

piblik int VendorItemId;
piblik filè VendorName;
piblik filè VendorAddress1;
piblik filè VendorAddress2;
piblik filè VendorCity;
piblik filè VendorState;
piblik filè VendorZip;
piblik filè VendorPhone;
piblik filè VendorType;
piblik filè VendorSalesRepName;
piblik filè VendorFax;
}

piblik VendorService () {

//Supprimez apwe liy si w ap itilize fèt konpozan
//InitializeComponent();
}

pwive Machann[] GenerateTestVendors()
{
Machann[] resultList;
resultList = nouvo Machann[100];

Machann v;
v = nouvo Machann();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";

resultList[0] = v;

v = nouvo Machann();

v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";

resultList[1] = v;

v = nouvo Machann();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";

resultList[2] = v;

retounen resultList;

}

[WebMethod]
piblik Machann GetSpecificVendorById(int vendorId)
{
filè SpVendorSiteName; // Non aktyèl bab PANYÒL sit la ki hôtes machann lis koutim.
filè SpVendorListName; // Non aktyèl bab PANYÒL lis ki gen fournisseurs.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

itilize (SPSite kote ki gen = nouvo SPSite(SpVendorSiteName))
{

itilize (SPWeb Web = direksyon. OpenWeb())
{

Splist.update() currentList = web. Lis[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

retounen nouvo Machann(specificItem);

} // w ap itilize entènèt spweb = site.openweb()
} // w ap itilize kote ki gen spsite = spsite nouvo("http://localhost/mizuho")

}

[WebMethod]
// Que la rele machann inik, nan yon pèspektiv nan afè biznis
piblik Machann GetSpecificVendorByVendorName(filè être)
{
filè SpVendorSiteName; // Non aktyèl bab PANYÒL sit la ki hôtes machann lis koutim.
filè SpVendorListName; // Non aktyèl bab PANYÒL lis ki gen fournisseurs.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

itilize (SPSite kote ki gen = nouvo SPSite(SpVendorSiteName))
{
itilize (SPWeb Web = direksyon. OpenWeb())
{

Splist.update() currentList = web. Lis[SpVendorListName];

foreach (SPItem vendorItem nan currentList.Items)
{
Si (vendorItem["Machann non"] == null) «««;

Si (vendorItem["Machann non"].ToString().Fèt pou l egal(être))
retounen nouvo Machann(vendorItem);
}

Machann v = nouvo Machann();
v.VendorPhone = "pa te jwenn: " + être;

retounen v;

retounen null;

} // w ap itilize entènèt spweb = site.openweb()
} // w ap itilize kote ki gen spsite = spsite nouvo("http://localhost/mizuho")

} // metòd

[WebMethod]
piblik Machann[] GetVendorsOfType (filè filterType)
{

filè SpVendorSiteName; // Non aktyèl bab PANYÒL sit la ki hôtes t
lis repòtaj li machann.
filè SpVendorListName; // Non aktyèl bab PANYÒL lis ki gen fournisseurs.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

Machann[] resultList;
int vendorIndex = 0;
resultList = nouvo Machann[1000];

// Initialiser ansanm ak yon mesaj amikal defo.
Machann v = nouvo Machann();
v.VendorName = "Chwazi yon machann tip pou peple lis sa a.";
resultList[0] = v;

// Konvèti filtè an pou yo ka pi ba pou vin pi fasil kòd konpare pi ta.
filterType = filterType.ToLower();

// Si jan filtre de te pase se "tès", pwodui kèk done senp.
#rejyon Filtre tip = "tès"
Si (filterType. À(tès""))
retounen GenerateTestVendors();
#endregion

Si (vre)
{
itilize (SPSite kote ki gen = nouvo SPSite(SpVendorSiteName))
{
itilize (SPWeb Web = direksyon. OpenWeb())
{

v = null;

Splist.update() currentList = web. Lis[SpVendorListName];

// Une nan tout atik nan lis machann.
foreach (SPItem vendorItem nan currentList.Items)
{

filè lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

Si (lowerVendorType. À(filterType))
{
resultList[vendorIndex ] = nouvo Machann(vendorItem);
}
} // effectuées thru tout fournisseurs nan lis la


retounen TrimVendorArray(vendorIndex, resultList);
// retounen resultList;

} // w ap itilize entènèt spweb = site.openweb()
} // w ap itilize kote ki gen spsite = spsite nouvo("http://localhost/mizuho")

} // si tout bon

retounen null;
}

pwive Machann[] TrimVendorArray(int newsize, Machann[] originalVendorArray)
{
Machann[] trimmedArray;

Si (newsize == 0) newsize = 1;
trimmedArray = nouvo Machann[newsize];

int currentCounter = 0;

Depi (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

retounen trimmedArray;

}
}

BAB PANYÒL: Meteyorolojik sou InfoPath débogage

Fòm InfoPath sèvè erreur mesaj sont trompeuse.

Pandan devlopman yon fòm InfoPath, Mwen ta pòs li pou bab PANYÒL sèvè Et accès fòm. Fòm lan pwal kòmanse e jenere lè sa a yon trompeuse mesaj erreur ki t' ap m' fennèt journal evènman pou tout detay konsènan. an reyalite, mesaj pa te ekri pou journal evènman fenèt. Non, mesaj te voye pou bab PANYÒL ascii journal dyagnostik. Ou kapab foule ki anba via administrasyon an sèvis santral.

Ou bezwen prese vin kanpe sou de pye ou. Bab PANYÒL Aime pou yo ekri a fichier journal, anpil fwa Et verbosely. Sa ka ajustée men defo journal ekri konpòtman se "tout sa ke posib".

BAB PANYÒL: Mete kanpe sou pye yon lis personnalisé

Genyen anpil egzanp bon de lis personnalisé via SDK an mete kanpe sou pye. Isit la se yon lòt.

Pwoblèm biznis: Fòm InfoPath ki te fèt aux utilisateurs pou antre sou liy achte demandes. LA demande anpil moun ta dwe sekans tradisyonèl baze entier valè Et calculé otomatikman.

Solisyon biznis: Kreye yon repòtaj lis bab PANYÒL ki contenant colonnes de: "ControlField" Et "ControlValue". Kolòn valè a contient a pwochen acha bon nombre. Note ke générique a "kontwole" konvansyon D' offre pou pwochen kontwòl savann sa yo va sèvi tankou bezwen pou.

Solisyon teknik: Kreye yon sèvis entènèt ki otorize moun vin ladan pa kliyan InfoPath a. Sèvis entènèt la renvoie tounen a pwochen acha bon nombre Et à rapòte ou lajan pou lis la.

Leson Appris:

  • Lè ajoute ke sèvis entènèt sa a tankou yon sous enfòmasyon pou fòm InfoPath, Mwen te twouve li nesesè pou kouvri l' pou yon udc Et boutique li nan bibliyotèk koneksyon done.
  • Mwen tou te twouve li nesesè pou pèmèt cross domèn scripting via administrasyon an sèvis santral // gestion aplikasyon // fòm sèvè configuration.
  • Premye fwa fòm lan te eseye pou jwenn sèvis entènèt la, li pran yon moman Et sou occasion, li ta gen tan pou rekreyasyon. Mwen fiddled ak paramètres nan fòm sèvè configuration pou elaji les paramètres D' Et sa a la pou ede.

Kòd la:

itilize Sistèm;
itilize System.Web;
itilize System.Web.Services;
itilize System.Web.Services.Protocols;
itilize Microsoft.SharePoint;
itilize System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
piblik klas PoService : System.Web.Services.WebService
{
piblik PoService () {

//Supprimez apwe liy si w ap itilize fèt konpozan
//InitializeComponent();
}

/// <rezime>
/// Jwenn anpil PO pwochen nan a sharepoint po nimewo kontwòl lis.
/// Nimewo enkreman, PO a nan lis sa.
/// </rezime>
/// <cette></cette>
[WebMethod]
piblik filè GetNextPoNumber()
{
filè SpPoControlSiteName; // Non aktyèl bab PANYÒL sit la ki hôtes lis la kontwòl.
filè SpPoControlListName; // Non aktyèl bab PANYÒL lis ki gen Po kontwòl.

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

filè nextPoReqNumber = "xyzzy";

itilize (SPSite kote ki gen = nouvo SPSite(SpPoControlSiteName))
{
itilize (SPWeb Web = direksyon. OpenWeb())
{

Splist.update() currentList = web. Lis[SpPoControlListName];

foreach (SPItem controlItem nan currentList.Items)
{

Si (((filè)controlItem["ControlField"]).Fèt pou l egal("NextPoNumber"))
{
nextPoReqNumber = (filè)controlItem["ControlValue"];

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

int_nextPoReqNumber ;

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

} // Lokalize, devwa nan lekti ak à PO anpil nan lis la.


} // w ap itilize entènèt spweb = site.openweb()
} // w ap itilize kote ki gen spsite = spsite nouvo("http://localhost/mizuho")

retounen nextPoReqNumber;

}
}