Patent ID: 12197931

DETAILED DESCRIPTION

For simplicity and illustrative purposes, the principles of the present disclosure are described by referring mainly to embodiments and examples thereof. In the following description, numerous specific details are set forth in order to provide an understanding of the embodiments and examples. It will be apparent, however, to one of ordinary skill in the art, that the embodiments and examples may be practiced without limitation to these specific details. In some instances, well known methods and/or structures have not been described in detail so as not to unnecessarily obscure the description of the embodiments and examples. Furthermore, the embodiments and examples may be used together in various combinations.

Throughout the present disclosure, the terms “a” and “an” are intended to denote at least one of a particular element. As used herein, the term “includes” means includes but not limited to, the term “including” means including but not limited to. The term “based on” means based at least in part on.

Generally, a computing device may be implemented to display objects, such as forms, data sets, spreadsheets, and/or the like, to a user. As changes are made in the objects, the computing device may enable the objects to be submitted and stored in a data store to preserve the changes. In some instances, the computing device may track whether the objects are modified, for instance to mark the objects as being “dirty,” such that revised versions of the objects that include the newly added information may be submitted or saved.

In some instances, the objects may include child objects that are nested within the objects, e.g., embedded within user interfaces (UIs) of the objects. For instance, the objects may include a link or other feature that a user may use to access to the child forms that are nested within the objects. When a change is made to a child form without a change being made in the object, the computing device may not determine that the object has been modified and may thus not mark the object as being dirty and the modification to the child object nested within the object may not properly be saved.

Disclosed herein are apparatuses, systems, methods, and computer-readable media for determining when changes are made to information inputted in child objects that are nested within objects. As discussed herein, a child-object hash value may be generated based on information included in the child object. The child-object hash value may thus change when the information included in the child object changes. The child-object hash value may be included in the generation of a hash value of the object and thus, the hash value of the object may also change when the information in the child object changes. In some examples, the child-object hash value may be included in a field of the object and the hash value of the object may be generated based on content in the object including the child-object hash value included in the field of the object.

A processor may determine whether a change in the content of the object has been made, which may include a change in the content of the child object based on a comparison of the hash value of the object with a previously stored hash value. Based on a determination that the content in the object, which may include the content in the nested child object, has been modified, the processor may save the object and/or output an indication that the object has been modified. However, based on a determination that the content in the object, including the content in the child object, the processor may prevent storage or submission of the object.

Through implementation of the features of the present disclosure, a processor may efficiently and accurately determine when changes are made to objects having nested child objects. In addition, when the processor determines that a change has been made to an object, the processor may cause the object to be saved, which may preserve a current version of the object to be saved. As a result, the saved version of the object may be used as a current backup of the object.

Reference is made toFIGS.1and2.FIG.1shows a block diagram of an apparatus100that may determine whether an object may have been modified by comparing a generated hash value of the object with a stored hash value of the object, in which the object may include a child object that is nested within the object, in accordance with an embodiment of the present disclosure.FIG.2shows a block diagram of an example system200that may include the apparatus100depicted inFIG.1, in accordance with an embodiment of the present disclosure. It should be understood that the apparatus100depicted inFIG.1and/or the system200depicted inFIG.2may include additional features and that some of the features described herein may be removed and/or modified without departing from the scopes of the apparatus100and/or the system200.

The apparatus100may include a processor102and a memory110. The apparatus100may be a computing device, including a desktop computer, a laptop computer, a tablet computer, a smartphone, an electronic device such as Internet of Things (IoT) device, a server, a node in a network (such as a data center), and/or the like. The processor102may include a semiconductor-based microprocessor, a central processing unit (CPU), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), and/or other hardware device. In some examples, the apparatus100may include multiple processors and/or cores without departing from a scope of the apparatus. In this regard, references to a single processor as well as to a single memory may be understood to additionally or alternatively pertain to multiple processors and multiple memories.

The memory110may be an electronic, magnetic, optical, or other physical storage device that contains or stores executable instructions. The memory110may be, for example, Read Only Memory (ROM), flash memory, solid state drive, Random Access memory (RAM), an Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage device, an optical disc, or the like. The memory110may be a non-transitory computer-readable medium. The term “non-transitory” does not encompass transitory propagating signals.

