શેવાળ / ઈન્ફોપાથ ફોર્મ સર્વર (ઈન્ફોપાથ 2007) ડ્રોપ ડાઉન યાદીમાં કામગીરી

વધારાના શ્રેણી: ઈન્ફોપાથ

સારાંશ: એક ઈન્ફોપાથ 2007 એક શેવાળના સર્વર તૈનાત ફોર્મ વૈવિધ્યપૂર્ણ MOSS યાદી જોડવા માટે વિક્રેતાઓ એક ડ્રોપ ડાઉન યાદી પૂરી પાડે છે. એક વિક્રેતા પસંદ કરવા પર, નિયમો જેમ કે વેચાણ પ્રતિનિધિનો નામ તરીકે લખાણ ક્ષેત્રોમાં મદદરૂપ કરવા માટે ક્ષેત્ર કિંમતો સોંપવા, સરનામું, શહેર, રાજ્ય, ઝીપ અને ફોન. બોનસ ભયાનક છે. We notice that performance gets worse (in a non-linear fashion) for each additional field we update this way. I.e., if we just update the sales rep name, it takes [X] amount of time. If we update sales rep, address1, address2, શહેર, રાજ્ય, zip, it takes 10 times longer.

ઉકેલ: Write a web service (sample code can be found અહીં) that is passed in the name of a vendor and it returns back the vendor details. તે પછી, assign the fields this way. Although this too seems slow, there was no discernable difference in performance when we assigned 1 field versus 8 ક્ષેત્રો. As an added bonus, users get a cool "contacting the server" Cylon તેઓ સેવા પરિણામો જગાડવા અને ઉપયોગ કરવા માટે આ ફોર્મ માટે રાહ જુઓ જ્યારે અસર.

શેવાળ: અપવાદ ઉદ્દભવ્યો. (HRESULT માંથી અપવાદ: 0x80020009 (DISP_E_EXCEPTION))

અપડેટ: અમે આ સમસ્યા રુટ કારણ નક્કી નહીં અને તે ફરી ક્યારેય પૃષ્ઠભાગ.

અમે વિકાસ સાઇટ કે અચાનક અમલીકરણ દરમિયાન નોટિસ, બે વપરાશકર્તાઓને સાઇટ સંગ્રહ ઍક્સેસ કરવામાં અક્ષમ છે. તે એકાઉન્ટ્સ મુખ્ય સાઇટ પર પ્રમાણિત કરી શકો છો, પરંતુ કોઈ ચોક્કસ સાઇટ સંગ્રહ ઍક્સેસ કરવાનો પ્રયાસ કરી રહ્યા હોય ત્યારે, તેઓ માત્ર એક ખાલી સ્ક્રીન વિચાર. પ્રદર્શિત કોઈ ભૂલો, માત્ર એક સફેદ ખાલી પાનું.

અમે એક સાઇટ સંગ્રહ સંચાલક તરીકે પ્રવેશ કરો અને એક સાઇટ સંચાલક તરીકે તે વપરાશકર્તાઓ એક ઉમેરવા માટે પ્રયત્ન કરો અને આ સમય, upon pressing "OK", અમે આ સંદેશને વિચાર:

અપવાદ ઉદ્દભવ્યો. (HRESULT માંથી અપવાદ: 0x80020009 (DISP_E_EXCEPTION))

અમે આ અને કમનસીબે સંશોધન કેટલાક સમય ગાળ્યો, ઉપયોગી કંઈપણ સાથે આવે ન હતી. તપાસ લોગ ઇન કેટલાક સંદેશાઓ હતા, પરંતુ તે બરાબર આ મુદ્દો સાથે તેમને સંબંધ માટે મુશ્કેલ હતું.

અંતે, અમને સાઇટ સંગ્રહ કાઢી નાખવાનો અને તેને ફરીથી બનાવનાર અને તે હલ.

હું ભવિષ્યમાં આ કારણે શું બહાર આકૃતિ તો, હું આ પોસ્ટને અપડેટ કરીશું.

શેવાળ: વૈવિધ્યપૂર્ણ યાદીઓમાં વારો અને ઈન્ફોપાથ માટે ફિલ્ટર માહિતી પરત

વ્યાપાર પરિદ્દશ્ય:

વપરાશકર્તાઓ ઝડપથી ચોક્કસ ખરીદી requisitions દાખલ કરવા માટે સક્રિય કરે છે કે જે એક પદ્ધતિ પૂરી પાડે છે.

વ્યાપાર સમસ્યા:

ક્લાઈન્ટ કેટલાય વિક્રેતાઓ સાથે બિઝનેસ કરે છે.

