งานที่ต้องทำหลังจากกู้ 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

PowerPivot ทำงานแค่บาง Web Application?

Submitted by ezybzy on Tue, 2013-03-19 - 08:51

แต่ก่อน SharePoint Farm ที่ทำงานสามารถใช้งานการ Refresh ไฟล์รายงาน Excel อัตโนมัติด้วยฟีเจอร์ PowerPivot ได้ดี แต่อยู่มาวันหนึ่งกลับไม่สามารถใช้งานฟีเจอร์ดังกล่าวได้เลย

ช่วงแรกที่พบอาการนี้ พบว่าไม่สามารถเปิดไฟล์ Excel บน SharePoint ได้ ซึ่งเป็นผลจากการทำงานผิดพลาดของ Excel Service ซึ่งพัวพันมาจากการที่ Secure Store Service ถูกปิดไป (สงสัยเหมือนกันว่าใครสั่งปิดมันนะ?) หลังจากที่ทำให้เปิดไฟล์ Excel ได้ก็กลับมาเปิดรายงานตัวเดิมก็พบอาการว่า ไฟล์นั้นเปิดนานมากจน Timeout ไป เลยลองตั้ง Refresh Schedule ใหม่อีกครั้งจึงพบข้อความแปลก ๆ ดังนี้

Errors in the high-level relational engine. The following exception occurred while the managed IDbCommand interface was being used: The remote name could not be resolved: 'domainX'. An error occurred while processing the 'TableA' table. The operation has been cancelled.

พยายามค้นหาข้อความข้างต้นในอินเตอร์เน็ตก็ไม่พบอะไรที่น่าจะแก้ปัญหาได้เลย ก็เลยลองจำลอง PowerPivot อีกตัวขึ้นมาบน Web Application อีกอัน (สมมติว่าเป็น domainY) ปรากฏว่าสามารถใช้งานได้เป็นปกติ! ด้วยความสงสัยอีกขั้นเลยลองเอาไฟล์รายงานเปิดด้วยโปรแกรม Excel ที่ติดตั้ง PowerPivot Add-ins เข้าไปแล้ว Refresh ผลปรากฏว่าสามารถทำงานได้ปกติเช่นกัน แต่จะไม่สามารถ Refresh ด้วยตัว SharePoint เองได้

ดูแล้วทำให้คิดได้ว่า นี่คงไม่ใช่ปัญหาของ PowerPivot เสียแล้ว เพราะใน Farm เดียวกันดันมีบาง Web Application ที่ใช้งานได้ แถมบน Client Applicaiton ก็ยังสามารถอ่านค่าได้ตามปกติ สุดท้ายมานึกได้ว่า ระบบ SharePoint ที่มีได้ทำการเพิ่ม Application Server อีกตัวเข้าไปใน Farm และ domainX นี้ไม่ได้ถูกเพิ่มเข้าไปใน DNS ทำให้ทางออกของปัญหานี้คือ เปิดเข้าไปในเครื่อง SharePoint ใน Farm ทุกเครื่องทำการแก้ไข hosts เพิ่ม domainX ชี้ไปยัง IP ของเครื่อง Front-end หลังจากนั้น PowerPivot ผ่านทางหน้าเว็บก็กลับมาใช้งานได้ตามปกติเช่นเดิม ส่วนเหตุที่ domainY สามารถใช้งานได้นั้นเนื่องจากมีการเพิ่มชื่อใส่ hosts ไปแล้ว

Blog Tags

สิ่งที่ทำผิดบ่อย ๆ ใน SharePoint Provider-hosted App

Submitted by ezybzy on Thu, 2013-03-07 - 04:58

ใช้เวลาหลายวันกว่าจะตั้ง SharePoint Provider-hosted App จนสามารถทำงานได้เสียที ก็ถึงเวลาต้องสรุปบทเรียนว่าต้องทำอย่างไรถึงจะใช้ได้

บทความที่เกี่ยวข้อง

