Категория Архиви: МОС

Мос Разширено персонализиране Търсене — Случай е от значение в Разширено търсене XSLT

Не променя Разширено търсене XSLT много често, така че изглежда, че съм катерене малки хълмове всеки път.

Най-новият ми урок е това: Случай въпроси, когато съотнасяне колона. В моя Разширено търсене, Имам колони, определени като това:

<корен xmlns:XSi="HTTP://www.w3.org/2001/XMLSchema-instance">
<
Колони>
<
Колона Име="GafTrainingInvoiceNumber" />
<
Колона Име="GafTrainingInvoiceLocation" />
<
Колона Име="Същ WorkId"/>
<
Колона Име="Ранг"/>
<
Колона Име="Заглавие"/>
<
Колона Име="Автор"/>
<
Колона Име="Размер"/>
<
Колона Име="Път"/>
<
Колона Име="Описание"/>
<
Колона Име="Пиша"/>
<
Колона Име="Име на сайт"/>
<
Колона Име="CollapsingStatus"/>
<
Колона Име="HitHighlightedSummary"/>
<
Колона Име="HitHighlightedProperties"/>
<
Колона Име="ContentClass"/>
<
Колона Име="IsDocument"/>
<
Колона Име="PictureThumbnailURL"/>
</
Колони>
</
корен>

XLST, който показва мястото фактура номер и фактура е била:

<p>
Номер на фактурата за обучение: <XSL:стойността на Изберете="GafTrainingInvoiceNumber"/>
<
br></br>
Обучение фактура място: <XSL:стойността на Изберете="GafTrainingInvoiceLocation"/>
</
p>

Въпреки това, Изберете трябва да позоваване на собственост в всички малки букви, както и в:

<p>
Номер на фактурата за обучение: <XSL:стойността на Изберете="gaftraininginvoicenumber"/>
<
br></br>
Обучение фактура място: <XSL:стойността на Изберете="gaftraininginvoicelocation"/>
</
p>


Докато аз коригира, че, резултати от търсенето, показа на етикетите (т.е.. "Обучение фактура номер") но без данни.

МОС / Сървър за формулярите на InfoPath (InfoPath 2007) падащ списък производителност

Допълнителна категория: InfoPath

Резюме: InfoPath 2007 форма, разположени на Мос сървър предоставя капка-голо възвишение списък на доставчици, обвързани с мъх списък по избор. При избора на доставчик, правила присвоите стойности на полета на няколко текстови полета като име на отч., адрес, град, държава, ZIP и телефон. Изпълнението е ужасно. Ние забележите, че производителността се влошава (в нелинейни мода) за всяко допълнително поле ще се актуализира този начин. Т.е., Ако ние просто ще актуализира името на отч., отнема [x] период от време. Ако ние актуализира отч., информационните и комуникационни технологии1, Адрес2, град, държава, ZIP, отнема 10 пъти по-дълго.

Разтвор: Напишете уеб услуга (примерен код може да се намери Тук) която се предава в името на доставчика и се връща обратно детайли за доставчик. След това, Присвояване на полетата по този начин. Въпреки че това изглежда твърде бавно, не е никакъв забележим разлика в производителността, когато ние възложени 1 поле срещу 8 полета. Като допълнителен бонус, Потребителите получават готино "връзка със сървъра" Силоните ефект, докато чакат за формуляра, за да се позове и потребяват услугата резултати.

МОС: Възникна изключение. (Изключение от HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

АКТУАЛИЗИРАНЕ: Ние никога не определя отново основната причина за този проблем и тя никога повърхност.

Ние Забележете че изведнъж по време на изпълнението на сайт на развитие, двама потребители не могат да имат достъп до колекция със сайтове. Тези сметки да удостовери към основния сайт, но когато се опитва да получи достъп до сайт колекция, те просто да празен екран. Няма грешки показана, просто бял празна страница.

Ние Влезте като администратор на колекцията сайтове и се опитате да добавите един от тези потребители като администратор на сайта и този път, при натискане на "OK", Ние се това съобщение:

Възникна изключение. (Изключение от HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Ние прекарва известно време, това изследване и за съжаление, не излезе с всичко полезно. Имаше някои съобщения в регистрационния файл на диагностика, но това е трудно да ги съпоставят точно с този проблем.

В края, Ние изтриването на колекцията със сайтове и отново го и че решават я.

Ако аз разбера какво това причинени в бъдеще, Ще актуализирам този пост.

МОС: Iterating чрез потребителски списъци, филтрирани данни право в InfoPath

Бизнес сценарий:

Осигури метод, който позволява на потребителите да въвеждат точни покупка искания бързо.

Бизнес проблем:

Клиентът прави бизнес с няколко стотин доставчици.

Доставчици са "тип" специфични. Това означава, че даден доставчик продава компютърна техника (e.g. Dell) или офис консумативи (e.g. Скоби).

Как правя ние давам възможност на крайните потребители, които създават покупка искания изберете валиден доставчик?

Бизнес решение:

Диференцират доставчици в системата чрез "тип".

Разреши на потребителите да изберете типа на"" на продукта и след това предоставят филтриран набор от подходящи доставчици.

Техническо решение:

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

Две InfoPath избор списъци контрол производители на избора. Първо, потребителят избира тип"покупка". Това ограничава втората селекция списък да съдържа само доставчици, които продават за този тип на покупка. Това е класически каскадни падащото.

Доставчиците се съхраняват в Мос потребителски списък с колони по избор за доставчик атрибути като име, адрес и особено "тип".

Реализиране уеб услуга на InfoPath клиент да консумират това повтаря през потребителски доставчик списък, връщане само доставчици съвпадение на предоставения "тип".

Се позове на уеб услугата чрез формуляр на InfoPath.

Поуките:

  • Първо, изглежда необходимо да отида този път. Бих предпочел да направим за филтриране изцяло в InfoPath и не създават никакви уеб услуга функционалност тук. Въпреки това, формуляри сървър не предоставя необходимата възможност за филтриране. Можем да сложим правило върху "тип" избор списък във формуляра да сортиране на повторно отваряне заявка за доставчик, но не можем да го да работи правилно. Следователно, Това е необходимо за изпълнение на уеб услугата.
  • Това е класически "каскадни селекция списък" проблем в 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.
///
/// </Резюме>
[Уеб услугата(Namespace = "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 () {

//Uncomment определителен член последователи линия, ако използвате проектирани компоненти
//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.Update() currentList = web. Списъци[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

връщане нов Доставчик(specificItem);

} // използване на spweb web = 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 уеб = сайт. OpenWeb())
{

Splist.Update() currentList = web. Списъци[SpVendorListName];

foreach (SPItem vendorItem в currentList.Items)
{
Ако (vendorItem["Име на доставчик"] == Null) «««;

Ако (vendorItem["Име на доставчик"].ToString().Е равно(бъде))
връщане нов Доставчик(vendorItem);
}

Доставчик v = нов Доставчик();
v.VendorPhone = "не е намерен: " + бъде;

връщане v;

връщане Null;

} // използване на spweb web = 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 уеб = сайт. OpenWeb())
{

v = Null;

Splist.Update() currentList = web. Списъци[SpVendorListName];

// Обхождане на всички елементи в списъка с доставчици.
foreach (SPItem vendorItem в currentList.Items)
{

низ lowerVendorType;

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

Ако (е равно на lowerVendorType.(filterType))
{
resultList[vendorIndex ] = нов Доставчик(vendorItem);
}
} // iterating през всички доставчици в списъка


връщане TrimVendorArray(vendorIndex, resultList);
// връщане resultList;

} // използване на spweb web = 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;

}
}