Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
                }
            }
        }
Пример #3
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);
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
            }
        }
Пример #7
0
        /// <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");
        }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
        /// <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;
        }
Пример #10
0
        /// <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);
        }