মাসিক আর্কাইভ: জুলাই 2007

শৈবাল: কাস্টম তালিকা মাধ্যমে Iterating এবং InfoPath আপনি ফিল্টার তথ্য ফিরে

ব্যবসা দৃশ্যকল্প:

ব্যবহারকারীদের দ্রুত সঠিক ক্রয় requisitions প্রবেশ করতে সক্ষম হবেন যে একটি পদ্ধতি প্রদান.

ব্যবসায় সমস্যা:

ক্লায়েন্ট কয়েক শত বিক্রেতাদের সাথে ব্যবসা আছে.

Vendors are "type" নির্দিষ্ট. এটি একটি বিক্রেতার কম্পিউটার সরঞ্জাম বিক্রি করে যে অর্থ (e.g. ডেল) বা অফিসে সরবরাহ (e.g. Staples).

কিভাবে আমরা ক্রয় requisitions তৈরি যারা অন্তিম ব্যবহারকারীদের একটি বৈধ বিক্রেতা নির্বাচন সক্রিয় করবো?

ব্যবসা সমাধান:

Differentiate vendors in the system via "type".

Enable users to select the "type" পণ্য এবং তারপর উপযুক্ত বিক্রেতাদের একটি ফিল্টার সেট প্রদান করে.

প্রযুক্তি সমাধান:

একটি InfoPath ফর্ম ব্যবহারকারীদের অনলাইন ক্রয় requisitions প্রবেশ করতে সক্ষম হবেন যে ডিজাইন করা হয়েছে.

দুই InfoPath নির্বাচন তালিকা নিয়ন্ত্রণ বিক্রেতা নির্বাচন. প্রথম, 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 যে গ্রাস একটি InfoPath ক্লায়েন্টের জন্য একটি ওয়েব পরিষেবা বাস্তবায়ন, returning only vendors matching a supplied "type".

InfoPath ফর্ম এর মাধ্যমে ওয়েব সার্ভিস ডাকা.

শিখেছি পাঠ:

  • প্রথম, এই রুট যেতে প্রয়োজনীয় বলে মনে হয়. আমি InfoPath মধ্যে সম্পূর্ণরূপে ফিল্টারিং করতে এবং এখানে যে কোনো ওয়েব পরিষেবা বৈশিষ্ট্য তৈরি করতে আপনি পছন্দ করে. কিন্তু, ফর্ম সার্ভার প্রয়োজনীয় ফিল্টারিং ক্ষমতা উপলব্ধ করা হয় না. We can put a rule onto a the "type" পুনরায় খোলার বিক্রেতা কোয়্যারীর বাছাই আকারে নির্বাচন তালিকা, কিন্তু আমরা তা সঠিকভাবে কাজ পেতে পারে না. সেইজন্য, এটি ওয়েব সেবা বাস্তবায়ন করার প্রয়োজন ছিল.
  • This is a classic "cascading selection list" InfoPath ফর্ম সার্ভার বিশ্বের সমস্যা এবং সেখানে এই সমাধান কিভাবে ব্যাখ্যা যে অনেক ভাল উদাহরণ আছে.
  • ভালো রেফারেন্সড যখন বিক্রেতার তালিকায় একটি কলামের জন্য একটি ফাঁকা মান একটি খালি স্ট্রিং রিটার্ন করে না: initItem["Vendor Name"]. পরিবর্তে, এটি একটি নাল ফেরৎ.

অন্য কিছু নোট:

  • আমি একটি অ্যারের ফিরে[] বিক্রেতারা আমি একটি ArrayList ফিরে কিছু অসুবিধা ছিল, কারণ. InfoPath এটা সম্পর্কে অভিযোগ ছিল এবং আমি এটা উপর যুদ্ধ সময় বা বাঁক আছে কি না. এই, স্বভাবত, বিক্রেতারা মোট সংখ্যার উপর একটি কৃত্রিম সীমা রাখে. এটি একটি ছাঁটা বাস্তবায়ন সম্পর্কে বাধ্য() method on the array because I hate the idea of returning back 100’s of null vendors. InfoPath গ্রাহ্য না করে, কিন্তু এটা আমার nagged. (আবার, এই ArrayLists ওভার InfoPath যুদ্ধ চেয়ে সহজ ছিল).
  • আমি একটি 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.
/// </সারাংশ>
জনসাধারণের বর্গ Vendor
{
জনসাধারণের Vendor() { }

জনসাধারণের Vendor(বিদ্বেষ 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.
}

জনসাধারণের int-এ VendorItemId;
জনসাধারণের স্ট্রিং VendorName;
জনসাধারণের স্ট্রিং VendorAddress1;
জনসাধারণের স্ট্রিং VendorAddress2;
জনসাধারণের স্ট্রিং VendorCity;
জনসাধারণের স্ট্রিং VendorState;
জনসাধারণের স্ট্রিং VendorZip;
জনসাধারণের স্ট্রিং VendorPhone;
জনসাধারণের স্ট্রিং VendorType;
জনসাধারণের স্ট্রিং VendorSalesRepName;
জনসাধারণের স্ট্রিং VendorFax;
}

