View.SetWorksetVisibility()を使用して、ワークセットの表示を特定のビューに設定できます。WorksetVisibility オプションには、[表示](ワークセットが開いている場合は表示)[非表示]、[グローバル設定を使用] (ビューの設定を優先しないことを示す)があります。対応する View.GetWorksetVisibility()メソッドは、そのビューのワークセットの現在の表示設定を取得します。ただし、このメソッドは、ワークセットが現在開いているかどうかを考慮しません。ワークセットが開いているか閉じているかを考慮に入れるなど、ワークセットがビューで表示されるかどうかを判断するには、View.IsWorksetVisible()を使用します。
クラス WorksetDefaultVisibilitySettings は、ドキュメントのワークセットの既定の表示を管理します。ファミリ ドキュメントでは使用できません。このワークシェアリングがドキュメントで無効にされている場合、すべての要素は単一のワークセットに移動され、そのワークセット、およびワークシェアリングが再有効化された場合に(再)作成された任意のワークセットは、現在の設定に関係なく、既定で表示されます。
次の例では、特定のビューのワークセットを非表示にして、他のビューのワークセットは既定で非表示にしています。
コード領域: ワークセットを非表示にする |
public void HideWorkset(Document doc, View view, WorksetId worksetId) { // get the current visibility WorksetVisibility visibility = view.GetWorksetVisibility(worksetId); // and set it to 'Hidden' if it is not hidden yet if (visibility != WorksetVisibility.Hidden) { view.SetWorksetVisibility(worksetId, WorksetVisibility.Hidden); } // Get the workset’s default visibility WorksetDefaultVisibilitySettings defaultVisibility = WorksetDefaultVisibilitySettings.GetWorksetDefaultVisibilitySettings(doc); // and making sure it is set to 'false' if (true == defaultVisibility.IsWorksetVisible(worksetId)) { defaultVisibility.SetWorksetVisibility(worksetId, false); } } |
ワークセットの表示設定に関する情報を取得して設定するのに加えて、View クラスもワークシェアリング表示モードおよび設定の情報にアクセスするためのメソッドを提供します。WorksharingDisplayMode 列挙は、表示されている場合にビューがどのモードなのかを示します。
メンバー名 |
説明 |
オフ |
アクティブなワークシェアリング表示モードはありません。 |
CheckoutStatus |
ビューは、要素のチェックアウト ステータスを表示しています。 |
オーナ |
ビューは、要素の特定のオーナを表示しています。 |
ModelUpdates |
ビューは、モデルの更新プログラムを表示しています。 |
ワークセット |
ビューは、各要素が割り当てられているワークセットを表示しています。 |
コード領域: 別のワークシェアリング表示モードをアクティブにする |
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { View activeView = commandData.View; Document doc = activeView.Document; // Prepare settings Color red = new Color(0xFF, 0x00, 0x00); WorksharingDisplayGraphicSettings settingsToApply = new WorksharingDisplayGraphicSettings(true, red); // Toggle mode based on the current mode using (Transaction t = new Transaction(doc, "Toggle display mode")) { t.Start(); WorksharingDisplaySettings settings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc); switch (activeView.GetWorksharingDisplayMode()) { case WorksharingDisplayMode.Off: activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.CheckoutStatus); settings.SetGraphicOverrides(CheckoutStatus.OwnedByOtherUser, settingsToApply); break; case WorksharingDisplayMode.CheckoutStatus: activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.ModelUpdates); settings.SetGraphicOverrides(ModelUpdatesStatus.UpdatedInCentral, settingsToApply); break; case WorksharingDisplayMode.ModelUpdates: activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Owners); settings.SetGraphicOverrides("Target user", settingsToApply); break; case WorksharingDisplayMode.Owners: activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Worksets); settings.SetGraphicOverrides(doc.GetWorksetTable().GetActiveWorksetId(), settingsToApply); break; case WorksharingDisplayMode.Worksets: activeView.SetWorksharingDisplayMode(WorksharingDisplayMode.Off); break; } t.Commit(); } return Result.Succeeded; } |
WorksharingDisplaySettings クラスは、要素がワークシェアリング表示モードのいずれかで表示されたときの表示方法をコントロールします。これらの設定に保存されている色は共通設定で、モデルのすべてのユーザによって共有されます。指定された色が適用されているかどうかは、現在のユーザに特有なため、他のユーザによって共有されません。これらの設定はワークシェアされているモデルでも使用できないことに注意してください。これは、ワークセットを有効化する前に表示設定を事前に環境設定できるようにするもので、これにより表示設定をテンプレート ファイルに格納できます。
コード領域: ワークシェアリング表示グラフィックスの設定 |
public WorksharingDisplayGraphicSettings GetWorksharingDisplaySettings(Document doc, String userName, WorksetId worksetId, bool ownedbyCurrentUser) { WorksharingDisplayGraphicSettings graphicSettings; // get or create a WorksharingDisplaySettings current active document WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc); // get graphic settings for a user, if specified if (!String.IsNullOrEmpty(userName)) graphicSettings = displaySettings.GetGraphicOverrides(userName); // get graphicSettings for a workset, if specified else if (worksetId != WorksetId.InvalidWorksetId) graphicSettings = displaySettings.GetGraphicOverrides(worksetId); // get graphic settings for the OwnedByCurrentUser status else if (ownedbyCurrentUser) graphicSettings = displaySettings.GetGraphicOverrides(CheckoutStatus.OwnedByCurrentUser); // otherwise get graphic settings for the CurrentWithCentral status else graphicSettings = displaySettings.GetGraphicOverrides(ModelUpdatesStatus.CurrentWithCentral); return graphicSettings; } |
オーバーロードされたメソッド WorksharingDisplaySettings.SetGraphicOverrides()は、指定された基準に基づいた要素に割り当てられてたグラフィックスの優先を設定します。
コード領域: グラフィックスの優先 |
public void SetWorksharingDisplaySettings(Document doc, WorksetId worksetId, String userName) { String message = String.Empty; // get or create a WorksharingDisplaySettings current active document WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc); // set a new graphicSettings for CheckoutStatus - NotOwned WorksharingDisplayGraphicSettings graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(255, 0, 0)); displaySettings.SetGraphicOverrides(CheckoutStatus.NotOwned, graphicSettings); // set a new graphicSettings for ModelUpdatesStatus - CurrentWithCentral graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(128, 128, 0)); displaySettings.SetGraphicOverrides(ModelUpdatesStatus.CurrentWithCentral, graphicSettings); // set a new graphicSettings by a given userName graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(0, 255, 0)); displaySettings.SetGraphicOverrides(userName, graphicSettings); // set a new graphicSettings by a given workset Id graphicSettings = new WorksharingDisplayGraphicSettings(true, new Color(0, 0, 255)); displaySettings.SetGraphicOverrides(worksetId, graphicSettings); } |
WorksharingDisplaySettings クラスを使用して、どのユーザがドキュメントの表示されたユーザのリストに表示されるかコントロールすることもできます。RemoveUsers()メソッドは、表示されたユーザのリストからユーザを削除し、グラフィックスのすべてのカスタマイズを永久に破棄します。ドキュメントの任意の要素を所有していないユーザのみを削除できます。RestoreUsers()メソッドは、削除されたユーザを表示されたユーザのリストにもう一度追加し、このユーザにグラフィックスのカスタマイズを許可します。復元された任意のユーザは、既定のグラフィックスの優先設定を使用して表示され、ユーザを削除する前に存在したすべてのカスタマイズは復元されません。
コード領域: ユーザを削除 |
public void RemoveAndRestoreUsers(Document doc) { // get or create a WorksharingDisplaySettings current active document WorksharingDisplaySettings displaySettings = WorksharingDisplaySettings.GetOrCreateWorksharingDisplaySettings(doc); // get all users with GraphicOverrides ICollection<string> users = displaySettings.GetAllUsersWithGraphicOverrides(); // remove the users from the display settings (they will not have graphic overrides anymore) ICollection<string> outUserList; displaySettings.RemoveUsers(doc, users, out outUserList); // show the current list of removed users ICollection<string> removedUsers = displaySettings.GetRemovedUsers(); String message = "Current list of removed users: "; if (removedUsers.Count > 0 ) { foreach (String user in removedUsers) { message += "\n" + user; } } else { message = "[Empty]"; } TaskDialog.Show("Users Removed", message); // restore the previously removed users int number = displaySettings.RestoreUsers(outUserList); // again, show the current list of removed users // it should not contain the users that were restored removedUsers = displaySettings.GetRemovedUsers(); message = "Current list of removed users: "; if (removedUsers.Count > 0 ) { foreach (String user in removedUsers) { message += "\n" + user; } } else { message = "[Empty]"; } TaskDialog.Show("Removed Users Restored", message); } |