Vendors are "type" ચોક્કસ. આ એક વિક્રેતા કમ્પ્યુટર સાધનો વેચે અર્થ એ થાય કે (e.g. ઝાડપાનથી ઘેરાયેલી નાની ખીણ) અથવા ઓફિસ પુરવઠો (e.g. સ્ટેપલ્સ).

અમે કેવી રીતે ખરીદી requisitions બનાવવા જે અંતિમ વપરાશકર્તાઓ એક માન્ય વિક્રેતા પસંદ કરો સક્રિય કરો?

વ્યાપાર સોલ્યુશન:

Differentiate vendors in the system via "type".

Enable users to select the "type" ઉત્પાદન અને પછી યોગ્ય વિક્રેતાઓ એક ફિલ્ટર સેટ પૂરી પાડે છે.

ટેકનિકલ સોલ્યુશન:

એક ઈન્ફોપાથ ફોર્મ વપરાશકર્તાઓ ઓનલાઈન ખરીદી requisitions દાખલ કરવા માટે સક્રિય કરે છે કે જે ડિઝાઇન કરવામાં આવ્યું છે.

બે ઈન્ફોપાથ પસંદગી યાદીઓ નિયંત્રણ વિક્રેતા પસંદગી. પ્રથમ, the user selects a "purchase type". This limits a second selection list to contain only vendors that sell for that purchase type. This is a classic cascading drop-down.

વિક્રેતાઓ જેમ કે નામ તરીકે વિક્રેતા લક્ષણો માટે કસ્ટમ કૉલમ સાથે MOSS વૈવિધ્યપૂર્ણ યાદી સંગ્રહાયેલ છે, address and especially "type".

વૈવિધ્યપૂર્ણ વિક્રેતા યાદી મારફતે iterates કે વપરાશ માટે એક ઈન્ફોપાથ ક્લાઈન્ટ માટે વેબ સેવાનો અમલ, returning only vendors matching a supplied "type".

જો ઈન્ફોપાથ ફોર્મ મારફતે વેબ સેવાનો.

શીખેલા પાઠ:

  • પ્રથમ, આ માર્ગ પર જાઓ જરૂરી લાગે છે. હું ઈન્ફોપાથ અંદર સંપૂર્ણપણે ગાળણ કરે છે અને અહીં કોઈપણ વેબ સેવા વિધેય ન બનાવો પસંદ હશે. તેમ છતાં, ફોર્મસ સર્વર જરૂરી ગાળણ ક્ષમતા પ્રદાન કરતું નથી. We can put a rule onto a the "type" ફરી ખોલો વિક્રેતા ક્વેરીના સૉર્ટ કરવા સ્વરૂપમાં પસંદગી યાદી, પરંતુ અમે તે યોગ્ય રીતે કામ કરવા માટે વિચાર કરી શકતા નથી. એના પરિણામ રૂપે, તે વેબ સેવાનો અમલ કરવા માટે જરૂરી હતું.
  • This is a classic "cascading selection list" જો ઈન્ફોપાથ ફોર્મ સર્વર વિશ્વમાં સમસ્યા છે અને ત્યાં આ ઉકેલવા માટે કેવી રીતે સમજાવવા કે ત્યાં ત્યાં બહાર ઘણા સારા ઉદાહરણો છે.
  • આ જેમ સંદર્ભ જ્યારે વિક્રેતા યાદીમાં સ્તંભ માટે એક ખાલી કિંમત ખાલી શબ્દમાળા પાછા નથી: initItem["Vendor Name"]. ને બદલે, જો તે નલ આપે છે.

કેટલાક અન્ય નોંધો:

  • હું એક એરે પાછા[] વિક્રેતાઓ હું એક ArrayList પરત અમુક મુશ્કેલી હતી કારણ કે. ઈન્ફોપાથ તે વિશે ફરિયાદ કરી હતી અને હું તેને લડવા માટે સમય અથવા ઝોક ન હતી. આ, અલબત્ત, વિક્રેતાઓ કુલ સંખ્યા પર મર્યાદા મૂકે છે એક કૃત્રિમ. તે પણ ટ્રીમ અમલ કરવા માટે મને ફરજ પાડી() method on the array because I hate the idea of returning back 100’s of null vendors. ઈન્ફોપાથ કાળજી નથી, પરંતુ તે મને અંતે પજવવું. (ફરી, આ ArrayLists પર ઈન્ફોપાથ લડાઈ કરતાં સરળ હતું).
  • હું GetSpecificVendorByName અમલ() કાર્ય તેમજ, ઉપદેશક હોઈ શકે છે જે.

