2012-07-12 19 views
12

Chúng tôi có YAWF (Một khung công việc khác) được thiết lập cho một trong các khách hàng của chúng tôi. Chúng tôi có quy trình làm việc đơn giản, hoạt động chính xác như chúng tôi yêu cầu, ngoại trừ lịch sử phiên bản thành phần.Quy trình làm việc Tridion - Lịch sử phiên bản thành phần không chính xác

Trong lịch sử phiên bản, thay vì tên của người dùng đã tạo hoặc cập nhật thành phần, chúng tôi chỉ thấy "Trình quản lý nội dung của Tridion NT Author".

Tôi nghi ngờ đây là tài khoản Người dùng MTS được sử dụng để thực thi YAWF. Tuy nhiên, chúng tôi thực sự cần tên người dùng để xuất hiện trong lịch sử phiên bản.

Có lẽ chúng tôi đã định cấu hình YAWF không chính xác?

Có ai khác có vấn đề này hoặc có bất kỳ ý tưởng nào về cách chúng tôi có thể giải quyết vấn đề này không?

Chúng tôi đang sử dụng Tridion 2011. (Chưa SP1)

Trả lời

4

Đó có phải là tài khoản mà thực hiện bước cuối cùng trong tiến trình công việc của bạn?

Bạn có vẻ khá thuyết phục rằng đó là YAWF, bạn đã thử mà không có nó?

+0

Có thể loại cuối cùng trong quy trình làm việc của bạn là hoạt động tự động không? –

+0

@Igor Chính xác, các hoạt động tự động thường được thực hiện bởi hệ thống cục bộ, điều đó chắc chắn sẽ giải thích tác giả. – Quirijn

+0

Hoạt động cuối cùng trong quy trình làm việc của tôi là tự động. Điều đó có nghĩa là mọi thành phần đi qua quy trình làm việc đều không có lịch sử phiên bản chính xác. Có anyway để làm cho tác giả của các thành phần xuất hiện trong lịch sử phiên bản khi sử dụng một quy trình làm việc như thế này? –

3

Nói chung có thể là có nhiều người khác nhau đang làm việc trên một phiên bản, vì việc đăng ký chỉ xảy ra sau khi tất cả các hoạt động được hoàn tất.

Bạn có thể giải quyết vấn đề này bằng cách lặp lại các trình diễn hoạt động và bao gồm nhận xét trong thông báo kết thúc.

Một lựa chọn khác có thể là để mạo danh tác giả:

Set oTDSE = CreateObject("TDS.TDSE") 
oTDSE.Impersonate("[Author]") 
oTDSE.Initialize() 

' use TDSE 

Set oTDSE = Nothing 
0

Tôi nhận ra đây là một câu hỏi cũ, nhưng gần đây tôi đã chiến đấu với cùng một vấn đề này từ góc độ dịch vụ cốt lõi và muốn chia sẻ con đường tôi mất (và có thể ai đó sẽ chỉ ra nơi tôi có thể đã đi sai trước khi tôi triển khai này để sản xuất).

Sau khi thử một vài cách tiếp cận khác với Dịch vụ cốt lõi, tôi đã quyết định thêm hoạt động thủ công cuối cùng vào luồng công việc và logic tùy chỉnh của mình cho hoạt động tự động trước đó. Trong logic dịch vụ cốt lõi của hoạt động tự động, tôi kết thúc hoạt động tự động hiện tại (trả về phiên bản hoạt động thủ công cuối cùng), giả mạo tác giả ban đầu, bắt đầu cá thể hoạt động cuối cùng (làm tác giả) và hoàn thành cá thể hoạt động cuối cùng (một lần nữa, tác giả).

Tôi đang sử dụng SessionAwareCoreServiceClient và chạy trên chính Trình quản lý nội dung. Tôi phải thêm "NT AUTHORITY \ SYSTEM" để những người sử dụng Mạo danh trong nội dung tiện ích cấu hình quản lý Tridion (có thể có tác động an ninh sử dụng Mạo danh, do đó hãy chắc chắn rằng nó có ý nghĩa đối với môi trường của bạn):

