Има много добри примери за актуализиране на списъци по избор чрез SDK. Ето още един.
Бизнес проблем: InfoPath формуляр е проектиран, че позволява на потребителите да въведете онлайн покупка искания. PO заявки номера трябва да бъде традиционно последователност базирани целочислени стойности и изчислява автоматично.
Бизнес решение: Създаване на потребителски списък на Мос, съдържащ две колони: "ControlField" и "ControlValue". Стойност на колоната съдържа следващия номер на заявка за покупка. Обърнете внимание, че родово "контрол" именуване конвенция предвижда бъдещи контрол полета, които могат да се използват, ако е необходимо.
Техническо решение: Създаване на уеб услуга, достъпна на InfoPath клиент. Уеб услугата връща обратно следващия номер на заявка за покупка и актуализира стойността на списъка.
Поуките:
- При добавянето на тази уеб услуга като източник на данни към формуляра на InfoPath, Открих, че е необходимо да го конвертирате в udc и да го съхранява в библиотека за връзка с данни.
- Аз също, че е необходимо да разрешите кръст скриптове чрез централните служби администрация // управление на приложения // форма сървър конфигурация.
- Първи път формуляра се опита за достъп до уеб услугата, отнема известно време и по повод, Тя ще време вън. Аз fiddled с настройките в конфигурацията на сървъра на формата за разширяване на настройките на изчакване и този изглеждам към помагам.
Код:
използване на Система;
използване на System.Web;
използване на System.Web.Services;
използване на System.Web.Services.Protocols;
използване на Microsoft.SharePoint;
използване на System.Configuration;
[Уеб услугата(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
обществени клас PoService : System.Web.Services.Уеб услугата
{
обществени PoService () {
//Uncomment определителен член последователи линия, ако използвате проектирани компоненти
//InitializeComponent();
}
/// <Резюме>
/// Получи следващия номер на поръчка от sharepoint po контрол от списъка номер на.
/// Нарастване PO номер в този списък.
/// </Резюме>
/// <Връща></Връща>
[WebMethod]
обществени низ GetNextPoNumber()
{
низ SpPoControlSiteName; // Името на действителната Мос сайт, който подслонява PO контролен списък.
низ SpPoControlListName; // Името на списъка за действителната Мос, съдържащ контролата Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
низ nextPoReqNumber = "xyzzy";
използване на (SPSite сайт = нов SPSite(SpPoControlSiteName))
{
използване на (SPWeb уеб = сайт. OpenWeb())
{
Splist.Update() currentList = web. Списъци[SpPoControlListName];
foreach (SPItem controlItem в currentList.Items)
{
Ако (((низ)controlItem["ControlField"]).Е равно("NextPoNumber"))
{
nextPoReqNumber = (низ)controlItem["ControlValue"];
INT int_nextPoReqNumber;
int_nextPoReqNumber = Конвертиране.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Намиране на, четене и актуализиране на PO номера в списъка.
} // използване на spweb web = site.openweb()
} // използвайки spsite сайт = нови spsite("http://Localhost/mizuho")
връщане nextPoReqNumber;
}
}