ЛИШАЙНИК: Ітерації через настроювані списки і повернення відфільтрованих даних в InfoPath

Бізнес-сценарій:

Забезпечити метод, який дозволяє користувачам швидко ввести точні покупки заявки.

Бізнес-завдання:

Клієнт веде свій бізнес з декількох сотень постачальників.

Продавці є "тип" конкретні. Це означає, що продавця продає комп'ютерного обладнання (Наприклад. Dell) або канцелярське приладдя (Наприклад. Скоби).

Як ми дозволити кінцевих користувачів, які створюють покупки заявки виберіть припустимий постачальника?

Бізнес-рішення:

Диференціювати постачальників системи за допомогою "тип".

Надати користувачам можливість вибрати тип"" продукту і потім забезпечити відфільтрований набір відповідних постачальників.

Технічні рішення:

Форми InfoPath був розроблений, що дозволяє користувачам вводити онлайн придбати заявки.

Два списки вибору InfoPath контролювати вибір постачальника. Перший, користувач вибирає "покупку типу". Це обмежує другий список вибору має містити лише постачальників, що продають для цього типу покупки. Це класичний каскадні спадне меню.

Постачальники зберігаються в MOSS настроюваним списком з користувацькі стовпці для постачальника атрибути, такі як ім'я, адреса і особливо "тип".

Реалізувати веб-служби, InfoPath клієнта до споживання, що повторюється через списку користувацьких постачальників, повернення лише постачальників відповідності поставляються "тип".

Виклику веб-служби за допомогою форм InfoPath.