આ કોડ:

નો ઉપયોગ પદ્ધતિ;
નો ઉપયોગ System.Web;
નો ઉપયોગ System.Web.Services;
નો ઉપયોગ System.Web.Services.Protocols;
નો ઉપયોગ Microsoft.SharePoint;
નો ઉપયોગ System.Configuration;

/// <સારાંશ>
///
Vendor Service: Provides vendor related services which today are consumed by an infopath client form.
///
/// History:
/// ——–
/// 07/24/07: Initial coding, Paul J. Gavin of Conchango.
///
/// </સારાંશ>
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
જાહેર વર્ગ VendorService : System.Web.Services.WebService
{

/// <સારાંશ>
/// Represents a vendor from a custom sharepoint list maintained by MSUSA.
/// </સારાંશ>
જાહેર વર્ગ વિક્રેતા
{
જાહેર વિક્રેતા() { }

જાહેર વિક્રેતા(બોલે initItem)
{
જો (! (initItem["Vendor Name"] == શૂન્ય)) VendorName = initItem["Vendor Name"].ToString();
જો (! (initItem["Address 1"] == શૂન્ય)) VendorAddress1 = initItem["Address 1"].ToString();
જો (! (initItem["Address 2"] == શૂન્ય)) VendorAddress2 = initItem["Address 2"].ToString();
જો (! (initItem["City"] == શૂન્ય)) VendorCity = initItem["City"].ToString();
જો (! (initItem["VendorPhone"] == શૂન્ય)) VendorPhone = initItem["VendorPhone"].ToString();
જો (! (initItem["PurchaseType"] == શૂન્ય)) VendorType = initItem["PurchaseType"].ToString();
જો (! (initItem["State"] == શૂન્ય)) VendorState = initItem["State"].ToString();
જો (! (initItem["Zip"] == શૂન્ય)) VendorZip = initItem["Zip"].ToString();
જો (!(initItem["Fax"] == શૂન્ય)) VendorFax = initItem["Fax"].ToString();
જો (!(initItem["SalesRepName"] == શૂન્ય)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // Unique ID maintained via MOSS.
}

જાહેર ઈન્ VendorItemId;
જાહેર સ્ટ્રિંગ VendorName;
જાહેર સ્ટ્રિંગ VendorAddress1;
જાહેર સ્ટ્રિંગ VendorAddress2;
જાહેર સ્ટ્રિંગ VendorCity;
જાહેર સ્ટ્રિંગ VendorState;
જાહેર સ્ટ્રિંગ VendorZip;
જાહેર સ્ટ્રિંગ VendorPhone;
જાહેર સ્ટ્રિંગ VendorType;
જાહેર સ્ટ્રિંગ VendorSalesRepName;
જાહેર સ્ટ્રિંગ VendorFax;
}

જાહેર VendorService () {

//Uncomment the following line if using designed components
//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(ઈન્ vendorId)
{
સ્ટ્રિંગ SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
સ્ટ્રિંગ SpVendorListName; // Name of the actual MOSS list containing vendors.

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

નો ઉપયોગ (SPSite site = નવું SPSite(SpVendorSiteName))
{

નો ઉપયોગ (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

બોલે specificItem = currentList.Items[vendorId];

પાછા નવું વિક્રેતા(specificItem);

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

}

[WebMethod]
// Assumes that the vendor name is unique, from a business perspective
જાહેર વિક્રેતા GetSpecificVendorByVendorName(સ્ટ્રિંગ vendorName)
{
સ્ટ્રિંગ SpVendorSiteName; // Name of the actual MOSS site that hosts the vendor custom list.
સ્ટ્રિંગ SpVendorListName; // Name of the actual MOSS list containing vendors.

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

નો ઉપયોગ (SPSite site = નવું SPSite(SpVendorSiteName))
{
નો ઉપયોગ (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists[SpVendorListName];

foreach (બોલે vendorItem માં currentList.Items)
{
જો (vendorItem["Vendor Name"] == શૂન્ય) ચાલુ;

જો (vendorItem["Vendor Name"].ToString().બરાબર(vendorName))
પાછા નવું વિક્રેતા(vendorItem);
}

વિક્રેતા v = નવું વિક્રેતા();
v.VendorPhone = "not found: " + vendorName;

પાછા v;

પાછા શૂન્ય;

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

} // પદ્ધતિ

[WebMethod]
જાહેર વિક્રેતા[] GetVendorsOfType (સ્ટ્રિંગ ફિલ્ટર પ્રકાર)
{

સ્ટ્રિંગ SpVendorSiteName; // Name of the actual MOSS site that hosts t
he vendor custom list.
સ્ટ્રિંગ SpVendorListName; // Name of the actual MOSS list containing vendors.

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

વિક્રેતા[] resultList;
ઈન્ vendorIndex = 0;
resultList = નવું વિક્રેતા[1000];

// Initialize the list with a default friendly message.
વિક્રેતા v = નવું વિક્રેતા();
v.VendorName = "Select a vendor type to populate this list.";
resultList[0] = v;

// Convert the filter to lower case for easier string comparison later.
filterType = filterType.ToLower();

// If the filter type passed is "test", generate some simple data.
#region Filter type = "test"
જો (filterType.Equals("test"))
પાછા GenerateTestVendors();
#endregion

જો (સાચું)
{
નો ઉપયોગ (SPSite site = નવું SPSite(SpVendorSiteName))
{
નો ઉપયોગ (SPWeb web = site.OpenWeb())
{

v = શૂન્ય;

SPList currentList = web.Lists[SpVendorListName];

// Iterate through all the items in the vendor list.
foreach (બોલે vendorItem માં currentList.Items)
{

સ્ટ્રિંગ lowerVendorType;

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

જો (lowerVendorType.Equals(ફિલ્ટર પ્રકાર))
{
resultList[vendorIndex ] = નવું વિક્રેતા(vendorItem);
}
} // iterating thru all the vendors in the list


પાછા TrimVendorArray(vendorIndex, resultList);
// return resultList;

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

} // if true

પાછા શૂન્ય;
}

ખાનગી વિક્રેતા[] TrimVendorArray(ઈન્ newsize, વિક્રેતા[] originalVendorArray)
{
વિક્રેતા[] trimmedArray;

જો (newsize == 0) newsize = 1;
trimmedArray = નવું વિક્રેતા[newsize];

ઈન્ currentCounter = 0;

માટે (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

પાછા trimmedArray;

}
}

શેવાળ: ઈન્ફોપાથ ડિબગીંગ ઓબ્ઝર્વેશન્સ ઓન

ઈન્ફોપાથ ફોર્મ સર્વર ભૂલ સંદેશાઓ ગેરમાર્ગે દોરી રહ્યાં છે.

એક ઈન્ફોપાથ ફોર્મ વિકાસ દરમિયાન, હું MOSS સર્વર તેને પોસ્ટ અને ફોર્મ ઍક્સેસ હશે. આ સ્વરૂપ વિગતો માટે મને વિન્ડોઝ ઇવન્ટ લોગ કરવા માટે નિર્દેશ કરતી એક ભ્રામક ભૂલ સંદેશો લાવવા માટે અને પછી પેદા કરવા માટે શરૂ કરશે. હકીકતમાં, આ બોલ પર કોઈ સંદેશો વિન્ડોઝ ઇવન્ટ લોગ કરવા માટે લખવામાં આવ્યું હતું. ચોક્કસ, સંદેશો MOSS ASCII ડાયગ્નોસ્ટિક લૉગ મોકલ્યો હતો. તમે કેન્દ્રિય સેવાઓ વહીવટ મારફતે ટ્રૅક કરી શકો છો.

તમે તમારા પગ પર ઝડપી જરૂર. MOSS લોગ ફાઈલમાં લખવા માટે ગમતો, વારંવાર અને verbosely. This can be trimmed but the default log writing behavior is "everything as quickly as possible".

શેવાળ: વૈવિધ્યપૂર્ણ યાદી સુધારી રહ્યા છીએ

There are many good examples of updating custom lists via the SDK. Here is yet another.

વ્યાપાર સમસ્યા: InfoPath form has been designed that enables users to enter online purchase requisitions. PO Requisition numbers should be traditional sequence based integer values and calculated automatically.

વ્યાપાર સોલ્યુશન: Create a custom MOSS list containing two columns: "ControlField" and "ControlValue". The value column contains the next purchase requisition number. Note that the generic "control" naming convention provides for future control fields that may be used as needed.

ટેકનિકલ સોલ્યુશન: Create a web service accessed by the InfoPath client. The web service returns back the next purchase requisition number and updates the value of the list.

શીખેલા પાઠ:

  • When adding this web service as a data source to the InfoPath form, I found it necessary to convert it to a udc and store it into a data connection library.
  • 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];

foreach (બોલે controlItem માં currentList.Items)
{

જો (((સ્ટ્રિંગ)controlItem["ControlField"]).બરાબર("NextPoNumber"))
{
nextPoReqNumber = (સ્ટ્રિંગ)controlItem["ControlValue"];

ઈન્ 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;

}
}