เรื่องของ People parameter ใน Workflow 2010 และ 2013

Submitted by ezybzy on Mon, 2013-05-20 - 22:47

ใน SharePoint 2010 บน Workflow Initiation/Association Form เมื่อเราต้องการ Parameter สำหรับใส่ People เราสามารถสร้างมันได้จาก SharePoint Designer ซึ่งค่าที่ได้นี้เมื่อถูกนำไปใช้ต่อใน Workflow ในรูปแบบของการสั่ง To string เราจะได้ XML ที่ Malform มาก้อนหนึ่งที่บรรจุรายละเอียดของ People แยกเป็นรายคน ทั้งนี้เนื่องจากฟอร์มดังกล่าวถูกสร้างมาด้วย InfoPath โดยอัตโนมัติ

ใน SharePoint 2013 หากยังคงทำงานกับ Workflow 2010 เราก็ยังคบพฤติกรรมที่เป็นปัญหาแบบเดิม แต่หากเราใช้ Workflow 2013 ฟอร์มดังกล่าวจะกลายเป็น ASP.net Form ทำให้ค่าของ Parameter นี้มีรูปแบบการบันทึกข้อมูลที่เปลี่ยนไป นั่นคือมันจะถูกเก็บเป็น User claim คั่นด้วย ; แทนแล้ว ทำให้เมื่อมีเหตุจำเป็นต้องส่งไปให้ Web Service จัดการประมวลผลค่านี้ อาจจะต้องทำการปรับเปลี่ยนวิธีคิดใหม่ เพราะข้อสันนิษฐานว่าจะเจอ Malform XML นั้นผิดเสียแล้ว

Blog Tags

อันเนื่องจากการติดตั้ง SharePoint 2013 ใหม่อีกรอบ

Submitted by ezybzy on Fri, 2013-05-10 - 15:38

เนื่องจากพบว่า AD ตัวเก่าหลังจากยำ Exchange 2013 แล้วใช้งานตัว Exchange ไม่ได้จนยากเกินเยียวยา ทางผู้ดูแลจึงขอความร่วมมือให้ติดตั้ง SharePoint 2013 ใหม่อีกรอบบน AD อันใหม่ กลับมาทำคราวนี้ก็ยังประหม่าเช่นเคย แต่ก็ได้นำประสบการณ์เก่า ๆ กลับมาลองอีกครั้งเพื่อที่จะช่วยให้ใช้เวลาติดตั้งได้น้อยลง

ขั้นตอนการติดตั้งแทบจะเป็นแบบเดิมทุกประการ มีที่แตกต่างไปในครั้งนี้คือ มีการแยก Workflow Manager ออกจากเครื่อง SharePoint (คราวก่อนรวมไว้บนเครื่อง SharePoint เลย) ซึ่งจะพบปัญหาในขั้นตอนการสั่ง Register-SPWorkflowService อันนี้ก็ลักไก่ไปเพิ่มสิทธิ์ db_owner หรือ SPDataAccess ใน Content Database ของ SPSite ที่ต้องการผูกบริการเอาดื้อ ๆ เลย เพราะแอคเคาท์ติดตั้ง SharePoint ไม่มีสิทธิ์บน SharePoint Content Database (และหลาย ๆ Database) โดยปริยายเหมือนที่เคยคาดไว้

สำหรับ User Profile Service Application และบริการที่เกี่ยวข้อง (Managed Metadata Service, Search, และอะไรซักอย่าง) ก็สร้างขึ้นทีหลังเช่นเคย (รวมถึง Workflow ด้วยเพราะต้องรอ User Profile Service Application เสร็จก่อน) ครั้งนี้ได้บทเรียนมาว่า ให้เปิด User Profile Service ใน Services on Server รอไว้ก่อนจะสร้างได้เลยเพื่อไม่เป็นการเสียเวลา พอสร้างเสร็จตรวจเช็คว่าสามารถเข้าไปในหน้าของ User Profile Service Application ได้ก็ค่อยกลับมาเปิด User Profile Synchronization Service อีกที ซึ่งแน่นอนว่าอาจจะเปิดไม่สำเร็จ ทางแก้ก็คือ Restart เครื่อง SharePoint ซักรอบแล้วทำใหม่ ส่วนในกระบวนการทดสอบ Synchronization จริง ๆ ต้องใช้ ADSI Edit ที่อยู่บนเครื่อง Active Directory ทำการเพิ่มสิทธิ์ในการ Replication Directory Change ให้ (อันนี้ค่อย ๆ ลองทำ ต้องตรวจจาก Log ที่เกิดขึ้นว่ามันฟ้องว่าติดปัญหาที่ใด)

