Alexander Case
Alexander Case

Reputation: 11

Buildfire: Private Portal plugin

I am having a very specific issue with a gateway plugin I am trying to finish.

I am trying to navigate to a different plugin using

'buildfire.pluginInstance.get($scope.deepLinnk,function (err, plugin) {
    if (err) {
    $scope.status = 'error!';
    }
    else {
    console.log(plugin);
    $scope.navigateSignIn(plugin);}

                                });
$scope.navigateSignIn = function (plugin) {
              buildfire.navigation.navigateTo({
                      pluginId: plugin.token,
                      instanceId: plugin.instanceId,
                      title: plugin.title,
                      folderName: plugin.pluginTypeId
                  });
                };

The navigateTo object is the only way I can get buildfire.navigate.navigateTo to work for buildfire made plugins.

However, when I try to navigate to plugins that I have created, the debugger shows and an alert saying "cannot load config file" then the entire platform crashes and makes me sign in again.

How can I navigate to plugins that I have created?

Upvotes: 0

Views: 130

Answers (1)

Daniel_Madain
Daniel_Madain

Reputation: 491

How are you getting the pluginId, instanceId and folderName? You cant simply save them or hard code them in. You need to initiate a dynamic data lookup see https://github.com/BuildFire/sdk/wiki/How-to-use-the-Datastore-Dynamic-Data

also you can look at an example such as the folder plugin https://github.com/BuildFire/folderPlugin/blob/d84551feb06cfc304c325480ca96d87795a66929/widget/widget.controller.js#L163

Basically every time a plugin is updated the plugin identifiers like folderName or title may change. So you need to keep your reference data fresh using dynamic data.

Here is a simple example that may draw a better picture. If you are referencing a plugin titled "Holiday Sales" so you save to your datastore collection {title: "Holiday Sales"} and hence forth refer to it by that title. This may work for a short period of time. However, if the app owner changes the title to "Summer Sale" now your copy is out-of-date. In traditional databases you would have 2 tables one with the source of truth and the other would have a foreign key referencing the first table. This way you join and always display the latest data.

Dynamic data is sort of an assisted lookup for you. You simply give it a key and what that key references. Then at run time when you make the call it will make the lookup you need server side and return to you the latest data you are looking for.

sample:

buildfire.datastore.save("MyData",{
    _buildfire: { /// key identifier
        myPluginsToNavTo: {
            data:["123123-123123","asdasda-asdasd"] /// plugin instances
            ,dataType: "pluginInstance"
        }
    }
}); 

======

buildfire.datastore.getWithDynamicData("MyData",function(err,data){
// data would be:
/*
_buildfire: { /// key identifier
        myPluginsToNavTo: {
            data:["55f71347d06b61b4010351dc","asdasda-asdasd"]
            ,dataType: "pluginInstance"
            ,result: [ /// <=============new property added dynamically
                {
                    "id": "55f71347d06b61b4010351dc",
                    "data": {
                        "pluginTypeId": 3212,
                        "token": "6372b101-addf-45da-bb0a-9208a09e7b6b",
                        "title": "YouTube Plugin",
                        "iconUrl": "http://s3-us-west-2.amazonaws.com/pluginserver/plugins/6372b101-addf-45da-bb0a-9208a09e7b6b/resources/image.png",
                    }
                    ,{
                    "id": "asdasda-asdasd",
                    "data": {
                        "pluginTypeId": 123123,
                        "token": "1223123123-addf-45da-bb0a-9208a09e7b6b",
                        "title": "Plugin 2",
                        "iconUrl": "...",
                    }
                }
                }
            ]
        }
    }
*/
});

hope this helps

Upvotes: 0

Related Questions