Mga Archive ng kategorya: Lumot

Moss masusing paghahanap pagpapasadya — Kaso ang matter sa masusing paghahanap XSLT

Hindi ko baguhin ang masusing paghahanap XSLT napakadalas, kaya ito tila ako climbing maliit na burol sa bawat oras.

Aking pinakabagong araling ito ay: Kaso mahalaga kapag tumutukoy sa isang hanay. Sa aking masusing paghahanap, Ko ang mga haligi tinukoy bilang na ito:

<ugat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Mga Haligi>
<
Column Pangalan="GafTrainingInvoiceNumber" />
<
Column Pangalan="GafTrainingInvoiceLocation" />
<
Column Pangalan="WorkId"/>
<
Column Pangalan="Ranggo"/>
<
Column Pangalan="Pamagat"/>
<
Column Pangalan="May-akda"/>
<
Column Pangalan="Laki"/>
<
Column Pangalan="Landas"/>
<
Column Pangalan="Paglalarawan"/>
<
Column Pangalan="Sumulat"/>
<
Column Pangalan="SiteName"/>
<
Column Pangalan="CollapsingStatus"/>
<
Column Pangalan="HitHighlightedSummary"/>
<
Column Pangalan="HitHighlightedProperties"/>
<
Column Pangalan="Contentclass"/>
<
Column Pangalan="IsDocument"/>
<
Column Pangalan="PictureThumbnailURL"/>
</
Mga Haligi>
</
ugat>

Ang XLST na nagpapakita ng mga numero ng invoice at invoice lokasyon ay hindi naging:

<p>
Training Invoice Number: <xsl:halaga-ng piliin="GafTrainingInvoiceNumber"/>
<
br></br>
Training Invoice Location: <xsl:halaga-ng piliin="GafTrainingInvoiceLocation"/>
</
p>

Gayunman, the select has to reference the property in all lower case, tulad ng sa:

<p>
Training Invoice Number: <xsl:halaga-ng piliin="gaftraininginvoicenumber"/>
<
br></br>
Training Invoice Location: <xsl:halaga-ng piliin="gaftraininginvoicelocation"/>
</
p>


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

Lumot / InfoPath Form Server (InfoPath 2007) drop-down na listahan ng pagganap

Karagdagang mga kategorya: InfoPath

Buod: Isang InfoPath 2007 bumuo deploy sa isang server Moss ay nagbibigay ng isang drop-down na listahan ng mga vendor na nakatali sa isang pasadyang listahan Moss. Sa pagpili ng isang vendor, panuntunan magtalaga mga halaga ng patlang sa isang maliit na bilang ng mga patlang ng teksto tulad ng sales rep pangalan, tirahan, lungsod, estado, zip at telepono. Pagganap ay kakila-kilabot. Napansin namin na pagganap ay makakakuha ng mas masahol pa (in a non-linear fashion) para sa bawat karagdagang patlang update namin ito paraan. Ibig sabihin, kung lang namin i-update ang sales rep pangalan, ito ay tumatagal ng [x] tagal ng oras. Kung update namin sales rep, address1, address2, lungsod, estado, humaging, ito ay tumatagal ng 10 beses na mas mahaba.

Solusyon: Magsulat ng isang web serbisyo (sample code na maaaring matagpuan dito) iyon ay naipasa sa ang pangalan ng isang vendor at ito ay nagbabalik pabalik ang mga detalye ng vendor. Pagkatapos, magtalaga ng mga patlang na ito paraan. Bagaman ito masyadong Mukhang mabagal, walang discernable pagkakaiba sa pagganap kapag kami itinalaga 1 field kumpara sa 8 patlang. Bilang karagdagang bonus, users get a cool "contacting the server" Cylon epekto habang naghihintay sila para sa form na paandarin at gumamit ng mga resulta ng serbisyo.

Lumot: Exception naganap. (Exception mula HRESULT: 0x80020009 (DISP_E_EXCEPTION))

I-UPDATE: Kami ay hindi kailanman natukoy sa root sanhi ng problemang ito at ito ay hindi kailanman palitawin muli.

Napansin namin sa panahon ng pagpapatupad ng isang pag-unlad ng site na bigla, dalawang gumagamit ay hindi maka-access ang isang site koleksyon. Mga account na iyon ay maaaring patunayan sa pangunahing site, ngunit kapag sinusubukang i-access ang isang partikular na koleksyon site, lang nila makakuha ng isang blangko screen. Walang mga error ipinapakita, lamang ng isang puting blangko pahina.

