катэгорыя Архівы: SharePoint

Ліквідацыя непаладак, загадкавыя памылкі SharePoint.

Агляд:

Адладка цяжка пры распрацоўцы карыстацкіх функцый для Windows SharePoint Services 3.0 (WSS) або Microsoft Office SharePoint Server (MOSS). The main culprit is that SharePoint normally surfaces very little diagnostic information on the web browser when an error occurs. This blog entry describes how to locate additional system-generated diagnostic information that can often provide that extra bit of detail that one needs in order to identify root causes. This can then lead to solving the problem.

Я выкарыстаў гэтую тэхніку з вялікім поспехам вырашаць інакш загадкавыя памылкі.

Падыход:

SharePoint эканоміць вялікая колькасць інфармацыі ў часопіс дыягностыкі ў лог-файл у 12 вулей.

The "12 hive" is usually located at "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12". (Я не ўпэўнены, калі гэта магчыма для 12 вулей жыць у іншым месцы, на самай справе).

Ідэя складаецца ў тым, каб знайсці бягучы файл часопіса, force the error and then quickly open the log file. These log files are characterized by:

  • Copious amounts of information. SharePoint generates a very large amount of diagnostic information and writes it to that log file very quickly. You need to be quick with the fingers to capture it.
  • Multiplicity. SharePoint does not write to a single log file but rather generates multiple log files in sequence.
  • Скапіюйце і ўстаўце прыемна ў MS Excel.

Мой любімы метад:

  1. Адкрыйце правадыр Windows, які паказвае на 12 вулей часопісы.
  2. Сартаваць імпрэзу, каб паказаць па даце змены (У зваротным храналагічным парадку).
  3. Вылучыце самыя апошнія лог-файл.
  4. У акне вэб-браўзэра, прымусіць памылкі адбываюцца.
  5. Хутка адкрыць бягучы лог-файл і скапіруйце яго змесціва ў MS Excel.
  6. Перайсці да канца і аналізаваць адпаведныя запісы.

Іншая:

Па змаўчанні, ў часопісе дыягностыкі знаходзіцца ў 12 вулей каталог часопісаў.

MS Лепшыя практыкі (Ace Майкам T. з Microsoft) state that the log files should be saved to a separate hard drive. One does this via central admin. Your system administrator may have done this, У гэтым выпадку вы, відавочна, трэба знайсці файл часопіса там замест выкарыстоўванага па змаўчанні 12 вулей размяшчэння).

Гэтая запіс тычыцца такіх пытанняў, як:

  • Працоўны працэс SharePoint не ўдалося запусціць з-за ўнутранай памылкі.
  • (больш павінны быць дададзеныя на працягу доўгага часу)
  • Гэтая запіс была карыснай дыягностыкі памылак працоўнага працэсу (e.g. "The workflow failed to start due to an internal error").

MOSS: Эфектыўнае ўвядзенне ў арганізацыю