กลับมาที่ Workflow Manager อีกครั้งตอนสร้าง จะสร้างกลุ่มจัดการอยู่ในระดับโดเมนหรือแค่ Local Machine ก็ตามสะดวก แต่โดยปริยายของ Powershell Script ที่ถูกสร้างขึ้นมาจะให้ BUILTIN\Administrators ที่อยู่ในเครื่องที่ติดตั้ง Workflow Manager มีสิทธิ์จัดการ Service ดังนั้นจึงจำเป็นต้องเพิ่มแอคเคาท์ที่จะใช้สั่ง Register-SPWorkflowService เข้าไปในกลุ่มนี้ด้วย

มาจุดที่ระทึกอีกจุดคือ การทำให้เครื่องพร้อมใช้งานสำหรับการพัฒนา App ได้อันนี้ทำตามบทความใน MSDN ได้เลย เพียงแต่ว่าเมื่อกำหนด SPAppDomain ควรตั้งเป็นโดเมนที่เหมือนจะมีอยู่จริง ใช้เป็นชื่อเครื่องไม่ได้ เพื่อความเรียบง่ายในการจัดการอาจจะไปเพิ่ม Record บน DNS ด้วยเพื่อให้เครื่องที่อยู่ในวง DNS เดียวกันสามารถเรียกหา App ได้โดยสะดวก (สำหรับ SharePoint-hosted) ส่วน Provider-hosted ตอนนี้ยังติดปัญหาอยู่ ถ้าแก้ไขได้แล้วจะกลับมาสรุปผลอีกครั้ง

Blog Tags

หลังจากฤดูที่ฉันเหงา

Submitted by ezybzy on Thu, 2013-05-09 - 22:22

ประโยคที่เธอเคยพูดเมื่อสองสามปีก่อนมันก็ย้อนกลับมากระทบจิตใจตลอดเวลา ขอโทษนะที่พี่ทำอะไรไม่ดีไว้ ถึงพูดตอนนี้มันก็คงสายไปแบบที่แป้งโกะพูด ถ้าเป็นไปได้พี่ควรจะเตรียมพร้อมกว่านี้

Blog Tags

ฤดูที่ฉันเหงา

Submitted by ezybzy on Sun, 2013-05-05 - 15:48

"เฝ้าคอยเธอกลับมาหา เฝ้ารอวันที่ฝนซา สุดท้ายก็ว่างเปล่า"

ดู Teaser ของหนังยังเดาทางไม่ออกว่าจะเป็นความรักที่ซับซ้อนอย่างไร แต่แค่ความรู้สึกว่าเนื้อเพลงท่อนนี้เสียดแทงใจก็ทำให้อยากไปดูว่าเราจะมีโอกาสได้ร้องไห้ในหนังเรื่องนี้ไหม

Blog Tags

งานที่ต้องทำหลังจากกู้ Account ที่ถูกลบ

Submitted by ezybzy on Fri, 2013-04-26 - 14:21

เกิดอุบัติเหตุขึ้นขณะทำการตั้งค่า Exchange 2013 ในวงทดสอบ ทำให้ Account ที่ผมใช้ทำงาน (ซึ่งแน่นอนไมได้เป็นผู้ใช้ปกติในระบบ แต่ไม่ได้เป็น Account ระบบของ SharePoint) เป็นประจำถูกลบออกไปจาก AD (ซึ่งยังไม่ได้ปรับให้เป็น 2008 R2) งานเข้าครับกู้ไม่ได้ ก็ได้แต่สร้าง Account ใหม่เข้าไปแทน แต่งานยังไม่จบแค่นั้น ยังมีอีกหลาย ๆ ส่วนที่ต้องจัดการให้ระบบกลับมาใช้งานกับ Account ชื่อเดิมที่ถูกสร้างขึ้นใหม่นี้ ต่อไปนี้จะขอสรุปว่าเราต้องไปไล่เก็บอะไรบ้างตามลำดับที่ควรจะเป็น

  1. จัดการสิทธิ์บน SharePoint ที่เกี่ยวกับ User ตัวนั้นใหม่ทั้งหมด ไม่ว่าจะเป็น Site Permissions ที่ต้องลบออกให้เรียบร้อยก่อน แล้วกลับมาเพิ่มเข้าไปใหม่ รวมถึง Site Collection Administrators, Farm Administrators ด้วย ส่วน User Information List ก็ปล่อยทิ้งไว้หรือจะออกแรงลบอีกหน่อยก็ได้ มิเช่นนั้นมันจะกลายเป็นขยะค้างอยู่ในระบบ
  2. จัดการลบ User นั้นออกจาก Database Instance รวมถึงไล่ลบสิทธิ์ที่ User ได้ตาม Database ก้อนต่าง ๆ ด้วย
  3. ใช้ User ติดตั้ง SharePoint เรียกคำสั่ง Add-SPShellAdmin คืนสิทธิ์บน SharePoint Configuration Database และ Content Database ก้อนอื่น ๆ ที่ User นั้นเข้าไปเกี่ยวข้อง

