Corresponding property stream

_Description = AgoRapide 2020 is an open source library for building data-oriented backend applications using .NET Standard 2.1.0x000D0x000A0x000D0x000AThe source code, including this documentation, is found at0x000D0x000A0x000D0x000Ahttps://bitbucket.org/BjornErlingFloetten/arcore0x000D0x000A0x000D0x000A0x000D0x000AAgoRapide 2020 can be used as:0x000D0x000A0x000D0x000A1) A distributed in-memory backend processor of events / listener to events.0x000D0x000AThe PropertyStream-format lends itself well to distribution of loads. Each processing node subscribes to sub-sets of the entire property stream.0x000D0x000AThe Subscriptions consists of the events to which the node has to respond, plus other necessary data in order to correctly process the events. 0x000D0x000AThe result is placed back out in the property stream, either back upstream, or further downstream for other nodes to process.0x000D0x000ASee ARCCore.0x000D0x000A0x000D0x000A2) A 'single-endpoint' API.0x000D0x000AAll data is exposed through a standardized API query mechanism (REST or GraphQL) with no need for writing application specific endpoints.0x000D0x000ASince APIs should expose well defined DTO's and not entire entities, AgoRapide APIs are therefore normally established as separate nodes.0x000D0x000AEach node has a well defined Subscription to a sub-set of your entire database (also reducing the memory footprint).0x000D0x000AThe API will then in effect offer DTO's with very little coding needed.0x000D0x000ASee ARCAPI.0x000D0x000A0x000D0x000A3) A reporting tool / query tool ("Express BI").0x000D0x000AAn API as in 2) combined with the query library. 0x000D0x000AThe query library enables report generation directly from the web-browser (as a single bookmark-able URL).0x000D0x000ASee ARCQuery.0x000D0x000A0x000D0x000AFor all cases above the following also applies:0x000D0x000A0x000D0x000AA) An in-memory database which is continously updated through the property stream is provided by AgoRapide. 0x000D0x000AThis ensures short response times and significantly reduces network traffic. 0x000D0x000ASee StreamProcessor.0x000D0x000A0x000D0x000AB) The core database storage is either provided directly by AgoRapide, or you can use an established 'key-value' databases like DynamoDB or Cosmos DB.0x000D0x000ASee ARCSync.0x000D0x000A0x000D0x000AC) High performance thread-safe "simultaneous" read and writes is supported in all scenarios.0x000D0x000A0x000D0x000AD) AgoRapide works better the more strongly typed schema you specify (see TaggingOfPropertyKeys). 0x000D0x000AYou can however start out without any schema at all. Duck typing is then used instead. 0x000D0x000AEven relational queries are possible straight out-of-the-box without any schema, as long as some naming conventions are followed 0x000D0x000A(like Order.CustomerId for instance, in order to relate an Order to a Customer)0x000D0x000AStrong typing is used by AgoRapide whenever specified by the schema.0x000D0x000A0x000D0x000AE) Scaling is supported by flexible routing of the PropertyStream to multiple nodes.0x000D0x000A0x000D0x000AF) No dependencies to other libraries apart from .NET itself.0x000D0x000A0x000D0x000ASee ARCDoc for practical examples for using AgoRapide.0x000D0x000A0x000D0x000AAgoRapide is the result of a strong wish of AvoidingRepetition.0x000D0x000A0x000D0x000AThree very important concepts in AgoRapide are:0x000D0x000A0x000D0x000A1) PropertyStream: The concept of how all data is broken down into single 'key and value' pairs which are then stored as plain text format lines and then never changed.0x000D0x000A0x000D0x000A2) TaggingOfPropertyKeys: The concept of specifying in a single place all relevant information about a given property (data field).0x000D0x000A0x000D0x000A3) PropertyAccess: The general mechanism for accessing properties of objects in AgoRapide.0x000D0x000A0x000D0x000AAgoRapide is split into different ARComponents. You can have a functional distributed storage mechanism including log-consoles by linking only to ARCCore.0x000D0x000AChoose from the other components based on your security needs (ARCSec), the complexity of your data (ARCQuery) or other needs (see ARComponents in general).0x000D0x000A0x000D0x000ASee also ARConcepts and AgoRapideHistory.
Assembly/_Description = All assemblies covered by this documentation.
Assembly/ARCCore/_Description = A necessary library (.DLL in Windows terms) that every ARNodeType should link to.0x000D0x000A0x000D0x000AContains the basic structure of AgoRapide, like BasePKAttribute, IP and StreamProcessor.0x000D0x000A0x000D0x000ANote that if your only need is to SEND single PropertyStreamLines to a CoreDB then there is actually little purpose in linking to ARCCore.0x000D0x000AYou just open a standard TCP/IP connection and send the lines straight away. See ARCDoc for an example of this.0x000D0x000A(This is actually quite a unique capability of AgoRapide as a data storage system, that no client libraries are needed.).0x000D0x000A(Remember though that minimal encoding will be needed, like encoding line endings into 0xoooo000D0xoooo000A, see especially EncodeValuePartStringToPropertyStreamFormat.)
Assembly/ARCCore/Class/_Description = All classes with some AgoRapide specific attributes found in assembly ARCCore.
Assembly/ARCCore/Class/BaseAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/BaseAttribute/ClassType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/BaseAttribute/BaseTypes = System.Attribute
Assembly/ARCCore/Class/BaseAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/BaseAttribute/CorrespondingEnumType = ARCCore.BaseAttributeP
Assembly/ARCCore/Class/BaseAttribute/Description = Instances of this class are used as source of documentation and data for the API. 0x000D0x000AInherits -Attribute- but does also implement IP.0x000D0x000A0x000D0x000ANote how the information NORMALLY originates from within the C# code but as the class inherit IP, it is also possible to distribute the information over the property-stream.0x000D0x000A0x000D0x000ASome inheriting members in ARCCore are:0x000D0x000AClassAttribute,0x000D0x000AClassMemberAttribute,0x000D0x000AEnumAttribute,0x000D0x000AEnumMemberAttribute,0x000D0x000ABasePKAttribute (which again is inherited by PKTypeAttribute and PKLogAttribute)
Assembly/ARCCore/Class/BaseAttribute/_Member/Initialize/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/BaseAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/BaseAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/BaseAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/BaseAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/BaseAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/BaseAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/BaseAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/BasePKAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/BasePKAttribute/ClassType = ARCCore.BasePKAttribute
Assembly/ARCCore/Class/BasePKAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute0x003BARCCore.EnumMemberAttribute
Assembly/ARCCore/Class/BasePKAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/BasePKAttribute/Description = TODO: Rename into PKBaseAttribute?.0x000D0x000A0x000D0x000AThe class containing the actual attributes used for TaggingOfPropertyKeys. 0x000D0x000AInstances of this class are accessed through PK.0x000D0x000A0x000D0x000ASome sub-classes included in ARCCore are PKTypeAttribute and PKLogAttribute.0x000D0x000A0x000D0x000AOther ARComponents define their own sub-classes like:0x000D0x000AARCSec: -PKSecAttribute-,0x000D0x000A0x000D0x000AYou are also encouraged to create your own instances in your ApplicationSpecificCode for special needs.0x000D0x000ATODO: One idea is a TTL (Time-to-live) tag for a property when that property constitues a command to do something0x000D0x000ATODO: for instance turning on a switch in a IoT system (in case of communications failure somewhere in the system, queuing a series0x000D0x000ATODO: of turn-on, turn-off, turn-on attempts would have little meaning.0x000D0x000A0x000D0x000ANOTE / TODO: Having this class inherit EnumMemberAttribute makes for a complicated inheritance hierarchy. It might therefore be a good idea to just duplicate the function of EnumMemberAttribute into this class and letting it inherit BaseAttribute directly.0x000D0x000A0x000D0x000ASee also analogue IPAttribute which describes classes (describes at class levels).
Assembly/ARCCore/Class/BasePKAttribute/_Member/GetAttributes/ReflectedType = ARCCore.BasePKAttribute
Assembly/ARCCore/Class/BasePKAttribute/_Member/GetAttributes/MethodName = GetAttributes
Assembly/ARCCore/Class/BasePKAttribute/_Member/GetAttributes/MethodSignature = System.Collections.Generic.List0x006010x005BARCCore.BasePKAttribute0x005D GetAttributes(System.Object)
Assembly/ARCCore/Class/BasePKAttribute/_Member/GetAttributes/Description = Note that illegal to call for other than PropertyKeyEnum.0x000D0x000ANote how an instance of PKTypeAttribute is added if not found (and Type set to typeof(string).
Assembly/ARCCore/Class/BasePKAttribute/_Member/Initialize/ReflectedType = ARCCore.BasePKAttribute
Assembly/ARCCore/Class/BasePKAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/BasePKAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/BasePKAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/BasePKAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/BasePKAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/BasePKAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/BasePKAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/ClassAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/ClassAttribute/ClassType = ARCCore.ClassAttribute
Assembly/ARCCore/Class/ClassAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute
Assembly/ARCCore/Class/ClassAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/ClassAttribute/CorrespondingEnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/Class/ClassAttribute/Description = Describes a class.0x000D0x000A0x000D0x000AIndividual class members are described by ClassMemberAttribute.
Assembly/ARCCore/Class/ClassAttribute/_Member/GetAttribute/ReflectedType = ARCCore.ClassAttribute
Assembly/ARCCore/Class/ClassAttribute/_Member/GetAttribute/MethodName = GetAttribute
Assembly/ARCCore/Class/ClassAttribute/_Member/GetAttribute/MethodSignature = ARCCore.ClassAttribute GetAttribute(System.Type)
Assembly/ARCCore/Class/ClassAttribute/_Member/GetAttribute/Description = Throws exception if type implements IP and no corresponding enum found (enum ending with capital letter 'P' (like 'CustomerP' for enum describing class 'Customer' for instance)
Assembly/ARCCore/Class/ClassAttribute/_Member/Initialize/ReflectedType = ARCCore.ClassAttribute
Assembly/ARCCore/Class/ClassAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/ClassAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/ClassAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/ClassAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/ClassAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/ClassAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/ClassAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/ClassMemberAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/ClassMemberAttribute/ClassType = ARCCore.ClassMemberAttribute
Assembly/ARCCore/Class/ClassMemberAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute
Assembly/ARCCore/Class/ClassMemberAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/ClassMemberAttribute/CorrespondingEnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/Class/ClassMemberAttribute/Description = Describes a member of a class (a method).0x000D0x000A0x000D0x000AThe class itself is described by ClassAttribute.
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/Initialize/ReflectedType = ARCCore.ClassMemberAttribute
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/ClassMemberAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/EnumAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/EnumAttribute/ClassType = ARCCore.EnumAttribute
Assembly/ARCCore/Class/EnumAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute
Assembly/ARCCore/Class/EnumAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/EnumAttribute/CorrespondingEnumType = ARCCore.EnumAttributeP
Assembly/ARCCore/Class/EnumAttribute/Description = Describes an enum.0x000D0x000A0x000D0x000AEnum members (the individual values) are described by EnumMemberAttribute.
Assembly/ARCCore/Class/EnumAttribute/_Member/GetAttribute/ReflectedType = ARCCore.EnumAttribute
Assembly/ARCCore/Class/EnumAttribute/_Member/GetAttribute/MethodName = GetAttribute
Assembly/ARCCore/Class/EnumAttribute/_Member/GetAttribute/MethodSignature = ARCCore.EnumAttribute GetAttribute(System.Type)
Assembly/ARCCore/Class/EnumAttribute/_Member/GetAttribute/Description = Throws exception if tagged as PropertyKeyEnum and name of type does not end with capital letter 'P' (like 'CustomerP' for enum describing class 'Customer' for instance).0x000D0x000AAlso throws exception (when tagged as PropertyKeyEnum) if the corresponding class is not found.
Assembly/ARCCore/Class/EnumAttribute/_Member/Initialize/ReflectedType = ARCCore.EnumAttribute
Assembly/ARCCore/Class/EnumAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/EnumAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/EnumAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/EnumAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/EnumAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/EnumAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/EnumAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/EnumMemberAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/EnumMemberAttribute/ClassType = ARCCore.EnumMemberAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/EnumMemberAttribute/CorrespondingEnumType = ARCCore.EnumMemberAttributeP
Assembly/ARCCore/Class/EnumMemberAttribute/Description = Describes an enum's value.0x000D0x000AThe enum in itself is described by EnumAttribute. 0x000D0x000ATODO: Consider renaming class into EnumMemberAttribute, and correspondingly use term 'Member' also for enums, instead of 'Value' in AgoRapide.0x000D0x000A0x000D0x000ANote how enum members / enum values of type PropertyKeyEnum should be described by sub-class BasePKAttribute, not this clas.
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/Initialize/ReflectedType = ARCCore.EnumMemberAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/GetAttribute/ReflectedType = ARCCore.EnumMemberAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/GetAttribute/MethodName = GetAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/GetAttribute/MethodSignature = ARCCore.EnumMemberAttribute GetAttribute(System.Object)
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/GetAttribute/Description = Note that illegal to call for PropertyKeyEnum.
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/EnumMemberAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/IPAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/IPAttribute/ClassType = ARCCore.IPAttribute
Assembly/ARCCore/Class/IPAttribute/Description = Describes IP classes (describes at class-level)0x000D0x000A0x000D0x000ASee analogue BasePKAttribute which describes properties of classes (describes at property level).0x000D0x000A0x000D0x000ANote that no sub-classes are included in ARCCore.
Assembly/ARCCore/Class/CardinalityExtensions/AssemblyName = ARCCore
Assembly/ARCCore/Class/CardinalityExtensions/ClassType = ARCCore.CardinalityExtensions
Assembly/ARCCore/Class/CardinalityExtensions/_Member/IsMultiple/ReflectedType = ARCCore.CardinalityExtensions
Assembly/ARCCore/Class/CardinalityExtensions/_Member/IsMultiple/MethodName = IsMultiple
Assembly/ARCCore/Class/CardinalityExtensions/_Member/IsMultiple/MethodSignature = Boolean IsMultiple(ARCCore.Cardinality)
Assembly/ARCCore/Class/CardinalityExtensions/_Member/IsMultiple/Description = Returns TRUE if given cardinality implies that multiple items are stored simultaneously in a typical in-memory data storage.0x000D0x000AThis is again taken as a hint of asking for a List of actual values, instead of a single value.
Assembly/ARCCore/Class/Extensions/AssemblyName = ARCCore
Assembly/ARCCore/Class/Extensions/ClassType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/Description = Contains a few general nice to have extensions methods.0x000D0x000A0x000D0x000ATODO: If this class accumulates too many methods, consider splitting it into multiple classes in a separate folder.0x000D0x000ATODO: For instance a TypeExtensions class and DictionaryExtensions class would be natural.0x000D0x000ATODO: (together with maybe a StringExtensionClass)
Assembly/ARCCore/Class/Extensions/LongDescription = NOTE: Message to developers. Think through before you decide on adding anything to this class.0x000D0x000AOften a utility method in a related class is good enough, you do not have to create an extension method just because it looks like.0x000D0x000A0x000D0x000ASee also Util.
Assembly/ARCCore/Class/Extensions/_Member/ToStringShort/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ToStringShort/MethodName = ToStringShort
Assembly/ARCCore/Class/Extensions/_Member/ToStringShort/MethodSignature = System.String ToStringShort(System.Type)
Assembly/ARCCore/Class/Extensions/_Member/ToStringShort/Description = Returns a shorter representation than ToStringDB.0x000D0x000A0x000D0x000ATODO: INSERT EXAMPLE OF WHAT IS MEANT BY 'SHORTER'.0x000D0x000A0x000D0x000ANote how the representation is easier to read for generic types, returning for instance List0x003Cstring0x003E instead of List0x006010x005Bstring0x005D.0x000D0x000A0x000D0x000ANote how caches result since operation is somewhat complicated due do generic types.0x000D0x000ANote how returns a string.Intern in order to make for quicker dictionary lookup as returned string will often be used for lookup in other caches.
Assembly/ARCCore/Class/Extensions/_Member/ToStringShort/LongDescription = See also ToStringDB ('complete' representation) and ToStringVeryShort (shortest form)
Assembly/ARCCore/Class/Extensions/_Member/ToStringVeryShort/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ToStringVeryShort/MethodName = ToStringVeryShort
Assembly/ARCCore/Class/Extensions/_Member/ToStringVeryShort/MethodSignature = System.String ToStringVeryShort(System.Type)
Assembly/ARCCore/Class/Extensions/_Member/ToStringVeryShort/Description = Returns same as ToStringShort but without any generics information at all.0x000D0x000A0x000D0x000ANote how caches result since operation is somewhat complicated due do generic types.0x000D0x000ANote how returns a string.Intern in order to make for quicker dictionary lookup as returned string will often be used for lookup in other caches.
Assembly/ARCCore/Class/Extensions/_Member/ToStringVeryShort/LongDescription = See also ToStringShort (somewhat longer form) and ToStringDB ('complete' representation)
Assembly/ARCCore/Class/Extensions/_Member/ToStringDB/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ToStringDB/MethodName = ToStringDB
Assembly/ARCCore/Class/Extensions/_Member/ToStringDB/MethodSignature = System.String ToStringDB(System.Type)
Assembly/ARCCore/Class/Extensions/_Member/ToStringDB/Description = Gives the minimum representation of type as string suitable for later reconstruction by -GetType-.0x000D0x000A(that is with namespace and including all relevant assembly names but nothing more)0x000D0x000AThe returned string even takes into consideration generics when the generic type resides in a different assembly.0x000D0x000A0x000D0x000AThe return value is considered SQL-"safe" in the sense that it may be inserted directly into an SQL statement (not relevant for new AgoRapide (2020) though).0x000D0x000A0x000D0x000ACorresponding method for getting the type back is TryGetTypeFromStringFromCache.0x000D0x000A0x000D0x000ANote how caches result since operation is somewhat complicated due do generic types.0x000D0x000ANote how returns a string.Intern in order to make for quicker dictionary lookup as returned string will often be used for lookup in other caches.
Assembly/ARCCore/Class/Extensions/_Member/ToStringDB/LongDescription = TODO: GIVE BETTER EXAMPLE below because ApplicationPart does not exist in new AgoRapide (2020).0x000D0x000A0x000D0x000AExample of return value is:0x000D0x000AApplicationPart0x003CP0x003E0x003B : AgoRapide.ApplicationPart0x006010x005BAgoRapideSample.P,AgoRapideSample0x005D,AgoRapide0x000D0x000A(the part before : is what is returned by ToStringShort and serves as a human readable shorthand)0x000D0x000A0x000D0x000ANote complexities involved around generic types where the generic argument exist in a different assembly.0x000D0x000AFor instance for:0x000D0x000A typeof(AgoRapide.ApplicationPart0x007BAgoRapideSample.P0x007D)0x000D0x000A where ApplicationPart resides in AgoRapide and0x000D0x000A P resides in AgoRapideSample a simple approach like0x000D0x000A ToString , Assembly.-GetName-0x000D0x000A would give0x000D0x000A AgoRapide.ApplicationPart0x006010x005BAgoRapideSample.P0x005D,AgoRapide0x000D0x000A which is not enough information for -GetType-0x000D0x000A0x000D0x000A Therefore, for types where generic arguments exist in a different assembly we have to do like explained here:0x000D0x000A http://stackoverflow.com/questions/2276384/loading-a-generic-type-by-name-when-the-generics-arguments-come-from-multiple-as0x000D0x000A0x000D0x000A In our case what is returned by this methdod is something like mentioned above0x000D0x000A AgoRapide.ApplicationPart0x006010x005BAgoRapideSample.P,AgoRapideSample0x005D,AgoRapide0x000D0x000A that is, we insert the assembly name where the type of the generic parameter resides, into the string.0x000D0x000A
Assembly/ARCCore/Class/Extensions/_Member/ForEach/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ForEach/MethodName = ForEach
Assembly/ARCCore/Class/Extensions/_Member/ForEach/MethodSignature = Void ForEach0x005BT0x005D(System.Collections.Generic.IEnumerable0x006010x005BT0x005D, System.Action0x006010x005BT0x005D)
Assembly/ARCCore/Class/Extensions/_Member/ForEach/Description = Useful when we want to write collection.ForEach( ... ) instead of 0x000D0x000Acollection.ToList().ForEach ( ... ) (Bad idea performance-wise) 0x000D0x000Aor0x000D0x000Aforeach (var t in collection) which is more verbose 0x000D0x000A0x000D0x000ADiscussion about this at0x000D0x000Ahttp://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx0x000D0x000A(short version http://stackoverflow.com/questions/10299458/is-the-listt-foreach-method-gone0x000D0x000A
Assembly/ARCCore/Class/Extensions/_Member/Use/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/Use/MethodName = Use
Assembly/ARCCore/Class/Extensions/_Member/Use/MethodSignature = Void Use0x005BT0x005D(T, System.Action0x006010x005BT0x005D)
Assembly/ARCCore/Class/Extensions/_Member/Use/Description = Convenience method that shortens down code in cases where an instance of an object must be created first in order to use that same variable multiple times
Assembly/ARCCore/Class/Extensions/_Member/AddValue/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/AddValue/MethodName = AddValue
Assembly/ARCCore/Class/Extensions/_Member/AddValue/MethodSignature = Void AddValue0x005BTKey,TValue0x005D(System.Collections.Generic.Dictionary0x006020x005BTKey,TValue0x005D, TKey, TValue, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/Extensions/_Member/AddValue/Description = Gives better error messages compared to 'original' Add when adding a value to a directory if key already exists
Assembly/ARCCore/Class/Extensions/_Member/KeysAsString/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/KeysAsString/MethodName = KeysAsString
Assembly/ARCCore/Class/Extensions/_Member/KeysAsString/MethodSignature = System.String KeysAsString0x005BTKey,TValue0x005D(System.Collections.Generic.Dictionary0x006020x005BTKey,TValue0x005D)
Assembly/ARCCore/Class/Extensions/_Member/KeysAsString/Description = Gives a compressed overview of keys in a dictionary. Helpful for building exception messages.
Assembly/ARCCore/Class/Extensions/_Member/GetValue/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/GetValue/MethodName = GetValue
Assembly/ARCCore/Class/Extensions/_Member/GetValue/MethodSignature = TValue GetValue0x005BTKey,TValue0x005D(System.Collections.Generic.Dictionary0x006020x005BTKey,TValue0x005D, TKey, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/Extensions/_Member/GetValue/Description = Gives better error messages when reading value from directory if key does not exist
Assembly/ARCCore/Class/Extensions/_Member/Single/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/Single/MethodName = Single
Assembly/ARCCore/Class/Extensions/_Member/Single/MethodSignature = T Single0x005BT0x005D(System.Collections.Generic.IEnumerable0x006010x005BT0x005D, System.Func0x006020x005BT,System.Boolean0x005D, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/Extensions/_Member/Single/Description = Same as inbuilt LINQ's Single except that gives a more friendly exception message
Assembly/ARCCore/Class/Extensions/_Member/SingleOrDefault/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/SingleOrDefault/MethodName = SingleOrDefault
Assembly/ARCCore/Class/Extensions/_Member/SingleOrDefault/MethodSignature = T SingleOrDefault0x005BT0x005D(System.Collections.Generic.IEnumerable0x006010x005BT0x005D, System.Func0x006020x005BT,System.Boolean0x005D, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/Extensions/_Member/SingleOrDefault/Description = Same as inbuilt LINQ's SingleOrDefault except that gives a more friendly exception message
Assembly/ARCCore/Class/Extensions/_Member/Result/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/Result/MethodName = Result
Assembly/ARCCore/Class/Extensions/_Member/Result/MethodSignature = System.String Result(System.Func0x006010x005BSystem.String0x005D, System.String)
Assembly/ARCCore/Class/Extensions/_Member/Result/Description = Returns heading plus return-value of function (calls function). If function == null then empty string is returned
Assembly/ARCCore/Class/Extensions/_Member/ToStringDateAndTime/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ToStringDateAndTime/MethodName = ToStringDateAndTime
Assembly/ARCCore/Class/Extensions/_Member/ToStringDateAndTime/MethodSignature = System.String ToStringDateAndTime(System.DateTime)
Assembly/ARCCore/Class/Extensions/_Member/ToStringDateAndTime/Description = TODO: Parsing does not support fff (milliseconds) for the time being.0x000D0x000AUses standard date and time format for AgoRapide.
Assembly/ARCCore/Class/Extensions/_Member/ToStringWithMS/ReflectedType = ARCCore.Extensions
Assembly/ARCCore/Class/Extensions/_Member/ToStringWithMS/MethodName = ToStringWithMS
Assembly/ARCCore/Class/Extensions/_Member/ToStringWithMS/MethodSignature = System.String ToStringWithMS(System.TimeSpan)
Assembly/ARCCore/Class/Extensions/_Member/ToStringWithMS/Description = Uses time format for AgoRapide.
Assembly/ARCCore/Class/IKIP/AssemblyName = ARCCore
Assembly/ARCCore/Class/IKIP/ClassType = ARCCore.IKIP
Assembly/ARCCore/Class/IKIP/Description = Container class for key (IK), and value (IP).0x000D0x000A0x000D0x000ATODO: Move to separate file
Assembly/ARCCore/Class/IKIP/_Member/TryAssertTypeIntegrity/ReflectedType = ARCCore.IKIP
Assembly/ARCCore/Class/IKIP/_Member/TryAssertTypeIntegrity/MethodName = TryAssertTypeIntegrity
Assembly/ARCCore/Class/IKIP/_Member/TryAssertTypeIntegrity/MethodSignature = Boolean TryAssertTypeIntegrity(System.String ByRef)
Assembly/ARCCore/Class/IKIP/_Member/TryAssertTypeIntegrity/Description = Asserts that value is of correct type as specified by the key.0x000D0x000A0x000D0x000ANote that not called from constructor because it might have some performance limitations. 0x000D0x000ATypically called from implementators of -SetP-. As of Apr 2020 only able to assert integrity when PValue<T> is used for packing a value, or where type matches exact.0x000D0x000A0x000D0x000AThis method is an attempt to mitigate the lack of static typing in the PropertyAccess mechanism (AgoRapide is less static strong typed than C# itself is by default. In other words type mistakes are not necessarily exposed at compile time).
Assembly/ARCCore/Class/IK/AssemblyName = ARCCore
Assembly/ARCCore/Class/IK/ClassType = ARCCore.IK
Assembly/ARCCore/Class/IK/Interfaces = System.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/IK/Description = IK = Interface Key / Index key. 0x000D0x000AThe key is what describes the different elements in a PropertyStreamLine line.0x000D0x000AOne specific implementation of this interface, PK (Property Key), describes the actual properties related to an entity.0x000D0x000A0x000D0x000AExample, for a PropertyStreamLine like:0x000D0x000A'dt/Customer/42/PhoneNumber = 90534333'0x000D0x000A0x000D0x000A'dt' would correspond to dt (data). Parsed as IKString0x000D0x000A(if the data storage is implicitly storing only data then this prefix will often have been removed before parsing the rest of the keys keys).0x000D0x000A0x000D0x000A'Customer' would be a IKType, that is a key pointing to a collection of all objects of type 'Customer'.0x000D0x000A(in RDBMS-terms pointing to a table called Customers)0x000D0x000A0x000D0x000A'42' would be a IKLong (IKString if it had not been an integer), that is, a general identifier for a specific entity.0x000D0x000A(in RDBMS-terms a primary key)0x000D0x000A0x000D0x000A'PhoneNumber' would be a PK, describing this specific field, and how the value '90534333' should be validated and parsed.0x000D0x000A(in RDBMS-terms the Field in the schema for the Table)0x000D0x000A0x000D0x000AInstances implementing this interface is suitable for use as key in hierarchical object stores like PRich.0x000D0x000A0x000D0x000ASee TryParse for details about about how the different sub-classes of IK are utilizied for a given PropertyStreamLine.0x000D0x000A
Assembly/ARCCore/Class/IK/LongDescription = All implementations are supposed to be immutable.0x000D0x000A0x000D0x000ASome notes about IEquatable0x003CIK0x003E:0x000D0x000A0x000D0x000ANote how IEquatable0x003CIK0x003E is implemented in the different implementing classes.0x000D0x000AEquality is always based on the string representation (ToString) because IKString may be used instead of IKType or PK (for instance depending on whether we have StandardAgoRapideCode or ApplicationSpecificCode).0x000D0x000A(in other words, a IKString may perfectly well be seen as equal to a IKType or even PK.)0x000D0x000A0x000D0x000ANote how GetHashCode is also essential to include. If not then dictionaries with this class as key will simply not work.0x000D0x000A0x000D0x000ANote that default implementation of Equals(IK other) and GetHashCode() in this interface is not possible (because these methods are implemented for any class anyway (as Equals / -GetHashCode-), so that would take precedence over a default interface method).0x000D0x000A0x000D0x000ANote that Equals(IK other) and GetHashCode() must be implemented identically in all implementing classes, that is,based on ToString(). See -GetHashCode- / Equals for examples.
Assembly/ARCCore/Class/IKLong/AssemblyName = ARCCore
Assembly/ARCCore/Class/IKLong/ClassType = ARCCore.IKLong
Assembly/ARCCore/Class/IKLong/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/IKLong/Description = A more memory efficient alternative to IKString.0x000D0x000A0x000D0x000ASee IKString for documentation.
Assembly/ARCCore/Class/IKLong/LongDescription = Note that in contrast to IKString, this class does not offer any cache.0x000D0x000AUse cached IKString instead (FromCache) for values that you know are limited in range.
Assembly/ARCCore/Class/IKLong/_Member/EnrichKey/ReflectedType = ARCCore.IKLong
Assembly/ARCCore/Class/IKLong/_Member/EnrichKey/MethodName = EnrichKey
Assembly/ARCCore/Class/IKLong/_Member/EnrichKey/MethodSignature = Void EnrichKey(ARCCore.PK)
Assembly/ARCCore/Class/IKLong/_Member/EnrichKey/Description = 'Implementing' ITypeDescriber.
Assembly/ARCCore/Class/IKString/AssemblyName = ARCCore
Assembly/ARCCore/Class/IKString/ClassType = ARCCore.IKString
Assembly/ARCCore/Class/IKString/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/IKString/Description = Index key for any general id, like primary-key or sequence-number or similar.0x000D0x000A(in RDBMS-terms a primary key)0x000D0x000A0x000D0x000ANote that if the actual id is an integer, then IKLong will be used instead of IKString.0x000D0x000A0x000D0x000AThe actual id is not expected to be unique throughout the database, but rather unique within a context, for example the value 42 could be unique within the context of Customer.0x000D0x000A0x000D0x000AA single instance of this class can contain multiple PropertyStream-'levels', like for instance '0x005Binsert/example/here0x005D'. This is pragmatic approach useful especially in contexts where there is no point in building up multiple IK instances for something that is going to be immediately put into the property stream anyway.0x000D0x000ATODO: Give som actual examples of what just mentioned.0x000D0x000A0x000D0x000AThis class is immutable.
Assembly/ARCCore/Class/IKString/_Member/FromCache/ReflectedType = ARCCore.IKString
Assembly/ARCCore/Class/IKString/_Member/FromCache/MethodName = FromCache
Assembly/ARCCore/Class/IKString/_Member/FromCache/MethodSignature = ARCCore.IKString FromCache(System.String)
Assembly/ARCCore/Class/IKString/_Member/FromCache/Description = Reduces number of objects generated by caching those within limited range0x000D0x000AUse this method when you know that string is within a limited range, for instance because it is probably a type (but you are unable to use IKType because context is within StandardAgoRapideCode and actually type is not included in running assemblies)(on the other hand, the actual name of types should have been distributed throughout the PropertyStream, so that should not be a problem (although not implemented yet as of Jul 2020)).
Assembly/ARCCore/Class/IKString/_Member/FromString/ReflectedType = ARCCore.IKString
Assembly/ARCCore/Class/IKString/_Member/FromString/MethodName = FromString
Assembly/ARCCore/Class/IKString/_Member/FromString/MethodSignature = ARCCore.IKString FromString(System.String)
Assembly/ARCCore/Class/IKString/_Member/FromString/Description = Note how uses instance cache if already exists there
Assembly/ARCCore/Class/IKString/_Member/EnrichKey/ReflectedType = ARCCore.IKString
Assembly/ARCCore/Class/IKString/_Member/EnrichKey/MethodName = EnrichKey
Assembly/ARCCore/Class/IKString/_Member/EnrichKey/MethodSignature = Void EnrichKey(ARCCore.PK)
Assembly/ARCCore/Class/IKString/_Member/EnrichKey/Description = 'Implementing' ITypeDescriber.
Assembly/ARCCore/Class/IKType/AssemblyName = ARCCore
Assembly/ARCCore/Class/IKType/ClassType = ARCCore.IKType
Assembly/ARCCore/Class/IKType/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/IKType/Description = Index key used when storing a collection of a given type, like 'Customer'.0x000D0x000A0x000D0x000AThe key will normally point to a collection of all objects of that type.0x000D0x000A(in RDBMS-terms pointing to a table like Customers)0x000D0x000A0x000D0x000AThis class is immutable.
Assembly/ARCCore/Class/IKType/_Member/FromString/ReflectedType = ARCCore.IKType
Assembly/ARCCore/Class/IKType/_Member/FromString/MethodName = FromString
Assembly/ARCCore/Class/IKType/_Member/FromString/MethodSignature = ARCCore.IKType FromString(System.String)
Assembly/ARCCore/Class/IKType/_Member/FromString/Description = Most relevant when key originates from PropertyStream. We may know that the string represents a type (because the relevant PK has been distributed), but the actual type-definition is unknown (because the type is not present in the assemblies constituting the application).
Assembly/ARCCore/Class/IKType/_Member/ToString/ReflectedType = ARCCore.IKType
Assembly/ARCCore/Class/IKType/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/IKType/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/IKType/_Member/ToString/Description = Caching is supposed to be useful because may be called quite often.0x000D0x000ACaching is acceptable because few instances of this will be created (little memory overhead in total)
Assembly/ARCCore/Class/IKType/_Member/Type/ReflectedType = ARCCore.IKType
Assembly/ARCCore/Class/IKType/_Member/Type/MethodName = Type
Assembly/ARCCore/Class/IKType/_Member/Type/MethodSignature = System.Type Type
Assembly/ARCCore/Class/IKType/_Member/Type/Description = The type, like 'Customer' that we are an index key for. NOTE: Do not confuse with GetType.
Assembly/ARCCore/Class/ITypeDescriber/AssemblyName = ARCCore
Assembly/ARCCore/Class/ITypeDescriber/ClassType = ARCCore.ITypeDescriber
Assembly/ARCCore/Class/ITypeDescriber/Description = Provides a standardized mechanism for describing single-property values (like 'PhoneNumber' of 'Customer' for instance).0x000D0x000A0x000D0x000A(The difference between ITypeDescriber and IP is that the former must be stored 'inside' an IP.0x000D0x000AIn RDBMS-terms a ITypeDescriber is the Field stored within a IP which is the Post.)0x000D0x000A0x000D0x000AThe most important functionality provided is validation and parsing in a standardized manner.0x000D0x000A0x000D0x000AThis is done by a static method call 'EnrichKey' which is supposed to be available in a class 'implementing' this interface.0x000D0x000A(In other words, the type implementing this interface is by this principle able to describe itself to AgoRapide).0x000D0x000A0x000D0x000ANote how this interface in itself is empty 0x000D0x000A(apart from GetSyntaxHelp which is just a suggestion to use in your implementing classes.)0x000D0x000A0x000D0x000AEnrichKey should have the following signature:0x000D0x000A public static void EnrichKey(PK k)0x000D0x000A0x000D0x000AA typical method will set ValidatorAndParser although other attributes of PK may also be changed (which gives rise to the somewhat strange name for the method 'EnrichKey').0x000D0x000A0x000D0x000A(note that for very common types like int, long, DateTime, TimeSpan and so on PKTypeAttribute provides a StandardValidatorAndParser.)0x000D0x000A0x000D0x000AA typical implementation can look like this:0x000D0x000A0x000D0x000A public static void EnrichKey(PK k) 0x007B0x000D0x000A k.SetValidatorAndParser(new Func0x003Cstring, ParseResult0x003E(value =0x003E0x000D0x000A TryParse(value, out var retval, out var errorResponse) ?0x000D0x000A ParseResult.CreateOK(retval) :0x000D0x000A ParseResult.CreateError(errorResponse)0x003B0x000D0x000A ))0x003B0x000D0x000A 0x007D0x000D0x000A0x000D0x000AThe TryParse method in the implementation class follows the ordinary .NET pattern with the addition of a 'out string errorResponse' parameter which can communicate WHY the value was not valid for parsing. This helps a lot with error messages, making an API for instance much more user friendly.0x000D0x000A0x000D0x000ANote the the implementation should also overrride object.ToString() to a format actually understood by the ValidatorAndParser returned. This is necessary for the storage mechanism, like PropertyStream to work (serialization and de-serialization of objects).
Assembly/ARCCore/Class/ITypeDescriber/LongDescription = See also IP which describes multiple value properties (called 'entities' in a more traditional setting). 0x000D0x000ANote that the use of a static method is a practical choice since it avoids AgoRapide having to instantiate the class for what is essential a static one-off operation done only once (for instance at application initialization, or on-demand).0x000D0x000AThis however means that the compiler is unable to check if your class really implements 'EnrichKey' as 'promised' by the fact of it being marked as implementing this interface. Missing implementations will show up at runtime with a helpful and explanatory error messages.0x000D0x000A0x000D0x000ANote that for some attributes you actually have a choice of where to specify them.0x000D0x000A(example below assumes a PKDataAttribute-class with a property called 'InvalidValueExample')0x000D0x000ATODO: FIND ETTER EXAMPLES WHEN SOME REAL BasePKAttribute subclasses are defined in AgoRapide0x000D0x000A0x000D0x000AYou can specify either by0x000D0x000A0x000D0x000A1) Tagging directly the corresponding 'enum' field (enums of type PropertyKeyEnum) with some PKTypeAttribute like:0x000D0x000A0x000D0x000Aenum CustomerP 0x007B0x000D0x000A ...0x000D0x000A 0x005BPKType(Type=DateOfBirth)0x005D0x000D0x000A 0x005BPKData(InvalidValueExample = "1968-13-09")0x005D0x000D0x000A DateOfBirth,0x000D0x000A ...0x000D0x000A0x007D0x000D0x000A0x000D0x000A(but then you will have to do that everywhere you are using the implementing class (in this example the type 'DateOfBirth') because there will be a separate PK generated for each 'enum' field). 0x000D0x000Aor 0x000D0x000A2) by setting them when the resulting PK is passed to EnrichKey (from wherever 'DateOfBirth' is used) like (note, code is somewhat simplified):0x000D0x000A0x000D0x000A public class DateOfBirth : ITypeDescriber 0x007B0x000D0x000A ...0x000D0x000A public static void EnrichKey(PK k) 0x007B0x000D0x000A var pkData = new PKDataAttribute()0x003B0x000D0x000A pkData.AddPV(PKDataAttributeP.InvalidValueExample.A(), "1968-13-09")0x003B0x000D0x000A k.AddP(IKType.FromType(pkData.GetType()), pkData)0x003B0x000D0x000A 0x007D)0x003B0x000D0x000A 0x007D0x000D0x000A0x000D0x000AThe latter method is supposedly better.0x000D0x000A0x000D0x000ANote that attributes like ValidatorAndParser can only be set through EnrichKey because they are too complex for the -Attribute- mechanism
Assembly/ARCCore/Class/ITypeDescriber/_Member/GetSyntaxHelp/ReflectedType = ARCCore.ITypeDescriber
Assembly/ARCCore/Class/ITypeDescriber/_Member/GetSyntaxHelp/MethodName = GetSyntaxHelp
Assembly/ARCCore/Class/ITypeDescriber/_Member/GetSyntaxHelp/MethodSignature = System.String GetSyntaxHelp(System.Type, System.String)
Assembly/ARCCore/Class/ITypeDescriber/_Member/GetSyntaxHelp/Description = Enables explanation of syntax in different contexts from one source:0x000D0x000A0x000D0x000AThe actual syntax information is placed in a SyntaxHelp member like SyntaxHelp0x000D0x000A0x000D0x000AThe syntax can then be published through different contexts like:0x000D0x000A0x000D0x000A1) In ordinary documentation as created by ARCDoc0x000D0x000A(this method is not involved)0x000D0x000A0x000D0x000A2) In run time error messages given to for instance API clients.0x000D0x000A(involving this method)0x000D0x000A0x000D0x000AFor variant 2) this method is typically called from a property method like SyntaxHelp. This method (GetSyntaxHelp) will return the Description of that member's -ClassAttribute.0x000D0x000A0x000D0x000AReturns an empty string if no information found.0x000D0x000A
Assembly/ARCCore/Class/ParseResult/AssemblyName = ARCCore
Assembly/ARCCore/Class/ParseResult/ClassType = ARCCore.ParseResult
Assembly/ARCCore/Class/ParseResult/Description = NOTE: Concept is very old, from the dark ages of AgoRapide's very first inception. There might be room for improvement.0x000D0x000ANOTE: (for instance by using a super-class and inheriting classes for OK and ERROR).
Assembly/ARCCore/Class/ParseResult/_Member/Result/ReflectedType = ARCCore.ParseResult
Assembly/ARCCore/Class/ParseResult/_Member/Result/MethodName = Result
Assembly/ARCCore/Class/ParseResult/_Member/Result/MethodSignature = System.Object Result
Assembly/ARCCore/Class/ParseResult/_Member/Result/Description = Will be null if ErrorResponse is set.0x000D0x000AIf not derived from IP then it will normally be packed inside a PValue<T> afterwards (by mechanism using this class), before final storage into an 'entity' object like PRich
Assembly/ARCCore/Class/ParseResult/_Member/ErrorResponse/ReflectedType = ARCCore.ParseResult
Assembly/ARCCore/Class/ParseResult/_Member/ErrorResponse/MethodName = ErrorResponse
Assembly/ARCCore/Class/ParseResult/_Member/ErrorResponse/MethodSignature = System.String ErrorResponse
Assembly/ARCCore/Class/ParseResult/_Member/ErrorResponse/Description = Will be null if Result is set
Assembly/ARCCore/Class/PK/AssemblyName = ARCCore
Assembly/ARCCore/Class/PK/ClassType = ARCCore.PK
Assembly/ARCCore/Class/PK/BaseTypes = ARCCore.PRich
Assembly/ARCCore/Class/PK/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable0x003BARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/PK/Description = PK = AgoRapide PropertyKey.0x000D0x000A0x000D0x000ADescribes properties related to an object (an entity).0x000D0x000AIn RDBMS-terms it describes the field in the schema for the table)r0x000A0x000D0x000AConstitutes the basic element of TaggingOfPropertyKeys, and gives the IP mechanism the information it needs in order to implement PropertyAccess.0x000D0x000A0x000D0x000AContains collection of BasePKAttribute instances which in turn contain the actual attributes. See also TaggingOfPropertyKeys.0x000D0x000A0x000D0x000ANOTE: This class is itself an instance of IP because we want to communicate contents of keys in a standardised manner. They can for instance be communicated to other ARNodeType through the ToPropertyStream.
Assembly/ARCCore/Class/PK/_Member/TryGetEnum/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/TryGetEnum/MethodName = TryGetEnum
Assembly/ARCCore/Class/PK/_Member/TryGetEnum/MethodSignature = Boolean TryGetEnum0x005BT0x005D(T ByRef, System.String ByRef)
Assembly/ARCCore/Class/PK/_Member/TryGetEnum/Description = Note that usually you will not have to ask for this value, usually in AgoRapide it goes the other way around, you have the enum member / enum value and want the corresponding property key.0x000D0x000AMethod is made generic in order to provide an informative exception message for any type inconsistencies.0x000D0x000A0x000D0x000ASee also __enum.
Assembly/ARCCore/Class/PK/_Member/GetA/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/GetA/MethodName = GetA
Assembly/ARCCore/Class/PK/_Member/GetA/MethodSignature = T GetA0x005BT0x005D()
Assembly/ARCCore/Class/PK/_Member/GetA/Description = Convenience method for easy access to BasePKAttribute with corresponding explaining exception if fails
Assembly/ARCCore/Class/PK/_Member/TryGetA/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/TryGetA/MethodName = TryGetA
Assembly/ARCCore/Class/PK/_Member/TryGetA/MethodSignature = Boolean TryGetA0x005BT0x005D(T ByRef)
Assembly/ARCCore/Class/PK/_Member/TryGetA/Description = Convenience method for easy access to BasePKAttribute.0x000D0x000A
Assembly/ARCCore/Class/PK/_Member/ModifyCleanerAndValidatorAndParserForCardinality/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/ModifyCleanerAndValidatorAndParserForCardinality/MethodName = ModifyCleanerAndValidatorAndParserForCardinality
Assembly/ARCCore/Class/PK/_Member/ModifyCleanerAndValidatorAndParserForCardinality/MethodSignature = Void ModifyCleanerAndValidatorAndParserForCardinality()
Assembly/ARCCore/Class/PK/_Member/ModifyCleanerAndValidatorAndParserForCardinality/Description = Called from Initialize after _cleaner and _validatorAndParser have been set.0x000D0x000AThis method modifies them according to Cardinality for this PK.0x000D0x000A0x000D0x000ANote how it makes sense for this class (PK) to take care of Cardinality while the original ITypeDescriber takes care of single values, because Cardinality is defined at PK-level and may differ between different PKs.
Assembly/ARCCore/Class/PK/_Member/ModifyCleanerAndValidatorAndParserForCardinality/LongDescription = Note: Method is public only in order for nameof links to resolve in the documentation.
Assembly/ARCCore/Class/PK/_Member/ToString/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PK/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PK/_Member/ToString/Description = Caching is supposed to be useful because may be called quite often.0x000D0x000ACaching is acceptable because few instances of this will be created (little memory overhead in total).0x000D0x000A0x000D0x000ANote that ToString is only based on __enum, meaning that two enum members / enum values with same name but different type, like CustomerP.Name and OrderP.Name, will be considered equal.0x000D0x000AThis corresponds to a general keep-it-simple approach in AgoRapide (as short keys as possible).
Assembly/ARCCore/Class/PK/_Member/TryValidateAndParse/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/TryValidateAndParse/MethodName = TryValidateAndParse
Assembly/ARCCore/Class/PK/_Member/TryValidateAndParse/MethodSignature = Boolean TryValidateAndParse(System.String, ARCCore.ParseResult ByRef)
Assembly/ARCCore/Class/PK/_Member/TryValidateAndParse/Description = Parses the value according to specifications for this property key.0x000D0x000ANote: Method is a bit cumbersome, -TryCleanParseAndPack- or -CleanParseAndPack- are probably better alternatives
Assembly/ARCCore/Class/PK/_Member/TryCleanValidateAndParse/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/TryCleanValidateAndParse/MethodName = TryCleanValidateAndParse
Assembly/ARCCore/Class/PK/_Member/TryCleanValidateAndParse/MethodSignature = Boolean TryCleanValidateAndParse(System.String, ARCCore.ParseResult ByRef)
Assembly/ARCCore/Class/PK/_Member/TryCleanValidateAndParse/Description = Cleans and parses the value according to specifications for this property key.0x000D0x000ANote: Method is a bit cumbersome, -TryCleanParseAndPack- or -CleanParseAndPack- are probably better alternatives
Assembly/ARCCore/Class/PK/_Member/PackParseResultForStorageInEntityObject/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/PackParseResultForStorageInEntityObject/MethodName = PackParseResultForStorageInEntityObject
Assembly/ARCCore/Class/PK/_Member/PackParseResultForStorageInEntityObject/MethodSignature = ARCCore.IP PackParseResultForStorageInEntityObject(ARCCore.ParseResult)
Assembly/ARCCore/Class/PK/_Member/PackParseResultForStorageInEntityObject/Description = Packs result of parsing into a IP-derived class, suitable for sending to -AddOrUpdateP-.0x000D0x000ANote that if result is already derived from IP then it is used directly.0x000D0x000ANote: Method is a bit cumbersome to call from outside, -TryCleanParseAndPack- or -CleanParseAndPack- are probably better alternatives.0x000D0x000A0x000D0x000ANote that currently PValue<T> is used for packing (unless result is already IP as already mentioned). 0x000D0x000ACorresponding 'unpacking' is done by TryGetV.0x000D0x000A0x000D0x000AA possible future expansion of AgoRapide capabilities could be to introduce, through the BasePKAttribute mechanism, a flexible choice of how to pack the result, instead of always using PValue<T>. (We could for instance introduce a 'StandardPacker' in BasePKAttribute just like we today have StandardValidatorAndParser and StandardCleaner. If no suck packer is found, we could use a default packer that packs inside PValue<T>).0x000D0x000A0x000D0x000A(This is the reason this method is not made static, in order to hint about this possibility and not break existing code if it ever gets introduced)
Assembly/ARCCore/Class/PK/_Member/PackObjectForStorageInEntityObject/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/PackObjectForStorageInEntityObject/MethodName = PackObjectForStorageInEntityObject
Assembly/ARCCore/Class/PK/_Member/PackObjectForStorageInEntityObject/MethodSignature = ARCCore.IP PackObjectForStorageInEntityObject(System.Object)
Assembly/ARCCore/Class/PK/_Member/PackObjectForStorageInEntityObject/Description = See PackParseResultForStorageInEntityObject for documentation.
Assembly/ARCCore/Class/PK/_Member/FromEnum/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/FromEnum/MethodName = FromEnum
Assembly/ARCCore/Class/PK/_Member/FromEnum/MethodSignature = ARCCore.PK FromEnum(System.Object)
Assembly/ARCCore/Class/PK/_Member/FromEnum/Description = Returns the corresponding PK instance from the given PropertyKeyEnum.0x000D0x000A0x000D0x000ATODO: Introduce TryGetFromEnum, and rename this FromEnum to GetFromEnum.
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.Type, System.String, ARCCore.PK ByRef)/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.Type, System.String, ARCCore.PK ByRef)/MethodName = TryGetFromTypeAndFieldName
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.Type, System.String, ARCCore.PK ByRef)/MethodSignature = Boolean TryGetFromTypeAndFieldName(System.Type, System.String, ARCCore.PK ByRef)
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.Type, System.String, ARCCore.PK ByRef)/Description = Returns property key based on type and field name.0x000D0x000A0x000D0x000AWill also return, in addition to the tightly coupled keys like how CustomerP belongs to Customer, the metadata PP property keys.
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, System.String, ARCCore.PK ByRef)/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, System.String, ARCCore.PK ByRef)/MethodName = TryGetFromTypeAndFieldName
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, System.String, ARCCore.PK ByRef)/MethodSignature = Boolean TryGetFromTypeAndFieldName(System.String, System.String, ARCCore.PK ByRef)
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, System.String, ARCCore.PK ByRef)/Description = Returns property key based on type and field name.0x000D0x000A0x000D0x000AWill also return, in addition to the tightly coupled keys like how CustomerP belongs to Customer, the metadata PP property keys.
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, ARCCore.PK ByRef)/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, ARCCore.PK ByRef)/MethodName = TryGetFromTypeAndFieldName
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, ARCCore.PK ByRef)/MethodSignature = Boolean TryGetFromTypeAndFieldName(System.String, ARCCore.PK ByRef)
Assembly/ARCCore/Class/PK/_Member/Boolean TryGetFromTypeAndFieldName(System.String, ARCCore.PK ByRef)/Description = Returns property key based on type and field name.0x000D0x000A0x000D0x000AWill also return, in addition to the tightly coupled keys like how CustomerP belongs to Customer, the metadata PP property keys.
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityType/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityType/MethodName = GetAllPKForEntityType
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityType/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.PK0x005D GetAllPKForEntityType(System.Type)
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityType/Description = Returns all property keys relevant for the given entity type, 0x000D0x000Athat is, all PK constructed from CorrespondingEnumType for a class.0x000D0x000A0x000D0x000ARemember that in addition to the tightly coupled properties like how CustomerP belongs to Customer, the metadata PP keys are also relevant for adding to many objects.0x000D0x000AThis metadata keys does not apply here though (they are not included in the returned enumeration).0x000D0x000A0x000D0x000AReturns an empty collection if no property keys found.0x000D0x000A0x000D0x000ANote that depends on BuildFromStringCache having been called already, something which should have happened at application startup.0x000D0x000A
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityTypeString/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityTypeString/MethodName = GetAllPKForEntityTypeString
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityTypeString/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.PK0x005D GetAllPKForEntityTypeString(System.String)
Assembly/ARCCore/Class/PK/_Member/GetAllPKForEntityTypeString/Description = Returns all property keys relevant for the given entity type, 0x000D0x000Athat is, all PK constructed from CorrespondingEnumType for a class.0x000D0x000A0x000D0x000ARemember that in addition to the tightly coupled properties like how CustomerP belongs to Customer, the metadata PP keys are also relevant for adding to many objects.0x000D0x000AThis metadata keys does not apply here though (they are not included in the returned enumeration).0x000D0x000A0x000D0x000AReturns an empty collection if no property keys found.0x000D0x000A0x000D0x000ANote that depends on BuildFromStringCache having been called already, something which should have happened at application startup.0x000D0x000A
Assembly/ARCCore/Class/PK/_Member/BuildFromStringCache/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/BuildFromStringCache/MethodName = BuildFromStringCache
Assembly/ARCCore/Class/PK/_Member/BuildFromStringCache/MethodSignature = Void BuildFromStringCache()
Assembly/ARCCore/Class/PK/_Member/BuildFromStringCache/Description = Builds the content of -_fromStringCache- and also -_allPKForEntityTypeCache-.0x000D0x000ANote also caches the metadata in PP for all other classes.0x000D0x000ATODO: Explain better.0x000D0x000A0x000D0x000AShould be called at application startup (See Assemblies).
Assembly/ARCCore/Class/PK/_Member/GetTypeMapping/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/GetTypeMapping/MethodName = GetTypeMapping
Assembly/ARCCore/Class/PK/_Member/GetTypeMapping/MethodSignature = ARCCore.PK GetTypeMapping(System.Type, System.Type)
Assembly/ARCCore/Class/PK/_Member/GetTypeMapping/Description = Returns the relevant property key for a given type entity-type and field-type.0x000D0x000A0x000D0x000AThis enables the use of convenience 'mapping' methods like AddPM, AddPVM, GetPM, TryGetPM, GetPVM, TryGetPVM which have a simpler syntax.0x000D0x000A0x000D0x000AFor instance if you have a class called DateOfBirth, and a corresponding field for your Customer-class (normally also called DateOfBirth), then you can use Customer.GetPVM0x003CDateOfBirth0x003E() instead of Customer.GetPV0x003CDateOfBirth0x003E(CustomerP.DateOfBirth).0x000D0x000A(The approach works only as long as there is only a single DateOfBirth-field in your Customer-class).0x000D0x000A0x000D0x000ANote that if you in this specific case did not use a specific class like DateOfBirth, but just the DateTime-type, and there is ONLY one DateTime field for Customer, this approach still works but the syntax is not as intuitive (it becomes Customer.GetPVM0x003CDateTime0x003E() instead of Customer.0x003CDateTime0x003E(CustomerP.DateOfBirth).0x000D0x000A0x000D0x000ANote that throws an exception if exactly one type not found. In other words, caller is assume to know the proper use of the entity class.0x000D0x000A0x000D0x000ATODO: Turn into TryGetTypeMapping with corresponding method GetTypeMapping throwing an exception like this method does today.
Assembly/ARCCore/Class/PK/_Member/GetTypeMapping/LongDescription = This is a convenience functionality, not strictly needed. It just reduces the somewhat verbose syntax of AgoRapide's PropertyAccess. Note that it is also possible to define traditional setters / getters in your entity classes, giving you 'normal' syntax back, like Customer.DateOfBirth.
Assembly/ARCCore/Class/PK/_Member/GetObligatoryValuesForEntityType/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/GetObligatoryValuesForEntityType/MethodName = GetObligatoryValuesForEntityType
Assembly/ARCCore/Class/PK/_Member/GetObligatoryValuesForEntityType/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.PK0x005D GetObligatoryValuesForEntityType(System.Type)
Assembly/ARCCore/Class/PK/_Member/GetObligatoryValuesForEntityType/Description = Returns all obligatory values (based on IsObligatory)
Assembly/ARCCore/Class/PK/_Member/Equals/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Equals/MethodName = Equals
Assembly/ARCCore/Class/PK/_Member/Equals/MethodSignature = Boolean Equals(ARCCore.IK)
Assembly/ARCCore/Class/PK/_Member/Equals/Description = Note that ToString is only based on __enum, meaning that two enum members / enum values with same name but different type, like CustomerP.Name and OrderP.Name, will be considered equal.0x000D0x000AThis corresponds to a general keep-it-simple approach in AgoRapide (as short keys as possible).
Assembly/ARCCore/Class/PK/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/PK/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/PK/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCCore/Class/PK/_Member/.ctor/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/.ctor/MethodName = .ctor
Assembly/ARCCore/Class/PK/_Member/.ctor/MethodSignature = Void .ctor(System.Object)
Assembly/ARCCore/Class/PK/_Member/.ctor/Description = Constructor with 'object _enum' is necessary in order for ToString to work.0x000D0x000ASee _whyEnumIsNeededInConstructorExplanation for more information.0x000D0x000A
Assembly/ARCCore/Class/PK/_Member/Type/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Type/MethodName = Type
Assembly/ARCCore/Class/PK/_Member/Type/MethodSignature = System.Type Type
Assembly/ARCCore/Class/PK/_Member/Type/Description = Returns type from PKTypeAttribute's Type.0x000D0x000AConvenience method because original syntax is just too complex (also, improves performance).
Assembly/ARCCore/Class/PK/_Member/Cardinality/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Cardinality/MethodName = Cardinality
Assembly/ARCCore/Class/PK/_Member/Cardinality/MethodSignature = ARCCore.Cardinality Cardinality
Assembly/ARCCore/Class/PK/_Member/Cardinality/Description = Returns cardinality from PKTypeAttribute's Cardinality.0x000D0x000AConvenience method because original syntax is just too complex (also, improves performance).
Assembly/ARCCore/Class/PK/_Member/CorrespondingClass/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/CorrespondingClass/MethodName = CorrespondingClass
Assembly/ARCCore/Class/PK/_Member/CorrespondingClass/MethodSignature = System.Type CorrespondingClass
Assembly/ARCCore/Class/PK/_Member/CorrespondingClass/Description = Returns CorrespondingClass based on __enum.0x000D0x000A0x000D0x000ATODO: Possible not needed. May be deleted.
Assembly/ARCCore/Class/PK/_Member/ValidatorAndParser/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/ValidatorAndParser/MethodName = ValidatorAndParser
Assembly/ARCCore/Class/PK/_Member/ValidatorAndParser/MethodSignature = System.Func0x006020x005BSystem.String,ARCCore.ParseResult0x005D ValidatorAndParser
Assembly/ARCCore/Class/PK/_Member/ValidatorAndParser/Description = Validates and parses a value.0x000D0x000A0x000D0x000AThe reason for having a (standard) validator and parser is to ensure consistency with handling of input values throughout your application. This both enhances the security and the user friendliness of your application, and makes it easier to debug because any error conditions are clearly stated and explained.0x000D0x000A0x000D0x000AOriginates from either:0x000D0x000A1) The EnrichKey-implementation in ITypeDescriber (that is, as tailor made for the actual class) or 0x000D0x000A2) As a standard validator and parser from a BasePKAttribute (for instance StandardValidatorAndParser offers one for standard types like string, int, long, bool, DateTime, TimeSpan, Type, Uri, and similar).0x000D0x000A0x000D0x000AIf not found neither from 1) nor 2), then Initialize will set a dummy value which will throw an exception upon attempted use (the null check below is really irrelevant)
Assembly/ARCCore/Class/PK/_Member/ValidatorAndParser/LongDescription = Note how Initialize modifies the value to take into account Cardinality.0x000D0x000A0x000D0x000ASee also Cleaner.
Assembly/ARCCore/Class/PK/_Member/Cleaner/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/Cleaner/MethodName = Cleaner
Assembly/ARCCore/Class/PK/_Member/Cleaner/MethodSignature = System.Func0x006020x005BSystem.String,System.String0x005D Cleaner
Assembly/ARCCore/Class/PK/_Member/Cleaner/Description = Cleanup of values, to be used before value is attempted validated.0x000D0x000A0x000D0x000AThe reason for having a cleaner is to make the final user interface more user friendly. A typical error like having leading or trailing spaces in a user entered value should not result in any error message being generated, but the offending spaces should simply be string.Trim'ed away.0x000D0x000A0x000D0x000AOriginates from either:0x000D0x000A1) The EnrichKey-implementation in ITypeDescriber (that is, as tailor made for the actual class) or 0x000D0x000A2) As a standard cleaner from a BasePKAttribute (typically from StandardCleaner).0x000D0x000AIf not found neither from 1) nor 2), then- Initialize will set a standard cleaner which will use string.Trim() (the null check below is really irrelevant)
Assembly/ARCCore/Class/PK/_Member/Cleaner/LongDescription = Note how Initialize modifies the value to take into account Cardinality.0x000D0x000A0x000D0x000ASee also ValidatorAndParser.
Assembly/ARCCore/Class/PK/_Member/AllEnums/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/AllEnums/MethodName = AllEnums
Assembly/ARCCore/Class/PK/_Member/AllEnums/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Type0x005D AllEnums
Assembly/ARCCore/Class/PK/_Member/AllEnums/Description = All enums for the whole application.0x000D0x000ATODO: Consider changing to PropertyKeyEnum-tagged enums only.
Assembly/ARCCore/Class/PK/_Member/__enum/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PK/_Member/__enum/MethodName = __enum
Assembly/ARCCore/Class/PK/_Member/__enum/MethodSignature = System.Object __enum
Assembly/ARCCore/Class/PK/_Member/__enum/Description = This information is also found as EnumMember.0x000D0x000A0x000D0x000ATODO: Rename if found to be permanently desired exposed as public.0x000D0x000A0x000D0x000ASee also TryGetEnum.
Assembly/ARCCore/Class/PKLogAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/PKLogAttribute/ClassType = ARCCore.PKLogAttribute
Assembly/ARCCore/Class/PKLogAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute0x003BARCCore.EnumMemberAttribute0x003BARCCore.BasePKAttribute
Assembly/ARCCore/Class/PKLogAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PKLogAttribute/CorrespondingEnumType = ARCCore.PKLogAttributeP
Assembly/ARCCore/Class/PKLogAttribute/Description = Explains how logging of changes to a property should be done.0x000D0x000ADescribes mostly occasions where logging shall be restricted.0x000D0x000A0x000D0x000ANormally when a class like PConcurrent is set up to log (like through LogContext), then every property's changes will be logged. In some cases this is too much, for instance if CountReceiveMessage was to be logged for every PropertyStream-line received, that would generate another property stream line which again would update the CountReceiveMessage value.0x000D0x000A0x000D0x000AUtilized by for instance ActualConnection.0x000D0x000A0x000D0x000ASee also ExposingApplicationState.0x000D0x000A0x000D0x000ASee also PKLogAttributeP.
Assembly/ARCCore/Class/PKLogAttribute/_Member/Initialize/ReflectedType = ARCCore.PKLogAttribute
Assembly/ARCCore/Class/PKLogAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/PKLogAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/PKLogAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/PKLogAttribute/_Member/DoNotLogAtAll/ReflectedType = ARCCore.PKLogAttribute
Assembly/ARCCore/Class/PKLogAttribute/_Member/DoNotLogAtAll/MethodName = DoNotLogAtAll
Assembly/ARCCore/Class/PKLogAttribute/_Member/DoNotLogAtAll/MethodSignature = Boolean DoNotLogAtAll
Assembly/ARCCore/Class/PKLogAttribute/_Member/DoNotLogAtAll/Description = See DoNotLogAtAll.
Assembly/ARCCore/Class/PKLogAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/PKLogAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/PKLogAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/PKLogAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/PKTypeAttribute/AssemblyName = ARCCore
Assembly/ARCCore/Class/PKTypeAttribute/ClassType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute0x003BARCCore.EnumMemberAttribute0x003BARCCore.BasePKAttribute
Assembly/ARCCore/Class/PKTypeAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PKTypeAttribute/CorrespondingEnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/Class/PKTypeAttribute/Description = Contains the most basic essential information about a property key, like its description, type and cardinality.0x000D0x000A0x000D0x000AWill always be present within an instance of PK.0x000D0x000A0x000D0x000ASee also PKTypeAttributeP.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Initialize/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardValidatorAndParser/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardValidatorAndParser/MethodName = StandardValidatorAndParser
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardValidatorAndParser/MethodSignature = System.Func0x006020x005BSystem.String,ARCCore.ParseResult0x005D StandardValidatorAndParser(System.Type)
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardValidatorAndParser/Description = TODO: Add validator and parser through use of reflection, that is, use reflection to look for type containing0x000D0x000ATODO: a static TryParse method.0x000D0x000A0x000D0x000AReturns validator and parser for well known types like string, int, long, bool, DateTime (not implemented), TimeSpan, Type, Uri.0x000D0x000A0x000D0x000ATODO: There is duplicate code in ARCQuery.QueryExpressionWhere.TryParse and ARCCore.PKTypeAttribute.StandardValidatorAndParser
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardCleaner/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardCleaner/MethodName = StandardCleaner
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardCleaner/MethodSignature = System.Func0x006020x005BSystem.String,System.String0x005D StandardCleaner(System.Type)
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardCleaner/Description = Returns a cleaner for well known types like bool
Assembly/ARCCore/Class/PKTypeAttribute/_Member/StandardCleaner/LongDescription = TODO: If we see consistent user-errors for other (well known) types, that are not covered by the final standard cleaner set by Initialize (which just string.Trim's the input value), then attempt to create more cleaners should be done here.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Type/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Type/MethodName = Type
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Type/MethodSignature = System.Type Type
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Type/Description = See Type.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/DefaultValue/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/DefaultValue/MethodName = DefaultValue
Assembly/ARCCore/Class/PKTypeAttribute/_Member/DefaultValue/MethodSignature = System.Object DefaultValue
Assembly/ARCCore/Class/PKTypeAttribute/_Member/DefaultValue/Description = See DefaultValue.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Cardinality/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Cardinality/MethodName = Cardinality
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Cardinality/MethodSignature = ARCCore.Cardinality Cardinality
Assembly/ARCCore/Class/PKTypeAttribute/_Member/Cardinality/Description = See Cardinality.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsObligatory/ReflectedType = ARCCore.PKTypeAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsObligatory/MethodName = IsObligatory
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsObligatory/MethodSignature = Boolean IsObligatory
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsObligatory/Description = See IsObligatory.
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCCore/Class/PKTypeAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCCore/Class/IP/AssemblyName = ARCCore
Assembly/ARCCore/Class/IP/ClassType = ARCCore.IP
Assembly/ARCCore/Class/IP/Interfaces = System.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/IP/Description = IP = IProperty.0x000D0x000A0x000D0x000ACommon central mechanism for implementing PropertyAccess.0x000D0x000A0x000D0x000A'Everything' in your application, especially entity objects (like 'Customer', 'Order' and so on) should implement this interface.0x000D0x000A0x000D0x000AYou should also let internal parts of your application implement this interface. This will make logging and debugging much easier for instance (see ExposingApplicationState).0x000D0x000A0x000D0x000ASome of the implementing classes are:0x000D0x000APRich Fully flexible storage. Can store anything. Typical inherited for entity representations like 'Customer' or 'Order'.0x000D0x000APConcurrent A (somewhat) thread-safe alternative to PRich which also supports log.0x000D0x000APValue<T> Single value storage.0x000D0x000APValueEmpty.0x000D0x000A0x000D0x000ANOTE: Some ideas for new classes implementing this interface could be:0x000D0x000A1) PRichImmutable, a quasi-immutable class for which you could (after initialization) set a flag stopping further updates to the class.0x000D0x000A0x000D0x000A(The difference between ITypeDescriber and IP is that the former must be stored 'inside' an IP.0x000D0x000AIn RDBMS-terms a ITypeDescriber is the Field stored within a IP which is the Post.)0x000D0x000A0x000D0x000AThe more classes you have implementing this interface, the more classes you have that can participiate in the AgoRapide world with flexible concepts like PropertyStream, TaggingOfPropertyKeys, PropertyAccess, ExposingApplicationState.0x000D0x000AThe mechanism has been designed to be as flexible as possible. Experience shows that a great variety of objects can with great advantage be represented through this mechanism. That is, not only traditional entities like 'Customer', 'Order' and so on can be represented but also objects like internal parts of your application (classes, enums), 0x000D0x000Athe different methods in an API and even reports and aggregations.0x000D0x000A0x000D0x000A(Even the mechanism for describing this mechanism (PK) is an implementation of it).0x000D0x000A0x000D0x000AHINT: Whenever you are creating a new class in your application, instead of using traditional setters and getters / traditional properties, let class inherit IP and use this mechanism instead.0x000D0x000A0x000D0x000AUsing IP from the start makes the rich functionality of AgoRapide available without much work. (You can always build traditional setters and getters and / or traditional property storage on top of that mechanism at a later stage if you so prefer)0x000D0x000A0x000D0x000AReflecting the fact that instances of this interface often contain a collection of objects, this interface implements the following:0x000D0x000A1) Indexing. Enables you to query more 'direct' in C# like for instance 'DataStorage0x005B"Customer"0x005D0x005B"42"0x005D0x005B"FirstName"0x005D'.0x000D0x000A2) IEnumerable0x003CIKIP0x003E.0x000D0x000A3) The Keys and Values pattern from ordinary .NET Dictionary (see Keys and Values.0x000D0x000AThis functionality is of course not relevant for value only implementations like PValue<T> but technically implemented nonetheless in all cases in order for any hierarchical structure to be 'probed' from the outside in a standardized manner.0x000D0x000A0x000D0x000ATODO: Implement IDictionary0x003CTKey, TValue0x003E also..0x000D0x000A0x000D0x000ASee also PropertyAccess.
Assembly/ARCCore/Class/IP/LongDescription = TODO: Regarding default interface methods defined here in this interface TODO: and the need for implementing an 'IP' property in implementing classes like IP.0x000D0x000ATODO: As AgoRapide matures, considering implementing copies of the default interface methods in a common super class TODO: for PRich, PConcurrent, PExact (not necessary for PValue, PEmpty and not possible for BaseAttribute).0x000D0x000A0x000D0x000ANote how AgoRapide internally uses this same mechanism ('eating its own dog food'), and also how you are encouraged to document your application through attributes like ClassAttribute and ClassMemberAttribute using the same mechanism.0x000D0x000A0x000D0x000ANote about packing of values: PropertyAccess uses packed values (everything is send and received as IP) meaning for instance that a string-value would typically be packed inside a PValue<T> object.0x000D0x000AConnected with this, classes implementing IP have a choice between0x000D0x000A1) Unpacking on receive, packing on send (like used by PExact<EnumType>) or0x000D0x000A2) Storing in packed form (like used by PRich).0x000D0x000AThe former is more memory efficient (see MemoryConsumption), but less able to store metadata (see PP) and hierarchical data.0x000D0x000A(see also PackObjectForStorageInEntityObject and TryGetV.)0x000D0x000ASee also ITypeDescriber which provides a standardized mechanism for describing single-property values.0x000D0x000A0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/Inc/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Inc/MethodName = Inc
Assembly/ARCCore/Class/IP/_Member/Inc/MethodSignature = Void Inc0x005BTKey0x005D(TKey)
Assembly/ARCCore/Class/IP/_Member/Inc/Description = Increments given property key by 1. Sets to 1 if not found. Uses long, not integer.
Assembly/ARCCore/Class/IP/_Member/Dec/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Dec/MethodName = Dec
Assembly/ARCCore/Class/IP/_Member/Dec/MethodSignature = Void Dec0x005BTKey0x005D(TKey)
Assembly/ARCCore/Class/IP/_Member/Dec/Description = Decrements given property key by 1. Sets to -1 if not found. Uses long, not integer.
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Action0x006010x005BSystem.String0x005D)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Action0x006010x005BSystem.String0x005D)/MethodName = SetLogContext
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Action0x006010x005BSystem.String0x005D)/MethodSignature = Void SetLogContext(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Action0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Action0x006010x005BSystem.String0x005D)/Description = Convenience method for setting LogContext.0x000D0x000APrepends log to context if not already done.
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.String, System.Action0x006010x005BSystem.String0x005D)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.String, System.Action0x006010x005BSystem.String0x005D)/MethodName = SetLogContext
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.String, System.Action0x006010x005BSystem.String0x005D)/MethodSignature = Void SetLogContext(System.String, System.Action0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/IP/_Member/Void SetLogContext(System.String, System.Action0x006010x005BSystem.String0x005D)/Description = Convenience method for setting LogContext.0x000D0x000APrepends log to context if not already done.
Assembly/ARCCore/Class/IP/_Member/Log/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Log/MethodName = Log
Assembly/ARCCore/Class/IP/_Member/Log/MethodSignature = Void Log(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D, System.String, Boolean, System.String)
Assembly/ARCCore/Class/IP/_Member/Log/Description = Note that most relevant to use for a class like PConcurrent with concept of LogContext. (using this method within an ordinary entity class like PRich will only store the log-data 'out-of-sight' within the object instance, it will not be sent to the PropertyStream.)0x000D0x000A(it will of course be written to the Console anyway if writeToConsole is specified)0x000D0x000A0x000D0x000ASee log for more details.
Assembly/ARCCore/Class/IP/_Member/LogExecuteTime/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/LogExecuteTime/MethodName = LogExecuteTime
Assembly/ARCCore/Class/IP/_Member/LogExecuteTime/MethodSignature = T LogExecuteTime0x005BT0x005D(System.Func0x006010x005BT0x005D, System.Collections.Generic.IEnumerable0x006010x005BSystem.ValueTuple0x006020x005BSystem.String,System.String0x005D0x005D, Boolean, System.String)
Assembly/ARCCore/Class/IP/_Member/LogExecuteTime/Description = Times the execution of the given function and logs details about elapsed time.0x000D0x000AExample of log output (with properties parameter containing two keys, 'propertiesKeyA' and 'propertiesKeyB'):0x000D0x000A log/0x005BLogContext0x005D/log = 0x005BMethodName0x005D/0x005BThreadName0x005D/0x005BThreadId0x005D/Start = 2020-06-03 13:20:59.7600x000D0x000A log/0x005BLogContext0x005D/log = 0x005BMethodName0x005D/0x005BThreadName0x005D/0x005BThreadId0x005D/propertiesKeyA = Value of A0x000D0x000A log/0x005BLogContext0x005D/log = 0x005BMethodName0x005D/0x005BThreadName0x005D/0x005BThreadId0x005D/propertiesKeyA = Value of B0x000D0x000A log/0x005BLogContext0x005D/log = 0x005BMethodName0x005D/0x005BThreadName0x005D/0x005BThreadId0x005D/Finish = 2020-06-03 13:21:00.7660x000D0x000A log/0x005BLogContext0x005D/log = 0x005BMethodName0x005D/0x005BThreadName0x005D/0x005BThreadId0x005D/ElapsedTime = 00:00:01.0050x000D0x000A
Assembly/ARCCore/Class/IP/_Member/HandleException/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/HandleException/MethodName = HandleException
Assembly/ARCCore/Class/IP/_Member/HandleException/MethodSignature = Void HandleException(System.Exception, System.String)
Assembly/ARCCore/Class/IP/_Member/HandleException/Description = Note that most relevant to use for PConcurrent. 0x000D0x000AUsing this method within an ordinary entity class like PRich will only store the exception data 'out-of-sight' within the object instance, it will not be sent to the PropertyStream.0x000D0x000A0x000D0x000ASee -ExceptionText for more details.
Assembly/ARCCore/Class/IP/_Member/Initialize/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/IP/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/IP/_Member/Initialize/Description = Note that has a default implementation (doing nothing).0x000D0x000AAny implementation should start with a call to AssertIntegrity.
Assembly/ARCCore/Class/IP/_Member/AssertIntegrity/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AssertIntegrity/MethodName = AssertIntegrity
Assembly/ARCCore/Class/IP/_Member/AssertIntegrity/MethodSignature = Void AssertIntegrity()
Assembly/ARCCore/Class/IP/_Member/AssertIntegrity/Description = See TryAssertIntegrity.
Assembly/ARCCore/Class/IP/_Member/TryAssertIntegrity/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/TryAssertIntegrity/MethodName = TryAssertIntegrity
Assembly/ARCCore/Class/IP/_Member/TryAssertIntegrity/MethodSignature = Boolean TryAssertIntegrity(System.Collections.Generic.List0x006010x005BSystem.ValueTuple0x006020x005BARCCore.PK,System.String0x005D0x005D ByRef)
Assembly/ARCCore/Class/IP/_Member/TryAssertIntegrity/Description = Asserts the integrity of this entity. 0x000D0x000AAs of Mar 2020 this consists of asserting that all obligatory values are set (based on IsObligatory.).0x000D0x000A0x000D0x000ANote: Will also add any missing missing obligatory values if a DefaultValue is found.
Assembly/ARCCore/Class/IP/_Member/ToString/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/IP/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/IP/_Member/ToString/Description = The ToString()-implementation in the classes implementing this interface is supposed to give a short concise representation of the object for debugging and logging purposes, that is, intended for human consumption. The most 'important' implementation is probably the one in PRich (ToString) because that one is often the basis for your entity classes like 'Customer', 'Order' and so on
Assembly/ARCCore/Class/IP/_Member/ToString/LongDescription = NOTE: Having ToString() as an interface method is kind of pointless with regard to forcing and implementation, because any object implements ToString() anyway, and therefore the compiler will not complain about missing implementations in any classes implementing this interface.0x000D0x000AFor some explanation of the logic behind this, see (tldr "class always win") http://www.lambdafaq.org/why-cant-default-methods-override-equals-hashcode-and-tostring/
Assembly/ARCCore/Class/IP/_Member/OnTrySetP/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/OnTrySetP/MethodName = OnTrySetP
Assembly/ARCCore/Class/IP/_Member/OnTrySetP/MethodSignature = Boolean OnTrySetP(ARCCore.IKIP)
Assembly/ARCCore/Class/IP/_Member/OnTrySetP/Description = Event handler to be called by TrySetP before it changes a property value (but AFTER it has done any validity checks, that is, after is has 'decided' to return TRUE, in other words, event handler should be called when change is guaranteed to go through, but before it actually has been done).0x000D0x000A0x000D0x000AReturn value TRUE is to be treated as cancel, that is, the change should not go through after all.0x000D0x000A0x000D0x000ASome uses for this event handler could be:0x000D0x000A1) Recording historical values, before they are overwritten by new values (but see also Cardinality.
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef, System.String ByRef)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef, System.String ByRef)/MethodName = TryGetP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef, System.String ByRef)/MethodSignature = Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef, System.String ByRef)/Description = Gets a single property for this object0x000D0x000ANote that not relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/ToPropertyStream/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/ToPropertyStream/MethodName = ToPropertyStream
Assembly/ARCCore/Class/IP/_Member/ToPropertyStream/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D ToPropertyStream(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D, System.Collections.Generic.List0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/IP/_Member/ToPropertyStream/Description = Turns object into a PropertyStream0x000D0x000AUsually to be called initially (from 'outside') with no parameters.0x000D0x000AThis is AgoRapide's main serialization mechanism.0x000D0x000AThe main deserialization mechanism is TryStore (together with TryParse).0x000D0x000A0x000D0x000ANOTE: 'final' implementations, that is, classes containing an actual value has to implement this method explicitly.0x000D0x000ANOTE: See ToPropertyStream and ToPropertyStream.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/ToJSONSerializeable/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/ToJSONSerializeable/MethodName = ToJSONSerializeable
Assembly/ARCCore/Class/IP/_Member/ToJSONSerializeable/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Object0x005D ToJSONSerializeable(Int32)
Assembly/ARCCore/Class/IP/_Member/ToJSONSerializeable/Description = Prepares the data into a format acceptable for System.Text.Json.JsonSerializer.Serialize.0x000D0x000A(used by ARCAPI (which again uses System.Text.Json version 4.7.2 as of Aug 2020)).0x000D0x000A0x000D0x000AThis default implementation will for instance replace Type with String.0x000D0x000A0x000D0x000ANote that there is no corresponding JSON Deserialize-method (as JSON is not a suitable serialization mechanism for PropertyStream).0x000D0x000ASee ToPropertyStream for more information about serialization / deserialization.0x000D0x000A0x000D0x000ANOTE: Strictly speaking this functionality really belongs in ARCQuery / ARCAPI.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/GetValueForJSONSerializer/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/GetValueForJSONSerializer/MethodName = GetValueForJSONSerializer
Assembly/ARCCore/Class/IP/_Member/GetValueForJSONSerializer/MethodSignature = System.Object GetValueForJSONSerializer(ARCCore.IP)
Assembly/ARCCore/Class/IP/_Member/GetValueForJSONSerializer/Description = Makes the following modifications to the data:0x000D0x000A0x000D0x000A1) Replaces Type with String0x000D0x000A(in order to avoid exception being thrown by System.Text.Json.JsonSerializer.Serialize (issue in 4.7.2 and probably later versions also))0x000D0x000A0x000D0x000A2) Replaces enums with their string representation0x000D0x000A(in order to avoid int-representation being used by System.Text.Json.JsonSerializer.Serialize).0x000D0x000ANOTE: Strictly speaking this functionality really belongs in ARCQuery / ARCAPI.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/TrySetP/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/TrySetP/MethodName = TrySetP
Assembly/ARCCore/Class/IP/_Member/TrySetP/MethodSignature = Boolean TrySetP(ARCCore.IKIP, System.String ByRef)
Assembly/ARCCore/Class/IP/_Member/TrySetP/Description = Set property regardless of whether exists or not.0x000D0x000A0x000D0x000ANote that not relevant for single-value properties like PValue<T>.0x000D0x000A0x000D0x000ASome reasons for FALSE being returned may be like the following:0x000D0x000A0x000D0x000A1) Parameter IKIP found inconsistent at call to TryAssertTypeIntegrity.0x000D0x000A(note that all implementing classes of IP should call TryAssertTypeIntegrity in their implementation of this method (TrySetP)).0x000D0x000A0x000D0x000A2) This instance of IP does not accept the given key. This again may have different reasons:0x000D0x000A0x000D0x000A2a) This instance is a 'value only' instance like PValue<T>, simply not accepting properties at all (see also Value).0x000D0x000A0x000D0x000A2b) This instance is a PExact<EnumType> which only accepts keys of a specific -PropertyKeyEnum (like the Banana-class in ARCDoc only accepting keys from BananaP).0x000D0x000A0x000D0x000A2c) TODO: Not implemented. The key is not in a pre-defined collection of keys that this instance accepts (Note: By default, classes like PRich accepts any key).
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef, System.String ByRef)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef, System.String ByRef)/MethodName = TryGetV
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef, System.String ByRef)/MethodSignature = Boolean TryGetV0x005BT0x005D(T ByRef, System.String ByRef)
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef, System.String ByRef)/Description = The actual 'unpacking' of the object.0x000D0x000A0x000D0x000A(corresponds to PackObjectForStorageInEntityObject.
Assembly/ARCCore/Class/IP/_Member/DeepCopy/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/DeepCopy/MethodName = DeepCopy
Assembly/ARCCore/Class/IP/_Member/DeepCopy/MethodSignature = ARCCore.IP DeepCopy()
Assembly/ARCCore/Class/IP/_Member/DeepCopy/Description = Creates a deep copy of this object instance, that is, a copdy with all new object instances (except for immutable objects).0x000D0x000AImplementing classes are supposed to use this method recursively for a truly deep copy.0x000D0x000A0x000D0x000ANote that there may be some limitations in the implementing class for how truly deep the copy is. For instance if the actual value (TValue) of PValue<T> is not immutable, then the copy returned will not be a truly deep copy
Assembly/ARCCore/Class/IP/_Member/AddPV/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AddPV/MethodName = AddPV
Assembly/ARCCore/Class/IP/_Member/AddPV/MethodSignature = Void AddPV0x005BT0x005D(ARCCore.IK, T)
Assembly/ARCCore/Class/IP/_Member/AddPV/Description = Adds a property value (as a PValue<T>) for this objectThrows -KeyAlreadyExistsException- when relevant.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/AddP/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AddP/MethodName = AddP
Assembly/ARCCore/Class/IP/_Member/AddP/MethodSignature = Void AddP(ARCCore.IKIP)
Assembly/ARCCore/Class/IP/_Member/AddP/Description = Adds a property for this object.0x000D0x000A0x000D0x000AThrows -KeyAlreadyExistsException- when relevant.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP0x005BTKey0x005D(TKey, ARCCore.IP)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP0x005BTKey0x005D(TKey, ARCCore.IP)/MethodName = AddOrUpdateP
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP0x005BTKey0x005D(TKey, ARCCore.IP)/MethodSignature = Void AddOrUpdateP0x005BTKey0x005D(TKey, ARCCore.IP)
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP0x005BTKey0x005D(TKey, ARCCore.IP)/Description = Duplicates functionality of SetP (offered in order to look similar to for instance ConcurrentDictionary)
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP(ARCCore.IK, ARCCore.IP)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP(ARCCore.IK, ARCCore.IP)/MethodName = AddOrUpdateP
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP(ARCCore.IK, ARCCore.IP)/MethodSignature = Void AddOrUpdateP(ARCCore.IK, ARCCore.IP)
Assembly/ARCCore/Class/IP/_Member/Void AddOrUpdateP(ARCCore.IK, ARCCore.IP)/Description = Duplicates functionality of SetP (offered in order to look similar to for instance ConcurrentDictionary)
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, T)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, T)/MethodName = GetOrAddPV
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, T)/MethodSignature = T GetOrAddPV0x005BTKey,T0x005D(TKey, T)
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, T)/Description = Gets value. If not set then value will be added
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, System.Func0x006010x005BT0x005D)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, System.Func0x006010x005BT0x005D)/MethodName = GetOrAddPV
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, System.Func0x006010x005BT0x005D)/MethodSignature = T GetOrAddPV0x005BTKey,T0x005D(TKey, System.Func0x006010x005BT0x005D)
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BTKey,T0x005D(TKey, System.Func0x006010x005BT0x005D)/Description = Gets value. If not set then value will be added
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, T)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, T)/MethodName = GetOrAddPV
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, T)/MethodSignature = T GetOrAddPV0x005BT0x005D(ARCCore.IK, T)
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, T)/Description = Gets value. If not set then value will be added
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, System.Func0x006010x005BT0x005D)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, System.Func0x006010x005BT0x005D)/MethodName = GetOrAddPV
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, System.Func0x006010x005BT0x005D)/MethodSignature = T GetOrAddPV0x005BT0x005D(ARCCore.IK, System.Func0x006010x005BT0x005D)
Assembly/ARCCore/Class/IP/_Member/T GetOrAddPV0x005BT0x005D(ARCCore.IK, System.Func0x006010x005BT0x005D)/Description = Gets value. If not set then value will be added
Assembly/ARCCore/Class/IP/_Member/GetP/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/GetP/MethodName = GetP
Assembly/ARCCore/Class/IP/_Member/GetP/MethodSignature = ARCCore.IP GetP(ARCCore.IK)
Assembly/ARCCore/Class/IP/_Member/GetP/Description = Gets a single property for this object.0x000D0x000ANote that not relevant for single-value properties like PValue<T>.0x000D0x000AThrows exception if property not found.0x000D0x000ATODO: Consider looking for a DefaultValue before throwing an exceptions.0x000D0x000ATODO: (as of Apr 2020 system depends on AssertIntegrity having being called in order to set default values).
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef)/MethodName = TryGetP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef)/MethodSignature = Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef)
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetP(ARCCore.IK, ARCCore.IP ByRef)/Description = Note that not relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/TValue GetPV0x005BTKey,TValue0x005D(TKey, TValue)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/TValue GetPV0x005BTKey,TValue0x005D(TKey, TValue)/MethodName = GetPV
Assembly/ARCCore/Class/IP/_Member/TValue GetPV0x005BTKey,TValue0x005D(TKey, TValue)/MethodSignature = TValue GetPV0x005BTKey,TValue0x005D(TKey, TValue)
Assembly/ARCCore/Class/IP/_Member/TValue GetPV0x005BTKey,TValue0x005D(TKey, TValue)/Description = Gets a single property's value for this object. Returns default value if not successful.0x000D0x000ANote that default value returned is the actual parameter to this method, not any DefaultValue.0x000D0x000A0x000D0x000ANote that not relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/T GetPV0x005BT0x005D(System.Object)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/T GetPV0x005BT0x005D(System.Object)/MethodName = GetPV
Assembly/ARCCore/Class/IP/_Member/T GetPV0x005BT0x005D(System.Object)/MethodSignature = T GetPV0x005BT0x005D(System.Object)
Assembly/ARCCore/Class/IP/_Member/T GetPV0x005BT0x005D(System.Object)/Description = Gets a single property's value for this object.0x000D0x000A0x000D0x000ANote that not relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/TryGetPV/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/TryGetPV/MethodName = TryGetPV
Assembly/ARCCore/Class/IP/_Member/TryGetPV/MethodSignature = Boolean TryGetPV0x005BT0x005D(System.Object, T ByRef, System.String ByRef)
Assembly/ARCCore/Class/IP/_Member/TryGetPV/Description = Gets a single property's value for the given property key.0x000D0x000A0x000D0x000ANote that not relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef)/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef)/MethodName = TryGetV
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef)/MethodSignature = Boolean TryGetV0x005BT0x005D(T ByRef)
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef)/Description = The actual value of the property. Mostly relevant for single-value properties like PValue<T>.
Assembly/ARCCore/Class/IP/_Member/Boolean TryGetV0x005BT0x005D(T ByRef)/LongDescription = Note how the implementing method should be flexible when type-parameter T does not match the actual type stored.0x000D0x000AAsking for a string value should always be possible for intance.0x000D0x000AIf it has to give up a good explanation should be given in the errorResponse out-parameter
Assembly/ARCCore/Class/IP/_Member/EnumeratorReturnsEmptyCollection/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/EnumeratorReturnsEmptyCollection/MethodName = EnumeratorReturnsEmptyCollection
Assembly/ARCCore/Class/IP/_Member/EnumeratorReturnsEmptyCollection/MethodSignature = Boolean EnumeratorReturnsEmptyCollection
Assembly/ARCCore/Class/IP/_Member/EnumeratorReturnsEmptyCollection/Description = Hint for how to avoid calling enumerator.Count() when all you need is to decide if collection is empty or not.0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/IsValid/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/IsValid/MethodName = IsValid
Assembly/ARCCore/Class/IP/_Member/IsValid/MethodSignature = Boolean IsValid
Assembly/ARCCore/Class/IP/_Member/IsValid/Description = Note that by default all properties are 'valid' but because of NoRealDeletion, we must have a mechanism for invalidating properties. This property returns FALSE if property has been invalidated and timestamp for invalidation is not '0001-01-01'.
Assembly/ARCCore/Class/IP/_Member/IsValid/LongDescription = See also Invalid
Assembly/ARCCore/Class/IP/_Member/Item/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Item/MethodName = Item
Assembly/ARCCore/Class/IP/_Member/Item/MethodSignature = ARCCore.IP Item 0x005BSystem.String0x005D
Assembly/ARCCore/Class/IP/_Member/Item/Description = Offers string-based direct indexing.0x000D0x000A0x000D0x000AEnables you to query more 'direct' like for instance 'DataStorage0x005B"Customer"0x005D0x005B"42"0x005D0x005B"FirstName"0x005D'.0x000D0x000A0x000D0x000AThis is especially useful in debugging situations.0x000D0x000A(except that for the unfortunate situation as of May 2020 that you often get the 'The debugger is unable to evaluate this expression' message when actually trying to use this in a debugging scenario).
Assembly/ARCCore/Class/IP/_Member/Keys/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Keys/MethodName = Keys
Assembly/ARCCore/Class/IP/_Member/Keys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D Keys
Assembly/ARCCore/Class/IP/_Member/Keys/Description = Returns all the keys for this instance.
Assembly/ARCCore/Class/IP/_Member/Values/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/Values/MethodName = Values
Assembly/ARCCore/Class/IP/_Member/Values/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.IP0x005D Values
Assembly/ARCCore/Class/IP/_Member/Values/Description = Returns all the values (all the properties) for this instance.
Assembly/ARCCore/Class/IP/_Member/LogContext/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/LogContext/MethodName = LogContext
Assembly/ARCCore/Class/IP/_Member/LogContext/MethodSignature = System.Nullable0x006010x005BSystem.ValueTuple0x006020x005BSystem.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D,System.Action0x006010x005BSystem.String0x005D0x005D0x005D LogContext
Assembly/ARCCore/Class/IP/_Member/LogContext/Description = Describes how 'logging' of calls to -SetP- should be done.0x000D0x000AIf not set, then logging will not be done.0x000D0x000ANote that this is a special property not used by most implementations of IP.0x000D0x000AIt is relevant for ExposingApplicationState to the property stream.0x000D0x000A0x000D0x000ANote that when set, parameter writeToConsole in calls to Log will be ignored (because it is assumed that the data will be written eventually through the logger-mechanism anyway).0x000D0x000A0x000D0x000ANote how the default interface property is just a dummy property. (it is present in order to enable writing to console with the log context at call to Log).0x000D0x000AAs of Apr 2020 the only class actual supporting LogContext is PConcurrent.0x000D0x000A0x000D0x000ASee also log.
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypes/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypes/MethodName = AllIPDerivedTypes
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypes/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Type0x005D AllIPDerivedTypes
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypes/Description = All relevant IP-derived types for the whole application.0x000D0x000A0x000D0x000ANote how IP is NOT included in this collection. The same goes for generic and abstract types.0x000D0x000ATODO: Ascertain reason for why that is so.0x000D0x000ATODO. Define more clearly purpose of this method.0x000D0x000A0x000D0x000ATODO: Probably this method is not in use as of May 2020.0x000D0x000A0x000D0x000ASee also AllIPDerivedTypesInludingGenericAndAbstract.0x000D0x000A0x000D0x000AProbable faster methods to call are one of0x000D0x000AAllIPDerivedTypesDict or0x000D0x000AAllIPDerivedTypesDictIKType.
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesInludingGenericAndAbstract/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesInludingGenericAndAbstract/MethodName = AllIPDerivedTypesInludingGenericAndAbstract
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesInludingGenericAndAbstract/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Type0x005D AllIPDerivedTypesInludingGenericAndAbstract
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesInludingGenericAndAbstract/Description = All relevant IP-derived types (except the interface IP itself) known to the application.0x000D0x000A0x000D0x000AHACK: Hack because AllIPDerivedTypes is too restrictive.
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDict/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDict/MethodName = AllIPDerivedTypesDict
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDict/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Type0x005D AllIPDerivedTypesDict
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDict/Description = Offers for lookup of a type given its string representation.0x000D0x000A0x000D0x000AKeys are all the following possible string representations of type:0x000D0x000AToStringVeryShort0x000D0x000AToStringShort0x000D0x000AToStringDB0x000D0x000AToString0x000D0x000A
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDictIKType/ReflectedType = ARCCore.IP
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDictIKType/MethodName = AllIPDerivedTypesDictIKType
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDictIKType/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,ARCCore.IKType0x005D AllIPDerivedTypesDictIKType
Assembly/ARCCore/Class/IP/_Member/AllIPDerivedTypesDictIKType/Description = Same as AllIPDerivedTypesDict except that value is IKType, not string.0x000D0x000A(saves the calling method from construction an IKType from the type returned.)
Assembly/ARCCore/Class/P/AssemblyName = ARCCore
Assembly/ARCCore/Class/P/ClassType = ARCCore.P
Assembly/ARCCore/Class/P/BaseTypes = ARCCore.PRich
Assembly/ARCCore/Class/P/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/P/CorrespondingEnumType = ARCCore.PP
Assembly/ARCCore/Class/P/Description = 'Dummy'-class, not necessarily in use. See PP for more information. Created because of the concept of CorrespondingClass which is strictly enforced
Assembly/ARCCore/Class/P/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/P/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/P/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/P/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCCore/Class/P/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCCore/Class/P/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/P/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/P/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/ICreated/AssemblyName = ARCCore
Assembly/ARCCore/Class/ICreated/ClassType = ARCCore.ICreated
Assembly/ARCCore/Class/ICreated/Description = Dummy interface signifying that implementing class has the ability to store metadata Created0x000D0x000A0x000D0x000ATryStore will always store -CurrentTimestamp- as Created when it created classes implementing this interface.
Assembly/ARCCore/Class/PConcurrent/AssemblyName = ARCCore
Assembly/ARCCore/Class/PConcurrent/ClassType = ARCCore.PConcurrent
Assembly/ARCCore/Class/PConcurrent/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PConcurrent/CorrespondingEnumType = ARCCore.PConcurrentP
Assembly/ARCCore/Class/PConcurrent/Description = A (somewhat) thread-safe alternative to PRich which also supports log.0x000D0x000A0x000D0x000ANote that thread-safety is only guaranteed for writing / reading key and value pairs directly stored within this class, not for writing / reading to objects further down in the hierarchical storage.0x000D0x000A0x000D0x000AUse this base class when you want to ExposingApplicationState throughout the PropertyStream.0x000D0x000A(in other words, use this class as a base class for all parts of your application that do some kind of processing.)0x000D0x000A0x000D0x000ABy setting the LogContext, every call to TrySetP will be logged.0x000D0x000A0x000D0x000AIn addition the metods Log and HandleException get more meaningful, as they will actually distribute the information somewhere, not just hide it withing the object.0x000D0x000A0x000D0x000AThe practical consequence of this is that you do not have to write log-code like this:0x000D0x000A var c = new Connection()0x000D0x000A c.Id="My connection"0x000D0x000A log("Created new connection with id " + c.Id)0x000D0x000A0x000D0x000ASee also ExposingApplicationState.0x000D0x000ANote that more memory-hungry due to use of ConcurrentDictionary
Assembly/ARCCore/Class/PConcurrent/LongDescription = Note that this class is normally meaningless to use as base-class for data-objects like 'Customer', 'Order' or similar, because they are by their nature meant to be distributed over the PropertyStream anyway, so changes to them will 'automatically' be logged (that is, sent to the PropertyStream).0x000D0x000A0x000D0x000ASome inheriting classes in ARCCore are StreamProcessor and ActualConnection.
Assembly/ARCCore/Class/PConcurrent/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCCore/Class/PConcurrent/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PConcurrent/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PConcurrent/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/AssemblyName = ARCCore
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/ClassType = ARCCore.PExact0x006010x005BEnumType0x005D
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/Description = Very MemoryConsumption efficient alternative to PRich.0x000D0x000A0x000D0x000AHas some limitations in the sense that you can only store an exact number of properties (assumed to come from one specific PropertyKeyEnum), and only use PK as key.0x000D0x000A0x000D0x000AValues are stored 'directly', that is, without packing inside a PValue<T>. (in other words, values are unpacked as they are received (by call to -GetV-), and packed again (by PackObjectForStorageInEntityObject) before being sent.0x000D0x000AIf PValueEmpty is received from outside, it is treated as 'not-existing' (stored internally as null)0x000D0x000A0x000D0x000AUse this class as basis for your 'entity' classes when you know exact what you want to store in them and when you do not need to store any meta-data like Cid, Created.0x000D0x000A0x000D0x000AThe only overhead of this class compared to a 'traditional' C# class (with ordinary properties) should be the overhead for Storage array (24 extra bytes).0x000D0x000A0x000D0x000ASee also MemoryConsumption.0x000D0x000A
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/LongDescription = See ARCDoc for example use (Orange class)0x000D0x000A0x000D0x000ASome examples of advantages of this class compared to -PRich:0x000D0x000A0x000D0x000AExample 1: A small sample of about 832 000 PropertyStreamLine with data for about 16 000 customers (three properties, first name, last name and email) and 43 000 payments (about 21 properties each).0x000D0x000A42% reduction in RAM usage and a 16% reduction in CPU time for initial reading of all data into memory.0x000D0x000ADataset occupied 43 MB on disk and 59 MB in RAM.0x000D0x000A0x000D0x000ANOTE: Metadata like Cid and Created is only 0x000D0x000ANOTE: allowed as long as corresponding enum-members for the specific generic type parameter EnumType exists.
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/.ctor/ReflectedType = ARCCore.PExact0x006010x005BEnumType0x005D
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/.ctor/MethodName = .ctor
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/.ctor/MethodSignature = Void .ctor(System.Nullable0x006010x005BSystem.Int320x005D)
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/.ctor/Description = Set capacity to the number of enum values (minus the None-value) in your PropertyKeyEnum
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/Storage/ReflectedType = ARCCore.PExact0x006010x005BEnumType0x005D
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/Storage/MethodName = Storage
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/Storage/MethodSignature = System.Object0x005B0x005D Storage
Assembly/ARCCore/Class/PExact0x003CEnumType0x003E/_Member/Storage/Description = Uses int-value of __enum minus 1 as index.0x000D0x000AUse from outside with care.
Assembly/ARCCore/Class/PII/AssemblyName = ARCCore
Assembly/ARCCore/Class/PII/ClassType = ARCCore.PII
Assembly/ARCCore/Class/PII/BaseTypes = ARCCore.PRich
Assembly/ARCCore/Class/PII/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable0x003BARCCore.IPII
Assembly/ARCCore/Class/PII/Description = PII = property for storing individual items.0x000D0x000A0x000D0x000AAttempt at solving IndividualItems storage.0x000D0x000A0x000D0x000AEach item is stored as a key in the properties dictionary (with value as PValueEmpty).0x000D0x000A0x000D0x000ANote that using only a HashSet would be more efficient memory-wise, but then we would loose a future ability to store metadata for each key.
Assembly/ARCCore/Class/PII/_Member/TryGetV/ReflectedType = ARCCore.PII
Assembly/ARCCore/Class/PII/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/PII/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/PII/_Member/TryGetV/Description = Since value is stored in keys, we need to override this method.0x000D0x000ANote that 'outside' must be aware of how to properly store a value (using IIKII).0x000D0x000A(like TryStore.)
Assembly/ARCCore/Class/PII/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCCore/Class/PII/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PII/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PII/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/IPII/AssemblyName = ARCCore
Assembly/ARCCore/Class/IPII/ClassType = ARCCore.IPII
Assembly/ARCCore/Class/IPII/Description = Future expansion, using different classes for storing, not only PII.
Assembly/ARCCore/Class/IIKII/AssemblyName = ARCCore
Assembly/ARCCore/Class/IIKII/ClassType = ARCCore.IIKII
Assembly/ARCCore/Class/IIKII/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber
Assembly/ARCCore/Class/IIKII/_Member/PackParseResultForStorageInIKII/ReflectedType = ARCCore.IIKII
Assembly/ARCCore/Class/IIKII/_Member/PackParseResultForStorageInIKII/MethodName = PackParseResultForStorageInIKII
Assembly/ARCCore/Class/IIKII/_Member/PackParseResultForStorageInIKII/MethodSignature = ARCCore.IIKII PackParseResultForStorageInIKII(ARCCore.ParseResult)
Assembly/ARCCore/Class/IIKII/_Member/PackParseResultForStorageInIKII/Description = This method corresponds to PackParseResultForStorageInEntityObject.
Assembly/ARCCore/Class/IIKII/_Member/PackObjectForStorageInIKII/ReflectedType = ARCCore.IIKII
Assembly/ARCCore/Class/IIKII/_Member/PackObjectForStorageInIKII/MethodName = PackObjectForStorageInIKII
Assembly/ARCCore/Class/IIKII/_Member/PackObjectForStorageInIKII/MethodSignature = ARCCore.IIKII PackObjectForStorageInIKII(System.Object)
Assembly/ARCCore/Class/IIKII/_Member/PackObjectForStorageInIKII/Description = This method corresponds to PackObjectForStorageInEntityObject.
Assembly/ARCCore/Class/PRich/AssemblyName = ARCCore
Assembly/ARCCore/Class/PRich/ClassType = ARCCore.PRich
Assembly/ARCCore/Class/PRich/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PRich/Description = Fully flexible storage. Can store anything. Typical inherited for entity representations like 'Customer' or 'Order'.0x000D0x000A0x000D0x000APRich = rich property. Rich in the sense that it can store a wide amount of information.0x000D0x000A0x000D0x000ACan also function as a 'root' storage for all data.0x000D0x000A0x000D0x000AInherently not thread-safe due to using Dictionary and not ConcurrentDictionary as storage.0x000D0x000ASee tips about locking in documentation for OutsideLocalReceiver and some practical code in ARCDoc0x000D0x000A0x000D0x000ASee PConcurrent for a (somewhat more) thread-safe alternative.0x000D0x000ASee PExact<EnumType> for a more memory efficient alternative.0x000D0x000A0x000D0x000AA more expensive (memory-wise) 'property'-object to use compared to PValue<T>.0x000D0x000A0x000D0x000AProbably suitable when you want full flexibility about which metadata to store (see PP) and / or want to store child properties.0x000D0x000AMost probably the one to use for 'ordinary' entities like 'Customer', 'Product' and so on, whereas PValue<T> is often used for single values for these instances (like 'FirstName', 'Price' and so on).0x000D0x000A0x000D0x000AAn instance of this class can also be used as the single total in-memory data storage in your application.0x000D0x000AA typical representation would then consist of dictionaries inside dictionaries, with IK-keys and either PRich-values or specific IP-subclass instances (like 'Customer') values inside those again.0x000D0x000ASuch a usage would be very typical for a Client but also possible for ArmDB (enabling it to answer AdHocQuery over an TCP/IP connection.0x000D0x000AWith such a usage the instance of this class would typically populated by calling -ParseAndStore-.0x000D0x000A0x000D0x000A
Assembly/ARCCore/Class/PRich/LongDescription = Note that in a 'StandardAgoRapideCode-only application' IKString (or IKType but generated from FromString) will be used more as key, and PRich more used as values (instead of more specific IP-subclass instances (like 'Customer')), because the actual types and property keys are not known.0x000D0x000AAlthough their names may be known because they can be announced over the property stream, the definition for those types are unknown (the types are not present in the assemblies constituting the application).0x000D0x000A0x000D0x000AThis means that for instance an ArmDB application may not be able to validate all data, or answer the most complex queries (because it lacks the type information and has to operate more on strings).0x000D0x000A0x000D0x000ATODO: Implement storing of this collection to disk at regular intervals.0x000D0x000ATOOD: Background: If data are received from StreamProcessor through OutsideLocalReceiver0x000D0x000ATOOD: (and read by StreamProcessor at application startup), then un-needed historical data will accumulate0x000D0x000ATODO: (for instance if this object stores only the last temperature, but all temperatures are stored to disk).0x000D0x000ATODO: Solution: Replace disk storage at regular intervals by serializing this object's data to disk with ToPropertyStream.0x000D0x000A
Assembly/ARCCore/Class/PRich/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/PRich/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/PRich/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/PRich/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCCore/Class/PRich/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCCore/Class/PRich/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PRich/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PRich/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/PValue0x003CT0x003E/AssemblyName = ARCCore
Assembly/ARCCore/Class/PValue0x003CT0x003E/ClassType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PValue0x003CT0x003E/Description = Single value storage.0x000D0x000A0x000D0x000AThe most memory-efficient 'property'-object to use, when only the actual value of a property is needed.0x000D0x000A(unable to store any sub-properties or metadata).0x000D0x000A0x000D0x000AImmutable (assuming generic type is also immutable).0x000D0x000A0x000D0x000ATypically used for storing properties like 'Customer.FirstName', 'Product.Price' and so on.0x000D0x000A0x000D0x000AWhen metadata is desired, a more complicated approach is used. See Value for a more detailed explanation about this0x000D0x000AUsing this class should give an overhead per object of 24 bytes (16 for object header, 8 for Value), in addition to the space needed for the actual object (of type T) stored. Note, when calculating space needed for the actual object (of type T) you must remember to include boxing-overhead for value types.0x000D0x000A0x000D0x000ATODO: Consider creating a PValueVal-class for storing value types. This should get rid of boxing...?0x000D0x000ATODO: (However, no practical use-case has been seen as of Jul 2020 because of PExact<EnumType> TODO: which stores objects directly within an Object0x005B0x005D, that is, not using PValue<T> at all.)0x000D0x000A0x000D0x000ASee also MemoryConsumption.
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/TryGetV/ReflectedType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/TryGetV/Description = Attempts to convert value as far as possible, including casting double to int or long, upgrading int or long to double, or int to long, and converting string to DateTime, TimeSpan and enum.0x000D0x000A0x000D0x000ATODO: Make also able to convert string to ITypeDescriber. (if ITypeDescriber.IsAssignableFrom(TRequest))
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ConvertObjectToString/ReflectedType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ConvertObjectToString/MethodName = ConvertObjectToString
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ConvertObjectToString/MethodSignature = System.String ConvertObjectToString(System.Object)
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ConvertObjectToString/Description = TODO: Add more object types here (or (even better) find a more generic approach to the general issue of converting objects to string in AgoRapide)0x000D0x000ATODO: AND / OR, Implement some kind of format-description in PK in order to decide string-format0x000D0x000ATOOD: (the last idea would require PK as a key here)
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ToString/ReflectedType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/ToString/Description = Do no cache this value, because memory consumption would then increase significantly in your applicationj
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/DeepCopy/ReflectedType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/DeepCopy/MethodName = DeepCopy
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/DeepCopy/MethodSignature = ARCCore.IP DeepCopy()
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/DeepCopy/Description = Note that if the generic type (T) is not immutable, then what we return will not be a truly deep copy
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/.ctor/ReflectedType = ARCCore.PValue0x006010x005BT0x005D
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/.ctor/MethodName = .ctor
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/.ctor/MethodSignature = Void .ctor(T)
Assembly/ARCCore/Class/PValue0x003CT0x003E/_Member/.ctor/Description = Note how this class does not have a parameter-less constructor (unlike all other IP-derived classes in AgoRapide)
Assembly/ARCCore/Class/PValueEmpty/AssemblyName = ARCCore
Assembly/ARCCore/Class/PValueEmpty/ClassType = ARCCore.PValueEmpty
Assembly/ARCCore/Class/PValueEmpty/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/PValueEmpty/Description = Represents the 'no value'.0x000D0x000AImmutable.0x000D0x000ARelevant for -IndividualItems where the values are actual keys (stored as IKString) and we just need a dummy representation where the value would ordinary be placed0x000D0x000A
Assembly/ARCCore/Class/PValueEmpty/_Member/ToPropertyStream/ReflectedType = ARCCore.PValueEmpty
Assembly/ARCCore/Class/PValueEmpty/_Member/ToPropertyStream/MethodName = ToPropertyStream
Assembly/ARCCore/Class/PValueEmpty/_Member/ToPropertyStream/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D ToPropertyStream(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D, System.Collections.Generic.List0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/PValueEmpty/_Member/ToPropertyStream/Description = Typicall return value could be something like0x000D0x000A Customer/42/PhoneNumber/90534333
Assembly/ARCCore/Class/ActualConnection/AssemblyName = ARCCore
Assembly/ARCCore/Class/ActualConnection/ClassType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/BaseTypes = ARCCore.PConcurrent
Assembly/ARCCore/Class/ActualConnection/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/ActualConnection/CorrespondingEnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/Class/ActualConnection/Description = The actual connection, its internal state, queue for sending and so on.0x000D0x000A
Assembly/ARCCore/Class/ActualConnection/LongDescription = TODO: May 2020: The code in this class should be tidied up a bit before any more functionality is added.0x000D0x000A0x000D0x000ANote how this class inherits PConcurrent which offers thread-safe access to properties (and is also able to ExposingApplicationState to outside).
Assembly/ARCCore/Class/ActualConnection/_Member/SetMyUpdatePositionGenerator/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/SetMyUpdatePositionGenerator/MethodName = SetMyUpdatePositionGenerator
Assembly/ARCCore/Class/ActualConnection/_Member/SetMyUpdatePositionGenerator/MethodSignature = Void SetMyUpdatePositionGenerator(System.Func0x006010x005BARCCore.ClientUpdatePosition0x005D)
Assembly/ARCCore/Class/ActualConnection/_Member/SetMyUpdatePositionGenerator/Description = Set by StreamProcessor.0x000D0x000ANot relevant for -Incoming-.
Assembly/ARCCore/Class/ActualConnection/_Member/SetSinglePropertyStreamReceiver/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/SetSinglePropertyStreamReceiver/MethodName = SetSinglePropertyStreamReceiver
Assembly/ARCCore/Class/ActualConnection/_Member/SetSinglePropertyStreamReceiver/MethodSignature = Void SetSinglePropertyStreamReceiver(System.Action0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/ActualConnection/_Member/SetSinglePropertyStreamReceiver/Description = Set by StreamProcessor.0x000D0x000ARelevant for both -Incoming- and -Outgoing-.
Assembly/ARCCore/Class/ActualConnection/_Member/SetUpToDatePositionGenerator/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/SetUpToDatePositionGenerator/MethodName = SetUpToDatePositionGenerator
Assembly/ARCCore/Class/ActualConnection/_Member/SetUpToDatePositionGenerator/MethodSignature = Void SetUpToDatePositionGenerator(System.Func0x006010x005BARCCore.ClientUpdatePosition0x005D)
Assembly/ARCCore/Class/ActualConnection/_Member/SetUpToDatePositionGenerator/Description = Set by StreamProcessor. Not used by Client.0x000D0x000ANot relevant for -Outgoing-.0x000D0x000AWill generate the up-to-date position for the property stream.0x000D0x000A0x000D0x000ANecessary in order for the server to turn OnlyNewDataIsRequested into correct position as soon as it is receive by client (it would for instance be too late if StreamProcessor tried to do it by itself when updating clients, because new data may have been received in the meantime, meaning position would have been set 'too-far' into the property stream).
Assembly/ARCCore/Class/ActualConnection/_Member/InitializeOutgoingConnection/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/InitializeOutgoingConnection/MethodName = InitializeOutgoingConnection
Assembly/ARCCore/Class/ActualConnection/_Member/InitializeOutgoingConnection/MethodSignature = Void InitializeOutgoingConnection()
Assembly/ARCCore/Class/ActualConnection/_Member/InitializeOutgoingConnection/Description = Relevant for -Outgoing-.
Assembly/ARCCore/Class/ActualConnection/_Member/Communicate/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/Communicate/MethodName = Communicate
Assembly/ARCCore/Class/ActualConnection/_Member/Communicate/MethodSignature = System.Threading.Tasks.Task Communicate()
Assembly/ARCCore/Class/ActualConnection/_Member/Communicate/Description = Common for both -Incoming- and -Outgoing-.0x000D0x000AClient must be set.0x000D0x000ASets -Writer- in order for Send to work.
Assembly/ARCCore/Class/ActualConnection/_Member/LogAndSendErrorConditionData/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/LogAndSendErrorConditionData/MethodName = LogAndSendErrorConditionData
Assembly/ARCCore/Class/ActualConnection/_Member/LogAndSendErrorConditionData/MethodSignature = Void LogAndSendErrorConditionData(ARCCore.IP, System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D, System.Collections.Generic.IEnumerable0x006010x005BSystem.ValueTuple0x006020x005BSystem.String,System.String0x005D0x005D, System.String)
Assembly/ARCCore/Class/ActualConnection/_Member/LogAndSendErrorConditionData/Description = Called when a serious error condition has been discovered and connection should be terminated.0x000D0x000APerforms the following functions:0x000D0x000A1) Logs locally (and writes to console).0x000D0x000A2) Informs client over TCP/IP connection about IsErrorCondition by sending several PropertyStreamLine.0x000D0x000A3) Marks connection with IsErrorCondition.
Assembly/ARCCore/Class/ActualConnection/_Member/Send/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/Send/MethodName = Send
Assembly/ARCCore/Class/ActualConnection/_Member/Send/MethodSignature = Void Send(System.String)
Assembly/ARCCore/Class/ActualConnection/_Member/Send/Description = Sends all messages in queue.0x000D0x000A1) Adds the given message to the queue and 0x000D0x000A2) Empties the queue asynchronously.0x000D0x000AEmptying is done by ensuring that there is a thead running that continously send messages until the queue is empty (not how this thread exists as soon as the queue is empty)0x000D0x000ATODO: If we are -Outgoing-, queue messages to disk also if many elements in queue.TODO: At application startup, put those messages into the queue again, before accepting new messages.TODO: This should all be managed autonomusly within this class.
Assembly/ARCCore/Class/ActualConnection/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCCore/Class/ActualConnection/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/ActualConnection/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/ActualConnection/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/ActualConnection/_Member/.ctor/ReflectedType = ARCCore.ActualConnection
Assembly/ARCCore/Class/ActualConnection/_Member/.ctor/MethodName = .ctor
Assembly/ARCCore/Class/ActualConnection/_Member/.ctor/MethodSignature = Void .ctor()
Assembly/ARCCore/Class/ActualConnection/_Member/.ctor/Description = Note parameter-less constructor as desired for all classes inheriting IP.
Assembly/ARCCore/Class/MonkeyWrench/AssemblyName = ARCCore
Assembly/ARCCore/Class/MonkeyWrench/ClassType = ARCCore.MonkeyWrench
Assembly/ARCCore/Class/MonkeyWrench/Interfaces = ARCCore.ITypeDescriber
Assembly/ARCCore/Class/MonkeyWrench/Description = Describes level of 'spanner-throwing' this connection shall contibute with
Assembly/ARCCore/Class/MonkeyWrench/LongDescription = Not implemented as of Mar 2020. The idea is to test the faul-tolerance of a multiple node setup by having the nodes deliberately acting weird.0x000D0x000AFor instance by refusing to accept messages, spurious timeouts, abruptly closing connections and so on.
Assembly/ARCCore/Class/ClientUpdatePosition/AssemblyName = ARCCore
Assembly/ARCCore/Class/ClientUpdatePosition/ClassType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.ClientUpdatePosition0xoooo005D
Assembly/ARCCore/Class/ClientUpdatePosition/Description = Describes from WHERE (from WHEN) in the historic PropertyStream new data is to be returned.0x000D0x000A(or actually, it describes up to which point in time client already has updated data).0x000D0x000A0x000D0x000ACommunicated between client and server as follows:0x000D0x000A0x000D0x000A1) At initialization of ActualConnection:0x000D0x000ASent by client to server in order to inform the server about the client's update status.0x000D0x000A0x000D0x000A2) For every new PropertyStreamLine sent from server to client:0x000D0x000ASent by server to client. Done by prepending to the PropertyStreamLine being sent, with '::' (double colon) as a separator.0x000D0x000AExplains from where in the PropertyStream this line originated.0x000D0x000AThe server also keeps track of the last value sent to the client as long as the ActualConnection is active.0x000D0x000A0x000D0x000AUsed in connection with Subscription which describes WHAT data is required from the PropertyStream.0x000D0x000ATODO: Clarify difference between ClientUpdatePosition and FromTime / ToTime.0x000D0x000A0x000D0x000ATODO: Build revision number into this? (DataRetention or keep in filename?0x000D0x000A0x000D0x000ATODO: Ensure that the format being used suits the encoding mechanism well (see EncodeValuePartStringToPropertyStreamFormat) (no special encoding should be necessary as want a human readable format also after encoding)0x000D0x000A0x000D0x000ADescribes status of a client's up-to-date level.0x000D0x000ANote that client in this case not only means Client but any ARNodeType.0x000D0x000Ar0x000AExamples:0x000D0x000A0x000D0x000A1) 'ClientDatastoreIsEmpty' (see ClientDatastoreIsEmpty).0x000D0x000A0x000D0x000A2) 'OnlyNewDataIsRequested' (see OnlyNewDataIsRequested).0x000D0x000A0x000D0x000A3) 'GoBack|1000' (see IsGoBack) means start from 1000 elements back.0x000D0x000A0x000D0x000A4) 'StorageFile0042|42042': The common scenario. Last update was index 42042 in 'StorageFile0042', next update should be at least 42043 (or index 0 in next file)0x000D0x000A0x000D0x000AAn 'IsEndOfStream' marker may be added, like this:0x000D0x000A'StorageFile0068|42042042|IsEndOfStream' (see IsAtEndOfStream).
Assembly/ARCCore/Class/ClientUpdatePosition/LongDescription = This class is immutable.0x000D0x000A0x000D0x000ATODO: Note how we assume that if we have multiple outgoing connections, that is, if we0x000D0x000ATODO: have multiple CoreDB's to choose from, they are all compatible regarding clientUpdateStatus.0x000D0x000ATODO: This would probably not be the case with how clientUpdateStatus is built up today0x000D0x000ATODO: (Apr 2020) with filename + index.0x000D0x000ATODO: Consider adding timestamp, actual property line or similar, in order for different CoreDB instances to more TODO: accurately decide from where to 'pick-up' from when receiving a new incoming connection with a subscription request.TODO: OR, alternatively, ensure that CoreDB instances coordinate among themselves so that they always have the exact same TODO. storage-layout (having a master instance at any given time for instance).0x000D0x000A0x000D0x000ATODO: If we add timestamp, it can then be up to the client to keep track of it, by 'listening' to Timestamps / 'Heartbeats' inserted in the TODO: property stream. The client can then transmit it to the server, as a backup, in case the ordinary filename + index TODO: information makes no sense. Using only Timestamp would of course lead to some overlap (duplicate property stream lines being sent), TOOD: since it is probably quite coarse.0x000D0x000ATODO: Other ideas for keeping clients correctly in sync:0x000D0x000ATODO: Server can inject the current position at regular intervals in the property stream. This serves the same purpose as injecting a TODO: Timestamp / 'Heartbeat' but the position becomes exact instead of approximate. When the client understands that there is someTODO: corruption present, it can look for the last such value, delete stored data after that position, and update from server from this TODO: exact known position. (actually the client can inject the position itself, since it receives the position with any value sent)
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Filename/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Filename/MethodName = Filename
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Filename/MethodSignature = System.String Filename
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Filename/Description = Filename like '2020-04-03 08:42:22_R001'
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Index/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Index/MethodName = Index
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Index/MethodSignature = Int32 Index
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Index/Description = Index (zero-based) into file. Value of -1 means blank update status / no data received at all (or no data received for this specific filename)
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/Index/LongDescription = 32 bit because List0x003Cstring0x003E which is used for storage do not support 64 bit indexing anyway
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmpty/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmpty/MethodName = ClientDatastoreIsEmpty
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmpty/MethodSignature = Boolean ClientDatastoreIsEmpty
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmpty/Description = Used by the subscribing client to signify that it has no data stored locally, and it therefore needs an update from the beginning of the PropertyStream, that is, 'from the beginning of time'.0x000D0x000A0x000D0x000ASee also ClientDatastoreIsEmptyInstance.
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequested/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequested/MethodName = OnlyNewDataIsRequested
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequested/MethodSignature = Boolean OnlyNewDataIsRequested
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequested/Description = Used by the subscribing client to signify that it does not care about historical data, the server may start with sending only new data.0x000D0x000A0x000D0x000ANote that this indication is only approximate because data gets continously added to the PropertyStream.0x000D0x000A0x000D0x000ANote how Communicate immediately replaces this value with the actual up-to-date position (instead of waiting for StreamProcessor to decide from where to start sending data, because then some new data may be lost. An example when this is relevant is starting a client log-console in order to monitor some action, send OnlyNewDataIsRequested to server, and then immediately start the action. One would then not risk loosing a few tenths of seconds of PropertyStream data only because it takes some time for StreamProcessor to start processing the client request)0x000D0x000A0x000D0x000ASee also OnlyNewDataIsRequestedInstance.
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsGoBack/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsGoBack/MethodName = IsGoBack
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsGoBack/MethodSignature = Boolean IsGoBack
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsGoBack/Description = Has to be translated by -StreamProcessor into a concrete filename / index.0x000D0x000AUseful when subscribing client wants (in general) new log-data, but also data for the last few minutes, for instance when you see a special situation and want to look into the latest log data.0x000D0x000ATODO: 'GoBack' is not implemented as of May 2020.0x000D0x000ATODO: Implement GoBack also as relative time, like 'minus 30 seconds' or absolute time like 'from 08:52'0x000D0x000ATODO: Consider also necessity for Subscription.StartAt / EndAt, which are similar concepts
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsAtEndOfStream/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsAtEndOfStream/MethodName = IsAtEndOfStream
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsAtEndOfStream/MethodSignature = Boolean IsAtEndOfStream
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/IsAtEndOfStream/Description = Necessary in order to implement AdHocQuery. 0x000D0x000AOnly sent by server to client. Signals to the client that it has now received all data available (for the time being, of course).0x000D0x000AUsed by subscribing client in order decide when an AdHocQuery query is complete.0x000D0x000AUsually ignored by client for continous on-going Subscription.0x000D0x000A0x000D0x000ANOTE: Not implemented as of May 2020.0x000D0x000A0x000D0x000ANote that fundamentally different from -OnlyNewDataIsRequested (the latter is communicated from client to server, this flag is communicated from server to client)
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmptyInstance/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmptyInstance/MethodName = ClientDatastoreIsEmptyInstance
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmptyInstance/MethodSignature = ARCCore.ClientUpdatePosition ClientDatastoreIsEmptyInstance
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/ClientDatastoreIsEmptyInstance/Description = See also -ClientDatastoreIsEmpty.
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequestedInstance/ReflectedType = ARCCore.ClientUpdatePosition
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequestedInstance/MethodName = OnlyNewDataIsRequestedInstance
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequestedInstance/MethodSignature = ARCCore.ClientUpdatePosition OnlyNewDataIsRequestedInstance
Assembly/ARCCore/Class/ClientUpdatePosition/_Member/OnlyNewDataIsRequestedInstance/Description = See also -OnlyNewDataIsRequested.
Assembly/ARCCore/Class/ConnectionInstruction/AssemblyName = ARCCore
Assembly/ARCCore/Class/ConnectionInstruction/ClassType = ARCCore.ConnectionInstruction
Assembly/ARCCore/Class/ConnectionInstruction/BaseTypes = ARCCore.PRich
Assembly/ARCCore/Class/ConnectionInstruction/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/ConnectionInstruction/CorrespondingEnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/Class/ConnectionInstruction/Description = The instruction about what connections to make (host, portnr, data transfer direction and so on).0x000D0x000AOnly relevant for -Outgoing-.
Assembly/ARCCore/Class/ConnectionInstruction/_Member/Initialize/ReflectedType = ARCCore.ConnectionInstruction
Assembly/ARCCore/Class/ConnectionInstruction/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/ConnectionInstruction/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/ConnectionInstruction/_Member/Initialize/Description = Initializes to sane values.0x000D0x000A0x000D0x000ANote that idempotent, in other words may be called multiple times without side effects.
Assembly/ARCCore/Class/ConnectionInstruction/_Member/Initialize/LongDescription = Due to the all-singing / all-dancing nature of this class (outgoing / incoming / send / receive) it is helpful if the class can configure itself according to what is supposedly intended (therefore this method).
Assembly/ARCCore/Class/ConnectionInstruction/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/ConnectionInstruction/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/ConnectionInstruction/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/ConnectionInstruction/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionId/ReflectedType = ARCCore.ConnectionInstruction
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionId/MethodName = ConnectionId
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionId/MethodSignature = System.String ConnectionId
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionId/Description = Convenience traditional getter eliminating AgoRapide's somewhat verbose syntax for PropertyAccess.
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionDataTransferDirection/ReflectedType = ARCCore.ConnectionInstruction
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionDataTransferDirection/MethodName = ConnectionDataTransferDirection
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionDataTransferDirection/MethodSignature = ARCCore.DataTransferDirection ConnectionDataTransferDirection
Assembly/ARCCore/Class/ConnectionInstruction/_Member/ConnectionDataTransferDirection/Description = Convenience traditional getter eliminating AgoRapide's somewhat verbose syntax for PropertyAccess.
Assembly/ARCCore/Class/Sharding/AssemblyName = ARCCore
Assembly/ARCCore/Class/Sharding/ClassType = ARCCore.Sharding
Assembly/ARCCore/Class/Sharding/Interfaces = ARCCore.ITypeDescriber
Assembly/ARCCore/Class/Sharding/Description = Enables load-balancing by describing what data should be sent over a given connection.0x000D0x000AIf load-balancing is combined with fault-tolerance (see MultipleConnectionUsage, then multiple connections with the same value for Sharding- are grouped together and considered separately for other groups
Assembly/ARCCore/Class/Sharding/LongDescription = Not implemented as of Mar 2020. The idea is to have some criteria like 'CustomerId % 5 = 3' for instance, for a 5-node setup where load is shared out based on value of customerId.
Assembly/ARCCore/Class/PropertyStreamLine/AssemblyName = ARCCore
Assembly/ARCCore/Class/PropertyStreamLine/ClassType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/Description = Has two main functions:0x000D0x000A0x000D0x000A1) Encodes and decodes single lines in the PropertyStream.0x000D0x000ASee methods like EncodeKeyPartStringToPropertyStreamFormat, EncodeValuePartStringToPropertyStreamFormat and DecodeStringFromPropertyStreamFormat.0x000D0x000A0x000D0x000A2) Stores single lines in the PropertyStream into a data-storage. See TryStore.0x000D0x000A0x000D0x000A3) Parses a collection of PropertyStream lines into a single IP instanse.0x000D0x000ASee methods like TryParseDirectToIP.0x000D0x000A0x000D0x000A4) Parses a single PropertyStream line into a single property.0x000D0x000ASee methods like TryParseDirectToProperty.0x000D0x000A0x000D0x000AA line consists of a key-part, the separator ' = ' (space, equals sign, space) and a value part.0x000D0x000A(the value part may be empty, see PValueEmpty).0x000D0x000A0x000D0x000AExamples are (syntax only approximate as of May 2020):0x000D0x000A'// This is a comment (lines starting with // are to be ignored in any processing0x000D0x000A'dt/Customer/42 (create new Customer object, actually this line is not necessary)0x000D0x000A'dt/Customer/42/Cid = User/43' // (See Cid)0x000D0x000A'dt/Customer/42/FirstName = John'0x000D0x000A'dt/Customer/42/PhoneNumber/+4790534333' (create new PhoneNumber)0x000D0x000A'dt/Customer/42/PhoneNumber/+4790534333:Invalid = 2020-03-12 08:42:11' (Equivalent to 'delete', see -Invalid)0x000D0x000A0x000D0x000A'dt/Order/1968/CustomerId = Customer/42'0x000D0x000A0x000D0x000A'dt/OrderLine/2001/OrderId = Order/1968'0x000D0x000A'dt/OrderLine/2001/ProductId = Product/2003'0x000D0x000A'dt/OrderLine/2001/Quantity = 3'0x000D0x000A0x000D0x000A'dt/Product/2003/Name = Widget3'0x000D0x000A'dt/Product/2003/Colour = Red'0x000D0x000A0x000D0x000ANote that timestamps are normally not needed because the property stream is sequentially organised, and timestamps are inserted automatically (see TimestampResolution).0x000D0x000ASee EncodeKeyPartStringToPropertyStreamFormat and EncodeValuePartStringToPropertyStreamFormat for how data is actually encoded (examples given above are only indicative).0x000D0x000A0x000D0x000ANote that this class is static, that is, no instances if this class are ever created.0x000D0x000AInstead simple strings are used for representing property stream lines for transmission and storage. This is considered to be more efficient (less processing required) and take up less memory (especially for CoreDB).
Assembly/ARCCore/Class/PropertyStreamLine/LongDescription = FAQ: Is the property stream (and AgoRapide in general) strongly or weakly typed?0x000D0x000AThat is up to you.0x000D0x000AFor getting started, and just in order to experiment with some various data, you can start weakly typed, or just use strings everywhere.0x000D0x000AA standard storage like PRich and a generic ARAAPI built on top of that is not dependent on any pre-defined structure, it just accepts whatever is in the property stream.0x000D0x000AIn your C# code you can use multi-level indexing like this: 'DataStorage0x005B"Customer"0x005D0x005B"42"0x005D0x005B"FirstName"0x005D = "John"' without bothering about types at all (or just send the corresponding PropertyStreamLine 'dt/Customer/42/FirstName = John' to TryParse).0x000D0x000AAs your project matures and you see which classes and properties are more important, you can create the corresponding 'entity' classes and their PropertyKeyEnum, and specify more exact types for the properties.0x000D0x000ATaken into account concepts like LinkInsertionInDocumentation this will also constitute documenting your application.0x000D0x000ANote that though you can choose the level of dynamic typing (as shown), static strong typing is always a bit weaker with PropertyAccess. See -AssertTypeIntegrity- and BoilerplateCodeProperties for attempts at alleviating this.0x000D0x000A0x000D0x000AFAQ: How does the property stream format compare to the JSON format?0x000D0x000AA JSON representation of some given data points could be seen as a 'compiled' variant of the same data points stored as property stream lines.0x000D0x000AThis is because the original property stream lines for a given JSON representation may be spread out (not being located close to each other).0x000D0x000ANote however that if the actual property stream lines (for some given data points) reside consequently to each other in the data storage, then JSON would be a much more effective format for representation because it is much less verbose.0x000D0x000ATODO: Insert examples here in order to clarify.0x000D0x000A0x000D0x000ASome notes about compression:0x000D0x000ANote how the format used is somewhat verbose but well suited for on-disk compression.0x000D0x000AIt is for instance inefficient (storage-wise) to repeat the same context line after line.0x000D0x000ABut on the other hand, the underlying OS can easily be instructed to compress the storage files instead (something it should be able to do quite efficiently, leaving the size-issue to mostly constitute a network bandwidth problem.0x000D0x000ANote that some optimizations are performed anyway, see for instance Timestamp which describes how timestamps are not added to each and every property stream line but inserted as needed.0x000D0x000A0x000D0x000A
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D)/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D)/MethodName = EncodeKeys
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D)/MethodSignature = System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IK0x005D)/Description = Encodes the key part of a PropertyStreamLine.0x000D0x000AExample result: Customer/42/FirstName
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)/MethodName = EncodeKeys
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)/MethodSignature = System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/System.String EncodeKeys(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)/Description = Encodes the key part of a PropertyStreamLine.0x000D0x000AExample result: Customer/42/FirstName
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValues/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValues/MethodName = EncodeValues
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValues/MethodSignature = System.String EncodeValues(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValues/Description = Typically used when turning WholeCollection into a value part of a PropertyStreamLine.0x000D0x000AExample: Red0x003BYellow0x003BGreen.0x000D0x000ATODO: Give better example with real need for encoding.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValue/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValue/MethodName = EncodeValue
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValue/MethodSignature = System.String EncodeValue(System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValue/Description = Encodes the single value part of a PropertyStreamLine.0x000D0x000A
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeKeyPartStringToPropertyStreamFormat/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeKeyPartStringToPropertyStreamFormat/MethodName = EncodeKeyPartStringToPropertyStreamFormat
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeKeyPartStringToPropertyStreamFormat/MethodSignature = System.String EncodeKeyPartStringToPropertyStreamFormat(System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeKeyPartStringToPropertyStreamFormat/Description = Converts a single key part of a PropertyStreamLine to a format suitable for sending over a PropertyStream. 0x000D0x000AThe resulting format is supposed to be quite human-readable.0x000D0x000A0x000D0x000AReturns a string containing only characters in AllowedPropertyStreamLineKeyPartChars.0x000D0x000AOther characters are represented by '0xoooo' plus their UTF-16 code value as four hex characters (like '0xoooo0020' for space).0x000D0x000A(0xoooo itself is changed into 0xoooooooo before conversion takes place.)0x000D0x000A0x000D0x000AUsually called from functions like -EncodeKeys-.0x000D0x000A0x000D0x000AFor instance for the following0x000D0x000Akey parts: 'Customer', '42', '+4790534333', 'Cid'0x000D0x000Aand value part: 'Actor/43'0x000D0x000Athe correct format is: Customer/42/PhoneNumber/0xoooo002B4790534333/Cid = Actor/430x000D0x000A('Customer/42/PhoneNumber/0xoooo002B4790534333/Cid' is what this function encodes.)0x000D0x000A0x000D0x000ASee also DecodeStringFromPropertyStreamFormat and EncodeValuePartStringToPropertyStreamFormat.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValuePartStringToPropertyStreamFormat/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValuePartStringToPropertyStreamFormat/MethodName = EncodeValuePartStringToPropertyStreamFormat
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValuePartStringToPropertyStreamFormat/MethodSignature = System.String EncodeValuePartStringToPropertyStreamFormat(System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/EncodeValuePartStringToPropertyStreamFormat/Description = Converts a single value part of a PropertyStreamLine to a format suitable for sending over a PropertyStream. 0x000D0x000AThe resulting format is supposed to be quite human-readable.0x000D0x000A0x000D0x000AReturns a string containing only characters in AllowedPropertyStreamLineValuePartChars.0x000D0x000AOther characters are represented by '0xoooo' plus their UTF-16 code value as four hex characters (like '0xoooo0020' for space).0x000D0x000A(0xoooo itself is changed into 0xoooooooo before conversion takes place.)0x000D0x000A0x000D0x000ATODO: Change into disallowed chars instead (actually only '0x003B' (semicolon) and '0x000D' / '0x000A' (new line) is disallowed).0x000D0x000ATODO: And as UTF-8 encoding is used throughout AgoRapide (see DefaultAgoRapideEncoding) other characters0x000D0x000ATODO: in general can be represented.0x000D0x000ATODO: Encoding thus becomes only: TODO: 'value.Replace("0xoooo","0xoooooooo").Replace("0x000D", "0xoooo000D").Replace("0x000A", "0xoooo000A").Replace("0x003B", "0xoooo003B")TODO: that is, a simple one-liner that clients can use without needed any AgoRapide library.0x000D0x000A0x000D0x000AUsually called from functions like EncodeValue / EncodeValues.0x000D0x000A0x000D0x000A0x000D0x000ASee also DecodeStringFromPropertyStreamFormat and EncodeKeyPartStringToPropertyStreamFormat.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/DecodeStringFromPropertyStreamFormat/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/DecodeStringFromPropertyStreamFormat/MethodName = DecodeStringFromPropertyStreamFormat
Assembly/ARCCore/Class/PropertyStreamLine/_Member/DecodeStringFromPropertyStreamFormat/MethodSignature = System.String DecodeStringFromPropertyStreamFormat(System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/DecodeStringFromPropertyStreamFormat/Description = Decodes string as encoded by EncodeKeyPartStringToPropertyStreamFormat or EncodeValuePartStringToPropertyStreamFormat.0x000D0x000A0x000D0x000A0x000D0x000ANOTE: Takes up a significant amount of processing time, for instance when called by TryParse0x000D0x000A0x000D0x000ATODO: A smarter encoding has great potential for quicker decoding. For instance a prefix in a PropertyStreamLine0x000D0x000ATODO: hinting about level of encoding necessary. Like '_' indicating no special encoding for instance.0x000D0x000ATODO: In general AgoRapide application will read the property stream much more frequent than writing to it.0x000D0x000A0x000D0x000ANote how the decoder is common, used for both the key-part and the value-part of the PropertyStreamLine.0x000D0x000ANote that when the value-part constitutes of multiple items (WholeCollection), it is actually decoded twice, first by TryParse for the value-part as a whole, and then again by the parser created by ModifyCleanerAndValidatorAndParserForCardinality.0x000D0x000A0x000D0x000ANote that fails silently if any errors are encountered (like 0xoooo not followed by 'oooo' or a valid 4-digit hex number (but attempts to return meaningful data in all cases).
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToIP/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToIP/MethodName = TryParseDirectToIP
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToIP/MethodSignature = Boolean TryParseDirectToIP0x005BT0x005D(System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D, T ByRef, System.String ByRef)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToIP/Description = Parses a series of PropertyStreamLine directly to the given type of IP.0x000D0x000A0x000D0x000ATypical usage would be parsing a series of configuration values.0x000D0x000A0x000D0x000AExample:0x000D0x000AGiven some values known to describe an ConnectionInstruction like:0x000D0x000AServerHostName = localhost0x000D0x000AServerPortNo = 42460x000D0x000ADataTransferDirection = Receive0x000D0x000Athis method can return a ConnectionInstruction directly.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToProperty/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToProperty/MethodName = TryParseDirectToProperty
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToProperty/MethodSignature = Boolean TryParseDirectToProperty0x005BT0x005D(System.Object, System.String, T ByRef, System.String ByRef)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryParseDirectToProperty/Description = Parses direct to a given property value.0x000D0x000AThe PropertyStreamLine parameter is supposed to consist of only key = value, like 'DataTransferDirection = Receive'.0x000D0x000A0x000D0x000ANot implemented as of May 2020
Assembly/ARCCore/Class/PropertyStreamLine/_Member/ParseAndStoreFailSafe/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/ParseAndStoreFailSafe/MethodName = ParseAndStoreFailSafe
Assembly/ARCCore/Class/PropertyStreamLine/_Member/ParseAndStoreFailSafe/MethodSignature = Void ParseAndStoreFailSafe(ARCCore.IP, System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/ParseAndStoreFailSafe/Description = If either parsing or storing fails then this method will call StoreFailure in order to keep some track of why paring or storing failed.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailSafe/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailSafe/MethodName = StoreFailSafe
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailSafe/MethodSignature = Void StoreFailSafe(ARCCore.IP, ARCCore.PropertyStreamLineParsed)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailSafe/Description = Stores if possible and fails silently.0x000D0x000A0x000D0x000AIf storing fails then this method will try to store a 'ParseOrStoreFailure'-object at root-level in data storage, with detailed information about what exactly failed.0x000D0x000ASee StoreFailure for more information.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailure/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailure/MethodName = StoreFailure
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailure/MethodSignature = Void StoreFailure(ARCCore.IP, System.String, System.String, System.String)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/StoreFailure/Description = Stores a 'ParseOrStoreFailure'-object. Stored at root-level in the given data storage, with detailed information about what exactly failed.0x000D0x000A0x000D0x000ANote that the 'ParseOrStoreFailure'-object will overwrite any older such object already written.0x000D0x000AIn other words it gives information about the last property stream line that failed to either parse or store.0x000D0x000A0x000D0x000AThe 'CountStored' property tells how many such objects have been created since the application was initiated.0x000D0x000A0x000D0x000A'ParseOrStoreFailure' object gives an emergency indication that something is wrong with for instance data received through a Subscription over the PropertyStream without the calling method having to take any action there and then.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryStore/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryStore/MethodName = TryStore
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryStore/MethodSignature = Boolean TryStore(ARCCore.IP, ARCCore.PropertyStreamLineParsed, System.String ByRef)
Assembly/ARCCore/Class/PropertyStreamLine/_Member/TryStore/Description = Stores the given PropertyStreamLineParsed in the given storage object.0x000D0x000A0x000D0x000AThis is AgoRapide's main deserialization mechanism (together with TryParse).0x000D0x000AThe main serialization mechanism is ToPropertyStream0x000D0x000A0x000D0x000ASupposed to be called repeatedly by some mechanism listening to the PropertyStream, resulting in a 'complete' object representation being built up.0x000D0x000AThat is, turning the very basic PropertyStreamLine format into a more usable object oriented format for in-memory processing of data.0x000D0x000A0x000D0x000ATODO: Build in support for transactions. See for PropertyStream TODO: 'FAQ: Can the property stream format support transactions'0x000D0x000ATODO: for an outline about how this can be done.0x000D0x000ATODO: Consider having short-cut 'SetML' in IP (SetML = Set multi-level) which just calls this method.0x000D0x000A0x000D0x000AParses the actual property-value (Value) with help of TryValidateAndParse (if a corresponding PK is found. 0x000D0x000APossible fail scenarios are:0x000D0x000A0x000D0x000A1) Creation of hierarchical keys. Call to TrySetP may fail.0x000D0x000ANote that in general no validation is done for the keys, so for instance a misspelling of Customer as 'Customr/42/FirstName = John' will be accepted and stored accordingly (unless the actual storage has implemented some restrictions for what keys to accept).0x000D0x000A0x000D0x000A2) The final value parsing (and then only if a PK is found). Call to TryValidateAndParse may fail.0x000D0x000A0x000D0x000A3) The final value setting. Call to TrySetP may fail.0x000D0x000A0x000D0x000AThe value is stored by call to TrySetP.0x000D0x000AThis means that repeated occurrences of the same value will overwrite older ones.0x000D0x000AExample, for the following property stream lines:0x000D0x000A'Customer/42/FirstName = John'0x000D0x000A'...' (some other property stream lines)0x000D0x000A'Customer/42/FirstName = Johnny'0x000D0x000Athe final value of Customer/42/FirstName will be 'Johnny'.0x000D0x000A0x000D0x000ANote that the parsing concept is inherently not thread-safe and this method should therefore only be called within a single-threaded context (see SingleThreadedCode).0x000D0x000A
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineKeyPartChars/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineKeyPartChars/MethodName = AllowedPropertyStreamLineKeyPartChars
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineKeyPartChars/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Char0x005D AllowedPropertyStreamLineKeyPartChars
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineKeyPartChars/Description = The character set 'A...Za...z0...9-_().,' from AllowedFileOrFolderNameChars plus ' ' (space), '"' (double quote), ''' (single quote) and '|§!#%&=?+^¨~'.0x000D0x000A0x000D0x000AASCII characters important to avoid are:0x000D0x000A'/' (slash) (because used as a separator in the 'key' part of a property stream line,0x000D0x000A'0x003B' (semicolon) because used as separator for a collection of values (see WholeCollection).0x000D0x000Aand all control characters (especially CR and LF, ASCII 13 and 10).0x000D0x000A0x000D0x000ANOTE: The selection of characters are somewhat hastily chosen (as of May 2020) and may change in the future.
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineValuePartChars/ReflectedType = ARCCore.PropertyStreamLine
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineValuePartChars/MethodName = AllowedPropertyStreamLineValuePartChars
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineValuePartChars/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Char0x005D AllowedPropertyStreamLineValuePartChars
Assembly/ARCCore/Class/PropertyStreamLine/_Member/AllowedPropertyStreamLineValuePartChars/Description = The character set AllowedPropertyStreamLineKeyPartChars plus '=' (equals), '/' (forward slash), '*' (asterisk) and '' (backslash).0x000D0x000A(note that in general the value part is not as critical regarding encoding because 'everything' after the key, value separator ' = ' is the actual value.)0x000D0x000A0x000D0x000ATODO: Change into 'DisallowedASCIIChars' instead of allowed chars.0x000D0x000ATODO: See EncodeValuePartStringToPropertyStreamFormat for more information.0x000D0x000A0x000D0x000AASCII characters important to avoid are:0x000D0x000A'0x003B' (semicolon) because used as separator for a collection of values (see WholeCollection).0x000D0x000A
Assembly/ARCCore/Class/PropertyStreamLineParsed/AssemblyName = ARCCore
Assembly/ARCCore/Class/PropertyStreamLineParsed/ClassType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/Description = Parses the keys part of a line from PropertyStream, like 'Customer/42/FirstName = John.0x000D0x000A0x000D0x000AShould only be used in ephemeral contexts as class is assumed to be somewhat memory hungry.0x000D0x000A0x000D0x000AIn general, property stream lines should be stored as string only by CoreDB (and possible also ArmDB).0x000D0x000AClient will normally use PropertyStreamLineParsed as a middle step in order to to translate the string representation of a PropertyStreamLine into a hierarhical data storage.0x000D0x000A
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/ToString/ReflectedType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/ToString/Description = Note relatively complex operation of 'restoring' original property stream line.0x000D0x000AShould probably only be used in debugging or failure scenarios.
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/TryParse/ReflectedType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/TryParse/MethodName = TryParse
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/TryParse/MethodSignature = Boolean TryParse(System.String, ARCCore.PropertyStreamLineParsed ByRef, System.String ByRef)
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/TryParse/Description = Generate list of 0x003C(IK key, Type valueType)0x003E together with value from value part.0x000D0x000A0x000D0x000AHas very few fail-scenarios (that is will almost always return TRUE).0x000D0x000ANote that the value itself will not be parsed (it is just returned in Value as a 'string?').0x000D0x000A0x000D0x000Athe valueType returned will always be an IP type.0x000D0x000A(but null for last key in hierarchy).0x000D0x000A0x000D0x000AThis is the first step in parsing a PropertyStreamLine, typically used by more higher level methods like0x000D0x000A-TryParseAndStore-,0x000D0x000ATryParseDirectToIP,0x000D0x000ATryParseDirectToProperty.0x000D0x000A0x000D0x000ANote that if the value part consists of individual items, like in WholeCollection, each of these has to be decoded individually again by the calling method (by calling DecodeStringFromPropertyStreamFormat).0x000D0x000A0x000D0x000ADetails: For each key, decide which instance type of IK to use, that is, once of PK, IKType, IKString (or IKLong if an integer) in prioritized order).0x000D0x000A0x000D0x000AThe following priority is used for deciding IK-keys:0x000D0x000A1) PK if a PK is recognized (like FirstName in 'Customer/42/FirstName:', based on a combination of found type 'Customer' and field 'FirstName')0x000D0x000A0x000D0x000A2) IKType if a IP-derived type is recognized.0x000D0x000A(like 'Customer' in 'Customer/42/FirstName:')0x000D0x000A0x000D0x000A3) IKString for other cases (IKLong if an integer) .0x000D0x000A(like 42 in 'Custome/42/FirstName:'0x000D0x000A0x000D0x000AFor each key, decide what type of value-object to create if no object exists for that key (dedicated type like 'Customer' if possible, if not PRich)0x000D0x000A0x000D0x000A For 'Customer/42/FirstName = John', the tuple generated will look like this:0x000D0x000A (which of the two alternative values are returned (IKType or IKString) depends on the actual type being known to the application (see AllIPDerivedTypes).0x000D0x000A ---------------------------------------------------------------------------------------------------------0x000D0x000A key: valueType0x000D0x000A Index 0 Customer IKType(typeof(Customer)) / IKString('Customer') PRich0x000D0x000A Index 1 42 IKLong(42) (since integer, else IKString('42')) Customer / PRich0x000D0x000A Index 2 FirstName PK (from CustomerP.FirstName) / IKString('FirstName') Null. Left to IP to decide at call to SetP.0x000D0x000A0x000D0x000A For 'Customer/42/PhoneNumber/90534333' ('strange' syntax is related to IndividualItems), 0x000D0x000A the tuple generated will look like this:0x000D0x000A (which of the two alternative values are returned (IKType or IKString) depends on the actual type being known to the application (see AllIPDerivedTypes).0x000D0x000A ---------------------------------------------------------------------------------------------------------0x000D0x000A key: valueType0x000D0x000A Index 0 Customer IKType(typeof(Customer)) / IKString('Customer') PRich0x000D0x000A Index 1 42 IKLong(42) (since integer, else IKString('42')) Customer / PRich0x000D0x000A Index 2 PhoneNumber PK (from CustomerP.PhoneNumber) / IKString('PhoneNumber') Null. Left to IP to decide at call to SetP.0x000D0x000A0x000D0x000ANote that more complex representations like:0x000D0x000A Customer/42/Car/1/Colour = Red0x000D0x000Ais also understood.0x000D0x000ASo if CustomerP.Car exists then for 'Car' that corresponding PK will be used, while for '1' the type to create will be the the PK's Type.0x000D0x000A0x000D0x000AThe above would be relevant for cardinality IndividualItems for CustomerP.Car).0x000D0x000AFor cardinality HistoryOnly, as in0x000D0x000A Customer/42/Car/Colour = Red0x000D0x000Athen for 'Car' the corresponding CustomerP.Car will be used (as above), and for Colour the corresponding PK for CarP.Colour.
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/IsComment/ReflectedType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/IsComment/MethodName = IsComment
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/IsComment/MethodSignature = Boolean IsComment
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/IsComment/Description = Signifies that property stream line given for parsing started with '//' (two forward slashes).0x000D0x000A0x000D0x000AIf TRUE then this object contains no data
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Keys/ReflectedType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Keys/MethodName = Keys
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Keys/MethodSignature = System.Collections.Generic.List0x006010x005BSystem.ValueTuple0x006020x005BARCCore.IK,System.Type0x005D0x005D Keys
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Keys/Description = The keys part of the PropertyStreamLine, that is, everything before ' = '.0x000D0x000ANote that tuple item valueType will always be of an IP type.0x000D0x000A0x000D0x000AvalueType will not be set for the last List item.0x000D0x000AvalueType is not in that position because calling method will use TryValidateAndParse which picks up the key from the PK.0x000D0x000AAnd also, because we guarantee that valueType is only an IP-based type and pk.Type can be any type, it can not be set anyway.
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Value/ReflectedType = ARCCore.PropertyStreamLineParsed
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Value/MethodName = Value
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Value/MethodSignature = System.String Value
Assembly/ARCCore/Class/PropertyStreamLineParsed/_Member/Value/Description = The original (non-parsed, non-validated)) value part of the PropertyStreamLine, that is, everything after ' = '.0x000D0x000AWill be null if nothing found after ' = '.
Assembly/ARCCore/Class/StreamProcessor/AssemblyName = ARCCore
Assembly/ARCCore/Class/StreamProcessor/ClassType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/BaseTypes = ARCCore.PConcurrent
Assembly/ARCCore/Class/StreamProcessor/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable0x003BSystem.IDisposable
Assembly/ARCCore/Class/StreamProcessor/CorrespondingEnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/Class/StreamProcessor/Description = Implements the storage mechanism for AgoRapide.0x000D0x000A0x000D0x000ACoordinates the PropertyStream with other nodes.0x000D0x000A0x000D0x000ATODO: Implement discarding of data when not listening to incoming connections (saves memory usage).0x000D0x000ATODO: (search for this TODO in code to see where relevant to make changes).0x000D0x000A0x000D0x000AHas the following functionality:0x000D0x000A(note: Terminology is kept close to the one used for the MQTT protcol, although AgoRapide does not use MQTT in itself)0x000D0x000A0x000D0x000A1) Listen to incoming TCP/IP connections from other nodes. An incoming connections may be either for:0x000D0x000A a) Incoming data (from a publishing client), for us to distribute.0x000D0x000A (0x000D0x000A as a CoreDB we would then store the data locally and then distribute the data to all current downstream subscriber clients as relevant according to their respective subscriptions (Note: For incoming data on an incoming connection an implicit -IsAll-, '+*', is assumed), as a ArmDB we would then forward the data to a CoreDB )0x000D0x000A or for0x000D0x000A b) Outgoing data, downstream subscribing client requests subscription0x000D0x000A (0x000D0x000A we would then typically be a CoreDB or a ArmDB.0x000D0x000A After having reveived the Subscription and ClientUpdatePosition0x000D0x000A from the subscribing client we will then keep the client continously up-to-date with new data.0x000D0x000A ).0x000D0x000A0x000D0x000A2) Connect to other nodes. An outgoing connection may be either for0x000D0x000A a) Publishing properties. ( As a publishing Client the data would be locally in-application generated properties.0x000D0x000A As an ArmDB the data would typically have been received over an incoming connection from a Client )0x000D0x000A or for0x000D0x000A b) Receiving (as downstream subscribing client) data from upstream server.0x000D0x000A (0x000D0x000A We would then typically be an ArmDB or Client0x000D0x000A We would send Subscription and ClientUpdatePosition as soon as connection is established.0x000D0x000A )0x000D0x000A0x000D0x000A
Assembly/ARCCore/Class/StreamProcessor/LongDescription = TODO: May 2020: The code in this class should be tidied up a bit before any more functionality is added.0x000D0x000A0x000D0x000ANote that the examples above do not take into scenarios like load-balancing and fault tolerance where CoreDB would be connecting among themselves.0x000D0x000A0x000D0x000ANote that information about outgoing connection and their purpose should be possible to distribute over the PropertyStream, therefore we have implemented the class ActualConnection (distribution itself not implemented as of Mar 2020).0x000D0x000A0x000D0x000ANote: A vision for AgoRapide is that load-balancing / fault tolerance and similar should be mostly a configuration issue around already in-built functionality in ARCCore / StreamProcessor. In other words the core functionality should provide a language which is suffiently rich in order for you to describe these different setups, there should be no need for additional C# code.0x000D0x000A0x000D0x000ANote how this class inherits PConcurrent which offers thread-safe access to properties (and is also able to ExposingApplicationState to outside).
Assembly/ARCCore/Class/StreamProcessor/_Member/Initialize/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/Initialize/MethodName = Initialize
Assembly/ARCCore/Class/StreamProcessor/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCCore/Class/StreamProcessor/_Member/Initialize/Description = If OutsideLocalReceiver has been set then this method will read all local storage files and send to this.0x000D0x000AThis method may therefore take some time.
Assembly/ARCCore/Class/StreamProcessor/_Member/AddOrRemoveOutgoingConnections/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/AddOrRemoveOutgoingConnections/MethodName = AddOrRemoveOutgoingConnections
Assembly/ARCCore/Class/StreamProcessor/_Member/AddOrRemoveOutgoingConnections/MethodSignature = Void AddOrRemoveOutgoingConnections(System.Collections.Generic.IEnumerable0x006010x005BARCCore.IKIP0x005D)
Assembly/ARCCore/Class/StreamProcessor/_Member/AddOrRemoveOutgoingConnections/Description = Not relevant for CoreDB.0x000D0x000A0x000D0x000ANote how this method supports live updating of connecting instructions over the PropertyStream because it can be called at regular intervals.0x000D0x000A(TODO: Live updating is not implemented from 'outside' as of Mar 2020).0x000D0x000AShould be called after -Initialize.0x000D0x000A0x000D0x000AFor each outgoing connection not found in list of connection instructions, add it to list. For each active (outgoing) connection not on list of outgoing connections, close it.0x000D0x000A0x000D0x000ANote how the actual objects are shared with the 'outside' after the call, meaning that changes to for instance the subscripton, could be immediately reflected on the 'inside' (here). In practical terms this is however a bit difficult to achieve so in practise. A work-around could be (when you want to change some parameters for a specific connection), that you set the connection Invalid, call this metod, do the changes, set it valid-again (by setting Invalid to default(DateTime), and call this method a final time.0x000D0x000ATODO: Find some better way than description above.
Assembly/ARCCore/Class/StreamProcessor/_Member/SendFromLocalOrigin/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/SendFromLocalOrigin/MethodName = SendFromLocalOrigin
Assembly/ARCCore/Class/StreamProcessor/_Member/SendFromLocalOrigin/MethodSignature = Void SendFromLocalOrigin(System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, ARCCore.IP)
Assembly/ARCCore/Class/StreamProcessor/_Member/SendFromLocalOrigin/Description = Distributes an in-application generated property to the stream.0x000D0x000ACalled from 'outside'.0x000D0x000A0x000D0x000ANote how will not call back to OutsideLocalReceiver if that one is defined because data is marked as HasLocalOrigin.0x000D0x000A
Assembly/ARCCore/Class/StreamProcessor/_Member/ReceiveAndDistribute/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/ReceiveAndDistribute/MethodName = ReceiveAndDistribute
Assembly/ARCCore/Class/StreamProcessor/_Member/ReceiveAndDistribute/MethodSignature = Void ReceiveAndDistribute(PropertyStreamLineWithOrigin)
Assembly/ARCCore/Class/StreamProcessor/_Member/ReceiveAndDistribute/Description = Process all messages in receive queue.0x000D0x000A1) Adds the given message to the receive queue and 0x000D0x000A2) Empties the receive queue asynchronously.0x000D0x000A3) Send data to OutsideLocalReceiver (if defined).0x000D0x000A4) Feed connections asynchronously with new data (including connections catching up with others).0x000D0x000AEmptying queue and feeding connections is done by ensuring that there is a thread running that continously processes messages until the queue is empty / all connections are fed (not how this thread exists as soon as the queue is empty)
Assembly/ARCCore/Class/StreamProcessor/_Member/ReceiveAndDistribute/LongDescription = TODO: At initialization, All logging destined for the property stream done BEFORE an Outgoing Send connection has been established, TODO: will most probably be lost.TODO: Implement some form of queue or similar, until connection have been established.
Assembly/ARCCore/Class/StreamProcessor/_Member/AddTimestampToPropertyStreamAsRequired/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/AddTimestampToPropertyStreamAsRequired/MethodName = AddTimestampToPropertyStreamAsRequired
Assembly/ARCCore/Class/StreamProcessor/_Member/AddTimestampToPropertyStreamAsRequired/MethodSignature = Void AddTimestampToPropertyStreamAsRequired()
Assembly/ARCCore/Class/StreamProcessor/_Member/AddTimestampToPropertyStreamAsRequired/Description = Adds Timestamp as specified by TimestampResolution.0x000D0x000A0x000D0x000ANote how format reflects resolution, for instance if resolution is in whole minutes, then timestamp will be in format yyyy-MM-dd HH:mm
Assembly/ARCCore/Class/StreamProcessor/_Member/ReadStorageFile/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/ReadStorageFile/MethodName = ReadStorageFile
Assembly/ARCCore/Class/StreamProcessor/_Member/ReadStorageFile/MethodSignature = Void ReadStorageFile(Int32, Boolean)
Assembly/ARCCore/Class/StreamProcessor/_Member/ReadStorageFile/Description = TODO: Clean up code here and explain better
Assembly/ARCCore/Class/StreamProcessor/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCCore/Class/StreamProcessor/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/StreamProcessor/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/StreamProcessor/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/StreamProcessor/_Member/OutsideLocalReceiver/ReflectedType = ARCCore.StreamProcessor
Assembly/ARCCore/Class/StreamProcessor/_Member/OutsideLocalReceiver/MethodName = OutsideLocalReceiver
Assembly/ARCCore/Class/StreamProcessor/_Member/OutsideLocalReceiver/MethodSignature = System.Action0x006010x005BSystem.String0x005D OutsideLocalReceiver
Assembly/ARCCore/Class/StreamProcessor/_Member/OutsideLocalReceiver/Description = The outside (in the sense outside of this class) local mechanism which receives all PropertyStreamLine registered by this class.0x000D0x000A(except changes with HasLocalOrigin.)0x000D0x000A0x000D0x000AThe 'outside' implementation will typically store data to a PRich instance through -ParseAndStore-.0x000D0x000A0x000D0x000ASet this method when you want an always-up-to-date in-memory object collection of your data.0x000D0x000AMost relevant for Client.0x000D0x000AAlso relevant for ArmDB (see AdHocQuery).0x000D0x000A0x000D0x000AIf this method is set, then incoming data will be stored both to disk (unless DoNotStoreLocally is TRUE) and sent to this method.0x000D0x000AAlso, at application startup (-Start-), all data from disk will be sent to this method.0x000D0x000A0x000D0x000ARationale for not distributing HasLocalOrigin via this method:0x000D0x000AIf local originated content also was sent to this method, it would most probably have been sent twice, after a round-trip to CoreDB and back, resulting in duplicate updates to the (presumed PRich) outside's storage. The 'outside' can instead choose whether to update its presumed PRich storage immediately or not, by just calling this method itself whenever it also calls ReceiveAndDistribute
Assembly/ARCCore/Class/StreamProcessor/_Member/OutsideLocalReceiver/LongDescription = Remember thread-safety regarding use of this method.0x000D0x000A0x000D0x000APossible implementions on outside could be:0x000D0x000A0x000D0x000A1) Approach suitable for a processor, running in a continous loop:0x000D0x000A0x000D0x000A var queue = new System.Collections.Concurrent.ConcurrentQueue0x003Cstring0x003E()0x003B0x000D0x000A myStreamProcessorInstance.OutsideLocalReceiver = s =0x003E queue.Enqueue(s)0x003B0x000D0x000A0x000D0x000AYou can then pick up from the queue inside your continous processing loop in a thread-safe manner, for instance like this:0x000D0x000A0x000D0x000A var dataStorage = new PRich()0x003B0x000D0x000A while (true) 0x007B // Your continous processing loop0x000D0x000A DoTask1(dataStorage)0x003B // Task1 may freely access dataStorage (within calling thread)0x000D0x000A DoTask2(dataStorage)0x003B // Task2 may freely access dataStorage (within calling thread)0x000D0x000A while (queue.TryDequeue(out var s)) PropertyStreamLine.ParseAndStore(dataStorage, s)0x003B0x000D0x000A 0x007D0x000D0x000A0x000D0x000A0x000D0x000A2) Approach suitable for an API with incoming requests occuring on multiple threads:0x000D0x000A(simplified code)0x000D0x000A0x000D0x000A var lock = new System.Threading.ReaderWriterLockSlim()0x003B0x000D0x000A var dataStorage = new PRich()0x003B0x000D0x000A myStreamProcessorInstance.OutsideLocalReceiver = s =0x003E 0x007B0x000D0x000A try 0x007B0x000D0x000A lock.EnterWriteLock()0x003B0x000D0x000A PropertyStreamLine.ParseAndStorePropertyStreamLine(_storage, s)0x003B0x000D0x000A 0x007D finally 0x007B0x000D0x000A lock.ExitWriteLock()0x003B0x000D0x000A 0x007D0x000D0x000A 0x007D0x003B0x000D0x000A0x000D0x000AYou must also remember to acquire the corresponding lock (lock.EnterReadLock or lock.EnterWriteLock) when processing API methods, for instance like this:0x000D0x000A public APIResponse ServeAPIMethod(APIRequest request) 0x007B0x000D0x000A try 0x007B0x000D0x000A lock.EnterReadLock()0x003B0x000D0x000A return dataStorage.Query(request)0x003B0x000D0x000A 0x007D finally 0x007B0x000D0x000A lock.ExitReadLock()0x003B0x000D0x000A 0x007D0x000D0x000A 0x007D0x000D0x000A0x000D0x000A
Assembly/ARCCore/Class/StorageFile/AssemblyName = ARCCore
Assembly/ARCCore/Class/StorageFile/ClassType = ARCCore.StorageFile
Assembly/ARCCore/Class/StorageFile/BaseTypes = ARCCore.PRich
Assembly/ARCCore/Class/StorageFile/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCCore/Class/StorageFile/CorrespondingEnumType = ARCCore.StorageFileP
Assembly/ARCCore/Class/StorageFile/Description = Implemented only in order to store some ideas about Hash.
Assembly/ARCCore/Class/StorageFile/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCCore/Class/StorageFile/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCCore/Class/StorageFile/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCCore/Class/StorageFile/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCCore/Class/StorageFile/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCCore/Class/StorageFile/_Member/ToString/MethodName = ToString
Assembly/ARCCore/Class/StorageFile/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCCore/Class/StorageFile/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCCore/Class/Subscription/AssemblyName = ARCCore
Assembly/ARCCore/Class/Subscription/ClassType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.Subscription0xoooo005D
Assembly/ARCCore/Class/Subscription/Description = A stream Subscription is the concept of how nodes (see ARNodeType) subscribe to the PropertyStream (either the whole stream or just part of it) in a distributed manner.0x000D0x000A0x000D0x000AThis class Subscription describes WHAT data is required from the PropertyStream.0x000D0x000AUsed in connection with ClientUpdatePosition which describes from WHERE (from WHEN) in the historic PropertyStream data is to be returned.0x000D0x000A0x000D0x000AThis class describes a single subscription element. A complete query consists of one or more instances of this class. See IsMatch for how a query is evaluated.0x000D0x000A0x000D0x000ASome examples of subscriptions could be:0x000D0x000A0x000D0x000A1) A Client, for instance ARCAPI, subscribing (towards CoreDB) to those parts of the PropertyStream that it needs for its functioning.0x000D0x000AAs this client receives the incoming properties (through OutsideLocalReceiver) they would typically be stored in a PRich for immediate in-memory evaluation of incoming queries to the client again.0x000D0x000A0x000D0x000A2) Subscribe to logging properties for setting up of a log-console (see log).0x000D0x000A0x000D0x000A3) Subscribe to whole database or part of database in different manners in order to set up load-balancing, fault-tolerance, caching and similar (see MultipleConnectionUsage and Sharding for more information).0x000D0x000A(in other words, synchronizing and coordinating between multiple AgoRapide based nodes, especially between CoreDB nodes.) Note how the subscription instruction itself can very well be sent over the PropertyStream, configuring the different nodes from a central entry point of administration.0x000D0x000A0x000D0x000ASee SyntaxHelp.0x000D0x000A0x000D0x000ATODO: Introduce '**' in order to signify any hierarchical level.0x000D0x000ATODO: Like +**/Heartbeat/* in order to collect all Heartbeat in the system, regardless of hierarchical level.0x000D0x000ASee IsMatch (static method) for how a query consisting of multiple instances of Subscription are evaluated.
Assembly/ARCCore/Class/Subscription/LongDescription = Note that this same 'query language' (multiple instances of Subscription) can very well be used by clients of ARCAPI also.0x000D0x000A(but more probably an API client will make GraphQL requests instead).0x000D0x000A0x000D0x000ANote / FAQ about IQueryable0x003C0x003E: May 2020: AgoRapide will probably not support IQueryable because this interface is mostly about avoiding local processing of data. With IQueryable the query will not be executed until it reaches the actual data storage. Since a typical ARNodeType actually has all data present locally, this concept becomes irrelevant. 0x000D0x000AThis class is immutable
Assembly/ARCCore/Class/Subscription/_Member/FromTime/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/FromTime/MethodName = FromTime
Assembly/ARCCore/Class/Subscription/_Member/FromTime/MethodSignature = Void FromTime()
Assembly/ARCCore/Class/Subscription/_Member/FromTime/Description = TODO: Implement concept of specifying starting-point in TIME (often for an AdHocQuery?).0x000D0x000ATODO: Clarify difference between ClientUpdatePosition and FromTime / ToTime.
Assembly/ARCCore/Class/Subscription/_Member/ToTime/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/ToTime/MethodName = ToTime
Assembly/ARCCore/Class/Subscription/_Member/ToTime/MethodSignature = Void ToTime()
Assembly/ARCCore/Class/Subscription/_Member/ToTime/Description = TODO: Implement concept of specifying ending-point in TIME (often for an AdHocQuery?).0x000D0x000ATODO: Clarify difference between ClientUpdatePosition and FromTime / ToTime.
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BARCCore.Subscription0x005D, System.String)/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BARCCore.Subscription0x005D, System.String)/MethodName = IsMatch
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BARCCore.Subscription0x005D, System.String)/MethodSignature = Boolean IsMatch(System.Collections.Generic.List0x006010x005BARCCore.Subscription0x005D, System.String)
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BARCCore.Subscription0x005D, System.String)/Description = Evaluates a query consisting of multiple instances of Subscription against a single property stream line.0x000D0x000A0x000D0x000ATRUE is returned when0x000D0x000A(any of the IsAdd instances matches)0x000D0x000AAND NOT0x000D0x000A(any of the IsRemove instances matches)0x000D0x000A0x000D0x000ATODO: Add support for RegEx and other formats
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BSystem.String0x005D)/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BSystem.String0x005D)/MethodName = IsMatch
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BSystem.String0x005D)/MethodSignature = Boolean IsMatch(System.Collections.Generic.List0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/Subscription/_Member/Boolean IsMatch(System.Collections.Generic.List0x006010x005BSystem.String0x005D)/Description = Evaluates this instance of Subscription against a single property stream line (which has been split up into its constituent elements).0x000D0x000A0x000D0x000ADoes not take into consideration + or - (whether we are IsAdd / IsRemove), considers only whether string matches
Assembly/ARCCore/Class/Subscription/_Member/SyntaxHelp/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCCore/Class/Subscription/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCCore/Class/Subscription/_Member/SyntaxHelp/Description = '+*' Subscribe to everything in database.0x000D0x000A'+dt/Customer/*' Subscribe to all Customer properties.0x000D0x000A'-dt/Customer/*/Photo/*' Exclude from subscription photos of customers.0x000D0x000A'+dt/Customer/*/FirstName/*' Subscribe to all occurrences of Customer.FirstName.0x000D0x000A'+dt/Customer/*/LastName/*' Subscribe to all occurrences of Customer.LastName.0x000D0x000A'+dt/Customer/42/' Subscribe to all properties related to customer with id 42.0x000D0x000A'+dt/Order/*' Subscribe to all Order properties.0x000D0x000A'+log/*' Subscribe to everything beginning with log .0x000D0x000A'-log/API/*' Do not include properties beginning with 'Log/API/ in subscription.0x000D0x000A'-*' Stop existing subscription.0x000D0x000A
Assembly/ARCCore/Class/Subscription/_Member/IsAdd/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/IsAdd/MethodName = IsAdd
Assembly/ARCCore/Class/Subscription/_Member/IsAdd/MethodSignature = Boolean IsAdd
Assembly/ARCCore/Class/Subscription/_Member/IsAdd/Description = Corresponds to whether value starts with a plus sign, '+' or not.
Assembly/ARCCore/Class/Subscription/_Member/IsRemove/ReflectedType = ARCCore.Subscription
Assembly/ARCCore/Class/Subscription/_Member/IsRemove/MethodName = IsRemove
Assembly/ARCCore/Class/Subscription/_Member/IsRemove/MethodSignature = Boolean IsRemove
Assembly/ARCCore/Class/Subscription/_Member/IsRemove/Description = Corresponds to whether value starts with a minus sign, '+' or not.
Assembly/ARCCore/Class/Util/AssemblyName = ARCCore
Assembly/ARCCore/Class/Util/ClassType = ARCCore.Util
Assembly/ARCCore/Class/Util/Description = Methods and functionality that we are unable to find another natural home for.0x000D0x000A
Assembly/ARCCore/Class/Util/LongDescription = NOTE: Message to developers. Think through before you decide on adding anything to this class. It should really be kept as small as possible.0x000D0x000ANOTE: Consider splitting up into multiple smaller classes if grows too big.0x000D0x000A0x000D0x000ASee also Extensions.
Assembly/ARCCore/Class/Util/_Member/CreateSafeFileOrFolderName/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/CreateSafeFileOrFolderName/MethodName = CreateSafeFileOrFolderName
Assembly/ARCCore/Class/Util/_Member/CreateSafeFileOrFolderName/MethodSignature = System.String CreateSafeFileOrFolderName(System.String)
Assembly/ARCCore/Class/Util/_Member/CreateSafeFileOrFolderName/Description = Creates a filename containing only characters in AllowedFileOrFolderNameChars.0x000D0x000AOther characters are represented by '0xoooo' plus their UTF-16 code value as four hex characters (like '0xoooo0020' for space).0x000D0x000A0x000D0x000ATruncates result to 250 characters (allows for .html to be added at end, for a total of 255 characters).0x000D0x000A0x000D0x000ANOTE: Function is non-injective (not one-to-one), for instance '0xoooo0020' and ' ' both encodes to '0xoooo0020'.0x000D0x000A
Assembly/ARCCore/Class/Util/_Member/AssertCurrentlyStartingUp/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/AssertCurrentlyStartingUp/MethodName = AssertCurrentlyStartingUp
Assembly/ARCCore/Class/Util/_Member/AssertCurrentlyStartingUp/MethodSignature = Void AssertCurrentlyStartingUp()
Assembly/ARCCore/Class/Util/_Member/AssertCurrentlyStartingUp/Description = Normally called from non-thread safe methods that should be run single-threaded at application startup only.
Assembly/ARCCore/Class/Util/_Member/AssertCurrentlyStartingUp/LongDescription = NOTE: If you want to remove a call to this method somewhere in the AgoRapide code then you must first make that code, and all corresponding collections and methods, thread-safe first.0x000D0x000ANOTE: Most probably you should NEVER remove any such calls as there is also a performance advantage of finished initialization in "peace and quiet" at application startup.
Assembly/ARCCore/Class/Util/_Member/DoubleTryParse/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/DoubleTryParse/MethodName = DoubleTryParse
Assembly/ARCCore/Class/Util/_Member/DoubleTryParse/MethodSignature = Boolean DoubleTryParse(System.String, Double ByRef)
Assembly/ARCCore/Class/Util/_Member/DoubleTryParse/Description = Note that treats ',' (comma) as decimal point (not as thousands separator).
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse0x005BT0x005D(System.String, T ByRef, System.String ByRef)/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse0x005BT0x005D(System.String, T ByRef, System.String ByRef)/MethodName = EnumTryParse
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse0x005BT0x005D(System.String, T ByRef, System.String ByRef)/MethodSignature = Boolean EnumTryParse0x005BT0x005D(System.String, T ByRef, System.String ByRef)
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse0x005BT0x005D(System.String, T ByRef, System.String ByRef)/Description = Same as the inbuilt .NET method TryParse but will in addition check that:0x000D0x000A0x000D0x000A1) The value is defined (because TryParse returns true for all integers, something which is deemed to lax and will lead to errors)0x000D0x000A2) The int-value is not 0 / not '__invalid'.0x000D0x000ANote: All AgoRapide enums start with '__invalid' (as 0) in order to catch missing setting of values (the default integer value of 0 is by default an invalid AgoRapide enum member / enum value).0x000D0x000A
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse(System.Type, System.String, System.Object ByRef, System.String ByRef)/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse(System.Type, System.String, System.Object ByRef, System.String ByRef)/MethodName = EnumTryParse
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse(System.Type, System.String, System.Object ByRef, System.String ByRef)/MethodSignature = Boolean EnumTryParse(System.Type, System.String, System.Object ByRef, System.String ByRef)
Assembly/ARCCore/Class/Util/_Member/Boolean EnumTryParse(System.Type, System.String, System.Object ByRef, System.String ByRef)/Description = See also generic overload which most often is more practical.0x000D0x000A(also see that generic overload for documentation)
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringNoCache/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringNoCache/MethodName = TryGetTypeFromStringNoCache
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringNoCache/MethodSignature = Boolean TryGetTypeFromStringNoCache(System.String, System.Type ByRef)
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringNoCache/Description = See TryGetTypeFromStringFromCache for documentation.0x000D0x000A
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringFromCache/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringFromCache/MethodName = TryGetTypeFromStringFromCache
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringFromCache/MethodSignature = Boolean TryGetTypeFromStringFromCache(System.String, System.Type ByRef)
Assembly/ARCCore/Class/Util/_Member/TryGetTypeFromStringFromCache/Description = Corresponding method for creating string-representation of type is ToStringDB.0x000D0x000A(note that all AllIPDerivedTypes are understood also in short-hand form.0x000D0x000A0x000D0x000ANOTE: Note how result is cached. Use overload TryGetTypeFromStringNoCache NOTE: if input parameter is not necessarily a type / if it has a potential huge range of values.
Assembly/ARCCore/Class/Util/_Member/GetExceptionChainAsString/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/GetExceptionChainAsString/MethodName = GetExceptionChainAsString
Assembly/ARCCore/Class/Util/_Member/GetExceptionChainAsString/MethodSignature = System.String GetExceptionChainAsString(System.Exception)
Assembly/ARCCore/Class/Util/_Member/GetExceptionChainAsString/Description = Follows the chain of InnerException and returns types as comma-separated string
Assembly/ARCCore/Class/Util/_Member/GetExeptionDetails/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/GetExeptionDetails/MethodName = GetExeptionDetails
Assembly/ARCCore/Class/Util/_Member/GetExeptionDetails/MethodSignature = System.String GetExeptionDetails(System.Exception)
Assembly/ARCCore/Class/Util/_Member/GetExeptionDetails/Description = Gives as much information about exception as possible.
Assembly/ARCCore/Class/Util/_Member/UseLocalTimeInsteadOfUTC/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/UseLocalTimeInsteadOfUTC/MethodName = UseLocalTimeInsteadOfUTC
Assembly/ARCCore/Class/Util/_Member/UseLocalTimeInsteadOfUTC/MethodSignature = Boolean UseLocalTimeInsteadOfUTC
Assembly/ARCCore/Class/Util/_Member/UseLocalTimeInsteadOfUTC/Description = By default AgoRapide operates only with UTC time.0x000D0x000A0x000D0x000AThis is the recommended approach as UTC is always unambigious.0x000D0x000A0x000D0x000AThis setting is for instance relevant to use if you synchronize data from data sources which do not support UTC, in which case it would be difficult for StreamProcessor to insert correct Timestamp at initial synchronization.0x000D0x000A0x000D0x000AIf you change this setting to TRUE then ALL uses of time in AgoRapide will be based on local time (because DateTimeNow is used).0x000D0x000A0x000D0x000AThis setting can only be changed at application startup and only set to TRUE. Default value is FALSE.
Assembly/ARCCore/Class/Util/_Member/DateTimeNow/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/DateTimeNow/MethodName = DateTimeNow
Assembly/ARCCore/Class/Util/_Member/DateTimeNow/MethodSignature = System.DateTime DateTimeNow
Assembly/ARCCore/Class/Util/_Member/DateTimeNow/Description = Returns DateTime.UtcNow unless UseLocalTimeInsteadOfUTC has been set to TRUE in which case DateTime.Now is returned.
Assembly/ARCCore/Class/Util/_Member/DateTimeNowWithDescription/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/DateTimeNowWithDescription/MethodName = DateTimeNowWithDescription
Assembly/ARCCore/Class/Util/_Member/DateTimeNowWithDescription/MethodSignature = System.String DateTimeNowWithDescription
Assembly/ARCCore/Class/Util/_Member/DateTimeNowWithDescription/Description = Returns DateTimeNow appended with 'UTC' or '(Local time)' like '2020-12-09 12:30.21 UTC' or '2020-12-09 12:30.21 (Local time)'
Assembly/ARCCore/Class/Util/_Member/CurrentlyStartingUp/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/CurrentlyStartingUp/MethodName = CurrentlyStartingUp
Assembly/ARCCore/Class/Util/_Member/CurrentlyStartingUp/MethodSignature = Boolean CurrentlyStartingUp
Assembly/ARCCore/Class/Util/_Member/CurrentlyStartingUp/Description = Called once at application startup after all Attribute instances in the C# code has been processed.0x000D0x000AAfterwards attributes can only be accessed through the IP-based PKTypeAttribute.
Assembly/ARCCore/Class/Util/_Member/Assemblies/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/Assemblies/MethodName = Assemblies
Assembly/ARCCore/Class/Util/_Member/Assemblies/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BSystem.Reflection.Assembly0x005D Assemblies
Assembly/ARCCore/Class/Util/_Member/Assemblies/Description = All relevant assemblies for application.0x000D0x000A0x000D0x000AShould be set at startup of application in a single threaded context.
Assembly/ARCCore/Class/Util/_Member/Assemblies/LongDescription = Note that setting this value will also lead to other properties being constructed / methods being called like AllIPDerivedTypes,AllIPDerivedTypesDict,AllIPDerivedTypesDictIKType and AllIPDerivedTypesInludingGenericAndAbstract and BuildFromStringCache.0x000D0x000Aand CurrentlyStartingUp will be set to FALSE.0x000D0x000AIn other words, this routine is something like a global init-method for the application
Assembly/ARCCore/Class/Util/_Member/Culture/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/Culture/MethodName = Culture
Assembly/ARCCore/Class/Util/_Member/Culture/MethodSignature = System.Globalization.CultureInfo Culture
Assembly/ARCCore/Class/Util/_Member/Culture/Description = TODO: Add configurable support for other cultures, but beware how this culture is used currently.
Assembly/ARCCore/Class/Util/_Member/AllowedFileOrFolderNameChars/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/AllowedFileOrFolderNameChars/MethodName = AllowedFileOrFolderNameChars
Assembly/ARCCore/Class/Util/_Member/AllowedFileOrFolderNameChars/MethodSignature = System.Collections.Generic.HashSet0x006010x005BSystem.Char0x005D AllowedFileOrFolderNameChars
Assembly/ARCCore/Class/Util/_Member/AllowedFileOrFolderNameChars/Description = The character set 'A...Za...z0...9-_().,'.0x000D0x000A0x000D0x000AUsed to create file and folder names that has no need for special encoding / escaping in 'any' situation. This also applies for HTTP URL encoding / decoding, therefore space, ' ', is not allowed, nor '+'.0x000D0x000A
Assembly/ARCCore/Class/Util/_Member/Culture_en_US/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/Culture_en_US/MethodName = Culture_en_US
Assembly/ARCCore/Class/Util/_Member/Culture_en_US/MethodSignature = System.Globalization.CultureInfo Culture_en_US
Assembly/ARCCore/Class/Util/_Member/Culture_en_US/Description = Used by DoubleTryParse.
Assembly/ARCCore/Class/Util/_Member/DefaultAgoRapideEncoding/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/DefaultAgoRapideEncoding/MethodName = DefaultAgoRapideEncoding
Assembly/ARCCore/Class/Util/_Member/DefaultAgoRapideEncoding/MethodSignature = System.Text.Encoding DefaultAgoRapideEncoding
Assembly/ARCCore/Class/Util/_Member/DefaultAgoRapideEncoding/Description = TODO: Research optimal encoding. For instance if PropertyStream is encoded with only ASCII-characters (see EncodeKeyPartStringToPropertyStreamFormat and EncodeValuePartStringToPropertyStreamFormat) then maybe -ASCII- is good enough?
Assembly/ARCCore/Class/Util/_Member/ValidDateTimeFormats/ReflectedType = ARCCore.Util
Assembly/ARCCore/Class/Util/_Member/ValidDateTimeFormats/MethodName = ValidDateTimeFormats
Assembly/ARCCore/Class/Util/_Member/ValidDateTimeFormats/MethodSignature = System.String0x005B0x005D ValidDateTimeFormats
Assembly/ARCCore/Class/Util/_Member/ValidDateTimeFormats/Description = TODO: The formats are supposed to be used also for parsing human user input (through an API for instance).0x000D0x000ATODO: Add support for user-configurable formats
Assembly/ARCCore/Class/REx/AssemblyName = ARCCore
Assembly/ARCCore/Class/REx/ClassType = ARCCore.REx
Assembly/ARCCore/Class/REx/BaseTypes = System.Exception0x003BSystem.ApplicationException
Assembly/ARCCore/Class/REx/Interfaces = System.Runtime.Serialization.ISerializable
Assembly/ARCCore/Class/REx/Description = REx = 'TooDeepRecursiveDepthException'0x000D0x000A0x000D0x000AFunctionality that helps to guard against infinite recursion.0x000D0x000AUsage:0x000D0x000A0x000D0x000Avoid RecursiveMethod() 0x007B0x000D0x000A try 0x007B0x000D0x000A REx.Inc()0x000D0x000A .... Some code calling RecursiveMethod again, either directly or indirectly ...0x000D0x000A 0x007D finally 0x007B0x000D0x000A REx.Dec()0x000D0x000A 0x007D0x000D0x000A0x007D0x000D0x000A0x000D0x000AAlternatively, you can just do:0x000D0x000A REx.Inc() + RecursiveMethod() + REx.Inc()0x000D0x000Awhenever RecursiveMethod returns a string.0x000D0x000AThis later approach is useful in expressions, meaning you do not have to build statements in order to use this class. If exceptions should occur in RecursiveMethod however, the recursive counter may 'leak' upwards.
Assembly/ARCCore/Class/REx/LongDescription = Note how the class uses a recursion counter that is 1) static and 2) common for the whole application.0x000D0x000A0x000D0x000A1) Using a static counter is due to the fact that some methods may be recursive without directly calling itself. For instance methodA could call B, which calls C, which then calls A without knowing about call coming from A (This means that passing a recursion counter would not help because it would get lost on its way. 0x000D0x000A2) Having a common counter for the whole application is just a pragmatic choice.0x000D0x000AOne has to be aware of threading of course, that is, the max recursion depth (default = 100) has to take into account other threads, and therefore be set to a somewhat higher value than the one suitable for single-threaded environments.0x000D0x000A0x000D0x000ANOTE: Infinite recursion problems manifest themselves as a StackOverflowException (unless caught by safeguards like this).
Assembly/ARCCore/Class/REx/_Member/Dec/ReflectedType = ARCCore.REx
Assembly/ARCCore/Class/REx/_Member/Dec/MethodName = Dec
Assembly/ARCCore/Class/REx/_Member/Dec/MethodSignature = System.String Dec()
Assembly/ARCCore/Class/REx/_Member/Dec/Description = This method should be called from inside a 'finally' block, in order to secure its execution, if not your static recursion depth counter could slowly increase over time due to exceptions ocurring after call to Inc but before call to Dec.
Assembly/ARCCore/Class/InvalidTypeException/AssemblyName = ARCCore
Assembly/ARCCore/Class/InvalidTypeException/ClassType = ARCCore.InvalidTypeException
Assembly/ARCCore/Class/InvalidTypeException/BaseTypes = System.Exception0x003BSystem.ApplicationException
Assembly/ARCCore/Class/InvalidTypeException/Interfaces = System.Runtime.Serialization.ISerializable
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertAssignable/ReflectedType = ARCCore.InvalidTypeException
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertAssignable/MethodName = AssertAssignable
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertAssignable/MethodSignature = Void AssertAssignable(System.Type, System.Type, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertAssignable/Description = Asserts that expectedType.IsAssignableFrom(foundType)
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertEquals/ReflectedType = ARCCore.InvalidTypeException
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertEquals/MethodName = AssertEquals
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertEquals/MethodSignature = Void AssertEquals(System.Type, System.Type, System.Func0x006010x005BSystem.String0x005D)
Assembly/ARCCore/Class/InvalidTypeException/_Member/AssertEquals/Description = Asserts that expectedType.Equals(foundType)
Assembly/ARCCore/Class/TValue/AssemblyName = ARCCore
Assembly/ARCCore/Class/TValue/ClassType = ARCCore.TValue
Assembly/ARCCore/Class/TValue/Description = Placeholder for any class type suitable as generic type parameter PValue<T>.0x000D0x000A0x000D0x000AUsed for documentation purposes only.0x000D0x000AThis class helps with referring to PValue0x003CT0x003E classes when using the 'nameof' keyword because it is not possible to simply do 'nameof(PValue0x003CT0x003E)'. You have to specify a class like 'nameof(PValue0x003Cobject0x003E)' or 'nameof(PValue0x003Cstring0x003E)' but that would be misleading. 'nameof(PValue0x003CTValue0x003E)' is then better to use.0x000D0x000A0x000D0x000ANote that this issue does not exist with XML-comments where you can simply just write 0x003Csee cref="PValue0x007BT0x007D"/0x003E
Assembly/ARCCore/Class/BaseAttribute+IncorrectAttributeTypeUsedException/AssemblyName = ARCCore
Assembly/ARCCore/Class/BaseAttribute+IncorrectAttributeTypeUsedException/ClassType = ARCCore.BaseAttribute+IncorrectAttributeTypeUsedException
Assembly/ARCCore/Class/BaseAttribute+IncorrectAttributeTypeUsedException/BaseTypes = System.Exception0x003BSystem.ApplicationException
Assembly/ARCCore/Class/BaseAttribute+IncorrectAttributeTypeUsedException/Interfaces = System.Runtime.Serialization.ISerializable
Assembly/ARCCore/Class/BaseAttribute+IncorrectAttributeTypeUsedException/Description = Helps to clean up any confusion about which BaseAttribute to use in a given concept.
Assembly/ARCCore/Class/PK+BasePKAttributeNotFoundException0x003CT0x003E/AssemblyName = ARCCore
Assembly/ARCCore/Class/PK+BasePKAttributeNotFoundException0x003CT0x003E/ClassType = ARCCore.PK+BasePKAttributeNotFoundException0x006010x005BT0x005D
Assembly/ARCCore/Class/PK+BasePKAttributeNotFoundException0x003CT0x003E/BaseTypes = System.Exception0x003BSystem.ApplicationException
Assembly/ARCCore/Class/PK+BasePKAttributeNotFoundException0x003CT0x003E/Interfaces = System.Runtime.Serialization.ISerializable
Assembly/ARCCore/Class/PK+BasePKAttributeNotFoundException0x003CT0x003E/Description = Explains how to implement a given BasePKAttribute for an enum
Assembly/ARCCore/Class/PK+PKBoolPair/AssemblyName = ARCCore
Assembly/ARCCore/Class/PK+PKBoolPair/ClassType = ARCCore.PK+PKBoolPair
Assembly/ARCCore/Class/PK+PKBoolPair/Description = Used to signify that a given PK returned from value factory inside FromEnum has not been initialized (has not yet been populated with PKTypeAttribute collection).
Assembly/ARCCore/Class/PK+PKBoolPair/_Member/TrulyInitialized/ReflectedType = ARCCore.PK+PKBoolPair
Assembly/ARCCore/Class/PK+PKBoolPair/_Member/TrulyInitialized/MethodName = TrulyInitialized
Assembly/ARCCore/Class/PK+PKBoolPair/_Member/TrulyInitialized/MethodSignature = Boolean TrulyInitialized
Assembly/ARCCore/Class/PK+PKBoolPair/_Member/TrulyInitialized/Description = Not used currently (May 2020). Useful for debugging purposes
Assembly/ARCCore/Class/StreamProcessor+StorageFile/AssemblyName = ARCCore
Assembly/ARCCore/Class/StreamProcessor+StorageFile/ClassType = ARCCore.StreamProcessor+StorageFile
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filepath/ReflectedType = ARCCore.StreamProcessor+StorageFile
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filepath/MethodName = Filepath
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filepath/MethodSignature = System.String Filepath
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filepath/Description = Complete path to file
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filename/ReflectedType = ARCCore.StreamProcessor+StorageFile
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filename/MethodName = Filename
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filename/MethodSignature = System.String Filename
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Filename/Description = Filename: Main file name, like 2020-04-03 08:420x000D0x000A
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Length/ReflectedType = ARCCore.StreamProcessor+StorageFile
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Length/MethodName = Length
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Length/MethodSignature = Int64 Length
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Length/Description = Wrongly placed. Belongs to each individual revision file.0x000D0x000ATODO: Implement DataRetention.
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Properties/ReflectedType = ARCCore.StreamProcessor+StorageFile
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Properties/MethodName = Properties
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Properties/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.Int32,System.Collections.Generic.List0x006010x005BSystem.String0x005D0x005D Properties
Assembly/ARCCore/Class/StreamProcessor+StorageFile/_Member/Properties/Description = Key = revision number of file (due to compression / DataRetention), like R00001, R00002 and so on.0x000D0x000AValue (inner dictionary) = actual data (PropertyStreamLine).0x000D0x000ANote: Value may be null, signifying that file has not been read into memory yet
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/AssemblyName = ARCCore
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/ClassType = ARCCore.StreamProcessor+PropertyStreamLineWithOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/Description = The rationale for this class is that ReceiveAndDistribute needs to distingush origin of data when routing it (in general, in order to avoid sending it back to its source).0x000D0x000A0x000D0x000AThis class is not to be confused with PropertyStreamLine.
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/HasLocalOrigin/ReflectedType = ARCCore.StreamProcessor+PropertyStreamLineWithOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/HasLocalOrigin/MethodName = HasLocalOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/HasLocalOrigin/MethodSignature = Boolean HasLocalOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/HasLocalOrigin/Description = Locally generated data is not to be sent to OutsideLocalReceiver). We instead leave it to the 'outside' to decide if0x000D0x000A0x000D0x000Aeither0x000D0x000A0x000D0x000AA) Locally originated data should be put straight into the local 'outside' property store (typically an PRich)0x000D0x000ANOTE: This alternative, A), is dangerous because timestamps as generated by AddTimestampToPropertyStreamAsRequired0x000D0x000ANOTE: will not be sent to OutsideLocalReceiver in a deterministic manner compared to0x000D0x000ANOTE: when the data is pute into the 'outside' property store.0x000D0x000ANOTE: (in simpler words, the timestamp may come AFTER the data, leading to errors in parsing).0x000D0x000ANOTE: Use SendToOutsideLocalReceiverRegardlessOfOrigin in order to escape this problem.0x000D0x000A0x000D0x000Aor0x000D0x000A0x000D0x000AB) We should wait until it gets returned back from the CoreDB through our subscription (and being sent to the local property store through OutsideLocalReceiver).0x000D0x000A0x000D0x000ASee also SendToOutsideLocalReceiverRegardlessOfOrigin which can overrule this.0x000D0x000A
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/SendToOutsideLocalReceiverRegardlessOfOrigin/ReflectedType = ARCCore.StreamProcessor+PropertyStreamLineWithOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/SendToOutsideLocalReceiverRegardlessOfOrigin/MethodName = SendToOutsideLocalReceiverRegardlessOfOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/SendToOutsideLocalReceiverRegardlessOfOrigin/MethodSignature = Boolean SendToOutsideLocalReceiverRegardlessOfOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/SendToOutsideLocalReceiverRegardlessOfOrigin/Description = See HasLocalOrigin for explanation.
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/DoNotAddTimestampWhenStoring/ReflectedType = ARCCore.StreamProcessor+PropertyStreamLineWithOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/DoNotAddTimestampWhenStoring/MethodName = DoNotAddTimestampWhenStoring
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/DoNotAddTimestampWhenStoring/MethodSignature = Boolean DoNotAddTimestampWhenStoring
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/DoNotAddTimestampWhenStoring/Description = Normally StreamProcessor inserts the required Timestamps in the AgoRapide storage.0x000D0x000A0x000D0x000ADoNotAddTimestampWhenStoring is a hack used when synchronizing an AgoRapide storage with other databases.0x000D0x000ANormally the synchronization is supposed to always be up-to-date, but at startup of the AgoRapide application some gap will naturally exist since the application was last shut down.0x000D0x000AThe initial synchronization at application startup can therefore utilize timestamp information from the source database, and signal through this property (DoNotAddTimestampWhenStoring) that -StreamProcessor should NOT also insert timestamps itself (because the correct timestamps are much older).0x000D0x000A0x000D0x000ABeware that this is not an optimal solution because at application startup StreamProcessor will inevitably do some logging with up to date timestamps BEFORE synchronization starts, before older timestamps, meaning that timestamps in the AgoRapide storage (in the PropertyStream) are not sequential in rising order.0x000D0x000A0x000D0x000ATODO: An alternative would be to just inject the new properties directly in the data storage BEFORE StreamProcessor TODO: is initialized (storing text files directly into the data storage directory without knowledge of the StreamProcessor).0x000D0x000ATODO: BUT, if the actual synchronization status is stored within the data storage, we have a chicken-and-egg problem TODO: because then StreamProcessor would be needed in order to read the storage into memory TODO: BEFORE the synchronization takes place.0x000D0x000A
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/ReceivedFromOutgoingConnection/ReflectedType = ARCCore.StreamProcessor+PropertyStreamLineWithOrigin
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/ReceivedFromOutgoingConnection/MethodName = ReceivedFromOutgoingConnection
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/ReceivedFromOutgoingConnection/MethodSignature = Boolean ReceivedFromOutgoingConnection
Assembly/ARCCore/Class/StreamProcessor+PropertyStreamLineWithOrigin/_Member/ReceivedFromOutgoingConnection/Description = Data received from an outgoing connection, that is, data received based on 'this' application's subscription request (as subscribing client).0x000D0x000AThis data must NOT be sent back again over any outgoing connection.0x000D0x000AIt should only be distributed locally (through -OutsideLocalReceiver, typical for an Client) and to incoming connections (incoming connections from subscribing clients) whenever it matches their Subscription request (typical for an ArmDB
Assembly/ARCCore/AREnumType/_Description = All enums found in assembly ARCCore.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/_Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/EnumType = ARCCore.BaseAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/CorrespondingClass = ARCCore.BaseAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/Description = Describes class BaseAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/EnumType = ARCCore.BaseAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/EnumMember = Description
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/PKTypeAttribute/Description = The description for the attribute, like this description0x000D0x000AOriginates from Description.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/Description/Description = The description for the attribute, like this description0x000D0x000AOriginates from Description.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/EnumType = ARCCore.BaseAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/EnumMember = LongDescription
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/PKTypeAttribute/Description = The long (detailed) description for the attribute.0x000D0x000A0x000D0x000AOriginates from LongDescription.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/BaseAttributeP/_Member/LongDescription/Description = The long (detailed) description for the attribute.0x000D0x000A0x000D0x000AOriginates from LongDescription.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/CorrespondingClass = ARCCore.ClassAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/Description = Describes class ClassAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/EnumMember = AssemblyName
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/PKTypeAttribute/Description = The assembly in which this class resides.0x000D0x000AIncluded in order to more easily query for ApplicationSpecificCode-classes
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/AssemblyName/Description = The assembly in which this class resides.0x000D0x000AIncluded in order to more easily query for ApplicationSpecificCode-classes
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/EnumMember = ClassType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/PKTypeAttribute/Description = The actual type that we are a ClassAttribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/ClassType/Description = The actual type that we are a ClassAttribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/EnumMember = BaseTypes
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/Cardinality = WholeCollection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/PKTypeAttribute/Description = The inheritance hierarchy for this class, start with base type (excluding 'object').r0x000ANot set if class does not inherit any class except 'object'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BaseTypes/Description = The inheritance hierarchy for this class, start with base type (excluding 'object').r0x000ANot set if class does not inherit any class except 'object'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/EnumMember = Interfaces
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/Cardinality = WholeCollection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/PKTypeAttribute/Description = All interfaces that this class and its base classes implement0x000D0x000A(as given by -GetInterfaces-.)0x000D0x000ANot set if no interfaces implemented.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/Interfaces/Description = All interfaces that this class and its base classes implement0x000D0x000A(as given by -GetInterfaces-.)0x000D0x000ANot set if no interfaces implemented.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/EnumMember = CorrespondingEnumType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/Description = Only relevant when implements IP. 0x000D0x000AThe corresponding enum with values describing this class.0x000D0x000A(like this enum ClassAttributeP describes ClassAttribute). 0x000D0x000AThe enum must have the same name, with capital letter 'P' appended (like CustomerP and Customer for instance). This requirement is enforced by GetAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/PKTypeAttribute/LongDescription = Automatically inserted by GetAttribute if found.0x000D0x000ASee also CorrespondingClass.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/Description = Only relevant when implements IP. 0x000D0x000AThe corresponding enum with values describing this class.0x000D0x000A(like this enum ClassAttributeP describes ClassAttribute). 0x000D0x000AThe enum must have the same name, with capital letter 'P' appended (like CustomerP and Customer for instance). This requirement is enforced by GetAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/CorrespondingEnumType/LongDescription = Automatically inserted by GetAttribute if found.0x000D0x000ASee also CorrespondingClass.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/EnumMember = BoilerplateCodeProperties
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/Description = Only relevant when implements IP and when a CorrespondingEnumType is found.0x000D0x000A0x000D0x000AAutomatically generated boilerplate code that implements traditional setters and getters for properties of this class.0x000D0x000APaste this code into your class if you find the default PropertyAccess syntax too verbose.0x000D0x000A0x000D0x000AIf you are also concerned about memory coumsumption, use code provide through BoilerplateCodePropertiesAndStorage instead.0x000D0x000A0x000D0x000ABackground: The PropertyAccess-syntax is a bit convuluted. This can be alleviated by implementing traditional setters / getters, something which is offered through this property.0x000D0x000A0x000D0x000ANote that the self-evident performance impact due to a more complicated access mechanism will of course remain (unless you use -BoilerplateCodePropertiesAndStorage instead)-.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/PKTypeAttribute/LongDescription = Note that in order to get all the rich functionality of PropertyAccess a quite large number of methods have to be implemented.0x000D0x000A0x000D0x000AAutomatically inserted by GetAttribute.0x000D0x000A(but not for classes within StandardAgoRapideCode, only for ApplicationSpecificCode.)0x000D0x000A0x000D0x000ASee also BoilerplateCodePropertiesAndStorage.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/Description = Only relevant when implements IP and when a CorrespondingEnumType is found.0x000D0x000A0x000D0x000AAutomatically generated boilerplate code that implements traditional setters and getters for properties of this class.0x000D0x000APaste this code into your class if you find the default PropertyAccess syntax too verbose.0x000D0x000A0x000D0x000AIf you are also concerned about memory coumsumption, use code provide through BoilerplateCodePropertiesAndStorage instead.0x000D0x000A0x000D0x000ABackground: The PropertyAccess-syntax is a bit convuluted. This can be alleviated by implementing traditional setters / getters, something which is offered through this property.0x000D0x000A0x000D0x000ANote that the self-evident performance impact due to a more complicated access mechanism will of course remain (unless you use -BoilerplateCodePropertiesAndStorage instead)-.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodeProperties/LongDescription = Note that in order to get all the rich functionality of PropertyAccess a quite large number of methods have to be implemented.0x000D0x000A0x000D0x000AAutomatically inserted by GetAttribute.0x000D0x000A(but not for classes within StandardAgoRapideCode, only for ApplicationSpecificCode.)0x000D0x000A0x000D0x000ASee also BoilerplateCodePropertiesAndStorage.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/EnumType = ARCCore.ClassAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/EnumMember = BoilerplateCodePropertiesAndStorage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/Description = Only relevant when implements IP and when a CorrespondingEnumType is found.0x000D0x000A0x000D0x000AAutomatically generated boilerplate code that implements storage (and also traditional setters and getters) for properties of this class.0x000D0x000A0x000D0x000AIn it simplest form this entails code similar to:0x000D0x000A0x000D0x000A public string Name 0x007B0x000D0x000A get =0x003E IP.GetPV0x003Cstring0x003E(AppleP.Name)0x003B0x000D0x000A set =0x003E IP.SetPV(AppleP.Name, value)0x003B0x000D0x000A 0x007D0x000D0x000A0x000D0x000APaste this code into your class if you find the default IP implementations too memory hungry (see MemoryConsumption).0x000D0x000A0x000D0x000AThe code provided through this property will also eliminate the performance impact due to the complicated PropertyAccess mechanism.0x000D0x000A0x000D0x000ABackground: The typical IP implementations are a bit memory hungry due the generic mechanism used. This can be alleviated by implementing traditional object storage, that is, by dispensing of the typical Dictionary0x003CIK, IP0x003E Properties collection like the one used in PRich, and just implement IP on top of such a traditional structure. 0x000D0x000AYou can do this as needed for a few select 'entity' classes as your application grows (that is, for the classes for which you see a huge number of instances consuming excessive memory).0x000D0x000A(ARCDoc gives some examples of this).0x000D0x000A0x000D0x000AThe practical result of using this code is that your class turns into a quite traditional C# class regarding property access and memory usage, but you still retain the general PropertyStream compatibility (serialization / deserialization to / from the property stream).(Note however, that you do NOT retain the possibility for storing neta-information for a property, like who created it or how old it is (see PP like Cid and Created).0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/PKTypeAttribute/LongDescription = TODO: Not implemented as of May 2020.0x000D0x000A0x000D0x000ANote that in order to get all the rich functionality of PropertyAccess a quite large number of methods have to be implemented.0x000D0x000A0x000D0x000AAutomatically inserted by GetAttribute.0x000D0x000A0x000D0x000ASee also BoilerplateCodeProperties.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/Description = Only relevant when implements IP and when a CorrespondingEnumType is found.0x000D0x000A0x000D0x000AAutomatically generated boilerplate code that implements storage (and also traditional setters and getters) for properties of this class.0x000D0x000A0x000D0x000AIn it simplest form this entails code similar to:0x000D0x000A0x000D0x000A public string Name 0x007B0x000D0x000A get =0x003E IP.GetPV0x003Cstring0x003E(AppleP.Name)0x003B0x000D0x000A set =0x003E IP.SetPV(AppleP.Name, value)0x003B0x000D0x000A 0x007D0x000D0x000A0x000D0x000APaste this code into your class if you find the default IP implementations too memory hungry (see MemoryConsumption).0x000D0x000A0x000D0x000AThe code provided through this property will also eliminate the performance impact due to the complicated PropertyAccess mechanism.0x000D0x000A0x000D0x000ABackground: The typical IP implementations are a bit memory hungry due the generic mechanism used. This can be alleviated by implementing traditional object storage, that is, by dispensing of the typical Dictionary0x003CIK, IP0x003E Properties collection like the one used in PRich, and just implement IP on top of such a traditional structure. 0x000D0x000AYou can do this as needed for a few select 'entity' classes as your application grows (that is, for the classes for which you see a huge number of instances consuming excessive memory).0x000D0x000A(ARCDoc gives some examples of this).0x000D0x000A0x000D0x000AThe practical result of using this code is that your class turns into a quite traditional C# class regarding property access and memory usage, but you still retain the general PropertyStream compatibility (serialization / deserialization to / from the property stream).(Note however, that you do NOT retain the possibility for storing neta-information for a property, like who created it or how old it is (see PP like Cid and Created).0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassAttributeP/_Member/BoilerplateCodePropertiesAndStorage/LongDescription = TODO: Not implemented as of May 2020.0x000D0x000A0x000D0x000ANote that in order to get all the rich functionality of PropertyAccess a quite large number of methods have to be implemented.0x000D0x000A0x000D0x000AAutomatically inserted by GetAttribute.0x000D0x000A0x000D0x000ASee also BoilerplateCodeProperties.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/EnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/CorrespondingClass = ARCCore.ClassMemberAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/Description = Describes class ClassMemberAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/EnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/EnumMember = ReflectedType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/PKTypeAttribute/Description = The actual MemberInfo.ReflectedType. Same as containing class? TODO: Improve this description
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/ReflectedType/Description = The actual MemberInfo.ReflectedType. Same as containing class? TODO: Improve this description
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/EnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/EnumMember = MethodName
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/PKTypeAttribute/Description = The actual MemberInfo.Name.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodName/Description = The actual MemberInfo.Name.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/EnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/EnumMember = MethodSignature
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/PKTypeAttribute/Description = The actual MemberInfo.ToString.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/MethodSignature/Description = The actual MemberInfo.ToString.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/EnumType = ARCCore.ClassMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/EnumMember = IdFriendlyDetailed
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/PKTypeAttribute/Description = TODO: Do we need this
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ClassMemberAttributeP/_Member/IdFriendlyDetailed/Description = TODO: Do we need this
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/EnumType = ARCCore.EnumAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/CorrespondingClass = ARCCore.EnumAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/Description = Describes class EnumAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/AREnumType/PKTypeAttribute/EnumType = ARCCore.EnumAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/AREnumType/PKTypeAttribute/EnumMember = AREnumType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/AREnumType/PKTypeAttribute/Type = ARCCore.AREnumType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/AREnumType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/AREnumType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/EnumType = ARCCore.EnumAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/EnumMember = EnumType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/PKTypeAttribute/Description = The type of the enum (like type of 'CustomerP' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/EnumType/Description = The type of the enum (like type of 'CustomerP' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/EnumType = ARCCore.EnumAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/EnumMember = CorrespondingClass
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/Description = Only relevant when PropertyKeyEnum. 0x000D0x000AThe corresponding 'entity'-class (IP-derived class) that the enum describes (like this enum EnumAttributeP describes EnumAttribute). 0x000D0x000AThe class must have the same name, except without the last capital letter 'P' (like CustomerP and Customer for instance). This requirement is enforced by GetAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/PKTypeAttribute/LongDescription = Automatically inserted by GetAttribute.0x000D0x000ASee also CorrespondingEnumType.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/Description = Only relevant when PropertyKeyEnum. 0x000D0x000AThe corresponding 'entity'-class (IP-derived class) that the enum describes (like this enum EnumAttributeP describes EnumAttribute). 0x000D0x000AThe class must have the same name, except without the last capital letter 'P' (like CustomerP and Customer for instance). This requirement is enforced by GetAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumAttributeP/_Member/CorrespondingClass/LongDescription = Automatically inserted by GetAttribute.0x000D0x000ASee also CorrespondingEnumType.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/EnumType = ARCCore.EnumMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/CorrespondingClass = ARCCore.EnumMemberAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/Description = Describes class EnumMemberAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/EnumType = ARCCore.EnumMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/EnumMember = EnumType
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/PKTypeAttribute/Description = The type of the enum (like type of 'CustomerP' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumType/Description = The type of the enum (like type of 'CustomerP' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/EnumType = ARCCore.EnumMemberAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/EnumMember = EnumMember
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/Description = The actual enum member / enum value (like 'Firstname' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/PKTypeAttribute/LongDescription = Note that type is string
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/Description = The actual enum member / enum value (like 'Firstname' in CustomerP.FirstName) that we are an attribute for
Assembly/ARCCore/AREnumType/PropertyKeyEnum/EnumMemberAttributeP/_Member/EnumMember/LongDescription = Note that type is string
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/EnumType = ARCCore.PKLogAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/CorrespondingClass = ARCCore.PKLogAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/Description = Describes class -PKLogAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/EnumType = ARCCore.PKLogAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/EnumMember = DoNotLogAtAll
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/PKTypeAttribute/Description = Originates from DoNotLogAtAll.0x000D0x000A0x000D0x000AThis alternative should not be used because it will negate the whole idea of ExposingApplicationState to the PropertyStream. It is better to use either CountInterval or TimeInterval (however, as of Apr 2020 these two are not implemented).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/DoNotLogAtAll/Description = Originates from DoNotLogAtAll.0x000D0x000A0x000D0x000AThis alternative should not be used because it will negate the whole idea of ExposingApplicationState to the PropertyStream. It is better to use either CountInterval or TimeInterval (however, as of Apr 2020 these two are not implemented).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/EnumType = ARCCore.PKLogAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/EnumMember = CountInterval
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/PKTypeAttribute/Description = TODO: Not implemented as of Apr 2020. Will require some meta-storage in implementing classes, like PConcurrent.0x000D0x000AFor a value of n, log only every n'th time the property is changed.0x000D0x000ASuitable when you have a steady stream of changes for the actual property, and only need to 'sample' some of them in the log, for instance as a progress indicator. Conceptually simpler than TimeInterval
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/CountInterval/Description = TODO: Not implemented as of Apr 2020. Will require some meta-storage in implementing classes, like PConcurrent.0x000D0x000AFor a value of n, log only every n'th time the property is changed.0x000D0x000ASuitable when you have a steady stream of changes for the actual property, and only need to 'sample' some of them in the log, for instance as a progress indicator. Conceptually simpler than TimeInterval
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/EnumType = ARCCore.PKLogAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/EnumMember = TimeInterval
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/Type = System.TimeSpan
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/PKTypeAttribute/Description = TODO: Not implemented as of Apr 2020. Will for instance require a separate thread in implementing classes, like PConcurrent.0x000D0x000ASpecifies a certain time interval for which the property's value shall be sent over the PropertyStream.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKLogAttributeP/_Member/TimeInterval/Description = TODO: Not implemented as of Apr 2020. Will for instance require a separate thread in implementing classes, like PConcurrent.0x000D0x000ASpecifies a certain time interval for which the property's value shall be sent over the PropertyStream.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/EnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/CorrespondingClass = ARCCore.PKTypeAttribute
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/Description = Describes class PKTypeAttribute.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/EnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/EnumMember = Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/Type = System.Type
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/Description = The type of this Property.0x000D0x000A0x000D0x000AOriginates from Type.0x000D0x000A0x000D0x000ADefault to typeof(string) (see Initialize).0x000D0x000A0x000D0x000ANote that normally (in entity-objects like PRich). the actual stored value is packed inside an IP instance, usually PValue<T>, so for instance if type = typeof(string) then what is actually stored will usually be a PValue<T>. 0x000D0x000AIf the type is derived form IP then it is stored directly. See ConnectionInstruction for an example of this
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/PKTypeAttribute/LongDescription = Typical examples are0x000D0x000A1) typeof(string), typeof(long), typeof(DateTime),0x000D0x000A2) typeof(0x005BAnyEnum0x005D),0x000D0x000A3) Can also be a type assignable to -ITypeDescriber,0x000D0x000A0x000D0x000ANote: Easily accessed through convenience method Type.0x000D0x000A0x000D0x000ANote: If you want to store multiple instances of a type, do not set type to List0x003CT0x003E or similar. You should instead set Cardinality to WholeCollection and the corresponding List0x003CT0x003E collection will then be generated automatically for you 'behind-the-scenes'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/Description = The type of this Property.0x000D0x000A0x000D0x000AOriginates from Type.0x000D0x000A0x000D0x000ADefault to typeof(string) (see Initialize).0x000D0x000A0x000D0x000ANote that normally (in entity-objects like PRich). the actual stored value is packed inside an IP instance, usually PValue<T>, so for instance if type = typeof(string) then what is actually stored will usually be a PValue<T>. 0x000D0x000AIf the type is derived form IP then it is stored directly. See ConnectionInstruction for an example of this
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Type/LongDescription = Typical examples are0x000D0x000A1) typeof(string), typeof(long), typeof(DateTime),0x000D0x000A2) typeof(0x005BAnyEnum0x005D),0x000D0x000A3) Can also be a type assignable to -ITypeDescriber,0x000D0x000A0x000D0x000ANote: Easily accessed through convenience method Type.0x000D0x000A0x000D0x000ANote: If you want to store multiple instances of a type, do not set type to List0x003CT0x003E or similar. You should instead set Cardinality to WholeCollection and the corresponding List0x003CT0x003E collection will then be generated automatically for you 'behind-the-scenes'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/EnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/EnumMember = DefaultValue
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/Type = System.Object
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/Description = The default value.0x000D0x000A0x000D0x000AOriginates from DefaultValue.0x000D0x000A0x000D0x000AWill be used by AssertIntegrity (actual property will be set to this value) if no value for actual property is given.0x000D0x000ATODO: Consider also letting GetP look for default value instead of throwing exception (in case AssertIntegrity has not been called)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/PKTypeAttribute/LongDescription = Note: If given then IsObligatory will automatically be set to TRUE
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/Description = The default value.0x000D0x000A0x000D0x000AOriginates from DefaultValue.0x000D0x000A0x000D0x000AWill be used by AssertIntegrity (actual property will be set to this value) if no value for actual property is given.0x000D0x000ATODO: Consider also letting GetP look for default value instead of throwing exception (in case AssertIntegrity has not been called)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/DefaultValue/LongDescription = Note: If given then IsObligatory will automatically be set to TRUE
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/EnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/EnumMember = Cardinality
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/Type = ARCCore.Cardinality
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/Description = Describes how multiple instances of a property is supposed to be handled.0x000D0x000A0x000D0x000AOriginates from Cardinality.0x000D0x000A0x000D0x000ASee description of Cardinality for details
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/PKTypeAttribute/LongDescription = Note: Easily accessed through convenience method Cardinality
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/Description = Describes how multiple instances of a property is supposed to be handled.0x000D0x000A0x000D0x000AOriginates from Cardinality.0x000D0x000A0x000D0x000ASee description of Cardinality for details
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/Cardinality/LongDescription = Note: Easily accessed through convenience method Cardinality
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/EnumType = ARCCore.PKTypeAttributeP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/EnumMember = IsObligatory
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/PKTypeAttribute/Description = True means value is obligatory. 0x000D0x000AOriginates from IsObligatory.0x000D0x000A0x000D0x000AUsed for instance by AssertIntegrity.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PKTypeAttributeP/_Member/IsObligatory/Description = True means value is obligatory. 0x000D0x000AOriginates from IsObligatory.0x000D0x000A0x000D0x000AUsed for instance by AssertIntegrity.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/CorrespondingClass = ARCCore.P
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/Description = Describes meta data for any class (property) implementing IP.0x000D0x000A0x000D0x000ANot necessarily stored for every property.0x000D0x000A0x000D0x000ACan be added 'to any' property, but will result in higher memory consumption, because more complex objects will then have to be used. (For instance having to use PRich instead of PValue<T>.0x000D0x000ASee Value for more details aobout this.)0x000D0x000A0x000D0x000ASee also MemoryConsumption.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/LongDescription = If stored as items in a Dictionary then values will be stored together with child-properties (if relevant) in the same dictionary. Example: You might have 'Customer/42/Cid = Agent/43' which will be stored alongside 'Customer/42/Firstname = John'.0x000D0x000A0x000D0x000ASome values for this enum can be considered tags (like Cid), while other values can be considered actions taken on property (like Invalid).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/EnumMember = Created
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/Type = System.DateTime
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/PKTypeAttribute/Description = Timestamp when created in database.0x000D0x000AWhen read from PropertyStream will usually originate from Timestamp, not as a specific Created-property.0x000D0x000A0x000D0x000ASee also ICreated.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Created/Description = Timestamp when created in database.0x000D0x000AWhen read from PropertyStream will usually originate from Timestamp, not as a specific Created-property.0x000D0x000A0x000D0x000ASee also ICreated.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/EnumMember = Cid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/PKTypeAttribute/Description = Creator id (entity which created this property)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Cid/Description = Creator id (entity which created this property)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/EnumMember = Value
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/Type = System.Object
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/Description = The actual value.0x000D0x000A0x000D0x000ANote that this is mostly relevant when storing values inside a PRich object because we want to store some metadata associated with it, like Cid, Created and similar.0x000D0x000A0x000D0x000ANormally, values are stored directly inside the entity object as a PValue<T> object, not as a Value.0x000D0x000A0x000D0x000ATODO: Try to find a more suitable 'home' for this enum member. It is not really metadata which is all PP is about
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/PKTypeAttribute/LongDescription = Detailed explanation:0x000D0x000AFor 'Customer.FirstName=John', FirstName would normally be a PValue<T> stored directly inside the Customer-entity, but if we want to also do 'Customer.FirstName.Cid=Actor/43', then the PValue<T> for storing FirstName must be replaced with a PRich instance which would have two properties, Value as a PValue<T> for storing 'John' and a Cid for storing 'Actor/43'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/Description = The actual value.0x000D0x000A0x000D0x000ANote that this is mostly relevant when storing values inside a PRich object because we want to store some metadata associated with it, like Cid, Created and similar.0x000D0x000A0x000D0x000ANormally, values are stored directly inside the entity object as a PValue<T> object, not as a Value.0x000D0x000A0x000D0x000ATODO: Try to find a more suitable 'home' for this enum member. It is not really metadata which is all PP is about
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Value/LongDescription = Detailed explanation:0x000D0x000AFor 'Customer.FirstName=John', FirstName would normally be a PValue<T> stored directly inside the Customer-entity, but if we want to also do 'Customer.FirstName.Cid=Actor/43', then the PValue<T> for storing FirstName must be replaced with a PRich instance which would have two properties, Value as a PValue<T> for storing 'John' and a Cid for storing 'Actor/43'
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/EnumMember = Valid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/Type = System.DateTime
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/PKTypeAttribute/Description = Timestamp when last known valid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Valid/Description = Timestamp when last known valid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/EnumMember = Vid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/PKTypeAttribute/Description = Validator id, that is entity which set Valid for this property.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Vid/Description = Validator id, that is entity which set Valid for this property.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/EnumMember = Invalid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/Type = System.DateTime
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/Description = Timestamp when invalidated / 'deleted'.0x000D0x000ANot necessary to use when a property is simply replaced by a new property, but because of NoRealDeletion, there has to be a mechanism which can at least simulate deletion of data.0x000D0x000ANote: If you need to remove or 'undo' an Invalid-operation, set Invalid to '0001-01-01' which is the default value for a DateTime in .NET (this is a practical approach because it is difficult to set Invalid the field Invalid (or something like that)).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/PKTypeAttribute/LongDescription = See also IsValid and DataRetention.0x000D0x000A0x000D0x000AWhen received over PropertyStream TryStore will usually delete the actual object from its object storage.0x000D0x000ATODO: Remember to implement this properly. For instance, for the following sequence\r0x000ATODO: Customer/42/FirstName = John0x000D0x000ATODO: Customer/42/FirstName.Invalid = 2020-03-200x000D0x000ATODO: Customer/42/FirstName.IId = Agent:420x000D0x000ATODO: WE ARE STILL MISSING IMPLEMENTATION IN PRich (decision about how PropertyStreamLine.ParseAndStorePropertyStreamLine is meant to handle this)TODO: -----TODO: MOST PROBABLY PropertyStreamLine.ParseAndStorePropertyStreamLine shall do nothing at all. But a HTML-view or similar should be careful and maybe NOT show the value when Invalid is present
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/Description = Timestamp when invalidated / 'deleted'.0x000D0x000ANot necessary to use when a property is simply replaced by a new property, but because of NoRealDeletion, there has to be a mechanism which can at least simulate deletion of data.0x000D0x000ANote: If you need to remove or 'undo' an Invalid-operation, set Invalid to '0001-01-01' which is the default value for a DateTime in .NET (this is a practical approach because it is difficult to set Invalid the field Invalid (or something like that)).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Invalid/LongDescription = See also IsValid and DataRetention.0x000D0x000A0x000D0x000AWhen received over PropertyStream TryStore will usually delete the actual object from its object storage.0x000D0x000ATODO: Remember to implement this properly. For instance, for the following sequence\r0x000ATODO: Customer/42/FirstName = John0x000D0x000ATODO: Customer/42/FirstName.Invalid = 2020-03-200x000D0x000ATODO: Customer/42/FirstName.IId = Agent:420x000D0x000ATODO: WE ARE STILL MISSING IMPLEMENTATION IN PRich (decision about how PropertyStreamLine.ParseAndStorePropertyStreamLine is meant to handle this)TODO: -----TODO: MOST PROBABLY PropertyStreamLine.ParseAndStorePropertyStreamLine shall do nothing at all. But a HTML-view or similar should be careful and maybe NOT show the value when Invalid is present
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/EnumMember = Iid
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/PKTypeAttribute/Description = Invalidator id, that is entity which set Invalid for this property (or removed / 'undid' the invalidation by setting the value to '0001-01-01').
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/Iid/Description = Invalidator id, that is entity which set Invalid for this property (or removed / 'undid' the invalidation by setting the value to '0001-01-01').
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/EnumType = ARCCore.PP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/EnumMember = ExceptionText
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/Description = General property for logging of exceptions, usually set through HandleException.0x000D0x000A0x000D0x000ASee also log.0x000D0x000A0x000D0x000ATODO: Try to find a more suitable 'home' for this enum member. It is not really metadata which is all what PP is about
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/PKTypeAttribute/LongDescription = Usually used for PConcurrent for sending exception-text over the PropertyStream. (Note how PConcurrentwill (when LogContext is set) actually send ALL changes to any property, not only ExceptionText.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/Description = General property for logging of exceptions, usually set through HandleException.0x000D0x000A0x000D0x000ASee also log.0x000D0x000A0x000D0x000ATODO: Try to find a more suitable 'home' for this enum member. It is not really metadata which is all what PP is about
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PP/_Member/ExceptionText/LongDescription = Usually used for PConcurrent for sending exception-text over the PropertyStream. (Note how PConcurrentwill (when LogContext is set) actually send ALL changes to any property, not only ExceptionText.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/EnumType = ARCCore.PConcurrentP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/CorrespondingClass = ARCCore.PConcurrent
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/Description = Describes class PConcurrent.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/_Member/Heartbeat/PKTypeAttribute/EnumType = ARCCore.PConcurrentP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/_Member/Heartbeat/PKTypeAttribute/EnumMember = Heartbeat
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/_Member/Heartbeat/PKTypeAttribute/Type = System.DateTime
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/_Member/Heartbeat/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/PConcurrentP/_Member/Heartbeat/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/CorrespondingClass = ARCCore.ActualConnection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/Description = Describes class ActualConnection.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/EnumMember = Id
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/PKTypeAttribute/Description = When connection is used withStreamProcessor, the Id should be the same as the key used in the incoming / outgoing connection dictionary collection.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/Id/Description = When connection is used withStreamProcessor, the Id should be the same as the key used in the incoming / outgoing connection dictionary collection.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/EnumMember = ConnectionInstruction
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/Type = ARCCore.ConnectionInstruction
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/PKTypeAttribute/Description = Only relevant when we are an -Outgoing-.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionInstruction/Description = Only relevant when we are an -Outgoing-.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionDirection/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionDirection/PKTypeAttribute/EnumMember = ConnectionDirection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionDirection/PKTypeAttribute/Type = ARCCore.ConnectionDirection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionDirection/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ConnectionDirection/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKTypeAttribute/EnumMember = CountReceiveMessage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKLogAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKLogAttribute/EnumMember = CountReceiveMessage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountReceiveMessage/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKTypeAttribute/EnumMember = CountSendMessage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKLogAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKLogAttribute/EnumMember = CountSendMessage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/CountSendMessage/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/EnumMember = ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/Type = ARCCore.ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/Description = Note how this is stored both as ClientUpdatePosition (on the client side) and ClientUpdatePosition (on the server side).0x000D0x000A0x000D0x000AStreamProcessor (on the client side) also stores it locally 'on disk' and initializes from there.0x000D0x000A0x000D0x000AOn the server side (stored as ClientUpdatePosition), it is first stored by the connection itself as it is received from the client (once, for each connection). Afterwards, the server (StreamProcessor) increments the value and stores it successively as ClientUpdatePosition to the connection.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKTypeAttribute/LongDescription = Transferred from client to server as a special "ThisConnection" PropertyStreamLine.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKLogAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKLogAttribute/EnumMember = ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/Description = Note how this is stored both as ClientUpdatePosition (on the client side) and ClientUpdatePosition (on the server side).0x000D0x000A0x000D0x000AStreamProcessor (on the client side) also stores it locally 'on disk' and initializes from there.0x000D0x000A0x000D0x000AOn the server side (stored as ClientUpdatePosition), it is first stored by the connection itself as it is received from the client (once, for each connection). Afterwards, the server (StreamProcessor) increments the value and stores it successively as ClientUpdatePosition to the connection.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClientUpdatePosition/LongDescription = Transferred from client to server as a special "ThisConnection" PropertyStreamLine.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/EnumMember = SubscriptionAsRequestedByClient
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/Type = ARCCore.Subscription
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/Cardinality = WholeCollection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/Description = Originates from Subscription.0x000D0x000AOnly relevant for -Incoming-.0x000D0x000AThe subscription required by the client (as received over the PropertyStream).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/PKTypeAttribute/LongDescription = Transferred from client to server as a special "ThisConnection" PropertyStreamLine.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/Description = Originates from Subscription.0x000D0x000AOnly relevant for -Incoming-.0x000D0x000AThe subscription required by the client (as received over the PropertyStream).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/SubscriptionAsRequestedByClient/LongDescription = Transferred from client to server as a special "ThisConnection" PropertyStreamLine.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/EnumMember = ClosingReason
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/PKTypeAttribute/Description = Reason why this connection was closed
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ClosingReason/Description = Reason why this connection was closed
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/EnumMember = IsErrorCondition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/Description = Some kind of error condition has occured regarding data going back and forth, but the TCP/IP connection itself is probably sound.0x000D0x000AUsed when some data still has to be sent in order to inform partner of problem (because using UnderClosure could potentially block sending this data to the partner.0x000D0x000AWhen the partner receives a 'ThisConnection/ErrorConditionData' message it should consider the connection invalid (by setting IsErrorCondition) and maybe reinstate the connection.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/PKTypeAttribute/LongDescription = TODO: Consider turning into an enum with some different possible error conditions (currently we have ThisConnection/FilenameNotFound, see StreamProcessor).0x000D0x000A0x000D0x000ATODO: Implement (elsewhere) some monitoring mechanism for closing connections which have had ErrorCondition for some time0x000D0x000ATODO: (remember to give time in order to send all the error data)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/Description = Some kind of error condition has occured regarding data going back and forth, but the TCP/IP connection itself is probably sound.0x000D0x000AUsed when some data still has to be sent in order to inform partner of problem (because using UnderClosure could potentially block sending this data to the partner.0x000D0x000AWhen the partner receives a 'ThisConnection/ErrorConditionData' message it should consider the connection invalid (by setting IsErrorCondition) and maybe reinstate the connection.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/IsErrorCondition/LongDescription = TODO: Consider turning into an enum with some different possible error conditions (currently we have ThisConnection/FilenameNotFound, see StreamProcessor).0x000D0x000A0x000D0x000ATODO: Implement (elsewhere) some monitoring mechanism for closing connections which have had ErrorCondition for some time0x000D0x000ATODO: (remember to give time in order to send all the error data)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/EnumMember = ErrorConditionData
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/PKTypeAttribute/Description = Detailed explanation about IsErrorCondition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/ErrorConditionData/Description = Detailed explanation about IsErrorCondition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/EnumMember = UnderClosure
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/PKTypeAttribute/Description = TODO: IMPROVE ON THIS TEXT.0x000D0x000A0x000D0x000ASet to TRUE if to be closed and reinitialized.0x000D0x000A +Happens at initialization, whenever an exception occurs, or when TIMEOUT (no data received from partner / client for an extended period of time).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/UnderClosure/Description = TODO: IMPROVE ON THIS TEXT.0x000D0x000A0x000D0x000ASet to TRUE if to be closed and reinitialized.0x000D0x000A +Happens at initialization, whenever an exception occurs, or when TIMEOUT (no data received from partner / client for an extended period of time).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/MonkeyWrench/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/MonkeyWrench/PKTypeAttribute/EnumMember = MonkeyWrench
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/MonkeyWrench/PKTypeAttribute/Type = ARCCore.MonkeyWrench
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/MonkeyWrench/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/MonkeyWrench/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/EnumType = ARCCore.ActualConnectionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/EnumMember = PartnerIPAddress
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/PKTypeAttribute/Description = TODO: Use more strongly typing for this.0x000D0x000AIP-address of partner at 'other end' of connection.0x000D0x000AMostly relevant for -Incoming- (will then mean client ip-address).0x000D0x000AFor -Outgoing- member ConnectionInstruction will contain same information
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ActualConnectionP/_Member/PartnerIPAddress/Description = TODO: Use more strongly typing for this.0x000D0x000AIP-address of partner at 'other end' of connection.0x000D0x000AMostly relevant for -Incoming- (will then mean client ip-address).0x000D0x000AFor -Outgoing- member ConnectionInstruction will contain same information
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/CorrespondingClass = ARCCore.ConnectionInstruction
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/Description = Describes class ConnectionInstruction.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/EnumMember = ClientId
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/DefaultValue = Node1
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/IsObligatory = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/PKTypeAttribute/Description = The AgoRapide node-id for which this connection is relevant. Used for distributing over the PropertyStream information to the clients about which possible nodes they can connect to.0x000D0x000ANot used as of Apr 2020 (distributing of ConnectionInstruction has not been implemented.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ClientId/Description = The AgoRapide node-id for which this connection is relevant. Used for distributing over the PropertyStream information to the clients about which possible nodes they can connect to.0x000D0x000ANot used as of Apr 2020 (distributing of ConnectionInstruction has not been implemented.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/EnumMember = ServerHostName
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/IsObligatory = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/PKTypeAttribute/Description = The host (DNS or IP-address) for which to connect.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerHostName/Description = The host (DNS or IP-address) for which to connect.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/EnumMember = ServerPortNo
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/Type = System.Int32
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/IsObligatory = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/PKTypeAttribute/Description = The port number for which to connect.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ServerPortNo/Description = The port number for which to connect.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/EnumMember = ConnectionId
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/PKTypeAttribute/Description = Usually a combination of ClientId, ServerHostName and ServerPortNo.0x000D0x000AWill be set by Initialize if not set originally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/ConnectionId/Description = Usually a combination of ClientId, ServerHostName and ServerPortNo.0x000D0x000AWill be set by Initialize if not set originally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/EnumMember = DataTransferDirection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/Type = ARCCore.DataTransferDirection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/DefaultValue = Receive
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/IsObligatory = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/DataTransferDirection/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/EnumMember = Subscription
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/Type = ARCCore.Subscription
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/Cardinality = WholeCollection
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/PKTypeAttribute/Description = The actual subscripton. This is what the connecting party / (downstream) client would send over its TCP/IP connection to the (upstream) server.0x000D0x000AOnly relevant for -Receive-.0x000D0x000AFor Send it is assumed that everything is always sent.0x000D0x000ASee also SubscriptionAsRequestedByClient.0x000D0x000AWill be set to '+*' (everything) by Initialize for -Receive- if not set originally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Subscription/Description = The actual subscripton. This is what the connecting party / (downstream) client would send over its TCP/IP connection to the (upstream) server.0x000D0x000AOnly relevant for -Receive-.0x000D0x000AFor Send it is assumed that everything is always sent.0x000D0x000ASee also SubscriptionAsRequestedByClient.0x000D0x000AWill be set to '+*' (everything) by Initialize for -Receive- if not set originally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/MultipleConnectionUsage/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/MultipleConnectionUsage/PKTypeAttribute/EnumMember = MultipleConnectionUsage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/MultipleConnectionUsage/PKTypeAttribute/Type = ARCCore.MultipleConnectionUsage
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/MultipleConnectionUsage/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/MultipleConnectionUsage/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Sharding/PKTypeAttribute/EnumType = ARCCore.ConnectionInstructionP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Sharding/PKTypeAttribute/EnumMember = Sharding
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Sharding/PKTypeAttribute/Type = ARCCore.Sharding
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Sharding/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/ConnectionInstructionP/_Member/Sharding/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/CorrespondingClass = ARCCore.StreamProcessor
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/Description = Describes class StreamProcessor.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/EnumMember = LocalStorageFolder
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/PKTypeAttribute/Description = The local path to which new properties are stored. Should NOT end with any trailing DirectorySeparatorChar
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/LocalStorageFolder/Description = The local path to which new properties are stored. Should NOT end with any trailing DirectorySeparatorChar
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/EnumMember = IndividualStorageFileSize
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/DefaultValue = 100000000
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/IsObligatory = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/Description = Max size (in bytes) for a single storage file before a new file is created by call to -StreamProcessor.CreateNewStorageFile-.0x000D0x000ANote: The actual resulting file-size will vary depending on actual method used for measuring file-size.0x000D0x000A0x000D0x000AThe value to be chosen will affect in the following manner:0x000D0x000A0x000D0x000A1) Memory usage for CoreDB / ArmDB (smaller value is better). These nodes do not need to hold the whole database in memory, but they will as a minimum have to read the last (the current) storage file into memory, and possible also some older files for subscribing clients which do not yet have an updated copy of the data relevant for their Subscription.0x000D0x000A(note that memory used will under normal circumstances be more than double the size of the storage file.)0x000D0x000A0x000D0x000A2) Response time at startup (smaller value is better). For instance for CoreDB, if all clients are 'up-to-date', then having a small current storage file is advantageous because only that (last) file have to be read into memory at startup.0x000D0x000A0x000D0x000A3) DataRetention (smaller value is better). Smaller filesize would mean each file gets processed quicker, meaning it should affect less the performance of more critical processing (data retention is assumed not time-critical / performance critical).0x000D0x000A0x000D0x000A4) If a file-system (file copy) method of backup is used, then more copying will be needed the greater the file size chosen (smaller value is better).0x000D0x000ANOTE: You can as well do backup through an Subscription, instead of by file-copying at the CoreDB server.0x000D0x000A5) Debugging / administrative tasks. Opening of a storage file in an editor (smaller value is maybe better). Changing content of storage values (higher value is maybe better, a lesser number of files to contend with).0x000D0x000A0x000D0x000A6) The actual number of files stored in the LocalStorageFolder (higher value is better). All filenames are read by -Start- at startup so having a huge amount of files may be less optimal.0x000D0x000A0x000D0x000A7) Coordination among different CoreDB instances (smaller value is better). (currently not implemented, Apr 2020). It is assumed much easier to coordinate with smaller filesizes. Like calculating hash-values in order to ensure identical files for instance, which in turn will ensure that ClientUpdatePosition between different CoreDB instances are compatible.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/PKTypeAttribute/LongDescription = Note that setting a really huge value could breach limits of object storage in RAM (like number of items in a List0x003C0x003E (32 bit index) and similar).0x000D0x000AA value of up to 1GB is considered quite safe though.0x000D0x000A" +TODO: Research further these limitations
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/Description = Max size (in bytes) for a single storage file before a new file is created by call to -StreamProcessor.CreateNewStorageFile-.0x000D0x000ANote: The actual resulting file-size will vary depending on actual method used for measuring file-size.0x000D0x000A0x000D0x000AThe value to be chosen will affect in the following manner:0x000D0x000A0x000D0x000A1) Memory usage for CoreDB / ArmDB (smaller value is better). These nodes do not need to hold the whole database in memory, but they will as a minimum have to read the last (the current) storage file into memory, and possible also some older files for subscribing clients which do not yet have an updated copy of the data relevant for their Subscription.0x000D0x000A(note that memory used will under normal circumstances be more than double the size of the storage file.)0x000D0x000A0x000D0x000A2) Response time at startup (smaller value is better). For instance for CoreDB, if all clients are 'up-to-date', then having a small current storage file is advantageous because only that (last) file have to be read into memory at startup.0x000D0x000A0x000D0x000A3) DataRetention (smaller value is better). Smaller filesize would mean each file gets processed quicker, meaning it should affect less the performance of more critical processing (data retention is assumed not time-critical / performance critical).0x000D0x000A0x000D0x000A4) If a file-system (file copy) method of backup is used, then more copying will be needed the greater the file size chosen (smaller value is better).0x000D0x000ANOTE: You can as well do backup through an Subscription, instead of by file-copying at the CoreDB server.0x000D0x000A5) Debugging / administrative tasks. Opening of a storage file in an editor (smaller value is maybe better). Changing content of storage values (higher value is maybe better, a lesser number of files to contend with).0x000D0x000A0x000D0x000A6) The actual number of files stored in the LocalStorageFolder (higher value is better). All filenames are read by -Start- at startup so having a huge amount of files may be less optimal.0x000D0x000A0x000D0x000A7) Coordination among different CoreDB instances (smaller value is better). (currently not implemented, Apr 2020). It is assumed much easier to coordinate with smaller filesizes. Like calculating hash-values in order to ensure identical files for instance, which in turn will ensure that ClientUpdatePosition between different CoreDB instances are compatible.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IndividualStorageFileSize/LongDescription = Note that setting a really huge value could breach limits of object storage in RAM (like number of items in a List0x003C0x003E (32 bit index) and similar).0x000D0x000AA value of up to 1GB is considered quite safe though.0x000D0x000A" +TODO: Research further these limitations
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/EnumMember = CurrentlyInitializing
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/PKTypeAttribute/Description = Set to TRUE at initialization (signals for instance ReceiveAndDistribute that it can only queue messages, not process them).0x000D0x000A0x000D0x000AWith a local data storage (that is, when DoNotStoreLocally is false (default)), initialization can take quite some time.0x000D0x000A0x000D0x000ASee also TimestampIsOld
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CurrentlyInitializing/Description = Set to TRUE at initialization (signals for instance ReceiveAndDistribute that it can only queue messages, not process them).0x000D0x000A0x000D0x000AWith a local data storage (that is, when DoNotStoreLocally is false (default)), initialization can take quite some time.0x000D0x000A0x000D0x000ASee also TimestampIsOld
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/EnumMember = ClientUpdatePositionPath
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/PKTypeAttribute/Description = Complete path to file containing ClientUpdatePosition.0x000D0x000AOnly relevant if outgoing connections (with -Receive-) are to be made.0x000D0x000ASet by -Start-.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePositionPath/Description = Complete path to file containing ClientUpdatePosition.0x000D0x000AOnly relevant if outgoing connections (with -Receive-) are to be made.0x000D0x000ASet by -Start-.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/EnumMember = ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/Type = ARCCore.ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKTypeAttribute/Description = Note how this is stored both as ClientUpdatePosition (on the client side) and ClientUpdatePosition (on the server side).0x000D0x000AStreamProcessor (on the client side) also stores it locally 'on disk' and initializes from there.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKLogAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKLogAttribute/EnumMember = ClientUpdatePosition
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/ClientUpdatePosition/Description = Note how this is stored both as ClientUpdatePosition (on the client side) and ClientUpdatePosition (on the server side).0x000D0x000AStreamProcessor (on the client side) also stores it locally 'on disk' and initializes from there.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/EnumMember = IncomingConnectionsPortNo
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/Type = System.Int32
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/PKTypeAttribute/Description = If not set, then class will not listen for incoming connections (meaning that our application is probably a Client).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/IncomingConnectionsPortNo/Description = If not set, then class will not listen for incoming connections (meaning that our application is probably a Client).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/EnumMember = UnderClosure
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/PKTypeAttribute/Description = Set to TRUE if to be closed, whenever an exception occurs or when class goes out of scope
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/UnderClosure/Description = Set to TRUE if to be closed, whenever an exception occurs or when class goes out of scope
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/EnumMember = WriteToConsole
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/PKTypeAttribute/Description = If true then incoming data (from other nodes will be written to console.0x000D0x000ANote that data with HasLocalOrigin will not be written to console (the local originator can to that by 'itself' instead, if so desired)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/WriteToConsole/Description = If true then incoming data (from other nodes will be written to console.0x000D0x000ANote that data with HasLocalOrigin will not be written to console (the local originator can to that by 'itself' instead, if so desired)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/EnumMember = Timestamp
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/Type = System.DateTime
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/PKTypeAttribute/Description = The timestamp inserted at regular intervals in the PropertyStream according to TimestampResolution.0x000D0x000ANote how AddTimestampToPropertyStreamAsRequired uses a format reflecting the resolution, for instance if resolution is in whole minutes, then timestamp will be in format yyyy-MM-dd HH:mm.0x000D0x000A0x000D0x000AThis property can always be assumed to be at the top hierarchical level in the property stream. (outside can look for it at the top level in the hierarchical data storage).0x000D0x000A0x000D0x000AGets specific treatmeant by TryStore (see -CurrentTimestamp-).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/Timestamp/Description = The timestamp inserted at regular intervals in the PropertyStream according to TimestampResolution.0x000D0x000ANote how AddTimestampToPropertyStreamAsRequired uses a format reflecting the resolution, for instance if resolution is in whole minutes, then timestamp will be in format yyyy-MM-dd HH:mm.0x000D0x000A0x000D0x000AThis property can always be assumed to be at the top hierarchical level in the property stream. (outside can look for it at the top level in the hierarchical data storage).0x000D0x000A0x000D0x000AGets specific treatmeant by TryStore (see -CurrentTimestamp-).
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/EnumMember = TimestampIsOld
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/PKTypeAttribute/Description = A warning sent by StreamProcessor to OutsideLocalReceiver when it knows that data as served is out of date.0x000D0x000A0x000D0x000AWill normally correspond to CurrentlyInitializing.0x000D0x000A0x000D0x000ATODO: Expand use of this to also include when Stream processor knows that it has connection problems with TODO: an upstream source of data.0x000D0x000A0x000D0x000AThis property can always be assumed to be at the top hierarchical level in the property stream. (outside can look for it at the top level in the hierarchical data storage)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampIsOld/Description = A warning sent by StreamProcessor to OutsideLocalReceiver when it knows that data as served is out of date.0x000D0x000A0x000D0x000AWill normally correspond to CurrentlyInitializing.0x000D0x000A0x000D0x000ATODO: Expand use of this to also include when Stream processor knows that it has connection problems with TODO: an upstream source of data.0x000D0x000A0x000D0x000AThis property can always be assumed to be at the top hierarchical level in the property stream. (outside can look for it at the top level in the hierarchical data storage)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/EnumMember = TimestampResolution
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/Type = System.TimeSpan
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/Description = The time interval between each timestamp update in the PropertyStream.0x000D0x000AUsed by AddTimestampToPropertyStreamAsRequired.0x000D0x000A0x000D0x000AOnly relevant for CoreDB (there should only be one source of timestamps in the system).0x000D0x000A(If this value is present, then StreamProcessor will insert timestamps at the specified interval).0x000D0x000A0x000D0x000ABackground: The PropertyStream principle lends itself well to keeping historical track of changes in your database. A method for timestamping the updates is therefore also natural to include.0x000D0x000A0x000D0x000ABut, by default, timestamps are not stored with each PropertyStream-line. (you might have expected each property stream line to start with a timestamp like '2020-04-26 11:02:37' but that is not the case.)0x000D0x000A0x000D0x000AInstead, timestamps are inserted at regular intervals in the stream as Timestamp = 0x005Byyyy-MM-dd HH:mm ...0x005D. This is a practical approach reflecting the fact that consecutive timestamps will often be identical anyway and therefore just taking up space.0x000D0x000A0x000D0x000AThe higher value chosen, the less space timestamps will take up in storage and transfer.0x000D0x000A0x000D0x000ASet to the highest value acceptable according to your time-resolution needs. If you have a need for a one-minute accuracy for timestamps, set this value to 1 minute.0x000D0x000A0x000D0x000AIf you want exact values for when properties are created (down to the millisecond), set a resolution of one millisecond.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/PKTypeAttribute/LongDescription = Properties for which we want to store in-memory a Created, / Invalid field or similar are given the latest timestamp value found.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/Description = The time interval between each timestamp update in the PropertyStream.0x000D0x000AUsed by AddTimestampToPropertyStreamAsRequired.0x000D0x000A0x000D0x000AOnly relevant for CoreDB (there should only be one source of timestamps in the system).0x000D0x000A(If this value is present, then StreamProcessor will insert timestamps at the specified interval).0x000D0x000A0x000D0x000ABackground: The PropertyStream principle lends itself well to keeping historical track of changes in your database. A method for timestamping the updates is therefore also natural to include.0x000D0x000A0x000D0x000ABut, by default, timestamps are not stored with each PropertyStream-line. (you might have expected each property stream line to start with a timestamp like '2020-04-26 11:02:37' but that is not the case.)0x000D0x000A0x000D0x000AInstead, timestamps are inserted at regular intervals in the stream as Timestamp = 0x005Byyyy-MM-dd HH:mm ...0x005D. This is a practical approach reflecting the fact that consecutive timestamps will often be identical anyway and therefore just taking up space.0x000D0x000A0x000D0x000AThe higher value chosen, the less space timestamps will take up in storage and transfer.0x000D0x000A0x000D0x000ASet to the highest value acceptable according to your time-resolution needs. If you have a need for a one-minute accuracy for timestamps, set this value to 1 minute.0x000D0x000A0x000D0x000AIf you want exact values for when properties are created (down to the millisecond), set a resolution of one millisecond.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/TimestampResolution/LongDescription = Properties for which we want to store in-memory a Created, / Invalid field or similar are given the latest timestamp value found.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/EnumMember = DoNotStoreLocally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/Description = For Client, incoming data (as received from a -Outgoing-) is possible to store BOTH to disk, AND to (normally) a PRich.0x000D0x000A0x000D0x000AAt application startup the data stored to disk can then be read locally directly into the PRich, meaning that the application only has to ask for updated information, not the whole picture.0x000D0x000A0x000D0x000ASet to TRUE if this is not desired. That is, when no local storage is desired (for instance if you only want an ephemeral live-stream log window for instance). Be careful so your subscription correspondingly only asks for relatively new data, not historical data (typical by setting ClientUpdatePosition to OnlyNewDataIsRequestedInstance). (If not, you will receive the whole database every you connect to the CoreDB.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/PKTypeAttribute/LongDescription = Note that for CoreDB incoming data (as received from a -Incoming-) is supposed to always be stored locally, meaning this property is not relevant.0x000D0x000A0x000D0x000ANote that for ArmDB incoming data (as received from a -Outgoing-, that is, from a CoreDB) is supposed to always be stored locally, meaning this property is not relevant.0x000D0x000A0x000D0x000ANote that for ArmDB incoming data (as received from a -Incoming-, that is, from a Client) is supposed to always be cached locally until sent to CoreDB, meaning this property is not relevant.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/Description = For Client, incoming data (as received from a -Outgoing-) is possible to store BOTH to disk, AND to (normally) a PRich.0x000D0x000A0x000D0x000AAt application startup the data stored to disk can then be read locally directly into the PRich, meaning that the application only has to ask for updated information, not the whole picture.0x000D0x000A0x000D0x000ASet to TRUE if this is not desired. That is, when no local storage is desired (for instance if you only want an ephemeral live-stream log window for instance). Be careful so your subscription correspondingly only asks for relatively new data, not historical data (typical by setting ClientUpdatePosition to OnlyNewDataIsRequestedInstance). (If not, you will receive the whole database every you connect to the CoreDB.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocally/LongDescription = Note that for CoreDB incoming data (as received from a -Incoming-) is supposed to always be stored locally, meaning this property is not relevant.0x000D0x000A0x000D0x000ANote that for ArmDB incoming data (as received from a -Outgoing-, that is, from a CoreDB) is supposed to always be stored locally, meaning this property is not relevant.0x000D0x000A0x000D0x000ANote that for ArmDB incoming data (as received from a -Incoming-, that is, from a Client) is supposed to always be cached locally until sent to CoreDB, meaning this property is not relevant.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/EnumMember = DoNotStoreLocalOriginLocally
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/PKTypeAttribute/Description = Means 'do not store local origin locally but wait until it gets confirmed by core storage'.0x000D0x000A0x000D0x000ASet to TRUE if you do not want locally orginated data to be stored directly locally0x000D0x000A0x000D0x000AThis is normally relevant to do when you have outgoing connections, one for sending to CoreDB and one subscribing to the same content again.0x000D0x000ASetting this value to TRUE will then ensure that locally originated data do not get stored twice (and also ensure that data is not stored permanently on the client side (Client) before it has been confirmed stored by CoreDB.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/DoNotStoreLocalOriginLocally/Description = Means 'do not store local origin locally but wait until it gets confirmed by core storage'.0x000D0x000A0x000D0x000ASet to TRUE if you do not want locally orginated data to be stored directly locally0x000D0x000A0x000D0x000AThis is normally relevant to do when you have outgoing connections, one for sending to CoreDB and one subscribing to the same content again.0x000D0x000ASetting this value to TRUE will then ensure that locally originated data do not get stored twice (and also ensure that data is not stored permanently on the client side (Client) before it has been confirmed stored by CoreDB.)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/EnumMember = CacheDiskWrites
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/Type = System.Boolean
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/Description = If TRUE then will write the PropertyStream to disk in bigger chunks, thereby increasing performance.0x000D0x000A0x000D0x000AThis entails some risk of loosing data (especially with CoreDB) because of ungraceful shutdown to application.0x000D0x000A(Client / ArmDB is less vulnerable since ClientUpdatePosition is normally stored at the same time.).0x000D0x000AMake little sense to use for CoreDB unless storage-speed is too slow. More relevant for Client / ArmDB since these will more often read big amounts of historical data from CoreDB, especially the first time a new node is run.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/PKTypeAttribute/LongDescription = NOTE: Implementation will have to add some graceful application shutdown mechanism, so at least the write-to-disk thread does not suffer a NOTE: ThreadAbortException at normal shutdowns. This is not implemented as of April 20200x000D0x000Ar0x000ANOTE: Value can probably be changed from FALSE to TRUE while running, but not the other way around (could lead to wrong ordering of writing to disk at moment of change)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/Description = If TRUE then will write the PropertyStream to disk in bigger chunks, thereby increasing performance.0x000D0x000A0x000D0x000AThis entails some risk of loosing data (especially with CoreDB) because of ungraceful shutdown to application.0x000D0x000A(Client / ArmDB is less vulnerable since ClientUpdatePosition is normally stored at the same time.).0x000D0x000AMake little sense to use for CoreDB unless storage-speed is too slow. More relevant for Client / ArmDB since these will more often read big amounts of historical data from CoreDB, especially the first time a new node is run.0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CacheDiskWrites/LongDescription = NOTE: Implementation will have to add some graceful application shutdown mechanism, so at least the write-to-disk thread does not suffer a NOTE: ThreadAbortException at normal shutdowns. This is not implemented as of April 20200x000D0x000Ar0x000ANOTE: Value can probably be changed from FALSE to TRUE while running, but not the other way around (could lead to wrong ordering of writing to disk at moment of change)
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/EnumMember = CopyFileStructureFromCore
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/Description = TODO: Rename into something better, like 'CopyFileStructureFromPartner' or similar.0x000D0x000A0x000D0x000AIf TRUE, will copy the exact file structure (through information given in ClientUpdatePosition). That is, instead of independently decide when to add new storage files, StreamProcessor will use the same filenames as received from its 'partner'.0x000D0x000A0x000D0x000AThis is useful in situations where you want to use -Simultaneous.0x000D0x000A0x000D0x000ANote how this only gives meaning for -IsAll- starting from ClientDatastoreIsEmpty.0x000D0x000A0x000D0x000ANOTE: Support for TRUE not implemented as of Apr 2020
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/PKTypeAttribute/LongDescription = By using Hash, exact copies of files can be maintained between servers
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/Description = TODO: Rename into something better, like 'CopyFileStructureFromPartner' or similar.0x000D0x000A0x000D0x000AIf TRUE, will copy the exact file structure (through information given in ClientUpdatePosition). That is, instead of independently decide when to add new storage files, StreamProcessor will use the same filenames as received from its 'partner'.0x000D0x000A0x000D0x000AThis is useful in situations where you want to use -Simultaneous.0x000D0x000A0x000D0x000ANote how this only gives meaning for -IsAll- starting from ClientDatastoreIsEmpty.0x000D0x000A0x000D0x000ANOTE: Support for TRUE not implemented as of Apr 2020
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CopyFileStructureFromCore/LongDescription = By using Hash, exact copies of files can be maintained between servers
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountIncomingConnections/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountIncomingConnections/PKTypeAttribute/EnumMember = CountIncomingConnections
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountIncomingConnections/PKTypeAttribute/Type = System.Int32
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountIncomingConnections/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountIncomingConnections/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutgoingConnections/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutgoingConnections/PKTypeAttribute/EnumMember = CountOutgoingConnections
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutgoingConnections/PKTypeAttribute/Type = System.Int32
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutgoingConnections/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutgoingConnections/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/EnumMember = CountOutsideLocalReceiver
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKTypeAttribute/Description = Count of calls to OutsideLocalReceiver.0x000D0x000AUseful for debugging, especially for API's (ensuring that subscription is active).0x000D0x000ACount of PropertyStreamLine sent to OutsideLocalReceiver (after initialization) (because they were received from an 'outside' source, that is, from a Subscription to PropertyStream).0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKLogAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKLogAttribute/EnumMember = CountOutsideLocalReceiver
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountOutsideLocalReceiver/Description = Count of calls to OutsideLocalReceiver.0x000D0x000AUseful for debugging, especially for API's (ensuring that subscription is active).0x000D0x000ACount of PropertyStreamLine sent to OutsideLocalReceiver (after initialization) (because they were received from an 'outside' source, that is, from a Subscription to PropertyStream).0x000D0x000A
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/EnumMember = CountReceiveLocalOrigin
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKTypeAttribute/Description = Count of PropertyStreamLine with HasLocalOrigin.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKLogAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKLogAttribute/EnumMember = CountReceiveLocalOrigin
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveLocalOrigin/Description = Count of PropertyStreamLine with HasLocalOrigin.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/EnumMember = CountReceiveNonLocalOrigin
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/Type = System.Int64
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKTypeAttribute/Description = Count of PropertyStreamLine not with HasLocalOrigin.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKLogAttribute/EnumType = ARCCore.StreamProcessorP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKLogAttribute/EnumMember = CountReceiveNonLocalOrigin
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StreamProcessorP/_Member/CountReceiveNonLocalOrigin/Description = Count of PropertyStreamLine not with HasLocalOrigin.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/EnumType = ARCCore.StorageFileP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/AREnumType = PropertyKeyEnum
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/CorrespondingClass = ARCCore.StorageFile
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/Description = Describes class StorageFile.0x000D0x000A0x000D0x000AImplemented only in order to store some ideas about Hash.
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Filename/PKTypeAttribute/EnumType = ARCCore.StorageFileP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Filename/PKTypeAttribute/EnumMember = Filename
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Filename/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Filename/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Filename/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/EnumType = ARCCore.StorageFileP
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/EnumMember = Hash
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/Type = System.String
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/IsObligatory = False
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/Description = Hash of storage file. Not implemented as of Apr 2020. It is envisaged to store hash-value as last line in storage file. In this case the hash must be the hash of the file excluding the last line
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/PKTypeAttribute/LongDescription = Can be used in connection with CopyFileStructureFromCore in order to ensure exact copies of storage structure
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/Description = Hash of storage file. Not implemented as of Apr 2020. It is envisaged to store hash-value as last line in storage file. In this case the hash must be the hash of the file excluding the last line
Assembly/ARCCore/AREnumType/PropertyKeyEnum/StorageFileP/_Member/Hash/LongDescription = Can be used in connection with CopyFileStructureFromCore in order to ensure exact copies of storage structure
Assembly/ARCCore/AREnumType/OrdinaryEnum/_Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/EnumType = ARCCore.Cardinality
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/AREnumType = OrdinaryEnum
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/Description = Describes how multiple instances of a property is supposed to be handled.0x000D0x000A0x000D0x000ABy a 'property' in this context we usually mean a PValue0x003CT0x003E object, in other words something that is part of a bigger entity like PRich (like how 'FirstName' or 'PhoneNumber' is part of a 'Customer' entity)0x000D0x000AUsed by for instance 1) -ParseAndStore- when building up a hierarchical object storage. 2) IP-implementations for internal arranging of properties0x000D0x000A3) ARCAPI in order to provide API-methods0x000D0x000A
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/HistoryOnly/EnumType = ARCCore.Cardinality
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/HistoryOnly/EnumMember = HistoryOnly
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/HistoryOnly/Description = The default value.0x000D0x000A0x000D0x000AOnly a single instance is relevant for a given point of time.0x000D0x000ATypical example would be 'Customer/Firstname'.0x000D0x000AThe PropertyStream / API-calls should look something like this:0x000D0x000ACustomer/42/Firstname = 'John' // Set name0x000D0x000ACustomer/42/Firstname = 'John Martin' // Change name0x000D0x000ACustomer/42/Firstname.SetInvalid = 2020-03-20 // 'Delete' FirstName0x000D0x000A0x000D0x000ANote that due to intrinsic traits of the PropertyStream concept, history of values will always be available, therefore the name HistoryOnly. (availability of history may of course be limited by any -DataRetention mechanisms used though).
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/WholeCollection/EnumType = ARCCore.Cardinality
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/WholeCollection/EnumMember = WholeCollection
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/WholeCollection/Description = Values are always set as a whole (there is no need or no meaning in setting or deleting individual items)0x000D0x000ATypical example could be PizzaOrder/Extra0x000D0x000AThe PropertyStream / API-calls should look something like this:0x000D0x000APizzaOrder/42/Extra = Pepperoni, Cheese, Sauce // Set whole collection0x000D0x000APizzaOrder/42/Extra.Invalid = 2020-03-20 // 'Delete' all items.0x000D0x000A0x000D0x000ANote that you can use WholeCollection as a simple mechanism for supporting ManyToManyRelations.0x000D0x000A
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/WholeCollection/LongDescription = The internal representation in IP would probably be a List0x003CPValue0x003CT0x003E0x003E (this would be more memory-efficient than IndividualItems)0x000D0x000A0x000D0x000ANote that in principle all data that can be stored as WholeCollection can also be stored as IndividualItems but the client interaction is probably easier to implement with the former. You should also consider how you want historical representations of changes in the data to look when choosing between these two.
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/IndividualItems/EnumType = ARCCore.Cardinality
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/IndividualItems/EnumMember = IndividualItems
Assembly/ARCCore/AREnumType/OrdinaryEnum/Cardinality/_Member/IndividualItems/Description = Values are supposed to be set and 'deleted' individually.0x000D0x000ATypical example could be Customer/PhoneNumber0x000D0x000AThe PropertyStream / API-calls should look something like this:0x000D0x000ACustomer/42/PhoneNumber/90534333 // Add number0x000D0x000ACustomer/42/PhoneNumber/40178178 // Add number0x000D0x000ACustomer/42/PhoneNumber/90534333.Invalid = 2020-03-20 // 'Delete' individual number0x000D0x000ACustomer/42/PhoneNumber/Invalid = 2020-03-21 // 'Delete' all numbers0x000D0x000A0x000D0x000ABecause of IdLooseStorage the actual values must be used as identifisers. 0x000D0x000AThe collection of items is stored in a IPII instance (typical PII).0x000D0x000A(specially recognized by TryParse and TryStore.0x000D0x000A)0x000D0x000ANote that in principle all data that can be stored as WholeCollection can also be stored as IndividualItems but the client interaction is probably easier to implement with the former. You should also consider how you want historical representations of changes in the data to look when choosing between these two.0x000D0x000A0x000D0x000ANote that you can use IndividualItems as a simple mechanism for supporting ManyToManyRelations.0x000D0x000A
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/EnumType = ARCCore.PropertyStreamLinePrefix
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/AREnumType = OrdinaryEnum
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/Description = Describes some recommended prefixed to use in a PropertyStreamLine.0x000D0x000Adt/ = data, cmd/ = command, log/ = log and doc/ = documentation.0x000D0x000A0x000D0x000AThey are not obligatory and not enforced by AgoRapide. Consider them as guidelines only. Naming is mimicking best practices used in for instance MQTT messaging.
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/dt/EnumType = ARCCore.PropertyStreamLinePrefix
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/dt/EnumMember = dt
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/dt/Description = Data, like dt/
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/cmd/EnumType = ARCCore.PropertyStreamLinePrefix
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/cmd/EnumMember = cmd
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/cmd/Description = Command, like cmd/
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/log/EnumType = ARCCore.PropertyStreamLinePrefix
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/log/EnumMember = log
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/log/Description = Log, like log/0x000D0x000A0x000D0x000AStandardAgoRapideCode practises using 'log/' as first element of context for log-data. This is in order to easily discern log data from the ordinary PropertyStream data.0x000D0x000AThis is a choice made out of the assumption that log data is special, for instance, it is not critical to keep it for very long periods of time so DataRetention will be done differently.0x000D0x000A0x000D0x000ALogging is kind of inbuilt in AgoRapide. The PropertyStream 'is' the log and if you need to insert additional log0x000D0x000Ainformation they are just new properties to be added to the stream.0x000D0x000A0x000D0x000AA logging console is likewise just a Client which subscribes to the whole or part of the PropertyStream (for instance like Subscripton = 'log/*'). 0x000D0x000ANOTE: You could have as many log-consoles as you prefer (each with different subscriptions), in order to follow specific parts of the system.0x000D0x000A0x000D0x000AIn addition to the inbuilt log-characteristics of the PropertyStream you can insert additional log-data through two main methods:0x000D0x000A0x000D0x000AMethod A) Call to Log (this can also be instructed to log to the local console). Note overloads to this methods encouraging you to supply a set of data-points (set of (key, values) tuples), instead of just some loose text.0x000D0x000ATODO. GIVE EXAMPLE OF THIS.0x000D0x000A0x000D0x000AMethod B) Use a class like PConcurrent with concept of LogContext, this will log any changes to the class (especially useful for exposing ExposingApplicationState).0x000D0x000A0x000D0x000ASee also Log, HandleException, ExposingApplicationState.
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/doc/EnumType = ARCCore.PropertyStreamLinePrefix
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/doc/EnumMember = doc
Assembly/ARCCore/AREnumType/OrdinaryEnum/PropertyStreamLinePrefix/_Member/doc/Description = Documentation, like doc/.0x000D0x000ASee also LinkInsertionInDocumentation.
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/EnumType = ARCCore.MultipleConnectionUsage
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/AREnumType = OrdinaryEnum
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/Description = Enables fault-tolerance by describing use of multiple connections0x000D0x000A
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/LongDescription = See also Sharding which enables load-balancing at the CoreDB-level.
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Admin/EnumType = ARCCore.MultipleConnectionUsage
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Admin/EnumMember = Admin
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Admin/Description = Connection is a special administrative connection to a central 'command-and-control' server which instructs which connections to make.0x000D0x000AAccompanying Subscription will normally be something like 'ConnectionInstruction/*'.0x000D0x000A0x000D0x000ANote implemented as of May 2020.
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/RoundRobin/EnumType = ARCCore.MultipleConnectionUsage
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/RoundRobin/EnumMember = RoundRobin
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/RoundRobin/Description = This connection to be used in a turn based system, together with other connections with RoundRobin.0x000D0x000A0x000D0x000AWhenever multiple Send connections are specified, they are supposed to be used one-at-a-time (like in a round-robin fashion, with a single property sent to only one of them), and any connection temporarily out-of-order shall be ignored.-0x000D0x000A0x000D0x000ALikewise, for -Receive-, only a single one should be subscribed to at a given time.0x000D0x000A0x000D0x000AThis is the natural setup for a ArmDB or Client.0x000D0x000A0x000D0x000ANote: All connections are supposed to be kept open at all times, and their health-status recorded, so that StreamProcessor is able to immediately switch connections0x000D0x000A0x000D0x000ANOTE: Not implemented as of Mar 2020.0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Simultaneous/EnumType = ARCCore.MultipleConnectionUsage
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Simultaneous/EnumMember = Simultaneous
Assembly/ARCCore/AREnumType/OrdinaryEnum/MultipleConnectionUsage/_Member/Simultaneous/Description = TODO: Rename into something else. Mirroring for instance.0x000D0x000A0x000D0x000AThis connection to be used simultaneously with other connections with Simultaneous0x000D0x000A0x000D0x000AWhenever multiple connections of the same DataTransferDirection are specified, they are supposed to be used simultaneously at all times.0x000D0x000A0x000D0x000AThis is the natural setup for multiple CoreDB instances communicating and synchronizing among themselves.0x000D0x000A(ArmDB / Client can send their data to 'wherever they wish' and then it is up to the CoreDB to sort it out themselves.)0x000D0x000ANOTE: Not implemented as of Mar 2020.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/_Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/AREnumType = DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/Description = Contains short descriptions of the different 'official' AgoRapide components.0x000D0x000A0x000D0x000AAgoRapide is 'infinitely' complex as a concept.0x000D0x000AIn order to make it easier for you to get started AgoRapide has been split into smaller easy-to-understand parts.0x000D0x000AThe minimum setup for you to use is the ARADB application which itself links to only one library component, -ARCCore.0x000D0x000A0x000D0x000AAll the other applications and components may be added at a later stage, as you get more familiar with the concepts and as our application matures and your needs change.0x000D0x000A0x000D0x000AThe splitting of AgoRapide into separate components actually serves multiple purposes:0x000D0x000A1) To clearly state what are the minimum requirements / to make it easy to get started (as already explained)0x000D0x000A2) To keep discipline when developing AgoRapide, by clearly stating the interfaces and avoiding a monolithic structure.0x000D0x000A3) To encourage other developers to participiate in the development of AgoRapide. (By having each component in its separate (thereby smaller) repository the threshold for delegating pull-rights becomes lower for instance.).0x000D0x000A0x000D0x000ANote that there is nothing in the way of collecting all AgoRapide component libraries into a single library (.DLL in Windows terms) called ARCComplete (preferable with the help of some automated tool). This might be the preferred approach for experienced users of AgoRapide, having all the functionality in a single package.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/LongDescription = A component may be either 0x000D0x000Aa library (.DLL in Windows terms, name starting with ARC... like ARCCore), or an application (.EXE in Windows terms, name starting with ARA... like ARADB)0x000D0x000A0x000D0x000AMuch of the functionality described in the additional components will be provided in the form of classes implementing BasePKAttribute, that is keeping to the basic principle in AgoRapide of TaggingOfPropertyKeys, giving you at-a-glance information about everything essential to a given field.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCCore/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCCore/EnumMember = ARCCore
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCCore/Description = A necessary library (.DLL in Windows terms) that every ARNodeType should link to.0x000D0x000A0x000D0x000AContains the basic structure of AgoRapide, like BasePKAttribute, IP and StreamProcessor.0x000D0x000A0x000D0x000ANote that if your only need is to SEND single PropertyStreamLines to a CoreDB then there is actually little purpose in linking to ARCCore.0x000D0x000AYou just open a standard TCP/IP connection and send the lines straight away. See ARCDoc for an example of this.0x000D0x000A(This is actually quite a unique capability of AgoRapide as a data storage system, that no client libraries are needed.).0x000D0x000A(Remember though that minimal encoding will be needed, like encoding line endings into 0xoooo000D0xoooo000A, see especially EncodeValuePartStringToPropertyStreamFormat.)
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARADB/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARADB/EnumMember = ARADB
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARADB/Description = An application constituting the full functionality of a CoreDB (linking to ARCCore).0x000D0x000ATODO: Add reading of instructions from command-line (for outgoing connections).0x000D0x000ATODO: This will enable use of this program also as ArmDB.0x000D0x000A0x000D0x000AThe standard version of ARADB may also fully constitute the functionality of ArmDB, or even a Client but usually you will add some ApplicationSpecificCode to them, especially Client.0x000D0x000A(when adding functionality, clone the repository for ARADB and expand from there.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARADB/LongDescription = Note: Almost all of the actual code resides in ARCCore (which is the only AgoRapide component library that this program links to as standard). ARADB is only the minimum packaging needed in order to run as an independent application / executable.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAClient/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAClient/EnumMember = ARAClient
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAClient/Description = A template application for a Client (linking to ARCCore).0x000D0x000A0x000D0x000AContains some sample code for you to use as building blocks for your own Client application.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAClient/LongDescription = Note that this application also links to ARCDoc. This is done in order to demonstrate some functionality of AgoRapide and have some properties available for generating a sizeable chunk of PropertyStream. You do not have to do this in your own application, linking to ARCCore is sufficient as a start.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCDoc/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCDoc/EnumMember = ARCDoc
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCDoc/Description = A library supporting documentation and demonstrating usage of AgoRapide.0x000D0x000A0x000D0x000AOffers the following functionality:0x000D0x000A0x000D0x000A1) Generation of documentation by extracting BaseAttribute tags (like this one) for the different parts of your application. Compiling everything together in a coherent HTML presentation with links between the different topics.0x000D0x000A0x000D0x000A2) Demonstration of practical use of AgoRapide, through small easy to follow examples, like:0x000D0x000A a) 'Normal' AgoRapide classes and their usage.0x000D0x000A b) Demonstrate BoilerplateCodeProperties.0x000D0x000A c) Demonstrate BoilerplateCodePropertiesAndStorage.0x000D0x000A0x000D0x000ATODO: Extract the actual code examples from ARCDoc into this documentation text.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCQuery/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCQuery/EnumMember = ARCQuery
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCQuery/Description = A library with support for fluent query expression and entity-relations.0x000D0x000A0x000D0x000AEnables fluent queries like for instance0x000D0x000A 'Order/WHERE Amount 0x003E 1000 EUR/REL Customer/SKIP 100/TAKE 50/SELECT FirstName, LastName' or 0x000D0x000A 'OrderLine/PIVOT Created.YearMonth() BY Product SUM Amount'0x000D0x000A0x000D0x000ASupports queries and linking between entities. Understands what properties like 'Order/43/CustomerId = 42' mean.0x000D0x000A0x000D0x000AEnables automatic suggestions in ARCAPI for adding of related entities / navigating to related entities.0x000D0x000A0x000D0x000ASee also QueryExpression,0x000D0x000ACompoundKey (like ForeignKey, EntityMethodKey and NewKey),0x000D0x000AFunctionKey,0x000D0x000AQuantileKey and0x000D0x000AValueComparer.0x000D0x000A0x000D0x000ANote also how extension method TryGetP (ARCQuery.Extensions.TryGetP) understands, through use of reflection, read-only properties of your entity classes.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSync/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSync/EnumMember = ARCSync
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSync/Description = (Not implemented as of March 2020)0x000D0x000A0x000D0x000AA library providing a basic framework for synchronizing with other data sources (data sources outside of AgoRapide).0x000D0x000A0x000D0x000ABackground: One important use of AgoRapide is envisaged to be analyzing of existing databases (with the help of for instance ARCQuery). In order to do the analysis the data has to be converted into the format of AgoRapide (PropertyStream and continously kept synchronized in an efficient manner.0x000D0x000A0x000D0x000AARCSync is also what you use when you do not want AgoRapide to be your main database.0x000D0x000AAs long as your main database uses the 'key-value' principle and you can query data from it in chronological order, it is usually quite easy to keep AgoRapide synchronized to it.0x000D0x000A0x000D0x000ASome database especially well suited in this regard are:0x000D0x000A- Amazon AWS DynamoDB0x000D0x000A- Azure Cosmos DB0x000D0x000AAgoRapide integrates quite naturally with these.0x000D0x000ANote that using AgoRapide against these databases also reduces egress costs since downstream caching is inbuilt in AgoRapide.0x000D0x000AIn a typical situation you can have one AgoRapide node subscribing to the key-value stream, with all other nodes connecting to that one.0x000D0x000AWhen the occasional need for an AdHocQuery arises that would be O(n) in AgoRapide you can instead query directly against the main database (which would more probably have a performance of O(1)).0x000D0x000AIf that query turns out to be permanently needed, then you set up a Subscription for it against CoreDB in order to cache it locally, eliminating the egress cost and ensuring an even speedier response.0x000D0x000A0x000D0x000AARCSync is not to be confused with the concept of how different AgoRapide based nodes synchronize between themselves (see Subscription. That functionality is built into ARCCore.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSec/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSec/EnumMember = ARCSec
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCSec/Description = (Not implemented as of March 2020)0x000D0x000A0x000D0x000AA library providing security like secure communications (SSL), secure authentication and authorization (access rights), logging of access and similar.0x000D0x000A0x000D0x000AWill probably contain a BasePKAttribute sub-class called -PKSecAttribute-.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCAPI/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCAPI/EnumMember = ARCAPI
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARCAPI/Description = A library providing an API on top of the PropertyStream.0x000D0x000A0x000D0x000AThe API can for instance be offered over HTTP / HTTPS with the help of Microsoft.AspNetCore.Mvc (see ARAAPI).0x000D0x000A0x000D0x000AThe API provided supports both0x000D0x000A 1) GraphQL (GQController) and0x000D0x000A2) REST (RQController).0x000D0x000A0x000D0x000AIn addition to JSON format the API also provides a rudimentary HTML / Javascript based interface for direct user interaction (nominally for administrative users / power users).0x000D0x000A0x000D0x000AThe HTML views are created automatically based on TaggingOfPropertyKeys, including Javascript forms for creating new properties.0x000D0x000A0x000D0x000AThe HTML interface automatically constructs views also for GraphQL queries, meaning that rich functionality can be programmed from 'outside' the API in line with the GraphQL philosophy.0x000D0x000A0x000D0x000AThis HTML interface is quite sufficient as an internal administrative tool / support department tool for your application.0x000D0x000A0x000D0x000ADepends on ARCDoc, ARCQuery and ARCSec.0x000D0x000A0x000D0x000ASee also BaseController and AddController.0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAAPI/EnumType = ARCCore.ARComponents
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAAPI/EnumMember = ARAAPI
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARAAPI/Description = The corresponding template application for ARCAPI demonstrating its usage, providing an HTTP / HTTPS interface with the help of Microsoft.AspNetCore.Mvc.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/AREnumType = DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/Description = The overarching concepts upon which AgoRapide is built.0x000D0x000A(and upon which your ApplicationSpecificCode hopefully also will be built).0x000D0x000A0x000D0x000AStart here in order to familiarizing yourself with AgoRapide.0x000D0x000A0x000D0x000ASee GettingStarted.0x000D0x000A0x000D0x000AThis enum describes the overarching general concepts in AgoRapide.0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/LongDescription = Note that in general this enum only describes concepts not implemented explicit under the same name (not implemented as classes / properties or similar).0x000D0x000A(it is a DocumentationOnlyEnum enum).0x000D0x000AAs AgoRapide matures we expect some values here to be removed gradually, as some explicit implementation is done (and the corresponding text moved to that implementation).0x000D0x000A0x000D0x000ATODO: EXPAND WITH LoadBalancing (Sharding) / FaulTolerance. TODO: (or just use Sharding, MultipleConnectionUsage).0x000D0x000ATODO: Give examples of how these objectives may be achieved through only configuration (no code should be necessary).0x000D0x000A0x000D0x000ATODO: Consider creating new enum CodeLocation or similar,0x000D0x000ATOOD: comprising StandardAgoRapideCode and ApplicationSpecificCode.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/GettingStarted/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/GettingStarted/EnumMember = GettingStarted
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/GettingStarted/Description = AgoRapide 2020 is an open source library for building data-oriented backend applications using .NET Standard 2.1.0x000D0x000A0x000D0x000AThe source code, including this documentation, is found at0x000D0x000A0x000D0x000Ahttps://bitbucket.org/BjornErlingFloetten/arcore0x000D0x000A0x000D0x000A0x000D0x000AAgoRapide 2020 can be used as:0x000D0x000A0x000D0x000A1) A distributed in-memory backend processor of events / listener to events.0x000D0x000AThe PropertyStream-format lends itself well to distribution of loads. Each processing node subscribes to sub-sets of the entire property stream.0x000D0x000AThe Subscriptions consists of the events to which the node has to respond, plus other necessary data in order to correctly process the events. 0x000D0x000AThe result is placed back out in the property stream, either back upstream, or further downstream for other nodes to process.0x000D0x000ASee ARCCore.0x000D0x000A0x000D0x000A2) A 'single-endpoint' API.0x000D0x000AAll data is exposed through a standardized API query mechanism (REST or GraphQL) with no need for writing application specific endpoints.0x000D0x000ASince APIs should expose well defined DTO's and not entire entities, AgoRapide APIs are therefore normally established as separate nodes.0x000D0x000AEach node has a well defined Subscription to a sub-set of your entire database (also reducing the memory footprint).0x000D0x000AThe API will then in effect offer DTO's with very little coding needed.0x000D0x000ASee ARCAPI.0x000D0x000A0x000D0x000A3) A reporting tool / query tool ("Express BI").0x000D0x000AAn API as in 2) combined with the query library. 0x000D0x000AThe query library enables report generation directly from the web-browser (as a single bookmark-able URL).0x000D0x000ASee ARCQuery.0x000D0x000A0x000D0x000AFor all cases above the following also applies:0x000D0x000A0x000D0x000AA) An in-memory database which is continously updated through the property stream is provided by AgoRapide. 0x000D0x000AThis ensures short response times and significantly reduces network traffic. 0x000D0x000ASee StreamProcessor.0x000D0x000A0x000D0x000AB) The core database storage is either provided directly by AgoRapide, or you can use an established 'key-value' databases like DynamoDB or Cosmos DB.0x000D0x000ASee ARCSync.0x000D0x000A0x000D0x000AC) High performance thread-safe "simultaneous" read and writes is supported in all scenarios.0x000D0x000A0x000D0x000AD) AgoRapide works better the more strongly typed schema you specify (see TaggingOfPropertyKeys). 0x000D0x000AYou can however start out without any schema at all. Duck typing is then used instead. 0x000D0x000AEven relational queries are possible straight out-of-the-box without any schema, as long as some naming conventions are followed 0x000D0x000A(like Order.CustomerId for instance, in order to relate an Order to a Customer)0x000D0x000AStrong typing is used by AgoRapide whenever specified by the schema.0x000D0x000A0x000D0x000AE) Scaling is supported by flexible routing of the PropertyStream to multiple nodes.0x000D0x000A0x000D0x000AF) No dependencies to other libraries apart from .NET itself.0x000D0x000A0x000D0x000ASee ARCDoc for practical examples for using AgoRapide.0x000D0x000A0x000D0x000AAgoRapide is the result of a strong wish of AvoidingRepetition.0x000D0x000A0x000D0x000AThree very important concepts in AgoRapide are:0x000D0x000A0x000D0x000A1) PropertyStream: The concept of how all data is broken down into single 'key and value' pairs which are then stored as plain text format lines and then never changed.0x000D0x000A0x000D0x000A2) TaggingOfPropertyKeys: The concept of specifying in a single place all relevant information about a given property (data field).0x000D0x000A0x000D0x000A3) PropertyAccess: The general mechanism for accessing properties of objects in AgoRapide.0x000D0x000A0x000D0x000AAgoRapide is split into different ARComponents. You can have a functional distributed storage mechanism including log-consoles by linking only to ARCCore.0x000D0x000AChoose from the other components based on your security needs (ARCSec), the complexity of your data (ARCQuery) or other needs (see ARComponents in general).0x000D0x000A0x000D0x000ASee also ARConcepts and AgoRapideHistory.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyStream/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyStream/EnumMember = PropertyStream
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyStream/Description = AgoRapide, the 'streams-of-water' database".0x000D0x000A0x000D0x000AProperty stream in AgoRapide is the concept of how all data is broken down into single 'key and value' pairs (single PropertyStreamLines) which are stored sequentially as plain text format lines and then never changed.0x000D0x000A0x000D0x000ASee PropertyStreamLine for the actual syntax used.0x000D0x000A0x000D0x000AThe resulting 'property stream' is, by its own nature, easy to distribute.0x000D0x000A0x000D0x000AIt is also easy to convert into an object oriented format, lessening the 'impedance mismatch' issue between databases and object oriented languages (see TryParse and TryStore.0x000D0x000ANote that conversion back again is also possible, see ToPropertyStream.0x000D0x000A0x000D0x000ASome examples of what the property stream concept makes easier are:0x000D0x000A0x000D0x000A1) Implementing the actual storage.0x000D0x000AAgoRapide offers its own storage mechanism (see StreamProcessor).0x000D0x000A(Note that this is not obligatory, see ARCSync for how to synchronize AgoRapide from other databases.)0x000D0x000A0x000D0x000A2) Preservation of history.0x000D0x000AStoring data in traditional 'database tables' is actually only preserving the current status, with special provisions having to be taken in order to also preserve history. With the property stream concept on the other hand, history is automatically (intrinsically) preserved. (and the traditional 'table' can always be created from the property stream, but not vice versa).0x000D0x000A0x000D0x000A3) Distribution of data.0x000D0x000AThanks to your data flowing like 'streams-of-water', it can be piped wherever convenient (by a publish / subscribe mechanism), to caches, to sub-systems and so on (see StreamProcessor, Subscription and ClientUpdatePosition).0x000D0x000A0x000D0x000A4) Security.0x000D0x000AInstead of a traditional API connecting to a 'complete' database backend (with the corresponding security implications), you can have non-sensitive data streamed to dedicated API nodes. Because these nodes can only serve non-sensitive data, they are easier to implement in a secure manner.0x000D0x000A0x000D0x000A5) Coherent representation throughout your application.0x000D0x000AThe same format is used 'everywhere' like:0x000D0x000Aa) In the storage file: 'Customer/42/FirstName = John'0x000D0x000Ab) As an HTTP API call: 'yourapi.com/Customer/42/FirstName = John'0x000D0x000Ac) As a query (through API or otherwise): 'yourapi.com/Customer/42'0x000D0x000A0x000D0x000A6) Load-balancing.0x000D0x000A(see Sharding).0x000D0x000A0x000D0x000A7) Fault-tolerance.0x000D0x000A(see MultipleConnectionUsage).0x000D0x000A0x000D0x000A8) Always up-to-date incremental backup.0x000D0x000AA backup node can simply subscribe to -IsAll-, '+*', and thereby keep an always current backup).0x000D0x000A0x000D0x000ANote especially how distributed systems are easy to implement with AgoRapide because synchronizing data across different ARNodeType is very easy when properties 'flow like water'.0x000D0x000A0x000D0x000AFor serialization of objects see ToPropertyStream and0x000D0x000Afor deserialization see -ParseAndStore-.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyStream/LongDescription = Some origins for how new lines in the property stream are generated are:0x000D0x000A0x000D0x000A1) An API-request like api/Add/std/Customer/42/FirstName = 'John' (note how this translates almost directly into a single property stream line)-0x000D0x000A'Entry-point' into ARCCore would typically be by direct call from API-mechanism to SendFromLocalOrigin.0x000D0x000A0x000D0x000A2) Through ExposingApplicationState via LogContext.0x000D0x000A'Entry-point' into ARCCore would typically be SendFromLocalOrigin through -TrySetP (either by direct call to it, or through call to Log).0x000D0x000A0x000D0x000AFAQ: Reading historical data from the property stream has inherently a performance of O(n). How does AgoRapide mitigate this?0x000D0x000AIn two ways:0x000D0x000A1) Through the concept of Subscription where an ARNodeType has a continously kept up-to-date locally cached version of the data it needs to process. The only O(n) query would then happen in connection with the initial setup of the node.0x000D0x000A2) By using an established 'key-value' database (with O(1) performance) as main database instead of AgoRapide (see ARCSync for more information).0x000D0x000A0x000D0x000AFAQ: Can the property stream format support transactions?0x000D0x000AYes. There is a TODO: for that, inserting SQL-style BEGIN, COMMIT / ABORT into the stream, together with a corresponding transaction id, to signal start and end of transactions. Every property stream line (each data point) belonging to that transaction would then be tag'ed with the transaction id.0x000D0x000AA client seeing a BEGIN would then know to wait for a COMMIT / ABORT with the same transaction id, before considering the belonging data points for further processing.0x000D0x000AExample:0x000D0x000A Transaction/123abc456def/BEGIN0x000D0x000A Transaction/123abc456def/Account/42/Subtract = 1000 EUR0x000D0x000A Transaction/123abc456def/Account/43/Add = 1000 EUR0x000D0x000A Transaction/123abc456def/COMMIT0x000D0x000A(note that in the actual stream, other data may be interspersed with the lines shown above.)0x000D0x000ANote: Example above is admittedly somewhat na0x00EFve.0x000D0x000ATODO: Implement transactions.0x000D0x000A0x000D0x000AFAQ: Can the property stream format support GraphQL?0x000D0x000AYes, and actually in a quite direct manner. And the way -Subscription is structured it is very similar to a GraphQL query meaning a translation between the two is relatively simple to implement.0x000D0x000A(as a side-note, the TaggingOfPropertyKeys concept should be sufficient rich to translate into GraphQL SDL (with support from ARCQuery).0x000D0x000ATODO: Implement support for GraphQL.0x000D0x000A0x000D0x000AFAQ: Is not the property stream quite similar to MQTT messages?0x000D0x000AYes, definitely. The 'topic' concept in MQTT corresponds closely to the key part of a PropertyStreamLine while the 'payload' in a message corresponds the the value part.0x000D0x000AA key difference with the AgoRapide philosophy compared to MQTT is however that with AgoRapide the complete datastorage IS actually the sum of all PropertyStreamLine. Therefore the value part in AgoRapide is usually broken down into single values (that is, multiple PropertyStreamLine), whereas the 'payload' in a single MQTT message usually contains more complex data (for instance a JSON object).0x000D0x000AAn MQTT 'topic' is also more ephemeral than an AgoRapide key.0x000D0x000ANote that is should be very easy to translate between an AgoRapide world and an MQTT world (translate between an MQTT message and a PropertyStreamLine).0x000D0x000A0x000D0x000ASee ReceiveAndDistribute, ToPropertyStream- and ARNodeType for more information.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TaggingOfPropertyKeys/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TaggingOfPropertyKeys/EnumMember = TaggingOfPropertyKeys
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TaggingOfPropertyKeys/Description = The concept of specifying in a single place all relevant information about a given property (data field).0x000D0x000A0x000D0x000AThe purpose is to give 'at-a-glance' information about all relevant aspects of a given property, without having to navigate through a complex code database. And also with the goal of reducing the amount of ApplicationSpecificCode.0x000D0x000A0x000D0x000ANote: You can start using AgoRapide without this concept.0x000D0x000AAgoRapide as a storage system is usable without define ANY schema / tagging at all. Just create PropertyStreamLines and see how they immediately gets understood by a standard ARAAPI application.0x000D0x000A0x000D0x000ASee PK, / BasePKAttribute where the tagged attributes are stored.0x000D0x000A0x000D0x000AThis central concept in AgoRapide (in addition to PropertyStream) ensures that once you have decided that you need a field like for instance 'Customer.FirstName' then all of the functionality (or as much as possible of it) for that field can reside in the C# code where it was originally defined / declared.0x000D0x000A0x000D0x000ATODO: Give som practical examples of what is meant by this.0x000D0x000A0x000D0x000AIn the rest of your application logic there should be less need for referring to 'FirstName'. Like implementing setters and getters, reading from and storing to database, logging access, storing historical data, UI-presentation (including transformations and joins), input-validation and so on.0x000D0x000A0x000D0x000AIn other words, all application logic related to 'FirstName' should reside where 'FirstName' was originally defined, enabling you to at-a-glance ascertain how FirstName is used throughout the application.0x000D0x000A0x000D0x000AIf all this can be sewn together in a coherent manner then a huge amount of boilerplate code disappears. This again will help with keeping the complexity of your application down as it matures. 0x000D0x000AIn practise, all this is accomplished by you (the user of AgoRapide) by defining enums tagged as PropertyKeyEnum. (Example: See how StreamProcessorP is tagged as '0x005BEnum(AREnumType = AREnumType.PropertyKey)0x005D'.)0x000D0x000A0x000D0x000AThe values of these enum definitions again are tagged through the BasePKAttribute mechanism.0x000D0x000A(Example: See how LocalStorageFolder is tagged with PKTypeAttribute's 'Description' and 'IsObligatory'.)0x000D0x000A 0x000D0x000AThe end-result of all this tagging ends up in a PK instance (which may contain multiple BasePKAttribute instances).0x000D0x000A(Example: CountSendMessage is tagged by both a PKTypeAttribute and a PKLogAttribute.)0x000D0x000A0x000D0x000AARCCore contains some implementations of BasePKAttribute like PKTypeAttribute (which will always be available for a given property) and PKLogAttribute. 0x000D0x000AThe other ARComponents introduce more implementations of BasePKAttribute in order to implement their functionality.0x000D0x000ATODO: Give examples here.0x000D0x000AYou are also strongly encouraged to write your own classes inheriting BasePKAttribute whenever you have code implementing some specific aspects about a property key.0x000D0x000ATODO: INSERT EXAMPLE HERE OF CUSTOM-BUILT BasePKAttribute.0x000D0x000A0x000D0x000AFor some easy-to-follow examples of this, see ARCDoc.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TaggingOfPropertyKeys/LongDescription = FAQ: Why does AgoRapide tag enum members (enum values) instead of just directly tagging ordinary class properties?0x000D0x000ABecause it gives greater flexibility, especially with PropertyAccess.0x000D0x000AWe need the simplest possible mechanism on which to 'hang' the tags, and enum's are perfectly suited for that purpose.0x000D0x000AThey are easy to refer to and it requires very little use of reflection (or even none at all).0x000D0x000AIt does however make the classes look strange, they may even be totally empty in many cases.0x000D0x000AOne example of flexibility is when a class can have lets say 50 members, but you only need to have a Subscription for 5 of those. Initializing the class with 5 properties instead of 50 then takes up correspondingly less memory (because even null-values for ordinary properties will take up at least 8 bytes for each property).0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyAccess/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyAccess/EnumMember = PropertyAccess
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyAccess/Description = The general mechanism for accessing properties of objects in AgoRapide.0x000D0x000A0x000D0x000AImplemented through the IP (IProperty) interface mechanism.0x000D0x000A0x000D0x000AIn applications with lot of different data fields it might be difficult to 1) Specify from the beginning exactly which fields you need, 2) To decide if they are actually available at the stage of processing, 3) To explain them in logs and debug-messages and 4) To implement storage for them.0x000D0x000A0x000D0x000AThis can lead to a messy bug-prone implementation because you have to make assumptions about the data available, or you just leave out desired functionality because of a constant need for generating boilerplate code just to accomplish what is really a trivial task that should be inbuilt / automated somehow from the beginning.TODO: CLARIFY SENTENCE ABOVE.0x000D0x000A0x000D0x000AAgoRapide uses a standardized generic mechanism for accessing properties of objects. It is implemented through the IP (IProperty) interface mechanism0x000D0x000A0x000D0x000AThis means that for every field / property you have concepts like the following ready for use:0x000D0x000A0x000D0x000A1) Both Get and TryGet are always available. Get will throw a detailed exception if not successful (see default interface methods in IP like TryGetV)0x000D0x000A0x000D0x000A2) Get has the choice of a default value to return if not successful (instead of throwing an exception) (see default interface methods in IP like -GetV-).0x000D0x000A0x000D0x000A3) Meta-information for a property, like who created it or how old it is (see PP like Cid and Created).0x000D0x000A0x000D0x000A4) Defining cardinality like single, multiple and so on (with corresponding validation and parsing) (see Cardinality).0x000D0x000A0x000D0x000A5) Whether the field is obligatory or not (see IsObligatory).0x000D0x000A0x000D0x000A6) Default value (see DefaultValue).0x000D0x000A0x000D0x000A7) Guard against multiple setting of same property (see -SetP- versus AddP, the latter throws a -KeyAlreadyExistsException- for multiple attempts to set a property) 0x000D0x000ATODO: Regarding 7), introduce in PKTypeAttribute a setting for this (SetOnlyOnceAllowed or similar)0x000D0x000ATODO: but remember that must then be honoured by all implementations of AddP and0x000D0x000ATODO: you must also think through implications when updating object from the property stream0x000D0x000A0x000D0x000AAt the entity level (IP-level), you get the following:0x000D0x000A1) Automatic assertion of integrity (assertion that IsObligatory values are set for instance, see AssertIntegrity).0x000D0x000A0x000D0x000A2) An automatic ToString() method for your objects (not even with boilerplate auto-generated code but all automatically from within the framework itself).0x000D0x000ATODO: Actually not implemented as of May 2020, but 'easily done'.0x000D0x000A0x000D0x000A3) A truly 'deep' copy is always possible (see DeepCopy).0x000D0x000A0x000D0x000A4) Changes are automatically logged (see log and ExposingApplicationState).0x000D0x000A0x000D0x000ASee also ITypeDescriber which extends the idea of a standardized parsing and validation mechanism to single property-values also
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/PropertyAccess/LongDescription = FAQ: How does the PropertyAccess mechanism work with inheritance?0x000D0x000AClasses can of course have inheritance but accessing the properties may be a little non-intuitive.0x000D0x000AFor instance, for ClassAttribute, the property Description from the base type BaseAttribute is also present. Unfortunately you get little help from tools like Intellisense in Visual Studio to remember this (unless you implement BoilerplateCodeProperties).0x000D0x000AHowever, all the information is contained within TaggingOfPropertyKeys so ARCAPI for instance (with help from ARCQuery) can communicate the relationships clearly to the outside, for instance expressed in Graph QL SDL.0x000D0x000A0x000D0x000AIn general this way of storing properties incidentally also helps with issues like0x000D0x000A0x000D0x000A1) Enabling the AgoRapide concept of PropertyStream like serialization (see ToPropertyStream and0x000D0x000Adeserialization (see TryParse),0x000D0x000A0x000D0x000A2) TaggingOfPropertyKeys,0x000D0x000A0x000D0x000Aetc. etc..0x000D0x000A0x000D0x000ASome drawbacks of this mechanism are of course:0x000D0x000A0x000D0x000A1) The risk of increased memory usage. See - MemoryConsumption - for more details about this.0x000D0x000A0x000D0x000A2) Convoluted syntax when accessing properties. This can be alleviated by implementing traditional setters / getters, using the standardized property access mechanism 'behind the scene'.0x000D0x000A0x000D0x000A3) Less static strong typing than what is default in C# (see for instance -AssertTypeIntegrity-).0x000D0x000A0x000D0x000ANOTE: All these drawbacks, 1), 2) and 3) can be alleviated by using traditional setters / getters, and also traditional storage. See respectively BoilerplateCodeProperties and BoilerplateCodePropertiesAndStorage for a more detailed explanation.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AvoidingRepetition/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AvoidingRepetition/EnumMember = AvoidingRepetition
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AvoidingRepetition/Description = Avoiding repetition, the overarching philosophy that inspired the rest of AgoRapide.0x000D0x000A0x000D0x000ABy repetition we mean all kinds of tasks that are similar to each other, both:0x000D0x000A1) Within an application and 0x000D0x000A2) Across different applications.0x000D0x000A0x000D0x000ASome examples of 1) are documentation, logging, debugging and business reporting.0x000D0x000AThese are actually quite similar problem domains and therefore handled in AgoRapide by a lot of common code.0x000D0x000A(see ARCQuery for more information about reports / queries).0x000D0x000A0x000D0x000ASome examples of 2) are creation of database tables, creation of C# objects, implementing properties for objects, populating objects, validating properties (and handling the unknown / null / maybe scenarios), traversing entity relations, creating API-methods (building API endpoints), writing unit tests.0x000D0x000AThese are quite similar across applications and should not demand much ApplicationSpecificCode0x000D0x000A0x000D0x000AEvery time that we developers see such patterns of repetition we try to factor out the common component. 0x000D0x000AAgoRapide has been created for the purpose of making this process easier.0x000D0x000A0x000D0x000AThe advantages of this are self-evident: Less code, less complexity, easier debugging, more meaningful workdays as a programmer and so on and so on.0x000D0x000A0x000D0x000AWe do especially want to remove some of the friction resulting when working with a system where you know that some common functionality for dealing with a problem really should have been implemented. But since it was not available from the start it is too time-consuming to implement now, meaning that instead a lot of kludges get scattered all over the code in order to at least cover some emergency needs. It all ends up with an in-overall inefficient and costly to maintain system.0x000D0x000A0x000D0x000ATo quote Paul Graham 'The shape of a program should reflect only the problem it needs to solve'0x000D0x000A(Paul Graham - Revenge of the Nerds, http://www.paulgraham.com/icad.html ).0x000D0x000ABy utilizing AgoRapide your application will hopefully accomplish this (but maybe we should have written AgoRapide in Lisp though).0x000D0x000A0x000D0x000AAnother quote:0x000D0x000A'Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.'0x000D0x000A(Alan Perlis, Epigrams on Programming, 1982, ACM SIGPLAN Notices #58, https://en.wikiquote.org/wiki/Alan_Perlis#Epigrams_on_Programming,_1982 ).0x000D0x000A0x000D0x000AHowever, we also have this gem, not to be forgotten:0x000D0x000A'Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?'0x000D0x000A(Brian Kernighan, The Elements of Programming Style, https://en.wikiquote.org/wiki/Brian_Kernighan ).0x000D0x000A0x000D0x000AAgoRapide's level of abstraction is already close to this territory (about debugging is twice as hard). However, your resulting application will hopefully require much less cleverness thanks to AgoRapide, so at least you can debug your own code very easily (see also AssertionsAndDetailedExceptionMessages).0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AvoidingRepetition/LongDescription = In ARCAPI you will find a quite intruiging case with BaseController where the API-routing information is exposed with the same mechanism that answers REST queries.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AgoRapideHistory/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AgoRapideHistory/EnumMember = AgoRapideHistory
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AgoRapideHistory/Description = AgoRapide has roots back to 2011 when Bj0x00F8rn Erling Fl0x00F8tten invented panSL (SL = Schema language).0x000D0x000A0x000D0x000AIntroduced in 2012 panSL (panSL.org) was an excercise in data modelling where the principle of TaggingOfPropertyKeys orginated, in that case, tagging each element of the schema in order to create a data-driven application with only 'one page' of code.0x000D0x000AThe implementation of panSL was called AgoRapide (AgoRapide.com).0x000D0x000AIt had litte practical use.0x000D0x000A0x000D0x000AIn 2017 a new version of AgoRapide (https://github.com/AgoRapide/AgoRapide), not using panSL at all, was introduced, as a 'Lightweight pragmatic integrated .NET REST API offering JSON and HTML views. Written in C# 7.0'.0x000D0x000AThis version introduced PropertyAccess and most other ARConcepts.0x000D0x000AIt was 'halfway' to implementing PropertyStream, in the sense that all data where stored as 'key, value' but was dependent on an underlying storage mechanism, like PostgreSQL.0x000D0x000AThe 2017 version has had applications within some companies, including a modestly successful IoT related company (Sikom Connect AS of Trondheim, Norway).0x000D0x000AIts weaknesses where its monolitic structure and too much emphasis on being a REST API (meaning it was an 'all-or-nothing package', without useful single components).0x000D0x000A0x000D0x000AThe current 2020 version of AgoRapide (this version), uses .NET Core and .NET Standard.0x000D0x000AIt introduces its own storage mechanism (see StreamProcessor).0x000D0x000AIt consists of multiple mostly independent components (see ARComponents).0x000D0x000AIt is built outwards from the core component ARCCore.0x000D0x000AEach component is kept as simple as possible. ARCCore for instance can be accessed through the concept of a Console application and it does not link to any library outside of Microsoft .NET itself.0x000D0x000A(in general the 2020 version of AgoRapide should be ideally suited for containerization).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/IdLooseStorage/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/IdLooseStorage/EnumMember = IdLooseStorage
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/IdLooseStorage/Description = AgoRapide does not give a unique identifier to every object / property (due to memory usage concerns). Instead each object / property has an id valid within a limited scope or context described by a collection of IK (as stored inside -Key).0x000D0x000A0x000D0x000ATODO: This enum-member (IdLooseStorage) has marginal value, try to move text elsewhere and delete member.0x000D0x000ATODO: Move for instance text to IndividualItems.0x000D0x000A0x000D0x000ATODO: Write something about keys not being stored inside object (CustomerId is not stored inside Customer typically).0x000D0x000A0x000D0x000AExample 1): If the scope is 'Customer' then an id for a specific customer could be '42'0x000D0x000AExample 2): If the scope is 'Customer/42' then an id for a PhoneNumber would be either:0x000D0x000Aa) For storing only single values (see HistoryOnly):0x000D0x000A'Customer/42/PhoneNumber = +90534333'0x000D0x000Aor0x000D0x000Ab) For storing multiple values (see WholeCollection):'Customer/42/PhoneNumber/+4790534333'0x000D0x000A'Customer/42/PhoneNumber/+4740178178'0x000D0x000Aand so on.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/IdLooseStorage/LongDescription = For more information, see Key, IK and especially IKString which is used for storing the (usually as a sequential number) general id of everyday objects. See also PRich which uses IK for indexing the whole object storage
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AdHocQuery/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AdHocQuery/EnumMember = AdHocQuery
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AdHocQuery/Description = The concept of a Client doing an ad-hoc query against (normally) a ArmDB.0x000D0x000ABackground: Ordinarily, Subscription are 'permanently' on-going, and ad-hoc queries are done in-memory locally by each client, but since there is just some small differences conceptually in doing ad-hoc queries over a TCP/IP connection, AgoRapide implements also this mechanism.0x000D0x000A0x000D0x000AAdHocQuery is most relevant against an ArmDB storing its data in a PRich, (The query itself is sent as a collection of Subscription elements, and when server answers with IsAtEndOfStream the client can close the query connection)0x000D0x000A0x000D0x000ATODO: Not implemented as of May 2020.0x000D0x000ATODO: Clarify difference between ClientUpdatePosition and FromTime / ToTime.0x000D0x000A0x000D0x000ANote that there would be little meaning in doing an ad-hoc query against a CoreDB because the core only stores single PropertyStream-lines, meaning it would have to read through the whole database from start to end in order to ensure that all data is found (the query would be an O(n) one instead of O(1)).0x000D0x000A0x000D0x000AHint: If you are concerned about the risk of having to do O(n) queries, you are recommended to use an established key-value storage (like AWS DynamoDB or Azure Cosmos DB) as your main database, and sync AgoRapide to that database.0x000D0x000ASee ARCSync for more information about this.0x000D0x000A0x000D0x000ATOOD: Could potentially be deleted as ARConcept when a Query-metod is implemented somewhere.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/StandardAgoRapideCode/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/StandardAgoRapideCode/EnumMember = StandardAgoRapideCode
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/StandardAgoRapideCode/Description = Code originating from the main official AgoRapide distribution (which therefore does not include any end-application specific code)0x000D0x000A0x000D0x000ATODO: Consider creating new enum CodeLocation or similar,0x000D0x000ATOOD: comprising StandardAgoRapideCode and ApplicationSpecificCode.0x000D0x000A0x000D0x000AAlthough AgoRapide is open-source with an extremely flexible license (and you may therefore mix its code with your own), it is anyway recommended to keep core parts of the system, like all CoreDB and as many of ArmDB as possible, based on only the official AgoRapide distribution, that is, without any ApplicationSpecificCode. Following this recommendation will ensure greater stability for the critical core parts of your system.0x000D0x000A0x000D0x000AA node with only StandardAgoRapideCode therefore most probably knows very little about end-application specific types. Although by compiling it with only the standard AgoRapide code it will be able to receive some PK information (through the PropertyStream), it will not be able to do any type-specific operations. 0x000D0x000AFor example: With something like 'Customer/42/PhoneNumber = +4790534333' it will understand that 'Customer' is a IKType, '42' is a IKString, and 'PhoneNumber' is a ITypeDescriber, but it will not be able to actually create a Customer-object nor a PhoneNumber because the definition for those types are unknown (the types are not present in the assemblies constituting the application).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ApplicationSpecificCode/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ApplicationSpecificCode/EnumMember = ApplicationSpecificCode
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ApplicationSpecificCode/Description = Code specific for an end-application.0x000D0x000A0x000D0x000AShould be kept to a minimum (obviously).0x000D0x000A0x000D0x000ATODO: Consider creating new enum CodeLocation or similar,0x000D0x000ATOOD: comprising StandardAgoRapideCode and ApplicationSpecificCode.0x000D0x000A0x000D0x000AWill usually be contained within a Client and some ArmDB.0x000D0x000A0x000D0x000AThrough AvoidingRepetition, AgoRapide strives to help you keep your ApplicationSpecificCode to a minimum.0x000D0x000A0x000D0x000ASee StandardAgoRapideCode for more information
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ApplicationSpecificCode/LongDescription = Note that when running in the same process space, application specific elements like types for instance, will be recognized and used also by -the StandardAgoRapideCode-.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/MemoryConsumption/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/MemoryConsumption/EnumMember = MemoryConsumption
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/MemoryConsumption/Description = A na0x00EFve implementation of key-value storages like AgoRapide may lead to excessive memory (RAM) consumption.0x000D0x000A0x000D0x000AAgoRapide has been designed in order to be easy to start with, but still with inbuilt flexibility to reduce memory consumption as your database grows and your application matures.0x000D0x000A0x000D0x000ACoreDB will mostly store data on disk and have little need for RAM. Sidenote: Although the PropertyStream-format is somewhat verbose it is well suited for on-disk compression.0x000D0x000A0x000D0x000AArmDB / Client using PRich is more sensitive to RAM but you have a great flexibility in how much data they actually have to subscribe to.0x000D0x000A0x000D0x000AThis is because the default implementations of IP in ARCCore- are chosen dynamically according to need.0x000D0x000ASee for instance use of the PValue<T> class, which will be dynamically replaced with a PRich instance if a need for storing meta-data like Cid, Created or similar arises.0x000D0x000A0x000D0x000ATherefore, if a Subscription does include any of this meta-data, then only a PValue<T> instance will be created at the subscriber side, meaning single nodes in the system can have reduced memory consumption just by judiciously chosing what data is needed.0x000D0x000A0x000D0x000AUse the PExact<EnumType> class as basis for your 'entity' classes when you know exact what you want to store in them and when you do not need to store any meta-data like Cid and Created.0x000D0x000A0x000D0x000ASee also BoilerplateCodePropertiesAndStorage which offers automatically generated boilerplate code for turning your class into a memory-efficient traditional C# class. This can be done independently by different nodes in the system, that is, you only have to implement properties that you actually need in the given context (remember that even null values for a property still occupies 8 byte of memory, so it is best to leave it out completely).0x000D0x000ANote that by default the property storage mechanism normally used in AgoRapide (like in PRich) will not waste memory on non-existing properties at all because of the dictionary mechanism used (albeit with a significant overhead).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/CoreDBSynchronization/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/CoreDBSynchronization/EnumMember = CoreDBSynchronization
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/CoreDBSynchronization/Description = TODO: The inherent possibility in AgoRapide of having multiple CoreDB nodes means that synchronization between these nodes must be considered.0x000D0x000AAs of Apr 2020 the most critical issue being identified is probably how to re-synchronize nodes after some period of offline status / network outage and similar.0x000D0x000AAlso a mechanism for anointing a master-node and similar must be implemented.0x000D0x000A0x000D0x000ATODO: There is also the issue of what happens when the core itself is unavailable. In principle the clients are perfectly capable of caching data, and sending it as soon as the core gets online again, but then there is the issue of ordering data from the different client nodes correctly into the property stream.0x000D0x000AOne possible solution to this issue might be to just state that it is unsolved and that such cached data will be put into the property stream without any coordination / ordering.0x000D0x000A0x000D0x000ASee also MultipleConnectionUsage and Sharding.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/SingleThreadedCode/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/SingleThreadedCode/EnumMember = SingleThreadedCode
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/SingleThreadedCode/Description = Some practical choices have been made in AgoRapide which requires object access to be done in a single-threaded manner, or within a locking context (using for instance -ReaderWriterLockSlim-).0x000D0x000A0x000D0x000AExamples are like0x000D0x000A1) In objects like PRich, using System.Collections.Dictionary instead of System.Collections.Concurrent.ConcurrentDictionary due to memory concerns and (when building a hierchical object model) due to the inherent dangers for bugs that a multi-threaded model would bring).0x000D0x000A0x000D0x000ANote hints in the documentation for how to write thread safe applications, for instance documentation for OutsideLocalReceiver. Also note objects like PConcurrent which may be used when you definitely need multi-threaded access.0x000D0x000A0x000D0x000AThe inbuilt distributive possibilities in AgoRapide is supposed to be a good fit with this restriction. If you need more processing power than what a single main-thread can give you, then it is very easy to distribute load over multiple ARNodeType nodes. Each of these nodes should anyway only have to do a simple easy to understand task, and then a single main thread should be no real restriction.0x000D0x000A0x000D0x000ANote that where relevant AgoRapide does of course make extensive use of multithreaded code, ascynchronous code (async / await) and so on.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/DataRetention/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/DataRetention/EnumMember = DataRetention
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/DataRetention/Description = The concept of when to delete old data (if deemed necessary).0x000D0x000A0x000D0x000ABecause of inherent traits of the PropertyStream concept, data will never be deleted by default.0x000D0x000A0x000D0x000AThis might result in unacceptable storage requirements / low performance. Some functionality for deletion is therefore envisaged to be necessary to implement.0x000D0x000ASee NoRealDeletion for details.0x000D0x000A0x000D0x000ATODO: Not implemented as of Mar 2020. Not decided if should be in a specific ARComponents or just part of ARCCore.0x000D0x000AWill probably be a specific BasePKAttribute called PKRetAttribute, maybe also something added to ClassAttribute (or something added to EnumAttribute. As of Apr 2020 we have not decided where / how to tag 'entity'-classes).0x000D0x000ANote that retention at application level is also plausible. One scenario could be a high-availability log-collector delivering log-data to more simple (cheaper) final storage nodes that are not necessarily high-availablity themselves. The log-collector only has to keep data for as long as the final storage nodes are tolerated to be offline.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/DataRetention/LongDescription = Some ideas for how to do this:0x000D0x000AUse a concept of 'revision number' in the actual storage file (as of Apr 2020 StreamProcessor is prepared for this (see its _storage-member) but use of it is not supported).0x000D0x000AExample: We start with file 2020-04-13 14:19.R00001.txt and after the first compacting we store a new file called 2020-04-13 14:19.R00002.txt.0x000D0x000AAs long as there are clients 'using' the old file, it can be kept on disk (in order for ClientUpdatePosition to be compatible.0x000D0x000AOR, more probable, compact by leaving empty-lines, thereby making ClientUpdatePosition unchanged.0x000D0x000AWe can also have a cut-off of for instance a month, and just not accept ClientUpdatePosition older than this.0x000D0x000A(A backup mechanism could also be to build a 'last Timestamp' feature into ClientUpdatePosition, and use that as a last resort when file position can not be used).0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/NoRealDeletion/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/NoRealDeletion/EnumMember = NoRealDeletion
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/NoRealDeletion/Description = AgoRapide has no real concept for deletion of data (apart from DataRetention, which is mostly relevant for 'old' data).0x000D0x000AThe closest concept is setting Invalid for a property.0x000D0x000A0x000D0x000AThere might also be regulatory concerns demanding that you actually delete data as requested in your application.0x000D0x000A(for instance deleting data for a specific customer. This will be more difficult though since AgoRapide does not have any concept of WHERE in the property stream a given datapoint resides).0x000D0x000ATODO: Implement 'Delete' as a command verb on the PropertyStream.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ManyToManyRelations/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ManyToManyRelations/EnumMember = ManyToManyRelations
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ManyToManyRelations/Description = ARCQuery supports many-to-many relations in a simple manner without introducing a third entity type (a third table).0x000D0x000A0x000D0x000AThis is done through having foreign keys with cardinality IsMultiple like WholeCollection and IndividualItems.0x000D0x000A0x000D0x000AExample 1), tagging PersonP.CarId with IndividualItems:0x000D0x000A Person/42/CarId/19680x000D0x000A Person/42/CarId/19810x000D0x000A Person/43/CarId/19680x000D0x000A0x000D0x000AExample 2), tagging PersonP.CarId with WholeCollection:0x000D0x000A Person/42/CarId = 19680x003B19810x000D0x000A Person/43/CarId/19680x000D0x000A0x000D0x000AIn both examples person 42 owns two cars (1968 and 1981), but shares car 1968 with person 43.0x000D0x000A(you can of course also store many-to-many relations in the traditional RDBMS manner by using a third 'entity' type called PersonCarOwnership or similar).0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/Documentation/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/Documentation/EnumMember = Documentation
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/Documentation/Description = Thanks to the tagging of enums and classes in AgoRapide (like this description), automatically generation of documentation is possible.0x000D0x000AThe actual functionality for that is not part of ARCCore but is placed in -ARCDoc.(apart from all the BaseAttribute instances necessary for tagging the different classes and members of course)0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AssertionsAndDetailedExceptionMessages/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AssertionsAndDetailedExceptionMessages/EnumMember = AssertionsAndDetailedExceptionMessages
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/AssertionsAndDetailedExceptionMessages/Description = The abstraction level in AgoRapide is very high.0x000D0x000A0x000D0x000AThis means that if something breaks (either due to a bug in the StandardAgoRapideCode or due to wrong use of the libraries from ApplicationSpecificCode) it can sometimes be difficult to grasp the issue involved.0x000D0x000A0x000D0x000AThe StandardAgoRapideCode therefore has lots of assertions (in order to catch the exception at its root origin) and also very detailed exception messages (in order to clarify and educate).0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ExposingApplicationState/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ExposingApplicationState/EnumMember = ExposingApplicationState
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ExposingApplicationState/Description = The traditional debugging process usually entails reading through logs and querying about your application state through a debugging tool. AgoRapide encourages logs and application state to be distributed over the PropertyStream by default, thereby making debugging simpler (the information is always available, and not restricted to some local access).0x000D0x000A0x000D0x000AYou are encouraged to expose your internal application state to the PropertyStream through the use of classes implementing LogContext (and possible also use PKLogAttribute) like PConcurrent.0x000D0x000A0x000D0x000AThis has two implications (as implemented by PConcurrent):0x000D0x000A1) Any call to Log / HandleException ends up in the property stream.0x000D0x000A2) Any change to internal properties will be reflected in the property stream automatically without even having to make 'manual' calls to Log (because all calls to -SetP- will automatically be logged to the property stream).0x000D0x000A0x000D0x000ASome example classes inheriting PConcurrent and using this principle in AgoRapide are:0x000D0x000A0x000D0x000AStreamProcessor (search for code like 'IP.SetPV(StreamProcessorP.ClientUpdatePositionPath ...)0x000D0x000AActualConnection (search for code like 'IP.Inc(ActualConnectionP.CountReceiveMessage)')0x000D0x000A0x000D0x000AIn summary, much of the inner working of these classes are automatically exposed to the property stream without any special code having to be added.0x000D0x000ANote how manual calls to Log are also automatically exposed to the property stream in these classes.0x000D0x000ANote how threads are always given a descriptive name in these classes, making the logging even easier to follow.0x000D0x000A0x000D0x000AAll this makes debugging and understanding the inner workings of your applications much easier reducing the need for external logging and debugging tools.0x000D0x000A0x000D0x000ANote also that by exposing the internal application state to the PropertyStream it can be read 'from' wherever convenient. 0x000D0x000AIn other words, you do not have to limit use of IP to only data-objects like 'Customer', 'Order' and similar, but you can also use it for internal parts of your application
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/ExposingApplicationState/LongDescription = Note that calls to Log will by default not be exposed to the PropertyStream.0x000D0x000ASee also0x000D0x000Alog.0x000D0x000AExceptionText, Heartbeat, 0x000D0x000ALog, HandleException
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/LinkInsertionInDocumentation/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/LinkInsertionInDocumentation/EnumMember = LinkInsertionInDocumentation
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/LinkInsertionInDocumentation/Description = Documentation with links is much easier to read.0x000D0x000A0x000D0x000AOn the other hand, inserting links can often be quite tedious in a typical markup language.0x000D0x000A0x000D0x000AAgoRapide offers a very easy method for link insertion: You just prepend and append the relevant word that you want a link to, with a minus sign / hyphen, '-' in the documentation.0x000D0x000A0x000D0x000AIf the relevant word is a C# identifier, you should in addition use the 'nameof' keyword, in order to catch renames and deletions of terms and also in order to be able to easy navigate within your developing environment (like when working within Visual Studio, using F12).0x000D0x000A0x000D0x000AIf this is done methodically, then any mechanism for creating for instance HTML documentation, (like the one offered in ARCDoc, that was by the way just an example of linking) can then first identify all terms (or files) that are created, and then blindly replace in the text -0x005BFilename0x005D- with '0x003Ca href="0x005BFilename0x005D"0x003E0x005BFilename0x005D0x003C/a0x003E' without actually knowing anything about the text's structure.0x000D0x000A0x000D0x000AThis is a pragmatic approach that works surprisingly well.0x000D0x000ASee also doc.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/LinkInsertionInDocumentation/LongDescription = FAQ: Why does AgoRapide not use XML comments (comments beginning with three slashes, '///')?0x000D0x000AAgoRapide in general does not use XML comments.0x000D0x000AThat is because XML comments are not included in the C# language, nor are they included in the compiled executable, that is, they are not available at run-time within the application.0x000D0x000AThey are also weakly referenced, meaning that if Intellisense or similar do not catch a rename or a deletion of some term, then the references to it will become a dead link (in other words, XML comments are prone to link-rot).0x000D0x000A(There is of course some use of XML comments in AgoRapide, especially when it is directly applicable to helping you as a developer to understand how to use a specific method or a specific parameter to a method).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TryPatternAndNull/EnumType = ARCCore.ARConcepts
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TryPatternAndNull/EnumMember = TryPatternAndNull
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARConcepts/_Member/TryPatternAndNull/Description = AgoRapide uses non-nullable reference types as default throughout the system0x000D0x000A0x000D0x000A(through the setting 0x003CPropertyGroup0x003E0x003CNullable0x003Eenable0x003C/Nullable0x003E0x003C/PropertyGroup0x003E in the .csproj-files).0x000D0x000A0x000D0x000AHowever, the TryGet- / TryParse-pattern does not work well with non-nullable reference types. A compromise is being used in AgoRapide where actually null! is set for the out-value when return value is FALSE. Assuming correct client-usage, this use of null! is considered to be an acceptable compromise. For more details, see https://softwareengineering.stackexchange.com/questions/387674/c-8-non-nullable-references-and-the-try-pattern
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/EnumType = ARCCore.AREnumType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/AREnumType = DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/Description = Categories different types of enum used in AgoRapide. The most important one is PropertyKeyEnum.0x000D0x000ANote how this enum AREnumType is itself a DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/PropertyKeyEnum/EnumType = ARCCore.AREnumType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/PropertyKeyEnum/EnumMember = PropertyKeyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/PropertyKeyEnum/Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/PropertyKeyEnum/LongDescription = Corresponding BaseAttribute is EnumAttribute / BasePKAttribute (the last of which there may be multiple).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/OrdinaryEnum/EnumType = ARCCore.AREnumType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/OrdinaryEnum/EnumMember = OrdinaryEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/OrdinaryEnum/Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/OrdinaryEnum/LongDescription = Corresponding BaseAttribute is EnumAttribute / EnumMemberAttribute.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/DocumentationOnlyEnum/EnumType = ARCCore.AREnumType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/DocumentationOnlyEnum/EnumMember = DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/DocumentationOnlyEnum/Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/AREnumType/_Member/DocumentationOnlyEnum/LongDescription = Corresponding BaseAttribute is EnumAttribute / EnumMemberAttribute. 0x000D0x000ANote how experience suggests that concepts originally documented as documentation only tend to get implementet in C# code anyway (as a kind of natural maturation of the code).0x000D0x000AIn other words, these enums becomes strong hint after some time passes that there should actually be some corresponding implementing class of the same name.0x000D0x000AThis again means that some if these enums will disappear from AgoRapide (and your application) as time goes by, replaced by concrete implementations.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/EnumType = ARCCore.ARNodeType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/AREnumType = DocumentationOnlyEnum
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/Description = Describes what function a node in an AgoRapide system serves. A given node may constitute of only StandardAgoRapideCode or a combination of StandardAgoRapideCode and ApplicationSpecificCode.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/LongDescription = Thanks to PropertyStream it is very easy to create multiple components of your application, each which does a limited number of tasks but easy understood and in an efficient manner with high performance.0x000D0x000A0x000D0x000ANote: As of Mar 2020 the actual code in AgoRapide makes little reference to this enum (ARNodeType). Instead, the type of node is decided by what kind of connections it is instructed to make0x000D0x000A0x000D0x000A
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/CoreDB/EnumType = ARCCore.ARNodeType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/CoreDB/EnumMember = CoreDB
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/CoreDB/Description = Normally this is a ARADB.0x000D0x000A0x000D0x000AA node which stores data as single PropertyStreamLines and keeps track of the entire database (maybe in cooperation with other nodes of same type).0x000D0x000A0x000D0x000AEnd-application specific code is typically not included in the node. The node will most probably accept Subscription from other nodes (as subscribing clients).0x000D0x000A0x000D0x000AThe general principle is to have the core nodes as simple ('as dumb') as possible, leaving to the edges to implement the rich application specific functionality (just like the Internet is built up).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/CoreDB/LongDescription = The node should be compiled with only StandardAgoRapideCode because that code is assumed to be stable and the core functionality is critical.0x000D0x000ANOTE: There is actually nothing stopping you from having the core database node being part of your application. But it will lead to longer startup times because the database is mostly in-memory and has to be read from disk at startup. Having the core database running as a separate node eliminates this issue.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/ArmDB/EnumType = ARCCore.ARNodeType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/ArmDB/EnumMember = ArmDB
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/ArmDB/Description = A node with a 'client Subscription' towards CoreDB to a (usually) subset of the entire database (acting as a cache and filtering mechanism), or with a 'client Subscription' towards CoreDB to the whole database (acting as a cache mechanism only)0x000D0x000A0x000D0x000Aand which stores data as either:0x000D0x000A0x000D0x000A1) PropertyStreamLines (enabling it to servere ordinary continous Subscription requests) or0x000D0x000A2) IP (typical PRich) (enabling it to answer AdHocQuery) (the last one is not implemented as of May 2020), 0x000D0x000ANote that since the data storage mechanism in StreamProcessor works just as well inside a Client node as inside an ArmDB node, in many scenarios the Client can just subscribe directly to CoreDB. In a high-load scenario however it might be useful having a single ArmDB node serving several Client nodes in order to relieve som load in CoreDB.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/ArmDB/LongDescription = The node will either be based on only StandardAgoRapideCode (be ARADB configured correspondingly)or also contain end-application specific code (being based on ARADB.0x000D0x000A0x000D0x000ANote that in principle this node could also cache incoming data to CoreDB. This could be useful in high-load scenarios where Client wants to just 'send-and-forget' data. But since the data storage mechanism in StreamProcessor works just as well inside a Client ndoe as inside an ArmDB node, there would usually be nothing in the way of Client caching itself, without any need for ArmDB.
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/Client/EnumType = ARCCore.ARNodeType
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/Client/EnumMember = Client
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/Client/Description = An 'end'-node with (usually) ApplicationSpecificCode but based on ARADB.0x000D0x000A0x000D0x000AThe node will either:0x000D0x000A1) Use something like PRich for data storage and have a Subscription to ArmDB0x000D0x000A(always being up-to-date with cached information in RAM),0x000D0x000Aor0x000D0x000A2) Not use any specific permanent storage but just AdHocQuery ArmDB as needed (similar to a traditional client / database setup).
Assembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARNodeType/_Member/Client/LongDescription = Note that for instance 'end'-nodes which only do logging should be quite possible to set up with only StandardAgoRapideCode, but apart from specific cases like that, all other 'end'-nodes are supposed to contain ApplicationSpecificCode.
Assembly/ARCDoc/_Description = A library supporting documentation and demonstrating usage of AgoRapide.0x000D0x000A0x000D0x000AOffers the following functionality:0x000D0x000A0x000D0x000A1) Generation of documentation by extracting BaseAttribute tags (like this one) for the different parts of your application. Compiling everything together in a coherent HTML presentation with links between the different topics.0x000D0x000A0x000D0x000A2) Demonstration of practical use of AgoRapide, through small easy to follow examples, like:0x000D0x000A a) 'Normal' AgoRapide classes and their usage.0x000D0x000A b) Demonstrate BoilerplateCodeProperties.0x000D0x000A c) Demonstrate BoilerplateCodePropertiesAndStorage.0x000D0x000A0x000D0x000ATODO: Extract the actual code examples from ARCDoc into this documentation text.
Assembly/ARCDoc/Class/_Description = All classes with some AgoRapide specific attributes found in assembly ARCDoc.
Assembly/ARCDoc/Class/Apple/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Apple/ClassType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/BaseTypes = ARCCore.PRich
Assembly/ARCDoc/Class/Apple/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/Apple/CorrespondingEnumType = ARCDoc.AppleP
Assembly/ARCDoc/Class/Apple/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.881 UTC.0x000D0x000A0x000D0x000Apublic String Name0x007B0x000D0x000A get =0x003E IP.GetPV0x003CString0x003E(AppleP.Name)0x003B0x000D0x000A set =0x003E IP.SetPV(AppleP.Name, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddName(String name) =0x003E IP.AddPV(AppleP.Name, name)0x003B0x000D0x000Apublic String? GetName() =0x003E TryGetName(out var retval) ? retval : null0x003B0x000D0x000Apublic String GetName(String defaultValue) =0x003E TryGetName(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetName(out String name) =0x003E IP.TryGetPV(AppleP.Name, out name)0x003B0x000D0x000A0x000D0x000A0x000D0x000Apublic ConsoleColor Colour0x007B0x000D0x000A get =0x003E IP.GetPV0x003CConsoleColor0x003E(AppleP.Colour)0x003B0x000D0x000A set =0x003E IP.SetPV(AppleP.Colour, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddColour(ConsoleColor colour) =0x003E IP.AddPV(AppleP.Colour, colour)0x003B0x000D0x000Apublic ConsoleColor? GetColour() =0x003E TryGetColour(out var retval) ? retval : null0x003B0x000D0x000Apublic ConsoleColor GetColour(ConsoleColor defaultValue) =0x003E TryGetColour(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetColour(out ConsoleColor colour) =0x003E IP.TryGetPV(AppleP.Colour, out colour)0x003B0x000D0x000A0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Apple/Description = The Apple class is implemented as a 'standard' AgoRapide entity-class.0x000D0x000A0x000D0x000AIt is somewhat memory-hungry due to inheriting PRich but very easy to implement.0x000D0x000A0x000D0x000ANote that apart from the convenience method Name (which is not necessary), the Apple class itself is totally empty.0x000D0x000A0x000D0x000AAll the descriptions of this class (except this text) are found in AppleP something which is consistent with the principle of TaggingOfPropertyKeys.
Assembly/ARCDoc/Class/Apple/LongDescription = See also Banana which implements IP directly and uses traditional storage for less memory consumption, and Orange which inherits PExact<EnumType>.
Assembly/ARCDoc/Class/Apple/_Member/AddName/ReflectedType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/_Member/AddName/MethodName = AddName
Assembly/ARCDoc/Class/Apple/_Member/AddName/MethodSignature = Void AddName(System.String)
Assembly/ARCDoc/Class/Apple/_Member/AddName/Description = See property Name for explanation
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName()/ReflectedType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName()/MethodName = GetName
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName()/MethodSignature = System.String GetName()
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName()/Description = See property Name for explanation
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName(System.String)/ReflectedType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName(System.String)/MethodName = GetName
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName(System.String)/MethodSignature = System.String GetName(System.String)
Assembly/ARCDoc/Class/Apple/_Member/System.String GetName(System.String)/Description = See property Name for explanation
Assembly/ARCDoc/Class/Apple/_Member/TryGetName/ReflectedType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/_Member/TryGetName/MethodName = TryGetName
Assembly/ARCDoc/Class/Apple/_Member/TryGetName/MethodSignature = Boolean TryGetName(System.String ByRef)
Assembly/ARCDoc/Class/Apple/_Member/TryGetName/Description = See property Name for explanation
Assembly/ARCDoc/Class/Apple/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCDoc/Class/Apple/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCDoc/Class/Apple/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCDoc/Class/Apple/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCDoc/Class/Apple/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCDoc/Class/Apple/_Member/ToString/MethodName = ToString
Assembly/ARCDoc/Class/Apple/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCDoc/Class/Apple/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCDoc/Class/Apple/_Member/Name/ReflectedType = ARCDoc.Apple
Assembly/ARCDoc/Class/Apple/_Member/Name/MethodName = Name
Assembly/ARCDoc/Class/Apple/_Member/Name/MethodSignature = System.String Name
Assembly/ARCDoc/Class/Apple/_Member/Name/Description = Convenience method, traditional getter / setter.0x000D0x000A0x000D0x000AIf you find AgoRapide's standard syntax for PropertyAccess too convoluted, then you can just implement traditional setters / getters like this one, for every property.0x000D0x000A0x000D0x000ANote that in order to get all the rich functionality of PropertyAccess you have to implement additional methods also, like AddName, -GetName- (two overloads, one potentially returning null, the other returning a specified default value) and TryGetName.0x000D0x000ASee also BoilerplateCodeProperties and BoilerplateCodePropertiesAndStorage.
Assembly/ARCDoc/Class/Banana/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Banana/ClassType = ARCDoc.Banana
Assembly/ARCDoc/Class/Banana/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/Banana/CorrespondingEnumType = ARCDoc.BananaP
Assembly/ARCDoc/Class/Banana/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.884 UTC.0x000D0x000A0x000D0x000Apublic String Name0x007B0x000D0x000A get =0x003E IP.GetPV0x003CString0x003E(BananaP.Name)0x003B0x000D0x000A set =0x003E IP.SetPV(BananaP.Name, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddName(String name) =0x003E IP.AddPV(BananaP.Name, name)0x003B0x000D0x000Apublic String? GetName() =0x003E TryGetName(out var retval) ? retval : null0x003B0x000D0x000Apublic String GetName(String defaultValue) =0x003E TryGetName(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetName(out String name) =0x003E IP.TryGetPV(BananaP.Name, out name)0x003B0x000D0x000A0x000D0x000A0x000D0x000Apublic ConsoleColor Colour0x007B0x000D0x000A get =0x003E IP.GetPV0x003CConsoleColor0x003E(BananaP.Colour)0x003B0x000D0x000A set =0x003E IP.SetPV(BananaP.Colour, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddColour(ConsoleColor colour) =0x003E IP.AddPV(BananaP.Colour, colour)0x003B0x000D0x000Apublic ConsoleColor? GetColour() =0x003E TryGetColour(out var retval) ? retval : null0x003B0x000D0x000Apublic ConsoleColor GetColour(ConsoleColor defaultValue) =0x003E TryGetColour(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetColour(out ConsoleColor colour) =0x003E IP.TryGetPV(BananaP.Colour, out colour)0x003B0x000D0x000A0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Banana/Description = The Banana class is implemented as an example of how you can use traditional property storage instead of the somewhat memory-hungry approach of inheriting PRich which uses a Dictionary0x003CPK,IP0x003E storage (like for instance as found in the Apple class).0x000D0x000A0x000D0x000AThe Banana class is memory efficient (in the sense that any 'traditional' C# object is memory efficient).0x000D0x000A0x000D0x000ANote how this class is also much more complicated to implement than the Apple class.0x000D0x000ABut do also note that you do not have to write this code yourself, because you can rely on BoilerplateCodePropertiesAndStorage to give you autogenerated code to turn your class into a traditional storage class.0x000D0x000A0x000D0x000ANOTE: Instead of Banana you would probably prefer to use the PExact<EnumType> NOTE: if memory usage is your main concern.0x000D0x000ANOTE: It is almost as effective regarding memory consumption and much easier to use (see Orange for an example).0x000D0x000A0x000D0x000ANote how all the flexibility of PropertyAccess is conserved, including what happens if values are not set (TryGetP etc).0x000D0x000A0x000D0x000ASee BoilerplateCodePropertiesAndStorage for more details.0x000D0x000A0x000D0x000ASee also MemoryConsumption / PropertyAccess.
Assembly/ARCDoc/Class/Banana/LongDescription = See also Apple, a 'standard' AgoRapide entity class, and Orange which inherits PExact<EnumType>.
Assembly/ARCDoc/Class/Banana/_Member/Name/ReflectedType = ARCDoc.Banana
Assembly/ARCDoc/Class/Banana/_Member/Name/MethodName = Name
Assembly/ARCDoc/Class/Banana/_Member/Name/MethodSignature = System.String Name
Assembly/ARCDoc/Class/Banana/_Member/Name/Description = Annotated as nullable in order to keep flexibility of PropertyAccess, including what happens if values are not set (TryGetP etc)
Assembly/ARCDoc/Class/Banana/_Member/Colour/ReflectedType = ARCDoc.Banana
Assembly/ARCDoc/Class/Banana/_Member/Colour/MethodName = Colour
Assembly/ARCDoc/Class/Banana/_Member/Colour/MethodSignature = System.Nullable0x006010x005BSystem.ConsoleColor0x005D Colour
Assembly/ARCDoc/Class/Banana/_Member/Colour/Description = Annotated as nullable in order to keep flexibility of PropertyAccess, including what happens if values are not set (TryGetP etc)
Assembly/ARCDoc/Class/Demonstrator/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Demonstrator/ClassType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/Description = Demonstrates various concepts from ARCCore.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePropertyStreamFormatAndDocumentAsHTML/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePropertyStreamFormatAndDocumentAsHTML/MethodName = DemonstratePropertyStreamFormatAndDocumentAsHTML
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePropertyStreamFormatAndDocumentAsHTML/MethodSignature = Void DemonstratePropertyStreamFormatAndDocumentAsHTML()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePropertyStreamFormatAndDocumentAsHTML/Description = Demonstrates use of PropertyStream by generating local data (documentation data) and writing locally to console.0x000D0x000A0x000D0x000AAlso generates documentation, does LinkInsertionInDocumentation and writes everything to disk as HTML.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessApple/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessApple/MethodName = DemonstrateEntityObjectAndPropertyAccessApple
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessApple/MethodSignature = Void DemonstrateEntityObjectAndPropertyAccessApple()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessApple/Description = Demonstrates use of PropertyAccess through the Apple class.0x000D0x000ANote how DemonstrateEntityObjectAndPropertyAccessApple,0x000D0x000ADemonstrateEntityObjectAndPropertyAccessBanana and0x000D0x000ADemonstrateEntityObjectAndPropertyAccessOrange 0x000D0x000Aall contain idential code, that is, the corresponding classes used (Apple, Banana, Orange) behaves in much the same manner.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessBanana/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessBanana/MethodName = DemonstrateEntityObjectAndPropertyAccessBanana
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessBanana/MethodSignature = Void DemonstrateEntityObjectAndPropertyAccessBanana()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessBanana/Description = Demonstrates use of PropertyAccess through the Banana class.0x000D0x000ANote how DemonstrateEntityObjectAndPropertyAccessApple,0x000D0x000ADemonstrateEntityObjectAndPropertyAccessBanana and0x000D0x000ADemonstrateEntityObjectAndPropertyAccessOrange 0x000D0x000Aall contain idential code, that is, the corresponding classes used (Apple, Banana, Orange) behaves in much the same manner.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessOrange/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessOrange/MethodName = DemonstrateEntityObjectAndPropertyAccessOrange
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessOrange/MethodSignature = Void DemonstrateEntityObjectAndPropertyAccessOrange()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateEntityObjectAndPropertyAccessOrange/Description = Demonstrates use of PropertyAccess through the Orange class.0x000D0x000ANote how DemonstrateEntityObjectAndPropertyAccessApple,0x000D0x000ADemonstrateEntityObjectAndPropertyAccessBanana and0x000D0x000ADemonstrateEntityObjectAndPropertyAccessOrange 0x000D0x000Aall contain idential code, that is, the corresponding classes used (Apple, Banana, Orange) behaves in much the same manner.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateITypeDescriberForDescribingSinglePropertyValues/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateITypeDescriberForDescribingSinglePropertyValues/MethodName = DemonstrateITypeDescriberForDescribingSinglePropertyValues
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateITypeDescriberForDescribingSinglePropertyValues/MethodSignature = Void DemonstrateITypeDescriberForDescribingSinglePropertyValues()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateITypeDescriberForDescribingSinglePropertyValues/Description = Demonstrates use of ITypeDescriber for describing single-property values.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePRichHierarchicalStorage/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePRichHierarchicalStorage/MethodName = DemonstratePRichHierarchicalStorage
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePRichHierarchicalStorage/MethodSignature = Void DemonstratePRichHierarchicalStorage()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstratePRichHierarchicalStorage/Description = Demonstrates use of PRich, how it receives PropertyStream-lines and builds up a strongly typed hierarchical object storage.0x000D0x000A0x000D0x000AAlso demonstrates how the original PropertyStream can be reconstructed, and how everything can be turned into an HTML representation (ToHTMLSimpleAsStaticFiles).
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateClientWithoutAnyAgoRapideCode/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateClientWithoutAnyAgoRapideCode/MethodName = DemonstrateClientWithoutAnyAgoRapideCode
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateClientWithoutAnyAgoRapideCode/MethodSignature = Void DemonstrateClientWithoutAnyAgoRapideCode()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateClientWithoutAnyAgoRapideCode/Description = Demonstrates adding PropertyStream-lines to CoreDB without using ANY AgoRapide component, only standard TCP/IP functionality in .NET.0x000D0x000A(has no mechanism for getting data back from the core).0x000D0x000A0x000D0x000AConstitues of two methods, DemonstrateClientWithoutAnyAgoRapideCode and SendToCoreDB plus some static variables at class-level (and of course -W- used for writing to local console).0x000D0x000A0x000D0x000AThe typical usage scenario here would be using AgoRapide for logging.0x000D0x000A0x000D0x000AYou may copy-paste this code as template for feeding data from other applications into an AgoRapide based system.
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateLogConsole/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateLogConsole/MethodName = DemonstrateLogConsole
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateLogConsole/MethodSignature = Void DemonstrateLogConsole(ARCCore.ConnectionInstruction)
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateLogConsole/Description = Demonstrates a quite simple log console
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateStreamProcessorAsClient/ReflectedType = ARCDoc.Demonstrator
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateStreamProcessorAsClient/MethodName = DemonstrateStreamProcessorAsClient
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateStreamProcessorAsClient/MethodSignature = Void DemonstrateStreamProcessorAsClient()
Assembly/ARCDoc/Class/Demonstrator/_Member/DemonstrateStreamProcessorAsClient/Description = Demonstrates use of StreamProcessor as a general client.0x000D0x000ADemonstration includes thread-safe processing of data received from the Subscription.
Assembly/ARCDoc/Class/Orange/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Orange/ClassType = ARCDoc.Orange
Assembly/ARCDoc/Class/Orange/BaseTypes = ARCCore.PExact0xoooo006010xoooo005BARCDoc.OrangeP0xoooo005D
Assembly/ARCDoc/Class/Orange/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/Orange/CorrespondingEnumType = ARCDoc.OrangeP
Assembly/ARCDoc/Class/Orange/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.885 UTC.0x000D0x000A0x000D0x000Apublic String Name0x007B0x000D0x000A get =0x003E IP.GetPV0x003CString0x003E(OrangeP.Name)0x003B0x000D0x000A set =0x003E IP.SetPV(OrangeP.Name, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddName(String name) =0x003E IP.AddPV(OrangeP.Name, name)0x003B0x000D0x000Apublic String? GetName() =0x003E TryGetName(out var retval) ? retval : null0x003B0x000D0x000Apublic String GetName(String defaultValue) =0x003E TryGetName(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetName(out String name) =0x003E IP.TryGetPV(OrangeP.Name, out name)0x003B0x000D0x000A0x000D0x000A0x000D0x000Apublic ConsoleColor Colour0x007B0x000D0x000A get =0x003E IP.GetPV0x003CConsoleColor0x003E(OrangeP.Colour)0x003B0x000D0x000A set =0x003E IP.SetPV(OrangeP.Colour, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddColour(ConsoleColor colour) =0x003E IP.AddPV(OrangeP.Colour, colour)0x003B0x000D0x000Apublic ConsoleColor? GetColour() =0x003E TryGetColour(out var retval) ? retval : null0x003B0x000D0x000Apublic ConsoleColor GetColour(ConsoleColor defaultValue) =0x003E TryGetColour(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetColour(out ConsoleColor colour) =0x003E IP.TryGetPV(OrangeP.Colour, out colour)0x003B0x000D0x000A0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Orange/Description = Demonstrates use of PExact<EnumType>.0x000D0x000A
Assembly/ARCDoc/Class/Orange/LongDescription = See also Banana which implements IP directly and uses traditional storage for less memory consumption, and Apple, a 'standard' AgoRapide entity class.
Assembly/ARCDoc/Class/Orange/_Member/Name/ReflectedType = ARCDoc.Orange
Assembly/ARCDoc/Class/Orange/_Member/Name/MethodName = Name
Assembly/ARCDoc/Class/Orange/_Member/Name/MethodSignature = System.String Name
Assembly/ARCDoc/Class/Orange/_Member/Name/Description = See Name for more information.
Assembly/ARCDoc/Class/Orange/_Member/Storage/ReflectedType = ARCDoc.Orange
Assembly/ARCDoc/Class/Orange/_Member/Storage/MethodName = Storage
Assembly/ARCDoc/Class/Orange/_Member/Storage/MethodSignature = System.Object0x005B0x005D Storage
Assembly/ARCDoc/Class/Orange/_Member/Storage/Description = Uses int-value of __enum minus 1 as index.0x000D0x000AUse from outside with care.
Assembly/ARCDoc/Class/SomeApplicationComponent/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/SomeApplicationComponent/ClassType = ARCDoc.SomeApplicationComponent
Assembly/ARCDoc/Class/SomeApplicationComponent/BaseTypes = ARCCore.PConcurrent
Assembly/ARCDoc/Class/SomeApplicationComponent/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/SomeApplicationComponent/CorrespondingEnumType = ARCDoc.SomeApplicationComponentP
Assembly/ARCDoc/Class/SomeApplicationComponent/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.885 UTC.0x000D0x000A0x000D0x000Apublic Int64 SomeCountValue0x007B0x000D0x000A get =0x003E IP.GetPV0x003CInt640x003E(SomeApplicationComponentP.SomeCountValue)0x003B0x000D0x000A set =0x003E IP.SetPV(SomeApplicationComponentP.SomeCountValue, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddSomeCountValue(Int64 someCountValue) =0x003E IP.AddPV(SomeApplicationComponentP.SomeCountValue, someCountValue)0x003B0x000D0x000Apublic Int64? GetSomeCountValue() =0x003E TryGetSomeCountValue(out var retval) ? retval : null0x003B0x000D0x000Apublic Int64 GetSomeCountValue(Int64 defaultValue) =0x003E TryGetSomeCountValue(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetSomeCountValue(out Int64 someCountValue) =0x003E IP.TryGetPV(SomeApplicationComponentP.SomeCountValue, out someCountValue)0x003B0x000D0x000A0x000D0x000A0x000D0x000Apublic Int64 SomeCountValueNotToBeLogged0x007B0x000D0x000A get =0x003E IP.GetPV0x003CInt640x003E(SomeApplicationComponentP.SomeCountValueNotToBeLogged)0x003B0x000D0x000A set =0x003E IP.SetPV(SomeApplicationComponentP.SomeCountValueNotToBeLogged, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddSomeCountValueNotToBeLogged(Int64 someCountValueNotToBeLogged) =0x003E IP.AddPV(SomeApplicationComponentP.SomeCountValueNotToBeLogged, someCountValueNotToBeLogged)0x003B0x000D0x000Apublic Int64? GetSomeCountValueNotToBeLogged() =0x003E TryGetSomeCountValueNotToBeLogged(out var retval) ? retval : null0x003B0x000D0x000Apublic Int64 GetSomeCountValueNotToBeLogged(Int64 defaultValue) =0x003E TryGetSomeCountValueNotToBeLogged(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetSomeCountValueNotToBeLogged(out Int64 someCountValueNotToBeLogged) =0x003E IP.TryGetPV(SomeApplicationComponentP.SomeCountValueNotToBeLogged, out someCountValueNotToBeLogged)0x003B0x000D0x000A0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/SomeApplicationComponent/Description = Demonstrates how also your actual application classes, not only your data classes, should implement IP.0x000D0x000AThe goal is ExposingApplicationState.
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodC/ReflectedType = ARCDoc.SomeApplicationComponent
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodC/MethodName = MethodC
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodC/MethodSignature = Void MethodC(System.String, System.String)
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodC/Description = Note structured format in logging.0x000D0x000A0x000D0x000AThis makes it easier to parse this information at a later stage. For instance in order to create performance metrics.0x000D0x000A0x000D0x000AExample of output text:0x000D0x000Alog/SomeApplicationComponent/log = MethodC/MainThread/1/Start = 2020-06-03 13:20:59.7600x000D0x000Alog/SomeApplicationComponent/log = MethodC/MainThread/1/parameterA = Value of A0x000D0x000Alog/SomeApplicationComponent/log = MethodC/MainThread/1/parameterB = Value of B0x000D0x000Alog/SomeApplicationComponent/log = MethodC/MainThread/1/Finish = 2020-06-03 13:21:00.7660x000D0x000Alog/SomeApplicationComponent/log = MethodC/MainThread/1/ElapsedTime = 00:00:01.0050x000D0x000A
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodD/ReflectedType = ARCDoc.SomeApplicationComponent
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodD/MethodName = MethodD
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodD/MethodSignature = System.String MethodD(System.String, System.String)
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/MethodD/Description = Same as MethodC- but returns data ('Func0x003Cstring0x003E()' instead of 'Action()')
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/ToString/MethodName = ToString
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCDoc/Class/SomeApplicationComponent/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCDoc/Class/Documentator/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Documentator/ClassType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/BaseTypes = ARCCore.PRich
Assembly/ARCDoc/Class/Documentator/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/Documentator/CorrespondingEnumType = ARCDoc.DocumentatorP
Assembly/ARCDoc/Class/Documentator/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.885 UTC.0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Documentator/Description = General class for documenting AgoRapide and also your own ApplicationSpecificCode.0x000D0x000A0x000D0x000ASee also DocumentatorP.0x000D0x000A0x000D0x000ANote that you are not required to generate documentation / use this library (ARCDoc), your application works quite fine without it.0x000D0x000A0x000D0x000ATypical methods involved for generating rudimentary HTML documentation are:0x000D0x000ABuildDocumentationHierarchy,0x000D0x000AToHTMLSimpleAsStaticFiles,0x000D0x000AInsertLinks,0x000D0x000AWriteAllHTMLFilesToDisk.0x000D0x000A0x000D0x000ANote that the AgoRapide library ARCAPI offers much richer functionality for generating HTML views (and also JSON views) than the somewhat rudimentary process outlined above (especially because it offers search and filtering functionality).0x000D0x000A0x000D0x000AHINT: If you want to test concepts like PropertyStream and CoreDB then this class is a good generator of properties for the stream. Just call ToPropertyStream on this class after calling BuildDocumentationHierarchy and you will have a sizeable chunk of property stream lines available for testing.
Assembly/ARCDoc/Class/Documentator/_Member/BuildDocumentationHierarchy/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/BuildDocumentationHierarchy/MethodName = BuildDocumentationHierarchy
Assembly/ARCDoc/Class/Documentator/_Member/BuildDocumentationHierarchy/MethodSignature = Void BuildDocumentationHierarchy(System.Collections.Generic.IEnumerable0x006010x005BSystem.Reflection.Assembly0x005D, System.String)
Assembly/ARCDoc/Class/Documentator/_Member/BuildDocumentationHierarchy/Description = Builds a natural hierarchical representation of documentation attributes found in the given assemblies.0x000D0x000A0x000D0x000ACreates documentation for your application based on attributes like ClassAttribute, ClassMemberAttribute, EnumAttribute,0x000D0x000AEnumMemberAttribute,0x000D0x000APKTypeAttribute,0x000D0x000APKLogAttribute and so on0x000D0x000A0x000D0x000ANote how documentation will include both ApplicationSpecificCode and StandardAgoRapideCode (as long as parameter assemblies contain the relevant assemblies).0x000D0x000AHint: Limit parameter 'assemblies' to only those assemblies containing your ApplicationSpecificCode in order to have documentation of only your application, without the AgoRapide library documentation 'coming in the way'.0x000D0x000A0x000D0x000AAfter call, all documentation is available inside this instance.0x000D0x000A0x000D0x000ANote: If you want to publish the resulting data to PropertyStream you should prefix the data with doc.0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinks/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinks/MethodName = InsertLinks
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinks/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCDoc.HTMLFileWithLocation0x005D InsertLinks(System.Collections.Generic.IEnumerable0x006010x005BARCDoc.HTMLFileWithLocation0x005D, System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D)
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinks/Description = Does LinkInsertionInDocumentation on the file contents.0x000D0x000A0x000D0x000ACalls FindPotentialHTMLLinks first and then Calls InsertLinksSingleFile in order to insert the actuals links.0x000D0x000A0x000D0x000ADuplicate filenames are resolved through a resolution page in folder '_TargetResolution' These resolution pages are also added to the returned collection (in other words, the returned collection will contain more items than the collection passed in as parameter).
Assembly/ARCDoc/Class/Documentator/_Member/FindPotentialHTMLLinks/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/FindPotentialHTMLLinks/MethodName = FindPotentialHTMLLinks
Assembly/ARCDoc/Class/Documentator/_Member/FindPotentialHTMLLinks/MethodSignature = PotentialHTMLLinks FindPotentialHTMLLinks(System.Collections.Generic.IEnumerable0x006010x005BARCDoc.HTMLFileWithLocation0x005D)
Assembly/ARCDoc/Class/Documentator/_Member/FindPotentialHTMLLinks/Description = Notes all filenames and their positions in the hierarchical directory structure. 0x000D0x000ACreates a potential link for every filename found (See -Links-)0x000D0x000ADuplicate filenames are linked to a target resolution page (See TargetResolutionHTMLPages).0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinksSingleFile/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinksSingleFile/MethodName = InsertLinksSingleFile
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinksSingleFile/MethodSignature = System.String InsertLinksSingleFile(System.Collections.Generic.List0x006010x005BSystem.String0x005D, System.String, System.Collections.Generic.IEnumerable0x006010x005BSystem.String0x005D, PotentialHTMLLinks)
Assembly/ARCDoc/Class/Documentator/_Member/InsertLinksSingleFile/Description = Does LinkInsertionInDocumentation on the file contents.0x000D0x000A0x000D0x000AReplaces all occurrences of any -0x005BHTMLLink0x005D- with corresponding '0x003Ca href = "...' tag.0x000D0x000AReplacement includes any -0x005BAssemblyName0x005D.0x005BHTMLLink0x005D- combination also.0x000D0x000A0x000D0x000ATODO: Possible easy improvement:0x000D0x000ATODO: PotentialHTMLLinks could be grouped by first letters or similar0x000D0x000ATODO: If hyphen + that letter do not exist, then we can skip that group altogether.0x000D0x000ATDDO: This should greatly speed up insertion of links in small documents.
Assembly/ARCDoc/Class/Documentator/_Member/WriteAllHTMLFilesToDisk/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/WriteAllHTMLFilesToDisk/MethodName = WriteAllHTMLFilesToDisk
Assembly/ARCDoc/Class/Documentator/_Member/WriteAllHTMLFilesToDisk/MethodSignature = Void WriteAllHTMLFilesToDisk(System.String, System.Collections.Generic.IEnumerable0x006010x005BARCDoc.HTMLFileWithLocation0x005D)
Assembly/ARCDoc/Class/Documentator/_Member/WriteAllHTMLFilesToDisk/Description = Wraps file content inside 0x003Chead0x003E / 0x003Cbody0x003E with some rudimentary CSS.
Assembly/ARCDoc/Class/Documentator/_Member/GenerateHTMLPage/ReflectedType = ARCDoc.Documentator
Assembly/ARCDoc/Class/Documentator/_Member/GenerateHTMLPage/MethodName = GenerateHTMLPage
Assembly/ARCDoc/Class/Documentator/_Member/GenerateHTMLPage/MethodSignature = System.String GenerateHTMLPage(System.String)
Assembly/ARCDoc/Class/Documentator/_Member/GenerateHTMLPage/Description = Wraps the parameter inside a 0x003Chtml0x003E0x003Chead0x003E0x003C/head0x003E0x003Cbody0x003E...0x003C/body0x003E0x003C/html0x003E enclosure, in other words, turns it into a complete HTML page.
Assembly/ARCDoc/Class/Documentator/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCDoc/Class/Documentator/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCDoc/Class/Documentator/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCDoc/Class/Documentator/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCDoc/Class/Documentator/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCDoc/Class/Documentator/_Member/ToString/MethodName = ToString
Assembly/ARCDoc/Class/Documentator/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCDoc/Class/Documentator/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCDoc/Class/HTMLFileWithLocation/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/HTMLFileWithLocation/ClassType = ARCDoc.HTMLFileWithLocation
Assembly/ARCDoc/Class/HTMLFileWithLocation/Description = Container class describing a single HTML file with its location (in a hierarchial folder structure).0x000D0x000A0x000D0x000ASee HTMLLinkWordWithLocation for information about how references to instances of this class is expected to turn up as references in other instances of this class.0x000D0x000A0x000D0x000AThis class is immutable
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Location/ReflectedType = ARCDoc.HTMLFileWithLocation
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Location/MethodName = Location
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Location/MethodSignature = System.Collections.Generic.List0x006010x005BSystem.String0x005D Location
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Location/Description = Folder names / hierarchical levels.0x000D0x000A0x000D0x000AList instead of IEnumerable makes later processing much easier (knowing size of collection).0x000D0x000A0x000D0x000AEach member is guaranteed to contain only characters in AllowedFileOrFolderNameChars. Normally the name will be one returned from CreateSafeFileOrFolderName.
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Filename/ReflectedType = ARCDoc.HTMLFileWithLocation
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Filename/MethodName = Filename
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Filename/MethodSignature = System.String Filename
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/Filename/Description = Guaranteed to contain only characters in AllowedFileOrFolderNameChars.0x000D0x000ANormally the name will be one returned from CreateSafeFileOrFolderName.
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/FileContentHTML/ReflectedType = ARCDoc.HTMLFileWithLocation
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/FileContentHTML/MethodName = FileContentHTML
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/FileContentHTML/MethodSignature = System.String FileContentHTML
Assembly/ARCDoc/Class/HTMLFileWithLocation/_Member/FileContentHTML/Description = Content within 0x003Cbody0x003E-tags. Note how GenerateHTMLPage wraps content within 0x003Chtml0x003E0x003Cbody0x003E
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/ClassType = ARCDoc.HTMLLinkWordWithLocation
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/Description = Describes to where a single HTML link points.0x000D0x000A0x000D0x000ABy link we mean a link according to LinkInsertionInDocumentation, that is words in an HTML-document like -MyCustomerClass-.0x000D0x000A0x000D0x000ABy HTML we mean that LinkWordHTML is encoded in HTML, so for instance a link to a generic class like -MyCustomerClass0x003CT0x003E- actually looks like -MyCustomerClass<0x003BT>0x003B-.0x000D0x000A0x000D0x000AUsed as input to InsertLinksSingleFile (telling it what to look for, and how to replace the text with a corresponding '0x003Ca href = ...' tag)0x000D0x000A0x000D0x000ANote how there is almost a one-to-one match between HTMLFileWithLocation and HTMLLinkWordWithLocation with the latter pointing to a corresponding instance of the former. It is only when we have duplicate filenames that HTMLLinkWordWithLocation will instead point to a dedicated '_TargetResolution' page for that filename.0x000D0x000A0x000D0x000AThis class is immutable
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/.ctor/ReflectedType = ARCDoc.HTMLLinkWordWithLocation
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/.ctor/MethodName = .ctor
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/.ctor/MethodSignature = Void .ctor(System.Collections.Generic.List0x006010x005BSystem.String0x005D, System.String, System.String)
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/.ctor/Description = Note that in contrast to HTMLFileWithLocation this constructor does not do any validation on folder and file names. It is considered unnecessary because this class is constructed based on instances of HTMLFileWithLocation (where folder and file names are validated). And the validation process is somewhat processing intensive.
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/Location/ReflectedType = ARCDoc.HTMLLinkWordWithLocation
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/Location/MethodName = Location
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/Location/MethodSignature = System.Collections.Generic.List0x006010x005BSystem.String0x005D Location
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/Location/Description = Folder names / hierarchical levels.0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/LinkWordHTML/ReflectedType = ARCDoc.HTMLLinkWordWithLocation
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/LinkWordHTML/MethodName = LinkWordHTML
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/LinkWordHTML/MethodSignature = System.String LinkWordHTML
Assembly/ARCDoc/Class/HTMLLinkWordWithLocation/_Member/LinkWordHTML/Description = Actual link as it is expected to occur in text, like '-MyCustomerClass<0x003BT>0x003B-'.
Assembly/ARCDoc/Class/DummyEnum/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/DummyEnum/ClassType = ARCDoc.DummyEnum
Assembly/ARCDoc/Class/DummyEnum/BaseTypes = ARCCore.PRich
Assembly/ARCDoc/Class/DummyEnum/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/DummyEnum/CorrespondingEnumType = ARCDoc.DummyEnumP
Assembly/ARCDoc/Class/DummyEnum/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.886 UTC.0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/DummyEnum/Description = Fully flexible storage. Can store anything. Typical inherited for entity representations like 'Customer' or 'Order'.0x000D0x000A0x000D0x000APRich = rich property. Rich in the sense that it can store a wide amount of information.0x000D0x000A0x000D0x000ACan also function as a 'root' storage for all data.0x000D0x000A0x000D0x000AInherently not thread-safe due to using Dictionary and not ConcurrentDictionary as storage.0x000D0x000ASee tips about locking in documentation for OutsideLocalReceiver and some practical code in ARCDoc0x000D0x000A0x000D0x000ASee PConcurrent for a (somewhat more) thread-safe alternative.0x000D0x000ASee PExact<EnumType> for a more memory efficient alternative.0x000D0x000A0x000D0x000AA more expensive (memory-wise) 'property'-object to use compared to PValue<T>.0x000D0x000A0x000D0x000AProbably suitable when you want full flexibility about which metadata to store (see PP) and / or want to store child properties.0x000D0x000AMost probably the one to use for 'ordinary' entities like 'Customer', 'Product' and so on, whereas PValue<T> is often used for single values for these instances (like 'FirstName', 'Price' and so on).0x000D0x000A0x000D0x000AAn instance of this class can also be used as the single total in-memory data storage in your application.0x000D0x000AA typical representation would then consist of dictionaries inside dictionaries, with IK-keys and either PRich-values or specific IP-subclass instances (like 'Customer') values inside those again.0x000D0x000ASuch a usage would be very typical for a Client but also possible for ArmDB (enabling it to answer AdHocQuery over an TCP/IP connection.0x000D0x000AWith such a usage the instance of this class would typically populated by calling -ParseAndStore-.0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/DummyEnum/LongDescription = Note that in a 'StandardAgoRapideCode-only application' IKString (or IKType but generated from FromString) will be used more as key, and PRich more used as values (instead of more specific IP-subclass instances (like 'Customer')), because the actual types and property keys are not known.0x000D0x000AAlthough their names may be known because they can be announced over the property stream, the definition for those types are unknown (the types are not present in the assemblies constituting the application).0x000D0x000A0x000D0x000AThis means that for instance an ArmDB application may not be able to validate all data, or answer the most complex queries (because it lacks the type information and has to operate more on strings).0x000D0x000A0x000D0x000ATODO: Implement storing of this collection to disk at regular intervals.0x000D0x000ATOOD: Background: If data are received from StreamProcessor through OutsideLocalReceiver0x000D0x000ATOOD: (and read by StreamProcessor at application startup), then un-needed historical data will accumulate0x000D0x000ATODO: (for instance if this object stores only the last temperature, but all temperatures are stored to disk).0x000D0x000ATODO: Solution: Replace disk storage at regular intervals by serializing this object's data to disk with ToPropertyStream.0x000D0x000A
Assembly/ARCDoc/Class/DummyEnum/_Member/TryGetV/ReflectedType = ARCCore.PK
Assembly/ARCDoc/Class/DummyEnum/_Member/TryGetV/MethodName = TryGetV
Assembly/ARCDoc/Class/DummyEnum/_Member/TryGetV/MethodSignature = Boolean TryGetV0x005BTRequest0x005D(TRequest ByRef, System.String ByRef)
Assembly/ARCDoc/Class/DummyEnum/_Member/TryGetV/Description = Note that 'normally' this method would be irrelevant for us a PRich object because we will usually be an entity object (like 'Customer') not having an intrinsic value ourselves per se (because we will instead be containing a list of values).0x000D0x000A0x000D0x000ASee -Value for information about when this method IS relevant (when storing metadata about a property).
Assembly/ARCDoc/Class/DummyEnum/_Member/ToString/ReflectedType = ARCCore.P
Assembly/ARCDoc/Class/DummyEnum/_Member/ToString/MethodName = ToString
Assembly/ARCDoc/Class/DummyEnum/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCDoc/Class/DummyEnum/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCDoc/Class/Extensions/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Extensions/ClassType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/Description = Contains various extension methods for IP and IKIP related to documentating / reporting / HTML.0x000D0x000A0x000D0x000ASee for instance ToHTMLSimpleAsStaticFiles which transforms any IP object into an HTML representation.
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsStaticFiles/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsStaticFiles/MethodName = ToHTMLSimpleAsStaticFiles
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsStaticFiles/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCDoc.HTMLFileWithLocation0x005D ToHTMLSimpleAsStaticFiles(ARCCore.IP, Boolean, Boolean, System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Collections.Generic.List0x006010x005BARCDoc.HTMLFileWithLocation0x005D)
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsStaticFiles/Description = Transforms this IP object (and recursively all contained objects) into a data structure suitable for storing as a static HTML representation.0x000D0x000A0x000D0x000ACreates a complete HTML representation in the form of separate HTML files.0x000D0x000AAfter calling this method it is natural to call InsertLinks and finally WriteAllHTMLFilesToDisk.0x000D0x000A0x000D0x000ANote: The 'files' content returned are only what is inside the 0x003Cbody0x003E tags.0x000D0x000AThis means that before finally storing as an HTML file to disk, 0x003Chtml0x003E and 0x003Chead0x003E tags should be added and the returned content should be wrapped inside a 0x003Cbody0x003E tag (this is done by for instance WriteAllHTMLFilesToDisk)0x000D0x000A0x000D0x000ABy simple we mean that no Javascript library is involved, only standard HTML, CSS and Javascript.0x000D0x000A0x000D0x000ABy static files we meant that the final representation can be stored direct on disk, without any web-server involved.0x000D0x000A0x000D0x000ANote how syntax of method call is kept close to ToPropertyStream.0x000D0x000A0x000D0x000ASee also Documentator.0x000D0x000A0x000D0x000ATODO: See ToHTMLSimpleSingle, add use of reflection in order to call any class implementation of this method instead.
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleRecursive/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleRecursive/MethodName = ToHTMLSimpleSingleRecursive
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleRecursive/MethodSignature = System.String ToHTMLSimpleSingleRecursive(ARCCore.IP, Boolean, System.Collections.Generic.List0x006010x005BARCCore.IK0x005D, System.Text.StringBuilder)
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleRecursive/Description = Calls ToHTMLSimpleSingle recursively.0x000D0x000AIn other words, flattens out a hierarchical structure into one single 'flat' HTML file.0x000D0x000A0x000D0x000ATODO: See ToHTMLSimpleSingle, add use of reflection in order to call any class implementation of this method instead.
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingle/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingle/MethodName = ToHTMLSimpleSingle
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingle/MethodSignature = System.String ToHTMLSimpleSingle(ARCCore.IP, Boolean, System.Collections.Generic.List0x006010x005BARCCore.IK0x005D)
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingle/Description = Creates a simple HTML representation of the given parameter.0x000D0x000A0x000D0x000AThe properties are shown as a two column table with heading Key and Value.0x000D0x000A0x000D0x000ABy simple we mean that no Javascript library is involved, only standard HTML, CSS and Javascript.0x000D0x000ABy single we mean that no recursion will be performed (for recursion see ToHTMLSimpleAsStaticFiles.0x000D0x000AFor all properties it is assumed that they can be linked to with the given link context plus the ToString value as reference.0x000D0x000A0x000D0x000AIf the link context contains a '*', it is assumed that from that level and down the hierarchical structure has been flattened into a single HTML page page, in other words, that the links are internally on the same page.This is in order to accompany wildcards in REST queries like 'RQ/Assembly/ARCCore/Class/ActualConnection/*.html'.0x000D0x000A0x000D0x000AIf you have a specific implementation of IP that needs a different HTML representation than what is offered by this method, then you can just implement a method with this same signature for that implementation.0x000D0x000A0x000D0x000ANote that ARCAPI offers additional functionality for generating HTML views.0x000D0x000AFor instance this method is not very well suited to represent a uniform collection of objects, something which ARCAPI offers.0x000D0x000AIn other words, this method is very suitable for representing a single 'Customer' object, but not a uniform collection of 'Customer' objects.
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingle/LongDescription = NOTE: If you actually implement this method (ToHTMLSimpleSingle) in your own class0x000D0x000ANOTE: (something which you quite naturally will want to do).0x000D0x000ANOTE: then it would by default (in .NET) not be called if the (statically known) type of the object0x000D0x000ANOTE: at the time of invocation was IP (instead of the actual type).0x000D0x000ANOTE: 0x000D0x000ANOTE: This extension method therefore uses reflection in order to look for a specific implementation NOTE: in the (dynamically known) type of the IP parameter NOTE: and calls that method instead if found.0x000D0x000ANOTE: 0x000D0x000ANOTE: See this article for more information0x000D0x000ANOTE: https://stackoverflow.com/questions/30645441/extension-methods-with-base-and-sub-classes 0x000D0x000A
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleInternal/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleInternal/MethodName = ToHTMLSimpleSingleInternal
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleInternal/MethodSignature = System.String ToHTMLSimpleSingleInternal(ARCCore.IP, Boolean, System.Collections.Generic.List0x006010x005BARCCore.IK0x005D)
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleSingleInternal/Description = Hack in order to escape check for direct implementation in actual class of ToHTMLSimpleSingle in ToHTMLSimpleSingle.
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsTableRow/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsTableRow/MethodName = ToHTMLSimpleAsTableRow
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsTableRow/MethodSignature = System.String ToHTMLSimpleAsTableRow(ARCCore.IKIP, System.String, Boolean)
Assembly/ARCDoc/Class/Extensions/_Member/ToHTMLSimpleAsTableRow/Description = Creates a simple HTML representation of the given parameter as a single two column row (Key, Value) in a table.0x000D0x000A0x000D0x000ABy simple we mean that no Javascript library is involved, only standard HTML, CSS and Javascript.0x000D0x000A0x000D0x000ABy single we mean that no recursion will be performed (for recursion see ToHTMLSimpleAsStaticFiles.0x000D0x000AIt is assumed that the actual property can be linked with to with the given link context and Key as reference.0x000D0x000A0x000D0x000AIf the key ends with Id and value is in the form '(key minus Id) plus slash plus value', like CustomerId = Customer/42, then will assume that can create link of value.0x000D0x000ANote how this is totally independent of any predefined structure.0x000D0x000A0x000D0x000ANote that ARCAPI offers additional functionality for generating HTML views.
Assembly/ARCDoc/Class/Extensions/_Member/DescribeValue/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/DescribeValue/MethodName = DescribeValue
Assembly/ARCDoc/Class/Extensions/_Member/DescribeValue/MethodSignature = System.String DescribeValue(ARCCore.IKIP, Boolean)
Assembly/ARCDoc/Class/Extensions/_Member/DescribeValue/Description = Describes the value contained withing an IKIP (P).0x000D0x000A0x000D0x000AUseful in drill-down situations, where P has no intrinsic value itself but contains properties / links to new values. In that case the description could for instance include list of keys found 'one level further down' (assuming not too may of them present).0x000D0x000A0x000D0x000ACan in a worst case scenario return an empty string, for instance if no intrinsic value, no description and noe keys to list.0x000D0x000A0x000D0x000AIf parameter prepareForLinkInsertion is given then will attempt to do LinkInsertionInDocumentation if there is a high probability that the returned value is a link This is somewhat experimental as of May 2020.0x000D0x000AAn example for when this is relevant is for a documentation page like0x000D0x000AAssembly/ARCCore/AREnumType/DocumentationOnlyEnum/ARComponents/_Member/ARADB.html0x000D0x000AHere values like EnumMember and EnumType should link to actual values,0x000D0x000Aso instead of a table-row (key value) listing like0x000D0x000A EnumMember ARADB0x000D0x000A EnumType ARCCore.ARComponents0x000D0x000AThis method describes the values as0x000D0x000A EnumMember ARADB0x000D0x000A EnumType ARCCore.ARComponents0x000D0x000Afor later link insertion.0x000D0x000A0x000D0x000ATODO: Add parameters describing when to list keys or not, and when to use linking.TODO: Also, ensure that can link values like Customer/42 (but calling method should do that?)0x000D0x000A
Assembly/ARCDoc/Class/Extensions/_Member/ValueToHTMLSimpleWithTooltip/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/ValueToHTMLSimpleWithTooltip/MethodName = ValueToHTMLSimpleWithTooltip
Assembly/ARCDoc/Class/Extensions/_Member/ValueToHTMLSimpleWithTooltip/MethodSignature = System.String ValueToHTMLSimpleWithTooltip(ARCCore.IP)
Assembly/ARCDoc/Class/Extensions/_Member/ValueToHTMLSimpleWithTooltip/Description = Creates a simple HTML representation of the Value with description as a 'tooltip'.0x000D0x000A0x000D0x000AReturned value is intended for location inside a 0x003Ctd0x003E...0x003C/td0x003E or similiar (returned value is not enclosed within 0x003Cp0x003E...0x003C/p0x003E for instance.0x000D0x000A0x000D0x000AReturns ' 0x003B' if no value found.0x000D0x000A0x000D0x000ANote: The tooltip is only relevant when value itself has a BaseAttribute, as of Apr 2020 this is only checked for enum members / enum values.
Assembly/ARCDoc/Class/Extensions/_Member/KeyToHTMLSimpleWithTooltip/ReflectedType = ARCDoc.Extensions
Assembly/ARCDoc/Class/Extensions/_Member/KeyToHTMLSimpleWithTooltip/MethodName = KeyToHTMLSimpleWithTooltip
Assembly/ARCDoc/Class/Extensions/_Member/KeyToHTMLSimpleWithTooltip/MethodSignature = System.String KeyToHTMLSimpleWithTooltip(ARCCore.IK)
Assembly/ARCDoc/Class/Extensions/_Member/KeyToHTMLSimpleWithTooltip/Description = Creates a simple HTML representation of the Key with description as a 'tooltip'.
Assembly/ARCDoc/Class/PKDocAttribute/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/PKDocAttribute/ClassType = ARCDoc.PKDocAttribute
Assembly/ARCDoc/Class/PKDocAttribute/BaseTypes = System.Attribute0x003BARCCore.BaseAttribute0x003BARCCore.EnumMemberAttribute0x003BARCCore.BasePKAttribute
Assembly/ARCDoc/Class/PKDocAttribute/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCDoc/Class/PKDocAttribute/CorrespondingEnumType = ARCDoc.PKDocAttributeP
Assembly/ARCDoc/Class/PKDocAttribute/BoilerplateCodeProperties = // Autogenerated boilerplate code. Generated at 2020-10-13 11:10:15.887 UTC.0x000D0x000A0x000D0x000Apublic PriorityOrder PriorityOrder0x007B0x000D0x000A get =0x003E IP.GetPV0x003CPriorityOrder0x003E(PKDocAttributeP.PriorityOrder)0x003B0x000D0x000A set =0x003E IP.SetPV(PKDocAttributeP.PriorityOrder, value)0x003B0x000D0x000A0x007D0x000D0x000Apublic AddPriorityOrder(PriorityOrder priorityOrder) =0x003E IP.AddPV(PKDocAttributeP.PriorityOrder, priorityOrder)0x003B0x000D0x000Apublic PriorityOrder? GetPriorityOrder() =0x003E TryGetPriorityOrder(out var retval) ? retval : null0x003B0x000D0x000Apublic PriorityOrder GetPriorityOrder(PriorityOrder defaultValue) =0x003E TryGetPriorityOrder(out var retval) ? retval : defaultValue0x003B0x000D0x000Apublic bool TryGetPriorityOrder(out PriorityOrder priorityOrder) =0x003E IP.TryGetPV(PKDocAttributeP.PriorityOrder, out priorityOrder)0x003B0x000D0x000A0x000D0x000A0x000D0x000A
Assembly/ARCDoc/Class/PKDocAttribute/Description = Describes documentation and presentation of a property.0x000D0x000ASee also PKDocAttributeP.
Assembly/ARCDoc/Class/PKDocAttribute/_Member/Initialize/ReflectedType = ARCDoc.PKDocAttribute
Assembly/ARCDoc/Class/PKDocAttribute/_Member/Initialize/MethodName = Initialize
Assembly/ARCDoc/Class/PKDocAttribute/_Member/Initialize/MethodSignature = Void Initialize()
Assembly/ARCDoc/Class/PKDocAttribute/_Member/Initialize/Description = To be overridden in sub-classes, but sub-classes are supposed to use base.Initialize() at end of their own initialize
Assembly/ARCDoc/Class/PKDocAttribute/_Member/PriorityOrder/ReflectedType = ARCDoc.PKDocAttribute
Assembly/ARCDoc/Class/PKDocAttribute/_Member/PriorityOrder/MethodName = PriorityOrder
Assembly/ARCDoc/Class/PKDocAttribute/_Member/PriorityOrder/MethodSignature = ARCDoc.PriorityOrder PriorityOrder
Assembly/ARCDoc/Class/PKDocAttribute/_Member/PriorityOrder/Description = See PriorityOrder.
Assembly/ARCDoc/Class/PKDocAttribute/_Member/IsDefault/ReflectedType = ARCCore.BaseAttribute
Assembly/ARCDoc/Class/PKDocAttribute/_Member/IsDefault/MethodName = IsDefault
Assembly/ARCDoc/Class/PKDocAttribute/_Member/IsDefault/MethodSignature = Boolean IsDefault
Assembly/ARCDoc/Class/PKDocAttribute/_Member/IsDefault/Description = Does not have a corresponding BaseAttributeP since all attributes relevant for querying (for instance in the documentation) will be IsDefault = FALSE anyway. (if we had included it in BaseAttributeP it would just have led to a lot of confusing IsDefault = FALSE key-values showing up.)
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/AssemblyName = ARCDoc
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/ClassType = ARCDoc.Documentator+PotentialHTMLLinks
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/Description = Result of calling FindPotentialHTMLLinks.0x000D0x000A0x000D0x000ABuilding block for providing LinkInsertionInDocumentation.
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/_Member/TargetResolutionHTMLPages/ReflectedType = ARCDoc.Documentator+PotentialHTMLLinks
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/_Member/TargetResolutionHTMLPages/MethodName = TargetResolutionHTMLPages
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/_Member/TargetResolutionHTMLPages/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,ARCDoc.HTMLFileWithLocation0x005D TargetResolutionHTMLPages
Assembly/ARCDoc/Class/Documentator+PotentialHTMLLinks/_Member/TargetResolutionHTMLPages/Description = Key is filename (like filename in '0x005Bfilename0x005D.html' for instance).0x000D0x000A0x000D0x000AFor duplicate links, shows possible targets from which the user browsing the structure can choose the desired link.0x000D0x000A0x000D0x000AThese pages should be made available as 0x005BROOT0x005D/_TargetResolution/0x005BtargetResolutionPage0x005D.html in order for the links to work.0x000D0x000A
Assembly/ARCDoc/AREnumType/_Description = All enums found in assembly ARCDoc.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/_Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/EnumType = ARCDoc.AppleP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/CorrespondingClass = ARCDoc.Apple
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/Description = Describes class Apple.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/EnumType = ARCDoc.AppleP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/EnumMember = Name
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/Type = System.String
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/IsObligatory = True
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/PKTypeAttribute/Description = The name of the apple
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Name/Description = The name of the apple
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Colour/PKTypeAttribute/EnumType = ARCDoc.AppleP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Colour/PKTypeAttribute/EnumMember = Colour
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Colour/PKTypeAttribute/Type = System.ConsoleColor
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Colour/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/AppleP/_Member/Colour/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/EnumType = ARCDoc.BananaP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/CorrespondingClass = ARCDoc.Banana
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/Description = Describes class Banana.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/EnumType = ARCDoc.BananaP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/EnumMember = Name
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/Type = System.String
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/IsObligatory = True
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/PKTypeAttribute/Description = The name of the banana
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Name/Description = The name of the banana
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Colour/PKTypeAttribute/EnumType = ARCDoc.BananaP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Colour/PKTypeAttribute/EnumMember = Colour
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Colour/PKTypeAttribute/Type = System.ConsoleColor
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Colour/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/BananaP/_Member/Colour/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/EnumType = ARCDoc.OrangeP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/CorrespondingClass = ARCDoc.Orange
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/Description = Describes class Orange.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/EnumType = ARCDoc.OrangeP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/EnumMember = Name
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/Type = System.String
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/IsObligatory = True
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/PKTypeAttribute/Description = The name of the orange
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Name/Description = The name of the orange
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Colour/PKTypeAttribute/EnumType = ARCDoc.OrangeP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Colour/PKTypeAttribute/EnumMember = Colour
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Colour/PKTypeAttribute/Type = System.ConsoleColor
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Colour/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/OrangeP/_Member/Colour/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/EnumType = ARCDoc.SomeApplicationComponentP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/CorrespondingClass = ARCDoc.SomeApplicationComponent
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValue/PKTypeAttribute/EnumType = ARCDoc.SomeApplicationComponentP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValue/PKTypeAttribute/EnumMember = SomeCountValue
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValue/PKTypeAttribute/Type = System.Int64
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValue/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValue/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKTypeAttribute/EnumType = ARCDoc.SomeApplicationComponentP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKTypeAttribute/EnumMember = SomeCountValueNotToBeLogged
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKTypeAttribute/Type = System.Int64
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKLogAttribute/EnumType = ARCDoc.SomeApplicationComponentP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKLogAttribute/EnumMember = SomeCountValueNotToBeLogged
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/SomeApplicationComponentP/_Member/SomeCountValueNotToBeLogged/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DocumentatorP/EnumType = ARCDoc.DocumentatorP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DocumentatorP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DocumentatorP/CorrespondingClass = ARCDoc.Documentator
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DocumentatorP/Description = Describes class Documentator.0x000D0x000A0x000D0x000ASee also Documentator.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DummyEnumP/EnumType = ARCDoc.DummyEnumP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DummyEnumP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/DummyEnumP/CorrespondingClass = ARCDoc.DummyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/EnumType = ARCDoc.PKDocAttributeP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/AREnumType = PropertyKeyEnum
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/CorrespondingClass = ARCDoc.PKDocAttribute
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/Description = Describes class -PKDocAttribute (describes documentation and presentation of a property).0x000D0x000A0x000D0x000ASee also PKDocAttribute.
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/_Member/PriorityOrder/PKTypeAttribute/EnumType = ARCDoc.PKDocAttributeP
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/_Member/PriorityOrder/PKTypeAttribute/EnumMember = PriorityOrder
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/_Member/PriorityOrder/PKTypeAttribute/Type = ARCDoc.PriorityOrder
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/_Member/PriorityOrder/PKTypeAttribute/IsObligatory = False
Assembly/ARCDoc/AREnumType/PropertyKeyEnum/PKDocAttributeP/_Member/PriorityOrder/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCDoc/AREnumType/OrdinaryEnum/_Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/EnumType = ARCDoc.PriorityOrder
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/AREnumType = OrdinaryEnum
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/Description = Used for general sorting / prioritizing when showing properties for an entity. 0x000D0x000AA lower value (think like 1'st order of priority, 2'nd order of priority) will put object higher up (make more visible) in a typical AgoRapide sorted list.0x000D0x000A0x000D0x000AAlso used for making summaries of what an entity contains (used by DescribeValue for instance).0x000D0x000A0x000D0x000ARecommended values are:0x000D0x000AImportant (-1) for important,0x000D0x000ANeutral (0) (default) for 'ordinary' and0x000D0x000ANotImportant (1) for not important.0x000D0x000A0x000D0x000AIn this manner it will be relatively easy to emphasize or deemphasize single properties without having to give an explicit ordering for all properties.0x000D0x000AEventually expand to -2, -3 ... or 2, 3 ... as needed (note there is no need for expanding this enum PriorityOrder itself since any integer is a valid enum value).0x000D0x000ANOTE: This is not possible as of May 2020 if PK data is to be communicated over the PropertyStream because values other than those defined here will fail validation
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/_Member/NotImportant/EnumType = ARCDoc.PriorityOrder
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/_Member/NotImportant/EnumMember = NotImportant
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/_Member/Important/EnumType = ARCDoc.PriorityOrder
Assembly/ARCDoc/AREnumType/OrdinaryEnum/PriorityOrder/_Member/Important/EnumMember = Important
Assembly/ARCDoc/AREnumType/DocumentationOnlyEnum/_Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
Assembly/ARCQuery/_Description = A library with support for fluent query expression and entity-relations.0x000D0x000A0x000D0x000AEnables fluent queries like for instance0x000D0x000A 'Order/WHERE Amount 0x003E 1000 EUR/REL Customer/SKIP 100/TAKE 50/SELECT FirstName, LastName' or 0x000D0x000A 'OrderLine/PIVOT Created.YearMonth() BY Product SUM Amount'0x000D0x000A0x000D0x000ASupports queries and linking between entities. Understands what properties like 'Order/43/CustomerId = 42' mean.0x000D0x000A0x000D0x000AEnables automatic suggestions in ARCAPI for adding of related entities / navigating to related entities.0x000D0x000A0x000D0x000ASee also QueryExpression,0x000D0x000ACompoundKey (like ForeignKey, EntityMethodKey and NewKey),0x000D0x000AFunctionKey,0x000D0x000AQuantileKey and0x000D0x000AValueComparer.0x000D0x000A0x000D0x000ANote also how extension method TryGetP (ARCQuery.Extensions.TryGetP) understands, through use of reflection, read-only properties of your entity classes.
Assembly/ARCQuery/Class/_Description = All classes with some AgoRapide specific attributes found in assembly ARCQuery.
Assembly/ARCQuery/Class/CompoundKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/CompoundKey/ClassType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKey/Description = A class able to expand the concept of keys.0x000D0x000A0x000D0x000ADirect sub classes are (ordered in order of priority by Parse):0x000D0x000A1) ForeignKey: Can find related values, like for an Order, it can find Customer.FirstName.0x000D0x000A2) EntityMethodKey: Key able to call entity read-only methods with a TryGet with data storage signature.0x000D0x000A3) NewKey: Creates new keys, like 'CountP' (see NewKeyCountP.)0x000D0x000A4) -AggregateKey- TODO: Implement this.0x000D0x000A0x000D0x000AClosely related classes (Stored inside CompoundKey as members FollowingFunctionKeys and QuantileKey) are:0x000D0x000A1) FunctionKey: Extracts data from an already existing value like 'Created.Year()' (see FunctionKeyYear)0x000D0x000A2) QuantileKey: Can separate entities into quantiles, like Quartiles, Quintiles or Sextiles0x000D0x000A0x000D0x000A(See also ValueComparer which can evaluation expressions like 'WHERE Created = ThisYear')0x000D0x000A0x000D0x000ASee common parser for all compound keys (Parse-) which will always 'succeed'.0x000D0x000A0x000D0x000ATODO: Implement ITypeDescriber? Or, difficult because needs dataStorage for parsing?0x000D0x000A0x000D0x000ANote how compound keys (and related keys) may be chained several levels deep, like for Order 'Customer.Created.Year()' or Customer.Order.Sum(Amount).0x000D0x000AThis is reflected in Parse and FollowingFunctionKeys.0x000D0x000A0x000D0x000A
Assembly/ARCQuery/Class/CompoundKey/LongDescription = About chaining of keys (use of FollowingFunctionKeys):0x000D0x000A0x000D0x000AQuantileKey can only be the last key in a chain, like 'Customer.OrderSum.QUARTILE'.0x000D0x000AAll keys can be followed by a QuantileKey.0x000D0x000A(this is not mentioned below and the -CompoundKey classes are not 'aware' of QuantilKey as a NextKey, not even the base class CompoundKey itself)0x000D0x000A0x000D0x000AAll keys can be followed by several FunctionKey (This is supported by TryGetP).0x000D0x000A
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetPInternal/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundKey/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/CompoundKey/_Member/Parse/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKey/_Member/Parse/MethodName = Parse
Assembly/ARCQuery/Class/CompoundKey/_Member/Parse/MethodSignature = ARCQuery.CompoundKey Parse(ARCCore.IP, ARCCore.IK, ARCCore.IP)
Assembly/ARCQuery/Class/CompoundKey/_Member/Parse/Description = Note that no TryParse is offered here, because Parse will always succeed (it just returns CompoundInvalidKey if 'fails').0x000D0x000A0x000D0x000ACalled from TryGetP when that fails to find the given key for the entity.0x000D0x000A
Assembly/ARCQuery/Class/CompoundKey/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKey/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundKey/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundKey/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/ClassType = ARCQuery.CompoundKeyOnlyFunctionOrQuantile
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/BaseTypes = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/Description = A compound key containing only some function keys or quantile key, like Customer.Created.Year() or Customer.OrderSum.QUARTILE.0x000D0x000ATryGetPInternal has no specific functionality, it just calls TryGetP.
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetPInternal/ReflectedType = ARCQuery.CompoundKeyOnlyFunctionOrQuantile
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundKeyOnlyFunctionOrQuantile/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/CompoundInvalidKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/CompoundInvalidKey/ClassType = ARCQuery.CompoundInvalidKey
Assembly/ARCQuery/Class/CompoundInvalidKey/BaseTypes = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundInvalidKey/Description = Used as a practical solution in order to know that a given key has been attemped parsed, but was not valid.
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetPInternal/ReflectedType = ARCQuery.CompoundInvalidKey
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/CompoundInvalidKey/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/EntityMethodKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/EntityMethodKey/ClassType = ARCQuery.EntityMethodKey
Assembly/ARCQuery/Class/EntityMethodKey/BaseTypes = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/EntityMethodKey/Description = Key able to call entity read-only methods with a TryGet with data storage signature.0x000D0x000A0x000D0x000ATODO: Change name into EntityMethodKey.0x000D0x000A0x000D0x000AThis is an expandable concept, that is, you can create your own read-only TryGet entity methods, in your ApplicationSpecificCode and they will be automatically picked up by this key.0x000D0x000A0x000D0x000AKey able to call entity methods with signature like:0x000D0x000A bool TryGet0x007BKeyName0x007D(IP? dataStorage, out IP retval, out string errorResponse)0x000D0x000AThese are read only methods / read-only properties.0x000D0x000ATODO: Rename and move class when permanent form has been decided.0x000D0x000A0x000D0x000ASee also NewKey.
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetPInternal/ReflectedType = ARCQuery.EntityMethodKey
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/EntityMethodKey/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/EntityMethodKey/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/EntityMethodKey/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/EntityMethodKey/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/EntityMethodKey/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/Extensions/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/Extensions/ClassType = ARCQuery.Extensions
Assembly/ARCQuery/Class/Extensions/_Member/GetPVAsString/ReflectedType = ARCQuery.Extensions
Assembly/ARCQuery/Class/Extensions/_Member/GetPVAsString/MethodName = GetPVAsString
Assembly/ARCQuery/Class/Extensions/_Member/GetPVAsString/MethodSignature = System.String GetPVAsString(ARCCore.IP, ARCCore.IP, ARCCore.IK, ARCQuery.CompoundKey ByRef, System.String)
Assembly/ARCQuery/Class/Extensions/_Member/GetPVAsString/Description = Simple method always returning a value (as string).
Assembly/ARCQuery/Class/Extensions/_Member/TryGetP/ReflectedType = ARCQuery.Extensions
Assembly/ARCQuery/Class/Extensions/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/Extensions/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IK, ARCCore.IP ByRef, ARCQuery.CompoundKey ByRef, System.String ByRef)
Assembly/ARCQuery/Class/Extensions/_Member/TryGetP/Description = Same functionality as TryGetP but understands the concept of CompoundKey.0x000D0x000A0x000D0x000AA generated CompoundKey is passed as ref, enabling it to be cached by outside context.0x000D0x000AThis is useful because creating the CompoundKey is somewhat complicated (multiple lookups for ForeignKey for instance).0x000D0x000A(and for QuantileKey it is absolutely essential, in order to avoid huge duplicate processing).0x000D0x000A0x000D0x000A
Assembly/ARCQuery/Class/ForeignKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/ForeignKey/ClassType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/BaseTypes = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/ForeignKey/Description = Can find related values, through compound field names, like for an Order, it can find Customer.FirstName.0x000D0x000ACan related several steps like for Device 'Hub.Customer.Name'.0x000D0x000A0x000D0x000AThis is an not an expandable concept, that is, this class contains all the relevant functionality and you are not expected to implement anything specific in your ApplicationSpecificCode.0x000D0x000A0x000D0x000AThe related value (key as specified in ForeignField can either be an ordinary property, or a NewKey / EntityMethodKey.0x000D0x000A0x000D0x000ANote: Remember to include the foreign-key in QueryExpressionSelect like this: "Order/SELECT CustomerId, Created, Amount/WHERE Customer.FirstName = 'John'"0x000D0x000AIf you only do0x000D0x000A "Order/SELECT Created, Amount/WHERE Customer.FirstName = 'John'"0x000D0x000Athen the link to Customer is not available.0x000D0x000A(For the example given it would of course have been more natural to just to like this:0x000D0x000A "Order/WHERE Customer.FirstName = 'John'/SELECT Created, Amount"0x000D0x000A)
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetPInternal/ReflectedType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/ForeignKey/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignStorages/ReflectedType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignStorages/MethodName = ForeignStorages
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignStorages/MethodSignature = System.Collections.Generic.List0x006010x005BARCCore.IP0x005D ForeignStorages
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignStorages/Description = The collections containing the foreign entities.0x000D0x000AFor instance, for Order 'Customer.FirstName' this would be the collection of Customer objects.0x000D0x000APrecalculated by constructor because will be reused in a typical query (once for each item).0x000D0x000A
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignTypes/ReflectedType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignTypes/MethodName = ForeignTypes
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignTypes/MethodSignature = System.Collections.Generic.List0x006010x005BSystem.String0x005D ForeignTypes
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignTypes/Description = The foreign types.0x000D0x000AFor instance, for Order 'Customer.FirstName' this would be 'Customer'.0x000D0x000A
Assembly/ARCQuery/Class/ForeignKey/_Member/ActualForeignKeys/ReflectedType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/_Member/ActualForeignKeys/MethodName = ActualForeignKeys
Assembly/ARCQuery/Class/ForeignKey/_Member/ActualForeignKeys/MethodSignature = System.Collections.Generic.List0x006010x005BARCCore.IKString0x005D ActualForeignKeys
Assembly/ARCQuery/Class/ForeignKey/_Member/ActualForeignKeys/Description = The foreign keys0x000D0x000AFor instance, for Order 'Customer.FirstName' this would be 'CustomerId'.0x000D0x000APrecalculated by constructor because will be reused in a typical query (once for each item).0x000D0x000A
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignField/ReflectedType = ARCQuery.ForeignKey
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignField/MethodName = ForeignField
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignField/MethodSignature = ARCCore.IK ForeignField
Assembly/ARCQuery/Class/ForeignKey/_Member/ForeignField/Description = The actual field in the final foreign entity to return value for.0x000D0x000AMay actually be a CompoundKey like EntityMethodKey or NewKey.
Assembly/ARCQuery/Class/ForeignKey/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/ForeignKey/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/ForeignKey/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/ForeignKey/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/FunctionKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKey/ClassType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKey/Description = Extracts data from an already existing value like extracting Year from a DateTime in 'Created.Year()'.0x000D0x000A0x000D0x000AThis is an expandable concept, that is, you can create your own implementations of this class in your ApplicationSpecificCode.0x000D0x000A0x000D0x000AOften the extraction is actually a simplification of the existing value, like Created.Year() which would for '2020-06-11 13:36' return '2020'.0x000D0x000A0x000D0x000AImplementing classes in StandardAgoRapideCode:0x000D0x000AFunctionKeyDayOfWeek0x000D0x000AFunctionKeyMonth0x000D0x000AFunctionKeyQuarter0x000D0x000AFunctionKeyYear0x000D0x000AFunctionKeyYearMonth0x000D0x000AFunctionKeyYearQuarter0x000D0x000A0x000D0x000ATODO: As of Jun 2020 this concept only works as last item in a CompoundKey. TODO: This means that you can not chain functions.0x000D0x000ATODO: (but there is nothing inherently against doing this, it is just that the parsers are not sufficient advanced yet).0x000D0x000A0x000D0x000ATODO: Add a PK field, describing the value that is returned.0x000D0x000A0x000D0x000AIt can also be said to work as a function against a value field, but with the syntax 'value.functionName()' instead of functionName(value) (the chosen syntax is not really important, but it has one real advantage, eliminating the need for using aliases to specify what the function result should be called).0x000D0x000A0x000D0x000A(See also ValueComparer which can evaluate expressions like 'WHERE Created = ThisYear')0x000D0x000A0x000D0x000ATODO: Conceptual difference between ValueComparer and FunctionKey (working from two different directions).0x000D0x000ATODO: FunctionKey is necessary if you want to pivot around the value.0x000D0x000ATODO: ValueComparer is more practical if the value can have different interpretations at the same time.0x000D0x000ATODO: An example is ValueComparerDateTime which understands that Created can be all of TODO: ThisYear, ThisMonth, ThisWeek, InTheMorning, ThisMorning and so on.0x000D0x000ATOOD: (It would be time consuming to write all the necessary FunctionKey implementations in order to support this. TOOO: and the query syntax would be more verbose (Created.YearNumber = ThisYear or something similar, instead of just Created = ThisYear).)0x000D0x000A0x000D0x000ANote that the concept is inherently expandable, you can create your own sub-classes and integrate them with StandardAgoRapideCode.0x000D0x000ANote how any ApplicationSpecificCode implementations must be added to Parsers at application startup in order for them to be recognized by TryParse.
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKey/_Member/AddParser/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/AddParser/MethodName = AddParser
Assembly/ARCQuery/Class/FunctionKey/_Member/AddParser/MethodSignature = Void AddParser(System.String, System.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.FunctionKey,System.String0x005D0x005D)
Assembly/ARCQuery/Class/FunctionKey/_Member/AddParser/Description = Adds a ApplicationSpecificCode parser.0x000D0x000A0x000D0x000AOnly to be done when CurrentlyStartingUp.
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParse/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParse/MethodName = TryParse
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParse/MethodSignature = Boolean TryParse(System.String, ARCQuery.FunctionKey ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParse/Description = Find parsers from Parsers based on first word in query.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParseSingleWord/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParseSingleWord/MethodName = TryParseSingleWord
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParseSingleWord/MethodSignature = Boolean TryParseSingleWord0x005BT0x005D(System.String, System.String, System.Func0x006010x005BT0x005D, System.Func0x006010x005BSystem.String0x005D, T ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKey/_Member/TryParseSingleWord/Description = Recommended parser to use for functions without parameters. 0x000D0x000ASee for instance use in FunctionKeyYear.TryParse.0x000D0x000A0x000D0x000ATODO: Does it have meaning letting this class implement ITypeDescriber?0x000D0x000ATODO: (considering that it must also contain the Key, like the key Created in for Customer SELECT Created.Year()0x000D0x000ATODO: Does it have any use?0x000D0x000A
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP0x005BT0x005D(ARCCore.IP, System.Func0x006020x005BSystem.String,System.ValueTuple0x006030x005BSystem.Boolean,T,System.String0x005D0x005D, System.Func0x006020x005BT,ARCCore.IP0x005D, ARCCore.IP ByRef, System.String ByRef)/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP0x005BT0x005D(ARCCore.IP, System.Func0x006020x005BSystem.String,System.ValueTuple0x006030x005BSystem.Boolean,T,System.String0x005D0x005D, System.Func0x006020x005BT,ARCCore.IP0x005D, ARCCore.IP ByRef, System.String ByRef)/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP0x005BT0x005D(ARCCore.IP, System.Func0x006020x005BSystem.String,System.ValueTuple0x006030x005BSystem.Boolean,T,System.String0x005D0x005D, System.Func0x006020x005BT,ARCCore.IP0x005D, ARCCore.IP ByRef, System.String ByRef)/MethodSignature = Boolean TryGetP0x005BT0x005D(ARCCore.IP, System.Func0x006020x005BSystem.String,System.ValueTuple0x006030x005BSystem.Boolean,T,System.String0x005D0x005D, System.Func0x006020x005BT,ARCCore.IP0x005D, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKey/_Member/Boolean TryGetP0x005BT0x005D(ARCCore.IP, System.Func0x006020x005BSystem.String,System.ValueTuple0x006030x005BSystem.Boolean,T,System.String0x005D0x005D, System.Func0x006020x005BT,ARCCore.IP0x005D, ARCCore.IP ByRef, System.String ByRef)/Description = Overload which will try to call TryGetV with generic type parameter, and if that does not succeed will try to call the optional 'tryParser'.0x000D0x000ANOTE: The 'tryParser' is probably not necessary for types like int, long, double, DateTime, TimeSpan,0x000D0x000ANOTE: as those are understood by TryGetV anyway.0x000D0x000A0x000D0x000AAfterwards will then transform value as instructed.0x000D0x000A0x000D0x000ASee for instance use in FunctionKeyYear.TryGetP.0x000D0x000A0x000D0x000ATODO: Became a little too complicated. Could possibly be split into one function for getting value and parsing it, and one for transforming it.0x000D0x000A0x000D0x000A
Assembly/ARCQuery/Class/FunctionKey/_Member/Parsers/ReflectedType = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKey/_Member/Parsers/MethodName = Parsers
Assembly/ARCQuery/Class/FunctionKey/_Member/Parsers/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Collections.Generic.List0x006010x005BSystem.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.FunctionKey,System.String0x005D0x005D0x005D0x005D Parsers
Assembly/ARCQuery/Class/FunctionKey/_Member/Parsers/Description = Instances of all the relevant sub classes of FunctionKey.0x000D0x000AUsed by TryParse in order to parse to correct sub class.0x000D0x000A0x000D0x000AKey usually corresponds to actual class name like 'Year' for FunctionKeyYear, 'YearQuarter' for -FunctionKeyYearQuarter and so on.0x000D0x000A0x000D0x000ANote that multiple sub classes can share the same function name (because value in this dictionary is List0x003C...0x003E).0x000D0x000AIf multiple parsers thereby exists then the first parser that succeeds with parsing 'wins'.0x000D0x000A0x000D0x000A(This primitive form of function overloading could for instance be resolved by the parsers differentiating by entity type and key, whether they should fail or not. For instance, if you have several sub classes all with the function name 'Category', for categorizing certain values, like for Order Value.Category() and for Product Price.Category() the parser could differentiate by entity type (Order or Product), and / or by key, (Value or Price).)0x000D0x000ATODO: NOT POSSIBLE AS OF JUN 2020 BECAUSE ENTITY TYPE / KEY NOT KNOWN WHEN PARSING.0x000D0x000A0x000D0x000AAdd to this collection if you have FunctionKey sub classes implemented in your ApplicationSpecificCode.0x000D0x000A0x000D0x000ATODO: Consider automatic injecting to this collection at application startup, TODO: also for StandardAgoRapideCode, that is, eliminating code below.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A0x000D0x000ASee also AddParser.0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyDate/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyDate/ClassType = ARCQuery.FunctionKeyDate
Assembly/ARCQuery/Class/FunctionKeyDate/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyDate/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyDate/Description = Formats a date without time component. Uses format yyyy-MM-dd.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyDate
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyDate
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyDate/_Member/SyntaxHelp/Description = 'Date()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.Date() BY Product'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/ClassType = ARCQuery.FunctionKeyDayOfWeek
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/Description = Extracts DayOfWeek from field like 'Monday', 'Tuesday' and so on.0x000D0x000A0x000D0x000ATODO: Consider sorting issues here.0x000D0x000ATODO: Create alternative, DayOfWeekInt or similar for integer-representation.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyDayOfWeek
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyDayOfWeek
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyDayOfWeek/_Member/SyntaxHelp/Description = 'DayOfWeek()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.DayOfWeek() BY Product'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyInt/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyInt/ClassType = ARCQuery.FunctionKeyInt
Assembly/ARCQuery/Class/FunctionKeyInt/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyInt/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyInt/Description = Rounds a double value to the nearest integer (uses .NET data type Int64 (long)).0x000D0x000A(formulae used is: '(long)(dbl + .5)').0x000D0x000A0x000D0x000ATODO: Throws exception if double value is too big. Fix this (do not return any value in such a case maybe?)0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyInt
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyInt
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyInt/_Member/SyntaxHelp/Description = 'Int()'0x000D0x000AExamples:0x000D0x000A'Order/SELECT Amount.Int()'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyMonth/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyMonth/ClassType = ARCQuery.FunctionKeyMonth
Assembly/ARCQuery/Class/FunctionKeyMonth/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyMonth/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyMonth/Description = Extracts month component from field like '2020-12-09' becoming '12'.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyMonth
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyMonth
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyMonth/_Member/SyntaxHelp/Description = 'Month()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.Year() BY Created.Month()'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyQuarter/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyQuarter/ClassType = ARCQuery.FunctionKeyQuarter
Assembly/ARCQuery/Class/FunctionKeyQuarter/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyQuarter/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyQuarter/Description = Extracts quarter component from datetime field like '2020-12-09' becoming 'Q4'.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyQuarter
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyQuarter
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyQuarter/_Member/SyntaxHelp/Description = 'Quarter()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.Year() BY Created.Quarter()'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyTMB/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyTMB/ClassType = ARCQuery.FunctionKeyTMB
Assembly/ARCQuery/Class/FunctionKeyTMB/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyTMB/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyTMB/Description = TMB = Thousands, Millions, Billions.0x000D0x000AFormats big numbers in an easier to understand format as number of Thousands, number of Millions, number of Billions.0x000D0x000A(Not that K har used for Thousands, like 10K = 10 Thousand).0x000D0x000A0x000D0x000AUseful in economic reports where the magnitude of the numbers are more important than the exact numbers0x000D0x000A(Note: Sorting on the generated values is difficult as of Jul 2020, because it is done alphabetically).0x000D0x000A0x000D0x000ATODO: Introduce also KMGT for Kilo, Mega, Giga, Tera etc (powers of 1000), and KiMiGiTi for (powers of 1024).0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyTMB
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyTMB
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyTMB/_Member/SyntaxHelp/Description = 'TMB()'0x000D0x000AExamples:0x000D0x000A'Customer/SELECT Name, OrderSum.TMB()'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyYear/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyYear/ClassType = ARCQuery.FunctionKeyYear
Assembly/ARCQuery/Class/FunctionKeyYear/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyYear/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyYear/Description = Extracts Year-component from field.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyYear
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyYear
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYear/_Member/SyntaxHelp/Description = 'Year()'0x000D0x000AExamples:0x000D0x000A'Order/WHERE Order.Created.Year() 0x003C 2020',0x000D0x000A'Customer/SELECT Name, Order.Created.Year()',0x000D0x000A'Order/PIVOT Created.Year() BY Created.Month()'.
Assembly/ARCQuery/Class/FunctionKeyYearMonth/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyYearMonth/ClassType = ARCQuery.FunctionKeyYearMonth
Assembly/ARCQuery/Class/FunctionKeyYearMonth/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyYearMonth/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyYearMonth/Description = Extracts Year + Month component from field like 2020-06.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyYearMonth
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyYearMonth
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYearMonth/_Member/SyntaxHelp/Description = 'YearMonth()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.YearMonth() BY Product'0x000D0x000A
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/ClassType = ARCQuery.FunctionKeyYearQuarter
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/BaseTypes = ARCQuery.FunctionKey
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.FunctionKey0xoooo005D
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/Description = Extracts Year + Quarter component from field like 2020Q1.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/TryGetP/ReflectedType = ARCQuery.FunctionKeyYearQuarter
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/TryGetP/Description = NOTE: The in-parameter is a property, not an entity.0x000D0x000A0x000D0x000ATODO: Consider renaming into TryTransform, TryExecute or similar.
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/SyntaxHelp/ReflectedType = ARCQuery.FunctionKeyYearQuarter
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/FunctionKeyYearQuarter/_Member/SyntaxHelp/Description = 'YearQuarter()'0x000D0x000AExamples:0x000D0x000A'Order/PIVOT Created.YearQuarter() BY Product'0x000D0x000A
Assembly/ARCQuery/Class/NewKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/NewKey/ClassType = ARCQuery.NewKey
Assembly/ARCQuery/Class/NewKey/BaseTypes = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKey/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.NewKey0xoooo005D
Assembly/ARCQuery/Class/NewKey/Description = A function creating new keys (new fields) for all entity object types.0x000D0x000ACompares roughly to the concept of Extension methods in C#.0x000D0x000ATODO: Rename into ExtensionKey0x000D0x000A0x000D0x000AThis is an expandable concept, that is, you can create your own implementations of this class in your ApplicationSpecificCode.0x000D0x000A0x000D0x000ANote that this concept seems to have very limited potential (as of Jun 2020).0x000D0x000A(the concept of EntityMethodKey is probably more relevant for you to use.)0x000D0x000A0x000D0x000AIn other words, there is no point in creating new implementations of NewKey when you can instead just create a TryGet0x007BKey0x007D-method directly in your class which gets picked up by EntityMethodKey.0x000D0x000APractical example: If you have a class Customer with FirstName and LastName, do not create NewKeyName, create instead Customer.TryGetName.0x000D0x000A0x000D0x000AThere are very few implementing class in StandardAgoRapideCode:0x000D0x000ANewKeyCountP (returns the number of properties for a given entity object),0x000D0x000ANewKeyCountPRec (returns the number of properties for a given entity object, operates recursively),0x000D0x000ANewKeyPropertyStream (returns the PropertyStream for the given object)0x000D0x000A0x000D0x000ATODO: Add a PK field, describing the value that is returned.0x000D0x000A0x000D0x000ANote that will only come into play when explicit referenced, like 'SELECT *, CountP' for calling NewKeyCountP.
Assembly/ARCQuery/Class/NewKey/_Member/AddParser/ReflectedType = ARCQuery.NewKey
Assembly/ARCQuery/Class/NewKey/_Member/AddParser/MethodName = AddParser
Assembly/ARCQuery/Class/NewKey/_Member/AddParser/MethodSignature = Void AddParser(System.String, System.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.NewKey,System.String0x005D0x005D)
Assembly/ARCQuery/Class/NewKey/_Member/AddParser/Description = Adds a ApplicationSpecificCode parser.0x000D0x000A0x000D0x000AOnly to be done when CurrentlyStartingUp.
Assembly/ARCQuery/Class/NewKey/_Member/TryParse/ReflectedType = ARCQuery.NewKey
Assembly/ARCQuery/Class/NewKey/_Member/TryParse/MethodName = TryParse
Assembly/ARCQuery/Class/NewKey/_Member/TryParse/MethodSignature = Boolean TryParse(System.String, ARCQuery.NewKey ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKey/_Member/TryParse/Description = Find parsers from Parsers based on first word in query.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A
Assembly/ARCQuery/Class/NewKey/_Member/TryParseSingleWord/ReflectedType = ARCQuery.NewKey
Assembly/ARCQuery/Class/NewKey/_Member/TryParseSingleWord/MethodName = TryParseSingleWord
Assembly/ARCQuery/Class/NewKey/_Member/TryParseSingleWord/MethodSignature = Boolean TryParseSingleWord0x005BT0x005D(System.String, System.String, System.Func0x006010x005BT0x005D, System.Func0x006010x005BSystem.String0x005D, T ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKey/_Member/TryParseSingleWord/Description = Recommended parser to use for functions without parameters. 0x000D0x000ASee for instance use in NewKeyCountP.TryParse.0x000D0x000A
Assembly/ARCQuery/Class/NewKey/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/NewKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKey/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/NewKey/_Member/TryGetPInternal/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKey/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/NewKey/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKey/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/NewKey/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKey/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKey/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKey/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/NewKey/_Member/Parsers/ReflectedType = ARCQuery.NewKey
Assembly/ARCQuery/Class/NewKey/_Member/Parsers/MethodName = Parsers
Assembly/ARCQuery/Class/NewKey/_Member/Parsers/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Collections.Generic.List0x006010x005BSystem.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.NewKey,System.String0x005D0x005D0x005D0x005D Parsers
Assembly/ARCQuery/Class/NewKey/_Member/Parsers/Description = Instances of all the relevant sub classes of NewKey.0x000D0x000AUsed by TryParse in order to parse to correct sub class.0x000D0x000A0x000D0x000AKey usually corresponds to actual class name like 'CountP' for NewKeyCountP, 0x000D0x000ANote that multiple sub classes can share the same function name (because value in this dictionary is List0x003C...0x003E).0x000D0x000AIf multiple parsers thereby exists then the first parser that succeeds with parsing 'wins'.0x000D0x000A0x000D0x000A(This primitive form of function overloading could for instance be resolved by the parsers differentiating by entity type, whether they should fail or not. For instance, if you have several sub classes all with the function name 'IsRelevant', for categorizing certain entities, like for Order IsRelevant and for Product IsRelevant the parser could differentiate by entity type (Order or Product).)TODO: NOT POSSIBLE AS OF JUN 2020 BECAUSE ENTITY TYPE / KEY NOT KNOWN WHEN PARSING.0x000D0x000A0x000D0x000AAdd to this collection if you have NewKey sub classes implemented in your ApplicationSpecificCode.0x000D0x000A0x000D0x000ATODO: Consider automatic injecting to this collection at application startup, TODO: also for StandardAgoRapideCode, that is, eliminating code below.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A0x000D0x000ASee also AddParser.0x000D0x000A
Assembly/ARCQuery/Class/NewKeyCountP/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/NewKeyCountP/ClassType = ARCQuery.NewKeyCountP
Assembly/ARCQuery/Class/NewKeyCountP/BaseTypes = ARCQuery.CompoundKey0x003BARCQuery.NewKey
Assembly/ARCQuery/Class/NewKeyCountP/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.NewKey0xoooo005D
Assembly/ARCQuery/Class/NewKeyCountP/Description = Returns the number of properties for a given entity object.0x000D0x000A0x000D0x000AMostly included in AgoRapide as an example of how to use NewKey.0x000D0x000ASee also NewKeyCountPRec.0x000D0x000A
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetPInternal/ReflectedType = ARCQuery.NewKeyCountP
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyCountP/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/NewKeyCountP/_Member/SyntaxHelp/ReflectedType = ARCQuery.NewKeyCountP
Assembly/ARCQuery/Class/NewKeyCountP/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/NewKeyCountP/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/NewKeyCountP/_Member/SyntaxHelp/Description = 'CountP()'0x000D0x000AExamples:0x000D0x000A'Order/SELECT *, CountP(), CountPRec()'0x000D0x000A
Assembly/ARCQuery/Class/NewKeyCountP/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyCountP/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyCountP/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyCountP/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/NewKeyCountPRec/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/NewKeyCountPRec/ClassType = ARCQuery.NewKeyCountPRec
Assembly/ARCQuery/Class/NewKeyCountPRec/BaseTypes = ARCQuery.CompoundKey0x003BARCQuery.NewKey
Assembly/ARCQuery/Class/NewKeyCountPRec/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.NewKey0xoooo005D
Assembly/ARCQuery/Class/NewKeyCountPRec/Description = Returns the number of properties for a given entity object.0x000D0x000AOperates recursively, that is, sums up recursively properties also for properties.0x000D0x000A0x000D0x000ARecursive variant of NewKeyCountP.0x000D0x000A
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetPInternal/ReflectedType = ARCQuery.NewKeyCountPRec
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/CountPRec/ReflectedType = ARCQuery.NewKeyCountPRec
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/CountPRec/MethodName = CountPRec
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/CountPRec/MethodSignature = Int64 CountPRec(ARCCore.IP)
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/CountPRec/Description = Counts recursively the number of properties for a given entity object.
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/SyntaxHelp/ReflectedType = ARCQuery.NewKeyCountPRec
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/SyntaxHelp/Description = 'CountPRec()'0x000D0x000AExamples:0x000D0x000A'Order/SELECT *, CountPRec(), CountP()'0x000D0x000A
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyCountPRec/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/NewKeyPropertyStream/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/NewKeyPropertyStream/ClassType = ARCQuery.NewKeyPropertyStream
Assembly/ARCQuery/Class/NewKeyPropertyStream/BaseTypes = ARCQuery.CompoundKey0x003BARCQuery.NewKey
Assembly/ARCQuery/Class/NewKeyPropertyStream/Interfaces = ARCCore.IK0x003BSystem.IEquatable0xoooo006010xoooo005BARCCore.IK0xoooo005D0x003BARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.NewKey0xoooo005D
Assembly/ARCQuery/Class/NewKeyPropertyStream/Description = Returns the PropertyStream for the given object.0x000D0x000A0x000D0x000AWorks by calling ToPropertyStream.0x000D0x000A0x000D0x000AWARNING: Will generate huge amount of data if called for the top-level of a typical hierarchical data storage.
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetPInternal/ReflectedType = ARCQuery.NewKeyPropertyStream
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetPInternal/MethodName = TryGetPInternal
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetPInternal/MethodSignature = Boolean TryGetPInternal(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetPInternal/Description = The internal executor, containing the specific functionality for how to evaluate the key.
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetP/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/TryGetP/Description = The outwards facing executor, understanding use of FollowingFunctionKeys.
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/SyntaxHelp/ReflectedType = ARCQuery.NewKeyPropertyStream
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/SyntaxHelp/Description = 'PropertyStream()'0x000D0x000AExamples:0x000D0x000A'Order/SELECT PropertyStream()'0x000D0x000A
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/FollowingFunctionKeys/ReflectedType = ARCQuery.CompoundKey
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/FollowingFunctionKeys/MethodName = FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/FollowingFunctionKeys/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCQuery.FunctionKey0x005D FollowingFunctionKeys
Assembly/ARCQuery/Class/NewKeyPropertyStream/_Member/FollowingFunctionKeys/Description = All FunctionKeys chained at end of compound key.0x000D0x000ALike for Customer 'Created.Year().Format("00")' (note, example is contrived, because as of Jul 2020 there is no Format-function available).0x000D0x000A0x000D0x000ATODO: Introduce into constructor in order to make immutable.
Assembly/ARCQuery/Class/QuantileKey/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QuantileKey/ClassType = ARCQuery.QuantileKey
Assembly/ARCQuery/Class/QuantileKey/Description = Can separate entities into quantiles, like Quartiles, Quintiles or Sextiles.0x000D0x000A0x000D0x000AThis is an not an expandable concept, that is, this class contains all the relevant functionality and you are not expected to implement anything specific in your ApplicationSpecificCode.0x000D0x000A0x000D0x000AThis is a one-time-use only object. It should not be reused between different API request for instance, because the first call to TryGetP caches the result (within itself) for ALL entities of given type within the data storage.0x000D0x000A0x000D0x000AThis also means that it is ESSENTIAL to use the concept of cached compound key in the C# code using this class. (the ref-parameter cachedCompoundKey to TryGetP.)0x000D0x000A(in order to avoid all entities being evaluated every time the quantile for one entity is requested.)0x000D0x000A0x000D0x000ANote that quantiles are calculated for alle entities, regardless of the actual selection.
Assembly/ARCQuery/Class/QuantileKey/_Member/TryGetP/ReflectedType = ARCQuery.QuantileKey
Assembly/ARCQuery/Class/QuantileKey/_Member/TryGetP/MethodName = TryGetP
Assembly/ARCQuery/Class/QuantileKey/_Member/TryGetP/MethodSignature = Boolean TryGetP(ARCCore.IP, ARCCore.IP, ARCQuery.CompoundKey, ARCCore.IP ByRef, System.String ByRef)
Assembly/ARCQuery/Class/QuantileKey/_Member/TryGetP/Description = Returns an integer with the number of the quantile group for the value returned by the given CompoundKey).0x000D0x000AFor instance if quantile -QUARTILE- is requested, will return a value between 1 and 4.0x000D0x000A0x000D0x000ANote that as of Jul 2020 duplicate values can be assigned to different quantile groups.0x000D0x000AFor instance, for the set 0x007B 5, 5, 5, 5 0x007D and -QUARTILE- the first element will be assigned to 1, the next to 2 and so on.0x000D0x000A0x000D0x000A
Assembly/ARCQuery/Class/QuantileKey/_Member/Quantile/ReflectedType = ARCQuery.QuantileKey
Assembly/ARCQuery/Class/QuantileKey/_Member/Quantile/MethodName = Quantile
Assembly/ARCQuery/Class/QuantileKey/_Member/Quantile/MethodSignature = ARCQuery.Quantile Quantile
Assembly/ARCQuery/Class/QuantileKey/_Member/Quantile/Description = Note that any value (positive integer greated than 2) is accepted, not necessarily only enums within Quantile
Assembly/ARCQuery/Class/QueryExpression/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpression/ClassType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpression/Description = Represents part of a query (or actually a transformation) against a given collection and the data storage from which it was taken.0x000D0x000A0x000D0x000AA series of queries are usually chained together in a fluent fashion0x000D0x000Afor instance as an API call like:0x000D0x000A 'api/RQ/std/Order/WHERE Value 0x003E 1000 NOK/REL Customer/ORDER BY LastName, FirstName/TAKE 50/'0x000D0x000Aor as a C# expression like:0x000D0x000A 'new QueryProgress(DataStorage, Orders).Where("Value 0x003E 100").Rel(typeof(Customer)).OrderBy("LastName,FirstName").Take(50)'0x000D0x000A(but in the latter case the standard LINQ extension in .NET will of course usually provide the same or better functionality (expect for AgoRapide unique queries like QueryExpressionRel)).0x000D0x000A0x000D0x000ASee also CompoundKey which expands the concept of keys.0x000D0x000A0x000D0x000AThe main purpose of the QueryExpression concept is to empower API users to create their own simple ad-hoc reports, without needing assistance from the API developers (that is, without any C# code having to be written or new API endpoints to be created).0x000D0x000A0x000D0x000AThe QueryExpression concept is not meant to be exhaustive with relation to relational modelling, nor is it proven formally.0x000D0x000AThis concept just takes away some (or actually rather quite a lot) of the need for 'hand-crafted' code in order to cover what are quite often very common scenarios.0x000D0x000A0x000D0x000AMore complex needs can be covered by ApplicationSpecificCode implementations of this class (see below).0x000D0x000A0x000D0x000ANote that queries can also be embedded in a Subscription (but this only gives meaning when querying against a hierarchical object storage, see AdHocQuery).0x000D0x000A0x000D0x000AImplementing classes in StandardAgoRapideCode:0x000D0x000AQueryExpressionAll0x000D0x000AQueryExpressionCache0x000D0x000AQueryExpressionHint0x000D0x000AQueryExpressionLimit0x000D0x000AQueryExpressionOrderBy TODO: Create QueryThenBy or improve parser in QueryOrderBy in order to order by multiple fields0x000D0x000AQueryExpressionPivot0x000D0x000AQueryExpressionAggregate0x000D0x000AQueryExpressionRel0x000D0x000AQueryExpressionSelect0x000D0x000AQueryExpressionShuffle0x000D0x000AQueryExpressionSkip0x000D0x000AQueryExpressionStrict0x000D0x000AQueryExpressionTake0x000D0x000AQueryExpressionWhere0x000D0x000A0x000D0x000ATODO: Potential sub-classes to be added:0x000D0x000A-QueryAggregate- (note similarity with QueryPivot)0x000D0x000A-QueryUnion- (for instance like /UNION 0x007BsubQuery0x007D)0x000D0x000A0x000D0x000ANote that the concept is inherently expandable, you can create your own sub-classes and integrate them with StandardAgoRapideCode.0x000D0x000ANote how any ApplicationSpecificCode implementations must be added to Parsers at application startup in order for them to be recognized by TryParse.0x000D0x000A0x000D0x000AOne practical application for ApplicationSpecificCode implementations of QueryExpression is hand-crafted reports, for instance a 'QueryExpressionReport042', available as for instance 'api/RQ/std/Report042'.0x000D0x000AAnother application could be hand-crafted HTML-representations of result sets.0x000D0x000A0x000D0x000ASee also CompoundKey (like ForeignKey, EntityMethodKey and NewKey),0x000D0x000AFunctionKey,0x000D0x000AQuantileKey and0x000D0x000AValueComparer.0x000D0x000A0x000D0x000AThe implementations of QueryExpression (together with the classes mentioned above) constitute building blocks which for instance an API end-user can fit together to construct reports as needed.0x000D0x000AThis compares well to monolithic report creation where elements can not be reused easily.0x000D0x000A(it is similar to the UNIX philosophy of small utilities each performing a well defined easy-to-understand function).
Assembly/ARCQuery/Class/QueryExpression/_Member/Execute/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpression/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpression/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpression/_Member/AddParser/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/AddParser/MethodName = AddParser
Assembly/ARCQuery/Class/QueryExpression/_Member/AddParser/MethodSignature = Void AddParser(System.String, System.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.QueryExpression,System.String0x005D0x005D)
Assembly/ARCQuery/Class/QueryExpression/_Member/AddParser/Description = Adds a ApplicationSpecificCode parser.0x000D0x000A0x000D0x000AOnly to be done when CurrentlyStartingUp.
Assembly/ARCQuery/Class/QueryExpression/_Member/TryParse/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/TryParse/MethodName = TryParse
Assembly/ARCQuery/Class/QueryExpression/_Member/TryParse/MethodSignature = Boolean TryParse(System.String, ARCQuery.QueryExpression ByRef, System.String ByRef)
Assembly/ARCQuery/Class/QueryExpression/_Member/TryParse/Description = Find parsers from Parsers based on first word in query.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A
Assembly/ARCQuery/Class/QueryExpression/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpression/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpression/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpression/_Member/Parsers/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/Parsers/MethodName = Parsers
Assembly/ARCQuery/Class/QueryExpression/_Member/Parsers/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Collections.Generic.List0x006010x005BSystem.Func0x006020x005BSystem.String,System.ValueTuple0x006020x005BARCQuery.QueryExpression,System.String0x005D0x005D0x005D0x005D Parsers
Assembly/ARCQuery/Class/QueryExpression/_Member/Parsers/Description = Parsers for all the relevant sub classes of QueryExpression.0x000D0x000AUsed by TryParse in order to parse to correct sub class.0x000D0x000A0x000D0x000AKey is first word of query, like 'STRICT', 'WHERE', 'ORDER' 0x005BBY0x005D, 'SKIP', 'TAKE', 'LIMIT', 'PIVOT', 'SELECT' and so on.0x000D0x000ANote that multiple sub classes can share first word (because value in this dictionary is List0x003C...0x003E).0x000D0x000AIf multiple parsers thereby exists then the first parser that succeeds with parsing 'wins'.0x000D0x000A0x000D0x000AAdd to this collection if you have QueryExpression sub classes implemented in your ApplicationSpecificCode.0x000D0x000AThe function added should call the corresponding TryParse in your sub class implementation.0x000D0x000A0x000D0x000ATODO: Consider automatic injecting to this collection at application startup, TODO: also for StandardAgoRapideCode, that is, eliminating code below.0x000D0x000A0x000D0x000ANOTE: Be careful to actually implement TryParse in your implementation.0x000D0x000ANOTE: If not implemented then TryParse in this class (TryParse)0x000D0x000ANOTE: will only call itself leading to a stack overflow exception.0x000D0x000A0x000D0x000ASee also AddParser.0x000D0x000A
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingTo/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingTo/MethodName = IPRelationsKeysPointingTo
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingTo/MethodSignature = ARCCore.PRich IPRelationsKeysPointingTo
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingTo/Description = Contains, for each (entity type) key, a list of entity types with foreign keys pointing to that entity type.0x000D0x000A0x000D0x000AShows how all the IP classes relate to each other.0x000D0x000A0x000D0x000ATODO: Move into for instance ForeignKey.0x000D0x000A0x000D0x000AUsed to automatically create links to related objects in a dynamic context.0x000D0x000A(see for instance LinkInsertionInDocumentation and QueryExpressionRel.)0x000D0x000A0x000D0x000AKey is type (ToStringVeryShort)0x000D0x000AValue is List0x003Cstring0x003E with corresponding types that refer to that type.0x000D0x000A0x000D0x000ASee also IPRelationsKeysPointingFrom.
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingTo/LongDescription = Example:0x000D0x000AIf we have a class called Customer and property keys OrderP.CustomerId and SupportTicketP.CustomerId then the entry for the key 'Customer' would be like new List0x003Cstring0x003E 0x007B "Order", 'SupportTicket' 0x007D.0x000D0x000A0x000D0x000AThis may be used to dynamically and automatically create links to related objects. For instance for context 'Customer/42' it will (with the help of this information) be possible to create corresponding links 'Order/WHERE CustomerId = 42' and 'SupportTicket/WHERE CustomerId = 42'.0x000D0x000A0x000D0x000ANote that as of Jun 2020 this concept relies on predefined property keys (PropertyKeyEnum).0x000D0x000AThere is however in principle nothing wrong with dynamically finding the same information, as long as 'standardized' names are used for foreign keys, like 'Order/1968/CustomerId = Customer/42' for instance.0x000D0x000ATODO: Consider such a dynamic discovery.
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingFrom/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingFrom/MethodName = IPRelationsKeysPointingFrom
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingFrom/MethodSignature = ARCCore.PRich IPRelationsKeysPointingFrom
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingFrom/Description = Contains, for each (entity type) key, a list of entity types which that entity type points to.0x000D0x000A0x000D0x000AShows how all the IP classes relate to each other.0x000D0x000A0x000D0x000ATODO: Move into for instance ForeignKey.0x000D0x000A0x000D0x000AKey is type (ToStringVeryShort)0x000D0x000AValue is List0x003Cstring0x003E with corresponding types which the key type points to.0x000D0x000A0x000D0x000ASee also IPRelationsKeysPointingTo.
Assembly/ARCQuery/Class/QueryExpression/_Member/IPRelationsKeysPointingFrom/LongDescription = Example:0x000D0x000AIf we have a class called OrderLine with property keys OrderLineP.OrderId and OrderLineP.ProductId then the entry for the key 'OrderLine' would be like new List0x003Cstring0x003E 0x007B "Order", 'Product' 0x007D.0x000D0x000A0x000D0x000AUsed by QueryExpressionRel in order to suggest relational 'jumps'.0x000D0x000A0x000D0x000ANote that as of Jun 2020 this concept relies on predefined property keys (PropertyKeyEnum).0x000D0x000AThere is however in principle nothing wrong with dynamically finding the same information, as long as 'standardized' names are used for foreign keys, like 'Order/1968/CustomerId = Customer/42' for instance.0x000D0x000ATODO: Consider such a dynamic discovery.
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/ClassType = ARCQuery.QueryExpressionWithSuggestions
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/Description = Keeps track as each query item gets executed.0x000D0x000A0x000D0x000ATODO: Find better name for this class.0x000D0x000A0x000D0x000AContains the original query (QueryExpression) and suggestions for potential new queries.0x000D0x000A0x000D0x000ANext and Previous are the suggestions for potential new queries.0x000D0x000A0x000D0x000AGenerated by methods implementing Execute.0x000D0x000A0x000D0x000AAn example is QueryExpressionSkip, if it sees QueryExpressionTake as next query to be executed then it knows how many more or less to skip.0x000D0x000A0x000D0x000AThis class is not immutable (because of -ResultCount-).
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Previous/ReflectedType = ARCQuery.QueryExpressionWithSuggestions
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Previous/MethodName = Previous
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Previous/MethodSignature = ARCQuery.QueryExpression Previous
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Previous/Description = Suggestion for a 'browse backwards' button.
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Next/ReflectedType = ARCQuery.QueryExpressionWithSuggestions
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Next/MethodName = Next
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Next/MethodSignature = ARCQuery.QueryExpression Next
Assembly/ARCQuery/Class/QueryExpressionWithSuggestions/_Member/Next/Description = Suggestion for a 'browse forwards' button.0x000D0x000A
Assembly/ARCQuery/Class/QueryExpressionAggregate/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionAggregate/ClassType = ARCQuery.QueryExpressionAggregate
Assembly/ARCQuery/Class/QueryExpressionAggregate/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionAggregate/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionAggregate/Description = Aggregates over the given key like0x000D0x000A 'AGGREGATE Product'.0x000D0x000Aor0x000D0x000A 'AGGREGATE Product BY Year SUM Amount'.0x000D0x000A0x000D0x000ASee SyntaxHelp.0x000D0x000A0x000D0x000ASee also QueryExpressionPivot which aggregates over two keys (row key and column key).
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionAggregate
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionAggregate
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/SyntaxHelp/Description = 1) 'AGGREGATE 0x007BrowKey0x007D' like "AGGREGATE Product"0x000D0x000Aor0x000D0x000A2) 'AGGREGATE 0x007BrowKey0x007D 0x007BaggregationType0x007D 0x007BaggregationKey0x007D' like "AGGREGATE Colour SUM Price"
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationType/ReflectedType = ARCQuery.QueryExpressionAggregate
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationType/MethodName = AggregationType
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationType/MethodSignature = ARCQuery.AggregationType AggregationType
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationType/Description = Most common value is Count, in which case AggregationKey may be correspondingly set to null.
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationKey/ReflectedType = ARCQuery.QueryExpressionAggregate
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationKey/MethodName = AggregationKey
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationKey/MethodSignature = ARCCore.IK AggregationKey
Assembly/ARCQuery/Class/QueryExpressionAggregate/_Member/AggregationKey/Description = This is often null (with AggregationType correspondingly set to Count-).0x000D0x000AIteration then looks like0x000D0x000A 'AGGREGATE Product'.0x000D0x000AIf not null then iteration looks like:0x000D0x000A 'AGGREGATE Product SUM Amount'
Assembly/ARCQuery/Class/QueryAggregateExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryAggregateExtension/ClassType = ARCQuery.QueryAggregateExtension
Assembly/ARCQuery/Class/QueryAggregateExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionAll/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionAll/ClassType = ARCQuery.QueryExpressionAll
Assembly/ARCQuery/Class/QueryExpressionAll/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionAll/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionAll/Description = Represents all entities (Execute returns input collection).0x000D0x000A0x000D0x000AUseful in order to get result set presented by ToHTMLSimpleSingle instead of ToHTMLSimpleSingle.0x000D0x000A0x000D0x000AExample:0x000D0x000AFor an API call like 'yourapi.com/Customer' presentation will be done by ToHTMLSimpleSingle as default.0x000D0x000AFor an API call like 'yourapi.com/Customer/All' presentation will be done by ToHTMLSimpleSingle as default.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionAll
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionAll
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionAll/_Member/SyntaxHelp/Description = 'ALL' (literally).
Assembly/ARCQuery/Class/QueryExpressionAllExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionAllExtension/ClassType = ARCQuery.QueryExpressionAllExtension
Assembly/ARCQuery/Class/QueryExpressionAllExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionCache/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionCache/ClassType = ARCQuery.QueryExpressionCache
Assembly/ARCQuery/Class/QueryExpressionCache/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionCache/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionCache/Description = Describes if cache is to be used or not.0x000D0x000A0x000D0x000AThis is relevant for generated values (as generated by FunctionKey, NewKey and similar). 0x000D0x000ASpecified through QueryExpressionCache and stored in UseCache.0x000D0x000AUsed by TryGetP.0x000D0x000ATODO: NOT IMPLEMENTED AS OF JUN 20200x000D0x000ATODO: Some issues are:0x000D0x000ATODO: 1) Impossible to store cached values back to IP sub-classes like PExact<EnumType>.0x000D0x000ATODO: 2) Introducing IP.CanAcceptAnyValue would still defeat purpose, since 1) still holds0x000D0x000ATODO: 3) Having a global cache would be difficult, because no key available (not possible to use object itself as key).0x000D0x000ATODO: 4) Cache would 'poison' later queries (could introduce PCacheValue though, with DateTime created and similar metadata).0x000D0x000A0x000D0x000ADoes not affect query result (other than that data may be from cache and therefore stale).0x000D0x000A0x000D0x000ASet to ON if caches are to be used.0x000D0x000A0x000D0x000ASee QueryExpressionWithSuggestions.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionCache
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionCache
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionCache/_Member/SyntaxHelp/Description = CACHE 0x007BON|OFF0x007D0x000D0x000AExamples:0x000D0x000ACACHE OFF0x000D0x000ACACHE ON
Assembly/ARCQuery/Class/QueryExpressionCacheExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionCacheExtension/ClassType = ARCQuery.QueryExpressionCacheExtension
Assembly/ARCQuery/Class/QueryExpressionCacheExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionHint/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionHint/ClassType = ARCQuery.QueryExpressionHint
Assembly/ARCQuery/Class/QueryExpressionHint/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionHint/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionHint/Description = Describes if hints are to be generated (as query progresses) for potential new queries. Specified through QueryExpressionHint and stored in CreateHints.0x000D0x000ADoes not affect query result.0x000D0x000A0x000D0x000ASet to OFF if hints are not needed (for instance if consumer of query is not a human). This will slightly improve performance.0x000D0x000A0x000D0x000ASee QueryExpressionWithSuggestions.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionHint
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionHint
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionHint/_Member/SyntaxHelp/Description = HINT 0x007BON|OFF0x007D0x000D0x000AExamples:0x000D0x000AHINT OFF0x000D0x000AHINT ON
Assembly/ARCQuery/Class/QueryExpressionHintExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionHintExtension/ClassType = ARCQuery.QueryExpressionHintExtension
Assembly/ARCQuery/Class/QueryExpressionHintExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionLimit/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionLimit/ClassType = ARCQuery.QueryExpressionLimit
Assembly/ARCQuery/Class/QueryExpressionLimit/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionLimit/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionLimit/Description = Limits the final HTML presentation of results (limits the number of elements being presented). 0x000D0x000ADoes not affect the query in itself. Used in order to avoid building huge HTML pages which will not be consumed anyway.0x000D0x000ASpecified through QueryExpressionLimit and stored in Limit.0x000D0x000ASee also QueryExpressionTake which takes a specific number of elements from the current query result.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionLimit
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionLimit
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionLimit/_Member/SyntaxHelp/Description = Syntax: LIMIT 0x007Blimit0x007D like 'LIMIT 42'
Assembly/ARCQuery/Class/QueryExpressionLimitExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionLimitExtension/ClassType = ARCQuery.QueryExpressionLimitExtension
Assembly/ARCQuery/Class/QueryExpressionLimitExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionOrderBy/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionOrderBy/ClassType = ARCQuery.QueryExpressionOrderBy
Assembly/ARCQuery/Class/QueryExpressionOrderBy/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionOrderBy/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionOrderBy/Description = See -syntaxHelp-.0x000D0x000A0x000D0x000ATODO: Implement also QueryThenBy and QueryThenByDescending as in ThenBy0x000D0x000ATOOD: Syntax 'THEN BY 0x007Bkey0x007D 0x005BDESC0x005D / 0x005BASC0x005D'0x000D0x000ATODO: Should probably work through casting of Details to IOrderedEnumerable.0x000D0x000ATODO: OR, just improve parser her (multiple fields with ASC / DESC), and utilize ThenBy from within this class.
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionOrderBy
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Key/ReflectedType = ARCQuery.QueryExpressionOrderBy
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Key/MethodName = Key
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Key/MethodSignature = ARCCore.IK Key
Assembly/ARCQuery/Class/QueryExpressionOrderBy/_Member/Key/Description = TODO: Expand syntax to include multiple keys
Assembly/ARCQuery/Class/QueryExpressionOrderByExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionOrderByExtension/ClassType = ARCQuery.QueryExpressionOrderByExtension
Assembly/ARCQuery/Class/QueryExpressionOrderByExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionPivot/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionPivot/ClassType = ARCQuery.QueryExpressionPivot
Assembly/ARCQuery/Class/QueryExpressionPivot/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionPivot/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionPivot/Description = Creates a table by querying over two keys like0x000D0x000A 'PIVOT Product BY Year'.0x000D0x000Aor0x000D0x000A 'PIVOT Product BY Year SUM Amount'.0x000D0x000A0x000D0x000ASee SyntaxHelp.0x000D0x000A0x000D0x000ASee also QueryExpressionAggregate which aggregates over only one key.
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionPivot
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionPivot
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/SyntaxHelp/Description = 1) 'PIVOT 0x007BrowKey0x007D BY 0x007BcolumnKey0x007D' like "PIVOT Colour BY Production.Year"0x000D0x000Aor0x000D0x000A2) 'PIVOT 0x007BrowKey0x007D BY 0x007BcolumnKey0x007D 0x007BaggregationType0x007D 0x007BaggregationKey0x007D' like "PIVOT Colour BY Production.Year SUM Price"
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationType/ReflectedType = ARCQuery.QueryExpressionPivot
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationType/MethodName = AggregationType
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationType/MethodSignature = ARCQuery.AggregationType AggregationType
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationType/Description = Most common value is Count, in which case AggregationKey may be correspondingly set to null.
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationKey/ReflectedType = ARCQuery.QueryExpressionPivot
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationKey/MethodName = AggregationKey
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationKey/MethodSignature = ARCCore.IK AggregationKey
Assembly/ARCQuery/Class/QueryExpressionPivot/_Member/AggregationKey/Description = This is often null (with AggregationType correspondingly set to Count-).0x000D0x000AIteration then looks like0x000D0x000A 'PIVOT Product BY Year'.0x000D0x000AIf not null then iteration looks like:0x000D0x000A 'PIVOT Product BY Year SUM Amount'
Assembly/ARCQuery/Class/QueryExpressionPivotExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionPivotExtension/ClassType = ARCQuery.QueryExpressionPivotExtension
Assembly/ARCQuery/Class/QueryExpressionPivotExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionRel/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionRel/ClassType = ARCQuery.QueryExpressionRel
Assembly/ARCQuery/Class/QueryExpressionRel/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionRel/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionRel/Description = Enables 'jumping' or 'travelling' from a collection of one entity type to another (related) entity type.0x000D0x000A0x000D0x000AEnables queries like0x000D0x000A'Order/WHERE Amount 0x003E 10000 EUR/REL Customer/REL SupportTicket'0x000D0x000Awhich will show support tickets for all customer who at some time have ordered something for at least 10 000 EUR.0x000D0x000A0x000D0x000ACorresponds coarsely to the JOIN concept in SQL0x000D0x000A0x000D0x000AThere are two ways for this to happen:0x000D0x000A0x000D0x000A1) TODO: Give this a formal name (some type of JOIN?)0x000D0x000AIf IPRelationsKeysPointingTo has a link for the current entity type, like 'Customer' having a link to 'Order' and 'SupportTicket' then a jump from a collection of Customers can be made to for instance an Order collection by iterating through all Orders with OrderP.CustomerId present in the collection of Customers.0x000D0x000A0x000D0x000A2) TODO: Give this a formal name (some type of JOIN?)0x000D0x000AA jump from a collection of 'Order' or 'SupportTicket' to 'Customer' can be made by iterating through the whole collection looking for 'CustomerId = xxx' properties.0x000D0x000A0x000D0x000AVariant 1) will be the default attempted. If not, then variant 2) will be attempted.0x000D0x000A0x000D0x000ANOTE: The relevant keys for 'jumping' must exist. If you for instance do like this (admittedly meaningless query, but it explains the point though):0x000D0x000ANOTE: 'Order/WHERE Amount 0x003E 10000 EUR/SELECT Amount, Created/REL Customer'0x000D0x000ANOTE: then the key CustomerId is not available, and the jumping breaks down.0x000D0x000ANOTE: 'Order/WHERE Amount 0x003E 10000 EUR/SELECT CustomerId, Amount, Created/REL Customer'0x000D0x000ANOTE: on the other hand would work (but use of SELECT is meaningless anyway of course).0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionRel
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionRel
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/SyntaxHelp/Description = 'REL 0x007Btype0x007D'0x000D0x000AExamples:0x000D0x000A'REL Customer',0x000D0x000A'REL Order'0x000D0x000A
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/StrType/ReflectedType = ARCQuery.QueryExpressionRel
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/StrType/MethodName = StrType
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/StrType/MethodSignature = System.String StrType
Assembly/ARCQuery/Class/QueryExpressionRel/_Member/StrType/Description = The ToStringVeryShort representation of the type.
Assembly/ARCQuery/Class/QueryExpressionRelExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionRelExtension/ClassType = ARCQuery.QueryExpressionRelExtension
Assembly/ARCQuery/Class/QueryExpressionRelExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionSelect/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionSelect/ClassType = ARCQuery.QueryExpressionSelect
Assembly/ARCQuery/Class/QueryExpressionSelect/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionSelect/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionSelect/Description = Selects which fields to include.0x000D0x000A0x000D0x000ANote that only 'SELECT *' is not relevant (but still possible) because initially all queries start with a collection in which all fields are included.0x000D0x000A(in other words, use of QueryExpressionSelect is only relevant in cases where you want to filter out some fields, not add fields).0x000D0x000A0x000D0x000A'SELECT *' is relevant in connection with NewKey, like 'SELECT *, CountP' which will select all fields in addition to a new field calculated by NewKeyCountP.0x000D0x000A0x000D0x000ANote: As of Jun 2020 will not preserve type of key, all keys in result becomes IKString0x000D0x000A0x000D0x000ATODO: Add some functionality recognizing PriorityOrder, like0x000D0x000ATODO: only 'SELECT' which could select only from Important or lesser value.0x000D0x000ATODO: Or 'SELECT WHERE PriorityOrder LEQ Important' (Using negative values for PriorityOrder is not very intuitive here).0x000D0x000ATODO: or any other query against the property keys for the relevant entity class.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionSelect
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionSelect
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionSelect/_Member/SyntaxHelp/Description = SELECT 0x007Bfield-10x007D, 0x007Bfield-20x007D ... 0x007Bfield-n0x007D0x000D0x000Aor0x000D0x000ASELECT 0x007Bfield-10x007D AS 0x007Bfield-1-as0x007D, 0x007Bfield-20x007D AS 0x007Bfield-2-as0x007D ... 0x007Bfield-n0x007D AS 0x007Bfield-n-as0x007D0x000D0x000AExamples:0x000D0x000A'SELECT *'0x000D0x000A'SELECT *.TMB()' -- Apply a function to every field.0x000D0x000A'SELECT FirstName, LastName'0x000D0x000A'SELECT FirstName.Left(10), LastName.Left(20)' -- Apply a function to field0x000D0x000A'SELECT FirstName AS fn, LastName AS ln'0x000D0x000A
Assembly/ARCQuery/Class/QuerySelectExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QuerySelectExtension/ClassType = ARCQuery.QuerySelectExtension
Assembly/ARCQuery/Class/QuerySelectExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionShuffle/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionShuffle/ClassType = ARCQuery.QueryExpressionShuffle
Assembly/ARCQuery/Class/QueryExpressionShuffle/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionShuffle/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionShuffle/Description = Shuffles collection in random order. Useful when you want to see a limited but still 'representative' sample of result set.0x000D0x000A0x000D0x000AUseful in collection with QueryExpressionTake.0x000D0x000A0x000D0x000ANote extension method Shuffle which can be used in C# directly.0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionShuffle
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionShuffle
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionShuffle/_Member/SyntaxHelp/Description = SHUFFLE
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/ClassType = ARCQuery.QueryExpressionShuffleExtension
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/_Member/Shuffle/ReflectedType = ARCQuery.QueryExpressionShuffleExtension
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/_Member/Shuffle/MethodName = Shuffle
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/_Member/Shuffle/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BT0x005D Shuffle0x005BT0x005D(System.Collections.Generic.IEnumerable0x006010x005BT0x005D, System.Random)
Assembly/ARCQuery/Class/QueryExpressionShuffleExtension/_Member/Shuffle/Description = Code from Jon Skeet at stackoverflow:0x000D0x000Ahttps://stackoverflow.com/questions/1287567/is-using-random-and-orderby-a-good-shuffle-algorithm
Assembly/ARCQuery/Class/QueryExpressionSkip/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionSkip/ClassType = ARCQuery.QueryExpressionSkip
Assembly/ARCQuery/Class/QueryExpressionSkip/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionSkip/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionSkip/Description = Skips the specified number of elements from the current query result.0x000D0x000A0x000D0x000AUseful in combination with QueryExpressionTake.r0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionSkip
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionSkip
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionSkip/_Member/SyntaxHelp/Description = SKIP 0x007BCount0x007D like 'SKIP 42'
Assembly/ARCQuery/Class/QueryExpressionSkipExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionSkipExtension/ClassType = ARCQuery.QueryExpressionSkipExtension
Assembly/ARCQuery/Class/QueryExpressionSkipExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionStrict/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionStrict/ClassType = ARCQuery.QueryExpressionStrict
Assembly/ARCQuery/Class/QueryExpressionStrict/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionStrict/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionStrict/Description = Describes level of -Strictness- when executing query. Specified through QueryExpressionStrict and stored in CurrentStrictness.0x000D0x000ADoes not affect query result, only whether query will terminate or not due to perceived inconsistencies in the data.0x000D0x000A0x000D0x000AA typical example where you may want to set 'STRICT OFF' is when you have queries results where sometimes a specific field is not set, and that field is used in a subsequent query expression, for instance 'WHERE' or 'ORDER BY'.0x000D0x000AThis is because -QueryExpression does not have any concept of schema / 'supposed to exist' fields, it only sees the actual data.0x000D0x000AExample: If you have this:0x000D0x000A Customer/42/FirstName = John0x000D0x000A Customer/42/LastName = Smith0x000D0x000A Customer/43/FirstName = Ann0x000D0x000AThen the query "Customer/WHERE FirstName = 'Ann'/ORDER BY LastName'"0x000D0x000Awill fail because QueryExpressionOrderBy will not see any field 'LastName'.0x000D0x000AThis query0x000D0x000A "Customer/WHERE FirstName = 'Ann'/STRICT OFF/ORDER BY LastName'"0x000D0x000Aon the other hand will succeed.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionStrict
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionStrict
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionStrict/_Member/SyntaxHelp/Description = STRICT 0x007Bstrictness0x007D0x000D0x000AExamples:0x000D0x000ASTRICT OFF0x000D0x000ASTRICT ON
Assembly/ARCQuery/Class/QueryExpressionStrictExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionStrictExtension/ClassType = ARCQuery.QueryExpressionStrictExtension
Assembly/ARCQuery/Class/QueryExpressionStrictExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionTake/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionTake/ClassType = ARCQuery.QueryExpressionTake
Assembly/ARCQuery/Class/QueryExpressionTake/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionTake/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionTake/Description = Takes a specific number of elements from the current query result.0x000D0x000A0x000D0x000ASee also QueryExpressionLimit which limits the final HTML presentation of results.0x000D0x000A0x000D0x000AUseful in combination with either QueryExpressionSkip or QueryExpressionShuffle.0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionTake
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionTake
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionTake/_Member/SyntaxHelp/Description = TAKE 0x007BCount0x007D0x000D0x000AExamples:0x000D0x000A'TAKE 42'0x000D0x000A
Assembly/ARCQuery/Class/QueryTakeExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryTakeExtension/ClassType = ARCQuery.QueryTakeExtension
Assembly/ARCQuery/Class/QueryTakeExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionWhere/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionWhere/ClassType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/BaseTypes = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionWhere/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.QueryExpression0xoooo005D
Assembly/ARCQuery/Class/QueryExpressionWhere/Description = Executes a 'WHERE 0x007Bkey0x007D 0x007Boperator0x007D 0x007Bvalue0x007D' against the given collection.0x000D0x000A0x000D0x000AUnderstands use of ValueComparer like ValueComparerDateTime0x000D0x000A0x000D0x000ATODO: Expand syntax, in order to support AND and OR.0x000D0x000A0x000D0x000ATODO: Allow IS NULL and IS NOT NULL in addition to EQ NULL and NEQ NULL0x000D0x000A0x000D0x000ASee SyntaxHelp.
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Execute/ReflectedType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Execute/MethodName = Execute
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Execute/MethodSignature = ARCQuery.QueryExpressionWithSuggestions Execute(ARCQuery.QueryProgress)
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Execute/Description = Transforms the given input collection into a resulting collection.0x000D0x000A0x000D0x000AThe parameter data storage is used for sub classes implementing relations (transforming to collections of other types).0x000D0x000A0x000D0x000ATODO: Most probably we also need a parameter for what entity type the input collection represents TODO: (one might of course sample it, but the calling method should know anyway). 0x000D0x000ATODO: It is possible also that we need a parameter for current LinkContext, or OR TODO: rather, let parameter DataStorage just be the same where we find the key of the current entity type TODO: and assume that other entity collections are stored at the same level.0x000D0x000ATODO:0x000D0x000ATODO: SOLUTION: QueryCollection-class with all necessary parameters. This also enables0x000D0x000ATODO: method chaining (fluent interface) AND logging AND timing AND exception handling AND so on AND so on.0x000D0x000ATODO:0x000D0x000ATODO: Each Query-implementation adds an Extension method against QueryCollection.0x000D0x000ATODO: QueryCollection itself is IP, with keys for log-data and a Result-key.
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/GetDistinctValuesForKeyAgainstCollection/ReflectedType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/GetDistinctValuesForKeyAgainstCollection/MethodName = GetDistinctValuesForKeyAgainstCollection
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/GetDistinctValuesForKeyAgainstCollection/MethodSignature = System.Collections.Generic.List0x006010x005BSystem.Object0x005D GetDistinctValuesForKeyAgainstCollection(ARCCore.IP, System.Collections.Generic.IEnumerable0x006010x005BARCCore.IKIP0x005D)
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/GetDistinctValuesForKeyAgainstCollection/Description = Used by -GetPrevious- and -GetNext-.0x000D0x000AWill return either string values or values of type -ValueEnum-.0x000D0x000A
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/IsMatch/ReflectedType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/IsMatch/MethodName = IsMatch
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/IsMatch/MethodSignature = Boolean IsMatch(ARCCore.IP, ARCCore.IP, ARCQuery.CompoundKey ByRef)
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/IsMatch/Description = TODO: See Execute for how to add a PK-parameter here, instead of the IK-key that we have now
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/TryCheckForExistenceOfField/ReflectedType = ARCQuery.QueryExpression
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/TryCheckForExistenceOfField/MethodName = TryCheckForExistenceOfField
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/TryCheckForExistenceOfField/MethodSignature = Boolean TryCheckForExistenceOfField(ARCQuery.QueryProgress, ARCCore.IK, ARCCore.PK ByRef)
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/TryCheckForExistenceOfField/Description = Used by query expressions in order to catch wrong field names used or misspelling of field names.0x000D0x000A0x000D0x000AReturns TRUE if either:0x000D0x000A1) -TryGetFromTypeAndFieldName succeeds (in which case out parameter keyAsPK will be set),0x000D0x000A2) CurrentStrictness = OFF,0x000D0x000A3) Result is empty,0x000D0x000A4) At least one element in Result contains the given key0x000D0x000A0x000D0x000ANote that this check must be deferred to the actual execution of the query, not at TryParse, because the query expression mechanism has now concept of for which entity types it operates on.
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/SyntaxHelp/ReflectedType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/SyntaxHelp/MethodName = SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/SyntaxHelp/MethodSignature = System.String SyntaxHelp
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/SyntaxHelp/Description = WHERE 0x007Bkey0x007D 0x007Boperator0x007D 0x007Bvalue0x007D0x000D0x000AExamples:0x000D0x000A"WHERE FirstName LIKE 'John%'", 0x000D0x000A"WHERE Colour = Red",0x000D0x000A"WHERE Created = LastWeek0x000D0x000A
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Value/ReflectedType = ARCQuery.QueryExpressionWhere
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Value/MethodName = Value
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Value/MethodSignature = System.Object Value
Assembly/ARCQuery/Class/QueryExpressionWhere/_Member/Value/Description = The Value should ideally be as strongly typed as possible. Note that it may be of type -ValueEnum- relevant for queries like WHERE Name = NULL
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/ClassType = ARCQuery.QueryExpressionWhereExtension
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/Description = Enables fluent interface through method chaining
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, System.String, ARCQuery.Operator, System.Object)/ReflectedType = ARCQuery.QueryExpressionWhereExtension
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, System.String, ARCQuery.Operator, System.Object)/MethodName = Where
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, System.String, ARCQuery.Operator, System.Object)/MethodSignature = ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, System.String, ARCQuery.Operator, System.Object)
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, System.String, ARCQuery.Operator, System.Object)/Description = Note how this can be confused with LINQ overload
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, ARCCore.IK, ARCQuery.Operator, System.Object)/ReflectedType = ARCQuery.QueryExpressionWhereExtension
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, ARCCore.IK, ARCQuery.Operator, System.Object)/MethodName = Where
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, ARCCore.IK, ARCQuery.Operator, System.Object)/MethodSignature = ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, ARCCore.IK, ARCQuery.Operator, System.Object)
Assembly/ARCQuery/Class/QueryExpressionWhereExtension/_Member/ARCQuery.QueryProgress Where(ARCQuery.QueryProgress, ARCCore.IK, ARCQuery.Operator, System.Object)/Description = Note how this can be confused with LINQ overload
Assembly/ARCQuery/Class/QueryProgress/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryProgress/ClassType = ARCQuery.QueryProgress
Assembly/ARCQuery/Class/QueryProgress/Description = Keeps track of progress of query, and the interim result.0x000D0x000A0x000D0x000ATODO: Rename into Query and QueryProgressDetails into QueryProgress0x000D0x000A
Assembly/ARCQuery/Class/QueryProgress/_Member/ShouldTerminate/ReflectedType = ARCQuery.QueryProgress
Assembly/ARCQuery/Class/QueryProgress/_Member/ShouldTerminate/MethodName = ShouldTerminate
Assembly/ARCQuery/Class/QueryProgress/_Member/ShouldTerminate/MethodSignature = Boolean ShouldTerminate(System.String)
Assembly/ARCQuery/Class/QueryProgress/_Member/ShouldTerminate/Description = Attempts to explain problem, in TerminateReason and by logging.0x000D0x000AReturns TRUE if -CurrentStrictness = ON
Assembly/ARCQuery/Class/QueryProgress/_Member/ExecuteOne/ReflectedType = ARCQuery.QueryProgress
Assembly/ARCQuery/Class/QueryProgress/_Member/ExecuteOne/MethodName = ExecuteOne
Assembly/ARCQuery/Class/QueryProgress/_Member/ExecuteOne/MethodSignature = ARCQuery.QueryProgress ExecuteOne(ARCQuery.QueryExpression)
Assembly/ARCQuery/Class/QueryProgress/_Member/ExecuteOne/Description = Note how avoids deferred execution in order to always correctly time execution of each query element separately.0x000D0x000AThis kind of defeats the purpose of QueryExpression implementations returning IEnumerable instead of List.
Assembly/ARCQuery/Class/QueryProgress/_Member/Details/ReflectedType = ARCQuery.QueryProgress
Assembly/ARCQuery/Class/QueryProgress/_Member/Details/MethodName = Details
Assembly/ARCQuery/Class/QueryProgress/_Member/Details/MethodSignature = ARCQuery.QueryProgressDetails Details
Assembly/ARCQuery/Class/QueryProgress/_Member/Details/Description = Use of member class in order for QueryProgress not to inherit IP.0x000D0x000A0x000D0x000ATOOD: Is this comment necessary? Is is necessary to distinguish between log context or not at execution?0x000D0x000AIf -LogContext is set then detailed logging will be done by ExecuteOne.0x000D0x000ANote that this will have some marginal performance consequences, especially because deferred execution will be avoided in order to count result at each stage (result at each stage will be converted to List).
Assembly/ARCQuery/Class/QueryProgressDetails/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/QueryProgressDetails/ClassType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/BaseTypes = ARCCore.PConcurrent
Assembly/ARCQuery/Class/QueryProgressDetails/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCQuery/Class/QueryProgressDetails/CorrespondingEnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/Class/QueryProgressDetails/Description = Keeps track of execution of query, and also stores final result.0x000D0x000A0x000D0x000ATODO: Rename into QueryProgress (after QueryProgress has been renamed into Query)0x000D0x000A0x000D0x000ANecessary in order for storing final result because a query result:0x000D0x000A1) Is a uniform collection (of identical type), and0x000D0x000A2) Has a 'location' URL-wise that is very difficult to generate relative links for.0x000D0x000ATherefore, the standared ToHTMLSimpleSingle method is not very well suited.0x000D0x000A0x000D0x000ARecognized for instance by RQController in ARAAPI.
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToJSONSerializeable/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToJSONSerializeable/MethodName = ToJSONSerializeable
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToJSONSerializeable/MethodSignature = System.Collections.Generic.Dictionary0x006020x005BSystem.String,System.Object0x005D ToJSONSerializeable(Int32)
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToJSONSerializeable/Description = Override of default interface method ToJSONSerializeable is necessary because resulting data is 'hidden' within Result.
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/PreviousQueryJustExecuted/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/PreviousQueryJustExecuted/MethodName = PreviousQueryJustExecuted
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/PreviousQueryJustExecuted/MethodSignature = ARCQuery.QueryExpression PreviousQueryJustExecuted()
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/PreviousQueryJustExecuted/Description = TODO: This is somewhat loosely associated.
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/NextQueryToExecute/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/NextQueryToExecute/MethodName = NextQueryToExecute
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/NextQueryToExecute/MethodSignature = ARCQuery.QueryExpression NextQueryToExecute()
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/NextQueryToExecute/Description = TODO: This is somewhat loosely associated.0x000D0x000ATODO: Note that the CURRENT query (the query being executed 'now') TODO: is assumed NOT to have been added to the collection ExecutedQueries yet.
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToHTMLSimpleSingle/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToHTMLSimpleSingle/MethodName = ToHTMLSimpleSingle
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToHTMLSimpleSingle/MethodSignature = System.String ToHTMLSimpleSingle(Boolean, System.Collections.Generic.List0x006010x005BARCCore.IK0x005D)
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToHTMLSimpleSingle/Description = Alternative to ToHTMLSimpleSingle.0x000D0x000APresent result as a uniform table with all keys present.0x000D0x000ACreates only links to 'ordinary' entity objects (links from keys).0x000D0x000A0x000D0x000AReturns detailed log and exception information in addition to result if considered relevant.0x000D0x000A0x000D0x000ANOTE: The mere existence of this method is not sufficient in order to avoid ToHTMLSimpleSingle being called.0x000D0x000A(extension method will be chosen anyway if instance is of type IP.0x000D0x000A0x000D0x000ATODO: Method is quite long (Jul 2020). Consider breaking up into sub-methods.
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToString/MethodName = ToString
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/Result/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/Result/MethodName = Result
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/Result/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BARCCore.IKIP0x005D Result
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/Result/Description = This gets updated continously as the different query expressions get evaluated
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ExecutedQueries/ReflectedType = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ExecutedQueries/MethodName = ExecutedQueries
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ExecutedQueries/MethodSignature = System.Collections.Generic.List0x006010x005BARCQuery.QueryExpressionWithSuggestions0x005D ExecutedQueries
Assembly/ARCQuery/Class/QueryProgressDetails/_Member/ExecutedQueries/Description = The result from calling Execute for each query in Queries.
Assembly/ARCQuery/Class/ValueComparer/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/ValueComparer/ClassType = ARCQuery.ValueComparer
Assembly/ARCQuery/Class/ValueComparer/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.ValueComparer0xoooo005D
Assembly/ARCQuery/Class/ValueComparer/Description = Can evaluation expressions like 'WHERE Created = ThisYear.0x000D0x000A0x000D0x000ASimplifies query expression regarding to the actual value comparision.0x000D0x000AAn example is 'Order/WHERE Created = ThisYear' as offered by ValueComparerDateTime.0x000D0x000A0x000D0x000AImplementing classes:0x000D0x000AValueComparerDateTime.0x000D0x000A0x000D0x000ATODO: Make extensible somehow.0x000D0x000ATODO: See for instance how QueryExpression and FunctionKey has been made extensible.0x000D0x000ATODO: (note that exact same approach can not be used for ValueComparer TODO: because there is no single word in the start identifying which parser to use.0x000D0x000A
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetPrevious/ReflectedType = ARCQuery.ValueComparer
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetPrevious/MethodName = TryGetPrevious
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetPrevious/MethodSignature = Boolean TryGetPrevious(ARCQuery.ValueComparer ByRef)
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetPrevious/Description = Suggestion for previous query (browsing 'backwards')
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetNext/ReflectedType = ARCQuery.ValueComparer
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetNext/MethodName = TryGetNext
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetNext/MethodSignature = Boolean TryGetNext(ARCQuery.ValueComparer ByRef)
Assembly/ARCQuery/Class/ValueComparer/_Member/TryGetNext/Description = Suggestion for next query (browsing 'forwards')
Assembly/ARCQuery/Class/ValueComparerDateTime/AssemblyName = ARCQuery
Assembly/ARCQuery/Class/ValueComparerDateTime/ClassType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/BaseTypes = ARCQuery.ValueComparer
Assembly/ARCQuery/Class/ValueComparerDateTime/Interfaces = ARCCore.ITypeDescriber0x003BSystem.IEquatable0xoooo006010xoooo005BARCQuery.ValueComparer0xoooo005D
Assembly/ARCQuery/Class/ValueComparerDateTime/Description = ValueComparerDateTime is an attempt at offering a human language interface for date and time queries.0x000D0x000A0x000D0x000AThis class understands such terms as Today, BeforeYesterday, LastTwoDays, Last6Months, ThisYear, LastYear and so on.0x000D0x000A0x000D0x000AEnables queries like 'Order/WHERE Created = ThisMonth', that is, a query where you do not have to change the condition of the query expression as time passes.0x000D0x000A0x000D0x000AUnderstood by QueryExpressionWhere.0x000D0x000A0x000D0x000ATerms like Ago and In means that specific period. For instance on Thursday TwoDaysAgo means Tuesday (only) while InTwoDays means Saturday (only).0x000D0x000A0x000D0x000ATerms like Last and Next means an interval (until today or from today). For instance on Thursday LastTwoDays means Tuesday and Wednesday while NextTwoDays means Friday and Saturday.0x000D0x000A(see IsInterval.)0x000D0x000A0x000D0x000ASee also IsAfter, IsBefore, IsGliding.0x000D0x000A0x000D0x000ANOTE: As soon as an instance of ValueComparerDateTime is created in C#, NOTE: it has a limited usefulness as time passes because the0x000D0x000ANOTE: time of initialization decides the time range (StartPeriod / EndPeriod) that it compares against.0x000D0x000ANOTE: For instance, at time 09:59 NextHour would mean 10:00 to 11:00, but the same object used later0x000D0x000ANOTE: at 10:01 for instance would still compare against 10:00 to to 11:00.0x000D0x000ANOTE: In other words, these object instances are one-time-use only.0x000D0x000A
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetPrevious/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetPrevious/MethodName = TryGetPrevious
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetPrevious/MethodSignature = Boolean TryGetPrevious(ARCQuery.ValueComparer ByRef)
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetPrevious/Description = Suggestion for previous query (browsing 'backwards')
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetNext/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetNext/MethodName = TryGetNext
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetNext/MethodSignature = Boolean TryGetNext(ARCQuery.ValueComparer ByRef)
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryGetNext/Description = Suggestion for next query (browsing 'forwards')
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryParse/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryParse/MethodName = TryParse
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryParse/MethodSignature = Boolean TryParse(System.String, ARCQuery.ValueComparerDateTime ByRef, System.String ByRef)
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/TryParse/Description = Note: This parser is probably exhaustive but not necessarily logical0x000D0x000ANote: (it will accept as valid input insensical expression)0x000D0x000ANote: Parser is tailored to the English language
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Resolution/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Resolution/MethodName = Resolution
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Resolution/MethodSignature = ResolutionEnum Resolution
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Resolution/Description = See -ResolutionEnum-.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Steps/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Steps/MethodName = Steps
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Steps/MethodSignature = Int32 Steps
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/Steps/Description = Value 0 would mean 'This', like ThisHour, Today, ThisMonth and so on.0x000D0x000AValue -1 would mean 'Last', like LastHour, YesterDay, LastMonth and so on.0x000D0x000AValue -2 would mean 'LastX' like LastTwoHours (Last2Hours) and so on...Value 1 would mean 'Next', like NextHour, 'Tomorrow', NextMonth and so on.0x000D0x000A
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsGliding/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsGliding/MethodName = IsGliding
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsGliding/MethodSignature = Boolean IsGliding
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsGliding/Description = The modifier 'Gliding' (or just 'G') can be appended in order to mean continous gliding periode, so for instance0x000D0x000Aat time 09:15 NextHourGliding (or NextHourG) would mean between 09:15 and 10:15, instead of between 10:00 and 11:00.0x000D0x000ALikewise at date 2020-12-09 time 09:15 LastYearGliding (or LastYearG) would mean betweem 2019-12-09 09:15 and 2020-12-09 09:15 instead of the year of 2019.0x000D0x000A
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsBefore/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsBefore/MethodName = IsBefore
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsBefore/MethodSignature = Boolean IsBefore
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsBefore/Description = The modifier 'Before' can be prepended in order to mean from any time before the specified time.0x000D0x000ANote: 'Until' is synonymous with 'Before' but not recommended, as it can be ambigious.0x000D0x000AExample: BeforeLastHour would at time 09:15 mean anything before 08:000x000D0x000ABeforeLastHourGliding would at time 09:15 mean anything before 08:15.0x000D0x000A0x000D0x000ANote that setting IsBefore is equivalent to setting StartPeriod to -MinValue-.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsAfter/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsAfter/MethodName = IsAfter
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsAfter/MethodSignature = Boolean IsAfter
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsAfter/Description = The modifier 'After' can be prepended in order to mean any time after the specified time.0x000D0x000ANote: 'From' and 'Since' is synonynous with 'After' but not recommended, as it can be ambigious.0x000D0x000AExample: AfterLastHour would at time 09:15 mean anything after 08:000x000D0x000AAfterLastHourGliding would at time 09:15 mean anything after 08:15.0x000D0x000A0x000D0x000ANote that setting IsAfter is equivalent to setting EndPeriod to -MaxValue-.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsInterval/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsInterval/MethodName = IsInterval
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsInterval/MethodSignature = Boolean IsInterval
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/IsInterval/Description = Normally the interval which is compared against is the timespan corresponding to Resolution.0x000D0x000A(unless of course IsBefore or IsAfter is used.)0x000D0x000A0x000D0x000AIf terms like 'Last3Days' or 'Next2Months' are used then the interval to compare against would be centered around the InitValue (the 'now' value).0x000D0x000A0x000D0x000AExample: On Thursday 3DaysAgo would mean only Monday, while Last3Days would mean 'Monday to Wednesday'.0x000D0x000ALikewise in April 3MonthsAgo would mean only January, while Last3Months would mean 'January to March'.0x000D0x000A
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/InitValue/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/InitValue/MethodName = InitValue
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/InitValue/MethodSignature = System.DateTime InitValue
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/InitValue/Description = For debugging purposes. The initial 'now' value used before calculating StartPeriod and EndPeriod.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/StartPeriod/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/StartPeriod/MethodName = StartPeriod
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/StartPeriod/MethodSignature = System.DateTime StartPeriod
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/StartPeriod/Description = The start of the interval which this instance compares against.0x000D0x000AThe comparision should be 'greater than or equal to' -StartPeriod and 'less than' -EndPeriod.0x000D0x000A0x000D0x000ANote that setting IsBefore is equivalent to setting StartPeriod to -MinValue-.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/EndPeriod/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/EndPeriod/MethodName = EndPeriod
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/EndPeriod/MethodSignature = System.DateTime EndPeriod
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/EndPeriod/Description = The end of the interval which this instance compares against.0x000D0x000AThe comparision should be 'greater than or equal to' -StartPeriod and 'less than' -EndPeriod.0x000D0x000A0x000D0x000ANote that setting IsAfter is equivalent to setting EndPeriod to -MaxValue-.
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/ToDebugProperties/ReflectedType = ARCQuery.ValueComparerDateTime
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/ToDebugProperties/MethodName = ToDebugProperties
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/ToDebugProperties/MethodSignature = System.Collections.Generic.IEnumerable0x006010x005BSystem.ValueTuple0x006020x005BSystem.String,System.String0x005D0x005D ToDebugProperties
Assembly/ARCQuery/Class/ValueComparerDateTime/_Member/ToDebugProperties/Description = TODO: Is it relevant to let this class implement IP instead?
Assembly/ARCQuery/AREnumType/_Description = All enums found in assembly ARCQuery.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/_Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/AREnumType = PropertyKeyEnum
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/CorrespondingClass = ARCQuery.QueryProgressDetails
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Queries/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Queries/PKTypeAttribute/EnumMember = Queries
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Queries/PKTypeAttribute/Type = ARCQuery.QueryExpression
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Queries/PKTypeAttribute/IsObligatory = False
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Queries/PKTypeAttribute/Cardinality = WholeCollection
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/EnumMember = StrCurrentType
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/Type = System.String
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/IsObligatory = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/PKTypeAttribute/Description = Normally the ToStringVeryShort representation of the type of objects in the Result collection.0x000D0x000AIf the collection is a result of QueryExpressionPivot or similar however, then the value will be something like 'Row' instead, that is, a name describing the data rather then the formal type (which would typically be typeof(PRich).0x000D0x000ATODO: Elaborate on this.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/StrCurrentType/Description = Normally the ToStringVeryShort representation of the type of objects in the Result collection.0x000D0x000AIf the collection is a result of QueryExpressionPivot or similar however, then the value will be something like 'Row' instead, that is, a name describing the data rather then the formal type (which would typically be typeof(PRich).0x000D0x000ATODO: Elaborate on this.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/EnumMember = CurrentStrictness
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/Type = ARCQuery.Strictness
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/DefaultValue = ON
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/IsObligatory = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/PKTypeAttribute/Description = Describes level of -Strictness- when executing query. 0x000D0x000ASpecified through QueryExpressionStrict and stored in CurrentStrictness.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CurrentStrictness/Description = Describes level of -Strictness- when executing query. 0x000D0x000ASpecified through QueryExpressionStrict and stored in CurrentStrictness.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/EnumMember = CreateHints
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/Type = System.Boolean
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/DefaultValue = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/IsObligatory = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/PKTypeAttribute/Description = Describes if hints are to be generated (as query progresses) for new queries. 0x000D0x000ASpecified through QueryExpressionHint and stored in CreateHints.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/CreateHints/Description = Describes if hints are to be generated (as query progresses) for new queries. 0x000D0x000ASpecified through QueryExpressionHint and stored in CreateHints.
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/EnumMember = UseCache
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/Type = System.Boolean
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/DefaultValue = False
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/IsObligatory = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/PKTypeAttribute/Description = Describes if cache is to be used or not.0x000D0x000A0x000D0x000ASpecified through QueryExpressionCache and stored in UseCache.0x000D0x000A0x000D0x000ANOTE: Caching in itself is not implemented in AgoRapide as of Jul 2020
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/UseCache/Description = Describes if cache is to be used or not.0x000D0x000A0x000D0x000ASpecified through QueryExpressionCache and stored in UseCache.0x000D0x000A0x000D0x000ANOTE: Caching in itself is not implemented in AgoRapide as of Jul 2020
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/EnumMember = Limit
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/Type = System.Int32
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/DefaultValue = 1000
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/IsObligatory = True
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/PKTypeAttribute/Description = Limits the final HTML presentation of results (limits the number of elements being presented). Does not affect the query in itself. Used in order to avoid building huge HTML pages which will not be consumed anyway.0x000D0x000ASpecified through QueryExpressionLimit and stored in Limit.0x000D0x000ASee also QueryExpressionTake which takes a specific number of elements from the current query result.0x000D0x000A
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/Limit/Description = Limits the final HTML presentation of results (limits the number of elements being presented). Does not affect the query in itself. Used in order to avoid building huge HTML pages which will not be consumed anyway.0x000D0x000ASpecified through QueryExpressionLimit and stored in Limit.0x000D0x000ASee also QueryExpressionTake which takes a specific number of elements from the current query result.0x000D0x000A
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/TerminateReason/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/TerminateReason/PKTypeAttribute/EnumMember = TerminateReason
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/TerminateReason/PKTypeAttribute/Type = System.String
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/TerminateReason/PKTypeAttribute/IsObligatory = False
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/TerminateReason/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/AllLogEntriesForThisQuery/PKTypeAttribute/EnumType = ARCQuery.QueryProgressDetailsP
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/AllLogEntriesForThisQuery/PKTypeAttribute/EnumMember = AllLogEntriesForThisQuery
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/AllLogEntriesForThisQuery/PKTypeAttribute/Type = System.String
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/AllLogEntriesForThisQuery/PKTypeAttribute/IsObligatory = False
Assembly/ARCQuery/AREnumType/PropertyKeyEnum/QueryProgressDetailsP/_Member/AllLogEntriesForThisQuery/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCQuery/AREnumType/OrdinaryEnum/_Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/AREnumType = OrdinaryEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/Description = Is used only within QueryExpressionPivot now. Consider moving there.
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Count/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Count/EnumMember = Count
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Percent/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Percent/EnumMember = Percent
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Percent/Description = Closely connected to Count. Assumed to be that value as percentage of a total count.
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Sum/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Sum/EnumMember = Sum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Min/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Min/EnumMember = Min
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Max/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Max/EnumMember = Max
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Average/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Average/EnumMember = Average
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Median/EnumType = ARCQuery.AggregationType
Assembly/ARCQuery/AREnumType/OrdinaryEnum/AggregationType/_Member/Median/EnumMember = Median
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/AREnumType = OrdinaryEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/Description = TODO: TO BE REMOVED
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/HourThis/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/HourThis/EnumMember = HourThis
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/HourLast/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/HourLast/EnumMember = HourLast
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/DayToday/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/DayToday/EnumMember = DayToday
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Day_Yesterday/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Day_Yesterday/EnumMember = Day_Yesterday
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Day2DaysAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Day2DaysAgo/EnumMember = Day2DaysAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThisMonth/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThisMonth/EnumMember = MonthThisMonth
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThisLastYear/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThisLastYear/EnumMember = MonthThisLastYear
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThis2YearsYearAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthThis2YearsYearAgo/EnumMember = MonthThis2YearsYearAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLastMonth/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLastMonth/EnumMember = MonthLastMonth
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLastLastYear/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLastLastYear/EnumMember = MonthLastLastYear
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLast2YearsAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/MonthLast2YearsAgo/EnumMember = MonthLast2YearsAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThisQuarter/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThisQuarter/EnumMember = QuarterThisQuarter
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThisLastYear/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThisLastYear/EnumMember = QuarterThisLastYear
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThis2YearsAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterThis2YearsAgo/EnumMember = QuarterThis2YearsAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLastQuarter/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLastQuarter/EnumMember = QuarterLastQuarter
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLastLastYear/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLastLastYear/EnumMember = QuarterLastLastYear
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLast2YearsAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/QuarterLast2YearsAgo/EnumMember = QuarterLast2YearsAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/YearThis/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/YearThis/EnumMember = YearThis
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/YearLast/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/YearLast/EnumMember = YearLast
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Year2YearsAgo/EnumType = ARCQuery.DateTimeComparer
Assembly/ARCQuery/AREnumType/OrdinaryEnum/DateTimeComparer/_Member/Year2YearsAgo/EnumMember = Year2YearsAgo
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/AREnumType = OrdinaryEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/Description = Operators as used by QueryExpressionWhere.0x000D0x000ATODO: Support IS (like IS NULL) and IS NOT (like IS NOT NULL)0x000D0x000ATODO: Support IN and NOT IN (for sets).
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/EQ/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/EQ/EnumMember = EQ
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/CONTAINS/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/CONTAINS/EnumMember = CONTAINS
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/NEQ/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/NEQ/EnumMember = NEQ
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/NOTCONTAINS/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/NOTCONTAINS/EnumMember = NOTCONTAINS
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/GT/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/GT/EnumMember = GT
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LT/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LT/EnumMember = LT
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/GEQ/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/GEQ/EnumMember = GEQ
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LEQ/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LEQ/EnumMember = LEQ
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LIKE/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LIKE/EnumMember = LIKE
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/LIKE/Description = Case sensitive string wildcard comparision as implemented by PostgreSQL database engine.
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/ILIKE/EnumType = ARCQuery.Operator
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/ILIKE/EnumMember = ILIKE
Assembly/ARCQuery/AREnumType/OrdinaryEnum/Operator/_Member/ILIKE/Description = Case insensitive string wildcard comparision as implemented by PostgreSQL database engine.
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/EnumType = ARCQuery.QueryExpressionWhere+ValueEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/AREnumType = OrdinaryEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/Description = Helper enum used internally by QueryExpressionWhere in order to represent queries like WHERE Name = NULL, WHERE Name = NOTNULL and WHERE Name = * (ALL).0x000D0x000A0x000D0x000ATODO: Find better name for this
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/NULL/EnumType = ARCQuery.QueryExpressionWhere+ValueEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/NULL/EnumMember = NULL
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/NOTNULL/EnumType = ARCQuery.QueryExpressionWhere+ValueEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/NOTNULL/EnumMember = NOTNULL
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/NOTNULL/Description = Practical value enabling suggestions from -GetPrevious- and -GetNext-.
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/ALL/EnumType = ARCQuery.QueryExpressionWhere+ValueEnum
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/ALL/EnumMember = ALL
Assembly/ARCQuery/AREnumType/OrdinaryEnum/QueryExpressionWhere+ValueEnum/_Member/ALL/Description = Equivalent to query like WHERE Name = *0x000D0x000A0x000D0x000APractical value enabling suggestions from -GetPrevious- and -GetNext-.
Assembly/ARCQuery/AREnumType/DocumentationOnlyEnum/_Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
Assembly/ARCAPI/_Description = A library providing an API on top of the PropertyStream.0x000D0x000A0x000D0x000AThe API can for instance be offered over HTTP / HTTPS with the help of Microsoft.AspNetCore.Mvc (see ARAAPI).0x000D0x000A0x000D0x000AThe API provided supports both0x000D0x000A 1) GraphQL (GQController) and0x000D0x000A2) REST (RQController).0x000D0x000A0x000D0x000AIn addition to JSON format the API also provides a rudimentary HTML / Javascript based interface for direct user interaction (nominally for administrative users / power users).0x000D0x000A0x000D0x000AThe HTML views are created automatically based on TaggingOfPropertyKeys, including Javascript forms for creating new properties.0x000D0x000A0x000D0x000AThe HTML interface automatically constructs views also for GraphQL queries, meaning that rich functionality can be programmed from 'outside' the API in line with the GraphQL philosophy.0x000D0x000A0x000D0x000AThis HTML interface is quite sufficient as an internal administrative tool / support department tool for your application.0x000D0x000A0x000D0x000ADepends on ARCDoc, ARCQuery and ARCSec.0x000D0x000A0x000D0x000ASee also BaseController and AddController.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/_Description = All classes with some AgoRapide specific attributes found in assembly ARCAPI.
Assembly/ARCAPI/Class/ContentResult/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/ContentResult/ClassType = ARCAPI.ContentResult
Assembly/ARCAPI/Class/ContentResult/Description = Mimicks Microsoft.AspNetCore.Mvc.ContentResult.0x000D0x000A0x000D0x000ANote that although ARCAPI is supposed to work with a Microsoft.AspNetCore.Mvc application, it does not link to the Microsoft.AspNetCore.Mvc library itself.0x000D0x000ATherefore the returned instance from controller methods like APIMethod or APIMethod) is not an instance of Microsoft.AspNetCore.Mvc.ContentResult (or Microsoft.AspNetCore.Mvc.ActionResult) but rather an instance of this class, AgoRapide ContentResult.0x000D0x000A0x000D0x000AThis class reflects the components needed to construct a Microsoft.AspNetCore.Mvc.ContentResult instance, namely 0x000D0x000A'(string Content, string ContentType, System.Net.HttpStatusCode StatusCode)'.0x000D0x000A0x000D0x000AThis class is immutable.0x000D0x000A
Assembly/ARCAPI/Class/ContentResult/_Member/CreateHTMLOK/ReflectedType = ARCAPI.ContentResult
Assembly/ARCAPI/Class/ContentResult/_Member/CreateHTMLOK/MethodName = CreateHTMLOK
Assembly/ARCAPI/Class/ContentResult/_Member/CreateHTMLOK/MethodSignature = ARCAPI.ContentResult CreateHTMLOK(System.String)
Assembly/ARCAPI/Class/ContentResult/_Member/CreateHTMLOK/Description = NOTE: Parameter must be a complete HTML page.0x000D0x000AHINT: Use GenerateHTMLPage in order to create parameter
Assembly/ARCAPI/Class/AddController/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/AddController/ClassType = ARCAPI.AddController
Assembly/ARCAPI/Class/AddController/BaseTypes = ARCCore.PConcurrent0x003BARCAPI.BaseController
Assembly/ARCAPI/Class/AddController/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCAPI/Class/AddController/Description = Parses a PropertyStreamLine.0x000D0x000ASends to ExternalReceiver if given.0x000D0x000AAdds to the given DataStorage unless DoNotStoreInternally is specified.0x000D0x000A0x000D0x000ATODO: Support use of Query for adding values to multiple entities at once.0x000D0x000ATODO: like 'Add/std/Customer/WHERE FirstName = John/NameEvaluation = NiceName'0x000D0x000A
Assembly/ARCAPI/Class/AddController/LongDescription = Hint: You can test input validation by using the inbuilt Apple class of ARCDoc.0x000D0x000A(assuming that the Apple class is included in AllIPDerivedTypes.)0x000D0x000AExample queries:0x000D0x000Aapi/Add/std/Apple/1/Colour = Red // Should succeed0x000D0x000Aapi/Add/std/Apple/1/Colour = Redd // Should fail0x000D0x000Aapi/Add/std/Apple/1/Color = Red // Should fail but does not as of Jun 2020. TODO: Add attribute limiting to known properties.0x000D0x000A
Assembly/ARCAPI/Class/AddController/_Member/APIMethod/ReflectedType = ARCAPI.AddController
Assembly/ARCAPI/Class/AddController/_Member/APIMethod/MethodName = APIMethod
Assembly/ARCAPI/Class/AddController/_Member/APIMethod/MethodSignature = ARCAPI.ContentResult APIMethod(ARCAPI.ResponseFormat, Int32, System.Collections.Generic.List0x006010x005BSystem.String0x005D, ARCAPI.DataStorage)
Assembly/ARCAPI/Class/AddController/_Member/APIMethod/Description = The (only) API method that this controller supports.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/AddController/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCAPI/Class/AddController/_Member/ToString/MethodName = ToString
Assembly/ARCAPI/Class/AddController/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCAPI/Class/AddController/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCAPI/Class/BaseController/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/BaseController/ClassType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/BaseTypes = ARCCore.PConcurrent
Assembly/ARCAPI/Class/BaseController/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCAPI/Class/BaseController/CorrespondingEnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/Class/BaseController/Description = Contains basic functionality for serving API methods.0x000D0x000A0x000D0x000AThe specific controller instances serving requests are usually stored in a global DataStorage.0x000D0x000AFor instance for an API node with id 'API/1/' it would typically be stored as 'API/1/Controller/api/0x005BTypeOfController0x005D/0x005BControllerId0x005D...'.0x000D0x000A(in other words, ControllerStorage actually points to a branch inside Storage.)0x000D0x000A0x000D0x000AExamples of API requests and how they are resolved to a container by CatchAll:0x000D0x000AAPI request URL: https://yourserver.com/api/RQ/std/Customer/42/.html 0x000D0x000AController instance (in this case of type RQController) to be found in controllerStorage0x005B"api"0x005D0x005B"RQ"0x005D0x005B"std"0x005D0x000D0x000AMethod APIMethod is called on this instance.0x000D0x000A0x000D0x000AThis system has the following advantages:0x000D0x000A0x000D0x000A1) The API-routing syntax is by default exposed to the outside because 'controller storage' is normally inserted into the global DataStorage.0x000D0x000ATherefore the standard query mechanism in AgoRapide can be used to get this information.0x000D0x000AFor instance by querying like this: 'api/RQ/API/1/Controller' you will get suggestions starting with the 'api'.0x000D0x000A0x000D0x000A2) The API itself is discoverable even without querying like above, without much special code.0x000D0x000AThis is because an invalid API request is actually analyzed by the same mechanism answering standard queries.0x000D0x000AWhen the error message is returned it actually contains data about the correct syntax.0x000D0x000A0x000D0x000A3) The API is configurable both through the API itself and also over the PropertyStream.0x000D0x000AFor instance like 'API/1/Controller/RQ/std/LogLevel = Warning' which would change the log level for the standard instance ('std') of RQController to 'Warning'.0x000D0x000A0x000D0x000A4) Different instances of the same controller type can exist and be configured individually. For instance if some specific query needs additional logging down to debug level, a dedicated controller can be created for this, like0x000D0x000A'API/1/Controller/RQ/dbg/LogLevel = Debug'0x000D0x000AThis controller instance will be immediately available as request 'api/RQ/dbg/0x005BParameters0x005D'0x000D0x000ANote that a 'dbg' controller is always available, which does detailed logging.0x000D0x000A0x000D0x000ASome limitations of this approach are:0x000D0x000A1) Actual API method name is limited to the name of the controller type (without the 'Controller' part).0x000D0x000AThat is, a controller called CustomerController can only serve queries starting with 'Customer'.0x000D0x000A0x000D0x000ANote however that in your ApplicationSpecificCode you can implement any additional controllers with routing structure totally independent of this standard generic AgoRapide mechanism.0x000D0x000A0x000D0x000ANote how the BaseController classes (like this class) do not inherit any special Microsoft.AspNetCore.Mvc class. 0x000D0x000AThey are totally stand-alone with regard to Microsoft.AspNetCore.Mvc.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/BaseController/_Member/APIMethod/ReflectedType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/_Member/APIMethod/MethodName = APIMethod
Assembly/ARCAPI/Class/BaseController/_Member/APIMethod/MethodSignature = ARCAPI.ContentResult APIMethod(ARCAPI.ResponseFormat, Int32, System.Collections.Generic.List0x006010x005BSystem.String0x005D, ARCAPI.DataStorage)
Assembly/ARCAPI/Class/BaseController/_Member/APIMethod/Description = The (only) API method that this controller supports.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/BaseController/_Member/BuildControllerStorage/ReflectedType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/_Member/BuildControllerStorage/MethodName = BuildControllerStorage
Assembly/ARCAPI/Class/BaseController/_Member/BuildControllerStorage/MethodSignature = ARCCore.IP BuildControllerStorage(System.Collections.Generic.IEnumerable0x006010x005BSystem.Reflection.Assembly0x005D, System.String)
Assembly/ARCAPI/Class/BaseController/_Member/BuildControllerStorage/Description = Builds a collection of 'std' (standard) controller instances to use for serving API requests.0x000D0x000A0x000D0x000ANote that if the returned storage is coupled to the PropertyStream then additional elements may be added later, either through API methods or through Subscription (or the 'std' instances' properties may also be changed, through the same mechanisms).0x000D0x000A0x000D0x000ATODO: Consider moving this method to DataStorage.
Assembly/ARCAPI/Class/BaseController/_Member/CatchAll/ReflectedType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/_Member/CatchAll/MethodName = CatchAll
Assembly/ARCAPI/Class/BaseController/_Member/CatchAll/MethodSignature = ARCAPI.ContentResult CatchAll(System.String, ARCAPI.DataStorage)
Assembly/ARCAPI/Class/BaseController/_Member/CatchAll/Description = Serves the typical single generic API method in an AgoRapide API.0x000D0x000AFinds the correct controller to handle the query (from -ControllerStorage, and returns result from that controller.0x000D0x000A0x000D0x000AThe API-routing correspond to GlobalRoutingPrefix (typically 'api') plus the type name of the controller (without the 'Controller' part is desired) and the id of the controller (often 'std').0x000D0x000AFor RQController, the routing would typically be like this:0x000D0x000A 'api/RQ/std/0x005Bparameters0x005D'.0x000D0x000A0x000D0x000AIf query does not 'reach' any controller, routing information is returned instead (from ControllerStorage).0x000D0x000AFor instance only querying 'api' (or nothing at all) will list corresponding information from ControllerStorage instead.0x000D0x000A0x000D0x000ANote how uses Lock in order to be thread safe in connection with OutsideLocalReceiver.
Assembly/ARCAPI/Class/BaseController/_Member/TryNavigateToLevelInDataStorage/ReflectedType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/_Member/TryNavigateToLevelInDataStorage/MethodName = TryNavigateToLevelInDataStorage
Assembly/ARCAPI/Class/BaseController/_Member/TryNavigateToLevelInDataStorage/MethodSignature = Boolean TryNavigateToLevelInDataStorage(ARCCore.IP, System.Collections.Generic.List0x006010x005BSystem.String0x005D, ARCAPI.BaseController, System.ValueTuple0x006020x005BSystem.Collections.Generic.List0x006010x005BARCCore.IK0x005D,ARCCore.IP0x005D ByRef, System.String ByRef)
Assembly/ARCAPI/Class/BaseController/_Member/TryNavigateToLevelInDataStorage/Description = Navigates to the specified level (usually within Storage.0x000D0x000A0x000D0x000AIf unsuccesful returns a corresponding error message with link to last 'correct' level.0x000D0x000AExample: If attempting to navigate to 'Customer/42/MiddleName' but 'MiddleName' does not exist, will offer link to Customer/42.0x000D0x000A0x000D0x000ANote that also used for navigating within ControllerStorage, that is, to route an API-method to the desired controller.0x000D0x000A0x000D0x000ATODO: This concept is quite generic. It is useful also in console applications and similar.0x000D0x000ATODO: Move to ARCCore instead.
Assembly/ARCAPI/Class/BaseController/_Member/GetFormatAndAdjustRequest/ReflectedType = ARCAPI.BaseController
Assembly/ARCAPI/Class/BaseController/_Member/GetFormatAndAdjustRequest/MethodName = GetFormatAndAdjustRequest
Assembly/ARCAPI/Class/BaseController/_Member/GetFormatAndAdjustRequest/MethodSignature = System.ValueTuple0x006020x005BARCAPI.ResponseFormat,System.Int320x005D GetFormatAndAdjustRequest(System.Collections.Generic.List0x006010x005BSystem.String0x005D ByRef)
Assembly/ARCAPI/Class/BaseController/_Member/GetFormatAndAdjustRequest/Description = Decides ResponseFormat (like HTML, JSON, CSV, PDF and so on).0x000D0x000A0x000D0x000AFor Requests ending with /.html HTML-format is assumed, for .json JSON is assumed and so on.0x000D0x000A0x000D0x000ADefault format is JSON.0x000D0x000A.json may be given as .json0x007Bdepth0x007D indicating to which depth the serialization mechanism should work. 1 is default.0x000D0x000A0x000D0x000AIf a format is specified (as the end-item in the request item list) then that corresponding item is removed from list.0x000D0x000A0x000D0x000ATODO: Improve this, especially the index.html-part which is not generic
Assembly/ARCAPI/Class/BaseController/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCAPI/Class/BaseController/_Member/ToString/MethodName = ToString
Assembly/ARCAPI/Class/BaseController/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCAPI/Class/BaseController/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCAPI/Class/GQController/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/GQController/ClassType = ARCAPI.GQController
Assembly/ARCAPI/Class/GQController/BaseTypes = ARCCore.PConcurrent0x003BARCAPI.BaseController
Assembly/ARCAPI/Class/GQController/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCAPI/Class/GQController/Description = Offers GraphQL queries
Assembly/ARCAPI/Class/GQController/_Member/APIMethod/ReflectedType = ARCAPI.GQController
Assembly/ARCAPI/Class/GQController/_Member/APIMethod/MethodName = APIMethod
Assembly/ARCAPI/Class/GQController/_Member/APIMethod/MethodSignature = ARCAPI.ContentResult APIMethod(ARCAPI.ResponseFormat, Int32, System.Collections.Generic.List0x006010x005BSystem.String0x005D, ARCAPI.DataStorage)
Assembly/ARCAPI/Class/GQController/_Member/APIMethod/Description = The (only) API method that this controller supports.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/GQController/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCAPI/Class/GQController/_Member/ToString/MethodName = ToString
Assembly/ARCAPI/Class/GQController/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCAPI/Class/GQController/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCAPI/Class/RQController/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/RQController/ClassType = ARCAPI.RQController
Assembly/ARCAPI/Class/RQController/BaseTypes = ARCCore.PConcurrent0x003BARCAPI.BaseController
Assembly/ARCAPI/Class/RQController/Interfaces = ARCCore.IP0x003BSystem.Collections.Generic.IEnumerable0xoooo006010xoooo005BARCCore.IKIP0xoooo005D0x003BSystem.Collections.IEnumerable
Assembly/ARCAPI/Class/RQController/Description = Executes a REST like query request against the given DataStorage.0x000D0x000A0x000D0x000AThis class understands two main query-methods, 1) Direct key-based into data storage, and 2) QueryExpression based.0x000D0x000A0x000D0x000A1) Direct key-based into data storage:0x000D0x000ASome query-examples:0x000D0x000A'Customer/42' =0x003E Get all the keys for Customer with id 42, but do not get sub-keys.0x000D0x000A'Customer/42/*' =0x003E Get all the keys for Customer with id 42, and also all underlying sub-keys (and their sub-keys and so on).0x000D0x000AAppend query with '.html' in order to get HTML (default is JSON) .0x000D0x000AFor HTML this controller is able to do LinkInsertionInDocumentation, presumed that necessary potential links are present in PotentialHTMLLinks.0x000D0x000A0x000D0x000A2) QueryExpression based.0x000D0x000ASome query-examples:0x000D0x000A'Customer/WHERE FirstName = John/SELECT FirstName, LastName/SKIP 10/TAKE 10'0x000D0x000A(see QueryExpression for more examples).0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/RQController/_Member/APIMethod/ReflectedType = ARCAPI.RQController
Assembly/ARCAPI/Class/RQController/_Member/APIMethod/MethodName = APIMethod
Assembly/ARCAPI/Class/RQController/_Member/APIMethod/MethodSignature = ARCAPI.ContentResult APIMethod(ARCAPI.ResponseFormat, Int32, System.Collections.Generic.List0x006010x005BSystem.String0x005D, ARCAPI.DataStorage)
Assembly/ARCAPI/Class/RQController/_Member/APIMethod/Description = The (only) API method that this controller supports.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/RQController/_Member/ToString/ReflectedType = ARCCore.PConcurrent
Assembly/ARCAPI/Class/RQController/_Member/ToString/MethodName = ToString
Assembly/ARCAPI/Class/RQController/_Member/ToString/MethodSignature = System.String ToString()
Assembly/ARCAPI/Class/RQController/_Member/ToString/Description = TODO: Decide on what we actually want with ToString for this class.0x000D0x000ATODO: For instance, a list of id-related fields would be useful, or tagging av properties which kind of define the entity
Assembly/ARCAPI/Class/DataStorage/AssemblyName = ARCAPI
Assembly/ARCAPI/Class/DataStorage/ClassType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/Description = The all-in-memory global application data storage.0x000D0x000ADoes also contain the necessary global locking object for thread-safe access.0x000D0x000A0x000D0x000ACan be kept up to date by Subscription to PropertyStream (see OutsideLocalReceiver).0x000D0x000A0x000D0x000ASee constructor for information about ExposingApplicationState through this class.0x000D0x000A0x000D0x000AThis class is immutable.
Assembly/ARCAPI/Class/DataStorage/_Member/Storage/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/Storage/MethodName = Storage
Assembly/ARCAPI/Class/DataStorage/_Member/Storage/MethodSignature = ARCCore.IP Storage
Assembly/ARCAPI/Class/DataStorage/_Member/Storage/Description = The all-in-memory global application data storage
Assembly/ARCAPI/Class/DataStorage/_Member/GlobalRoutingPrefix/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/GlobalRoutingPrefix/MethodName = GlobalRoutingPrefix
Assembly/ARCAPI/Class/DataStorage/_Member/GlobalRoutingPrefix/MethodSignature = System.String GlobalRoutingPrefix
Assembly/ARCAPI/Class/DataStorage/_Member/GlobalRoutingPrefix/Description = Usually 'api' (that is, 'api/'.
Assembly/ARCAPI/Class/DataStorage/_Member/ControllerStorage/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/ControllerStorage/MethodName = ControllerStorage
Assembly/ARCAPI/Class/DataStorage/_Member/ControllerStorage/MethodSignature = ARCCore.IP ControllerStorage
Assembly/ARCAPI/Class/DataStorage/_Member/ControllerStorage/Description = Usually (but not always) a branch of Storage (like Storage0x005B"API"0x005D0x005B"1"0x005D, that is API with node-id '1').0x000D0x000A0x000D0x000AEnables CatchAll to dispatch an API request to the correct controller.0x000D0x000A0x000D0x000ASee BuildControllerStorage for documentation.0x000D0x000A0x000D0x000A
Assembly/ARCAPI/Class/DataStorage/_Member/PotentialHTMLLinks/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/PotentialHTMLLinks/MethodName = PotentialHTMLLinks
Assembly/ARCAPI/Class/DataStorage/_Member/PotentialHTMLLinks/MethodSignature = PotentialHTMLLinks PotentialHTMLLinks
Assembly/ARCAPI/Class/DataStorage/_Member/PotentialHTMLLinks/Description = Note that may be null.0x000D0x000A0x000D0x000AA collection of all possible keys in the Storage.0x000D0x000A0x000D0x000AEnables LinkInsertionInDocumentation.0x000D0x000AOriginates (normally) from FindPotentialHTMLLinks.0x000D0x000A0x000D0x000AMost relevant when querying (static) documentation because when storage is static then this parameter can be pre-calculated at application startup.0x000D0x000AIf on the other hand storage is dynamically updated throughout the application lifetime then this parameter must also be continously updated, something which could have an unacceptable performance impact.
Assembly/ARCAPI/Class/DataStorage/_Member/Lock/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/Lock/MethodName = Lock
Assembly/ARCAPI/Class/DataStorage/_Member/Lock/MethodSignature = System.Threading.ReaderWriterLockSlim Lock
Assembly/ARCAPI/Class/DataStorage/_Member/Lock/Description = Locking object for thread-safe access from simultaneous API requests.0x000D0x000AAlso used when keeping storage up-to-date by Subscription to PropertyStream through OutsideLocalReceiver.
Assembly/ARCAPI/Class/DataStorage/_Member/ExternalReceiver/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/ExternalReceiver/MethodName = ExternalReceiver
Assembly/ARCAPI/Class/DataStorage/_Member/ExternalReceiver/MethodSignature = System.Action0x006010x005BSystem.String0x005D ExternalReceiver
Assembly/ARCAPI/Class/DataStorage/_Member/ExternalReceiver/Description = Typically used by AddController. 0x000D0x000AWill normally be a method calling SendFromLocalOrigin.0x000D0x000A0x000D0x000ANote: It is meaningless to have -DoNotStoreInternally = FALSE and ExternalReceiver = NULL at the same time.
Assembly/ARCAPI/Class/DataStorage/_Member/DoNotStoreInternally/ReflectedType = ARCAPI.DataStorage
Assembly/ARCAPI/Class/DataStorage/_Member/DoNotStoreInternally/MethodName = DoNotStoreInternally
Assembly/ARCAPI/Class/DataStorage/_Member/DoNotStoreInternally/MethodSignature = Boolean DoNotStoreInternally
Assembly/ARCAPI/Class/DataStorage/_Member/DoNotStoreInternally/Description = Typically used by AddController.0x000D0x000A0x000D0x000ASignals that properties should not be added to DataStorage directly. 0x000D0x000AWill typically be used in situations where one wants to ensure that data is actually added to CoreDB before showing it in the API. This would again typically be implemented by using ExternalReceiver and waiting for the data to come back over a Subscription to the PropertyStream.0x000D0x000A0x000D0x000ANOTE: As of Jun 2020 there is no mechanism in AgoRapide for ensuring that this actually happens other than for the client to use polling against the API to ensure that the round-trip to the core and back has completed.0x000D0x000A0x000D0x000ANote: It is meaningless to have -DoNotStoreInternally = FALSE and ExternalReceiver = NULL at the same time.
Assembly/ARCAPI/AREnumType/_Description = All enums found in assembly ARCAPI.
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/_Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/AREnumType = PropertyKeyEnum
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/CorrespondingClass = ARCAPI.BaseController
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/Description = Describes class BaseController.
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/EnumMember = CountRequest
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/Type = System.Int64
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/IsObligatory = False
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKTypeAttribute/Description = Number of calls to APIMethod since application initialization
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKLogAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKLogAttribute/EnumMember = CountRequest
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountRequest/Description = Number of calls to APIMethod since application initialization
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/EnumMember = CountException
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/Type = System.Int64
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/IsObligatory = False
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKTypeAttribute/Description = Number of exceptions at call to APIMethod since application initialization
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKLogAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKLogAttribute/EnumMember = CountException
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/CountException/Description = Number of exceptions at call to APIMethod since application initialization
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKLogAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKLogAttribute/EnumMember = LogLevel
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKLogAttribute/DoNotLogAtAll = True
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKTypeAttribute/EnumType = ARCAPI.BaseControllerP
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKTypeAttribute/EnumMember = LogLevel
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKTypeAttribute/Type = System.String
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKTypeAttribute/IsObligatory = False
Assembly/ARCAPI/AREnumType/PropertyKeyEnum/BaseControllerP/_Member/LogLevel/PKTypeAttribute/Cardinality = HistoryOnly
Assembly/ARCAPI/AREnumType/OrdinaryEnum/_Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/EnumType = ARCAPI.ResponseFormat
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/AREnumType = OrdinaryEnum
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/_Member/JSON/EnumType = ARCAPI.ResponseFormat
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/_Member/JSON/EnumMember = JSON
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/_Member/HTML/EnumType = ARCAPI.ResponseFormat
Assembly/ARCAPI/AREnumType/OrdinaryEnum/ResponseFormat/_Member/HTML/EnumMember = HTML
Assembly/ARCAPI/AREnumType/DocumentationOnlyEnum/_Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
Assembly/ARAClient/_Description = A template application for a Client (linking to ARCCore).0x000D0x000A0x000D0x000AContains some sample code for you to use as building blocks for your own Client application.0x000D0x000A
Assembly/ARAClient/Class/_Description = All classes with some AgoRapide specific attributes found in assembly ARAClient.
Assembly/ARAClient/Class/Program/AssemblyName = ARAClient
Assembly/ARAClient/Class/Program/ClassType = ARAClient.Program
Assembly/ARAClient/Class/Program/Description = See ARAClient for description
Assembly/ARAClient/AREnumType/_Description = All enums found in assembly ARAClient.
Assembly/ARAClient/AREnumType/PropertyKeyEnum/_Description = Describes relevant values for an 'entity' object like 'Customer'.0x000D0x000AName is entity class appended with P like for instance 'enum CustomerP'.0x000D0x000A0x000D0x000AThe most important type of enum in AgoRapide used to support TaggingOfPropertyKeys.0x000D0x000A
Assembly/ARAClient/AREnumType/OrdinaryEnum/_Description = This enum type designates "Ordinary" enums used for indicating range of valid values for a given key
Assembly/ARAClient/AREnumType/DocumentationOnlyEnum/_Description = This enum type designates enums that provide a central repository of explanation of terms that are not present in the C# code.0x000D0x000A0x000D0x000AIn other words, enums of this enum type provides a tag onto which we can hang documentation which would otherwise have no place to go, because the actual concept is not 'coded' anywhere.
;

Generated 2020-10-13 11:11:09.546 UTC