Вивчені уроки:

  • Перший, здається, треба піти цей маршрут. Я волів би зробити фільтрації повністю в InfoPath, і не створювати будь-які web послуги функціональність тут. Однак, форми сервер не надає необхідні можливості фільтрації. Ми можемо покласти правило на на типу"" список вибору у формі до роду повторно відкрийте запит постачальника, але ми не можемо змусити його працювати належним чином. Тому, Це було необхідно реалізувати веб-служби.
  • Це класичний "каскадні вибір список" проблема в InfoPath форми сервер світ і є багато добрих прикладів там, що пояснюють, як вирішити цю проблему.
  • Пусте значення для стовпця у списку постачальників не повертає порожній рядок, коли посилання як це: initItem[«Ім'я постачальника"]. Замість цього, Вона повертає null.

Деякі інші примітки:

  • Я повертають масив[] постачальників, тому що я мав деякі труднощі повернення до список ArrayList. Він скаржився InfoPath і у мене не було часу або бажання боротися над ним. Це, Звичайно, ставить штучних обмежень на загальну кількість постачальників. Він також змусили мене реалізувати з обробкою() метод на масив, тому що я ненавиджу ідеєю Повертаючись назад 100 null постачальників. InfoPath не піклується, але його гризла на мене. (Знову, Це було легше, ніж боротися InfoPath над ArrayLists).
  • Я реалізовані на GetSpecificVendorByName() функції, а також, які можуть бути повчально.

Код:

за допомогою Система;
за допомогою System. Web;
за допомогою System.Web.Services;
за допомогою System.Web.Services.Protocols;
за допомогою Microsoft.SharePoint;
за допомогою System.Configuration;

/// <резюме>
///
Постачальником послуг: Забезпечує постачальника пов'язані послуги, який сьогодні споживається форми infopath клієнта.
///
/// Історія:
/// ——–
/// 07/24/07: Початковий кодування, Paul J. Гевін Conchango.
///
/// </резюме>
[Веб-служба(Простір імен = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
громадських клас VendorService : System.Web.Services.Веб-служба
{

/// <резюме>
/// Представляє постачальника зі списку користувацьких sharepoint підтримується MSUSA.
/// </резюме>
громадських клас Постачальника
{
громадських Постачальника() { }

громадських Постачальника(SPItem initItem)
{
Якщо (! (initItem[«Ім'я постачальника"] == Null)) VendorName = initItem[«Ім'я постачальника"].ToString();
Якщо (! (initItem["Адреса 1"] == Null)) VendorAddress1 = initItem["Адреса 1"].ToString();
Якщо (! (initItem["Адреса 2"] == Null)) VendorAddress2 = initItem["Адреса 2"].ToString();
Якщо (! (initItem["Місто"] == Null)) VendorCity = initItem["Місто"].ToString();
Якщо (! (initItem["VendorPhone"] == Null)) VendorPhone = initItem["VendorPhone"].ToString();
Якщо (! (initItem["PurchaseType"] == Null)) VendorType = initItem["PurchaseType"].ToString();
Якщо (! (initItem[«Держава"] == Null)) VendorState = initItem[«Держава"].ToString();
Якщо (! (initItem["Zip"] == Null)) VendorZip = initItem["Zip"].ToString();
Якщо (!(initItem[«Факс"] == Null)) VendorFax = initItem[«Факс"].ToString();
Якщо (!(initItem["SalesRepName"] == Null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Унікальний Ідентифікатор підтримується через МОСС.
}

громадських Int VendorItemId;
громадських рядок VendorName;
громадських рядок VendorAddress1;
громадських рядок VendorAddress2;
громадських рядок VendorCity;
громадських рядок VendorState;
громадських рядок VendorZip;
громадських рядок VendorPhone;
громадських рядок VendorType;
громадських рядок VendorSalesRepName;
громадських рядок VendorFax;
}

громадських VendorService () {

//Розкоментуйте наступний рядок, якщо за допомогою розроблений компонентів
//InitializeComponent();
}

приватні Постачальника[] GenerateTestVendors()
{
Постачальника[] resultList;
resultList = нові Постачальника[100];

Постачальника v;
v = нові Постачальника();
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 = нові Постачальника();

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 = нові Постачальника();
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;

повернення resultList;

}

[WebMethod]
громадських Постачальника GetSpecificVendorById(Int даних ідентифікатора)
{
рядок SpVendorSiteName; // Ім'я фактичні МОХОМ сайту, на якому настроюваного списку постачальників.
рядок SpVendorListName; // Ім'я фактичні МОХОМ список, який містить постачальників.

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

за допомогою (SPSite сайт = нові SPSite(SpVendorSiteName))
{

за допомогою (SPWeb Web = сайт. OpenWeb())
{

SPList currentList = web. Списки[SpVendorListName];

SPItem specificItem = currentList.Items[даних ідентифікатора];

повернення нові Постачальника(specificItem);

} // за допомогою spweb веб = site.openweb()
} // за допомогою spsite сайту = новий spsite("http://Localhost/mizuho")

}

[WebMethod]
// Припускає, що ім'я постачальника є унікальним, з точки зору бізнесу
громадських Постачальника GetSpecificVendorByVendorName(рядок бути)
{
рядок SpVendorSiteName; // Ім'я фактичні МОХОМ сайту, на якому настроюваного списку постачальників.
рядок SpVendorListName; // Ім'я фактичні МОХОМ список, який містить постачальників.

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

за допомогою (SPSite сайт = нові SPSite(SpVendorSiteName))
{
за допомогою (SPWeb Web = сайт. OpenWeb())
{

SPList currentList = web. Списки[SpVendorListName];

foreach (SPItem vendorItem у currentList.Items)
{
Якщо (vendorItem[«Ім'я постачальника"] == Null) Продовжити;

Якщо (vendorItem[«Ім'я постачальника"].ToString().Дорівнює(бути))
повернення нові Постачальника(vendorItem);
}

Постачальника v = нові Постачальника();
v.VendorPhone = "не знайдено: " + бути;

повернення v;

повернення Null;

} // за допомогою spweb веб = site.openweb()
} // за допомогою spsite сайту = новий spsite("http://Localhost/mizuho")

} // метод

[WebMethod]
громадських Постачальника[] GetVendorsOfType (рядок filterType)
{

рядок SpVendorSiteName; // Ім'я фактичні МОХОМ сайту, на якому t
Він настроюваного списку постачальників.
рядок SpVendorListName; // Ім'я фактичні МОХОМ список, який містить постачальників.

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

Постачальника[] resultList;
Int vendorIndex = 0;
resultList = нові Постачальника[1000];

// Ініціалізація списку з дружнім повідомлення за промовчанням.
Постачальника v = нові Постачальника();
v.VendorName = "Виберіть тип постачальника для заповнення цього списку.";
resultList[0] = v;

// Конвертувати фільтра в нижній регістр для легше порівняння рядків пізніше.
filterType = filterType.ToLower();

// Якщо він буде прийнятий тип фільтра є "випробування", створити деякі прості дані.
#регіон Тип фільтру = "випробування"
Якщо (Дорівнює filterType.("тест"))
повернення GenerateTestVendors();
#endregion

Якщо (Істина)
{
за допомогою (SPSite сайт = нові SPSite(SpVendorSiteName))
{
за допомогою (SPWeb Web = сайт. OpenWeb())
{

v = Null;

SPList currentList = web. Списки[SpVendorListName];

// Перебирати всі елементи, у списку постачальників.
foreach (SPItem vendorItem у currentList.Items)
{

рядок lowerVendorType;

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

Якщо (Дорівнює lowerVendorType.(filterType))
{
resultList[vendorIndex ] = нові Постачальника(vendorItem);
}
} // ітерації thru всіх продавців у списку


повернення TrimVendorArray(vendorIndex, resultList);
// повернення resultList;

} // за допомогою spweb веб = site.openweb()
} // за допомогою spsite сайту = новий spsite("http://Localhost/mizuho")

} // Якщо це правда

повернення Null;
}

приватні Постачальника[] TrimVendorArray(Int newsize, Постачальника[] originalVendorArray)
{
Постачальника[] trimmedArray;

Якщо (newsize = = 0) newsize = 1;
trimmedArray = нові Постачальника[newsize];

Int currentCounter = 0;

для (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

повернення trimmedArray;

}
}

Дати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *