Esempio n. 1
0
        /// <summary>
        /// UndoCheckout di un documento in stato checkout
        /// </summary>
        /// <param name="checkOutStatus"></param>
        /// <param name="library"></param>
        /// <returns></returns>
        public bool UndoCheckOut(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
        {
            bool retValue = false;

            try
            {
                long idOCS = OCSDocumentHelper.getDocumentIdOCS(checkOutStatus.DocumentNumber, null, OCSUtils.getApplicationUserCredentials());

                CorteContentServices.ItemIdRequestType requestId = new DocsPaDocumentale_OCS.CorteContentServices.ItemIdRequestType();
                requestId.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials();
                requestId.itemId          = idOCS; // id del documento

                CorteContentServices.ResultType result = this.WsDocumentInstance.UnlockDocument(requestId);

                OCSUtils.throwExceptionIfInvalidResult(result);

                retValue = true;
            }
            catch (Exception ex)
            {
                retValue = false;

                logger.Debug("Errore in OCS.UndoCheckOut", ex);
            }

            return(retValue);
        }
Esempio n. 2
0
        /// <summary>
        /// UndoCheckout di un documento in stato checkout
        /// </summary>
        /// <param name="checkOutStatus"></param>
        /// <param name="library"></param>
        /// <returns></returns>
        public bool UndoCheckOut(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
        {
            bool retValue = false;

            try
            {
                ObjectIdentity identity = null;

                // Reperimento identity del documento da sbloccare
                if (DocsPaQueryHelper.isStampaRegistro(checkOutStatus.DocumentNumber))
                {
                    identity = Dfs4DocsPa.getDocumentoStampaRegistroIdentityByDocNumber(checkOutStatus.DocumentNumber);
                }
                else
                {
                    identity = Dfs4DocsPa.getDocumentoIdentityByDocNumber(checkOutStatus.DocumentNumber);
                }

                ObjectIdentitySet identitySet = new ObjectIdentitySet();
                identitySet.Identities.Add(identity);
                // Reperimento degli ObjectIdentity per ciascun allegato del documento
                identitySet.Identities.AddRange(Dfs4DocsPa.getAllegatiDocumentoIdentities(this.GetServiceInstance <IQueryService>(false), checkOutStatus.DocumentNumber));

                IVersionControlService service = this.GetServiceInstance <IVersionControlService>(false);
                service.CancelCheckout(identitySet);

                retValue = true;

                if (retValue)
                {
                    this.ClearCheckOutStatusObject(checkOutStatus);

                    retValue = this.SaveCheckOutDocumentProperties(checkOutStatus);

                    if (retValue)
                    {
                        logger.Debug(string.Format("Documentum.UndoCheckOut: effettuato l'undocheckout del documento con id {0} e docnumber {1}", checkOutStatus.IDDocument, checkOutStatus.DocumentNumber));
                    }
                }
            }
            catch (Exception ex)
            {
                retValue = false;

                logger.Debug("Errore in Documentum.UndoCheckOut: " + ex.ToString());
            }

            return(retValue);
        }
Esempio n. 3
0
        /// <summary>
        /// Aggiornamento delle proprietà dell'oggetto "p3_document"
        /// relative al documento che dovrà essere impostato in checkout
        /// </summary>
        /// <param name="checkOutStatus"></param>
        /// <returns></returns>
        private bool SaveCheckOutDocumentProperties(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
        {
            bool retValue = false;

            try
            {
                retValue = this.SaveCheckOutDocumentProperties(checkOutStatus.ID, checkOutStatus.DocumentNumber, checkOutStatus.DocumentLocation, checkOutStatus.MachineName);
            }
            catch (Exception ex)
            {
                retValue = false;

                logger.Debug("Errore in Documentum. SaveCheckOutDocumentProperties: " + ex.ToString());
            }

            return(retValue);
        }
Esempio n. 4
0
        public bool UndoCheckOut(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
        {
            bool retValue = false;

            // Creazione contesto transazionale
            using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext())
            {
                retValue = this.CheckInOutManagerETDOCS.UndoCheckOut(checkOutStatus);
                if (retValue)
                {
                    retValue = this.CheckInOutManagerOCS.UndoCheckOut(checkOutStatus);
                }

                if (retValue)
                {
                    transactionContext.Complete();
                }
            }

            return(retValue);
        }
Esempio n. 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="checkOutStatus"></param>
 /// <param name="user"></param>
 /// <param name="library"></param>
 /// <returns></returns>
 public bool UndoCheckOut(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
 {
     return(this.Instance.UndoCheckOut(checkOutStatus));
 }
Esempio n. 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="checkOutStatus"></param>
 /// <param name="user"></param>
 /// <param name="library"></param>
 /// <returns></returns>
 public bool CheckIn(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus, byte[] content, string checkInComments)
 {
     return(this.Instance.CheckIn(checkOutStatus, content, checkInComments));
 }
Esempio n. 7
0
 /// <summary>
 /// UndoCheckOut del documento
 /// </summary>
 /// <param name="checkOutStatus"></param>
 /// <returns></returns>
 /// <remarks>
 /// L'operazione viene effettuata solamente nel documentale SP
 /// </remarks>
 public bool UndoCheckOut(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
 {
     return(this.CheckInOutManagerETDOCS.UndoCheckOut(checkOutStatus));
 }
Esempio n. 8
0
 /// <summary>
 /// CheckIn del documento
 /// </summary>
 /// <param name="checkOutStatus"></param>
 /// <param name="content"></param>
 /// <param name="checkInComments"></param>
 /// <returns></returns>
 /// <remarks>
 /// Il documento è in checkout solo nel documentale ETDOCS,
 /// pertanto l'operazione di checkin, oltre ad effettuare il checkin in ETDOCS,
 /// dovrà aggiungere la nuova versione anche in DCTM. Ciò comporta
 /// l'utilizzo dei servizi di checkout e checkin del documentale DCTM.
 /// </remarks>
 public bool CheckIn(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus, byte[] content, string checkInComments)
 {
     return this.CheckInOutManagerETDOCS.CheckIn(checkOutStatus, content, checkInComments);
 }
Esempio n. 9
0
 /// <summary>
 /// Rimozione valori attributi relativi allo stato checkout
 /// </summary>
 /// <param name="checkOutStatus"></param>
 protected virtual void ClearCheckOutStatusObject(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus)
 {
     checkOutStatus.DocumentLocation = string.Empty;
     checkOutStatus.MachineName      = string.Empty;
     checkOutStatus.CheckOutDate     = DateTime.MinValue;
 }
Esempio n. 10
0
        /// <summary>
        /// Checkin di un documento in stato checkout
        /// </summary>
        /// <param name="checkOutStatus"></param>
        /// <param name="library"></param>
        /// <returns></returns>
        public bool CheckIn(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus, byte[] content, string checkInComments)
        {
            bool retValue = false;

            try
            {
                // Creazione di un nuovo DataObject che rappresenta il documento da sbloccare
                DataObject dataObject = new DataObject();
                dataObject.Type = ObjectTypes.DOCUMENTO;

                // Reperimento identity del documento da sbloccare
                if (DocsPaQueryHelper.isStampaRegistro(checkOutStatus.DocumentNumber))
                {
                    dataObject.Identity = Dfs4DocsPa.getDocumentoStampaRegistroIdentityByDocNumber(checkOutStatus.DocumentNumber);
                }
                else
                {
                    dataObject.Identity = Dfs4DocsPa.getDocumentoIdentityByDocNumber(checkOutStatus.DocumentNumber);
                }

                List <Property> propertyList = new List <Property>();

                // Impostazione numero versione
                propertyList.Add(new NumberProperty(TypeDocumento.NUMERO_VERSIONE, DocsPaQueryHelper.getDocumentNextVersionId(checkOutStatus.IDDocument)));

                // Rimozione valore proprietà p3_locked_filepath
                propertyList.Add(new StringProperty(TypeDocumento.CHECKOUT_LOCAL_FILE_PATH, string.Empty));

                // Rimozione valore proprietà p3_locked_file_machinename
                propertyList.Add(new StringProperty(TypeDocumento.CHECKOUT_MACHINE_NAME, string.Empty));

                dataObject.Properties = new PropertySet();
                dataObject.Properties.Properties.AddRange(propertyList);

                // Temporaneo, inserimento contentuto file
                OperationOptions opts = new OperationOptions();

                CheckinProfile checkInProfile = new CheckinProfile();
                checkInProfile.MakeCurrent         = true;
                checkInProfile.DeleteLocalFileHint = true;

                opts.Profiles.Add(checkInProfile);

                // Creazione di un nuovo oggetto BinaryContent
                BinaryContent binaryContent = new BinaryContent();
                binaryContent.Value = content;

                string ext = System.IO.Path.GetExtension(checkOutStatus.DocumentLocation);
                if (ext.StartsWith("."))
                {
                    ext = ext.Substring(1);
                }
                string fileFormat = DfsHelper.getDctmFileFormat(this.GetServiceInstance <IQueryService>(false), ext);

                binaryContent.Format = fileFormat;

                dataObject.Contents.Add(binaryContent);

                DataPackage dataPackage = new DataPackage(dataObject);
                dataPackage.RepositoryName = DctmConfigurations.GetRepositoryName();

                IVersionControlService service = this.GetServiceInstance <IVersionControlService>(false);

                VersionStrategy strategy = VersionStrategy.IMPLIED;
                if (!DocsPaQueryHelper.isDocumentAcquisito(checkOutStatus.IDDocument))
                {
                    strategy = VersionStrategy.SAME_VERSION;
                }

                dataPackage = service.Checkin(dataPackage, strategy, false, null, opts);

                retValue = (dataPackage.DataObjects.Count > 0);

                if (retValue)
                {
                    logger.Debug(string.Format("Documentum.CheckIn: effettuato il checkin del documento con id {0} e docnumber {1}", checkOutStatus.IDDocument, checkOutStatus.DocumentNumber));
                }
            }
            catch (Exception ex)
            {
                retValue = false;

                logger.Debug("Errore in Documentum.CheckIn: " + ex.ToString());
            }

            return(retValue);
        }
Esempio n. 11
0
        /// <summary>
        /// CheckIn del documento
        /// </summary>
        /// <param name="checkOutStatus"></param>
        /// <param name="content"></param>
        /// <param name="checkInComments"></param>
        /// <returns></returns>
        /// <remarks>
        /// Il documento è in checkout solo nel documentale ETDOCS,
        /// pertanto l'operazione di checkin, oltre ad effettuare il checkin in ETDOCS,
        /// dovrà aggiungere la nuova versione anche in DCTM. Ciò comporta
        /// l'utilizzo dei servizi di checkout e checkin del documentale DCTM.
        /// </remarks>
        public bool CheckIn(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus, byte[] content, string checkInComments)
        {
            bool retValue = false;

            // Stato del checkout temporaneo in DCTM

            // Flag, se true indica che il documento è temporaneamente in checkout in DCTM
            bool hasCheckedOutDCTM = false;

            // Flag, se true indica che per il documento è stata creata una versione in DCTM;
            // in tal caso il flag 'hasCheckedOutDCTM' deve essere nello stato "false"
            bool hasCheckedInDCTM = false;

            // Informazioni di stato checkout del documento in DCTM
            DocsPaVO.CheckInOut.CheckOutStatus checkOutStatusDCTM = null;

            int nextVersion = this.GetNextVersionId(checkOutStatus.IDDocument);

            try
            {
                // CheckOut del documento in DCTM per la creazione della versione in DCTM,
                if (this.CheckInOutManagerDCTM.CheckOut(checkOutStatus.IDDocument,
                                                        checkOutStatus.DocumentNumber,
                                                        checkOutStatus.DocumentLocation,
                                                        checkOutStatus.MachineName,
                                                        out checkOutStatusDCTM))
                {
                    hasCheckedOutDCTM = true;

                    // CheckIn del documento in DCTM
                    retValue = this.CheckInOutManagerDCTM.CheckIn(checkOutStatusDCTM, content, checkInComments);

                    if (retValue)
                    {
                        hasCheckedOutDCTM = false;
                        hasCheckedInDCTM  = true;

                        if (this.PitreDualFileWritingMode)
                        {
                            // In modalità doppia scrittura, viene effettuato il CheckIn del documento in ETDOCS
                            // NB: L'implementazione del checkin in ETDOCS inserisce il file nel documentale
                            retValue = this.CheckInOutManagerETDOCS.CheckIn(checkOutStatus, content, checkInComments);
                        }
                        else
                        {
                            // Doppia scrittura non attiva

                            // Viene effettuato l'undocheckout del documento e inserita una nuova versione in ETDOCS
                            this.CheckInOutManagerETDOCS.UndoCheckOut(checkOutStatus);

                            // Creazione della versione del documento in ETDOCS
                            retValue = this.CreateDocumentVersion(checkOutStatus, checkInComments, content);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Debug("Si è verificato un errore nel CheckIn del documento nel documentale PITRE", ex);

                retValue = false;
            }
            finally
            {
                if (!retValue)
                {
                    try
                    {
                        // Operazioni di compensazione e ripristino in caso di errore

                        if (hasCheckedOutDCTM && !hasCheckedInDCTM)
                        {
                            // Il documento è rimasto in checkout in DCTM, deve essere annullato
                            if (this.CheckInOutManagerDCTM.UndoCheckOut(checkOutStatusDCTM))
                            {
                                logger.Debug(string.Format("UndoCheckOut per il documento con DocNumber '{0}' in Documentum", checkOutStatus.DocumentNumber));
                            }
                        }
                        else if (!hasCheckedOutDCTM && hasCheckedInDCTM)
                        {
                            // Per il documento è stata creata una versione in DCTM, deve essere rimossa

                            DocsPaVO.documento.FileRequest versionToDelete = this.GetFileRequest(checkOutStatus);

                            bool isAcquired = this.IsAcquired(versionToDelete);

                            if (isAcquired)
                            {
                                versionToDelete.version = nextVersion.ToString();

                                /*
                                 * IDocumentManager documentManager = new DocsPaDocumentale_DOCUMENTUM.Documentale.DocumentManager(this.InfoUtente);
                                 *
                                 * if (documentManager.RemoveVersion(versionToDelete))
                                 * {
                                 *  logger.Debug(string.Format("Versione '{0}' per il documento con DocNumber '{0}' rimossa in Documentum", versionToDelete.version, versionToDelete.docNumber));
                                 * }
                                 */
                            }
                        }
                    }
                    catch (Exception innerEx)
                    {
                        logger.Debug("Si è verificato un errore nelle operazioni di compensazione e ripristino del CheckIn del documento nel documentale PITRE", innerEx);
                    }
                }
            }

            return(retValue);
        }
Esempio n. 12
0
        public bool CheckIn(DocsPaVO.CheckInOut.CheckOutStatus checkOutStatus, byte[] content, string checkInComments)
        {
            //preparo il checkin su ETDOCS, se và bene lo faccio su OCS

            bool retValue = false;

            try
            {
                using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext())
                {
                    DocsPaUtils.Query queryDef = DocsPaUtils.InitQuery.getInstance().getQuery("CHECKINOUT_CHECKIN_DOCUMENT");
                    queryDef.setParam("id", checkOutStatus.ID.ToString());

                    string commandText = queryDef.getSQL();
                    logger.Debug(commandText);

                    using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider())
                        retValue = dbProvider.ExecuteNonQuery(commandText);
                    if (retValue)
                    {
                        // Creazione della versione del documento in etdocs
                        // Reperimento dell'ultima versione del documento
                        bool        fileIsAcquired = false;
                        FileRequest fileRequest    = getLastVersion(checkOutStatus.IDDocument);
                        DocsPaDB.Query_DocsPAWS.CheckInOut checkInOutDb = new DocsPaDB.Query_DocsPAWS.CheckInOut();
                        fileIsAcquired = checkInOutDb.IsAcquired(fileRequest);

                        retValue = this.CreateDocumentVersion(checkOutStatus, checkInComments, content, fileIsAcquired, ref fileRequest);

                        if (retValue)
                        {
                            //lavoro su OCS
                            if (fileIsAcquired)  //devo aggiungere una nuova versione su OCS
                            {
                                retValue = this.DocumentManagerOCS.AddVersion(fileRequest, false);
                            }
                            if (retValue)
                            {
                                FileDocumento fileDoc    = new FileDocumento();
                                string        estensione = fileRequest.fileName.Substring(fileRequest.fileName.LastIndexOf(".") + 1);

                                fileDoc.cartaceo = fileRequest.cartaceo;
                                fileDoc.content  = content;

                                fileDoc.estensioneFile = estensione;
                                fileDoc.name           = fileRequest.fileName;
                                retValue = this.DocumentManagerOCS.PutFile(fileRequest, fileDoc, estensione);
                            }
                            if (retValue)
                            {
                                this.CheckInOutManagerOCS.CheckIn(checkOutStatus, content, checkInComments);
                            }

                            //NB: gestire gli errori e le transazioni !!!
                        }
                    }
                    if (retValue)
                    {
                        transactionContext.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Debug(ex.Message, ex);

                throw new ApplicationException("Errore nel CheckIn del documento. IDDocumento: " + checkOutStatus.IDDocument, ex);
            }

            return(retValue);
        }