public void TestUpdateTrustees_RemoveAndAddBack() { DMLogin.ServerName = DMTestEnvironment.Server; DMLogin.Password = TestHelperSecure.MyPassword; string dst = DMLogin.Dst; // we know the trustees of this existing document int docNumber = 123457; TrusteeInfo docsUsersInitial = new TrusteeInfo("DOCS_USERS", TrusteeType.Group, AccessRights.ReadOnly); TrusteeInfo docsUsersToSet = new TrusteeInfo("DOCS_USERS", TrusteeType.Group, AccessRights.NoAccess); List<TrusteeInfo> expected = new List<TrusteeInfo>() { docsUsersInitial, new TrusteeInfo("HR_USERS", TrusteeType.Group, AccessRights.NormalAccess), new TrusteeInfo("JDOE", TrusteeType.Person, AccessRights.View), new TrusteeInfo("NKHORIN", TrusteeType.Person, AccessRights.FullAccess), }; DMDocument doc = new DMDocument() { Dst = dst, Library = DMLogin.Library }; var actual = doc.FetchTrustees(docNumber); Assert.AreEqual(expected.Count, actual.Length); foreach(var exp in expected) Assert.IsTrue(actual.Contains(exp), "Not found " + exp.Trustee); // Remove DOCS_USERS. We use NoAccess to remove a truestee. // This is the way we implemented DMDocument.UpdateTrustees doc.UpdateTrustees(docNumber, new TrusteeInfo[] { docsUsersToSet }); // check expected.Remove(docsUsersInitial); actual = doc.FetchTrustees(docNumber); Assert.AreEqual(expected.Count, actual.Length); foreach(var exp in expected) Assert.IsTrue(actual.Contains(exp), "Not found " + exp.Trustee); // Add DOCS_USERS back doc.UpdateTrustees(docNumber, new TrusteeInfo[] { docsUsersInitial }); // check expected.Add(docsUsersInitial); actual = doc.FetchTrustees(docNumber); Assert.AreEqual(expected.Count, actual.Length); foreach(var exp in expected) Assert.IsTrue(actual.Contains(exp), "Not found " + exp.Trustee); }
public void UpdateTrustees(int docNumber, TrusteeInfo[] trusteesToSet) { if(trusteesToSet == null) throw new ArgumentNullException("trusteesToSet"); if(trusteesToSet.Length == 0) throw new ArgumentException("trusteesToSet is empty"); var doc = new PCDDocObjectClass(); doc.SetDST(Dst); doc.SetObjectType(ObjectFormDefaultProfile); doc.SetProperty(PropertyTargetLibrary, Library); doc.SetProperty(PropertyObjectIdentifier, docNumber); int result = doc.FetchTrustees(); if(result != S_OK || doc.ErrNumber != 0) throw new DMApiException(string.Format("Cannot fetch trustees for document# {0}.", docNumber), doc.ErrNumber, doc.ErrDescription); // season greetings, DM API developers... var trustees = doc.GetTrustees(); if(doc.ErrNumber != 0) throw new DMApiException("GetTrustees failed.", doc.ErrNumber, doc.ErrDescription); int size = trustees.GetSize(); foreach(var t in trusteesToSet) { int idx = trustees.GetTrusteeIndex(t.Trustee, (int)t.TrusteeType); // funking DM API returns index equal GetSize() if trustee is not found if(idx == size) { if(t.AccessRights != AccessRights.NoAccess) trustees.AddTrustee(t.Trustee, (int)t.TrusteeType, (int)t.AccessRights); } else // update existing if(t.AccessRights == AccessRights.NoAccess) trustees.DeleteTrustee(idx); else trustees.SetTrusteeRights(idx, (int)t.AccessRights); } result = doc.SetTrustees(trustees); if(result != S_OK || doc.ErrNumber != 0) throw new DMApiException("SetTrustees failed.", doc.ErrNumber, doc.ErrDescription); result = doc.UpdateTrustees(); if(result != S_OK || doc.ErrNumber != 0) throw new DMApiException(string.Format("UpdateTrustees failed for document# {0}.", docNumber), doc.ErrNumber, doc.ErrDescription); result = doc.Update(); if(result != S_OK || doc.ErrNumber != 0) throw new DMApiException(string.Format("Cannot update document# {0}.", docNumber), doc.ErrNumber, doc.ErrDescription); }
public void TestFetchTrustees() { DMLogin.ServerName = DMTestEnvironment.Server; DMLogin.Password = TestHelperSecure.MyPassword; string dst = DMLogin.Dst; // we know the trustees of this existing document int docNumber = 123456; TrusteeInfo[] expected = new TrusteeInfo[] { new TrusteeInfo("DOCS_USERS", TrusteeType.Group, AccessRights.ReadOnly), new TrusteeInfo("HR_USERS", TrusteeType.Group, AccessRights.NormalAccess), new TrusteeInfo("JDOE", TrusteeType.Person, AccessRights.View), new TrusteeInfo("NKHORIN", TrusteeType.Person, AccessRights.FullAccess), }; DMDocument doc = new DMDocument() { Dst = dst, Library = DMLogin.Library }; var actual = doc.FetchTrustees(docNumber); Assert.AreEqual(expected.Length, actual.Length); foreach(var exp in expected) Assert.IsTrue(actual.Contains(exp), "Not found " + exp.Trustee); }