มีหลายตัวอย่างของการปรับปรุงรายการที่กำหนดเองผ่าน SDK. นี่คือยังอื่น.
ปัญหาธุรกิจ: ฟอร์ม InfoPath ได้รับการออกแบบที่ช่วยให้ผู้ใช้ป้อนออนไลน์ใบขอซื้อ. ใบ PO เลขควรลำดับดั้งเดิมตามค่าจำนวนเต็ม และคำนวณโดยอัตโนมัติ.
แก้ไขปัญหาธุรกิจ: สร้าง MOSS รายการแบบกำหนดเองที่ประกอบด้วยสองคอลัมน์: "ControlField" และ "ControlValue". ค่าคอลัมน์ประกอบด้วยหมายเลขใบขอซื้อต่อไป. หมายเหตุว่า ทั่วไปที่ "ควบคุม" ชื่อที่แสดงสำหรับเขตข้อมูลตัวควบคุมในอนาคตที่อาจจะใช้ได้ตามความจำเป็น.
ด้านเทคนิค: สร้างบริการเว็บที่เข้าถึงได้ โดยไคลเอ็นต์ InfoPath. บริการเว็บการส่งกลับค่าหมายเลขใบขอซื้อถัดไปกลับ และปรับปรุงค่าของรายการ.
บทเรียนที่เรียนรู้:
- เมื่อมีการเพิ่มบริการเว็บนี้เป็นแหล่งข้อมูลให้กับฟอร์ม InfoPath, ผมพบว่ามันจำเป็นต้องแปลงเป็น udc และเก็บลงในไลบรารีการเชื่อมต่อข้อมูล.
- ยังพบว่าจำเป็นต้องเปิดใช้งานสคริปต์ข้ามโดเมนผ่านการจัดการบริการศูนย์กลาง // จัดการโปรแกรมประยุกต์ // ตั้งค่าคอนฟิกเซิร์ฟเวอร์ของฟอร์ม.
- ครั้งแรกแบบพยายามที่จะเข้าถึงบริการเว็บ, ในขณะที่ใช้ และในบางโอกาส, มันจะหมดเวลา. ผมเล่นการตั้งค่าในแบบฟอร์มการกำหนดค่าเซิร์ฟเวอร์เพื่อขยายการตั้งค่าการหมดเวลา และที่ดูเหมือนจะช่วย.
รหัส:
โดยใช้ ระบบ;
โดยใช้ 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 บรรทัดต่อไปนี้ถ้าใช้ออกแบบส่วนประกอบ
//InitializeComponent();
}
/// <สรุป>
/// ได้รับใบ PO po เลขควบคุมรายการ sharepoint.
/// เพิ่มหมายเลข PO ในรายการ.
/// </สรุป>
/// <ส่งกลับค่า></ส่งกลับค่า>
[WebMethod]
สาธารณะ สายอักขระ GetNextPoNumber()
{
สายอักขระ SpPoControlSiteName; // ชื่อของมอไซต์จริงที่เป็นโฮสต์ให้กับรายการควบคุม PO.
สายอักขระ SpPoControlListName; // ชื่อของรายการมอจริงที่ประกอบด้วยการควบคุมปอ.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
สายอักขระ nextPoReqNumber = "xyzzy";
โดยใช้ (SPSite ไซต์ = ใหม่ SPSite(SpPoControlSiteName))
{
โดยใช้ (SPWeb เว็บไซต์ = OpenWeb())
{
Splist.update() currentList =เว็บ รายการ[SpPoControlListName];
foreach (SPItem controlItem ใน currentList.Items)
{
ถ้า (((สายอักขระ)controlItem["ControlField"]).เท่ากับ("NextPoNumber"))
{
nextPoReqNumber = (สายอักขระ)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = แปลง.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // ค้นหา, การอ่าน และการปรับปรุงหมายเลข PO ในรายการ.
} // ใช้เว็บ spweb = site.openweb()
} // ใช้ spsite ไซต์ = spsite ใหม่("http://localhost/mizuho")
เที่ยวกลับ nextPoReqNumber;
}
}