Impersonation Users

mã này trông giống như thế này (mặc dù tôi đã rời ra một số điều như nhận được các trường hợp hoạt động hiện tại, lấy tác giả ban đầu từ các hoạt động thủ công đầu tiên và tôi bổ sung bằng cách sử dụng SessionAwareCoreServiceClient để cung cấp cho một số ngữ cảnh):

using (SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient()) 
{ 
    ActivityFinishData activityFinish = new ActivityFinishData() 
    { 
     Message = message, 
     NextAssignee = new LinkToTrusteeData() { IdRef = authorUser.IdRef } 
    }; 

    // Finish current automatic activity 
    ActivityInstanceData finalActivity = client.FinishActivity(activityInstance.Id, activityFinish, new ReadOptions()); 

    // Impersonate original author 
    client.Impersonate(authorUser.Title); 

    // Start final (manual) activity as author - if you don't start it, then non-Administrators can't finish them. 
    client.StartActivity(finalActivity.Id, null); 
    // Finish final (manual) activity as author 
    client.FinishActivity(finalActivity.Id, activityFinish, null); 
} 

Hy vọng tôi cũng không làm gì cả khủng khiếp ngu ngốc và có thể câu trả lời này sẽ giúp một người như bản thân tôi phải cobble nó với nhau từ các câu hỏi khác nhau/blog/tài liệu tham khảo và thực hiện một chút thử và lỗi (mà có thể nhận được tẻ nhạt với công việc).

0

Đó là hành vi mong đợi. Nếu hoạt động cuối cùng của luồng công việc là Tự động. Nó luôn được thực hiện bởi Tridion Content Manager System NT Author. Người dùng có tác nhân dịch vụ dòng công việc nào đang chạy. Là một công việc xung quanh bạn có thể sử dụng giải pháp stuarts J. Tôi cũng đã làm tương tự.

Đã thêm hoạt động khác dưới dạng tự động. Và đã thực hiện hoạt động này với người dùng đã tạo nội dung ban đầu. Nội dung theo cách đó được kiểm tra với chi tiết tác giả. Tuy nhiên, để mạo danh trong quy trình làm việc, hãy đảm bảo rằng máy Tridion của bạn có người dùng mạo danh NT AUTHORITY \ SYSTEM với kiểu người dùng Windows.

public void UpdateVersion(string workitemid,string componentid) 
    { 
     try 
     { 
      Stopwatch _watch = new Stopwatch(); 
      _watch.Start(); 
      Logger.Debug("Entered RPPTridionWorkflow UpdateVersion "); 
      WorkItemData workItem = (WorkItemData)CoreServiceClient.Read(workitemid, options); 
      ProcessInstanceData processInstance = 
       (ProcessInstanceData)CoreServiceClient.Read(workItem.Process.IdRef, options); 
      ActivityData creatorActivityData = getActivityDataBasedOnName(workitemid, "Content Creation"); 
      if (creatorActivityData != null) 
      { 
       LinkToUserData linktoAuthorUser = creatorActivityData.Owner; 
       UserData authorUser = (UserData)CoreServiceClient.Read(linktoAuthorUser.IdRef, options); 
       CoreServiceClient.Impersonate(authorUser.Title); 
      } 
      ActivityData[] ieActivities = processInstance.Activities; 
      int currentActivity = ieActivities.Length - 1; 
      if (ieActivities != null) 
      { 
       ActivityInstanceData activityInstance = 
        (ActivityInstanceData)CoreServiceClient.Read(processInstance.Activities[currentActivity].Id, options); 

       ActivityFinishData finishData = new ActivityFinishData(); 
       finishData.Message = "Finished automatically and upded version info for component checked in"; 
       CoreServiceClient.FinishActivity(activityInstance.Id, finishData, options); 
       CoreServiceClient.Close(); 
      } 
Các vấn đề liên quan