CN111095207B - 提供状态管理持久化的方法、系统、存储设备和装置 - Google Patents
提供状态管理持久化的方法、系统、存储设备和装置 Download PDFInfo
- Publication number
- CN111095207B CN111095207B CN201880060171.XA CN201880060171A CN111095207B CN 111095207 B CN111095207 B CN 111095207B CN 201880060171 A CN201880060171 A CN 201880060171A CN 111095207 B CN111095207 B CN 111095207B
- Authority
- CN
- China
- Prior art keywords
- container
- containers
- lifecycle
- hierarchy
- state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9566—URL specific, e.g. using aliases, detecting broken or misspelled links
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/0483—Interaction with page-structured environments, e.g. book metaphor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/04817—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance using icons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/0486—Drag-and-drop
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
在设计时工具的用户界面处接收容器的层次结构。容器的层次结构包括嵌套在一个或多个其它容器内部的容器。每个容器包括web客户端应用的不同部分。设计时工具将状态与容器的层次结构中的每个容器相关联。在用户界面处接收每个容器的生命周期。设计时工具创建web客户端应用中的计算机可执行指令,这些指令使得能够基于每个容器的相应生命周期根据层次结构创建和销毁每个容器的状态。设计时工具基于与每个容器相关联的相应生命周期事件向每个容器提供对该容器自身状态和包含该容器的容器的状态的访问。
Description
相关申请的交叉引用
本申请要求于2018年6月7日提交的题为STATE MANAGEMENT PERSISTENCE的美国专利申请序列No.16/003,023、于2017年9月28日提交的题为STATE MANAGEMENTPERSISTENCE的美国临时专利申请序列No.62/564,945(参考号ORACP0208P-1/ORA180300-US-PSP)、于2018年2月12日提交的题为STATE MANAGEMENT PERSISTENCE的美国临时专利申请序列No.62/629,523(参考号ORACP0208P-2/ORA180300-US-PSP-2)和于2017年9月28日提交的题为ROUTER CONFIGURATION的美国临时专利申请序列No.62/564,946(参考号ORACP0209-1/ORA180301-US-PSP)和于2018年2月12日提交的题为ROUTER CONFIGURATION的美国临时专利申请序列No.62/629,526(参考号ORACP0209P-2/ORA180301-US-PSP-2)的优先权,这些专利申请通过引用并入本文,就像在本文完全阐述一样,用于所有目的。
技术领域
本公开一般而言涉及计算机系统,并具体涉及提供状态管理持久化的方法、系统、存储设备和装置。
背景技术
进程是被执行以执行功能的代码的一部分。在并行处理系统中,多个进程可以被同时执行。这些进程中的两个或更多个进程可以更新它们共享的状态(也称为“共享状态”)。如果两个或更多个进程同时或几乎同时更新共享状态,那么可能发生潜在的冲突。例如,如果两个进程共享变量Y,并且第一个进程将变量Y更新为值4,并且第二个进程将变量Y更新为5,那么第一个进程的更新将被清除。
常规上,多个并行进程同时更新共享状态的问题要么根本没有被解决,要么使用了复杂的编程机制,诸如锁、互斥或关键区段。例如,常规上,复杂的编程机制可以防止第一进程和第二进程的相应指令被同时执行。因此,第一进程和第二进程的执行将是互斥的。但是,编写使用这种复杂的编程机制的代码要求开发者具有复杂的编程技能。
发明内容
在设计时工具的用户界面处接收容器的层次结构。容器的该层次结构包括嵌套在一个或多个其它容器内部的容器。这些容器中的每个容器包括web客户端应用的不同部分。设计时工具将状态与容器的层次结构中的每个容器相关联。在用户界面处接收每个容器的生命周期。设计时工具创建web客户端应用中的计算机可执行指令,这些指令使得能够基于每个容器的相应生命周期根据层次结构来创建和销毁用每个容器的状态。设计时工具基于与每个容器相关联的相应的生命周期事件为每个容器提供对该容器自身状态和包含该容器的容器的状态的访问。
一个实施例提供了一种处理器可读的非暂态存储设备,该设备包括用于以下方法的指令:在设计时工具的用户界面处接收容器的层次结构,该层次结构具有嵌套在一个或多个其它容器内部的容器,其中这些容器中的每个容器包括web客户端应用的不同部分;在设计时工具处执行的将状态与容器的层次结构中的每个容器相关联;在设计时工具的用户界面处,接收每个容器的生命周期;由设计时工具执行的创建用于web客户端应用的计算机可执行指令,该计算机可执行指令使得能够基于每个容器的相应生命周期根据层次结构创建和销毁每个容器的状态;以及在设计时工具处执行的基于与每个容器相关联的相应生命周期事件为每个容器提供对该容器自身状态和包含该容器的容器的状态的访问。
可以通过参考说明书的其余部分和附图来实现对本文公开的特定实施例的性质和优点的进一步理解。
附图说明
图1描绘了根据各种实施例的URL。
图2描绘了根据实施例的容器的层次结构的框图。
图3描绘了根据各种实施例的容器的格式。
图4描绘了根据各种实施例的系统。
图5A描绘了根据一个实施例的并行执行的动作链。
图5B描绘了根据一个实施例的快照的一种实现方式。
图6描绘了根据一个实施例的用于为将是客户端应用的UI的一部分的按钮创建动作链的页面。
图7描绘了根据一个实施例的设置面板页面的屏幕快照。
图8描绘了根据一个实施例的用于将生命周期事件绑定到用户界面部件的web页面。
图9描绘了根据一个实施例的用于生成验证代码的web页面。
图10描绘了根据一个实施例的用于选择动作链的web页面。
图11描绘了根据一个实施例的web页面,开发者可以使用该web页面映射他们想要用于使用该页面的动作链的输入参数。
图12描绘了根据一个实施例的不熟练的开发者可以用来将用户界面(UI)部件绑定到部件事件的web页面。
图13描绘了根据一个实施例的包括事件列表的web页面。
图14描绘了根据一个实施例的用于指定输入参数的属性检查器。
图15描绘了根据一个实施例的具有选择页面按钮的属性检查器。
图16描绘了根据一个实施例的选择页面对话框,该选择页面对话框显示开发者正在创建的客户端应用中的页面的列表。
图17描绘了根据一个实施例的用于指定动作的名称的属性检查器。
图18描绘了根据一个实施例的将变量映射到参数对话框。
图19描绘了根据一个实施例的用于提供状态管理持久化的方法的流程图。
图20描绘了根据一个实施例的用于路由器配置的流程图。
图21描绘了根据一个实施例的系统。
图22是可用于实现本文描绘的图的实施例的系统和附随的计算环境的总体框图。
图23是可用于实现本文描述的实施例的计算设备的总体框图。
具体实施方式
问题涉及当一个计算机可执行指令正在更改状态(诸如变量)而另一个计算机可执行指令正在读取该状态。常规上,这个问题要么根本没有解决,要么使用了复杂的编程机制,诸如锁、互斥或关键区段。编写使用这种复杂的编程机制的代码要求开发者是熟练的。状态管理持久化的各种实施例在不使用复杂编程机制的情况下以使得不熟练的开发者能够创建代码的方式解决了这些问题。
各种实施例提供了对何时创建、恢复和拆除一个应用状态的自动处理。该持久化生命周期可以被用于模仿浏览器行为,诸如会话持久化,历史记录状态等。
各种实施例提供了状态管理的至少两个方面:容器关系(containership)和生命周期。
容器关系(也称为“范围”)影响何时某个状态是活动的。例如,页面范围状态被包含在页面内。根据一个实施例,它仅在页面被查看时是可用的,并且在用户导航离开该页面时不再是可访问的。
持久化是指系统将状态保持多长时间。在使用web示例的情况下,可以在整个web会话期间保持状态(状态存在直到用户关闭其浏览器选项卡)、可以跨web会话保持状态(即使用户关闭其浏览器选项卡并回来,状态也存在)、或者甚至使用状态来模仿浏览器历史记录(如果用户点击“后退”按钮,则状态存在,但如果用户直接导航到某个用户界面,则状态不存在)。
状态可以通过容器关系和持久化的组合来被管理。例如,当用户与UI交互导致页面被显示时,该页面包含的所有状态都被初始化并被置为可用的。取决于其持久化设置,在被初始化时,它可以被默认设置为曾经保存的值。
此外,常规上,统一资源定位符(URL)之前仅被用于指定用于显示页面的路径。因此,web应用、模块、页面和URL或浏览器中的资源独立于任何其它页面,而与这两个页面在应用的结构中的位置无关。各种实施例提供了用于基于URL的部分(在本文中也称为“路由器配置”)来管理应用、模块和页面的状态。
各种实施例提供了高度模块化的配置应用的方式,其中URL的每个子路径表示包含该模块自己的启动/拆除生命周期的模块。
容器关系(在本文中也称为“范围”)影响何时某个状态是活动的。例如,页面范围状态被包含在页面内。它仅在页面被查看时是可用的,并且在用户导航离开该页面时不再是可访问的。
示例性系统中的容器可以是页面(用户在某个时间正在查看的单个UI)、流(页面的集合)、应用(流的集合)等。如本文所述,每个容器具有该容器自己的被独立管理的状态的集合。
为了说明起见,给出以下示例性URL:
https://mycompany.com/sales/accounts/contact
该URL可以被分解成其多个部分——mycompany、sales、accounts和contact。mycompany.com可以表示整个应用。sales和accounts部分可以表示单独但嵌套的流。最后,contact是要加载到web浏览器中的页面。
给定这个URL,可以创建用于该应用的状态,然后可以创建sales流,然后是accounts流,并且然后是contacts页面。
在示例中,假设用户然后导航到以下URL:https://mycompany.com/sales/opportunity/detail
在这种情况下,用户位于同一应用mycompany.com和sales流中。accounts流和contacts页面被退出。因此,根据一个实施例,系统将销毁accounts流和contacts页面的状态,留下应用和sales流状态保持不动,然后初始化用于opportunity流和detail页面的状态。
图1描绘了根据各种实施例的URL。
URL 110、120、130中的每一个都包括由反斜杠分开的部分101-103、122、123、133。每个URL中的第一个反斜杠100表示应用。URL 110、120、130的最后一部分103、123、133表示该应用中的web页面。相应URL 110、120、130的第一个反斜杠100之间的部分101、120、122表示模块。
根据一个实施例,应用、模块和页面中的每一者都在它们自己的容器中。URL的各部分被用于确定如何导航这些应用、模块和页面,并被用作确定何时为相应容器创建和销毁状态(诸如变量)的一部分。
将URL 110、120、130输入到浏览器中使浏览器显示相应的页面。例如,输入URL110会导致显示费用报告页面;输入URL 120会导致显示员工页面,依此类推。
图2描绘了根据实施例的容器的层次结构的框图。
应用容器210包括SaaSCloud模块容器220、模块250和页面211、212。SaaSCloud模块容器220包括人力资源模块容器230和财务模块容器240。人力资源模块容器包括员工页面容器231。财务模块容器240包括费用报告页面容器241和收据页面容器242。模块容器250包括页面容器251和252。
这些容器被组织在容器的层次结构200中。与层次结构200相关联的容器可以嵌套。对于容器中的每个容器都存在层次结构的路径(也称为“层次结构路径”),该路径由包含该容器的容器及这些容器被包含的顺序来定义。例如,收据页面容器242的层次结构路径261由收据页面容器242定义,该收据页面容器242位于财务模块容器240的内部,财务模块容器240位于SaaSCloud模块容器220的内部,SaaSCloud模块容器220位于应用容器210的内部。图2描绘了沿着各种嵌套容器的其它层次结构路径262-267。根据一个实施例,容器中的每个容器可以具有相关联的层次结构路径。
图3描绘了根据各种实施例的容器的格式。
模块容器310包括范围320和Javascript代码330。范围320包括由模块容器310使用的变量321、作为用于容器310的模块的一部分而执行的动作链322,以及用于模块容器310的生命周期323。
页面容器340包括超文本标记语言(HTML)341、范围350和Javascript 360。范围350也包括由页面容器340使用的变量351、作为用于容器340的页面的一部分而执行的动作链352,以及用于页面容器340的生命周期353。
应用容器可以包括一个或多个模块容器和/或一个或多个页面容器。如图2所示,容器可以在其它容器内嵌套任何数量的深度,从而形成具有各种层次结构路径的容器的层次结构。
每个容器310、340具有相关联的生命周期323、353。生命周期包括阶段。阶段的示例包括“beforeEnter”页面(进入页面前)、“enter”页面(进入页面)、页面是“interactable”(页面是可交互的)、意味着可以退出页面的“canExit”(可以退出),以及在退出页面之前发生的“beforeExit”(退出前)阶段。这些阶段是互斥的。换句话说,一次只能操作容器的生命周期的一个阶段。此外,各阶段按顺序操作。更具体而言,“beforeEnter”后跟着“Enter”,其后又跟着“interactable”,依此类推,直到“beforeExit”。
这些生命周期阶段是可以被用于启动动作链的事件。
图4描绘了根据各种实施例的系统400。
系统400包括工具410、硬件存储器420、数据库430、服务器应用450、460、客户端应用440、以及用于在这些部件410、420、430、450、460和440之间进行通信的网络470。设计时工具410提供用户界面411。客户端应用440包括代码441和用户界面442。
根据一个实施例,客户端应用440在工具410中执行或由工具410执行。工具410和客户端应用440可以在相同的计算机上执行或在彼此通信的分开的计算机上执行。
设计时工具410包括用于创建客户端应用440的用户界面411,例如web页面。工具440可以提供可视化应用构建能力,开发者或团队经由云使用该可视化应用构建能力来创建客户端应用440。可视化构建器云服务(Visual Builder Cloud Service,VBCS)被修改以提供本文讨论的各种可视化应用构建能力实施例。代码441包括计算机可执行指令,这些指令是由工具440基于开发者或团队对用户界面411的输入而创建的。
用户可以在客户端应用440的设计时期间经由用户界面411指定如何创建代码441的计算机可执行指令。更具体而言,用户界面411可以被用于创建代码441,该代码411定义并实现容器的层次结构200、图3中描绘的容器信息以及本文讨论的各种实施例。作为设计客户端应用及其相关联代码的一部分,可以将定义容器的层次结构200、图3中描绘的容器信息以及各种实施例的信息存储在硬件存储器420、数据库430、执行客户端应用440的计算机、和/或计算机执行工具410中。在运行时执行期间,所创建的代码441可以访问该信息以提供各种实施例。此外,客户端应用440和相关联的代码441在“运行时”期间执行并与一个或多个服务器应用通信。作为执行代码441的结果,用于容器231、241、242的页面被显示在用户界面442中。例如,如本文所讨论的,响应于用户将URL输入到在与客户端应用440通信的计算机上执行的浏览器中,用于容器231、241、242的页面被显示在该浏览器中。
工具410提供“声明式系统”,该“声明式系统”例如通过提供可拖放的框、箭头以及数据输入字段等等来隐藏创建代码441的计算机指令的许多复杂性。声明式能力使得不熟练的编程者能够使用可视化表示(诸如框、箭头等)来创建容器、容器的层次结构、动作链、事件,指定动作链将由指定事件触发,等等。更具体而言,框和输入到数据输入字段中的名称可以被用来表示容器。嵌套在框内的框可以被用于表示如图2所示的容器内的容器。线条或箭头可以被用于指定触发动作链的特定容器的生命周期阶段。这可以在设计时期间完成。然后,可以在客户端应用的运行时期间执行底层计算机可执行代码441。开发者被称为“声明式开发者”或“声明式编程者”。这样的声明式开发者不了解如何使用复杂的编程技术。
状态是通过容器关系和持久化相结合来管理的。容器格式如图3所示。容器会影响何时变量(也称为“状态”)是活动的。持久化是指变量被保持多长时间。各种类型的范围确定持久化的级别或类型。范围的示例包括会话范围、设备范围和历史记录范围等,如本文所讨论的。
会话范围:如果在同一浏览器选项卡中时页面被退出,则该页面的变量被销毁;但是,只要在同一浏览器选项卡中,当执行返回该页面时,这些相同的变量就被恢复。变量可以被存储在浏览器会话存储区中。因此,只要浏览器是打开的,变量就持续存在。
设备范围:如果退出浏览器选项卡,则页面的变量被销毁。即使在几天后执行返回同一页面,这些变量也被恢复。变量可以被存储在浏览器本地存储区中。因此,即使浏览器被关闭,变量也将保留在运行应用的设备上。设备范围也可以被称为“本地范围”。
历史记录范围:即使在客户端应用的页面到页面之间浏览时,用户也可以看到变量的值。例如,变量值可以被存储在浏览器历史记录中。当使用浏览器后退按钮导航回到浏览器历史记录中的页面时或当刷新该页面时,变量的值被恢复为应用导航离开该页面时的值。
根据各种实施例,范围可以被用于模仿浏览器行为,诸如会话持久化、历史记录状态等。例如,会话范围可以被用于提供会话持久化,并且历史记录范围可以被用于提供历史记录状态。
参考图2,如果收据页面修改了在收据页面容器242和其它容器之间共享的容器的变量,则这些其它容器将能够访问那些修改。例如,如果收据页面容器242修改SaaSCloud模块容器220中的变量X和应用容器210中的变量Y,则员工页面容器231也可以访问对变量X和Y的这些修改。在这个图示中,这是因为收据页面容器242和员工页面容器231二者都在容器220和210中。容器220和210与收据页面容器242和员工页面容器231二者的层次结构路径261和262相关联。
根据实施例,每个客户端应用一次仅显示一个页面。因此,与一个层次结构路径相关联的对变量的值的修改将不会和与另一层次结构路径相关联的对变量的修改冲突。更具体而言,参考图2并继续该示例,虽然页面242和231二者都可以访问分别属于容器220和210的变量X和Y,但是不会存在冲突,这是因为一次仅显示页面242、231中的一个。因此,页面242、231被阻止同时修改变量X和Y的值。
客户端应用的两个不同副本可以各自显示不同的页面。例如,参考图4,假设存在客户端应用440的两个副本,并且这两个副本中的每个副本显示相应的页面。如果这两个页面都修改SaaSCloud模块容器中的变量X的值,则作为将修改提交给数据库430的一部分,数据库430可以解决冲突。
容器中的每个容器可以启动一个或多个动作链。另外,每个生命周期阶段可以并行启动和执行一个或多个动作链。例如,参考图2,可以同时执行SaaSCloud模块容器220和财务模块容器240的动作链。
由于特定容器的每个生命周期阶段互斥地执行,因此该特定容器的不同生命周期阶段的动作链将不会并行执行。更具体而言,参考图2,如果收据页面容器242在其“beforeEnter”生命周期阶段期间开始20个动作链,则这20个动作链将在该收据页面容器242的“enter”生命周期阶段之前完成。
容器的动作链可以启动并导致执行同一容器的另一个动作链。此外,一个容器中的动作链可以启动并导致执行沿着该容器的层次结构路径的容器中的动作链。例如,参考图2,收据页面容器242的动作链可以启动并导致执行与沿着收据页面容器242的的层次结构路径261的容器252、240、220和210相关联的动作链。
由于生命周期阶段是事件,因此生命周期阶段可以触发动作链。例如,特定容器的生命周期阶段“enter”可以触发一个或多个动作链。
动作链可以启动并行执行的多个孩子动作链。然后,该多个孩子动作链可以重新结合在一起。
根据一个实施例,层次结构路径与用户可以输入到浏览器中以显示客户端应用440的用户界面的页面的URL对应。例如,参考图2和图4,层次结构路径261与指定“/SaaSCloud/Financials/receipts”的URL对应。更具体而言,当用户将该URL输入到浏览器中时,第一个反斜杠将使代码441中的计算机可执行指令启动应用容器210。URL的SaaSCloud部分将使代码441中的计算机可执行指令启动SaaSCloud模块容器220;URL的financials部分将使代码441中的计算机可执行指令启动财务模块容器240;并且URL的receipts部分将使代码441中的计算机可执行指令启动收据页面容器242并加载对应的收据页面。类似地,层次结构路径262与指定“/SaasCloud/HumanResources/Employee”的URL对应,并且层次结构路径263与指定“/SaaSCloud/Financials/ExpenseReport”的URL对应。
用于相应容器的状态是基于与每个容器相关联的生命周期而创建和销毁的。开发者可以使用工具410的设计时用户界面411来指定触发相应容器的状态的创建和销毁的生命周期事件。例如,“beforeEnter”生命周期事件可以触发费用报告页面容器141的状态的创建,并且“beforeExit”生命周期事件可以触发费用报告页面容器241的状态的销毁。触发状态的创建的生命周期事件对于多个容器而言可以是不同的。例如,对于一个容器,状态的创建可以由“beforeEnter”触发,而对于另一个容器,状态的创建可以由“Enter”触发。此外,触发状态的销毁的生命周期事件对于多个容器而言可以是不同的。
此外,相应容器状态的创建和销毁是根据层次结构路径来执行的。例如,参考图2和图4,假设用户将URL“/SaaSCloud/Financials/ExpenseReport”输入到执行客户端应用440的计算机的浏览器中。反斜杠将启动应用容器210。响应于开发者使用设计时用户界面411指定的生命周期事件,触发应用容器210的状态的创建。URL的“SaaSCloud”部分将启动SaaSCloud模块容器220。响应于开发者使用设计时用户界面411为容器220指定的生命周期事件,触发SaaSCloud模块容器220的状态的创建。类似地,响应于开发者为相应的容器240、241指定的生命周期事件,触发财务模块容器240和费用报告页面容器241的相应状态的创建。现在假设用户将URL“/SaasCloud/HumanResources/Employee”输入到浏览器中。响应于开发者使用设计时用户界面331为相应的容器241、240指定的生命周期事件,将触发费用报告页面容器241的状态和财务容器240的状态的销毁。然后,响应于开发者为相应的容器230、231指定的生命周期事件,将触发人力资源模块容器230和员工页面容器231的状态的创建。由于这些相应URL的层次结构路径262、263二者共享应用容器210和SaaSCloud容器220,因此容器210和220的状态将被保留。容器可以访问包含该容器的容器的状态。例如,容器220可以访问容器210的状态。容器240可以访问容器220和210的状态。容器241可以访问容器240、220和210的状态。但是,容器不能访问不包含该容器的容器的状态。例如,240和241不能访问容器230和231的状态,反之亦然。
对动作链所使用的全局变量的快照是在每个动作链的开始处拍摄的。例如,如果父动作链启动两个子动作链,则将拍摄三个快照。
当动作链开始执行时,将拍摄对由该动作链使用的全局变量的快照。例如,假设对于图5A中描绘的相应动作链,存在三个快照。
图5A描绘了根据一个实施例的并行执行的动作链510、520、530。注意的是,虽然函数或动作链可以被描述为“并行”执行,但是众所周知,并行执行的思想通常用于描述使用单个处理器的时间分片(time-sliced)处理,其中,在微观执行级别,一次只有一个动作链被执行。但是,在更高的宏观执行级别(诸如,应用指令级别),动作链看起来像同时或并行地起作用。一般而言,本文描述的实施例可以适于任何执行方案,诸如单处理器或多处理器体系架构、多线程、多流水线、时间共享处理、分布式或联网(例如,云)处理等。
动作链510、520、30是动作511、512、521-525和531-533的链。框表示动作511、512、521-525和531-533,并且箭头表示在相应动作链中从一个动作到另一个动作的控制流。例如,执行是沿着箭头的方向进行的。如第一单个框通过箭头连接到第二单个框所指示的,动作可以在动作链中顺序地执行。如针对第二动作链520的三个框522-524所指示的,动作也可以并行执行。更具体而言,从第二链520中的第一动作521起的执行可以分叉成三个并行动作522-524,然后在较低的动作525中再次联合。替代地,可以有条件地执行一个或多个动作,使得在每次调用动作链时并不执行该链中的动作的全部。一个或多个动作可以是前一个动作的孩子。例如,第二动作链520中的第一动作521是父动作,而从该第一动作521分支的三个动作522-524是孩子。在其它示例中,动作511是动作512的父动作,并且动作531是动作533的父动作。
动作可以执行各种类型的处理。例如,一个动作可以从变量中读取值。另一个动作可以将值写入变量。在另一个示例中,可能期望获得低于某个阈值的几个股票价格,并且如果其中任何一个低于某个阈值则提供警报。在这种情况下,一个动作可能分叉几个其它动作,其中这些动作中的每个动作并行地请求股票价格。一旦已经获得该股票价格,他们联合加入的动作就可以确定哪些低于阈值,并在单个警报中提供该信息。在又一个示例中,web页面可以被设计为允许用户通过选择列表中显示的每首歌曲下方的“购买”按钮来购买几首歌曲。选择“购买”按钮会触发开始动作的事件。这些动作中的每个动作都可以并行地处理这些购买。
根据各种实施例,如由分离这些动作链的线所表示的,动作链中的每个动作链按照分区541、542、543(也被称为“隔离体”)彼此隔离。换句话说,每个动作链都有它对其操作的状态的私有视图。例如,Y表示全局状态。状态的示例包括变量和数据流。当动作链开始执行时,会为每个动作链提供该动作链自己的对全局状态的私有视图。例如,Y1是对Y的第一动作链私有视图,Y2是对Y的第二动作链私有视图,并且Y3是对Y的第三动作链私有视图。
在一个实施例中,视图Y1、Y2、Y3可以使用三个动作链510、520、530隔离体541、542、543中的每一个隔离体局部的变量来实现。因此,每个局部变量Y1、Y2、Y3可以被其相应的动作链510、520、530进行修改,而无需修改全局状态Y。实际上,全局状态Y已被快照,并且是Y1、Y2、Y3的原始状态,以防动作链有错误的情况并且该动作链的状态可以回滚到开始状态以进行调试。视图Y1、Y2、Y3是可改变的状态的示例,因为它们表示状态Y的版本,并且可以通过相应的动作链进行修改。动作链是进程的示例。注意的是,Y3是在与Y1和Y2不同的时间创建的。因此,在第三动作链503的动作531处,Y可以仅被读取,并且因此可以使用全局变量Y的值。在动作532处,全局变量Y被写入,并且在此之前局部副本Y3被创建,并且是Y3而不是Y被写入。因此,在一个实施例中,局部变量是动态创建的。在一个实施例中,在动作链的末尾560处,运行冲突解决方案570,以根据Y1、Y2和Y3的最终值来确定全局状态Y的新值是什么。在一个实施例中,最后一个被写入的变量Y1、Y2或Y3是全局状态Y的新值。
图5B描绘了根据一个实施例的快照的实现方式。
当动作链开始执行时,将拍摄由该动作链使用的全局变量的快照。图5B描绘了用于图5B中描绘的相应动作链510、520、530的三个包装器(即501、502和503a/503b)的示例。假设全局变量是X、Y和Z。在这个示例中,对于每个动作链510、520、130,使用包装器或代理来与全局变量X、Y和Z进行接口。该包装器或代理被用于将例如相应三个动作链的私有视图Y1、Y2、Y3与Y的全局状态隔离。对于动作链30,包装器3053a创建全局变量X的局部副本(即,局部副本X3),但不创建全局变量Y和Z的局部副本,因为在这个时间点上,在这个示例中,Y和Z只被读取。因此,包装器503a仅仅传递Y和Z的值。在随后的时间,当Y被写入时,包装器503b[在这个实施例中,包装器503a和503b是相同包装器代码,仅仅是在不同时间点执行]创建局部副本Y3。动作链530此时使用[动作链532]其对X的局部副本(即X3),并且Z再次只是被传递,因为它只被读取。包装器或代理提供共享变量Y与私有视图Y1、Y2、Y3之间的关联,其可以用作在客户端应用250中的相应动作链251的运行时执行期间将用于修改Y的显式计算机可执行指令替换为用于修改Y1、Y2和Y3的相应隐式计算机可执行指令的一部分。
类似地,X1、X2、X3为相应的动作链提供对全局变量X的私有视图;并且Z1和Z2为相应动作链提供对全局变量Z的私有视图。
虽然为了便于说明,图5B针对三个相应快照描绘了三组变量X、Y和Z,但是由于X、Y和Z是用于客户端应用的全局变量,因此每个的X是相同的变量,每个的Y是相同的变量,并且每个的Z是相同的变量。
快照和相关联的包装器可以嵌套。例如,如果第一动作链开始另一个动作链,则将拍摄两个快照—父动作链的一个快照,以及孩子动作链的第二快照。第二快照将嵌套在第一快照的内部。在示例中,如果动作链开始两个其他的动作链,则将拍摄三个快照。
动作链可以经由客户端应用的开发者所指定的显式计算机可执行指令来读取和写入全局变量X、Y和Z,并这些显式计算机指令的执行被替换为适当的隐式计算机指令的执行,以将那些操作重定向到适当的私有视图。例如,显式计算机可执行指令(诸如Y=Y+1)可以用隐式计算机指令替换,以创建包装器、获取私有视图Y1的局部存储、为Y1分配Y的值,以及Y1=Y1+1。
根据一个实施例,仅为将被修改的变量拍摄快照。不为只读变量拍摄快照。
根据一个实施例,全局变量的私有视图是恰好在全局变量被修改之前创建的。
根据一个实施例,全局变量被复制到包装器中,从而创建私有视图。对变量的修改被跟踪以确定哪些变量状态被更改。可以详细记录创建私有视图,直到它们相应的全局变量将被读取,或者直到另一个进程修改它们。
图6-18中描述的页面是工具的UI 411的一部分。用于状态管理持久化的用户界面是工具的用户界面411的一部分。用于路由器配置的用户界面也是工具的用户界面411的一部分。用户界面411在设计时期间生成计算机可执行指令,这些指令成为代码441的一部分,并在客户端应用的运行时期间被执行。
设计工具410的UI 211让开发者可以定制页面。图6描绘了根据一个实施例的用于为将成为UI 442的一部分的按钮创建动作链的页面600的截图。描述部分可以被添加。
通过选择startmyActionChain(启动我的动作链)选项卡680可以显示页面600。UI411的页面600包括在左侧的可以被添加到动作链640的动作的托盘610。页面600的中间部分620描绘了流程图,该流程图表示动作链640中的一个或多个动作序列。菱形641表示“if”语句或分支条件,用于确定动作链640的执行可以采取的多个替代路径中的哪一个。
如图6所示,托盘610具有标记为“通用”、“逻辑”和“导航”的三个部分650、660、670。每个部分650、660、670包括表示动作的图标,这些图标可以被拖放到中间部分620中以创建动作链640。
通用部分650具有三行图标。在通用部分的第一行中,第一图标651表示分配变量。例如,该图标651可以用于将变量设置为不同的值。第一行中的第二图标652表示调用动作链。这允许开发者指定从该动作中调用另一个动作链。第一行中的第三图标653表示调用部件方法,该调用部件方法让开发者确定要调用为UI 442创建的页面上的哪个UI部件(比如按钮)。
通用部分中的第二行也包括三个图标。第二行中的第一图标654是“调用模块函数”图标。这使开发者可以在为UI 442创建的页面的Java脚本中定义其自己的函数。然后,调用模块函数图标允许开发者创建调用这些函数的代码。第二行中的第二图标655是“调用REST端点”图标。该动作允许开发者创建调用REST端点以更新数据或请求数据的代码。
通用部分650中的第三行也包括两个图标。第三行中的第一图标657是“触发(fire)通知”图标。它可以用于将消息添加到正在使用动作链实现的页面上。第三行中的第二图标658是“重置变量”图标。它可以被用于将状态的值重置回其默认值。
逻辑部分660包括三个图标661-663。本部分使得能够在动作链中创建逻辑流。逻辑部分中的第一图标661表示针对“如果(if)”条件的动作。逻辑部分中的第二图标662表示切换(switch)。逻辑部分中的第三图标663表示返回(return)。第三图标663可以被用在动作链的末尾以返回特定的结果或值。当从另一个动作链调用动作链时,第三图标663是有用的。
导航部分670包括三个图标671-673。导航部分中的第一图标671使开发者能够创建导航到前一页面的代码。在这种情况下,前一页面将是客户端计算机450的浏览器历史记录中的前一页面。导航部分中的第二图标672使开发者能够创建在运行时导航到客户端应用250中的页面的代码。例如,该图标672可以被用于创建从客户端应用UI 442的费用报告页面导航到客户端应用UI 442的员工页面的计算机可执行代码。导航部分中的第三图标673使得开发者能够创建导航到没有在当前正在执行的客户端应用450中的URL的代码。
通过选择表示工件(artifacts)(诸如web应用、页面和动作链之类)的选项卡,可以将动作与容器阶段相关联;然后在页面内,开发者可以转到设置面板。图7描绘了根据一个实施例的设置面板页面700的屏幕截图。
图8描绘了根据一个实施例的用于将生命周期事件绑定到用户界面部件的web页面800。开发者可以通过从页面800的屏幕快照中描述的列表810中选择生命周期事件(诸如“beforeEnter”801)来绑定生命周期事件。
图9描绘了根据一个实施例的用于生成验证代码的web页面900。开发者可以使用页面900来生成代码,该代码对当正在被创建的客户端应用的用户界面442中执行页面时允许用户输入到该页面中的内容进行验证。用户可以选择选项901来输入验证代码。
图10描绘了根据一个实施例的用于选择动作链的web页面1000。开发者可以对响应于从web页面800(图8)中选择的生命周期事件而要被调用的动作链进行选择。例如,页面1000描绘了开发者可以在页面动作链选项卡1002下选择的myActionChain(我的动作链)1001。页面1000还提供应用动作链选项卡1003。
图11描绘了根据一个实施例的web页面1100,开发者可以使用该web页面来映射他们想要用于该动作链的输入参数。例如,开发者可以点击出现在myActionChain 1103下方的“input Parameters”(输入参数)1101,以将输入参数映射到其所选择的动作链,该动作链被图示为在字段1101(图11)和1001(图10)上方的myActionChain。
参考页面1100,动作链具有可以在动作链ID字段1102中被指定的标识符(ID)。
图12描绘了根据一个实施例的不熟练的开发者可以用来将UI部件绑定到部件事件的web页面1200。例如,开发者可以将UI部件从左侧的托盘1210拖动到中间的窗格1220中。在这个示例中,被拖动的UI部件是按钮1221。如果开发者选择图12中描绘的动作选项卡1230,则作为响应,将显示事件列表。开发者可以选择事件之一以绑定到中间窗格1220中显示的UI部件1221。
此外,开发者可以点击UI部件(例如按钮)的表示1221,以显示该UI部件的属性。
图13描绘了根据一个实施例的包括事件列表1310的web页面1300。如果开发者选择页面1200中描绘的动作选项卡1230,则作为响应,将显示如图13中所绘出的事件列表1310。开发者可以选择图13中显示的事件之一,以绑定到UI部件(诸如显示在中间窗格1220中的按钮1221的表示)。
此外,开发者可以点击UI部件的表示(诸如按钮1221),以显示该UI部件的属性。
如果开发者点击图12的页面1200中的动作选项卡1230,则作为响应,显示图13中描绘的事件列表1310。开发者可以选择显示列表1310中的事件之一以绑定到UI部件,在这个示例中,该UI部件是开发者先前从web页面1200(图12)中选择的按钮1221。
事件列表1310包括诸如以下的事件:当非主定点设备按钮在元素上被按下并被释放时触发的解除(unclick)、当元素失去键盘焦点时触发的模糊、当主定点设备按钮在元素上被按下并被释放时触发的点击、当元素的相关联上下文菜单在它被显示之前被调用时触发的上下文菜单(contextmenu)、当定点设备按钮在元素上被点击两次时触发的双击(也称为“dblclick”)、在拖动元素或文本选择时连续触发的拖动、当针对元素或文本选择的拖动结束时触发的拖动结束(无论是由于释放了定点按钮还是取消了拖动操作)、以及当被拖动的元素或文本选择被移动到有效拖放目标上时触发的拖放进入(dragenter)。
参考图4,虽然在为客户端应用450的用户界面452创建按钮的上下文中图示了工具的用户界面411,但是实施例很好地适合于其它类型的用户界面控件,诸如下拉菜单、选项卡、菜单、单选按钮、列表等。如本文所讨论的,作为用户与用户界面控件交互的结果,动作链可以被直接或间接触发。
图14描绘了根据一个实施例的用于指定输入参数1401的属性检查器1400。属性检查器1400使用户能够提供标识符(ID)1404和页面1405。
对于开发者可能想要在正在创建的应用的多个页面中使用的动作链。例如,当导航到起始页面时,开发者可以创建应用范围的动作链。
当开发者将Navigate to Page(导航到页面)动作添加到动作链640(图6)、1403(图14)时,开发者可以指定输入参数1401(图14)以指定记录的id。为了将Navigate toPage动作添加到动作链,开发者可以:
1.打开页面的动作编辑器。
2.点击列表中的动作链以在动作链编辑器中将其打开。
3.将Navigate to Page图标672(图6)从动作托盘拖动到动作链640(图6)、1403(图14)中。
开发者可以将该动作拖动到动作链640(图6)、1403(图14)中的Add(添加)图标(+)681(图6)、1402(图14)上,并且通常该动作将是链中的最终动作。当开发者将Navigate toPage动作添加到动作链时,属性检查器1400在编辑器中打开。
图15描绘了根据一个实施例的具有选择页面按钮1501的属性检查器1500。
4.点击属性检查器1500中的Select Page(选择页面)按钮1501。
图16描绘了根据一个实施例的选择页面对话框1600,其显示了开发者正在创建的应用440(图4)中的页面的列表1601。响应于开发者点击属性检查器1500(图15)中的选择页面按钮1501,显示对话框1600。
5.在列表1601中选择页面。点击Select(选择)按钮1602。如果开发者选择的页面具有输入变量,则开发者可以将页面变量映射到该动作的Input Parameter(输入参数)。
图17描绘了根据一个实施例的用于指定动作的名称的属性检查器1700。
6.在属性检查器1700中的Id字段1701中键入动作的名称。当在选择画布(canvas)上的动作后,开发者可以在属性检查器中编辑该动作的属性。
7.可选:如果页面使用输入参数,则点击Input Parameters(输入参数)的箭头图标(+)1702,并且将输入值的页面变量映射到动作的参数。点击Save(保存)。
图18描绘了根据一个实施例的将变量映射到参数对话框1800。在将变量映射到参数对话框1800中,开发者可以通过将Sources(源)面板1810中的变量拖动到Target(目标)面板1820中的参数上来将源映射到目标。开发者可以点击参数名称以查看所映射的变量的表达式。线1830表示在源面板1810中的myContactsID和目标面板1820中的contactID之间创建的映射。虽然所描绘的映射是在myContactsID和contactID之间,但是实施例非常适合于将其它变量映射到其它参数。
如果不存在合适的变量,则开发者可以在Variables(变量)编辑器中创建变量,并且以后编辑动作。
8.可选:指定可以被用于动作的任何其它参数。
关于导航到页面动作(参见图6中的图标672):该动作的动作模块是“vb/action/builtin/navigateToPageAction”。该动作将导航客户端应用的UI 442(图4),并执行任何参数传递来激活该页面。根据一个实施例,用于该动作的参数如下:
参数:
如果导航期间没有错误,则这返回结果“成功”。如果导航成功完成,则返回动作结果true,否则返回false。如果存在错误,则返回结果“失败”并在有效负载中包含错误。
方法的图示
图19描绘了根据一个实施例的用于提供状态管理持久化的方法的流程图。这里描述图19和从属权利要求的方法。这是为了状态管理持久化。这些权利要求在本申请的底部。
在1910处,方法1900开始。
在1920处,在设计时工具的用户界面处接收容器的层次结构,该层次结构具有嵌套在一个或多个其它容器的内部的容器,其中这些容器中的每个容器包括web客户端应用的不同部分。
例如,不熟练的开发者可以将容器的层次结构200(图2)输入到设计时工具410的用户界面411中。容器的层次结构200中的每个容器以每个容器包括web客户端应用440的不同部分的方式被嵌套在一个或多个其它容器内部。
在1930处,在设计时工具处执行:将状态与容器的层次结构中的容器中的每个容器相关联。
例如,不熟练的开发者可以将变量321、351(图3)输入到工具的UI 411中,并且工具410(图4)可以将变量321、351(图3)与相应的容器310、340(图3)相关联。
在1940处,在设计时工具的用户界面处接收容器中的每个容器的生命周期。
例如,对于图2中描绘的容器中的每个容器,不熟练的开发者可以将生命周期323、353(图3)输入到设计时工具410的用户界面411(图4)中。
在1950处,通过设计时工具执行:创建用于web客户端应用的计算机可执行指令,该计算机可执行指令使得能够基于容器中的每个容器的相应生命周期根据层次结构创建和销毁容器中的每个容器的状态。
例如,为web客户端应用440创建计算机可执行指令441,该计算机可执行指令441使得基于容器中的每个容器的相应生命周期323、353根据层次结构200创建和销毁图2中描绘的容器中的每个容器的状态321、351,如本文所讨论的。
更具体而言,根据一个实施例,层次结构路径对应于用户可以输入到浏览器中以显示用于客户端应用440的用户界面的页面的URL。例如,参考图1、2和4,层次结构路径261对应于指定“/SaaSCloud/Financials/receipts”的URL 130。当用户在浏览器中输入URL130时,第一反斜杠100将使代码441中的计算机可执行指令启动应用容器210。URL 130的SaaSCloud部分101将使代码441中的计算机可执行指令启动SaaSCloud模块容器220;URL130的financials部分102将使代码441中的计算机可执行指令启动财务模块容器240;并且URL 130的receipts部分133将使代码441中的计算机可执行指令启动收据页面容器242并加载对应的收据页面。类似地,层次结构路径262对应于指定“/SaasCloud/HumanResources/Employee”的URL 120,并且层次结构路径263对应于指定“/SaaSCloud/Financials/ExpenseReport”的URL 110。
相应容器的状态是基于与容器中的每个容器相关联的生命周期来创建和销毁的。开发者可以使用工具410的设计时用户界面411来指定触发相应容器的状态的创建和销毁的生命周期事件。例如,“beforeEnter”生命周期事件可以触发费用报告页面容器241的状态351的创建,并且“beforeExit”生命周期事件可以触发费用报告页面容器241的状态351的销毁。触发状态的创建的生命周期事件对于多个容器而言可以是不同的。例如,一个容器的状态的创建可以由“beforeEnter”触发,而另一个容器的状态的创建可以由“Enter”触发。此外,触发状态的销毁的生命周期事件对于多个容器而言可以是不同的。
此外,相应容器状态的创建和销毁是根据层次结构路径执行的。例如,参考图1、2和4,假设用户将URL 110“/SaaSCloud/Financials/ExpenseReport”输入到与客户端应用440通信的计算机的浏览器中。反斜杠100将启动应用容器210。响应于开发者使用设计时用户界面411指定的生命周期事件,触发应用容器210的状态321的创建。URL 110的“SaaSCloud”部分101将启动SaaSCloud模块容器220。响应于开发者使用设计时用户界面411为SaaSCloud模块容器220指定的生命周期事件,触发容器220的状态321的创建。类似地,响应于开发者为财务模块容器240和费用报告页面容器241指定的生命周期事件,触发这些相应容器240、241的相应状态321、351的创建。现在假设用户在浏览器中输入URL 120“/SaasCloud/HumanResources/Employee”。将响应于开发者使用设计时用户界面411为这些相应的容器241、240指定的生命周期事件而触发费用报告页面容器241的状态351和财务容器240的状态321的销毁。然后,将响应于开发者为人力资源模块容器230和员工页面容器231指定的生命周期事件而触发这些相应的容器230、231的状态321、351的创建。由于这些相应的URL 120、110的层次结构路径262、263二者共享应用容器210和SaaSCloud容器220,因此容器210和220的状态将被保留。
容器可以访问包含该容器的容器的状态。例如,容器220可以访问容器210的状态。容器240可以访问容器220和210的状态。容器241可以访问容器240、220和210的状态。但是,容器不能访问不包含该容器的容器的状态。例如,240和241不能访问容器230和231的状态,反之亦然。
在1960处,在设计时工具处执行:基于与容器中的每个容器相关联的相应生命周期事件,向容器中的每个容器提供对该容器自身的状态以及包含该容器的容器的状态的访问。
例如,容器220可以访问容器210的状态。容器240可以访问容器220和210的状态。容器241可以访问容器240、220和210的状态。但是,容器不能访问不包含该容器的容器的状态。例如,容器240和241不能访问容器230和231的状态,反之亦然。
此外,容器可以基于它们相应的生命周期事件来访问这些状态。例如,如本文所讨论的,容器241可以访问容器241的状态以及包含容器241的容器的状态,直到发生开发者指定的生命周期事件,诸如“beforeExit”或“canExit”。
在1970处,该方法结束。
实施例提供了:在用户界面处接收第一容器的第一生命周期中的第一事件的指定;将第一事件与第一容器的状态的创建相关联;在用户界面处接收第二容器的第二生命周期中的第二事件的指定;以及将第二事件与第二容器的状态的创建相关联。
例如,实施例提供了:在用户界面411处接收第一容器241的第一生命周期353中的第一事件(诸如“beforeEnter”)的指定;将第一事件与第一容器的状态351的创建相关联;在用户界面处接收第二容器242的第二生命周期353中的第二事件(诸如“Enter”)的指定;以及将第二事件与第二容器的状态的创建相关联。触发状态的创建的生命周期事件对于多个容器而言可以是不同的。例如,一个容器的状态的创建可以由“beforeEnter”触发,而另一个容器的状态的创建可以由“Enter”触发。此外,触发状态的销毁的生命周期事件对于多个容器而言可以是不同的。
实施例提供了:其中第一事件和第二事件是不同类型的事件。继续该示例,第一事件可以是“beforeEnter”,其与第二事件“Enter”不同。这两个事件都可以触发状态的创建,但是针对不同的容器241、242。
实施例提供了:在用户界面处接收第一容器的第一生命周期中的第一事件的指定;将第一事件与第一容器的状态的销毁相关联;在用户界面处接收第二容器的第二生命周期中的第二事件的指定;以及将第二事件与第二容器的状态的销毁相关联。例如,实施例提供了:在用户界面411处接收第一容器241的第一生命周期353中的第一事件(诸如“beforeExit”)的指定;将第一事件与第一容器241的状态351的销毁相关联;在用户界面处接收第二容器242的第二生命周期353中的第二事件(诸如“canExit”)的指定;以及将第二事件与第二容器242的状态351的销毁相关联。“beforeExit”生命周期事件可以触发费用报告页面容器241的状态的状态销毁。而“canExit”生命周期事件可以触发收据页面242的状态销毁。
实施例提供了:其中第一事件和第二事件是不同类型的事件。继续该示例,“beforeExit”和“canExit”是两种不同类型的事件。
实施例提供了:响应于在web客户端应用的运行时期间从第一容器导航到第二容器,其中第一容器和第二容器都被包括在第三容器中,其中该导航触发第一容器的生命周期事件,销毁第一容器的状态;保留第三容器的状态;创建第二容器的状态;并且向第二容器提供对第三容器的被保留的状态的访问。
例如,实施例提供了:响应于在web客户端应用210的运行时期间从第一容器240导航到第二容器230,其中第一容器240和第二容器230都被包括在第三容器220中,其中导航触发第一容器240的生命周期事件,销毁第一容器240的状态;保留第三容器220的状态;创建第二容器230的状态;以及向第二容器230提供对第三容器240的被保留的状态的访问。这仅仅是一个示例,另一个示例是第一容器220、第二容器250和第三容器应用210。
实施例提供了将容器与统一资源定位符(URL)模式的各个部分相关联,其中URL模式的每个部分与容器之一相关联。如这里所讨论的,图2描绘了与图1所绘出的URL模式的各部分相关联的容器。
实施例提供了:其中URL模式的各部分中的每个部分都维持生命周期中的相应生命周期。例如,生命周期323、353(图3)与URL 110(图1)的每个部分100、101、102、103相关联。生命周期与每个URL的每个部分相关联。
实施例提供了:根据与URL模式相关联的层次结构路径来执行容器的子集;基于URL模式创建容器的变量;以及基于URL模式销毁容器的变量。
为了说明起见,假设层次结构路径为263。与该层次结构路径263相关联的容器的子集为241、240、220和210。随着执行沿着层次结构路径263从外向内进行,将为每个容器创建变量。例如,基于URL 110为210、然后220、然后240、并且然后241创建变量。当执行基于URL 110沿着层次结构路径263从内向外进行时,将为每个容器销毁这些变量。例如,为241、240、220,并且然后为210销毁变量。
实施例提供了:根据特定容器的层次结构路径,为该特定容器提供对特定容器的变量以及包含该特定容器的容器的变量的访问。例如,容器242可以访问容器242的变量以及容器240、220和210的变量(图2)。
图20描绘了根据一个实施例的用于路由器配置的流程图。
在2010处,该方法开始。
在220处,提供统一资源定位符(URL)模式。根据一个实施例,层次结构路径与用户可以输入到浏览器中以在客户端应用440的用户界面中显示页面的URL对应。例如,参考图1和图2,层次结构路径263对应于URL 110;层次结构路径262对应于URL 120;并且层次结构路径261对应于URL 130。更具体而言,当用户在浏览器中输入URL 130时,反斜杠100将使代码441中的计算机可执行指令启动应用容器210;URL 130的SaaSCloud部分101将使代码441中的计算机可执行指令启动SaaSCloud模块容器220,URL 130的financials部分102将使代码441中的计算机可执行指令启动财务模块容器240;并且URL 130的receipts部分133将使代码441中的计算机可执行指令启动收据页面容器242并加载对应的收据页面。
在2030处,基于URL模式创建应用的相关部分。例如,参考图1和图2,假设为了说明起见,用户将URL 110输入到与客户端应用440通信的计算机的浏览器中。浏览器加载并显示与URL 110对应的费用报告页面。代码441使用沿着与URL 110对应的层次结构路径263的容器的生命周期来确定何时创建和销毁用于这些容器的变量。
例如,当响应于浏览器检测到反斜杠100而进入应用440时,创建应用容器210的变量;当响应于浏览器检测到URL 110的SaaSCloud 101部分而进入SaaSCloud模块时,创建SaaSCloud模块容器220的变量;当浏览器检测到URL 110的financials部分102时,创建财务模块容器240的变量;并且当浏览器检测到URL 110的expense reports部分103时,创建费用报告页面容器242的变量。
在2040处,基于URL模式销毁应用440的相关部分。例如,假设用户在与客户端应用440(图4)通信的计算机的浏览器中输入URL 120(图1)。参考图2,收据页面容器242和财务模块240的变量被销毁。人力资源容器230和员工页面容器231的变量被创建。
根据一个实施例,每个容器具有它们自己的相应生命周期。例如,可以响应于与容器相关联的生命周期的各个阶段来创建和销毁变量。例如,可以响应于页面的生命周期的“beforeEnter”阶段而创建该页面的变量,并且然后响应于同一页面的生命周期的“beforeExit”阶段而销毁该变量。
在2050处,用于路由器配置的方法结束。
实施例提供了:将容器与URL模式的各部分相关联,其中URL的部分中的每个部分具有单独的容器。例如,如本文所讨论的,图2中描绘的容器中的每个容器与图1中描绘的URL模式的部分相关联。
实施例提供了:为容器中的每个容器提供相应的层次结构路径,该层次结构路径由包含特定容器的容器和包含该特定容器的容器的顺序定义。例如,图2中描绘的容器中的每个容器与层次结构路径261-267相关联。在具体示例中,容器241的层次结构路径263由包括容器241的容器240、220、210以及包括特定容器241的这些容器的顺序来定义。在这个图示中,容器的顺序是容器241在240的内部,容器240在220的内部,容器220在210的内部。
实施例提供了:向特定容器提供对该特定容器的变量和沿着特定容器的层次结构路径的容器的变量的访问。例如,容器241可以访问其自己的变量以及容器240、220和210的变量。容器240可以访问容器240的变量以及容器220和210的变量。但是容器240不能访问例如241、242、230、231的变量,以此类推。
在实施例中,生命周期包括阶段,其中阶段包括“beforeEnter”页面、“enter”页面、页面是“interactable”、意味着页面可以退出的“canExit”,以及在退出页面之前发生的“beforeExit”阶段。
在实施例中,阶段是互斥的。换句话说,一次只能操作容器的生命周期的一个阶段。
在实施例中,阶段中的至少一个阶段是用于启动动作链的事件。
实施例提供了:在设计时工具处,接收定义应用的一部分的用户输入;以及基于该输入,为生成用于该应用的计算机可执行指令。例如,用户输入可以通过设计时工具410的UI 411接收,并且该输入可以被用于生成计算机可执行指令441。
实施例提供了:在应用的运行时期间执行所生成的计算机可执行指令。例如,所生成的计算机可执行指令441在应用440的运行时间期间执行。
此外,如可以看到的,变量的销毁和创建与层次结构路径相关。例如,当执行从层次结构路径的最外端移动到最内端时,将为容器创建变量,当执行从层次结构路径的最内端移动到最外端时,将为容器销毁变量。
参考图1和图2,与容器对应的计算机可执行代码可以访问该容器的变量以及沿着该容器的层次结构路径的容器的变量。例如,收据页面容器242可以访问其自己的变量以及沿着层次结构路径261的容器240、220和210的变量。
根据一个实施例,容器的生命周期与URL中与该容器对应的部分相关联。例如,收据页面容器242的生命周期与URL 110的expense reports部分103相关联;财务模块容器240的生命周期与URL 110的financials部分102相关联;以此类推。
用于路由器配置的用户界面是工具的用户界面411的一部分。路由器配置用户界面在设计时期间生成计算机可执行指令,这些指令成为代码441的一部分,并且代码441在客户端应用的运行时期间执行。
参考图6,导航部分670下方的第一图标671和第二图标672以本文讨论的方式可以被用于路由器配置。
动作链是开发者可以创建以定义部件的行为的一系列动作。动作链是由事件触发的,诸如点击、onValueChanged和开发者添加到页面部件的焦点。如图6所示,在“ActionsEditor(动作编辑器)”中创建的动作链只能在正在创建的特定页面的上下文中使用。
系统的图示
图21描绘了根据一个实施例的系统2100。
页面生命周期管理器2101根据用户当前可见的应用UI来初始化和销毁状态的部分。当它销毁状态时,它可以将状态保存到持久性存储库(如果已配置)中,并且当还原状态时,它可以从持久性存储库中加载状态。
持久性存储库2102是应用状态在用户对应用的调用之间被持久化的地方(盘上)。
状态2103提供了由应用活跃使用的状态(变量)。
部件2104提供包括用户与之交互的按钮、文本、图像等的UI。
动作链2105提供驱动应用的逻辑的核心流程(进程)。
REST服务2106提供外部REST API。
计算机/设备2107提供正在控制UI的浏览器或设备。
以下是关于系统2100中描绘的实体2101-2107的操作2111-2121的流程的描述:
操作2111:持久性存储库被用于初始化和保存当用户正在活跃地使用应用之间的状态。
操作2112:状态更改被反映在部件上(例如,绑定到某个状态的文本字段)。
操作2113:状态更改可以由部件触发。例如,文本输入直接更新状态。
操作2114:用户从他们的设备507与UI交互。
操作2115:动作链可以调用UI上的方法,诸如让地图缩放。
操作2116:UI可以触发动作链以执行逻辑(即,按钮点击)。
操作2117:动作链被用于调用REST服务,以及通过这些服务使数据进入和离开系统。
操作2118:页面生命周期管理器随着用户导航应用并显示不同的UI而初始化和销毁状态。
操作2119:页面生命周期管理器可以响应于导航而触发动作链。例如,与设备2107交互的用户可以使页面被进入,并且这可以触发动作链以响应于它而工作。
操作2120:动作链可以引起导航,例如激活UI的不同部分。
根据一个实施例,由系统2100创建的用户界面可以在客户端计算机/设备2107的浏览器中执行。所创建的用户界面执行的客户端计算机/设备可以是与用于创建用户界面相同的客户端计算机/设备2107,或者可以是不同的客户端计算机/设备。所创建的用户界面可以在不同时间或同时在多个客户端计算机/设备上执行。
如本文中所讨论的,设计时工具被用于创建用户界面。根据一个实施例,JSON文件被创建,作为创建用户界面的一部分。JSON文件使用众所周知的通信方法传输到客户端计算机/设备的浏览器,并由运行时进行解释以执行。
关于推迟的状态改变,根据一个实施例,执行流程是:
动作链(通常通过2116)被调用。动作链经由2121对状态进行复制。当动作链完成时,它也通过2121将状态合并回去。
关于状态管理持久化,根据一个实施例,执行流程是:
当(通过2116和2120)进入一个UI时,页面生命周期管理器(2101)将初始化状态(2118),页面生命周期管理器可以引用持久性存储库(2111)来初始化该状态。
关于路由器配置,根据一个实施例,执行流程是:
当(通过2116和2120)进入一个UI时,页面生命周期管理器将根据所示的UI经由2118初始化状态。
根据一个实施例,路由器通过称为navigate to page(导航到页面)动作的动作在图21所示的动作链2105中实现。路由器使用URL来将容器的变量(也称为“状态”)的关系映射到URL的各部分,如本文所讨论的。
示例计算机环境
图22是根据一个实施例的可用于实现本文描绘的实施例的系统2200和随附的计算环境的总体框图。根据本发明的实施例,示例系统2200可以支持或运行关于图21讨论的各种硬件和/或软件模块以及相关联的方法。注意到某些实施例可以使用一个或多个独立应用(例如,驻留在用户设备中)和/或使用客户端侧代码和服务器侧代码的组合而实现的一个或多个基于web的应用来实现。
通用系统2200包括用户设备2260-2290,包括台式计算机2260、笔记本计算机2270、智能电话2280、移动电话2285和平板电脑2290。通用系统2200可以与能够显示和导航网页或其它类型的电子文档和UI和/或执行应用的任何类型的用户设备(诸如瘦客户机计算机、启用互联网的移动电话、移动互联网接入设备、平板电脑、电子书或个人数字助理)接口。虽然系统2200被示为具有五个用户设备,但是可以支持任意数量的用户设备。
web服务器2210被用来处理来自web浏览器和独立应用对网页、电子文档、企业数据或其它内容以及来自用户计算机的其它数据的请求。web服务器2210还可以提供与企业操作相关的数据的推送数据或聚合内容(诸如RSS馈送)。
应用服务器2220操作一个或多个应用。这些应用可以被实现为一个或多个以任何编程语言编写的脚本或程序,诸如Java、C、C++、C#或任何脚本语言(诸如JavaScript或ECMAScript(欧洲计算机制造商协会脚本)、Perl、PHP(超文本预处理器)、Python、Ruby或TCL(工具命令语言))。可以使用库或应用框架(诸如Rails、Enterprise JavaBeans或.NET)构建应用。web内容可以使用HTML(超文本标记语言)、CSS(层叠样式表)和其它web技术(包括模板语言和分析器)创建。
在应用服务器2220上运行的数据应用适于处理输入数据和用户计算机请求,并且可以从数据存储设备或数据库2230存储或检索数据。数据库2230存储由数据应用创建和使用的数据。在实施例中,数据库2230包括适于响应于SQL格式命令或其它数据库查询语言而存储、更新并检索数据的关系数据库。其它实施例可以使用非结构化数据存储体系架构和NoSQL(不仅是SQL)数据库。
在实施例中,应用服务器2220包括能够执行程序或脚本的一个或多个通用计算机。在实施例中,web服务器2210被实现为在一个或多个通用计算机上运行的应用。web服务器2210和应用服务器2220可以被组合和在相同的计算机上执行。
电子通信网络2240-2250启用用户计算机2260-2290、web服务器2210、应用服务器2220和数据库2230之间的通信。在实施例中,网络2240-2250还可以包括任何形式的电或光通信设备,包括有线网络2240和无线网络2250。网络2240-2250还可以结合一个或多个局域网(诸如以太网)、广域网(诸如互联网);蜂窝载波数据网络;以及虚拟网络(诸如虚拟专用网络)。
该系统2200是用于执行根据本发明实施例的应用的一个示例。在另一个实施例中,web服务器2210、应用服务器2220以及可选地数据库2230可以被组合成单个服务器计算机应用和系统。在进一步的实施例中,可以使用虚拟化和虚拟机应用来实现web服务器2210、应用服务器2220、和数据库2230中的一个或多个。
在还有的其它实施例中,web和应用服务功能的全部或一部分可以被集成到在每个用户计算机上运行的应用中。例如,用户计算机上的JavaScript应用可以被用来检索或分析数据并显示应用的部分。
在特定示例实施例中,用户计算设备2260-2290运行例如用于显示用户界面的浏览器。可以从图22的客户端计算设备(诸如台式计算机2260、笔记本计算机2270、智能电话2280、移动电话2285、平板电脑2290)和/或其它计算设备查看用户界面。
在特定示例实施例中,图22的台式计算机2260、笔记本计算机2270、智能电话2280、移动电话2285、平板电脑2290的浏览器连接到如图22中所示的由有线网络2240和/或无线网络2250表示的互联网,以访问如由图21的模块所表示的一个或多个网络耦合的服务器、数据库和/或相关联的基于云的功能。例如,一个或多个实体2101、2104、2105和2106可以驻留在应用服务器2220上。客户端计算机/设备2107可以被实现为用户计算设备2260-2290中的一个或多个。如图22中所示的一个或多个数据库2230可以用于托管与图21相关联的数据,诸如持久性存储库2102和状态2103。可以将用于图21的网络实现为网络2240。例如,根据一个实施例,网络2240可以用于在客户端计算机/设备2107与部件2104之间通信。
参考图4和图22,网络470可以是无线网络2250、有线网络2240,或者可以包括无线网络2250和有线网络2240。硬件存储器420和/或数据库430可以被实现为数据存储设备/数据库2230。一个或多个应用440、450、460和工具410可以驻留在一个或多个web服务器2210或应用服务器2220上并由其执行。UI 411、442的页面可以由在用户计算设备2260-2290中执行的浏览器加载和显示。客户端应用440可以在工具410中执行或由其执行。工具410和应用440可以在同一计算机上或在彼此通信的单独计算机上执行。
图23是可用于实现本文描述的实施例的计算设备2300的总体框图。虽然图23的计算设备2300可以被描述为执行本文的实施例中的步骤中的一个或多个步骤,但是在其他实施例中,计算设备2300的任何合适的部件或部件的组合或者与系统2300相关联的任何合适的一个或多个处理器都可以促进执行所描述的步骤。
图23图示了可用于本文描述的实现方式的示例计算系统2300的框图。例如,计算系统2300可以被用来实现图22的用户设备2260-2290和服务器设备2210、2220以及执行本文描述的方法实现方式。在一些实现方式中,计算系统2300可以包括处理器2302、操作系统2304、存储器2306和输入/输出(I/O)接口2308。在各种实现方式中,处理器2302可以被用来实现本文描述的各种功能和特征,以及执行本文描述的方法实现方式。虽然处理器2302被描述为执行本文描述的实现方式,但系统2300的任何合适的部件或部件的组合或者与系统2300或任何合适系统相关联的任何合适的一个或多个处理器都可以执行所描述的步骤。本文描述的实现方式可以在用户设备上、服务器上或两者的组合上执行。
计算设备2300还包括软件应用2310,该软件应用可以被存储在存储器2306上或者任何其它合适的存储位置或计算机可读介质上。软件应用2310提供使处理器2302能够执行本文描述的功能和其它功能的指令。计算系统2300的部件可以由一个或多个处理器或硬件设备的任意组合以及硬件、软件、固件等等的任意组合来实现。
为了便于说明,图23为硬件处理器2302、操作系统2304、硬件存储器2306、I/O接口2308和软件应用2310中的每一个示出了一个框。这些框2302、2304、2306、2308和2310可以表示多个处理器、操作系统、存储器、I/O接口和软件应用。在各种实现方式中,计算系统2300可以不具有示出的所有部件和/或可以具有包括其它类型的部件的其它元件,代替本文示出的部件或作为其附加。
计算机可读介质和装置
除非另有说明,否则可以使用例如驻留在计算机系统或类似设备的处理器可读的非暂态存储设备中的处理器可读指令来实现本文描述的任何一个或多个实施例。非易失性处理器可读存储设备可以是可以在其上存储指令的任何种类的物理存储器。非易失性处理器可读存储设备的示例包括但不限于盘、光盘(CD)、数字多功能设备(DVD)、只读存储器(ROM)、闪存等。如上所述,在一个实施例中,本发明的各个实施例的某些处理和操作被实现为驻留在计算机系统的处理器可读的非暂态存储设备内并由计算机系统的一个或多个处理器执行的一系列处理器可读指令(例如,软件程序)。当被执行时,指令使计算机系统实现本发明的各种实施例的功能。例如,指令可以由处理器执行。处理器是与计算机系统相关联的硬件处理器,诸如中央处理单元。非易失性处理器可读存储设备是硬件存储器,并且一个或多个处理器是硬件处理器。根据一个实施例,一种处理器可读的非暂态存储设备是有形的物理设备。
结论
可以使用任何合适的编程语言来实现特定实施例的例程,包括C、C++、Java、汇编语言等等。可以采用不同的编程技术,诸如过程式或面向对象。例程可以在单个处理设备或多个处理器上执行。虽然步骤、操作或计算可以以具体次序呈现,但是这个次序在不同的特定实施例中可以改变。在一些特定实施例中,在本说明书中顺序示出的多个步骤可以被同时执行。
特定实施例可以在由指令执行系统、装置、系统或设备使用或与其结合使用的计算机可读存储介质中实现。特定实施例可以以软件或硬件中的控制逻辑的形式或两者的组合来实现。当由一个或多个处理器执行时,控制逻辑可以是可操作的,以执行在特定实施例中描述的内容。例如,诸如硬件存储设备之类的非暂态介质可以被用于存储控制逻辑,控制逻辑可以包括可执行指令。
可以通过使用经编程的通用数字计算机、通过使用专用集成电路、可编程逻辑器件、现场可编程门阵列、光学、化学、生物、量子或纳米工程系统等来实现特定实施例。可以使用其他部件和机制。一般而言,特定实施例的功能可以通过本领域已知的任何手段来实现。可以使用分布式的、联网的系统、部件和/或电路。可以利用云计算或云服务。数据的通信或传送可以是有线的,无线的或通过任何其它手段。
还将认识到的是,图/附图中描绘的元件中的一个或多个也可以以更分离或更集成的方式实现,或者甚至在某些情况下被移除或渲染为不可操作,如根据特定应用有用的。实现可以存储在机器可读介质中的程序或代码以允许计算机执行上述任何方法也在本发明的精神和范围内。
“处理器”包括处理数据、信号或其它信息的任何合适的硬件和/或软件系统、机制或组件。处理器可以包括具有通用中央处理单元、多个处理单元、用于实现功能的专用电路系统或其它系统的系统。处理不必限于地理地点或具有时间限制。例如,处理器可以“实时”、“离线”、以“批处理模式”等执行其功能。可以通过不同的(或相同的)处理系统在不同的时间和不同的地点执行处理的部分。处理系统的示例可以包括服务器、客户端、最终用户设备、路由器、交换机、联网存储装置等。计算机可以是与存储器通信的任何处理器。存储器可以是任何合适的处理器可读存储介质,诸如随机存取存储器(RAM)、只读存储器(ROM)、磁盘或光盘、或其它适合于存储指令以由处理器执行的非暂态介质。
如在本文的描述中以及贯穿随后的权利要求所使用的,除非上下文另有明确说明,否则“一”、“一个”和“该”包括复数的所指对象。而且,如在本文的描述中以及贯穿随后的权利要求所使用的,除非上下文另有明确说明,否则“在……中”的含义包括“在……中”和“在……上”。
因此,虽然已经描述了特定的实施例,但是在前述公开内容中预期有修改、各种改变和替换的余地(latitude),并且将认识到的是,在一些情况下,特定实施例的一些特征将在没有其它特征的对应使用的情况下被采用,而不脱离所阐述范围和精神。因此,可以做出许多修改,以便使特定的情形或材料适应本质的范围和精神。
Claims (30)
1.一种处理器可读的非暂态存储设备,存储指令,所述指令在由处理器执行时,执行提供状态管理持久化的方法,所述方法包括:
在设计时工具的用户界面处,接收容器的层次结构,所述容器的层次结构具有嵌套在第二容器内部的第一容器,其中所述层次结构中的容器中的每个容器包括web客户端应用的不同可执行部分;
在所述设计时工具处执行:将状态与容器的所述层次结构中的容器中的每个容器相关联;
在所述设计时工具的所述用户界面处,接收所述层次结构中的容器中的每个容器的生命周期,其中第一容器和第二容器具有所述生命周期中的不同生命周期;
通过所述设计时工具执行:创建用于所述web客户端应用的计算机可执行指令,所述计算机可执行指令提供对与所述层次结构中的容器中的每个容器相关联的状态的创建和销毁,所述容器是根据一顺序以及所述生命周期的生命周期事件来创建和销毁的,其中所述层次结构中的容器沿着容器的所述层次结构的路径按照所述顺序布置,并且其中所述生命周期中的每个生命周期对应于所述层次结构中的容器之一;
在所述设计时工具处执行:基于与所述层次结构中的第一容器和第二容器对应的生命周期事件,向第一容器提供对第一容器的状态的访问,向第二容器提供对第二容器的状态的访问,并且向第一容器提供对第二容器的状态的访问,其中容器的所述层次结构包括位于第一容器和第二容器之外的第三容器,并且其中第一容器和第二容器不访问第三容器的状态;以及
在所述web客户端应用的运行时期间,根据所述顺序和生命周期事件,创建和销毁所述层次结构的容器。
2.如权利要求1所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的创建相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的创建相关联。
3.如权利要求2所述的处理器可读的非暂态存储设备,其中,第一事件和第二事件是不同类型的事件。
4.如权利要求1所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的销毁相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的销毁相关联。
5.如权利要求4所述的处理器可读的非暂态存储设备,其中,第一事件和第二事件是不同类型的事件。
6.如权利要求1所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
响应于在所述web客户端应用的运行时期间从第四容器导航到第五容器,其中第四容器和第五容器二者都被包含在第六容器中,其中所述导航触发第四容器的生命周期事件,
销毁第四容器的状态;
保留第六容器的状态;
创建第五容器的状态;以及
向第五容器提供对第六容器的被保留的状态的访问。
7.如权利要求1所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
将容器与统一资源定位器URL模式的部分相关联,其中所述URL模式的每个部分与容器之一相关联。
8.如权利要求7所述的处理器可读的非暂态存储设备,其中,所述URL模式的所述部分中的每个部分维持生命周期中的相应生命周期。
9.如权利要求7所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
根据与所述URL模式相关联的层次结构路径,执行容器的子集,其中所述层次结构的所述路径是所述层次结构路径中的一个;
基于所述URL模式,创建容器的所述子集的变量;以及
基于所述URL模式,销毁容器的所述子集的变量。
10.如权利要求9所述的处理器可读的非暂态存储设备,其中,所述方法还包括:
向特定容器提供对所述特定容器的变量以及根据所述特定容器的层次结构路径的包含所述特定容器的容器的变量的访问。
11.一种提供状态管理持久化的方法,所述方法包括:
在设计时工具的用户界面处,接收容器的层次结构,容器的所述层次结构具有嵌套在第二容器内部的第一容器,其中所述层次结构中的容器中的每个容器包括web客户端应用的不同可执行部分;
在所述设计时工具处执行:将状态与容器的所述层次结构中的容器中的每个容器相关联;
在所述设计时工具的所述用户界面处,接收所述层次结构中的容器中的每个容器的生命周期,其中第一容器和第二容器具有所述生命周期中的不同生命周期;
通过所述设计时工具执行:创建用于所述web客户端应用的计算机可执行指令,所述计算机可执行指令提供对与所述层次结构中的容器中的每个容器相关联的状态的创建和销毁,所述容器是根据一顺序以及所述生命周期的生命周期事件来创建和销毁的,其中所述层次结构中的容器沿着容器的所述层次结构的路径按照所述顺序布置,并且其中所述生命周期中的每个生命周期对应于所述层次结构中的容器之一;
在所述设计时工具处执行:基于与所述层次结构中的第一容器和第二容器对应的生命周期事件,向第一容器提供对第一容器的状态的访问,向第二容器提供对第二容器的状态的访问,并且向第一容器提供对第二容器的状态的访问,其中容器的所述层次结构包括位于第一容器和第二容器之外的第三容器,并且其中第一容器和第二容器不访问第三容器的状态;以及
在所述web客户端应用的运行时期间,根据所述顺序和生命周期事件,创建和销毁所述层次结构的容器。
12.如权利要求11所述的方法,其中,所述方法还包括:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的创建相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的创建相关联。
13.如权利要求12所述的方法,其中,第一事件和第二事件是不同类型的事件。
14.如权利要求11所述的方法,其中,所述方法还包括:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的销毁相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的销毁相关联。
15.如权利要求14所述的方法,其中,第一事件和第二事件是不同类型的事件。
16.如权利要求11所述的方法,其中,所述方法还包括:
响应于在所述web客户端应用的运行时期间从第四容器导航到第五容器,其中第四容器和第五容器二者都被包含在第六容器中,其中所述导航触发第四容器的生命周期事件,
销毁第四容器的状态;
保留第六容器的状态;
创建第五容器的状态;以及
向第五容器提供对第六容器的被保留的状态的访问。
17.如权利要求11所述的方法,其中,所述方法还包括:
将容器与统一资源定位器URL模式的部分相关联,其中所述URL模式的每个部分与容器之一相关联。
18.如权利要求17所述的方法,其中,所述URL模式的所述部分中的每个部分维持生命周期中的相应生命周期。
19.如权利要求17所述的方法,其中,所述方法还包括:
根据与所述URL模式相关联的层次结构路径,执行容器的子集,其中所述层次结构的所述路径是所述层次结构路径中的一个;
基于所述URL模式,创建容器的所述子集的变量;以及
基于所述URL模式,销毁容器的所述子集的变量。
20.一种提供状态管理持久化的系统,包括:
一个或多个处理器;以及
处理器可读的非暂态存储设备,存储指令,所述指令在由所述一个或多个处理器执行时,执行以下操作:
在设计时工具的用户界面处,接收容器的层次结构,容器的所述层次结构具有嵌套在第二容器内部的第一容器,其中所述层次结构中的容器中的每个容器包括web客户端应用的不同可执行部分;
在所述设计时工具处执行:将状态与容器的所述层次结构中的容器中的每个容器相关联;
在所述设计时工具的所述用户界面处,接收所述层次结构中的容器中的每个容器的生命周期,其中第一容器和第二容器具有所述生命周期中的不同生命周期;
通过所述设计时工具执行:创建用于所述web客户端应用的计算机可执行指令,所述计算机可执行指令提供对与所述层次结构中的容器中的每个容器相关联的状态的创建和销毁,所述容器是根据一顺序以及所述生命周期的生命周期事件来创建和销毁的,其中所述层次结构中的容器沿着容器的所述层次结构的路径按照所述顺序布置,并且其中所述生命周期中的每个生命周期对应于所述层次结构中的容器之一;
在所述设计时工具处执行:基于与所述层次结构中的第一容器和第二容器对应的生命周期事件,向第一容器提供对第一容器的状态的访问,向第二容器提供对第二容器的状态的访问,并且向第一容器提供对第二容器的状态的访问,其中容器的所述层次结构包括位于第一容器和第二容器之外的第三容器,并且其中第一容器和第二容器不访问第三容器的状态;以及
在所述web客户端应用的运行时期间,根据所述顺序和生命周期事件,创建和销毁所述层次结构的容器。
21.如权利要求20所述的系统,其中,所述指令还用于以下操作:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的创建相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的创建相关联。
22.如权利要求21所述的系统,其中,第一事件和第二事件是不同类型的事件。
23.如权利要求20所述的系统,其中,所述指令还用于以下操作:
在所述用户界面处,接收第四容器的第一生命周期中的第一事件的指定;
将第一事件与第四容器的状态的销毁相关联;
在所述用户界面处,接收第五容器的第二生命周期中的第二事件的指定;以及
将第二事件与第五容器的状态的销毁相关联。
24.如权利要求23所述的系统,其中,第一事件和第二事件是不同类型的事件。
25.如权利要求20所述的系统,其中,所述指令还用于以下操作:
响应于在所述web客户端应用的运行时期间从第四容器导航到第五容器,其中第四容器和第五容器二者都被包含在第六容器中,其中所述导航触发第四容器的生命周期事件,
销毁第四容器的状态;
保留第六容器的状态;
创建第五容器的状态;以及
向第五容器提供对第六容器的被保留的状态的访问。
26.如权利要求20所述的系统,其中,所述指令还用于以下操作:
将容器与统一资源定位器URL模式的部分相关联,其中所述URL模式的每个部分与容器之一相关联。
27.如权利要求26所述的系统,其中,所述URL模式的所述部分中的每个部分维持生命周期中的相应生命周期。
28.如权利要求26所述的系统,其中,所述指令还用于以下操作:
根据与所述URL模式相关联的层次结构路径,执行容器的子集,其中所述层次结构的所述路径是所述层次结构路径中的一个;
基于所述URL模式,创建容器的所述子集的变量;以及
基于所述URL模式,销毁容器的所述子集的变量。
29.如权利要求28所述的系统,其中,所述指令还用于以下操作:
向特定容器提供对所述特定容器的变量以及根据所述特定容器的层次结构路径的包含所述特定容器的容器的变量的访问。
30.一种包括用于执行如权利要求11-19中任一项所述的方法的构件的装置。
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762564946P | 2017-09-28 | 2017-09-28 | |
US201762564945P | 2017-09-28 | 2017-09-28 | |
US62/564,946 | 2017-09-28 | ||
US62/564,945 | 2017-09-28 | ||
US201862629523P | 2018-02-12 | 2018-02-12 | |
US201862629526P | 2018-02-12 | 2018-02-12 | |
US62/629,526 | 2018-02-12 | ||
US62/629,523 | 2018-02-12 | ||
US16/003,023 | 2018-06-07 | ||
US16/003,023 US11487514B2 (en) | 2017-09-28 | 2018-06-07 | State management persistence |
PCT/US2018/052475 WO2019067369A1 (en) | 2017-09-28 | 2018-09-24 | PERSISTENCE OF STATE MANAGEMENT |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111095207A CN111095207A (zh) | 2020-05-01 |
CN111095207B true CN111095207B (zh) | 2023-07-18 |
Family
ID=65806597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880060171.XA Active CN111095207B (zh) | 2017-09-28 | 2018-09-24 | 提供状态管理持久化的方法、系统、存储设备和装置 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11487514B2 (zh) |
EP (1) | EP3688582B1 (zh) |
JP (3) | JP7098721B2 (zh) |
CN (1) | CN111095207B (zh) |
WO (1) | WO2019067369A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10901728B1 (en) * | 2018-01-02 | 2021-01-26 | Sentry Insurance a Mutual Company | Enhancing DevOps workflows in enterprise information technology organizations |
US10838744B2 (en) * | 2018-12-04 | 2020-11-17 | Sap Se | Web component design and integration system |
US11232172B2 (en) | 2018-12-04 | 2022-01-25 | Sap Se | Collaborative web application and data system |
US10942723B2 (en) * | 2019-04-05 | 2021-03-09 | Sap Se | Format for multi-artefact software packages |
US10956140B2 (en) | 2019-04-05 | 2021-03-23 | Sap Se | Software installation through an overlay file system |
US10809994B1 (en) | 2019-04-05 | 2020-10-20 | Sap Se | Declarative multi-artefact software installation |
US11232078B2 (en) | 2019-04-05 | 2022-01-25 | Sap Se | Multitenancy using an overlay file system |
US11113249B2 (en) | 2019-04-05 | 2021-09-07 | Sap Se | Multitenant application server using a union file system |
CN112068810A (zh) * | 2020-08-27 | 2020-12-11 | 北京五八信息技术有限公司 | 一种活动事件的处理方法、装置、电子设备及存储介质 |
CN112052002B (zh) * | 2020-09-04 | 2024-01-26 | 游艺星际(北京)科技有限公司 | 基于声明式编程框架的用户界面生成方法、装置及介质 |
CN112100534B (zh) * | 2020-09-14 | 2024-09-13 | 腾讯科技(深圳)有限公司 | 页面分享中的信息处理方法、装置、介质及电子设备 |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4764867A (en) * | 1986-06-03 | 1988-08-16 | Banner Blue Software Incorporated | Display system and method for constructing and editing a hierarchical arrangement of information |
US5671360A (en) * | 1995-01-20 | 1997-09-23 | International Business Machines Corporation | Project management tool implementing authority for a people oriented work environment tool |
US20020174201A1 (en) * | 1999-09-30 | 2002-11-21 | Ramer Jon E. | Dynamic configuration of context-sensitive personal sites and membership channels |
US6944680B1 (en) * | 1999-10-12 | 2005-09-13 | Bea Systems, Inc. | Smart handle |
US20040205473A1 (en) * | 2000-01-27 | 2004-10-14 | Gwyn Fisher | Method and system for implementing an enterprise information portal |
US7130885B2 (en) * | 2000-09-05 | 2006-10-31 | Zaplet, Inc. | Methods and apparatus providing electronic messages that are linked and aggregated |
US7200627B2 (en) * | 2001-03-21 | 2007-04-03 | Nokia Corporation | Method and apparatus for generating a directory structure |
US7107595B2 (en) * | 2001-04-05 | 2006-09-12 | Hewlett-Packard Development Company, L.P. | Mechanism for mapping Java objects onto an LDAP repository |
US6976211B2 (en) * | 2001-07-23 | 2005-12-13 | International Business Machines Corporation | Method, system, and computer-program product for providing selective access to certain child nodes of a document object model (DOM) |
US7281248B2 (en) * | 2002-11-19 | 2007-10-09 | Microsoft Corporation | Virtualized and realized user interface controls |
US7853884B2 (en) * | 2003-02-28 | 2010-12-14 | Oracle International Corporation | Control-based graphical user interface framework |
JP4488700B2 (ja) | 2003-08-22 | 2010-06-23 | キヤノンソフトウェア株式会社 | プログラム生成装置およびプログラム生成方法およびプログラム |
US7607110B2 (en) * | 2003-10-23 | 2009-10-20 | Microsoft Corporation | Element persistent identification |
EP1738271A4 (en) * | 2004-03-15 | 2008-12-03 | Bungee Labs Inc | METHOD AND SYSTEM OF A DECLARANT COMPUTER PROGRAMMING LANGUAGE |
US8327290B2 (en) * | 2004-04-06 | 2012-12-04 | International Business Machines Corporation | User task interface in a web application |
US8145908B1 (en) * | 2004-10-29 | 2012-03-27 | Akamai Technologies, Inc. | Web content defacement protection system |
CN101176079B (zh) * | 2005-03-16 | 2011-12-07 | 航空照片技术有限公司 | 在服务器和客户机之间分配计算的方法以及分布式计算机系统 |
US7747677B2 (en) * | 2005-08-03 | 2010-06-29 | Bea Systems, Inc. | System and method for control tree optimization |
US20070067727A1 (en) * | 2005-09-22 | 2007-03-22 | Bea Systems, Inc. | System and method for control tree compression |
US7548789B2 (en) * | 2005-09-29 | 2009-06-16 | Rockwell Automation Technologies, Inc. | Editing lifecycle and deployment of objects in an industrial automation environment |
US7512578B2 (en) * | 2006-03-30 | 2009-03-31 | Emc Corporation | Smart containers |
US7831567B2 (en) * | 2007-04-20 | 2010-11-09 | Sap Ag | System, method, and software for managing information retention using uniform retention rules |
US8943520B1 (en) * | 2007-11-28 | 2015-01-27 | Sprint Communications Company L.P. | Uniform resource locator application initiation |
US20090144695A1 (en) * | 2007-11-30 | 2009-06-04 | Vallieswaran Vairavan | Method for ensuring consistency during software development |
US20120030577A1 (en) * | 2010-07-30 | 2012-02-02 | International Business Machines Corporation | System and method for data-driven web page navigation control |
JP5605109B2 (ja) * | 2010-09-14 | 2014-10-15 | 日本電気株式会社 | プログラム生成装置、方法及びプログラム並びに遠隔管理システム |
US9588576B2 (en) | 2011-09-12 | 2017-03-07 | Microsoft Technology Licensing, Llc | Managing processes within suspend states and execution states |
US9106690B1 (en) * | 2012-06-14 | 2015-08-11 | Bromium, Inc. | Securing an endpoint by proxying document object models and windows |
US9841863B1 (en) * | 2012-12-20 | 2017-12-12 | Open Text Corporation | Mechanism for partial page refresh using URL addressable hierarchical page structure |
US9356962B2 (en) * | 2013-09-10 | 2016-05-31 | Vmware, Inc. | Extensible multi-tenant cloud-management system and methods for extending functionalities and services provided by a multi-tenant cloud-managment system |
US9910640B2 (en) * | 2014-05-15 | 2018-03-06 | International Business Machines Corporation | Modeling representational state transfer application programming interfaces |
US10528366B2 (en) * | 2017-06-05 | 2020-01-07 | International Business Machines Corporation | Facilitating multi-inheritance within a single inheritance container-based environment |
-
2018
- 2018-06-07 US US16/003,023 patent/US11487514B2/en active Active
- 2018-09-24 JP JP2020517945A patent/JP7098721B2/ja active Active
- 2018-09-24 EP EP18793509.3A patent/EP3688582B1/en active Active
- 2018-09-24 CN CN201880060171.XA patent/CN111095207B/zh active Active
- 2018-09-24 WO PCT/US2018/052475 patent/WO2019067369A1/en unknown
-
2022
- 2022-06-29 JP JP2022104905A patent/JP7434431B2/ja active Active
- 2022-09-28 US US17/955,200 patent/US20230030331A1/en active Pending
-
2024
- 2024-02-07 JP JP2024017167A patent/JP2024054244A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2019067369A1 (en) | 2019-04-04 |
US20190095179A1 (en) | 2019-03-28 |
JP2024054244A (ja) | 2024-04-16 |
EP3688582B1 (en) | 2023-12-13 |
US20230030331A1 (en) | 2023-02-02 |
EP3688582A1 (en) | 2020-08-05 |
CN111095207A (zh) | 2020-05-01 |
US11487514B2 (en) | 2022-11-01 |
JP2020535548A (ja) | 2020-12-03 |
JP7434431B2 (ja) | 2024-02-20 |
JP2022130612A (ja) | 2022-09-06 |
JP7098721B2 (ja) | 2022-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111095207B (zh) | 提供状态管理持久化的方法、系统、存储设备和装置 | |
US8943424B2 (en) | Dynamic interface component control support | |
Syromiatnikov et al. | A journey through the land of model-view-design patterns | |
US8561048B2 (en) | Late and dynamic binding of pattern components | |
US8527939B2 (en) | GUI modeling of knowledge base in a modeling environment | |
US20090210781A1 (en) | Web application code decoupling and user interaction performance | |
WO2015042551A2 (en) | Method and system for selection of user interface rendering artifacts in enterprise web applications using a manifest mechanism | |
Snell et al. | Microsoft Visual Studio 2012 Unleashed: Micro Visua Studi 2012 Unl_p2 | |
US9460304B1 (en) | Data services generation | |
US20050257190A1 (en) | Developing and executing applications with configurable patterns | |
US11829707B2 (en) | Providing way to store process data object state as snapshots at different points of process | |
CN111095214B (zh) | 推迟的状态改变 | |
Wright et al. | Blazor WebAssembly by Example: A project-based guide to building web apps with. NET, Blazor WebAssembly, and C | |
Horemans et al. | Elmsvuur: A multi-tier version of elm and its time-traveling debugger | |
Bartlett | Interacting with Web Pages | |
Gaas | MAUI and Blazor Frameworks Possibilities for Creating Cross-platform Applications | |
Vo | DESKTOP APPLICATION WITH WINDOWS PRESENTATION FOUNDATION FOR INVENTORY MANAGEMENT | |
Nguyen | Full-stack crud application: User management system | |
Subramanian et al. | React State | |
Nguyen Huu Ngoc | Functional Reactive Programming in React Application | |
Singh | Programming Web Applications Declaratively A Qualitative Study | |
Mabbutt et al. | Handlers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |