Kategori Arşivleri: YOSUN

Gelişmiş Arama özelleştirme yosun — Durum gelişmiş aramada XSLT fark etmez

Ben çok sık gelişmiş arama XSLT değiştirmeyin, Ben her zaman küçük tepeleri tırmanma gibi görünüyor bu yüzden.

Bu benim yeni derstir: Bir sütuna başvururken durumda önemli. Gelişmiş arama, I-si olmak bu kadar tanımlanmış sütunlar:

<kök xmlns:XSI="http://www.w3.org/2001/XMLSchema-instance">
<
Sütunlar>
<
Sütun Adı="GafTrainingInvoiceNumber" />
<
Sütun Adı="GafTrainingInvoiceLocation" />
<
Sütun Adı="Çalışma kimliği"/>
<
Sütun Adı="Sırası"/>
<
Sütun Adı="Başlık"/>
<
Sütun Adı="Yazar"/>
<
Sütun Adı="Boyutu"/>
<
Sütun Adı="Yolu"/>
<
Sütun Adı="Açıklama"/>
<
Sütun Adı="Yazma"/>
<
Sütun Adı="Siteadı"/>
<
Sütun Adı="CollapsingStatus"/>
<
Sütun Adı="HitHighlightedSummary"/>
<
Sütun Adı="HitHighlightedProperties"/>
<
Sütun Adı="ContentClass"/>
<
Sütun Adı="IsDocument"/>
<
Sütun Adı="PictureThumbnailURL"/>
</
Sütunlar>
</
kök>

Fatura numarası ve fatura konumu görüntüler XLST olmuştu:

<p>
Eğitim fatura numarası: <XSL:value-of seçin="GafTrainingInvoiceNumber"/>
<
br></br>
Eğitim fatura yeri: <XSL:value-of seçin="GafTrainingInvoiceLocation"/>
</
p>

Ancak, Hepsi küçük harf özelliğinde başvurmak Seç vardır, olarak:

<p>
Eğitim fatura numarası: <XSL:value-of seçin="gaftraininginvoicenumber"/>
<
br></br>
Eğitim fatura yeri: <XSL:value-of seçin="gaftraininginvoicelocation"/>
</
p>


Bu düzeltilmiş kadar, Arama sonuçları etiketleri gösterdi (Yani. "Eğitim fatura numarası") veri yok ama.

YOSUN / InfoPath Forms Server (InfoPath 2007) aşağı açılan liste performansı

Ek Kategori: InfoPath

Özet: InfoPath 2007 MOSS sunucuya dağıtmak için form özel yosun listeye bağlı satıcılar aþaðý açýlan listesini sağlar. Satıcı seçme üzerine, kurallar, metin alanları satış temsilcisi adı gibi bir avuç alan değerlerini atayın., Adres, Şehir, Devlet, zip ve telefon. Performans korkunç. Biz fark performans kötüleşiyor (Doğrusal olmayan bir biçimde) her ek alan için biz bu şekilde güncelleyin.. Yani, Eğer sadece satış temsilcisi adı güncelleştirin, o alır [x] bir süre. Satış temsilcisi güncelleştirirseniz, Adres1, Adres2, Şehir, Devlet, ZIP, o alır 10 kat uzun.

Çözüm: Bir web servisi yazma (örnek kodu bulabilirsiniz Burada) bir satıcı adına geçti ve satıcı tafsilât geri döndürür. O zaman, Bu şekilde alanları atama. Bu da görünse de yavaş, Biz atanmış hiçbir discernable fark performans vardı 1 alan karşı 8 alanları. Ek olarak, kullanıcılar "sunucusuna bağlanılıyor serin olsun" Cylon formu çağırmak ve hizmet sonuçları beklerken etkisi.

YOSUN: Özel durum oluştu. (HRESULT özel durum: 0x 80020009 (DISP_E_EXCEPTION))

GÜNCELLEŞTİRME: Tekrar bu sorunu ve bu asla yüzey kök neden hiç düşünmedik.

