Arkivat e Kategorisë: Moss

MOSS customization Kërkim i Avancuar — Rasti ka rëndësi në të përparuar e kërkimit XSLT

Unë nuk modifikoj përparuar e kërkimit XSLT shumë shpesh, kështu që ajo duket si unë jam ngjitje kodrat e vogla çdo kohë.

Mësimi im më i ri është ky: Rasti ka rëndësi kur referenca një kolonë. Në kërkimin tim avancuar, Unë kam kolona përkufizohet si kjo:

<rrënjë xmlns:XSi="http://www.w3.org/2001/XMLSchema-instance">
<
Kolumne>
<
Column Emër="GafTrainingInvoiceNumber" />
<
Column Emër="GafTrainingInvoiceLocation" />
<
Column Emër="WorkId"/>
<
Column Emër="Rank"/>
<
Column Emër="Titull"/>
<
Column Emër="Autor"/>
<
Column Emër="Madhësi"/>
<
Column Emër="Rrugë"/>
<
Column Emër="Përshkrim"/>
<
Column Emër="Shkruaj"/>
<
Column Emër="SITENAME"/>
<
Column Emër="CollapsingStatus"/>
<
Column Emër="HitHighlightedSummary"/>
<
Column Emër="HitHighlightedProperties"/>
<
Column Emër="Contentclass"/>
<
Column Emër="IsDocument"/>
<
Column Emër="PictureThumbnailURL"/>
</
Kolumne>
</
rrënjë>

XLST që tregon numrin e faturës dhe vendndodhjen faturë kishte qenë:

<p>
Training Invoice Number: <XSL:vlera-e zgjedh="GafTrainingInvoiceNumber"/>
<
br></br>
Training Invoice Location: <XSL:vlera-e zgjedh="GafTrainingInvoiceLocation"/>
</
p>

Megjithatë, the select has to reference the property in all lower case, si në:

<p>
Training Invoice Number: <XSL:vlera-e zgjedh="gaftraininginvoicenumber"/>
<
br></br>
Training Invoice Location: <XSL:vlera-e zgjedh="gaftraininginvoicelocation"/>
</
p>


Until I corrected that, search results showed the labels (i.e. "Training Invoice Number") but no data.

Moss / InfoPath Format Server (InfoPath 2007) drop-down list performancës

Kategoria shtesë: InfoPath

Përmbledhje: Një InfoPath 2007 formojnë të vendoset në një server MOSS ofron një drop-down list e shitësit të lidhura me një listë me porosi MOSS. Me zgjedhjen e një shitës, Rregullat caktojë vlerat në terren për një pjesë të vogël të fushave të tekstit të tilla si emri shitjes rep, adresë, qytet, shtet, zip dhe telefoni. Performanca është e tmerrshme. Vërejmë se performanca merr keq (në një mënyrë jo-lineare) për çdo fushë shtesë ne update këtë mënyrë. Dmth, nëse ne vetëm update emrin shitjes rep, ajo merr [x] Sasinë e kohës. Nëse ne update shitjes rep, address1, address2, qytet, shtet, zip, ajo merr 10 herë më të gjatë.

Zgjidhje: Shkruani një shërbim web (Kodi mostër mund të gjenden këtu) që është kaluar në emër të një shitës dhe ajo kthehet prapa detajet shitësi. Pastaj, caktojë fushat në këtë mënyrë. Edhe pse kjo duket shumë e ngadaltë, nuk kishte asnjë dallim dukshme në performancën kur kemi caktuar 1 fushë kundrejt 8 Fushat. Si një bonus shtuar, users get a cool "contacting the server" Cylon Efekti ndërsa ata presin për formën të thirret dhe të konsumojnë rezultatet shërbimit.

Moss: Përjashtim ndodhur. (Përjashtim nga HRESULT: 0x80020009 (DISP_E_EXCEPTION))

UPDATE: Ne kurrë nuk përcaktohet shkaku rrënja e këtij problemi dhe ajo kurrë nuk shfaqen përsëri.

Ne njoftim gjatë zbatimit të një faqe të zhvillimit që papritmas, dy përdoruesit janë në gjendje për të hyrë në një koleksion faqe. Ato llogaritë mund të vërtetoj në faqen kryesore, por kur u përpjekur për të hyrë në një koleksion të veçantë faqe, ata vetëm të marrë një ekran bosh. Nuk ka gabime shfaqet, vetëm një faqe bosh të bardhë.