As shown inFIG.1, the processor102may execute instructions112-118to determine whether an object208, e.g., a data set, a form, a spreadsheet, and/or the like, may have been modified by comparing hash values of versions of the object208. The instructions112-118may be machine-readable instructions, e.g., non-transitory computer-readable instructions. In other examples, the apparatus100may include hardware logic blocks or a combination of instructions and hardware logic blocks to implement or execute functions corresponding to the instructions112-118.

The apparatus100may be connected via a network202, which may be the Internet, a local area network, and/or the like, to a server204. In addition, a data store206may be connected to the server204. The apparatus100may enable access to an object208. According to examples, an object208may be defined as a data set, which may include input fields, to receive information to be included in the data set. In some examples, the object208may include a user interface (UI) to receive information for the data set.

In some examples, the object208may be include a child object210embedded within the object208. For instance, access to the child object210may be made through selection of a feature provided in an input field of the object208. The feature may include a link, a folder, an icon, and/or the like, such that selection of the feature may enable the child object210to be accessed, e.g., opened, displayed, and/or the like. The child object210may include a separate UI with a group of input fields associated with the child object210. By way of particular example and for purposes of illustration, the object208may be a contact form to store contact information in an address book, which may include input fields to input a name, a phone number, and/or the like. In this example, the child object210may be an address form which may be stored in a particular input field of the contact form, and which may include its own UI with additional input fields to input address information such as a street, a city, a state, zip code, and/or the like.

The object208may correspond to a stored object212, which may be a previously saved version of the object208. In this regard, as changes are made to the object208, the processor102may indicate the previously stored object212as being modified, or marked as “dirty,” in order to save or submit the object208to replace the stored object212. This may be done to preserve the changes made to the object208, which may include changes made to the nested child object210. In some examples, the processor102may store the object212in the memory110of the apparatus100. Alternatively or additionally, the processor102may upload the object208to the server204to be stored in the data store206.

The processor102may fetch, decode, and execute the instructions112to generate a child-object hash value220based on contents of the child object210. In some examples, the processor102may generate the child-object hash value220based on all of the contents of the child object210. For instance, the processor102may generate the child-object hash value220based on contents that may include information218inputted into the object208. The processor102may generate the child-object hash value220periodically and/or based on a determination that the content in the child object210has been modified, e.g., content has been added, content has been deleted, content has been replaced, etc. In instances in which the content has been modified from a previous state, the child-object hash value220may differ from a previous version of the child-object hash value220. However, in instances in which the content has not been modified, for instance, as may occur when a user deletes content and then undoes the deletion, the child-object hash value220may not change from a previous version of the child-object hash value220.

The processor102may fetch, decode, and execute the instructions116to generate a hash value216for the object208based on contents of the object208. The contents of the object may include the child-object hash value220. The contents of the object may include input information214and other data stored in data fields of the object208. In some examples, the hash value216may be a message authentication code (MAC), a key-hash message authentication code (HMAC), which may include a cryptographic hash function and a secret cryptographic key, and/or the like. The processor102may generate the hash value216based on all of the contents of the object208. For instance, the processor102may generate the hash value216based on a payload that includes the input information214associated with all of the input fields within the object208, including any newly added information.

In some examples, the processor102may determine that information has been inputted into the child object210. For instance, the child object210may be implemented within a particular input field in the object208. In these examples, the processor102may generate a child-object hash value220for the child object210based on a payload that includes the input information218. The processor102may store the child-object hash value220in a first data field in the object208and a feature that may provide access to the child object210may be included in a second data field in the object208. In some examples, the child-object hash value220may be stored in a hidden text field in the object208. For instance, a hidden text field in the object208may be assigned to store the child-object hash value220, and the processor102may store an HMAC for the child object210in the hidden text field in the object208. As such, when generating the hash value216of the object208, the processor102may use a payload that includes the child-object hash value220stored in the hidden text field in addition to other content included in the object208.

The processor102may fetch, decode, and execute the instructions116to determine whether the generated hash value216differs from a stored hash value222associated with a previously stored object212. The stored hash value222may correspond to, e.g., may be a hash value of, contents of the stored object212, which may be a version of the object208without the input information214or input information218that may have been newly added. In other examples, and similarly, the processor102may determine whether the generated hash value216is equal to the stored hash value222.

