2012-06-20 15 views
6

SharePoint 2010 có lưu trữ tên tài khoản của người dùng hiện tại ở đâu đó trong đối tượng JS có thể truy cập toàn cục không?SharePoint nhận tài khoản người dùng hiện tại?

Mọi giải pháp tôi có thể tìm thấy liên quan đến một số biến thể của cuộc gọi dịch vụ web ajax và điều này có vẻ như một giải pháp cực kỳ nặng để truy cập vào những thông tin gì.

Những điều tôi có thể truy cập một cách dễ dàng:

  • Nhận id người dùng hiện hành từ __spUserId
  • Nhận tên người dùng hiện tại bằng cách cạo html của ruy băng (ví dụ: $('#zz17_Menu').text())

Nhưng không phải trong số này là tên tài khoản.

Những điều tôi không muốn làm:

  • Nhận thông tin người dùng hiện tại với một cuộc gọi SOAP để GetUserProfileByName
  • Nhận thông tin người dùng hiện tại bằng cách thực hiện cuộc gọi Ajax cho ../_layouts/userdisp.aspx

Trả lời

5

Đối với bất kỳ ai khác tình cờ xem qua điều này, một năm sau, tôi đã tìm ra cách.

Để trang chính của bạn register SPSWC (nếu bạn đang sử dụng sốcủa Randy Drisgill, nó sẽ có sẵn ở đó).

<%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 

Sau đó, trước khi bạn muốn truy cập vào một tài sản (ví dụ: tên người dùng) kéo trong dữ liệu

<SPSWC:ProfilePropertyLoader runat="server"/> 

Tiếp theo, truy cập một trong những tài sản, tôi sẽ khuyên bạn sử dụng TitleMode để nhúng nó trong một <script> phần tử.

<script> 
    var username = '<SPSWC:ProfilePropertyValue PropertyName="UserName" TitleMode="true" runat="server"/>'; 
</script> 

Bây giờ chúng ta sử dụng nó như thể hiện trong PasteBin demo này để cư một toàn cầu với một vài thuộc tính như tên, họ, tên người dùng, ảnh hồ sơ, trạng thái.

+0

ý tưởng tuyệt vời và một giải pháp thay thế tốt để sử dụng cho các cuộc gọi không đồng bộ với các dịch vụ SharePoint.Cũng hoạt động khá tốt với góc cạnh, vì sau đó bạn có thể xác định giá trị góc với dữ liệu người dùng lúc khởi động ứng dụng thay vì sử dụng dịch vụ góc để "tải chậm" thông tin người dùng. – SPArchaeologist

1

Bạn thực sự cần thực hiện cuộc gọi dịch vụ web để thực hiện điều đó một cách đáng tin cậy. Rất may, SPServices làm cho nó nhanh chóng và không đau để làm như vậy.

http://spservices.codeplex.com/wikipage?title= $% 28% 29.SPServices.SPGetCurrentUser

$().SPServices.SPGetCurrentUser({ 
    fieldName: "Name", 
    debug: false 
}); 
+0

Thật không may "nhanh chóng và không đau" đối với tôi, không có nghĩa là nhanh chóng và không đau cho ứng dụng của tôi. Các dịch vụ SPS sử dụng tuyến thứ hai mà tôi đã đề cập, nó mang đến một bản sao đầy đủ của ../_layouts/userdisp.aspx trong môi trường của tôi là 22KB dữ liệu mất hơn một giây để lấy, sau đó nhận jQuery để khởi tạo toàn bộ phản hồi dưới dạng tài liệu mảnh vỡ, và cuối cùng khoan xuống để có được thông tin của bạn. Điều đó cũng giống như tôi xây dựng một ngôi nhà và chờ bạn viết tên của bạn trên hộp thư. – Sinetheta

+2

Nếu hiệu suất là mục tiêu của bạn thì tôi khuyên bạn nên viết một dịch vụ REST tùy chỉnh lấy id người dùng và trả về tên người dùng. Bằng cách đó, tất cả việc nâng hạng nặng có thể được thực hiện ở phía máy chủ. –