ผมอ่าน 2 บทความต่อไปนี้

แล้วก็ใช้ script ชื่อ PrepareS2SApp.ps1 ของ Andrew Connell (ฟรี แต่ต้องลงทะเบียน) ซึ่งได้ดัดแปลงเพิ่มไปนิดหน่อยให้ตรงตามขั้นตอนของบทความที่สอง (มันหายไปขั้นหนึ่ง)

ปัญหาที่พบและทางแก้

บนเครื่องนอก SharePoint:ในช่วงการพัฒนาบน IIS Express จะพบอาการ 401 (Unauthorized) ทำให้ไม่สามารถสั่ง clientContext.ExecuteQuery() ได้สำเร็จ อันนี้คาดว่าเกิดจากการใช้ IIS Express ซึ่งที่ถูกคือ ผมควรจะใช้ IIS จริงในการพัฒนาและทำการกำหนด host ที่เหมาะสมใน IIS และกำหนดให้ถูกต้องใน AppManifest.xml

บนเครื่อง SharePoint: สามารถพัฒนาได้ทันทีด้วย IIS Express แต่หากคุณใช้ User อื่นที่ไม่ใช่ Setup Admin คุณอาจจะประสบปัญหาติดตั้ง App ไม่สำเร็จ (ใน Event Viewer อาจจะขึ้นเตือนถึงการเข้าฐานข้อมูล AppManagement) อันนี้ผมให้สิทธิ์ User ที่ใช้พัฒนาเข้าถึงฐานข้อมูลนั้นแบบ db_owner ไปเลยซึ่งก็ทำให้สามารถดำเนินการไปต่อได้

Blog Tags

CodeActivity ใน SharePoint 2013

Submitted by ezybzy on Tue, 2013-03-05 - 04:21

หลังจากที่ Microsoft ได้ปล่อยเครื่องมือพัฒนา Office Apps รุ่น Final (เสียที) ก็ได้มีโอกาสมาทดลองความเปลี่ยนแปลง ประกอบกับได้อ่านบทแจกฟรีของหนังสือ Real World .NET C# and Silverlight ของ Wrox ก็เลยได้ลองมาทำ CodeActivity แบบง่าย ๆ ขึ้นมา

Blog Tags

SharePoint 2010 Output ใช้ไม่ได้กับ Reusable Workflow

Submitted by ezybzy on Mon, 2013-02-11 - 09:50

ได้ลองสร้าง Workflow จำลองการอนุมัติเอกสาร (ลองทำตามตัวอย่างใน MSDN ซึ่งจำเป็นต้องใช้ Approval Process (SharePoint 2010 Workflow) ขั้นตอนการทำไม่ได้ซับซ้อนมากมาย ทำการปั้ม Reusable Workflow เดิมมาปรับแต่งตัวแปร เนื่องจากไม่สามารถใช้ Assignment Stages ในนั้นได้ แล้วก็ทำการ Publish Workflow ใหม่นี้เข้ากับ Library ที่ต้องการ จากนั้นจึงสร้าง SharePoint 2013 Workflow ให้เรียกหา Workflow ที่เราเพิ่งสร้างเมื่อซักครู่

สิ่งที่เกิดขึ้นคือ เราสามารถเรียก Workflow ได้จริง แต่จะไม่สามารถนำผลลัพธ์ (SharePoint 2010 Output) มาใช้ได้ ทำให้สิ่งที่ลงแรงไปในขั้นแรกเสียเปล่ารวมถึง SharePoint Designer ปิดตัวเองนับสิบครั้งเมื่อพยายามจะเรียกหาค่าใน Transition Stage

ทางแก้คือ ต้องปรับเปลี่ยนเป็นการสร้าง List Workflow ที่ลาก Action ของ Approval Process แทน แล้วจึงจะสามารถเข้าไปล้วงค่าของ Workflow นี้มาใช้ต่อไปได้

Blog Tags