示例#1
0
        /// <summary>
        /// Aggiornamento di un documento
        /// </summary>
        /// <remarks>
        /// Il metodo aggiorna creando una nuova versione solo se ci sono delle modifiche apportate al file o ai metadati
        /// </remarks>
        /// <param name="request">
        /// <see cref="AggiornaDocumentoRequest">request</see>
        /// </param>
        /// <returns>
        /// <see cref="AggiornaDocumentoResponse">response</see>
        /// </returns>
        /// <example>
        /// var request = new AggiornaDocumentoRequest
        /// {
        ///     IdClient = "desktop",
        ///     IdRichiesta = "20081128000001",
        ///     IdCliente = "ClienteTest",
        ///     TipoDocumento = "DDT_ATH_TEST2",
        ///     Chiave = "IVA0000001",
        ///     IdDocumento = new Guid("dbd44243-d746-4e5d-b3c4-2caf4cf9ac32")
        /// };
        ///
        ///  request.Metadati.Add(new MetadatoItem { Name = "TipoDocumento", Value = "IVA" });
        ///  request.Metadati.Add(new MetadatoItem { Name = "Tipologia", Value = "IVA" });
        ///  request.Metadati.Add(new MetadatoItem { Name = "ProgressivoDocumento", Value = 1 });
        ///  request.Metadati.Add(new MetadatoItem { Name = "NomeArchivio", Value = "Test" });
        ///  request.Metadati.Add(new MetadatoItem { Name = "idBiblos", Value = 1 });
        ///  request.Metadati.Add(new MetadatoItem { Name = "DataInserimentoDocumento", Value = DateTime.Now });
        ///
        ///  AggiornaDocumentoResponse actual;
        ///  actual = DocumentoFacade.AggiornaDocumento(request);
        ///  Assert.AreEqual(actual.CodiceEsito, CodiceErrore.NessunErrore);
        /// </example>
        public static AggiornaDocumentoResponse AggiornaDocumento(AggiornaDocumentoRequest request)
        {
            var response = new AggiornaDocumentoResponse();

            try
            {
                logger.DebugFormat("AggiornaDocumento request:{0}", request.ToString());
                response.TokenInfo = Helpers.ValidaToken(request);
                if (response.TokenInfo == null)
                {
                    response.CodiceEsito = CodiceErrore.TokenNonValidoOScaduto;
                }
                else
                {
                    var checkRequestResult = request.CheckRequest(response);
                    if (checkRequestResult != CodiceErrore.NessunErrore)
                    {
                        response.CodiceEsito = checkRequestResult;
                        response.Eseguito    = false;
                    }
                    else
                    {
                        //Recupero Archive
                        var idArchive = Helpers.GetArchive(request);
                        if (!idArchive.HasValue)
                        {
                            response.CodiceEsito = CodiceErrore.ArchivioNonDefinito;
                            response.Eseguito    = false;
                        }
                        else
                        {
                            EseguiAggiornamento(request.Metadati, request.File, request.IdClient, request.IdDocumento, idArchive.Value, response);
                            logger.DebugFormat("AggiornaDocumento response:{0}", response.ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                response.Eseguito        = false;
                response.CodiceEsito     = CodiceErrore.ErroreGenerico;
                response.MessaggioErrore = ex.ToString();
            }
            response.CheckResponse();
            return(response);
        }
示例#2
0
        private static void EseguiAggiornamento(IEnumerable <MetadatoItem> metadati, FileItem file, string idClient,
                                                Guid idDocumento, Guid idArchive, AggiornaDocumentoResponse response)
        {
            try
            {
                var documento = new Document();

                var metadata = Helpers.GetBiblosDSMetadataStructure(idArchive);

                documento.AttributeValues = new BindingList <DocumentAttributeValue>(metadati.Convert(metadata));
                documento.Archive         = new DocumentArchive(idArchive);
                documento.IdDocument      = idDocumento;
                //TODO gestire gli allegati
                using (var client = new DocumentsClient())
                {
                    var isCheckOut = false;
                    try
                    {
                        var forceUndo        = true;
                        var checkOutDocument = client.DocumentCheckOut(idDocumento, true, idClient);
                        isCheckOut = true;
                        DocumentContent content = null;
                        if (file != null)
                        {
                            documento.Content = new DocumentContent(file.Blob);
                            content           = documento.Content;
                            logger.DebugFormat("Check Document Status: {0}", checkOutDocument.Status == null ? "Null" : checkOutDocument.Status.IdStatus.ToString());
                            if (checkOutDocument.DocumentLink != null || (checkOutDocument.Status != null && checkOutDocument.Status.IdStatus != (short)DocumentStatus.ProfileOnly))
                            {
                                content = client.GetDocumentContentById(documento.IdDocument);
                                //Verifica se i file sono modificati
                                if (content != null)
                                {
                                    if (Helpers.GetDocumentHash(content) != Helpers.GetDocumentHash(documento.Content))
                                    {
                                        content        = documento.Content;
                                        forceUndo      = false;
                                        documento.Name = Path.GetFileName(file.Nome);
                                    }
                                    else
                                    {
                                        content = null;
                                    }
                                }
                            }
                            else
                            {
                                documento.Name = Path.GetFileName(file.Nome);
                            }
                        }
                        foreach (var item in documento.AttributeValues)
                        {
                            if (checkOutDocument.AttributeValues.Any(x => x.Attribute.IdAttribute == item.IdAttribute))
                            {
                                if (item.Value != checkOutDocument.AttributeValues.First(x => x.Attribute.IdAttribute == item.IdAttribute).Value)
                                {
                                    checkOutDocument.AttributeValues.First(x => x.Attribute.IdAttribute == item.IdAttribute).Value = item.Value;
                                    forceUndo = false;
                                }
                            }
                            else
                            {
                                checkOutDocument.AttributeValues.Add(item);
                                forceUndo = false;
                            }
                        }
                        Guid newId = documento.IdDocument;
                        if (forceUndo)
                        {
                            client.DocumentUndoCheckOut(idDocumento, idClient);
                        }
                        else
                        {
                            checkOutDocument.Content = content;
                            checkOutDocument.Name    = documento.Name;
                            newId = client.DocumentCheckIn(checkOutDocument, idClient);
                            Helpers.UpdateDocumentIdByIdDocument(idDocumento, newId);
                            response.Eseguito = true;
                        }
                        //TODO Popolare Chiavi =
                        response.Documento = new DocumentoItem
                        {
                            IdDocumento = newId,
                            Stato       = forceUndo ? Operazione.Default : Operazione.Update,
                            Chiavi      = documento.AttributeValues.Where(x => x.Attribute.IsRequired).Select(x => new MetadatoItem {
                                Name = x.Attribute.Name, Value = x.Value
                            }).ToList(),
                            Nome = documento.Name
                        };
                    }
                    catch (FaultException <BiblosDsException> faultEx)
                    {
                        logger.Error(faultEx);
                        response.Eseguito = false;
                        ParseBiblosDSFaultException(response, faultEx);
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex);
                        if (isCheckOut)
                        {
                            try
                            {
                                client.DocumentUndoCheckOut(idDocumento, idClient);
                            }
                            catch (Exception exUndo)
                            {
                                logger.Fatal(exUndo);
                            }
                        }
                        response.Eseguito        = false;
                        response.CodiceEsito     = CodiceErrore.ErroreGenerico;
                        response.MessaggioErrore = ex.ToString();
                    }
                }
            }
            catch (AttributoNonTrovato ex)
            {
                logger.Error(ex);
                response.Eseguito    = false;
                response.CodiceEsito = CodiceErrore.AttributoNonTrovato;
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                response.Eseguito    = false;
                response.CodiceEsito = CodiceErrore.ErroreGenerico;
            }
        }