9 Replies Latest reply on Aug 6, 2007 8:38 AM by aBill

    I Need Assistance with a Hierarchical Collection

    lowroller
      Hello,

      I have three collections, A, B, and C. B is a collection contained within A, and C is a collection contained in B.

      When I add a new item to collection C, the item is temporarily added to the collection correctly and then the collection is quickly replaced with the last item added. I have come to this conclusion after watching all items(mutiple items) of collection C being displayed in a DataGrid correctly only to have them replaced within a second with the last added item only.

      I have modeled the application after the "Contact" sample with Assemblers, DAOs, config files, etc. If anyone has any ideas on how to correct this, I would appreciate it. I think it is probably a setup issue within FDS XML files or something simple, but I have tried multiple changes with no luck.

      Thanks!
        • 1. Re: I Need Assistance with a Hierarchical Collection
          aBill
          Hello

          Need more information from it. What are the associations among Collection A, B and C? How do you add item to collection C?


          Thanks

          William Chan
          • 2. Re: I Need Assistance with a Hierarchical Collection
            lowroller Level 1
            Here are some code snippets. Please let me know if you need additional information.

            Another interesting thing I've seen is the code works correctly if I wait several minutes between adding new players. It seems to be some type of timing issue in FDS. Thanks!

            Load the collections...

            private function initComp():void {
            parties = new ArrayCollection();
            dsParties = new DataService("partyList");
            dsParties.addEventListener(MessageEvent.RESULT, resultHandler);
            dsParties.fill(parties);
            }

            private function resultHandler(event:ResultEvent):void {
            dgParties.selectedIndex = 0;
            party = Party(parties.getItemAt(0));
            tables = party.tables;

            dgTables.selectedIndex = 0;
            table = Table(tables.getItemAt(0));
            players = table.players;
            }



            Add a new player...

            private function addPlayer():void {
            var tmpPlayer:Player = new Player();

            tmpPlayer.playerId = 22;
            tmpPlayer.playerName = "Johnny";
            tmpPlayer.tableId = 1;
            tmpPlayer.startingBalance = 100;
            tmpPlayer.seatNum = 1;

            players.addItem(tmpPlayer);
            }
            • 3. Re: I Need Assistance with a Hierarchical Collection
              aBill Level 1
              Not sure what your assembler code is. However, it looks like you persist your player on the player assembler. What I mean you don't need any player data send to the table assembler to update table's player. There is a setting in association definition called read-only. Try set it to true in your table assembler's players association. By setting this, FDS can determine your creation sequence

              William Chan
              • 4. Re: I Need Assistance with a Hierarchical Collection
                lowroller Level 1
                Are you referrig to the setup in the data-management-config.xml file? Assuming it is, I have tried the following and it did not work. Is this setup as you suggested? Once again, thank you very much for your time!

                <metadata>
                <identity property="tableId"/>
                <one-to-many property="players" destination="playerList" read-only="true"/>
                </metadata>
                • 5. Re: I Need Assistance with a Hierarchical Collection
                  aBill Level 1
                  Hi,

                  Yes, it is what I mean. I think it should be configuration issue, I tried something similar and it worked. Can you send me your destination definitions to me wichan@adobe.com? I would like to give it a try
                  Thanks

                  William
                  • 6. Re: I Need Assistance with a Hierarchical Collection
                    lowroller Level 1
                    Instead of using read-only=true, I was able to use lazy=true and solve the problem. Thanks again for your time. With your help, I was able to gain a better understanding of how FDS handles these collections
                    • 7. Re: I Need Assistance with a Hierarchical Collection
                      aBill Level 1
                      Hello,

                      I was over looked the problem. I found that your player contain tableid. In object oriented FDS, it works with object not its id
                      I just tried your scenario, it worked for me. Your player should not contain tableid. I can email my application for you as a sample

                      William Chan
                      • 8. Re: I Need Assistance with a Hierarchical Collection
                        aBill Level 1
                        hello

                        The followings are my class definitions
                        package
                        {
                        import flash.net.registerClassAlias;
                        import mx.collections.ArrayCollection;
                        import mx.data.IManaged;
                        import mx.data.utils.Managed;

                        [RemoteClass(alias="dataservice.associations.lvl3.Party")]
                        [Managed]
                        public class Party
                        {
                        public var id : uint;
                        public var name : String;
                        public var tables: ArrayCollection;
                        }
                        }

                        package
                        {
                        import flash.net.registerClassAlias;
                        import mx.collections.ArrayCollection;
                        import mx.data.IManaged;
                        import mx.data.utils.Managed;

                        [RemoteClass(alias="dataservice.associations.lvl3.Table")]
                        [Managed]
                        public class Table
                        {
                        public var id : uint;
                        public var name : String;
                        public var players: ArrayCollection;
                        }
                        }

                        package
                        {
                        import flash.net.registerClassAlias;
                        import mx.collections.ArrayCollection;
                        import mx.data.IManaged;
                        import mx.data.utils.Managed;

                        [RemoteClass(alias="dataservice.associations.lvl3.Player")]
                        [Managed]
                        public class Player
                        {
                        public var id : uint;
                        public var lastname : String;
                        public var firstname : String;

                        }
                        }
                        • 9. Re: I Need Assistance with a Hierarchical Collection
                          aBill Level 1
                          My function to add player
                          public function createAssociationsByObjectGraph():void
                          {
                          party = new Party()
                          party.name = "party1";
                          party.tables = new ArrayCollection();
                          party.tables.addItem(new Table());
                          party.tables.addItem(new Table());

                          party.tables.getItemAt(0).players = new ArrayCollection();
                          player = new Player();
                          player.firstname = "Apple";
                          player.lastname = "Red";
                          party.tables.getItemAt(0).players.addItem(player);
                          player = new Player();
                          player.firstname = "Bananna";
                          player.lastname = "Yellow";
                          party.tables.getItemAt(0).players.addItem(player);

                          party.tables.getItemAt(1).players = new ArrayCollection();
                          player = new Player();
                          player.firstname = "Orange";
                          player.lastname = "Orange";
                          party.tables.getItemAt(1).players.addItem(player);
                          player = new Player();
                          player.firstname = "George";
                          player.lastname = "Lucas";
                          party.tables.getItemAt(1).players.addItem(player);
                          ptDS.createItem(party);
                          ptDS.commit();
                          }

                          public function addPlayer():void
                          {
                          player = new Player();
                          player.firstname = "George";
                          player.lastname = "Lucas";
                          parties_dg.selectedItem.tables.getItemAt(1).players.addItem(player);
                          ptDS.commit();
                          }

                          ]]>
                          </Script>
                          <Button click="createAssociationsByObjectGraph()" label="CreatePartyTablesPlayers"/>
                          <Button click="addPlayer()" label="addPlayer" enabled="{parties_dg.selectedItem != null}"/>