The processor102may fetch, decode, and execute the instructions118to, based on a determination that the generated hash value216differs from the stored hash value222, save the object208including the child object210nested within the object208. The processor102may submit the object208, for example, to a server such as the server204depicted inFIG.2, to be saved at the server. In some examples, the processor102may automatically save the object208. Alternatively or additionally, the processor102may output an indication that the object208has been modified based on a determination that the generated hash value216differs from the stored hash value222. For instance, in a case where the hash value216does not match the stored hash value222, the processor102may identify the object208as being updated, and may mark the stored object212as being dirty.

In some examples, based on a determination that the object208is modified, the processor102may generate a message to inform a user that the object208includes modified input information214or218and to save the object208. The processor102may activate or display a “submit” button to enable submission of or to save the object208. In some examples, when the submit button is selected, the object208may be stored in a local data store (not shown) and/or uploaded to the data store206to replace the stored object212. In some examples, the processor102may output an instruction that may prevent the object208from being closed or discarded prior to the object208being saved. Responsive to saving the object208, e.g., by replacing the stored object212, the processor102may output an instruction to save the generated hash value216to replace the stored hash value222.

In some examples, based on a determination that the generated hash value216matches the stored hash value222, the processor102may output an indication that the object208is not modified. This may occur even when a user modifies the object208as the user may modified the object208back to the previous state. In this regard, the processor102may output an instruction to prevent the object208from being saved, thereby preventing redundant copies from being saved or uploaded to the server204.

Various manners in which a processor102implemented on the apparatus100may operate are discussed in greater detail with respect to the method300depicted inFIG.3.FIG.3depicts a flow diagram of a method300for determining that a form, such as the object208depicted inFIG.2, may have been modified by comparing a first hash value of a saved version of the form with a second hash value of a current version of the form, in which the form may include a nested child form, in accordance with an embodiment of the present disclosure. It should be understood that the method300depicted inFIG.3may include additional operations and that some of the operations described therein may be removed and/or modified without departing from the scope of the method300. The description of the method300is made with reference to the features depicted inFIGS.1and2for purposes of illustration.

At block302, the processor102may store a first hash value associated with contents of a form, e.g., object208, such as the stored hash value222depicted inFIG.2. The first hash value222may correspond to a saved version of the form, such as the stored object212depicted inFIG.2.

At block304, the processor102may determine that input information214,218has been inputted into an input field in the form208. At block306, based on a determination that the information214,218has been inputted into the form208, the processor102may generate a second hash value, such as the hash value216, based on contents of the form208. In some examples, the contents of the form may include the input information214. The contents of the form208may include a child-object hash value220, that may be based on contents of the child form210.

At block308, the processor102may determine whether the first hash value (FHV)222differs from the second hash value (SHV)216. The second hash value may correspond to a current, e.g., an unsaved, version of the form208.

At block310, based on a determination that the second hash value216differs from the first hash value222, the processor102may submit the form208, including the child form210, to a server, such as the server204depicted inFIG.2, to be saved at the server. In some examples, the processor102may automatically save the form208. Alternatively or additionally, the processor102may output an indication that the form208has been modified. However, at block312, based on a determination that the second hash value216does not differ from the first hash value222, the processor102may output an indication that the form208has not been modified. In other examples, instead of outputting the indication that the form208is not modified based on a determination that the second hash value matches the first hash value, the processor102may not output any indication.

In some examples, the form208may include a nested child form210. The child form210may be disposed in an input field within the form208and may include its own set of input fields, child forms, and/or the like. In these examples, the processor102may determine that the detected input to the form208is input information218in the child form210. The processor102may also generate a child-object hash value220for the child form210including the input information218in the child form210.

The processor102may generate the second hash value216based on the contents of the form208. In this regard, the payload that includes contents of the form208used for generating the second hash value216may include the child-object hash value220. In some examples, the processor102may generate the second hash value216as a HMAC and may store the HMAC in a hidden text field in the form208.

Based on a determination that the second hash value216matches the first hash value222, the processor102may output a message to save the form208, output an instruction to display a submit button to save the form208, output an instruction to prevent discarding the form208without saving the form208, output an instruction to save the second hash value to replace the first hash value responsive to saving the form208, and/or the like.

Based on a determination that the second hash value216matches the first hash value222, the processor102may output an indication that the form208is not modified, output an instruction to prevent the form208from being saved, and/or the like.