ในตอนแรกที่ทำ ผมไม่ได้ทำขั้นตอนข้อสอง ซึ่งมันก็เหมือนทุกอย่างจะเป็นปรกติดี จนกระทั่งทดสอบ Deploy ตัว Sandboxed Solution และ Farm Solution ลง Site ที่ต้องการ ตอนนั้นจะพบ error ที่แจ้งว่าติดต่อไซต์ไม่ได้ และใน Event Log จะแจ้งเรื่องการติดต่อกับฐานข้อมูล SharePoint Configuration Database นั่นจึงเป็นเหตุให้เอะใจกลับมานั่งรื้อสิทธิ์บน Database อีกครั้ง หลังจากนั้นทุกอย่างก็เข้าสู่ภาวะปรกติ (เสียที)

Blog Tags

เพิ่ม Authentication Provider บน SharePoint 2010 โดยการเขียนโปรแกรมและ PowerShell

Submitted by ezybzy on Fri, 2013-04-05 - 10:12

วิธีที่นำเสนอต่อไปนี้ยังไม่ได้ทดลองทำบน SharePoint 2013 เลยยังไม่กล้ารับประกันว่าจะทำได้ เลยขอเขียนเจาะจงว่าเป็น 2010 ก่อน

ตามที่ Microsoft แนะนำวิธี การเพิ่ม Authentication Provider ให้กับ SharePoint Farm และ SharePoint Web Application โดยวิธีแก้ด้วยมือ ทางผู้ดูแลระบบต้องแก้ไข web.config 3 ที่ได้แก่ SecurityTokenServiceApplication (อยู่ใน SharePoint Web Services), Central Administration Web Application, และ Web Application ที่ต้องการจะใช้งาน Authentication Provider นั้น

ถ้าใน Farm มี SharePoint แค่เครื่องเดียวมันก็ง่าย เพราะสามารถแก้ทุกอย่างในเครื่องเดียว แต่หากมีการแบ่งแยกหน้าที่เป็นหลายเครื่อง อาจจะพบความไม่สะดวกสบายแล้ว ทางออกที่พอเป็นไปได้คือเขียนโปรแกรมสั่งให้แก้ ซึ่งก็พอมีหนทางเพราะใน API ของ SharePoint ก็มี Class สำหรับแก้ไข web.config อยู่ด้วย ซึ่งหากเล่นกับ Class เหล่านี้เราก็สามารถมั่นใจได้ว่า web.config ที่เราสั่งแก้จะถูกปรับปรุงไปยังทุก IIS Web Site ที่เราต้องการบนทุกเครื่องใน Farm

แต่ปัญหาจริง ๆ สำหรับ SharePoint 2010 นั่นก็คือ ความสามารถนี้ถูกปิดไว้ ต้องสั่งเปิดขึ้นมาก่อนผ่านทาง PowerShell ด้วยคำสั่งต่อไปนี้

$cs = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$cs.RemoteAdministratorAccessDenied = $false
$cs.Update()

เมื่อเปิดให้แก้ไขได้แล้ว เราก็สามารถทำ Feature Event Receiver ที่สั่งให้แก้ไข web.config ของ Web Application ที่ต้องการได้แล้ว

สำหรับ web.config ของ Central Administration นั้น ไม่สามารถใช้คำสั่งข้างต้นเปิดให้แก้ไขได้ (มันจะเป็น AdministrationService แทน) ทำให้เราต้องเขียน PowerShell (หรือจะเขียนเป็นโปรแกรมก็ได้) เพื่อไปเรียกใช้งานบนเครื่อง SharePoint แทน ซึ่งกระบวนการนี้ควรจะทำก่อนที่จะ Activate Feature ในย่อหน้าที่แล้วบน Web Application ที่ต้องการ

ชิ้นส่วนสุดท้ายคือการแก้ไข web.config ของ SecurityTokenServiceApplication ซึ่งในขณะนี้ยังไม่พบหนทางว่าจะจับมันมาเป็น Web Application หรือเจอ SPIisSettings ของมันได้ มีเพียงวิธีแก้ที่ต้องไปรันคำสั่งสั่งแก้ในทุกเครื่องเอาเอง (ดู code จากใน codeplex เอา) ซึ่งก็ไม่ได้ต่างไปจากการแก้มือเลย

Blog Tags