JsValue Emit(JsValue thisValue, JsValue[] parameters)
        {
            if (parameters.Length < 3)
            {
                throw new ArgumentException("invalid number of parameters");
            }

            string stream    = EnsureNonNullStringValue(parameters.At(0), "streamId");
            var    eventType = EnsureNonNullStringValue(parameters.At(1), "eventName");
            var    eventBody = EnsureNonNullObjectValue(parameters.At(2), "eventBody");

            if (parameters.Length == 4 && !parameters.At(3).IsObject())
#pragma warning disable CA2208 // ReSharper disable once NotResolvedInText
            {
                throw new ArgumentException("object expected", "metadata");
            }
#pragma warning restore CA2208

            var           data     = _json.Stringify(JsValue.Undefined, new JsValue[] { eventBody }).AsString();
            ExtraMetaData?metadata = null;
            if (parameters.Length == 4)
            {
                var md = parameters.At(3).AsObject();
                var d  = new Dictionary <string, string?>();
                foreach (var kvp in md.GetOwnProperties())
                {
                    d.Add(kvp.Key.AsString(), AsString(kvp.Value.Value, _json, true));
                }

                metadata = new ExtraMetaData(d);
            }
            _emitted.Add(new EmittedEventEnvelope(new EmittedDataEvent(stream, Guid.NewGuid(), eventType, true, data, metadata, _currentPosition, null)));
            return(JsValue.Undefined);
        }
Пример #2
0
        public static void Publish(Resolution resl, DateTime pubblicationStartDate, DateTime pubblicationEndDate, string xmlDoc, string xmlOther, int chainId, int chainEnum, bool isPrivacy)
        {
            var obj = resl.ResolutionObjectPrivacy != null?resl.ResolutionObjectPrivacy.Replace("&", "&amp;") : resl.ResolutionObject.Replace("&", "&amp;");

            var resolutionType = resl.Type.Description;

            // Se non carica il valore, ricarico l'oggetto
            if (string.IsNullOrEmpty(resolutionType))
            {
                var reslTypeFacade = new ResolutionTypeFacade();
                resolutionType = reslTypeFacade.GetById(resl.Type.Id).Description;
            }
            var retVal = new ReturnValue();

            try
            {
                Debug.Assert(resl.AdoptionDate != null, "resl.AdoptionDate != null");
                retVal = ServiceSHP.InsertInPublicationArea(resl.Container.Name, resl.Year, resl.Number.ToString(), resl.AdoptionDate.Value, obj, DateTime.Now,
                                                            pubblicationStartDate, pubblicationEndDate, resolutionType, xmlOther, xmlDoc);
            }
            catch (Exception ex)
            {
                throw new DocSuiteException("Errore pubblicazione", "Errore Pubblicazione internet: " + retVal.Guid, ex);
            }

            new ResolutionLogFacade().Log(resl, ResolutionLogType.WP, "File pubblicato correttamente");

            try
            {
                resl.WebSPGuid          = retVal.Guid;
                resl.WebState           = Resolution.WebStateEnum.Published;
                resl.WebPublicationDate = pubblicationStartDate;
                new ResolutionFacade().Update(ref resl);

                // Registro il numero di publicazione ritornato
                // Da verificare non appena il servizio sarà disponibile
                var numeroPubblicazione = string.Empty;
                for (var i = 0; numeroPubblicazione == string.Empty && i < retVal.ExtraMetaDatas.Length; i++)
                {
                    ExtraMetaData data = retVal.ExtraMetaDatas[i];
                    if (data.Name == "NumeroPubblicazione")
                    {
                        numeroPubblicazione = data.Value;
                    }
                }
                if (numeroPubblicazione != string.Empty)
                {
                    new ResolutionFacade().DoGenericWebPublication(resl, numeroPubblicazione, chainId, chainEnum, isPrivacy);
                }
                else
                {
                    throw new DocSuiteException("Pubblicazione")
                          {
                              Descrizione = string.Format("Errore nella memorizzazione del numero di pubblicazione reslid = {0} Contattare l'amministratore del sistema.", resl.Id), User = DocSuiteContext.Current.User.FullUserName
                          }
                };
            }
            catch (Exception ex)
            {
                throw new DocSuiteException("Pubblicazione", ex)
                      {
                          Descrizione = string.Format("Errore Pubblicazione internet: Impossibile aggiornare i dati sul database. IdResolution = {0}", resl.Id), User = DocSuiteContext.Current.User.FullUserName
                      };
            }
        }
Пример #3
0
        public bool ProcessEvent(
            string partition, CheckpointTag eventPosition, string category1, ResolvedEvent data,
            out string newState, out string newSharedState, out EmittedEventEnvelope[] emittedEvents)
        {
            newSharedState = null;
            emittedEvents  = null;
            newState       = null;
            if (data.EventStreamId != data.PositionStreamId)
            {
                return(false);
            }
            if (!data.IsJson)
            {
                return(false);
            }

            JObject metadata = null;

            try {
                metadata = JObject.Parse(data.Metadata);
            } catch (JsonReaderException) {
                return(false);
            }

            if (metadata[_correlationIdProperty] == null)
            {
                return(false);
            }

            string correlationId = metadata[_correlationIdProperty].Value <string>();

            if (correlationId == null)
            {
                return(false);
            }

            string linkTarget;

            if (data.EventType == SystemEventTypes.LinkTo)
            {
                linkTarget = data.Data;
            }
            else
            {
                linkTarget = data.EventSequenceNumber + "@" + data.EventStreamId;
            }

            var metadataDict = new Dictionary <string, string>();

            metadataDict.Add("$eventTimestamp", "\"" + data.Timestamp.ToString("yyyy-MM-ddTHH:mm:ss.ffffffZ") + "\"");
            if (data.EventType == SystemEventTypes.LinkTo)
            {
                JObject linkObj = new JObject();
                linkObj.Add("eventId", data.EventId);
                linkObj.Add("metadata", metadata);
                metadataDict.Add("$link", linkObj.ToJson());
            }

            var linkMetadata = new ExtraMetaData(metadataDict);

            emittedEvents = new[] {
                new EmittedEventEnvelope(
                    new EmittedDataEvent(
                        _corrIdStreamPrefix + correlationId, Guid.NewGuid(), "$>", false,
                        linkTarget,
                        linkMetadata,
                        eventPosition,
                        expectedTag: null))
            };


            return(true);
        }