জনসাধারণের VendorService () {

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

ব্যক্তিগত Vendor[] GenerateTestVendors()
{
Vendor[] resultList;
resultList = নতুন Vendor[100];

Vendor v;
v = নতুন Vendor();
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 = নতুন Vendor();

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 = নতুন Vendor();
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]
জনসাধারণের Vendor GetSpecificVendorById(int-এ 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];

প্রত্যাবর্তন নতুন Vendor(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
জনসাধারণের Vendor 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))
প্রত্যাবর্তন নতুন Vendor(vendorItem);
}

Vendor v = নতুন Vendor();
v.VendorPhone = "not found: " + vendorName;

প্রত্যাবর্তন v;

প্রত্যাবর্তন শূন্য;

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

} // পদ্ধতি

[WebMethod]
জনসাধারণের Vendor[] GetVendorsOfType (স্ট্রিং filterType)
{

স্ট্রিং 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();

Vendor[] resultList;
int-এ vendorIndex = 0;
resultList = নতুন Vendor[1000];

// Initialize the list with a default friendly message.
Vendor v = নতুন Vendor();
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.
#অঞ্চল 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(filterType))
{
resultList[vendorIndex ] = নতুন Vendor(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

প্রত্যাবর্তন শূন্য;
}

ব্যক্তিগত Vendor[] TrimVendorArray(int-এ newsize, Vendor[] originalVendorArray)
{
Vendor[] trimmedArray;

যদি (newsize == 0) newsize = 1;
trimmedArray = নতুন Vendor[newsize];

int-এ currentCounter = 0;

জন্য (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

প্রত্যাবর্তন trimmedArray;

}
}

শৈবাল: InfoPath ডিবাগিং নেভিগেশন পর্যবেক্ষণ

InfoPath ফর্ম সার্ভার ত্রুটি বার্তা বিভ্রান্তিকর হয়.

একটি InfoPath ফর্ম নির্মাণের সময়, আমি MOSS সার্ভারে এটি পোস্ট এবং ফর্ম অ্যাক্সেস করতে হবে. ফর্ম বিস্তারিত জানার জন্য আমার জানালা ইভেন্ট লগ নির্দেশকারী একটি ভুল ত্রুটির বার্তা লোড করা হয় এবং তারপর নির্মাণ করা শুরু হবে. বাস্তবিকই, কোন পাঠান উইন্ডোজ ইভেন্ট লগ করা হবে ছিল. বরং, পাঠান MOSS ASCII ডায়গনিস্টিক লগ পাঠানো হয়েছে. কেন্দ্রিয় সেবা প্রশাসনের মাধ্যমে নিচে যে ট্র্যাক করতে পারে.

আপনি আপনার পায়ের উপর দ্রুত হতে হবে. MOSS লগ ফাইল লিখতে সার্চইঞ্জিন, ঘন ঘন এবং verbosely. This can be trimmed but the default log writing behavior is "everything as quickly as possible".

শৈবাল: একটি কাস্টম তালিকা আপডেট করার প্রণালী

SDK-র মাধ্যমে কাস্টম তালিকা আপডেট করার অনেক ভাল উদাহরণ আছে. এখানে এখনো হয় অন্য.

ব্যবসায় সমস্যা: InfoPath ফর্ম ব্যবহারকারীদের অনলাইন ক্রয় requisitions প্রবেশ করতে সক্ষম হবেন যে ডিজাইন করা হয়েছে. ডাকঘর অধিযাচন সংখ্যা ঐতিহ্যগত ক্রম ভিত্তিক পূর্ণসংখ্যা মান হতে হবে এবং স্বয়ংক্রিয়ভাবে হিসাব করা উচিত.

ব্যবসা সমাধান: দুই কলাম ধারণকারী একটি কাস্টম MOSS তালিকা তৈরি করুন: "ControlField" and "ControlValue". মান কলাম পরের ক্রয় অধিযাচন সংখ্যা উপস্থিত রয়েছে. Note that the generic "control" প্রচলিত রীতি অনুযায়ী নামকরণের প্রয়োজন হিসাবে ব্যবহার করা যেতে পারে যে ভবিষ্যতে নিয়ন্ত্রণ ক্ষেত্র জন্য উপলব্ধ.

প্রযুক্তি সমাধান: InfoPath ক্লায়েন্ট ব্যবহার করতে একটি ওয়েব পরিষেবা তৈরি করুন. ওয়েব সার্ভিস পরের ক্রয় অধিযাচন সংখ্যা এবং আপডেটের তালিকা মূল্য ফেরৎ.

শিখেছি পাঠ:

  • InfoPath ফরমের একটি তথ্য উৎস হিসেবে এই ওয়েব পরিষেবা যোগ করার সময়, 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-এ 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;

}
}