From 0371e81d82fa7a5939980bec54bfcc31275a3bc5 Mon Sep 17 00:00:00 2001 From: Amigo <49749100+aamigo@users.noreply.github.com> Date: Fri, 26 Jul 2019 14:09:54 +0200 Subject: [PATCH] Updated 052 Automated database updates in Joomla during development of a component (markdown) --- ...oomla-during-development-of-a-component.md | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/052-Automated-database-updates-in-Joomla-during-development-of-a-component.md b/052-Automated-database-updates-in-Joomla-during-development-of-a-component.md index 3b0e25b..f3aedc0 100644 --- a/052-Automated-database-updates-in-Joomla-during-development-of-a-component.md +++ b/052-Automated-database-updates-in-Joomla-during-development-of-a-component.md @@ -16,8 +16,28 @@ Do take note that it runs this file only on a fresh install of the component, th [00:02:44](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h02m44s) -Now let's go make a change to the component and see how JCB updates these files. I'm going to install the component so we have it in the database. We can look at the database in the moment to see how things change. I'm going to open the Admin Views and I'm going to add [00:03:07](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m07s) a field to the Admin View called Sermon. It's going to be any generic field, so that we can at least see it in action. I'm going to call it Mobile Phone, and put in the fourth position, the left tab, that's not really important. We added a field. [00:03:34](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m34s) +Now let's go make a change to the component and see how JCB updates these files. I'm going to install the component so we have it in the database. We can look at the database in the moment to see how things change. I'm going to open the Admin Views and I'm going to add [00:03:07](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m07s) a field to the Admin View called Sermon. It's going to be any generic field, so that we can at least see it in action. I'm going to call it Mobile Phone, and put in the fourth position, the left tab, that's not really important. We added a field. ### Add A New View - JCB Combines These Values In One Update -???? -Now you could at this point also add a new view and JCB will detect both of them and will add both of them to the update file. You could even do that make this change, run the compiler, have this new update, then make another change, run the compiler, and it'll follow along incrementing the version [00:04:01](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m01s) value of the component as you go. Just for our sake, maybe let me add a view, already in another view and then you'll see how JCB combines these values in one update. I'm going to grab a view that isn't already part of this component and just for illustration. [00:04:26](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m26s) Save and close. There we go we have a view and a new field. If we compile the component now, it will do all those things that I've explained. There you see it's incremented into 2.0.1 and if we go to the zip file again, extracted, open it up, admin, sql, updates. [00:04:53](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m53s) We see there is a new file. Let's open this file, just investigate a little. We see here's the command to add that new field and here is another one to create that new table. All of that is been placed into this 2.0.0 [00:05:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m16s) file which like I said is the current version Of this installed Component If we look at the database at this point You see there is no Look table And if we look at the Sermon table and structure Then we see that there is you know No [00:05:36](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m36s) Mobile field here Ok so that's install it now and see the change Ok it's been successful go back to the table Let's just refresh this I know you have it Got field added if we go back to the new table that it had to create Scroll down And there is the new table So it's done both of those as expected [00:06:09](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m09s) Secondly let me show you where it made some changes in JCB To relation to this component so you'll see that the component has automatically incremented it's version number If we open this component updates area You'll see that it has dynamically Stored that same values that we saw on the file here next to the correct version And it is actually created a new Version entry You have to manually update this URL As there are too many variations here we couldn't actually implement this dynamically [00:06:49](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m49s) this URL is what is being used in your updates server file If your component is set to have an update server file And so At this point You can now continue even adding another view or even another field and it'll just the same it'll increment it and it will update your database upon installation And really that is as simple as it is There are some places where that behaviour may not function as expected The only one I'm very much aware of is the one that happens when you Actually import [00:07:32](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m32s) Or Export a component from one JCB to another Those of you that have used this you can export a component and then Import it Again That effectively creates all the data in the relation to JCB but it does'nt Recreate the history and the asset IDs and everything else which is related to its Integration Within the Joomla Interface or Database So that means for example your There is no history [00:08:08](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m08s) Regarding the admin views And the only way to start any history for that View Would be to open it And to save and close it That's the only way Now that specific area will have a history track Same goes with the admin views You have to open them and save them This one not the admin view itself but the actual Fields of the admin view [00:08:36](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m36s) Open them save them again This will create its first entry and serve as a reference point To last time to the which those values were changed If you compile the component at that point it will actually Add two component ID to that specific entries And use it as a reference point like I've said Then having after having compiled it so you first saved them then compile the component And then only start making your changes So that you'll basically Bring the component into the motion of What would be the natural [00:09:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m16s) Flow of development This natural flow that you would Create a component add views then add Fields to it all along saving closing saving And that generates the history values that we actually need To detect changes If you import a component none of those values exist and so It won't behave as expected Well that's just a heads up I supposed many of you might not even have this issue but If you do You will know at least where to look and what to do to fix it [00:09:51](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m51s) Anyway that is a Quick overview of JCB's Implementation To correspond to Joomla's conventions In creating tables And updating them Dynamically Through The SQL Files In the updates folder And yes I hope that [00:10:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m16s) This is gonna be helpful to to those who may not have understood this before Thanks for watching + +[00:03:34](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h03m34s) + +Now you could at this point also add a new view and JCB will detect both of them and will add both of them to the update file. You could even do that make this change, run the compiler, have this new update, then make another change, run the compiler, and it'll follow along incrementing the version [00:04:01](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m01s) value of the component as you go. Just for our sake, maybe let me add a view, already in another view and then you'll see how JCB combines these values into one update. I'm going to grab a view that isn't already part of this component and just for illustration. [00:04:26](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m26s) Save and close. There we go we have a view and a new field. If we compile the component now, it will do all those things that I've explained. There you see it's incremented into 2.0.1 and if we go to the zip file, again extracted, open it up, admin, sql, updates. [00:04:53](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h04m53s) We see there is a new file. Let's open this file, just investigate a little. We see here's the command to add that new field and here is another one to create that new table. All of that is been placed into this 2.0.0 [00:05:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m16s) file which like I said is the current version of this installed component. If we look at the database at this point you will see there is no Look table. If we look at the Sermon table and Structure then we see that there is you no [00:05:36](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h05m36s) Mobile field. Let's install it now and see the change. It's been successful, go back to the table. Let's just refresh this. There you have it, got field added. If we go back to the new table that it had to create, and there is the new table. It's done both of those as expected. + +### Component Automatically Incremented Its Version Number + +[00:06:09](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m09s) + +Secondly let me show you where it made some changes in JCB to relation to this component. You'll see that the component has automatically incremented it's version number. If we open this component updates area. You'll see that it has dynamically stored that same values that we saw on the file, next to the correct version, and it has created a new version entry. You have to manually update this URL. As there are too many variations here we couldn't implement this dynamically. [00:06:49](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h06m49s) This URL is what is being used in your updates server file, if your component is set to have an update server file. At this point you can now continue even adding another view or even another field and it'll just the same it'll increment it and it will update your database upon installation. That is as simple as it is. There are some places where that behavior may not function as expected. + +### Some Places That The Behavior May Not Function As Expected + +[00:07:24](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h07m24s) + +The only one I'm very much aware of is the one that happens when you import or export a component from one JCB to another. Those of you that have used this you can export a component and then import it again. That effectively creates all the data in the relation to JCB, but it doesn't recreate the history and the asset IDs and everything else which is related to its integration within the Joomla interface or database. + +### Example - Only Way To Start History - Open It - Save And Close It + +[00:08:02](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m02s) + +That means for example your there is no history regarding the admin views. The only way to start any history for that view would be to open it, and to save and close it. That's the only way. Now that specific area will have a history track. Same goes with the admin views. You have to open them and save them. This one not the admin view itself but the fields of the admin view. [00:08:36](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h08m36s) Open them, save them again. This will create its first entry and serve as a reference point to the last time to which those values were changed. If you compile the component at that point it will add two component IDs to that specific entries, and use it as a reference point like I've said. Then having after compiled it you first saved them, then compile the component and then only start making your changes. You'll bring the component into the motion of what would be the natural [00:09:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m16s) flow of development. This natural flow that you would create a component, add views, then add fields to it, all along saving, closing, saving. That generates the history values that we need to detect changes. If you import a component none of those values exist and so it won't behave as expected. Well that's just a heads up. I supposed many of you might not even have this issue but if you do, you will know at least where to look and what to do to fix it. [00:09:51](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h09m51s) That is a quick overview of JCB's implementation to correspond to Joomla's conventions in creating tables and updating them dynamically through the SQL files in the updates folder. I hope that [00:10:16](https://www.youtube.com/watch?v=zN2M15fzf_M&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&t=00h10m16s) this is going to be helpful to those who may not have understood this before. \ No newline at end of file