(this entry cross posted between http://paulgalvin.spaces.live.com/blog/ і http://blogs.conchango.com)

Апублікаваныя на гэтым сайце, мае ўласныя і не абавязкова адлюстроўвае пазіцыю аўтара Conchango, стратэгіі або меркаванні.

Агляд:

Гэтая запіс апісвае некаторую даведачную інфармацыю на вялікім (3,000 карыстальнікаў) Microsoft Office SharePoint Server (MOSS) rollout and what we did to get the project rolling in such a way that the client is happy and firmly down a path that ends with full adoption of the MOSS feature set. As of the writing of the entry, we are approximately 50% complete with the first phase of the project. As things progress, I’ll update this entry and/or write new entries.

In this specific case, the company had already installed SharePoint Portal Server 2003. The IT group installed the product in a sort of "let’s see if anyone cares" fashion. It was quickly adopted by many business users and became quite popular in the enterprise at large. Як вы можаце сабе, гэта была не самая лепшая стратэгія разгортвання (якой кліент цалкам дапускае) MOSS і калі прыбылі на месца здарэння, the client resolved to "do it right" і наняў нас, каб дапамагчы ім.

Адным з цэнтральных пытанняў, якія стаяць перад намі, калі мы прыступілі да рэалізацыі гэтага праекта было: Як ўвядзем MOSS з гэтым кліентам? Given that the client already had experience with SharePoint, цікава — do we need to do "differential" навучанне ці ж мы пачнем з нуля? After working with key users, we determined that treating this as a green field project made more sense.

That decision gave a starting point but still left us with the major requirement of figuring out a good strategy for rolling MOSS out to the enterprise. MOSS is such a big animal … it includes content management, кіравання дакументамі, пошук, бяспеку, мэтавай аўдыторыі, кіраванне праектам, "fabulous forty" шаблоны, працоўны працэс, бізнес-дадзеных раз'ём, і г.д.. Couple this with the fact that it’s a large organization that можа сапраўды зрабіць выкарыстанне практычна ва ўсіх буйных функцыя MOSS і ў вас ёсць задаткі вялікага праекта з прадпрыемствам дасяжнасці і шмат добрых рэчаў, якія адбываюцца.

Мы сутыкаемся з гэтым пытаннем раз і зноў … Мос прадпрыемствы дасяжнасці з яго прадпрыемствам наборам функцый, Але нават некалькі спрактыкаваных кліентаў маюць цяжкі час у думках паглынальныя гэтыя функцыі, не кажучы ўжо пра ўключэнне значнай часткі з іх у іх паўсядзённым жыцці.

I don’t have a magic solution to the problem. I instead address just the very first steps that we’ve taken with the client to lead them down the path to successful long-term adoption.

Сфера:

As much as I wanted the team to craft a project plan that included such milestones as "PoepleSoft Integration via BDC Completed", "New Cross-Departmental Product Launch Workflow Complete" and "Executive Management KPI’s Accepted", I had to settle for something less. This is not to say that "less" дрэнна. На самай справе, the "less" that we decided for the initial rollout was miles ahead of where they were before we started. У нашым выпадку, the "less" ператварыўся ў:

  • Простае кіраванне дакумента з выкарыстаннем бібліятэкі дакументаў, version control and content types.
  • Эфектыўнага пошуку на аснове тыпаў кантэнту і карыстальніка пошуку загадзя (праз кіраванымі ўласцівасцямі, XSLT вырабляць даволі вынікамі, і г.д.).

У дадатак да паказаных вышэй маштабу прадпрыемства функцый (гэта азначае, што яны павінны былі быць распаўсюджана на ўсіх ведамстваў і карыстальнікаў), мы дадалі наступныя Сінглтан ў сферы міні-праектаў:

  • Доказ канцэпцыі інтэграцыі BDC.
  • Шматступеннага і шматгаліновага працоўны працэс ствараецца з дапамогай SPD.
  • Комплексныя формы InfoPath.
  • Павярхоўная KPI для некаторых бізнес-працэсаў (верагодна, HR талент набыцця ў нашым выпадку, хоць гэта можа змяніцца).

Аб'ём тут не 100% accurate but representative of our approach and sufficient for my purpose here, which is to explain what I consider to be an "effective" Увядзенне мох, які будзе ўключаць кліента цвёрда ўніз залаты шлях да поўнага прыняцця MOSS.

I won’t write much more about the singleton in this entry. I do want to point out that these are part of our over-arching strategy. The idea is to implement the core document management and search features to all users yet provide highly functional, high visible and highly representative examples of other core MOSS features which are simply beyond the ability of most users to absorb at this early stage. Аднак, they will be "out there" і адзін спадзяецца, што іншыя бізнэс-адзінкі будуць ведаць або даведацца пра іх і хочам, каб гэтыя магчымасці для сябе, leading to greater adoption. These singleton success stories also serve to provide our sales team "ammunition" для паспяховай перамогі другі, third and n-phase projects.

Што мы Представьтесь і чаму?

Размясціўшыся па кіраванні дакументамі і пошуку ў якасці базавага ў маштабах прадпрыемства патрабаванні, we needed to start gathering details. As a practical matter, гэта круцілася вакол разумення іх дакументы і што ў канчатковым выніку адлюстроўваецца на разуменні тыпаў кантэнту.

I’ve found it’s difficult to explain content types without visual aides. More technical folk can walk away from a discussion about content types when CT’s are described in database terms. "A CT is similar to a database table, it has columns and columns are defined in terms of data types, but CT data types include more than simple integer/date, but also "choice" and "lookup" and the like." We can talk about "extending" тыпаў кантэнту, much like one can inherit functionality from a base class in object oriented languages. However this is obviously not helpful for the transportation department admin person who has no technical background. Гэта значыць, nearly everyone that matters in a MOSS rollout.

Using a white board is iffy. I’ve presented the idea of a content type and drawn brilliant (або так яны здаюцца) фатаграфіі тыпаў кантэнту і што яны робяць для вас з пункту гледжання пошуку і як яны могуць быць пашыраны, і г.д.. У рэшце рэшт, такое пачуццё, што некаторыя лямпачкі ўключылі, but the resulting white board picture is a mess.

Гэта прывяло нас да сённяшняга і да гэтага часу найбольш эфектыўным месцам пасадкі: Сайт MOSS пясочніцы настроены, каб паказаць гэтыя асаблівасці.

Выкарыстанне пясочніцы сайце, мы дэманструем:

  • Тыпы кантэнту:
    • Стварэнне КТ з некалькімі тыпамі дадзеных (тэкст, дата, выбар, лагічны, пошук, і г.д.).
    • Падаўжэнне КТ шляхам стварэння новай КТ заснавана на аднаго з бацькоў.
    • Пошук дакументаў з дапамогай КТ метададзеных.
  • Бібліятэкі дакументаў:
    • Звязванне аднаго CT з бібліятэкай.
    • Што адбываецца, калі мы загрузіць дакумент у гэтую бібліятэку?
    • Звязванне валодаць некалькімі КТ з бібліятэкай Doc.
    • Што адбываецца, калі мы загрузіць дакумент у гэтую бібліятэку?
    • Фільтраванне і сартаванне з дапамогай загалоўкаў слупкоў ў Doc Lib.
    • Уяўленнях бібліятэкі дакументаў:
      • Сартаванне
      • Групоўка
      • "Quick entry" (Дадзеныя ліста)
      • "Untagged data" (для аказання дапамогі ў міграцыі ў MOSS з іншых крыніц ўтрымання; больш падрабязна пра гэта ніжэй).

Сайт Sandbox:

Мы распрацавалі нашы пясочніцы сайт, каб быць пастаянным элементам у асяроддзі распрацоўкі, якія будуць выкарыстоўвацца ў навучальных мэтах мы яшчэ доўга пасля завяршэння праекта і уключаў у сябе некалькі артэфактаў, як апісана:

Тыпы кантэнту:

Мы вызначылі наступныя тыпы кантэнту: Рахунак-фактура, Заказ на куплю, Паслугі Лік.

Мы выбралі рахункі і замове, таму што яны больш-менш універсальна пад
stood entities. Everyone in business understands that an invoice is a demand for payment to a customer for an amount issued on a certain дата to be paid as per some payment terms. This leads to a natural definition of a CT which we called "Training Invoice" (to distinguish it from any other kind of invoice). The purchase order is similarly easily defined. We also created a "Training Services Invoice" by creating a new CT based upon the "Training Invoice" CT and added just one column, "services rendered".

With the above, we can now demonstrate some key features of CT’s without getting bogged down trying to explain an abstract concept first; everyone already understands what we mean by "invoice" and "purchase order" and are instead able to focus on mechanics of the CT itself.

Наладжвальныя спісы:

CT with columns of type "lookup" point to a custom list or document library. We use this extensively and for the sandbox, we created one supporting custom list that contains customers. We picked customers because it’s an easy concept to understand and easy to demonstrate. The Invoice CT has a column, "customer" that is defined of type "lookup" that points at this list.

We created a similar custom list to manage "vendors" for the "Purchase Order" CT.

Бібліятэкі дакументаў:

We created two document libraries: "Invoices" and "Mixed Documents".

We configured the invoices document library to manage only documents of CT type "Invoice".

We configured the "Mixed Documents" library to manage all three CT’s.

Create several views that show sorting, filtering, data sheet and grouping.

Пошук:

We defined two new managed properties and mapped them to Invoice Number and Customer.

We created a new customized advance search site and modified it to enable users to search for "invoices" using those two mapped properties.

Modify the XSLT so that the invoice and customer number, when present, appear in an HTML table in a bright color. The objective here is to demonstrate that such formatting is possible.

Putting it all together:

We arrange for key users to participate in a demo.

We follow this simple script:

  1. Describe the meaning and purpose of a CT, using invoices and purchase orders as examples.
  2. Пакажа фактуру вызначэнне КТ адначасова запэўніваючы іх, што ім не трэба выкарыстоўваць гэтыя экраны самі, проста забраць паняццяў.
  3. Ідзіце ў бібліятэку дакументаў рахункаў.
  4. Загрузіць дакумент.
  5. Прадэманстраваць, што кліент расчыняецца сапраўды атрыманы з карыстацкага спісу.
  6. Дадаць новага кліента ў спіс кліентаў, а затым абновіце мета апошні час адпраўкі рахункаў па дадзеных з ізноў створаным кліентам.
  7. Switch to the "mixed documents" library and upload a document. Explain how the system prompts for a document type.
  8. Go back to invoices document library and show how clicking on a column name changes sort order.
  9. Прадэманстраваць на ўзроўні слупкоў фільтрацыі.
  10. Паказаць розныя пункты гледжання, якія дэманструюць шматузроўневая сартаванне, фільтраванне і групоўка.
  11. Паказаць акне прагляду дадзеных ліста.
  12. Explain the purpose of a "untagged documents" глядзець.
  13. Switch to the customized advanced search.
  14. Да гэтага часу, the recently uploaded document should have been crawled and indexed, so perform a search that demonstrates ability to locate that invoice via the mapped property.
  15. We demonstrate the difference between searching via mapped properties vs. just a text search.

У гэты момант, we are more or less done with the demo. It seems to take about 30 да 45 хвілін, depending on how many questions people ask.

We then send them back to their desks with "homework". This consists of a simple excel spreadsheet where we ask them to define for us what they think they need in terms of CT’s, both at a high level (just name and business purpose) as well as columns and type of data they would store in the column. We don’t ask them to define column data types in MOSS terms, but business terms.

У рэзюмэ:

We’ve created a sandbox environment that we can use to demonstrate some core MOSS features whose appeal are enterprise-wide.

We have modeled easily understood and common business entities so that users can focus on MOSS and not get bogged down on the entities / Прыклады сябе.

Business users walk away from theses sessions with "homework" ў выглядзе дакументаў Excel якой яны цяпер кампетэнтным, каб запоўніць і выкарыстоўваць для стварэння ўласнага першая зборка тыпаў кантэнту.

У рэшце рэшт, як мы праводзім дэма з цягам часу, камандай кліента члены самі становяцца больш здольнымі пераносіць, зрабіць дэма сабой і ўвогуле вызваліць астатніх з нас, каб працаваць на больш складаныя пытанні, такіх як Глабальная таксанамічная, складаных працоўных працэсаў, BDC і таму падобнае.

MOSS: Функцыянальныя Прыклад - карыстацкі тып дадзеных

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

У маштабах усяго прадпрыемства рэалізацыя Мос для вытворчай кампаніі з 30+ сайтаў і некалькі дзясяткаў карпаратыўных аддзелаў.

Бізнес-мэты:

Нягледзячы на ​​мноства бізнес-груп (ведамстваў, месцаў, і г.д.), некаторыя дадзеныя павінны быць захаваны на глабальным узроўні. Напрыклад, майстар аўтарытэтны спіс усіх фізічных офісах кампаніі (e.g. вытворчае абсталяванне, складскіх месцаў, офісаў продажаў) павінна быць захавана ў цэнтры горада.

Тэхнічная праблема:

Прадпрыемства таксанаміі быў рэалізаваны з дапамогай некалькіх сямействаў сайтаў. Нам бы хацелася, каб стварыць аўтарытэтны спіс фізічных месцах у спісе карыстацкіх WSS. Затым, Калі мы павінны былі мець слупок ў тыпе кантэнту (або слупок дадаецца ў спіс або бібліятэку Doc) , Якія ўтрымлівалі карпаратыўных месцах, we would create a column using the "lookup" тыпам дадзеных і паказваць на гэта асноўны спіс.

На жаль, lookup datatypes must access a source list "locally" гэта азначае, што наш аўтарытэтны спіс не можа распаўсюджвацца на сайт калекцый.

Тэхнічнае рашэнне:

Рэалізацыя новага карыстацкага тыпу дадзеных ажыццяўляецца на аснове SPField і прадстаўлены ў выглядзе DropDownList ў карыстацкім інтэрфейсе якога ListItems запаўненне з спісу WSS майстры.

Мы стварылі новы сайт пад назвай калекцыі "http://localhost/EnterpriseData". Там, we created a custom list named "Corporate Locations". This list just uses the standard "Title" поле, якое змяшчае спіс фактычных карпаратыўных месцах.

Адзін наступным некалькіх паслядоўных крокаў, каб стварыць карыстацкі тып дадзеных у WSS. Гэта:

  1. Вызначце клас, які атрымліваецца ў спадчыну ад SPField (можна успадкаваць ад іншых палёў пры неабходнасці).

Вось код для гэтага:

грамадскасць клас XYZZYCorporateLocationField : SPFieldText
{
грамадскасць XYZZYCorporateLocationField
(SPFieldCollection палёў, радок typeName, радок displayName)
: база(палёў, typeName, displayName) { }

грамадскасць XYZZYCorporateLocationField
(SPFieldCollection палёў, радок displayName)
: база(палёў, displayName) { }

грамадскасць адмяняць BaseFieldControl FieldRenderingControl
{
атрымліваць
{
BaseFieldControl control = новы XYZZYCorporateLocationFieldControl();
control.FieldName = гэта.Ўнутранае імя;
вяртанне control;
} //атрымліваць
} // fieldrenderingcontrol

грамадскасць адмяняць радок GetValidatedString(аб'ект значэнне)
{
калі (гэта.Required || value.ToString().Роўна(Радок.Пусты))
{
кідаць новы SPFieldValidationException ("Department is not assigned.");
}
вяртанне база.GetValidatedString(значэнне);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Вызначыце іншы клас, які атрымлівае ў спадчыну ад кіраўніка поля базы, як у:

грамадскасць клас XYZZYCorporateLocationFieldControl : BaseFieldControl
{
абаронены DropDownList XYZZYCorporateLocationSelector;

абаронены адмяняць радок DefaultTemplateName
{
атрымліваць
{
вяртанне "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

грамадскасць адмяняць аб'ект Значэнне
{
атрымліваць
{
EnsureChildControls();
вяртанне гэта.XYZZYCorporateLocationSelector.SelectedValue;
} // атрымліваць
набор
{
EnsureChildControls();
гэта.XYZZYCorporateLocationSelector.SelectedValue = (радок)гэта.ItemFieldValue;
} // набор
} // override object Value

абаронены адмяняць ануляваць CreateChildControls()
{

калі (гэта.Field == нулявы || гэта.ControlMode == SPControlMode.Адлюстроўваць)
вяртанне;

база.CreateChildControls();

гэта.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

калі (гэта.XYZZYCorporateLocationSelector == нулявы)
кідаць новы Выключэнне("ERROR: Cannot load .ASCX file!");

калі (!гэта.Page.IsPostBack)
{

выкарыстанне (SPSite site = новы SPSite("http://лакальны / enterprisedata"))
{
выкарыстанне (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists["Corporate Locations"];

Еогеасп (Пляваць XYZZYCorporateLocation ў currentList.Items)
{
калі (XYZZYCorporateLocation["Title"] == нулявы) працягваць;

радок theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

гэта.XYZZYCorporateLocationSelector.Items.Add
(новы ListItem(theTitle, theTitle));

} // Еогеасп

} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/enterprisedata")

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Прыведзены вышэй код у асноўным рэалізуе логіку для запаўнення DropDownList значэннямі з карыстацкага спісу WSS размешчаны на http://localhost/enterprisedata and named "Corporate Departments".

Я вызначыў абодвух класаў у адным. Выява CS, скампіляваў яго і паклаў яго ў GAC (моцная неабходных, вядома).

  1. Рэалізацыя пра шаблон элемента кіравання (.ASCX) як паказана на малюнку:

<%@ Кіраванне Мова="C#" Спадчыну="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, культура = нейтральнай,PublicKeyToken = 71e9bce111e9429c" CompilationMode="Always" %>
<%
@ Рэестр TagPrefix="wssawc" Прастора імёнаў="Microsoft.SharePoint.WebControls" Зборка="Microsoft.SharePoint, Version = 12.0.0.0, Культура = нейтральнай, PublicKeyToken = 71e9bce111e9429c" %> <%@ Рэестр TagPrefix="SharePoint" Прастора імёнаў="Microsoft.SharePoint.WebControls" Зборка="Microsoft.SharePoint, Version = 12.0.0.0, Культура = нейтральнай, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Шаблон візуалізацыі ID="XYZZYCorporateLocationFieldControl" runat="server">
<Шаблон>
<аспід:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Шаблон>
</
SharePoint:Шаблон візуалізацыі>

Вышэй захоўваецца ў C:\Program Files Common Files Microsoft Shared пашырэньні вэб-сервера 12 ControlTemplates.

  1. У рэшце рэшт, мы ствараем XML-файла для захавання ў ..... 12 каталога XML. Гэта CAML, які вызначае нашу карыстацкі тып дадзеных і для майго прыкладу, выглядае наступным чынам:

<?XML версія="1.0" кадаваньне="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Поле Імя="TypeName">CorporateLocations</Поле>
<
Поле Імя="ParentType">Тэкст</Поле>
<
Поле Імя="TypeDisplayName">Corporate Locations</Поле>
<
Поле Імя="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Поле>
<
Поле Імя="UserCreatable">TRUE,</Поле>
<
Поле Імя="ShowInListCreate">TRUE,</Поле>
<
Поле Імя="ShowInDocumentLibraryCreate">TRUE,</Поле>
<
Поле Імя="ShowInSurveyCreate">TRUE,</Поле>
<
Поле Імя="ShowInColumnTemplateCreate">TRUE,</Поле>
<
Поле Імя="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Культура = нейтральнай, PublicKeyToken=b0b19e85410990c4</Поле>
<
RenderPattern Імя="DisplayPattern">
<
Пераключэнне>
<
Expr>
<
Калонка />
</
Expr>

<Выпадак Значэнне=""/>

<Змаўчанне>
<
HTML>
<![CDATA[
<span style="color:Red"><B>]]>
</
HTML>

<
Калонка SubcolumnNumber="0" HTMLEncode="TRUE,"/>

<HTML><![CDATA[</B></пралёт>]]></HTML>

</
Змаўчанне>
</
Пераключэнне>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" і адпавядае яго супраць GAC'd зборкі.

Пасля пераезду ўсе гэтыя біты на месца, Iisreset на серверы і ўсё павінна пачаць працаваць прыгожа.

MOSS: Абнаўленне карыстацкага спісу

Ёсць шмат добрых прыкладаў абнаўлення карыстацкіх спісаў з дапамогай SDK. Гэта яшчэ адзін.

Бізнес-задачы: InfoPath форма была распрацавана, што дазваляе карыстальнікам ўводзіць онлайн заявак на закупкі. PO нумары Заяўкі павінны быць традыцыйнымі на аснове паслядоўнасці цэлых значэнняў і разлічваецца аўтаматычна.

Business Solution: Стварэнне наладжвальнага спісу MOSS двума слупкамі: "ControlField" and "ControlValue". Значэнне слупок ўтрымлівае нумар наступнага рэквізіцыі куплі. Note that the generic "control" наймення падае для будучага поля кіравання, які можа быць выкарыстаны пры неабходнасці.

Тэхнічнае рашэнне: Стварэнне вэб-службы доступ кліента InfoPath. Вэб-служба вяртае назад Наступны нумар рэквізіцыі пакупкі і абнаўляе значэнне спісу.

Урокі:

  • Пры даданні гэтага вэб-сэрвісу ў якасці крыніцы дадзеных для формаў InfoPath, Я палічыў неабходным пераўтварыць яго ў УДК і захоўваць яго ў бібліятэцы падлучэнняў да дадзеных.
  • I also found it necessary to enable cross domain scripting via central services administration // application management // form server configuration.
  • The first time the form tried to access the web service, it takes a while and on occasion, it would time out. I fiddled with settings in form server configuration to expand the timeout settings and that seemed to help.

Код:

выкарыстанне Сістэма;
выкарыстанне System.Web;
выкарыстанне System.Web.Services;
выкарыстанне System.Web.Services.Protocols;
выкарыстанне Microsoft.SharePoint;
выкарыстанне System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
грамадскасць клас PoService : System.Web.Services.WebService
{
грамадскасць PoService () {

//Uncomment the following line if using designed components
//InitializeComponent();
}

/// <рэзюмэ>
/// Obtain the next PO number from the sharepoint po number control list.
/// Increment the PO number in that list.
/// </рэзюмэ>
/// <returns></returns>
[WebMethod]
грамадскасць радок GetNextPoNumber()
{
радок SpPoControlSiteName; // Name of the actual MOSS site that hosts the PO Control list.
радок SpPoControlListName; // Name of the actual MOSS list containing the Po control.

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

радок nextPoReqNumber = "XYZZY";

выкарыстанне (SPSite site = новы SPSite(SpPoControlSiteName))
{
выкарыстанне (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpPoControlListName];

Еогеасп (Пляваць controlItem ў currentList.Items)
{

калі (((радок)controlItem["ControlField"]).Роўна("NextPoNumber"))
{
nextPoReqNumber = (радок)controlItem["ControlValue"];

Int int_nextPoReqNumber;
int_nextPoReqNumber = Канвертаваць.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

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

} // Locating, reading and updating the PO number in the list.


} // using spweb web = site.openweb()
} // using spsite site = new spsite("http://localhost/mizuho")

вяртанне nextPoReqNumber;

}
}