Бизнес-сценарий:
Предоставляет метод, который позволяет пользователям быстро вводить точное покупку заявок.
Бизнес-проблемы:
Клиент делает бизнес с нескольких сотен поставщиков.
Поставщики являются "тип" конкретные. Это означает, что продавец продает компьютерного оборудования (Например. Dell) или офисные принадлежности (Например. Скобы).
Каким образом мы позволить конечным пользователям, создающим покупки заявки выберите действительный поставщика?
Бизнес-решение:
Дифференцировать поставщиков в системе через «тип».
Разрешить пользователям выбирать тип"" продукта, а затем укажите отфильтрованного набора соответствующих поставщиков.
Техническое решение:
Была разработана форма InfoPath позволяет пользователям вводить онлайн купить заявок.
Два списка выбора InfoPath контролировать выбор подрядчика. Первый, пользователь выбирает «тип покупки». Это ограничивает второй список выбора содержит только тех поставщиков, которые продают для данного типа покупки. Это классический Каскадный раскрывающийся список.
Поставщики, хранятся в пользовательский список Мосс с пользовательские столбцы для поставщиков таких атрибутов, как имя, адрес и особенно «тип».
Реализация веб-службы для клиента InfoPath потреблять, перебор списка пользовательских поставщиков, возвращение только поставщиков, сопоставление предоставленного «тип».
Вызов веб-службы через формы InfoPath.
Уроки:
- Первый, представляется необходимым идти по этому пути. Я хотела бы сделать фильтрацию целиком в InfoPath и не создает каких-либо веб-службу функциональностью здесь. Однако, сервер форм не обеспечивает необходимые возможности фильтрации. Мы можем поместить правило на "типа" список выбора в форме своего рода возобновлять поставщик запроса, но мы не можем получить его для правильной работы. Поэтому, Это было необходимо для реализации веб-службы.
- Это классический «каскадного списка выбора" проблема в InfoPath формирует сервер мира и хорошим примеров множество, там, где описано для решения этой проблемы.
- Пустое значение для столбца в списке поставщиков не возвращает пустую строку при обращении как этот: initItem[«Имя поставщика"]. Вместо этого, Возвращает значение null.
Некоторые другие заметки:
- Я возвращать массив[] поставщиков, потому что я имел некоторые трудности возвращения ArrayList. InfoPath жалобами об этом и у меня не было времени или желания бороться за его. Это, Конечно, накладывает искусственные ограничения на общее количество поставщиков. Он также вынудила меня осуществить отделкой() метод в массиве, потому что я ненавижу идею возвращения обратно 100 null поставщиков. InfoPath не заботится, но это nagged на меня. (Снова, Это было проще, чем борьба с InfoPath над ArrayLists).
- Я реализовал GetSpecificVendorByName() функция также, который может быть поучительным.
Код:
использование Система;
использование System.Web;
использование System.Web.Services;
использование System.Web.Services.Protocols;
использование Microsoft.SharePoint;
использование System.Configuration;
/// <Резюме>
/// Поставщик услуг: Предоставляет связанных поставщиков услуг, которые сегодня потребляются клиента формы infopath.
///
/// История:
/// ——–
/// 07/24/07: Первоначальное кодирование, Paul J. Гэвин Conchango.
///
/// </Резюме>
[WebService(Пространство имен = «http://www.Conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
государственные класс VendorService : System.Web.Services.WebService
{
/// <Резюме>
/// Представляет поставщика из списка пользовательских sharepoint поддерживается MSUSA.
/// </Резюме>
государственные класс Поставщик
{
государственные Поставщик() { }
государственные Поставщик(SPItem initItem)
{
Если (! (initItem[«Имя поставщика"] == значение NULL)) Вендор = 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;
государственные Строка Вендор;
государственные Строка 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 vendorId)
{
Строка SpVendorSiteName; // Имя фактического Мосс сайта, на котором размещается список пользовательских поставщиков.
Строка SpVendorListName; // Имя фактического списка Мосс, содержащий поставщиков.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings[«VendorList"].ToString();
использование (SPSite сайта = Новые функции SPSite(SpVendorSiteName))
{
использование (SPWeb веб сайт =. OpenWeb())
{
SPList currentList = web. Списки[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
возвращение Новые функции Поставщик(specificItem);
} // с помощью веб-spweb = site.openweb()
} // используя сайт spsite = новые spsite(«http://localhost/Мидзухо")
}
[WebMethod]
// Предполагается, что имя поставщика является уникальным, с точки зрения бизнеса
государственные Поставщик GetSpecificVendorByVendorName(Строка Имя_вендора)
{
Строка SpVendorSiteName; // Имя фактического Мосс сайта, на котором размещается список пользовательских поставщиков.
Строка SpVendorListName; // Имя фактического списка Мосс, содержащий поставщиков.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings[«VendorList"].ToString();
использование (SPSite сайта = Новые функции SPSite(SpVendorSiteName))
{
использование (SPWeb веб сайт =. OpenWeb())
{
SPList currentList = web. Списки[SpVendorListName];
по каждому элементу (SPItem vendorItem в currentList.Items)
{
Если (vendorItem[«Имя поставщика"] == значение NULL) продолжить;
Если (vendorItem[«Имя поставщика"].ToString().Равно(Имя_вендора))
возвращение Новые функции Поставщик(vendorItem);
}
Поставщик v = Новые функции Поставщик();
v.VendorPhone = «не найден: " + Имя_вендора;
возвращение v;
возвращение значение NULL;
} // с помощью веб-spweb = site.openweb()
} // используя сайт spsite = новые spsite(«http://localhost/Мидзухо")
} // метод
[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 Equals.("тест"))
возвращение GenerateTestVendors();
#endregion
Если (Истина)
{
использование (SPSite сайта = Новые функции SPSite(SpVendorSiteName))
{
использование (SPWeb веб сайт =. OpenWeb())
{
v = значение NULL;
SPList currentList = web. Списки[SpVendorListName];
// Перебор всех элементов в списке поставщиков.
по каждому элементу (SPItem vendorItem в currentList.Items)
{
Строка lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().Метод ToLower();
lowerVendorType = lowerVendorType.Substring(3);
Если (Равен lowerVendorType.(filterType))
{
resultList[vendorIndex ] = Новые функции Поставщик(vendorItem);
}
} // итерация через все поставщиков в списке
возвращение TrimVendorArray(vendorIndex, resultList);
// возвращение resultList;
} // с помощью веб-spweb = site.openweb()
} // используя сайт spsite = новые spsite(«http://localhost/Мидзухо")
} // Если true
возвращение значение 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;
}
}