With the increasing complexity and functionality of software applications, users are increasingly demanding the ability to customize. In addition to conventional customization such as selecting a “theme” or other general appearance or selecting certain functionality options to appear in particular menus, users often desire additional levels of customization. Some applications allow for more detailed customization, but such applications typically preserve this customization by tracking the state of the entire application. Preservation of the entire state of an application limits the ability of an application provider to update the application.
The examples described herein generally allow customization of applications. The described examples allow users to customize applications while at the same time allowing application providers to update the design of the applications without interfering or conflicting with the user customization. In the described examples, applications include embedded areas that can be customized by a user as well as static content portions that are typically not customizable by a user and instead can be configured by an application provider. A user can customize the content displayed within an embedded area by linking the embedded area to a particular content variant that determines what content is displayed in the embedded area. Users can select from pre-determined content variants or can create content variants to reflect changes the users have made to an application.
For example, a user can select a dataset, apply a filter, and construct a visualization of the filtered data. The user can then create a content variant to represent the visualization of the filtered data, and an embedded area in the application can be linked to the content variant, causing the visualization of the filtered data to be displayed in the embedded area. Using the link between the content variant and the embedded area, when the user subsequently initiates the application, a user-specific instance can be generated that includes the visualization of the filtered data in the embedded area. The link between the content variant and the embedded area preserves the user customization in a modular way that does not rely on preserving the state of the entire application instance. Application providers, in contrast, can determine the content of the static content portions. In this way, application providers have the flexibility to update aspects of an application reflected in the static content portions while still allowing users to customize aspects of the application reflected in the embedded areas. This approach to customization reduces the use of computing resources and time necessary for a user to reach a preferred state in an application. Additionally, embedded areas in an application reduce or eliminate the need to store user-specific instances of the application, reducing the use of storage resources. Instead of storing user-specific instances of a stored application along with the stored application itself, user-specific instances can be dynamically created for a user session by loading the stored application and retrieving information specified in linked content variants. Examples are described below with reference to
Each content variant includes information describing a different option for content displayable within the embedded area. A content variant can comprise a serialized (e.g., serialized to a string) meta model that is independent of the underlying rendering technology, allowing a variety of software capable of understanding the meta model to access and load the information in the content variant. A content variant can be, for example, a hypertext markup language (HTML) representation, an extensible markup language (XML) representation of content, or other serializable name-value pair notation. The information representing all objects contained in the content variant can be stored in the meta model. The meta model can be configured to be understandable to many software components, independent of the underlying infrastructure. For example, if a user creates a content variant to reflect a data visualization while working in an object-based (e.g. HTML) web application, the user can also create a user-specific instance of the application and link to the created content variant while on a non-HTML platform (e.g. some mobile frameworks).
A content variant can include information describing a variety of aspects of content, including stylistic information, data visualization information, or menu or feature customization information. Data visualization information can include, for example, a data source reference, a graph type or chart type, a data filter, axis information, scale information, data sorting information, symbol information, or legend information. A content variant comprising a meta model representation (e.g., an XML object model or JavaScript Object Notation (JSON) object model) can, for example, be serialized and de-serialized into and from XML string or JSON and stored in a database and/or as a table. The meta model can be read and visualized by different applications that understand the serialization of the meta model. The respective different applications can deserialize and perform visualization through the particular routines used by the application (e.g., HTML representation for a web application).
Content variants can be associated with embedded areas through the use of, for example, an identifier. An identifier can be assigned to an embedded area(s), and content variants that can be used with the embedded area(s) can also contain the identifier. In some examples, an identifier is unique to an application. For example, a first embedded area in an application can have an identifier “AREA_A,” and a second embedded area in the application can have an identifier “AREA_B.” A content variant that corresponds to embedded area “AREA_A” can contain the “AREA_A” identifier along with a descriptive identifier or other identifier for the content variant itself.
In some examples, an embedded area can be used in multiple applications. For example, an embedded area can have a same size, shape, or other feature that is consistent regardless of the application in which an application provider has included the embedded area. In such cases, the embedded area can have an identifier that is unique across the multiple applications. A content variant associated with an embedded area that can be used in multiple applications can, in some examples, be accessed through the multiple applications. That is, if a user creates a content variant in “Application A” that is associated with an embedded area having an identifier “LEFT_SIDEBAR,” and the same embedded area is also included in “Application B,” then the user can, in “Application B,” select the content variant created in “Application A” for use with the embedded area in “Application B.” In some examples, the content variants stored in content variant repository 104 can be shared between users.
Linking module 106 identifies a content variant, of the plurality of content variants stored in content variant repository 104, that is linked to the user-customizable embedded area. In some examples, a single content variant is linked to the embedded area. In other examples, multiple content variants are linked to the embedded area. For example, multiple linked content variants can represent content displayable in spatially different portions of the embedded area that do not interfere with each other. The linked content variant is the content variant that is “active” for the embedded area. Other content variants in content variant repository 104 may be associated with the embedded area, but the information contained in the linked content variant(s) is used to determine what is displayed in the embedded area.
Static content module 108 retrieves one or more static content portions of the application from data store 110. Static content portions are typically not customizable by a user, but static content portions can have dynamic features that change as a result of changes to embedded areas. Static content portions can be, for example, determined by application providers (and application designers). Data store 110 can store a variety of data, including static content portions, data accessed by users of the application, and other data.
Application generation engine 112 generates a customized instance 114 of the application upon receiving an instruction 116 to initiate the application. The customized instance includes the retrieved static content portions and the user-customized embedded area. Content within the user-customizable embedded area is determined by the content variant linked to the user-customizable embedded area. In some examples, the application is a web application provided over the internet.
In some examples, the user-customizable embedded area is a first user-customizable embedded area, at least some of the plurality of content variants stored in content variant repository 104 are also associated with, and are linkable to, a second user-customizable embedded area in an additional application. In some examples, application generation engine 112 generates a customized instance of an additional application upon receiving an instruction to initiate the additional application. The customized instance of the additional application includes the second user-customizable embedded area. The second user-customizable embedded area is linked to the same content variant that is linked to the first user-customizable embedded area.
In
The content variants available for embedded areas 208, 210, and 212 can be stored, for example, in a content variant repository. In some examples, content variants associated with a respective embedded area are stored together but separately from content variants associated with other embedded areas. In other examples, the content variants are stored together and are searchable by identifier(s).
In some examples, a user instruction to link the embedded area to a second content variant in place of the first content variant is received. In response to the user instruction, the embedded area is modified to reflect the second content variant (i.e., the displayed content is updated to display the content described by the second content variant).
In process block 504, after the design of the application has been updated, a second request to initiate the application is received. The static content portions of the application are retrieved in process block 506. The static content portions of the application include at least one modified static content portion that reflects the updated design of the application. The updated design can include, for example, the addition or removal of a menu item, functionality, or graphic, a reorganization of static content portions, the addition or removal of a static portion, etc. In process block 508, the content variant linked to the embedded area of the application is retrieved. In process block 510, a second user-specific instance of the application is generated, the second instance including the at least one modified static content portion that reflects the updated design of the application and including the embedded area. The content of the embedded area remains based at least in part on the content variant. Thus, in method 500, the design of an application is updated (by modifying the static content portions) without affecting the user's customization (content displayed in the embedded area). Because the embedded area is linked to a content variant, the link remains unchanged through the modification of the static content portions, and the content variant can simply be retrieved and incorporated into the generated user-specific instance of the application.
“Content Variant A” 618 and “Content Variant B” 620 are shown stored as “portable” in content variant repository 622. Portable content variants can be used by other users and/or by other applications, whereas “non-portable” content variants are application and/or user specific. Content variant repository 622 also contains an additional content variant, “Content Variant C” 624, which is shown as non-portable. The “Common Group ID” shown in
A user can drag and drop these content variants into embedded areas 710 and 712, shown within window 714. Embedded area 710 displays “Content A” 716, and embedded area 712 displays “Content B” 718, which are displayed as a result of moving “Variant A” 704 and “Variant B” 706 from content variant gallery 702 into embedded areas 710 and 712. Other ways to select content variants are also possible, including selection from a drop-down or other menu, right-clicking or hovering over an embedded area to cause a gallery, menu, or list to appear, or other way. For example, in response to a user interaction with an embedded area, references to a plurality of additional content variants that are associated with the embedded area and available for selection can be presented. Although “Variant A” 704 and “Variant B” 706 are shown in content variant gallery 702, they may not be linked to embedded areas 710 and 712 until the user instructs the application to link the content variants to the embedded areas. In some examples, moving a content variant from content variant gallery 702 into an embedded area links the content variant to the embedded area.
A user can make further modifications to “Content A” 716 and/or “Content B” 718. Save button 720 provides the option to save a new content variant (shown as “Content Variant C” in repository view window 722) as a non-portable content variant to represent the modified content of embedded areas 710 and/or 712. “Content Variant C” is shown saved as non-portable “Variant C” 724 in content variant repository 708. “Variant A” 726 and “Variant B” 728 are also shown stored in content variant repository 708, similar to
In some examples, a power user or administrator can manage the content variants created or accessed by users by organizing access, deletion, and provisioning roles for sharing in the system landscape.
In some examples, the content variant repository stores content variants for a plurality of embedded areas. The additional content variants can include an identifier indicating that the additional content variants are available for use with the embedded area.
In some examples, method 800 can further comprise additional process blocks prior to retrieving the second content variant from the content variant repository and in response to receiving the indication of user interaction with the instance of the application. For example, a plurality of the additional content variants in the content variant repository that are associated with the embedded area can be identified; references to the respective additional content variants of the plurality of the additional content variants can be provided for selection; and an indication of a user selection of the second content variant can be received.
With reference to
A computing system may have additional features. For example, the computing environment 900 includes storage 940, one or more input devices 950, one or more output devices 960, and one or more communication connections 970. An interconnection mechanism (not shown) such as a bus, controller, or network interconnects the components of the computing environment 900. Typically, operating system software (not shown) provides an operating environment for other software executing in the computing environment 900, and coordinates activities of the components of the computing environment 900.
The tangible storage 940 may be removable or non-removable, and includes magnetic disks, magnetic tapes or cassettes, CD-ROMs, DVDs, or any other medium which can be used to store information and which can be accessed within the computing environment 900. The storage 940 stores instructions for the software 980 implementing one or more innovations described herein.
The input device(s) 950 may be a touch input device such as a keyboard, mouse, pen, or trackball, a voice input device, a scanning device, or another device that provides input to the computing environment 900. For video encoding, the input device(s) 950 may be a camera, video card, TV tuner card, or similar device that accepts video input in analog or digital form, or a CD-ROM or CD-RW that reads video samples into the computing environment 900. The output device(s) 960 may be a display, printer, speaker, CD-writer, or another device that provides output from the computing environment 900.
The communication connection(s) 970 enable communication over a communication medium to another computing entity. The communication medium conveys information such as computer-executable instructions, audio or video input or output, or other data in a modulated data signal. A modulated data signal is a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media can use an electrical, optical, RF, or other carrier.
Although the operations of some of the disclosed methods are described in a particular, sequential order for convenient presentation, it should be understood that this manner of description encompasses rearrangement, unless a particular ordering is required by specific language set forth below. For example, operations described sequentially may in some cases be rearranged or performed concurrently. Moreover, for the sake of simplicity, the attached figures may not show the various ways in which the disclosed methods can be used in conjunction with other methods.
Any of the disclosed methods can be implemented as computer-executable instructions stored on one or more computer-readable storage media (e.g., one or more optical media discs, volatile memory components (such as DRAM or SRAM), or nonvolatile memory components (such as flash memory or hard drives)) and executed on a computer (e.g., any commercially available computer, including smart phones or other mobile devices that include computing hardware). The term computer-readable storage media does not include communication connections, such as signals and carrier waves. Any of the computer-executable instructions for implementing the disclosed techniques as well as any data created and used during implementation of the disclosed embodiments can be stored on one or more computer-readable storage media. The computer-executable instructions can be part of, for example, a dedicated software application or a software application that is accessed or downloaded via a web browser or other software application (such as a remote computing application). Such software can be executed, for example, on a single local computer (e.g., any suitable commercially available computer) or in a network environment (e.g., via the Internet, a wide-area network, a local-area network, a client-server network (such as a cloud computing network), or other such network) using one or more network computers.
For clarity, only certain selected aspects of the software-based implementations are described. Other details that are well known in the art are omitted. For example, it should be understood that the disclosed technology is not limited to any specific computer language or program. For instance, the disclosed technology can be implemented by software written in C++, Java, Pert, JavaScript, Adobe Flash, or any other suitable programming language. Likewise, the disclosed technology is not limited to any particular computer or type of hardware. Certain details of suitable computers and hardware are well known and need not be set forth in detail in this disclosure.
It should also be well understood that any functionality described herein can be performed, at least in part, by one or more hardware logic components, instead of software. For example, and without limitation, illustrative types of hardware logic components that can be used include Field-programmable Gate Arrays (FPGAs), Application-specific Integrated Circuits (ASICs), Application-specific Standard Products (ASSPs), System-on-a-chip systems (SOCs), Complex Programmable Logic Devices (CPLDs), etc.
Furthermore, any of the software-based embodiments (comprising, for example, computer-executable instructions for causing a computer to perform any of the disclosed methods) can be uploaded, downloaded, or remotely accessed through a suitable communication means. Such suitable communication means include, for example, the Internet, the World Wide Web, an intranet, software applications, cable (including fiber optic cable), magnetic communications, electromagnetic communications (including RF, microwave, and infrared communications), electronic communications, or other such communication means.
The disclosed methods, apparatus, and systems should not be construed as limiting in any way. Instead, the present disclosure is directed toward all novel and nonobvious features and aspects of the various disclosed embodiments, alone and in various combinations and subcombinations with one another. The disclosed methods, apparatus, and systems are not limited to any specific aspect or feature or combination thereof, nor do the disclosed embodiments require that any one or more specific advantages be present or problems be solved.
In view of the many possible embodiments to which the principles of the disclosed invention may be applied, it should be recognized that the illustrated embodiments are only preferred examples of the invention and should not be taken as limiting the scope of the invention. Rather, the scope of the invention is defined by the following claims. We therefore claim as our invention all that comes within the scope of these claims.