コード例 #1
0
ファイル: DMDocumentTest.cs プロジェクト: rexwhitten/edocs
        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);
        }
コード例 #2
0
ファイル: DMDocument.cs プロジェクト: rexwhitten/edocs
        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);
        }
コード例 #3
0
ファイル: DMDocumentTest.cs プロジェクト: rexwhitten/edocs
        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);
        }