/// <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); }
/// <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); }
/// <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); }
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); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
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); }