Biz geliştirme site uygulanması sırasında o aniden fark, iki kullanıcı bir site koleksiyonu erişemiyor. Bu hesapları ana siteye kimlik doğrulaması yapabilir, Ama belirli site koleksiyonu erişmeye çalışırken, Onlar sadece boş bir ekran olsun. Görüntülenen hata, Sadece boş bir beyaz sayfa.

Bir site koleksiyonu yönetici oturum açın ve bu kullanıcıların site admin ve bu sefer ekleyin çalışın, "Tamam" tuşuna basarak üzerine, Bu mesajı alır:

Özel durum oluştu. (HRESULT özel durum: 0x 80020009 (DISP_E_EXCEPTION))

Bu araştırma biraz zaman geçirdim ve ne yazık ki, işe yarar bir şey çıkmadı. Tanılama günlüğüne bazı mesajları vardı., Ama tam olarak onlara bu konuyla ilişkilendirmek zordu.

Sonunda, Biz site koleksiyonunun silinmesi ve yeniden oluşturulması ve çözüldü.

Eğer ı biçim ne gelecekte bunun nedeni, Bu posta güncelleriz.

YOSUN: Özel listeler aracılığıyla yineleme ve InfoPath için süzülmüş veri döndürme

İş senaryosu:

Hızlı bir şekilde doğru satınalma talepleri kullanıcılarının kullanmasına izin veren bir yöntem sağlamak.

İş sorunu:

İstemci iş ile birkaç yüz satıcı yapar..

Satıcılar "türü vardır." belirli. Bu, bir satıcı bilgisayar ekipmanı satan anlamına gelir (e.g. Dell) veya büro malzemeleri (e.g. Zımba).

Nasıl satın alma talepleri basıp geçerli satıcı oluşturun kullanıcıların etkinleştirebilirim?

İş çözümü:

"Type" yolu ile sistem satıcıları ayırt.

Kullanıcıların "türü seçmek için" ürün ve uygun satıcıları filtre uygulanan bir dizi sağlar.

Teknik çözüm:

InfoPath formu online girmek için olanaklı kılmak kullanıcı talepleri satın tasarlanmıştır.

İki InfoPath seçim listesi Tedarikçi seçimi denetlemek. İlk, "satınalma tipi" kullanıcı seçer. Bu sınırlar yalnızca Satınalma türü için satmak satıcıları içeren ikinci bir seçim listesi. Bu bir klasik basamaklı açılır olduğunu.

MOSS özel listesi olan özel sütun adı gibi öznitelikleri satıcı için Satıcılar depolanır, Adres ve özellikle "türü".

Uygulama bir web hizmeti için bu kullanmak bir InfoPath istemcisi özel satıcı listesi sırayla dolaşır., verilen bir "tip" eşleştirme yalnızca satıcılar döndürülüyor.

InfoPath formu aracılığıyla web hizmetini çağırmak.

Öğrenilen dersler:

  • İlk, Bu rota gitmek için gerekli gibi görünüyor. Ben tamamen InfoPath içinde filtreleme yapmak ve herhangi bir web hizmeti işlevselliği burada değil oluşturmak tercih ederdim. Ancak, Formlar Sunucusu gerekli filtreleme yeteneği sağlamaz.. Bir kural üzerine koyabilirsiniz bir "türü" seçim listesi formunda, bir nevi satıcı sorguyu yeniden açın, Ama biz cant'almak o doğru çalışması için. Bu nedenle, web hizmeti uygulaması için gerekli.
  • Bu klasik "basamaklama seçimi listesidir" InfoPath uygulamasında sorun server dünya oluşturur ve bunu çözmek nasıl açıklayan birçok iyi örnekler var.
  • Satıcı listesindeki bir sütun için boş bir değer boş bir dize bu şekilde başvurulan döndürmüyor: initItem["Satıcı adı"]. Bunun yerine, bir null döndürüyor.