Ne hyni në si një admin site collection dhe të përpiqemi për të shtuar një nga ata përdorues admin si një vend dhe këtë herë, upon pressing "OK", ne kemi marrë këtë mesazh:

Përjashtim ndodhur. (Përjashtim nga HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Ne kaloi disa kohë kërkime dhe kjo për fat të keq, nuk ka dalë me ndonjë gjë të dobishme. Ka pasur disa mesazhe në log diagnostik, por ajo ishte e vështirë për të pikërisht ato lidhen me këtë çështje.

Në fund, Ne fshirjes site collection dhe ri-krijuar atë dhe zgjidhur atë që.

Nëse unë kuptoj se çfarë e shkaktoi këtë në të ardhmen, Unë do update këtë post.

Moss: Iterating përmes listave doganore dhe kthimin e të dhënave për të filtruar InfoPath

Skenari Biznes:

Të sigurojë një metodë që mundëson përdoruesve për të hyrë shkresave të sakta blerjes shpejt.

Problemi Biznes:

Klienti bën biznes me qindra disa shitësit.

Vendors are "type" specifik. Kjo do të thotë që një shitës shet pajisje kompjuterike (e.g. Luginë) ose furnizimet e zyrës (e.g. Staples).

Si nuk kemi të mundësojë përdoruesit përfundimtarë të cilët krijojnë shkresave blerjes përzgjidhni një shitës të vlefshme?

Zgjidhja e Biznesit:

Differentiate vendors in the system via "type".

Enable users to select the "type" e produktit dhe pastaj të sigurojë një sërë filtruar nga shitësit të përshtatshme.

Zgjidhja teknike:

Një formë InfoPath ka qenë i dizajnuar që i mundëson përdoruesve për të hyrë shkresave blerje online.

Dy Zgjedhja InfoPath listat e kontrollit shitësi përzgjedhjes. I parë, the user selects a "purchase type". This limits a second selection list to contain only vendors that sell for that purchase type. This is a classic cascading drop-down.

Shitësit janë të ruajtura në një listë me porosi MOSS me kolona porosi për shitësi atributeve të tilla si emri, address and especially "type".

Zbatimi i një web shërbim për një klient InfoPath për të konsumuar që iterates nëpër lista shitësi porosi, returning only vendors matching a supplied "type".

Të thirret në shërbimin e internetit nëpërmjet formularit InfoPath.

Mësimet e mësuara:

  • I parë, kjo duket e nevojshme të shkoni këtë rrugë. Unë do të kishte preferuar për të bërë filtrimin tërësisht brenda InfoPath dhe nuk krijojnë asnjë funksionalitet të shërbimit të internetit këtu. Megjithatë, forma server nuk siguron aftësinë e kërkuar filtrim. We can put a rule onto a the "type" Lista e përzgjedhjes në formë të lloj ri-hapur query shitësi, por ne nuk mund të merrni atë për të punuar si duhet. Prandaj, ajo ishte e nevojshme për të zbatuar shërbimin e internetit.
  • This is a classic "cascading selection list" Problemi në botë forma InfoPath server dhe ka shumë shembuj të mirë atje që shpjegojnë se si për të zgjidhur këtë.
  • Një vlerë bosh për një kolonë në listën shitësi nuk kthehet një varg të zbrazët kur referohen si kjo: initItem["Vendor Name"]. Në vend të kësaj, ajo kthen një nul.

Disa shënime të tjera:

  • Unë kthehem një rrjet[] e shitësit, sepse kam pasur disa vështirësi kthimin e një ArrayList. InfoPath u ankuar në lidhje me të dhe unë nuk kanë kohë ose preferencë për të luftuar mbi të. Kjo, sigurisht, vendos një limit artificiale të numrit të përgjithshëm të shitësit. Ajo gjithashtu detyruar mua për të zbatuar një trim() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath nuk kujdeset, por ajo nagged në mua. (Përsëri, kjo ishte më e lehtë se sa duke luftuar InfoPath mbi ArrayLists).
  • Unë zbatuar një GetSpecificVendorByName() funksionojnë si edhe, e cila mund të jetë udhëzuese.

Kodi:

përdorim Sistem;
përdorim System.Web;
përdorim System.Web.Services;
përdorim System.Web.Services.Protocols;
përdorim Microsoft.SharePoint;
përdorim System.Configuration;

/// <përmbledhje>
///
Vendor Service: Provides vendor related services which today are consumed by an infopath client form.
///
/// History:
/// ——–
/// 07/24/07: Initial coding, Paul J. Gavin of Conchango.
///
/// </përmbledhje>
[Webservice(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publik klasë VendorService : System.Web.Services.Webservice
{

/// <përmbledhje>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </përmbledhje>
publik klasë Shitës
{
publik Shitës() { }

publik Shitës(Pështyj initItem)
{
nëse (! (initItem["Vendor Name"] == zero)) VendorName = initItem["Vendor Name"].ToString();
nëse (! (initItem["Address 1"] == zero)) VendorAddress1 = initItem["Address 1"].ToString();
nëse (! (initItem["Address 2"] == zero)) VendorAddress2 = initItem["Address 2"].ToString();
nëse (! (initItem["City"] == zero)) VendorCity = initItem["City"].ToString();
nëse (! (initItem["VendorPhone"] == zero)) VendorPhone = initItem["VendorPhone"].ToString();
nëse (! (initItem["PurchaseType"] == zero)) VendorType = initItem["PurchaseType"].ToString();
nëse (! (initItem["State"] == zero)) VendorState = initItem["State"].ToString();
nëse (! (initItem["Zip"] == zero)) VendorZip = initItem["Zip"].ToString();
nëse (!(initItem["Fax"] == zero)) VendorFax = initItem["Fax"].ToString();
nëse (!(initItem["SalesRepName"] == zero)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}

publik int VendorItemId;
publik varg VendorName;
publik varg VendorAddress1;
publik varg VendorAddress2;
publik varg VendorCity;
publik varg VendorState;
publik varg VendorZip;
publik varg VendorPhone;
publik varg VendorType;
publik varg VendorSalesRepName;
publik varg VendorFax;
}

publik VendorService () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

privat Shitës[] GenerateTestVendors()
{
Shitës[] resultList;
resultList = i ri Shitës[100];

Shitës v;
v = i ri Shitës();
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 = i ri Shitës();

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 = i ri Shitës();
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;

kthehem resultList;

}

[WebMethod]
publik Shitës GetSpecificVendorById(int vendorId)
{
varg SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.

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

përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{

përdorim (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

Pështyj specificItem = currentList.Items[vendorId];

kthehem i ri Shitës(specificItem);

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

}

[WebMethod]
// Assumes that the vendor name is unique, from a business perspective
publik Shitës GetSpecificVendorByVendorName(varg vendorName)
{
varg SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.

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

përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{
përdorim (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

foreach (Pështyj vendorItem currentList.Items)
{
nëse (vendorItem["Vendor Name"] == zero) vazhdoj;

nëse (vendorItem["Vendor Name"].ToString().Është e barabartë me(vendorName))
kthehem i ri Shitës(vendorItem);
}

Shitës v = i ri Shitës();
v.VendorPhone = "not found: " + vendorName;

kthehem v;

kthehem zero;

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

} // metodë

[WebMethod]
publik Shitës[] GetVendorsOfType (varg lloj filtri)
{

varg SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
varg SpVendorListName; // Name of the actual MOSS list containing vendors.

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

Shitës[] resultList;
int vendorIndex = 0;
resultList = i ri Shitës[1000];

// Initialize the list with a default friendly message.
Shitës v = i ri Shitës();
v.VendorName = "Select a vendor type to populate this list.";
resultList[0] = v;

// Convert the filter to lower case for easier string comparison later.
filterType = filterType.ToLower();

// If the filter type passed is "test", generate some simple data.
#rajon Filter type = "test"
nëse (filterType.Equals("test"))
kthehem GenerateTestVendors();
#endregion

nëse (i vërtetë)
{
përdorim (SPSite site = i ri SPSite(SpVendorSiteName))
{
përdorim (SPWeb web = site.OpenWeb())
{

v = zero;

SPList currentList = web.Lists[SpVendorListName];

// Iterate through all the items in the vendor list.
foreach (Pështyj vendorItem currentList.Items)
{

varg lowerVendorType;

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

nëse (lowerVendorType.Equals(lloj filtri))
{
resultList[vendorIndex ] = i ri Shitës(vendorItem);
}
} // iterating thru all the vendors in the list


kthehem TrimVendorArray(vendorIndex, resultList);
// return resultList;

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

} // if true

kthehem zero;
}

privat Shitës[] TrimVendorArray(int newsize, Shitës[] originalVendorArray)
{
Shitës[] trimmedArray;

nëse (newsize == 0) newsize = 1;
trimmedArray = i ri Shitës[newsize];

int currentCounter = 0;

për (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

kthehem trimmedArray;

}
}