/// <summary> /// Checkout di un documento /// </summary> /// <param name="checkOutStatus">Metadati relativi allo stato del documento in checkout</param> /// <param name="user"></param> /// <param name="library"></param> /// <returns></returns> public bool CheckOut(string idDocument, string documentNumber, string documentLocation, string machineName, out CheckOutStatus checkOutStatus) { checkOutStatus = null; bool retValue = false; try { //Il documento viene messo nello stato LOCK long idOCS = OCSDocumentHelper.getDocumentIdOCS(documentNumber, null, OCSUtils.getApplicationUserCredentials()); CorteContentServices.ItemIdRequestType requestId = new DocsPaDocumentale_OCS.CorteContentServices.ItemIdRequestType(); CorteContentServices.ResultType result; requestId.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials(); requestId.itemId = idOCS; // id del documento result = this.WsDocumentInstance.LockDocument(requestId); OCSUtils.throwExceptionIfInvalidResult(result); retValue = true; } catch (Exception ex) { retValue = false; logger.Debug("Errore in OCS.CheckOut", ex); } return(retValue); }
/// <summary> /// Handler dell'evento di avvenuta trasmissione di un documento / fascicolo /// </summary> /// <param name="trasmissione"></param> /// <param name="infoSecurity"> /// Oggetto contenente i metadati relativi alla tipologia di ACL /// impostata nella trasmissione di un documento / fascicolo /// </param> public void TrasmissioneCompletataEventHandler(DocsPaVO.trasmissione.Trasmissione trasmissione, DocsPaVO.trasmissione.infoSecurity[] infoSecurityList) { // In caso di trasmissione con cessione diritti attivata, cambia il proprietario del documento // in OCS proprietario e non, hanno il solo diritto di lettura, quindi basta aggiornare l'acl //TODO: if (trasmissione.tipoOggetto == DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO) { // Reperimento ACL per il documento smistato bool retValue = false; try { //bisogna reperire l'id OCS UserCredentialsType credentials = OCSUtils.getApplicationUserCredentials(); long idOCS = OCSDocumentHelper.getDocumentIdOCS(trasmissione.infoDocumento.docNumber, null, credentials); //reperisco la acl del documento docspa e aggiorno quelle di OCS retValue = OCSDocumentHelper.setAclDocument(trasmissione.infoDocumento.idProfile, idOCS, this.InfoUtente, credentials); } catch (Exception ex) { retValue = false; logger.Error("Errore in OCS.TrasmissioneCompletataEventHandler", ex); } } }
/// <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> /// Modifica dei metadati di un ruolo /// </summary> /// <param name="ruolo"></param> /// <returns></returns> public EsitoOperazione ModificaRuolo(OrgRuolo ruolo) { EsitoOperazione ret = new EsitoOperazione(); string logMsg; // test sui campi obbligatori if (string.IsNullOrEmpty(ruolo.Codice) || string.IsNullOrEmpty(ruolo.Descrizione)) { ret.Codice = -1; logMsg = ERR_HEADER + "ModificaRuolo: dati insufficienti"; ret.Descrizione = logMsg; logger.Debug(logMsg); return(ret); } // il campo Codice corrisponde a: // (ETDOCS) DPA_CORR_GLOBALI.VAR_COD_RUBRICA varchar(128) // (OCS) try { CorteContentServices.GroupRequestType groupReq = new CorteContentServices.GroupRequestType(); groupReq.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials(); groupReq.group = new CorteContentServices.GroupType(); groupReq.group.name = ruolo.Codice; groupReq.group.description = ruolo.Descrizione; groupReq.group.users = new DocsPaDocumentale_OCS.CorteContentServices.UserType[0]; CorteContentServices.ResultType result = this.WsGroupInstance.ModifyGroup(groupReq); if (OCSUtils.isValidServiceResult(result)) { ret.Codice = 0; } else { logger.Debug(DEBUG_HEADER + "ModificaRuolo operazione con ERRORE su OCS: " + ret.Descrizione); ret.Codice = -1; ret.Descrizione = result.message.Replace("'", " "); } return(ret); } catch (Exception ex) { string st = ex.ToString(); logger.Debug(DEBUG_HEADER + "ModificaRuolo FALLITA, Exception=" + st); ret.Codice = -1; ret.Descrizione = ERR_HEADER + "ModificaRuolo"; return(ret); } }
/// <summary> /// Login al sistema documentale /// </summary> /// <param name="utente"></param> /// <param name="loginResult"></param> /// <returns></returns> public bool LoginUser(DocsPaVO.utente.UserLogin userLogin, out DocsPaVO.utente.Utente utente, out DocsPaVO.utente.UserLogin.LoginResult loginResult) { bool retValue = false; utente = null; loginResult = UserLogin.LoginResult.UNKNOWN_USER; try { utente = new Utente(); CorteContentServices.UserCredentialsRequestType userCred = new CorteContentServices.UserCredentialsRequestType(); CorteContentServices.ResultType result = new CorteContentServices.ResultType(); userCred.userCredentials = new CorteContentServices.UserCredentialsType(); userCred.userCredentials.userId = userLogin.UserName; userCred.userCredentials.password = userLogin.Password; result = this.WsUserInstance.Login(userCred); if (OCSUtils.isValidServiceResult(result)) { //definizione del dst // il dst tiene in memoria le informazioni necessarie per l'autenticazione dell'utente // ci sono operazioni in cui non viene utilizzato l'utente applicativo ma è necessario // utilizzare le credenziali effettive dell'utente che si connette al sistema. // Per esempio nelle ricerche utente = new Utente(); utente.dst = this.GetAuthenticationToken(userLogin.UserName, userLogin.Password); retValue = true; loginResult = DocsPaVO.utente.UserLogin.LoginResult.OK; logger.Debug(string.Format("OCS.LoginUser: utente {0} connesso", userLogin.UserName)); } else { retValue = false; utente = null; loginResult = UserLogin.LoginResult.UNKNOWN_USER; logger.Debug(string.Format("Errore in OCS.Login:\n{0}", result.message)); } } catch (Exception ex) { retValue = false; utente = null; loginResult = UserLogin.LoginResult.UNKNOWN_USER; logger.Error(string.Format("Errore in OCS.Login:\n{0}", ex.ToString())); } return(retValue); }
/// <summary> /// Cancellazione di un ruolo in amministrazione /// </summary> /// <param name="ruolo"></param> /// <returns></returns> public EsitoOperazione EliminaRuolo(OrgRuolo ruolo) { EsitoOperazione ret = new EsitoOperazione(); string logMsg; // test sui campi obbligatori if (string.IsNullOrEmpty(ruolo.Codice)) { logMsg = ERR_HEADER + "EliminaRuolo: dati insufficienti"; ret.Codice = -1; ret.Descrizione = logMsg; logger.Debug(logMsg); return(ret); } try { CorteContentServices.GroupDefinitionRequestType groupReq = new CorteContentServices.GroupDefinitionRequestType(); CorteContentServices.ResultType result; groupReq.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials(); groupReq.groupDefinition = new CorteContentServices.GroupDefinitionType(); groupReq.groupDefinition.name = ruolo.Codice; groupReq.groupDefinition.description = ruolo.Descrizione; result = this.WsGroupInstance.DeleteGroup(groupReq); if (OCSUtils.isValidServiceResult(result)) { logger.Debug(DEBUG_HEADER + "EliminaRuolo completata con SUCCESSO"); ret.Codice = 0; } else { logger.Debug(DEBUG_HEADER + "EliminaRuolo operazione con ERRORE su OCS: " + result.message); ret.Codice = -1; ret.Descrizione = result.message.Replace("'", " "); } return(ret); } catch (Exception ex) { String st = ex.ToString(); logger.Debug(DEBUG_HEADER + "EliminaRuolo FALLITA, Exception=" + st); ret.Codice = -1; ret.Descrizione = ERR_HEADER + "EliminaRuolo"; return(ret); } }
/// <summary> /// Inserimento di un nuovo utente in amministrazione. L'utente verrà inserito in un gruppo che contiene tutti gli utenti DocsPA. /// il gruppo deve già esistere su OCS!!! /// </summary> /// <param name="utente"></param> /// <returns></returns> public EsitoOperazione InserisciUtente(OrgUtente utente) { //inserisce l'utente nel gruppo dei lettori DocsPA EsitoOperazione ret = new EsitoOperazione(); try { string codiceRuolo = OCSConfigurations.GetGroupUsers(); string codiceUtente = utente.CodiceRubrica; CorteContentServices.GroupRequestType groupReq = new CorteContentServices.GroupRequestType(); CorteContentServices.ResultType result; groupReq.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials(); groupReq.group = new CorteContentServices.GroupType(); groupReq.group.name = codiceRuolo; //bisogna specificare la descrizione perchè l'elemento non è facoltativo al momento groupReq.group.description = ""; groupReq.group.users = new CorteContentServices.UserType[1]; groupReq.group.users[0] = new CorteContentServices.UserType(); groupReq.group.users[0].userId = codiceUtente; result = this.WsGroupInstance.AddGroupUsers(groupReq); if (OCSUtils.isValidServiceResult(result)) { logger.Debug(DEBUG_HEADER + "Inserimento utente nel gruppo DocsPa: " + codiceRuolo + " completata con SUCCESSO"); ret.Codice = 0; } else { logger.Debug(DEBUG_HEADER + "Inserimento utente nel gruppo DocsPa: " + codiceRuolo + " operazione con ERRORE"); ret.Codice = -1; ret.Descrizione = "problema su OCS: " + result.message.Replace("'", " "); } return(ret); } catch (Exception ex) { String st = ex.ToString(); logger.Debug(DEBUG_HEADER + "InserisciUtenteInRuolo FALLITA, Exception=" + st); ret.Codice = -1; ret.Descrizione = ERR_HEADER + "InserisciUtenteInRuolo"; return(ret); } //throw new NotSupportedException("InserisciUtente: operazione non supportata in OCS"); }
/// <summary> /// Eliminazione di un utente da un ruolo /// </summary> /// <param name="idPeople"></param> /// <param name="idGruppo"></param> /// <returns></returns> public EsitoOperazione EliminaUtenteDaRuolo(string idPeople, string idGruppo) { EsitoOperazione ret = new EsitoOperazione(); try { string codiceRuolo = DocsPaServices.DocsPaQueryHelper.getCodiceRuoloFromIdGroup(idGruppo); string codiceUtente = DocsPaServices.DocsPaQueryHelper.getCodiceUtente(idPeople); CorteContentServices.GroupRequestType groupReq = new CorteContentServices.GroupRequestType(); CorteContentServices.ResultType result; groupReq.userCredentials = OCSServices.OCSUtils.getApplicationUserCredentials(); groupReq.group = new CorteContentServices.GroupType(); groupReq.group.name = codiceRuolo; //bisogna specificare la descrizione perchè l'elemento non è facoltativo al momento groupReq.group.description = ""; groupReq.group.users = new CorteContentServices.UserType[1]; groupReq.group.users[0] = new CorteContentServices.UserType(); groupReq.group.users[0].userId = codiceUtente; result = this.WsGroupInstance.RemoveGroupUsers(groupReq); if (OCSUtils.isValidServiceResult(result)) { logger.Debug(DEBUG_HEADER + "EliminaUtenteDaRuolo completata con SUCCESSO"); ret.Codice = 0; } else { logger.Debug(DEBUG_HEADER + "EliminaUtenteDaRuolo operazione con ERRORE su OCS: " + result.message); ret.Codice = -1; ret.Descrizione = "Errore in OCS: " + result.message.Replace("'", " "); } return(ret); } catch (Exception ex) { String st = ex.ToString(); logger.Debug(DEBUG_HEADER + "EliminaUtenteDaRuolo FALLITA, Exception=" + st); ret.Codice = -1; ret.Descrizione = ERR_HEADER + "EliminaUtenteDaRuolo"; return(ret); } }
/// <summary> /// Handler dell'evento di avvenuto smistamento di un documento ad un ruolo /// </summary> /// <param name="mittente"></param> /// <param name="documento"></param> /// <param name="ruolo"></param> /// <param name="accessRights"></param> public void SmistamentoDocumentoCompletatoEventHandler(DocsPaVO.Smistamento.MittenteSmistamento mittente, DocsPaVO.Smistamento.DocumentoSmistamento documento, DocsPaVO.Smistamento.RuoloSmistamento ruolo, string accessRights) { // Reperimento ACL per il documento smistato bool retValue = false; try { //bisogna reperire l'id OCS UserCredentialsType credentials = OCSUtils.getApplicationUserCredentials(); long idOCS = OCSDocumentHelper.getDocumentIdOCS(documento.DocNumber, null, credentials); //reperisco la acl del documento docspa e aggiorno quelle di OCS retValue = OCSDocumentHelper.setAclDocument(documento.IDDocumento, idOCS, this.InfoUtente, credentials); } catch (Exception ex) { retValue = false; logger.Debug("Errore in OCS.SmistamentoDocumentoCompletatoEventHandler", ex); } return; }
/// <summary> /// Ricerca fulltext nell'oggetto document /// /// nb: da fare anche ricerca allegati /// </summary> /// <param name="context"></param> /// <returns></returns> public ArrayList FullTextSearch(ref FullTextSearchContext context) { ArrayList result = new ArrayList(); try { List <string> fullTextResult = null; if (context.SearchResultList != null && context.SearchResultList.Length > 0) { // Ricerca già effettuata, reperimento dall'oggetto di contesto // dei risultati precedenti evitando così una dispendiosa // chiamata al sistema documentale fullTextResult = new List <string>(context.SearchResultList); } else { //esegue la ricerca su OCS CorteContentServices.FilterSearchRequestType searchDocumentRequest = new CorteContentServices.FilterSearchRequestType(); //costruisco la stringa di ricerca //inserire i filtri di ricerca //1. il path da cui cercare //2. l'ordinamento //3. solo i documenti del protocollo //4. ... searchDocumentRequest.userCredentials = OCSServices.OCSUtils.getUserCredentials(_infoUtente); searchDocumentRequest.filter = new CorteContentServices.FilterSearchType(); searchDocumentRequest.filter.folderPath = OCSConfigurations.GetDocRootFolder(); searchDocumentRequest.filter.includeSubFolders = true; searchDocumentRequest.filter.includeSubFoldersSpecified = true; searchDocumentRequest.filter.sortClause = "CREATE_DATE DESC"; // Query execution int startIndex = (context.RequestedPageNumber * PAGE_SIZE) - PAGE_SIZE; int maxResults = this.GetMaxRowCount(); searchDocumentRequest.filter.count = maxResults; searchDocumentRequest.filter.countSpecified = true; //l'indice in OCS parte da 1 e non da 0 searchDocumentRequest.filter.offset = startIndex + 1; searchDocumentRequest.filter.offsetSpecified = true; searchDocumentRequest.filter.searchExpress = new DocsPaDocumentale_OCS.CorteContentServices.searchExpress(); //TODO: da fare!!! searchDocumentRequest.filter.searchExpress.SearchExprType = new DocsPaDocumentale_OCS.CorteContentServices.SearchExprType(); string operatCr1 = "CONTAINS"; string rightOpCr1 = context.TextToSearch; searchDocumentRequest.filter.searchExpress.SearchExprType.@operator = operatCr1; searchDocumentRequest.filter.searchExpress.SearchExprType.rightOperand = rightOpCr1; //SABRINA: provo ad eliminare la catgoria in modo da ottenere tutti i documenti (anche allegati e stampe registro) bool profilezioneDinamica = DocsPaDB.Query_DocsPAWS.Documenti.isEnabledProfilazioneAllegati; if (!profilezioneDinamica) { searchDocumentRequest.filter.searchExpress.SearchExprType.sameLevelOperator = "AND"; searchDocumentRequest.filter.searchExpress.SearchExprType.SearchExprType1 = new DocsPaDocumentale_OCS.CorteContentServices.SearchExprType(); string operatCr2 = "HAS_CATEGORY"; string rightOpCr2 = "[" + DocsPaObjectType.ObjectTypes.CATEGOTY_PROTOCOLLO + "]"; searchDocumentRequest.filter.searchExpress.SearchExprType.SearchExprType1.@operator = operatCr2; searchDocumentRequest.filter.searchExpress.SearchExprType.SearchExprType1.rightOperand = rightOpCr2; } CorteContentServices.ItemSearchListResponseType listResult; listResult = this.WsDocumentInstance.SearchDocuments(searchDocumentRequest); OCSUtils.throwExceptionIfInvalidResult(listResult.result); fullTextResult = new List <string>(); foreach (CorteContentServices.ItemSearchType item in listResult.items) { // Reperimento docnumber //NB: momentaneamente ricavo il docNumber dall'oggetto info string docNumber = item.info.name.Substring(0, item.info.name.IndexOf(".")); if (!fullTextResult.Contains(docNumber)) // Eliminazione dei risultati duplicati { fullTextResult.Add(docNumber); } } } // Paginazione dei risultati if (fullTextResult != null && fullTextResult.Count > 0) { int startIndex = (context.RequestedPageNumber * PAGE_SIZE) - PAGE_SIZE; int count = PAGE_SIZE; if ((fullTextResult.Count - startIndex) < count) { count = (fullTextResult.Count - startIndex); } result = this.GetDocuments(fullTextResult.GetRange(startIndex, count).ToArray(), InfoUtente); int pageCount = (fullTextResult.Count / PAGE_SIZE); if ((fullTextResult.Count % PAGE_SIZE) > 0) { pageCount++; } context.SearchResultList = fullTextResult.ToArray(); context.TotalPageNumber = pageCount; context.TotalRecordCount = fullTextResult.Count; } } catch (Exception ex) { result.Clear(); } return(result); }