Some or all of the operations set forth in the method300may be included as utilities, programs, or subprograms, in any desired computer accessible medium. In addition, the method300may be embodied by computer programs, which may exist in a variety of forms both active and inactive. For example, they may exist as machine-readable instructions, including source code, object code, executable code or other formats. Any of the above may be embodied on a non-transitory computer-readable storage medium.

Examples of non-transitory computer-readable storage media include computer system RAM, ROM, EPROM, EEPROM, and magnetic or optical disks or tapes. It is therefore to be understood that any electronic device capable of executing the above-described functions may perform those functions enumerated above.

Turning now toFIG.4, there is shown a block diagram of a computer-readable medium400that may have stored thereon computer-readable instructions to determine whether an object208having a child object210that is nested within the object208may have been modified by comparing a generated hash value216of the object208with a stored hash value222of a stored object212, in accordance with an embodiment of the present disclosure. It should be understood that the computer-readable medium400depicted inFIG.4may include additional instructions and that some of the instructions described herein may be removed and/or modified without departing from the scope of the computer-readable medium400disclosed herein. The description of the computer-readable medium400is made with reference to the features depicted inFIGS.1and2for purposes of illustration. The computer-readable medium400may be a non-transitory computer-readable medium. The term “non-transitory” does not encompass transitory propagating signals.

The computer-readable medium400may have stored thereon machine-readable instructions402-408that a processor disposed in a server204may execute. The computer-readable medium400may be an electronic, magnetic, optical, or other physical storage device that contains or stores executable instructions. The computer-readable medium400may be, for example, Random Access memory (RAM), an Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage device, an optical disc, and the like.

The processor may fetch, decode, and execute the instructions402to receive an object208from a client device. In some examples, the processor may be a processor at the server204, and the client device may be the apparatus100as depicted inFIG.2. In some examples, the child object210may be nested in a data field of the object208.

The processor may fetch, decode, and execute the instructions404to determine a first hash value for the nested object208. The first hash value may be the hash value216depicted inFIG.2. The first hash value216may be based on information in the object208and a child-object hash value220.

The processor may fetch, decode, and execute the instructions406to determine whether the object208has been modified based on a comparison between the first hash value216and a stored hash value222for the object208. As discussed herein, the comparison of the hash values may be more efficient in both time and computing resources than a comparison of the object208to the stored copy of the object212.

The processor may fetch, decode, and execute the instructions408to store the received object208including the child object210based on a determination that the object208has been modified. In some examples, based on a determination that the first hash value216for the received object208is the same as the hash value222for the stored copy of the object212, the processor may determine that the received object208has not been modified, and may not store the received object208.

In some examples, the processor may determine the child-object hash value220based on contents of data fields in the child object210. The processor may determine whether the child object210has been modified based on the comparison of between the first hash value216for the object208and the stored hash value222for the stored object212. For instance, since the first hash value216is generated based on information that includes the child-object hash value220for the child object210, the first hash value216for the object208may be used to determine whether any changes in the object208has been made, including any changes to the child object210.

In some examples, the first hash value216for the object208may be stored in a first data field in the object208. The child-object hash value220for the child object210may be stored in a second data field in the object208.

The first hash value216for the object208may be stored in a hidden text field in the object208. The child-object hash value220for the child object210may be stored in a hidden text field in the object208. The first hash value216for the object208and/or the child-object hash value220for the child object210may be a keyed-hash message authentication code (HMAC).

The processor may retrieve the first hash value216from a data field in the received object208and may retrieve the stored hash value222for the object208from a stored copy of the object212. In some examples, based on the comparison between the first hash value216and the stored hash value222, the processor may replace the stored copy of the object212with the received object208.

Although described specifically throughout the entirety of the instant disclosure, representative examples of the present disclosure have utility over a wide range of applications, and the above discussion is not intended and should not be construed to be limiting, but is offered as an illustrative discussion of aspects of the disclosure.

What has been described and illustrated herein is an example of the disclosure along with some of its variations. The terms, descriptions and figures used herein are set forth by way of illustration and are not meant as limitations. Many variations are possible within the scope of the disclosure, which is intended to be defined by the following claims—and their equivalents—in which all terms are meant in their broadest reasonable sense unless otherwise indicated.