Aylık Arşivler: Temmuz 2007

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;

}
}

YOSUN: InfoPath hata ayıklama gözlem

InfoPath formu sunucu hata iletileri yanıltıcı.

InfoPath formu gelişimi sırasında, MOSS sunucuya göndermek ve forma ulaşmak istiyorum. Form yükleme ve ayrıntılı bilgi için windows olay günlüğüne bana işaret yanıltıcı bir hata iletisi oluşturmak başlamak istiyorum. Aslında, hiçbir mesaj windows olay günlüğüne yazılan. Daha doğrusu, MOSS ASCII tanılama günlüğüne ileti gönderildi. Bunun üzerinden Merkezi Hizmetler Yönetim izleyebilirsiniz.

Ayaklarının üstünde hızlı olmak gerekir. MOSS günlük dosyasına yazmak seviyor., sık sık ve verbosely. Bu-var olmak süs ama davranış yazma varsayılan günlük olduğu "her şey mümkün olan en kısa sürede".

YOSUN: Özel bir liste güncelleştiriliyor

Orada birçok iyi örnek SDK ile özel listeleri güncelleme. İşte yeni bir.

İş sorunu: InfoPath formu online girmek için olanaklı kılmak kullanıcı talepleri satın tasarlanmıştır. PO sayı-meli var olmak geleneksel sıra talep tamsayı değerlerine dayalı ve otomatik olarak hesaplanan.

İş çözümü: İki sütun içeren özel bir yosun liste oluşturma: "ControlField" ve "ControlValue". Değer sütununda sonraki satın alma talep numarası içerir. Genel "kontrol unutmayın" gerektiğinde kullanılabilir gelecekteki denetim alanları için adlandırma kuralı sağlar.

Teknik çözüm: InfoPath istemci tarafından erişilen bir web servisi yaratmak. Web hizmeti bir sonraki satın alma talep numarası geri döndürür ve liste değerini güncelleştirir.

Öğrenilen dersler:

  • Bu web hizmeti veri kaynağı olarak InfoPath formu ekleyerek., Udc için dönüştürmek ve bir veri bağlantısı kitaplığında depolamak gerekli buldum.
  • Ayrıca üzerinden Merkezi Hizmetler Yönetim etki alanları arası komut dosyası çalıştırma etkinleştirmek gerekli bulundu // Uygulama Yönetimi // Form sunucu yapılandırması.
  • Formu web hizmetine erişmek için çalıştı ilk kez, bir süre alır ve zaman zaman, o zaman dışarı istiyorsunuz. Zaman aşımı ayarları'nı form sunucu yapılandırma ayarları ile oynuyordu ve yardımcı olacak gibiydi.

Kodu:

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

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
Genel sınıf PoService : System.Web.Services.WebService
{
Genel PoService () {

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

/// <Özet>
/// Sonraki PO numarası sharepoint po numarası kontrol listesi elde.
/// Bu listede artışı PO numarası.
/// </Özet>
/// <döndürür></döndürür>
[WebMethod]
Genel dize GetNextPoNumber()
{
dize SpPoControlSiteName; // PO denetim listesi ev sahipliği yapan gerçek MOSS sitenin adı.
dize SpPoControlListName; // Po denetimi içeren gerçek MOSS listesi adı.

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

dize nextPoReqNumber = "xyzzy";

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

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

foreach (SPItem controlItem içinde currentList.Items)
{

Eğer (((dize)controlItem["ControlField"]).Eşittir("NextPoNumber"))
{
nextPoReqNumber = (dize)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Dönüştürme.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

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

} // Bulma, okuma ve listedeki PO numarası güncelleştirme.


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

geri dönmek nextPoReqNumber;

}
}