İş 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;
}
}