Kami mag-log in bilang isang admin ng site koleksyon at subukan upang magdagdag ng isa sa mga gumagamit na iyon bilang isang admin ng site at oras na ito, upon pressing "OK", makuha namin ang mensaheng ito:

Exception naganap. (Exception mula HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Namin na ginugol ng ilang oras pagsasaliksik na ito at sa kasamaang-palad, Hindi makabuo ng anumang bagay na kapaki-pakinabang. Nagkaroon ng mga mensahe sa mga diagnostic na log, ngunit ito ay mabuti upang eksaktong kaugnayan ang mga ito sa ang isyu na ito.

Sa katapusan, kami pagtanggal sa site koleksyon at muling lumikha nito at na malutas ito.

Kung malaman ko kung ano ang sanhi ito sa hinaharap, Kukunin ko i-update ang post na ito.

Lumot: Iterating sa pamamagitan ng mga pasadyang mga listahan at bumabalik na-filter na data upang InfoPath

Negosyo Sitwasyon:

Magbigay ng isang pamamaraan na nagbibigay-daan sa mga gumagamit upang ipasok ang tumpak na requisitions pagbili mabilis.

Business problema:

Client ang ginagawa ng negosyo na may ilang daang mga vendor.

Vendors are "type" tiyak. Nangangahulugan ito na ang isang vendor nagbebenta ng computer na kagamitan (e.g. Labak na may gubat) o opisina supplies (e.g. Staples).

Paano namin paganahin ang end user na lumikha requisitions pagbili pumili ng wastong vendor?

Business Solusyon:

Differentiate vendors in the system via "type".

Enable users to select the "type" ng produkto at pagkatapos ay magbigay ng isang filter na hanay ng mga naaangkop na mga tagabenta.

Teknikal na Solusyon:

Isang InfoPath form na ay nai-dinisenyo na nagbibigay-daan sa mga gumagamit upang ipasok ang mga online na pagbili requisitions.

Dalawang InfoPath seleksyon ng mga listahan kontrol vendor seleksyon. Una, 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.

Vendor ay naka-imbak sa isang listahan ng mga custom Moss na may pasadyang hanay para sa mga katangian ng vendor tulad ng pangalan, address and especially "type".

Ipatupad ang isang web serbisyo para sa isang InfoPath client upang ubusin na iterates sa pamamagitan ng mga pasadyang listahan ng vendor, returning only vendors matching a supplied "type".

Tumawag sa diyos ang serbisyo sa web sa pamamagitan ng form InfoPath.

Aralin natutunan:

  • Una, parang ang kinakailangan upang pumunta ito ruta. Gusto ko na mas gusto na gawin ang pag-filter sa loob ng ganap na InfoPath at hindi gumawa ng anumang mga pag-andar ng web service dito. Gayunman, mga form server ay hindi nagbibigay ng mga kinakailangang pag-filter ng kakayahan. We can put a rule onto a the "type" pagpili listahan sa form upang ayusin ng muling buksan ang query vendor, ngunit hindi namin maaaring makakuha ng mga ito upang gumana nang maayos. Samakatwid, iyon ay kinakailangan upang ipatupad ang mga serbisyo sa web.
  • This is a classic "cascading selection list" problema sa InfoPath mundo mga form server at mayroong maraming mga mahusay na mga halimbawa out doon na ipaliwanag kung paano malutas ito.
  • Ang isang blangko ang halaga para sa isang hanay sa listahan ng vendor ay hindi nagbabalik ng isang walang laman na string kapag reference na tulad nito: initItem["Vendor Name"]. Sa halip, ito ay nagbabalik ng null.

Ang ilang mga iba pang mga Tala:

  • Bumalik akong isang array[] ng mga vendor dahil ako ay may ilang mga kahirapan bumabalik isang ArrayList. InfoPath ay nagrereklamo tungkol dito at hindi ko magkaroon ng oras o ang pagkahilig upang labanan sa ibabaw nito. Ito, mangyari pa, naglalagay ng artipisyal na hangganan ang kabuuang bilang ng mga vendor. Mayroon din napilitang akin upang ipatupad ang isang trim() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath ay hindi mahalaga, ngunit ito nagged sa akin. (Muli, ito ay mas madali kaysa sa pakikipaglaban sa ibabaw InfoPath ArrayLists).
  • Ako ipinatupad ng GetSpecificVendorByName() function na pati na rin, na maaaring may itinuturo.

Ang code:

paggamit Sistema;
paggamit System.Web;
paggamit System.Web.Services;
paggamit System.Web.Services.Protocols;
paggamit Microsoft.SharePoint;
paggamit System.Configuration;

/// <buod>
///
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.
///
/// </buod>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publiko klase VendorService : System.Web.Services.WebService
{

/// <buod>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </buod>
publiko klase Vendor
{
publiko Vendor() { }

publiko Vendor(Magtuhog initItem)
{
kung (! (initItem["Vendor Name"] == sero)) VendorName = initItem["Vendor Name"].ToString();
kung (! (initItem["Address 1"] == sero)) VendorAddress1 = initItem["Address 1"].ToString();
kung (! (initItem["Address 2"] == sero)) VendorAddress2 = initItem["Address 2"].ToString();
kung (! (initItem["City"] == sero)) VendorCity = initItem["City"].ToString();
kung (! (initItem["VendorPhone"] == sero)) VendorPhone = initItem["VendorPhone"].ToString();
kung (! (initItem["PurchaseType"] == sero)) VendorType = initItem["PurchaseType"].ToString();
kung (! (initItem["State"] == sero)) VendorState = initItem["State"].ToString();
kung (! (initItem["Zip"] == sero)) VendorZip = initItem["Zip"].ToString();
kung (!(initItem["Fax"] == sero)) VendorFax = initItem["Fax"].ToString();
kung (!(initItem["SalesRepName"] == sero)) VendorSalesRepName = initItem["SalesRepName"].ToString();

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

publiko int VendorItemId;
publiko pisi VendorName;
publiko pisi VendorAddress1;
publiko pisi VendorAddress2;
publiko pisi VendorCity;
publiko pisi VendorState;
publiko pisi VendorZip;
publiko pisi VendorPhone;
publiko pisi VendorType;
publiko pisi VendorSalesRepName;
publiko pisi VendorFax;
}

publiko VendorService () {

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

pribado Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = bago Vendor[100];

Vendor v;
v = bago Vendor();
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 = bago Vendor();

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 = bago Vendor();
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;

bumalik resultList;

}

[WebMethod]
publiko Vendor GetSpecificVendorById(int vendorId)
{
pisi SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
pisi SpVendorListName; // Name of the actual MOSS list containing vendors.

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

paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{

paggamit (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

Magtuhog specificItem = currentList.Items[vendorId];

bumalik bago Vendor(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
publiko Vendor GetSpecificVendorByVendorName(pisi vendorName)
{
pisi SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
pisi SpVendorListName; // Name of the actual MOSS list containing vendors.

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

paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{
paggamit (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

foreach (Magtuhog vendorItem sa currentList.Items)
{
kung (vendorItem["Vendor Name"] == sero) magpatuloy;

kung (vendorItem["Vendor Name"].ToString().Kapantay(vendorName))
bumalik bago Vendor(vendorItem);
}

Vendor v = bago Vendor();
v.VendorPhone = "not found: " + vendorName;

bumalik v;

bumalik sero;

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

} // pamamaraan

[WebMethod]
publiko Vendor[] GetVendorsOfType (pisi uri ng filter)
{

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

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

Vendor[] resultList;
int vendorIndex = 0;
resultList = bago Vendor[1000];

// Initialize the list with a default friendly message.
Vendor v = bago Vendor();
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.
#rehiyon Filter type = "test"
kung (filterType.Equals("test"))
bumalik GenerateTestVendors();
#endregion

kung (totoo)
{
paggamit (SPSite site = bago SPSite(SpVendorSiteName))
{
paggamit (SPWeb web = site.OpenWeb())
{

v = sero;

SPList currentList = web.Lists[SpVendorListName];

// Iterate through all the items in the vendor list.
foreach (Magtuhog vendorItem sa currentList.Items)
{

pisi lowerVendorType;

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

kung (lowerVendorType.Equals(uri ng filter))
{
resultList[vendorIndex ] = bago Vendor(vendorItem);
}
} // iterating thru all the vendors in the list


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

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

} // if true

bumalik sero;
}

pribado Vendor[] TrimVendorArray(int newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;

kung (newsize == 0) newsize = 1;
trimmedArray = bago Vendor[newsize];

int currentCounter = 0;

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

bumalik trimmedArray;

}
}