Diğer bazı notlar:

  • Bir dizi döndürür[] satıcıların bir ArrayList dönen bazı zorluk vardı çünkü. InfoPath bu konuda şikayetçi olduğunu ve zaman ya da eğim üzerine kavga yoktu. Bu, Elbette, Satıcı sayısı yapay bir sınır koyar. Ayrıca bana bir trim uygulamaya mecbur() yöntemi dizi üzerinde dönen üzülürüm çünkü geri 100 ün boş satıcıların. InfoPath umurunda değil, Ama bana nagged. (Tekrar, Bu ArrayLists üzerinde InfoPath mücadele daha kolaydı).
  • Bir GetSpecificVendorByName uygulanan() işlev de, hangi-ebilmek var olmak eğitici.

Kodu:

kullanma Sistem;
kullanma System.Web;
kullanma System.Web.Services;
kullanma System.Web.Services.Protocols;
kullanma Microsoft.SharePoint;
kullanma System.Configuration;

/// <Özet>
///
Satıcı hizmeti: Bugün InfoPath istemci formu tarafından tüketilmesi ile ilgili satıcı hizmetleri sağlar.
///
/// Geçmiş:
/// ——–
/// 07/24/07: İlk kodlama, Paul J. Gavin Conchango.
///
/// </Özet>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
Genel sınıf VendorService : System.Web.Services.WebService
{

/// <Özet>
/// MSUSA tarafından tutulan özel sharepoint listesinden bir satıcı temsil eder.
/// </Özet>
Genel sınıf Satıcı
{
Genel Satıcı() { }

Genel Satıcı(SPItem initItem)
{
Eğer (! (initItem["Satıcı adı"] == NULL)) SatıcıAdı initItem =["Satıcı adı"].ToString();
Eğer (! (initItem["Adres 1"] == NULL)) VendorAddress1 initItem =["Adres 1"].ToString();
Eğer (! (initItem["Adres 2"] == NULL)) VendorAddress2 initItem =["Adres 2"].ToString();
Eğer (! (initItem["City"] == NULL)) VendorCity initItem =["City"].ToString();
Eğer (! (initItem["VendorPhone"] == NULL)) VendorPhone initItem =["VendorPhone"].ToString();
Eğer (! (initItem["PurchaseType"] == NULL)) VendorType initItem =["PurchaseType"].ToString();
Eğer (! (initItem["Devlet"] == NULL)) VendorState initItem =["Devlet"].ToString();
Eğer (! (initItem["ZIP"] == NULL)) VendorZip initItem =["ZIP"].ToString();
Eğer (!(initItem["Faks"] == NULL)) VendorFax initItem =["Faks"].ToString();
Eğer (!(initItem["SalesRepName"] == NULL)) VendorSalesRepName initItem =["SalesRepName"].ToString();

VendorItemId initItem.ID =; // MOSS ile tutulan benzersiz kimliği.
}

Genel int VendorItemId;
Genel dize SatıcıAdı;
Genel dize VendorAddress1;
Genel dize VendorAddress2;
Genel dize VendorCity;
Genel dize VendorState;
Genel dize VendorZip;
Genel dize VendorPhone;
Genel dize VendorType;
Genel dize VendorSalesRepName;
Genel dize VendorFax;
}

Genel VendorService () {

//Eğer istimal ertesi gün içini kaplamak bileşenleri tasarlanmış uncomment
//InitializeComponent();
}

Özel Satıcı[] GenerateTestVendors()
{
Satıcı[] resultList;
resultList = Yeni Satıcı[100];

Satıcı v;
v = Yeni Satıcı();
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 = Yeni Satıcı();

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 = Yeni Satıcı();
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 =;

geri dönmek resultList;

}

[WebMethod]
Genel Satıcı GetSpecificVendorById(int VendorID)
{
dize SpVendorSiteName; // Satıcı özel liste ev sahipliği yapan gerçek MOSS sitenin adı.
dize SpVendorListName; // Listenin adı satıcıları içeren gerçek MOSS.

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

kullanma (SPSite Site = Yeni SPSite(SpVendorSiteName))
{

kullanma (SPWeb Web sitesi =. OpenWeb())
{

SPList.Update() currentList web =. Listeler[SpVendorListName];

SPItem specificItem currentList.Items =[VendorID];

geri dönmek Yeni Satıcı(specificItem);

} // SPWeb web kullanarak site.openweb =()
} // SPSite sitesini kullanarak yeni spsite =("http://localhost/mizuho")

}

[WebMethod]
// Satıcı adı benzersiz olduğunu varsayar., bir işletme açısından
Genel Satıcı GetSpecificVendorByVendorName(dize olmak)
{
dize SpVendorSiteName; // Satıcı özel liste ev sahipliği yapan gerçek MOSS sitenin adı.
dize SpVendorListName; // Listenin adı satıcıları içeren gerçek MOSS.

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

kullanma (SPSite Site = Yeni SPSite(SpVendorSiteName))
{
kullanma (SPWeb Web sitesi =. OpenWeb())
{

SPList.Update() currentList web =. Listeler[SpVendorListName];

foreach (SPItem vendorItem içinde currentList.Items)
{
Eğer (vendorItem["Satıcı adı"] == NULL) devam etmek;

Eğer (vendorItem["Satıcı adı"].ToString().Eşittir(olmak))
geri dönmek Yeni Satıcı(vendorItem);
}

Satıcı v = Yeni Satıcı();
v.VendorPhone = "bulunamadı: " + olmak;

geri dönmek v;

geri dönmek NULL;

} // SPWeb web kullanarak site.openweb =()
} // SPSite sitesini kullanarak yeni spsite =("http://localhost/mizuho")

} // yöntemi

[WebMethod]
Genel Satıcı[] GetVendorsOfType (dize filterType)
{

dize SpVendorSiteName; // T ev sahipliği yapan gerçek MOSS sitenin adı
o satıcı özel liste.
dize SpVendorListName; // Listenin adı satıcıları içeren gerçek MOSS.

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

Satıcı[] resultList;
int vendorIndex = 0;
resultList = Yeni Satıcı[1000];

// Varsayılan bir dostu ileti listesiyle başlatılamıyor.
Satıcı v = Yeni Satıcı();
v.VendorName = "Bu liste doldurmak için bir satıcı türünü seçin.";
resultList[0] v =;

// Daha sonra daha kolay dize karşılaştırma için daha düşük bir durum için filtre dönüştürmek.
filterType filterType.ToLower =();

// Filtre türü geçti ise, "test", bazı basit veri oluşturmak.
#Bölge Filtre türü "test ="
Eğer (filterType. eşittir("testi"))
geri dönmek GenerateTestVendors();
#endregion

Eğer (TRUE)
{
kullanma (SPSite Site = Yeni SPSite(SpVendorSiteName))
{
kullanma (SPWeb Web sitesi =. OpenWeb())
{

v = NULL;

SPList.Update() currentList web =. Listeler[SpVendorListName];

// Satıcı listedeki tüm öğeleri arasında yineleme.
foreach (SPItem vendorItem içinde currentList.Items)
{

dize lowerVendorType;

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

Eğer (Eşittir lowerVendorType.(filterType))
{
resultList[vendorIndex ] = Yeni Satıcı(vendorItem);
}
} // Listedeki tüm satıcılar aracılığıyla yineleme


geri dönmek TrimVendorArray(vendorIndex, resultList);
// resultList dönmek;

} // SPWeb web kullanarak site.openweb =()
} // SPSite sitesini kullanarak yeni spsite =("http://localhost/mizuho")

} // TRUE ise

geri dönmek NULL;
}

Özel Satıcı[] TrimVendorArray(int newsize, Satıcı[] originalVendorArray)
{
Satıcı[] trimmedArray;

Eğer (newsize == 0) newsize = 1;
trimmedArray = Yeni Satıcı[newsize];

int currentCounter = 0;

için (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] originalVendorArray =[currentCounter];
}

geri dönmek trimmedArray;

}
}