Kategorija Arhiva: SharePoint

Kako otkloniti tajanstvene pogreške SharePoint.

Pregled:

Debugging je teško kada se razvijaju prilagođene funkcionalnosti za Windows SharePoint Services 3.0 (WSS) ili 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.

I have used this technique with great success to solve otherwise mysterious errors.

Pristup:

SharePoint saves a great deal of information to a diagnostic log in a log file in the 12 košnica.

The "12 hive" is usually located at "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12". (I’m not sure if it’s possible for the 12 hive to live anywhere else, zapravo).

The idea is to locate the current log file, 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.
  • Copy and paste nicely into MS Excel.

My favorite method:

  1. Open up a windows explorer pointing to the 12 hive\logs.
  2. Sort the view to show by modified date (most recent first).
  3. Highlight the most current log file.
  4. In a web browser window, force the error to occur.
  5. Quickly open the current log file and copy its contents to MS Excel.
  6. Jump to the end and analyze the relevant entries.

Other Notes:

Po defaultu, the diagnostic log is located in the 12 hive\LOGS directory.

MS Best practices (as per Mike T. of 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, in which case you’d obviously need to find the log file there instead of the default 12 hive location).

This entry addresses issues such as:

  • SharePoint workflow failed to start due to an internal error.
  • (more to be added over time)
  • This entry has been helpful diagnosing workflow errors (e.g. "The workflow failed to start due to an internal error").

MOSS: Učinkovito uvod u organizaciji

(Ovaj ulaz pošta križ između http://paulgalvin.spaces.live.com/blog/ i http://blogs.conchango.com)

Na postove na ovim stranicama moja vlastita i ne odražavaju nužno stavove Conchango, strategije ili testiranja.

Pregled:

Ovaj unos opisuje neke osnovne informacije o velikim (3,000 Korisnici) 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, mi smo otprilike 50% complete with the first phase of the project. As things progress, Ja ću ažurirati ovaj unos i / ili pisati nove unose.

U ovom konkretnom slučaju, 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. Kao što možete zamisliti, ovo nije bila najbolja strategija Rollout (koji klijent spremno priznaje) a kad MOSS na scenu, the client resolved to "do it right" i nas angažirao da im pomogne.

Jedan od središnjih pitanja s kojima se suočava nas kad smo počeli provedbi ovog projekta je: Kako ćemo predstaviti Moss za ovog klijenta? Given that the client already had experience with SharePoint, smo pitali — do we need to do "differential" trening ili ćemo početi od temelja? 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, za upravljanje dokumentima, Usporedite, sigurnosni, ciljanja publike, upravljanje projektima, "fabulous forty" predlošci, tijek rada, poslovnih podataka priključak, itd.. Couple this with the fact that it’s a large organization that moći doista iskoristiti gotovo svakom većem MOSS lice i imate profit od velikog projekta s poduzećem dosega i mnoge dobre stvari koje se dešavaju.

Mi smo suočeni s ovim problemom vrijeme i vrijeme opet … MOSS has an enterprise reach with its enterprise feature-set, yet even somewhat sophisticated clients have a hard time mentally absorbing those features, let alone incorporating an appreciable fraction of them into their daily routine.

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.

Scope:

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" is bad. Zapravo, the "less" that we decided for the initial rollout was miles ahead of where they were before we started. U našem slučaju, the "less" pretvorio u:

  • Jednostavan za upravljanje dokumentima korištenjem biblioteke dokumenata, version control and content types.
  • Učinkovito pretraživanja na temelju sadržaja i prilagođeno unaprijed pretraživanje (putem upravljanim svojstva, XSLT za proizvodnju lijepe rezultate, itd.).

Osim gore navedenih poduzeće-širok značajke (što znači da su se izbacila na svim odjelima i korisnicima), dodali smo sljedeće Singleton-u djelokrug mini-projekata:

  • Dokaz koncepta BDC integracije.
  • Multi-korak i multi-ogranak tijeka procesa stvorili preko SPD.
  • Kompleks InfoPath obrazac.
  • Površina KPI iz nekog poslovnog procesa (Vjerojatno HR talent stjecanje u našem slučaju, iako to može promijeniti).

Opseg ovdje nije 100% accurate but representative of our approach and sufficient for my purpose here, which is to explain what I consider to be an "effective" introduction of MOSS that will set the client firmly down the golden path to full MOSS adoption.

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. Međutim, they will be "out there" i jedna nada da druge poslovne jedinice će znati i učiti o njima i žele one značajke za sebe, leading to greater adoption. These singleton success stories also serve to provide our sales team "ammunition" za uspješno osvojivši drugo, third and n-phase projects.

Što li smo uvesti i zašto?

Nakon što je smjestio na upravljanje dokumentima i potragu kao osnovni poduzeće-širok zahtjev, we needed to start gathering details. As a practical matter, ovo vrti oko razumijevanja svoje dokumente i da u konačnici mapirati na razumijevanju vrste sadržaja.

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" vrste sadržaja, 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. Odnosno,, 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 (or so they seem) pictures of content types and what they do for you in terms of search and how they can be expanded, itd.. Na kraju, it does feel like some light bulbs have turned on, but the resulting white board picture is a mess.

This led us to our current and so far most effective landing place: a MOSS sandbox site configured to show these features.

Using the sandbox site, we demonstrate:

  • Vrste sadržaja:
    • Creating a CT with multiple data types (tekst, datum, choice, boolean, lookup, itd.).
    • Extending a CT by creating a new CT based on a parent.
    • Searching for documents using CT metadata.
  • Document knjižnice:
    • Associating a single CT with a library.
    • What happens when we upload a document to that library?
    • Druženje višestruki CT-a s doc knjižnici.
    • What happens when we upload a document to that library?
    • Filtriranje i sortiranje putem naslova stupaca u doc ​​lib.
    • Biblioteci dokumenata views:
      • Sortiranje
      • Grupiranje
      • "Quick entry" (tehnički list view)
      • "Untagged data" (kako bi se pomoglo u prelasku na mahovina iz drugih izvora sadržaja; više o tome u nastavku).

Sandbox Site:

Osmislili smo naš sandbox stranice kako bi se trajno obilježje u razvojnom okruženju koji će se koristiti u svrhu obuke dugo nakon što smo završili projekt, a uključeno nekoliko predmeta kao što je opisano:

Vrste sadržaja:

Definirali smo sljedeće vrste sadržaja: Faktura, Narudžbenica, Usluge Račun.

Odabrali smo fakture i narudžbenice, jer oni su više ili manje univerzalno pod
stood entities. Everyone in business understands that an invoice is a demand for payment to a kupac za iznos izdana na sigurno datum plaća se po nekim uvjeti plaćanja. This leads to a natural definition of a CT which we called "Training Invoice" (da ga razlikuje od bilo koje druge vrste računa). 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 i dodao samo jedan stupac, "services rendered".

Uz gore, sada možemo pokazati neke ključne značajke CT-a bez uzimajući Zatvaranje pokušava objasniti apstraktni pojam prvi put; everyone already understands what we mean by "invoice" and "purchase order" i umjesto da se moći usredotočiti na mehanici CT sama.

Prilagođeni popisi:

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, "Kupac" 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.

Document knjižnice:

Mi smo stvorili dvije biblioteke dokumenata: "Invoices" and "Mixed Documents".

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

We configured the "Mixed Documents" Knjižnica za upravljanje sve tri CT-a.

Napravite nekoliko stavove koji pokazuju sortiranje, filtriranje, isporučioca i grupiranje.

Traži:

Definirali smo dvije nove upravljane svojstva te ih preslikava na broj dostavnice i Kupac.

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. Show the invoice CT definition while simultaneously assuring them that they don’t need to use those screens themselves, just pick up the concepts.
  3. Go to the invoices document library.
  4. Upload a document.
  5. Pokažite da kupac padajući stvarno je izvor iz prilagođenom popisu.
  6. Dodavanje novog kupca na kupca popisu, a zatim ažurirajte nedavno Dodao Račun je meta podataka s novonastalom kupca.
  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. Pokazati stupcu razini filtriranje.
  10. Pokaži različite stavove koji pokazuju multi-level sortiranje, filtriranje i grupiranje.
  11. Pokaži stajalište podatke o proizvodu.
  12. Explain the purpose of a "untagged documents" pogled.
  13. Prebacite se na prilagođenom napredno pretraživanje.
  14. Do sada, Nedavno ste prenijeli dokument treba imati i indeksirana, 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.

U ovom trenutku, we are more or less done with the demo. It seems to take about 30 na 45 minuta, 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.

In Summary:

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 / primjeri sami.

Business users walk away from theses sessions with "homework" u obliku Excel dokumenata koji su sada sposobni ispuniti i koristiti za izradu vlastite prva krojene vrste sadržaja.

Konačno, kao vršimo demo tijekom vremena, klijentove reprezentativci sami postanu sposobni nositi naprijed, napraviti demo-ih i sami i općenito besplatno do nas ostale da rade na više složenih pitanja, kao što su globalno taksonomija, složeni tijek rada, BDC i sl..

MOSS: Funkcionalna Primjer - Custom Vrsta podataka

Poslovni Scenarij:

Enterprise-wide provedba Moss za proizvodne tvrtke s 30+ mjesta i nekoliko desetaka korporativni odjeli.

Poslovni cilj:

Unatoč mnoštvu poslovnih grupa (odjeli, mjesta, itd.), određene podatke treba održavati na globalnoj razini. Na primjer, autoritativni glavni popis svih fizičkih lokacija tvrtke (e.g. proizvodni pogoni, skladišnim mjestima, prodajnih ureda) treba održavati na središnjem mjestu.

Tehnički problem:

Poduzeće taksonomija je provedena pomoću više zbirki web-mjesta. Mi bismo voljeli stvarati autoritativni popis fizičkih lokacija u prilagođenom popisu WSS. Tada, kada smo trebali imati stupac u vrstu sadržaja (ili stupac dodali na popis ili biblioteku doc) koji je sadržavao korporativne mjestima, we would create a column using the "lookup" datatype i ukazuju na ovom glavnom popisu.

Nažalost, lookup datatypes must access a source list "locally" što znači da je naš autoritativni popis ne može obuhvatiti web zbirke.

Tehničko rješenje:

Provesti novu prilagođenu vrstu podataka odvijaju se na temelju SPField, a predstavljeni kao DropDownList u UI čiji ListItems popuniti s popisa master WSS.

Stvorili smo novu stranicu kolekciju pod nazivom "http://localhost/EnterpriseData". Tamo, we created a custom list named "Corporate Locations". This list just uses the standard "Title" Polje se nalazi i popis aktualnih korporativnih mjestima.

Jedan slijedi nekoliko diskretnih koraka za stvaranje prilagođeni vrstu podataka u WSS. Oni su:

  1. Definirajte klase koja nasljeđuje od SPField (jedan može naslijediti od drugih područja ako je potrebno).

Ovdje je broj za koji:

javni klasa XYZZYCorporateLocationField : SPFieldText
{
javni XYZZYCorporateLocationField
(SPFieldCollection Polja, niz typeName, niz displayName)
: baza(Polja, typeName, displayName) { }

javni XYZZYCorporateLocationField
(SPFieldCollection Polja, niz displayName)
: baza(Polja, displayName) { }

javni nadjačati BaseFieldControl FieldRenderingControl
{
dobiti
{
BaseFieldControl control = novi XYZZYCorporateLocationFieldControl();
control.FieldName = to.InternalName;
povratak control;
} //dobiti
} // fieldrenderingcontrol

javni nadjačati niz GetValidatedString(objekt vrijednost)
{
ako (to.Required || value.ToString().Jednako(Gudački.Prazan))
{
baciti novi SPFieldValidationException ("Department is not assigned.");
}
povratak baza.GetValidatedString(vrijednost);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Odredite drugu klasu koja nasljeđuje iz baze kontrole na terenu, kao u:

javni klasa XYZZYCorporateLocationFieldControl : BaseFieldControl
{
zaštićen DropDownList XYZZYCorporateLocationSelector;

zaštićen nadjačati niz DefaultTemplateName
{
dobiti
{
povratak "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

javni nadjačati objekt Vrijednost
{
dobiti
{
EnsureChildControls();
povratak to.XYZZYCorporateLocationSelector.SelectedValue;
} // dobiti
postaviti
{
EnsureChildControls();
to.XYZZYCorporateLocationSelector.SelectedValue = (niz)to.ItemFieldValue;
} // postaviti
} // override object Value

zaštićen nadjačati poništiti CreateChildControls()
{

ako (to.Field == nula || to.ControlMode == SPControlMode.Prikaz)
povratak;

baza.CreateChildControls();

to.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");

ako (to.XYZZYCorporateLocationSelector == nula)
baciti novi Izuzetak("ERROR: Cannot load .ASCX file!");

ako (!to.Page.IsPostBack)
{

pomoću (SPSite site = novi SPSite("http://localhost / enterprisedata"))
{
pomoću (SPWeb web = site.OpenWeb())
{

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

foreach (SPItem XYZZYCorporateLocation u currentList.Items)
{
ako (XYZZYCorporateLocation["Title"] == nula) nastaviti;

niz theTitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

to.XYZZYCorporateLocationSelector.Items.Add
(novi ListItem(theTitle, theTitle));

} // foreach

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

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Gore kod osnovi provodi logiku za naseljavanja DropDownList s vrijednostima iz WSS prilagođenom popisu se nalazi na http://localhost/enterprisedata and named "Corporate Departments".

Ja definirana obje klase u jednu datoteku. Cs, ga sastaviti i staviti ga u GAC (jaka required, naravno).

  1. Provesti predložak kontrole (.ascx) kao što je prikazano:

<%@ Kontrolirajte Jezik="C#" Nasljeđuje="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Inačica = 12.0.0.0, Culture = neutralan,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Registar Tagprefix="wssawc" Prostor="Microsoft.SharePoint.WebControls" Montaža="Microsoft.SharePoint, Version=12.0.0.0, Kultura = neutralni, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registar Tagprefix="SharePoint" Prostor="Microsoft.SharePoint.WebControls" Montaža="Microsoft.SharePoint, Version=12.0.0.0, Kultura = neutralni, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID="XYZZYCorporateLocationFieldControl" runat="server">
<Predložak>
<trepetljika:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Predložak>
</
SharePoint:RenderingTemplate>

Gore navedeni sprema u C:\Program Files Common Files Microsoft Shared web server ekstenzije 12 controltemplates.

  1. Konačno, možemo stvoriti XML datoteke za spremanje u ..... 12 XML imenik. Ovo je CAML koja definira naš običaj vrstu podataka i za moj primjer, izgleda ovako:

<?xml verzija="1.0" kodiranje="UTF-8" ?>
<
Fieldtypes>
<
FieldType>
<
Polje Ime="TypeName">CorporateLocations</Polje>
<
Polje Ime="ParentType">Tekst</Polje>
<
Polje Ime="TypeDisplayName">Corporate Locations</Polje>
<
Polje Ime="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Polje>
<
Polje Ime="UserCreatable">TRUE</Polje>
<
Polje Ime="ShowInListCreate">TRUE</Polje>
<
Polje Ime="ShowInDocumentLibraryCreate">TRUE</Polje>
<
Polje Ime="ShowInSurveyCreate">TRUE</Polje>
<
Polje Ime="ShowInColumnTemplateCreate">TRUE</Polje>
<
Polje Ime="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Verzija = 1.0.0.0, Kultura = neutralni, PublicKeyToken=b0b19e85410990c4</Polje>
<
RenderPattern Ime="DisplayPattern">
<
Prebaciti>
<
Expr>
<
Kolona />
</
Expr>

<Slučaj Vrijednost=""/>

<Default>
<
HTML>
<![CDATA[
<span style="color:Red"><b>]]>
</
HTML>

<
Kolona SubColumnNumber="0" HTMLEncode="TRUE"/>

<HTML><![CDATA[</b></raspon>]]></HTML>

</
Default>
</
Prebaciti>

</
RenderPattern>
</
FieldType>
</
Fieldtypes>
This XML file adds the custom data type to the WSS "library" i utakmice se protiv GAC'd skupštine.

Nakon premještanja svih tih bitova u mjestu, iisreset na poslužitelju, a sve to treba početi raditi lijepo.

MOSS: Ažuriranje prilagođeni popis

Postoje mnogi dobri primjeri ažuriranje prilagođene popise preko SDK. Ovdje je još jedan.

Poslovni problem: InfoPath obrazac je osmišljen koji omogućava korisnicima da unesete online kupnju obespravljivanja. Brojevi narudžbenica rekvizicije bi trebao biti tradicionalni slijed temelju cjelobrojne vrijednosti, a izračunava se automatski.

Poslovno rješenje: Stvaranje prilagođene Moss popis koji sadrži dva stupca: "ControlField" and "ControlValue". Vrijednost stupac sadrži sljedeći broj kupnju rekvizicije. Note that the generic "control" imenovanja konvencija predviđa buduće kontrole polja koja se mogu koristiti po potrebi.

Tehničko rješenje: Napravite web uslugu pristupa putem InfoPath klijentom. Web-usluga vraća sljedeći broj kupnju rekvizicije i ažurira vrijednost na popisu.

Lekcije naučene:

  • Kod dodavanja ovu web servis kao izvor podataka za InfoPath obrasca, Otkrio sam da je potrebno pretvoriti ga u UDK i pohraniti u knjižnicu podatkovne veze.
  • Također sam pronašao da je potrebno omogućiti unakrsna domene skripti putem usluga središnje uprave // aplikacija za upravljanje // Obrazac konfiguracije poslužitelja.
  • Prvi put pokušao obrazac za pristup web-usluge, to traje neko vrijeme, a povodom, da bi time out. Ja fiddled s postavkama u obliku poslužitelja konfiguraciji proširiti vremena isključivanja postavke i da se činilo da bi.

Kod:

pomoću Sustav;
pomoću System.Web;
pomoću System.Web.Services;
pomoću System.Web.Services.Protocols;
pomoću Microsoft.SharePoint;
pomoću System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
javni klasa PoService : System.Web.Services.WebService
{
javni PoService () {

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

/// <rezime>
/// Obtain the next PO number from the sharepoint po number control list.
/// Increment the PO number in that list.
/// </rezime>
/// <se vraća></se vraća>
[WebMethod]
javni niz GetNextPoNumber()
{
niz SpPoControlSiteName; // Name of the actual MOSS site that hosts the PO Control list.
niz SpPoControlListName; // Name of the actual MOSS list containing the Po control.

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

niz nextPoReqNumber = "xyzzy";

pomoću (SPSite site = novi SPSite(SpPoControlSiteName))
{
pomoću (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpPoControlListName];

foreach (SPItem controlItem u currentList.Items)
{

ako (((niz)controlItem["ControlField"]).Jednako("NextPoNumber"))
{
nextPoReqNumber = (niz)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Pretvoriti.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")

povratak nextPoReqNumber;

}
}